diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAADODrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAADODrv.dad deleted file mode 100644 index 67701a8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAADODrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DABDEDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DABDEDrv.dad deleted file mode 100644 index 5ab25b5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DABDEDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAConverter.exe b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAConverter.exe deleted file mode 100644 index 6674dff..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAConverter.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM3Drv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM3Drv.dad deleted file mode 100644 index 9ab5882..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM3Drv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM4Drv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM4Drv.dad deleted file mode 100644 index a786421..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBISAM4Drv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBXDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBXDrv.dad deleted file mode 100644 index beb7998..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DADBXDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAFIBDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAFIBDrv.dad deleted file mode 100644 index 8c6f1a3..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAFIBDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBDACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBDACDrv.dad deleted file mode 100644 index a1684a0..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBDACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBODrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBODrv.dad deleted file mode 100644 index 11d5435..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBODrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBXDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBXDrv.dad deleted file mode 100644 index 31321de..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAIBXDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMyDACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMyDACDrv.dad deleted file mode 100644 index c3ad98c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMyDACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMySQLDACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMySQLDACDrv.dad deleted file mode 100644 index 3828b23..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAMySQLDACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DANexusDBDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DANexusDBDrv.dad deleted file mode 100644 index c29646c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DANexusDBDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAODACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAODACDrv.dad deleted file mode 100644 index 09bfbf7..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAODACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAPostgresDACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAPostgresDACDrv.dad deleted file mode 100644 index ad71fbf..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAPostgresDACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASDACDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASDACDrv.dad deleted file mode 100644 index e8da910..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASDACDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASQLiteDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASQLiteDrv.dad deleted file mode 100644 index dacd42d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASQLiteDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.chm b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.chm deleted file mode 100644 index 12c8ab8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.chm and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.exe b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.exe deleted file mode 100644 index d6e3dd1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DASchemaModeler.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAServer.exe b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAServer.exe deleted file mode 100644 index 32d478f..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAServer.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAZeosDrv.dad b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAZeosDrv.dad deleted file mode 100644 index 3bcd9d6..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DAZeosDrv.dad and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/Data Abstract.lic b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/Data Abstract.lic deleted file mode 100644 index 4a7a704..0000000 --- a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/Data Abstract.lic +++ /dev/null @@ -1,18 +0,0 @@ -7e9532fcddea8496fc5a4fcde1436a9699b26462ec6fea27c2214d0557daf34b30f2e18c57963dc8f8749b269a8c567699774067f377e2ce735cb9e349d1a46fa002a2cf3e040b4665a785ff9bb6e6819c75521e760ed2c8dfd7838299ca3077817d7af7b7b9e618057fca99043a9c9f39b8e102dedd5825ecb456863e01f638f293855b7cc32b37444ee0c65943263b3d9ea3c63696888edb7063cb9c6152a0065e406783cdbeb2c002ed540b2cc2db45d79ec25d94340b008be62c3a6bbd225ac126af436e79817e1c25112733df83beea64b87d9fb8f61a49069b14344d524e8193c7927fe1e549b9ff141c48bf55035a69dac30ced62a235ec36204157ff -42136d2acb941b75d9ffa07e7eb9b77727e4d23d4029cbcd897d99993181ada6c21ca1ba05e717e01ac3e5241786017b73131498b37d5927a3d673e6055ba470 -Name=Marla Criss -Email=admin@servag.info -UserId={437B006F-CF40-4815-8EC6-C2FD5FCF0D31} -Company=null -LicenseType=Full -ProductName=Data Abstract -Version=5 -AllowBeta=0 -Trial=0 -SubscriptionEndDate=2008-6-26 -LicenseFileEndDate=2007-8-28 -StartDate=2007-8-25 -EndDate=5000-1-1 -P1=15744247810778059108 -P2=18050079178886083178 -P3=979414793 diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DefaultConnections.ini b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DefaultConnections.ini deleted file mode 100644 index fd8e300..0000000 --- a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/DefaultConnections.ini +++ /dev/null @@ -1,14 +0,0 @@ -[Delphi] -AdventureWorks=ADO?AuxDriver=SQLNCLI.1;Server=localhost;Database=AdventureWorks;Schemas=1;Integrated Security=SSPI -Northwind=ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Integrated Security=SSPI -Employee=IBX?Server=localhost;Database=C:\Program Files\Firebird\Firebird_1_5\examples\EMPLOYEE.FDB;UserID=sysdba;Password=masterkey; - -[.NET] -AdventureWorks=MSSQL2005.NET?Database=AdventureWorks;Server=localhost;Integrated Security=SSPI -Northwind=MSSQL.NET?Database=Northwind;Server=localhost;Integrated Security=SSPI -Employee=FB.NET?Server=localhost;Database=C:\Program Files\Firebird\Firebird_1_5\examples\EMPLOYEE.FDB;UserID=sysdba;Password=masterkey; - -[Descriptions] -AdventureWorks_Description=Microsoft SQL Server 2005, localhost -Northwind_Description=Microsoft SQL Server 2000, localhost -Employee_Description=Firebird/Interbase, localhost diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/borlndmm.dll b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/borlndmm.dll deleted file mode 100644 index 2e3ede2..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/borlndmm.dll and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/sqlite3.dll b/internal/5.0.23.613/1/Data Abstract (Common)/Bin/sqlite3.dll deleted file mode 100644 index 7111873..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract (Common)/Bin/sqlite3.dll and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.002 b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.002 deleted file mode 100644 index 270ad45..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.002 and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.exe b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.exe deleted file mode 100644 index 270ad45..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.ini b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.ini deleted file mode 100644 index d2ebb4d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/H2Reg.ini +++ /dev/null @@ -1,108 +0,0 @@ -[MAIN] -DebugMode=0 ;set to 1 to log everything - Check your resources (ship with =0) -DumpNSToLog_before=0 ;Very verbose but good for debugging - dumps all NS info to log file before Registration -DumpNSToLog_after=0 ;Very verbose but good for debugging - dumps all NS info to log file after Registration -OKtoReport_FinalRegError=0 ;Report general error at end if a registration error was logged -OKtoReport_FinalUnRegError=0 ;Report general error at end if a unregistration error was logged - -;Advanced feature - These can be set then used as etc specifiers. They can -;also be set via the H2Reg.exe command line. Command line has preference over INI file. -UserDir1='' -UserDir2='' -UserDir3='' -UserDir4='' - -; Resource Strings - -[en] ; English -ErrSt_SysFileNotFound = 'Installation Error. Error reading system file or file not found.|%s' -ErrSt_MSHelp2RTNotFound = 'MS Help 2.x runtime files are not installed on this PC.' -ErrSt_NotAdminMode = 'You must be logged on as an Administrator.' -ErrSt_Extra = 'Installation/registration of Help files cannot proceed.' - -Msg_Registering = 'Registering Online Documentation Files:' -Msg_UnRegistering = 'Unregistering Online Documentation Files:' -Msg_LoggingNSInfo = 'Logging Namespace Info' -Msg_Registering_Namespaces = 'Registering Namespaces' -Msg_Registering_Titles = 'Registering Titles' -Msg_Registering_Plugins = 'Registering Plug-ins' -Msg_Registering_Filters = 'Registering Filters' -Msg_UnRegistering_Namespaces = 'Unregistering Namespaces' -Msg_UnRegistering_Titles = 'Unregistering Titles' -Msg_UnRegistering_Plugins = 'Unregistering Plug-ins' -Msg_UnRegistering_Filters = 'Unregistering Filters' - -Msg_Merging_Namespaces = 'Merging Help Indexes. This may take several minutes' - -PopupSt_FinalRegError='There were errors reported while Registering help files.||View Log file?' -PopupSt_FinalUnRegError='There were errors reported while Unregistering help files.||View Log file?' - -; International Strings - Defaults to [en] -[de] ; German -[ja] ; Japanese -[fr] ; French -[es] ; Spanish -[it] ; Italian -[ko] ; Korean -[cn] ; Chinese (Simplified) -[tw] ; Chinese (Traditional) -[sv] ; Swedish -[nl] ; Dutch -[ru] ; Russian -[ar] ; Arabic -[he] ; Hebrew -[da] ; Danish -[no] ; Norwegian -[fi] ; Finnish -[pt] ; Portuguese -[br] ; Brazilian -[cs] ; Czech -[pl] ; Polish -[hu] ; Hungarian -[el] ; Greek -[tr] ; Turkish -[sl] ; Slovenian -[sk] ; Slovakian -[eu] ; Basque -[ca] ; Catalan - -;--- Optionally you can place your Registration Commands in this file - -;------- Register -r switch - -[Reg_Namespace] -;|| -remobjects.sdk.delphi|RemObjects SDK for Delphi.HxC|RemObjects SDK for Delphi - www.remobjects.com - -[Reg_Title] -;|||||||||| -remobjects.sdk.delphi|rosdkdelphi|1033|RemObjects SDK for Delphi.HxS|RemObjects SDK for Delphi.HxI - -[Reg_Plugin] -;|||| -remobjects|_DEFAULT|remobjects.sdk.delphi|_DEFAULT|RemObjects SDK for Delphi.HxA - -[Reg_Filter] -;|| -remobjects.sdk.delphi|RemObjects SDK for Delphi|("Product"="RemObjects SDK") AND ("Platform"="Delphi") -remobjects.sdk.delphi|RemObjects SDK|("Product"="RemObjects SDK") - -;------- UnRegister -u switch - -[UnReg_Namespace] -; -remobjects.sdk.delphi - -[UnReg_Title] -;|| -remobjects.sdk.delphi|rosdkdelphi|1033 - -[UnReg_Plugin] -;|||| -remobjects|_DEFAULT|remobjects.sdk.delphit|_DEFAULT|RemObjects SDK for Delphi.HxA - -[UnReg_Filter] -;| -remobjects.sdk.delphi|RemObjects SDK for Delphi -remobjects.sdk.delphi|RemObjects SDK - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/Launch.exe b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/Launch.exe deleted file mode 100644 index 4b346d2..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/Launch.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/RegisterDelphiHelp.exe b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/RegisterDelphiHelp.exe deleted file mode 100644 index 9536667..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/RegisterDelphiHelp.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/h2reg.001 b/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/h2reg.001 deleted file mode 100644 index 2e77dbc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/BACKUP/h2reg.001 +++ /dev/null @@ -1,108 +0,0 @@ -[MAIN] -DebugMode=0 ;set to 1 to log everything - Check your resources (ship with =0) -DumpNSToLog_before=0 ;Very verbose but good for debugging - dumps all NS info to log file before Registration -DumpNSToLog_after=0 ;Very verbose but good for debugging - dumps all NS info to log file after Registration -OKtoReport_FinalRegError=0 ;Report general error at end if a registration error was logged -OKtoReport_FinalUnRegError=0 ;Report general error at end if a unregistration error was logged - -;Advanced feature - These can be set then used as etc specifiers. They can -;also be set via the H2Reg.exe command line. Command line has preference over INI file. -UserDir1='' -UserDir2='' -UserDir3='' -UserDir4='' - -; Resource Strings - -[en] ; English -ErrSt_SysFileNotFound = 'Installation Error. Error reading system file or file not found.|%s' -ErrSt_MSHelp2RTNotFound = 'MS Help 2.x runtime files are not installed on this PC.' -ErrSt_NotAdminMode = 'You must be logged on as an Administrator.' -ErrSt_Extra = 'Installation/registration of Help files cannot proceed.' - -Msg_Registering = 'Registering Online Documentation Files:' -Msg_UnRegistering = 'Unregistering Online Documentation Files:' -Msg_LoggingNSInfo = 'Logging Namespace Info' -Msg_Registering_Namespaces = 'Registering Namespaces' -Msg_Registering_Titles = 'Registering Titles' -Msg_Registering_Plugins = 'Registering Plug-ins' -Msg_Registering_Filters = 'Registering Filters' -Msg_UnRegistering_Namespaces = 'Unregistering Namespaces' -Msg_UnRegistering_Titles = 'Unregistering Titles' -Msg_UnRegistering_Plugins = 'Unregistering Plug-ins' -Msg_UnRegistering_Filters = 'Unregistering Filters' - -Msg_Merging_Namespaces = 'Merging Help Indexes. This may take several minutes' - -PopupSt_FinalRegError='There were errors reported while Registering help files.||View Log file?' -PopupSt_FinalUnRegError='There were errors reported while Unregistering help files.||View Log file?' - -; International Strings - Defaults to [en] -[de] ; German -[ja] ; Japanese -[fr] ; French -[es] ; Spanish -[it] ; Italian -[ko] ; Korean -[cn] ; Chinese (Simplified) -[tw] ; Chinese (Traditional) -[sv] ; Swedish -[nl] ; Dutch -[ru] ; Russian -[ar] ; Arabic -[he] ; Hebrew -[da] ; Danish -[no] ; Norwegian -[fi] ; Finnish -[pt] ; Portuguese -[br] ; Brazilian -[cs] ; Czech -[pl] ; Polish -[hu] ; Hungarian -[el] ; Greek -[tr] ; Turkish -[sl] ; Slovenian -[sk] ; Slovakian -[eu] ; Basque -[ca] ; Catalan - -;--- Optionally you can place your Registration Commands in this file - -;------- Register -r switch - -[Reg_Namespace] -;|| -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi.HxC|RemObjects Data Abstract for Delphi - www.remobjects.com - -[Reg_Title] -;|||||||||| -remobjects.dataabstract.delphi|rodadelphi|1033|RemObjects Data Abstract for Delphi.HxS|RemObjects Data Abstract for Delphi.HxI - -[Reg_Plugin] -;|||| -remobjects|_DEFAULT|remobjects.dataabstract.delphi|_DEFAULT|RemObjects Data Abstract for Delphi.HxA - -[Reg_Filter] -;|| -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi|("Product"="RemObjects Data Abstract") AND ("Platform"="Delphi") -remobjects.dataabstract.delphi|RemObjects Data Abstract|("Product"="RemObjects Data Abstract") - -;------- UnRegister -u switch - -[UnReg_Namespace] -; -remobjects.dataabstract.delphi - -[UnReg_Title] -;|| -remobjects.dataabstract.delphi|rodadelphi|1033 - -[UnReg_Plugin] -;|||| -remobjects|_DEFAULT|remobjects.dataabstract.delphi|_DEFAULT|RemObjects Data Abstract for Delphi.HxA - -[UnReg_Filter] -;| -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi -remobjects.dataabstract.delphi|RemObjects Data Abstract - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.bpl deleted file mode 100644 index d831d57..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.dcp deleted file mode 100644 index 5384227..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_ADODriver_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.bpl deleted file mode 100644 index 5ef58c5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.dcp deleted file mode 100644 index ab26411..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_BDEDriver_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.bpl deleted file mode 100644 index 161d594..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.dcp deleted file mode 100644 index 3af66fb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Core_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.bpl deleted file mode 100644 index 44c9abd..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.dcp deleted file mode 100644 index 65170c5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.bpl deleted file mode 100644 index dcc9d01..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.dcp deleted file mode 100644 index 8260847..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_DBXDriver_D10B.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.bpl deleted file mode 100644 index 911a719..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.dcp deleted file mode 100644 index 9ec27eb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IBXDriver_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.bpl deleted file mode 100644 index 6b1caa6..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.dcp deleted file mode 100644 index 6120e76..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_IDE_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.bpl deleted file mode 100644 index 2e5fdf1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.dcp deleted file mode 100644 index 2950fd5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_SQLiteDriver_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.bpl deleted file mode 100644 index 0cd50b8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.dcp deleted file mode 100644 index 64aa451..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D10/DataAbstract_Scripting_D10.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.bpl deleted file mode 100644 index 910a555..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.dcp deleted file mode 100644 index 27a6fce..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_ADODriver_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.bpl deleted file mode 100644 index d22cfd8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.dcp deleted file mode 100644 index 47310a6..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_BDEDriver_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.bpl deleted file mode 100644 index 245a02c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.dcp deleted file mode 100644 index ec2beca..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Core_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.bpl deleted file mode 100644 index 4d23e2c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.dcp deleted file mode 100644 index 03b3f92..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_DBXDriver_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.bpl deleted file mode 100644 index f64cc61..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.dcp deleted file mode 100644 index 0d5447e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IBXDriver_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.bpl deleted file mode 100644 index bf86904..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.dcp deleted file mode 100644 index 99f7894..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_IDE_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.bpl deleted file mode 100644 index 00216fb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.dcp deleted file mode 100644 index 0c5aab8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_SQLiteDriver_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.bpl deleted file mode 100644 index 2a4a30c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.dcp deleted file mode 100644 index ca4a317..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D6/DataAbstract_Scripting_D6.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.bpl deleted file mode 100644 index 47e730a..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.dcp deleted file mode 100644 index 74b72a7..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_ADODriver_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.bpl deleted file mode 100644 index b4f5042..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.dcp deleted file mode 100644 index db8159b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_BDEDriver_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.bpl deleted file mode 100644 index 09e7a8e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.dcp deleted file mode 100644 index 0dcdb23..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Core_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.bpl deleted file mode 100644 index dc76763..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.dcp deleted file mode 100644 index 75ade6d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_DBXDriver_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.bpl deleted file mode 100644 index 59b9c0e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.dcp deleted file mode 100644 index 46faa72..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IBXDriver_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.bpl deleted file mode 100644 index 1d24f6b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.dcp deleted file mode 100644 index a4afb54..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_IDE_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.bpl deleted file mode 100644 index 45ded0e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.dcp deleted file mode 100644 index 1095ed4..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_SQLiteDriver_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.bpl b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.bpl deleted file mode 100644 index 20b4031..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.bpl and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.dcp b/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.dcp deleted file mode 100644 index 781442a..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Dcu/D7/DataAbstract_Scripting_D7.dcp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/H2Reg_Log.txt b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/H2Reg_Log.txt deleted file mode 100644 index 5de21a4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/H2Reg_Log.txt +++ /dev/null @@ -1,129 +0,0 @@ -=============================================================================== -Log File: C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\H2Reg_Log.txt -Date: 07/09/2007 15:45:40 -Operating System: Windows XP 5.1 (Build 2600) Service Pack 2 -SysLocale.DefaultLCID: 0x0C0A (3082) -SysLocale.PriLangID: 0x000A (10) -SysLocale.SubLangID: 0x0003 (3) -DecimalSeparator: , -------------------------------------------------------------------------------- -EXE Path = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\H2Reg.exe -Cmdline Param(s) = -r -Actual CmdLine = "C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\H2Reg.exe" -r -_RunDir = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help -_ModuleName = H2Reg.exe -_ModuleDir = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help -------------------------------------------------------------------------------- -_hhInstalled = YES -_hhVerStr = 5.2.3790.2847 -_hhFriendlyVerStr = > 1.4a -------------------------------------------------------------------------------- -_ieInstalled = YES -_ieVerStr = 6.0.2900.3086 -_ieFriendlyVerStr = > Internet Explorer 6 SP1 -=============================================================================== -MS Help 2.x Runtime Found: YES - 2.5.50727.42, C:\Archivos de programa\Archivos comunes\Microsoft Shared\Help\hxds.dll - 2.5.50727.42, C:\Archivos de programa\Archivos comunes\Microsoft Shared\Help\hxvz.dll -NT Admin Log On: YES -PC Language ID = es -------------------------------------------------------------------------------- -Quiet Mode (-Q): No -Registration Mode (-R): Yes -UnRegistration Mode (-U): No -Append Log Mode (-A): No -No NT Admin Check (-N): No -Merge Indexes Mode (-M): No -Cmd Script File (CmdFile=): C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\H2Reg.ini -User Dir 1 (UserDir1=): -User Dir 2 (UserDir2=): -User Dir 3 (UserDir3=): -User Dir 4 (UserDir4=): -=============================================================================== -CmdFile = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\H2Reg.ini - = C:\WINDOWS - = C:\WINDOWS\system32 - = C:\Archivos de programa - = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help - = C:\ARCHIV~1\REMOBJ~1\DATAAB~1 - = C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help - = C:\ARCHIV~1\REMOBJ~1\DATAAB~1 - = - = - = - = - = - = - = - = -------------------------------------------------------------------------------- -[Reg_Namespace] -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi.HxC|RemObjects Data Abstract for Delphi - www.remobjects.com - -[Reg_Title] -remobjects.dataabstract.delphi|rodadelphi|1033|RemObjects Data Abstract for Delphi.HxS|RemObjects Data Abstract for Delphi.HxI - -[Reg_Plugin] -remobjects|_DEFAULT|remobjects.dataabstract.delphi|_DEFAULT|RemObjects Data Abstract for Delphi.HxA - -[Reg_Filter] -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi|("Product"="RemObjects Data Abstract") AND ("Platform"="Delphi") -remobjects.dataabstract.delphi|RemObjects Data Abstract|("Product"="RemObjects Data Abstract") - -[UnReg_Namespace] -remobjects.dataabstract.delphi - -[UnReg_Title] -remobjects.dataabstract.delphi|rodadelphi|1033 - -[UnReg_Plugin] -remobjects|_DEFAULT|remobjects.dataabstract.delphi|_DEFAULT|RemObjects Data Abstract for Delphi.HxA - -[UnReg_Filter] -remobjects.dataabstract.delphi|RemObjects Data Abstract for Delphi -remobjects.dataabstract.delphi|RemObjects Data Abstract -------------------------------------------------------------------------------- -15:45:40 [Reg_Namespace] - Lines To Process = 1 -15:45:40 ="remobjects.dataabstract.delphi" -15:45:40 ="C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\RemObjects Data Abstract for Delphi.HxC" -15:45:40 ="RemObjects Data Abstract for Delphi - www.remobjects.com" -15:45:40 +Mode = Not Enabled -15:45:40 -->Registered OK -------------------------------------------------------------------------------- -15:45:40 [Reg_Title] - Lines To Process = 1 -15:45:40 ="remobjects.dataabstract.delphi" -15:45:40 ="rodadelphi" -15:45:40 ="1033" -15:45:40 ="C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\RemObjects Data Abstract for Delphi.HxS" -15:45:40 ="C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\RemObjects Data Abstract for Delphi.HxI" -15:45:40 ="" -15:45:40 ="" -15:45:40 ="" -15:45:40 ="" -15:45:40 ="" -15:45:40 ="" -15:45:40 -->Registered OK -------------------------------------------------------------------------------- -15:45:40 [Reg_Plugin] - Lines To Process = 1 -15:45:40 ="remobjects" -15:45:40 ="_DEFAULT" -15:45:40 ="remobjects.dataabstract.delphi" -15:45:40 ="_DEFAULT" -15:45:40 ="C:\ARCHIV~1\REMOBJ~1\DATAAB~1\Help\RemObjects Data Abstract for Delphi.HxA" -15:45:40 Plug Child "remobjects.dataabstract.delphi" into "remobjects" -15:45:40 -->Registered OK -------------------------------------------------------------------------------- -15:45:40 [Reg_Filter] - Lines To Process = 2 -15:45:40 ="remobjects.dataabstract.delphi" -15:45:40 ="RemObjects Data Abstract for Delphi" -15:45:40 ="("Product"="RemObjects Data Abstract") AND ("Platform"="Delphi")" -15:45:40 -->Registered OK -15:45:40 -15:45:40 ="remobjects.dataabstract.delphi" -15:45:40 ="RemObjects Data Abstract" -15:45:40 ="("Product"="RemObjects Data Abstract")" -15:45:40 -->Registered OK -=============================================================================== - ---END OF FILE-- - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RegisterDelphiHelp.exe b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RegisterDelphiHelp.exe deleted file mode 100644 index 9536667..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RegisterDelphiHelp.exe and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxA b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxA deleted file mode 100644 index 58af9fd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxA +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxC b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxC deleted file mode 100644 index b21c2bd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxC +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxI b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxI deleted file mode 100644 index f04e86e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxI and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxS b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxS deleted file mode 100644 index 8bd967b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxS and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxT b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxT deleted file mode 100644 index 0bab18c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.HxT +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.als b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.als deleted file mode 100644 index 25315b9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.als +++ /dev/null @@ -1,543 +0,0 @@ -edaschemamodeleronly -edaschemamodeleronly_object -idaadoconnection -idaadoconnection_object -idaadoconnection_providername -idaadoconnection_providertype -idaconnection -idaconnection_begintransaction -idaconnection_close -idaconnection_committransaction -idaconnection_connected -idaconnection_connectionstring -idaconnection_intransaction -idaconnection_name -idaconnection_newcommand -idaconnection_newdataset -idaconnection_object -idaconnection_open -idaconnection_password -idaconnection_rollbacktransaction -idaconnection_userid -idadataset -idadataset_active -idadataset_close -idadataset_eof -idadataset_fieldbyname -idadataset_fieldcount -idadataset_fields -idadataset_fieldvalues -idadataset_isempty -idadataset_next -idadataset_object -idadataset_open -idadelta -idadelta_add -idadelta_changes -idadelta_clear -idadelta_count -idadelta_isnewrecord -idadelta_keyfieldcount -idadelta_keyfieldnames -idadelta_loggedfieldcount -idadelta_loggedfieldnames -idadelta_loggedfieldtypes -idadelta_logicalname -idadelta_object -idadelta_removechange -idaibconnectionproperties -idaibconnectionproperties_charset -idaibconnectionproperties_object -idaibconnectionproperties_role -idaibconnectionproperties_sqldialect -idaibtransactionaccess -idaibtransactionaccess_commit -idaibtransactionaccess_commitretaining -idaibtransactionaccess_object -idaibtransactionaccess_rollback -idaibtransactionaccess_rollbackretaining -idaibtransactionaccess_transaction -idainterbaseconnection -idainterbaseconnection_object -idaoracleconnection -idaoracleconnection_object -idasqlcommand -idasqlcommand_execute -idasqlcommand_name -idasqlcommand_object -idasqlcommand_parambyname -idasqlcommand_params -idasqlcommand_prepared -idasqlcommand_refreshparams -idasqlcommand_sql -idasqlcommand_where -tbaseloginservice -tbaseloginservice_object -tbaseloginservice_onlogout -tdaadodatatable -tdaadodatatable_object -tdaadodriver -tdaadodriver_object -tdabasefield -tdabasefield_asboolean -tdabasefield_ascurrency -tdabasefield_asdatetime -tdabasefield_asfloat -tdabasefield_asinteger -tdabasefield_aslargeint -tdabasefield_asstring -tdabasefield_asvariant -tdabasefield_aswidestring -tdabasefield_blobtype -tdabasefield_clear -tdabasefield_datatype -tdabasefield_description -tdabasefield_dictionaryentry -tdabasefield_generatorname -tdabasefield_isnull -tdabasefield_name -tdabasefield_object -tdabasefield_size -tdabasefield_value -tdabindatastreamer -tdabindatastreamer_object -tdabusinessprocessor -tdabusinessprocessor_businessrulesid -tdabusinessprocessor_currentchange -tdabusinessprocessor_currentdelta -tdabusinessprocessor_deletecommandname -tdabusinessprocessor_insertcommandname -tdabusinessprocessor_object -tdabusinessprocessor_onafterprocesschange -tdabusinessprocessor_onafterprocessdelta -tdabusinessprocessor_onbeforeprocesschange -tdabusinessprocessor_onbeforeprocessdelta -tdabusinessprocessor_ongeneratesql -tdabusinessprocessor_onprocesschange -tdabusinessprocessor_onprocesserror -tdabusinessprocessor_onrefreshdeltachange -tdabusinessprocessor_processoroptions -tdabusinessprocessor_referenceddataset -tdabusinessprocessor_refreshdatasetname -tdabusinessprocessor_schema -tdabusinessprocessor_updatecommandname -tdabusinessprocessor_updatemode -tdabusinessprocessor_userupdatefields -tdacache -tdacache_object -tdacdsdatatable -tdacdsdatatable_applyupdates -tdacdsdatatable_nativeloadfromfile -tdacdsdatatable_nativeloadfromstream -tdacdsdatatable_nativesavetofile -tdacdsdatatable_nativesavetostream -tdacdsdatatable_object -tdacolumnmapping -tdacolumnmapping_datasetfield -tdacolumnmapping_object -tdacolumnmapping_sqlorigin -tdacolumnmapping_tablefield -tdaconnectionmanager -tdaconnectionmanager_clearpool -tdaconnectionmanager_connections -tdaconnectionmanager_drivermanager -tdaconnectionmanager_maxpoolsize -tdaconnectionmanager_newconnection -tdaconnectionmanager_object -tdaconnectionmanager_onconnectionacquired -tdaconnectionmanager_onconnectioncreated -tdaconnectionmanager_onconnectionfailure -tdaconnectionmanager_onconnectiontimedout -tdaconnectionmanager_poolbehaviour -tdaconnectionmanager_poolingenabled -tdaconnectionmanager_poolsize -tdaconnectionmanager_pooltimeoutseconds -tdaconnectionmanager_pooltransactionbehaviour -tdaconnectionmanager_waitintervalseconds -tdacustomfield -tdacustomfield_alignment -tdacustomfield_businessclassid -tdacustomfield_calculated -tdacustomfield_customattributes -tdacustomfield_defaultvalue -tdacustomfield_displayformat -tdacustomfield_displaylabel -tdacustomfield_displaywidth -tdacustomfield_editformat -tdacustomfield_editmask -tdacustomfield_fieldcollection -tdacustomfield_inprimarykey -tdacustomfield_keyfields -tdacustomfield_loadfromstream -tdacustomfield_logchanges -tdacustomfield_lookup -tdacustomfield_lookupcache -tdacustomfield_lookupkeyfields -tdacustomfield_lookupresultfield -tdacustomfield_lookupsource -tdacustomfield_object -tdacustomfield_oldvalue -tdacustomfield_onchange -tdacustomfield_onvalidate -tdacustomfield_readonly -tdacustomfield_regexpression -tdacustomfield_required -tdacustomfield_savetostream -tdacustomfield_serverautorefresh -tdacustomfield_visible -tdadatadictionary -tdadatadictionary_fields -tdadatadictionary_object -tdadatadictionaryfield -tdadatadictionaryfield_object -tdadataset -tdadataset_businessclassid -tdadataset_businessrulesclient -tdadataset_businessrulesserver -tdadataset_fieldbyname -tdadataset_fields -tdadataset_object -tdadatasetprovider -tdadatasetprovider_datatable -tdadatasetprovider_object -tdadatasetrelationship -tdadatasetrelationship_description -tdadatasetrelationship_detaildatasetname -tdadatasetrelationship_detailfields -tdadatasetrelationship_masterdatasetname -tdadatasetrelationship_masterfields -tdadatasetrelationship_name -tdadatasetrelationship_object -tdadatasource -tdadatasource_datatable -tdadatasource_object -tdadatastreamer -tdadatastreamer_object -tdadatatable -tdadatatable_active -tdadatatable_applyupdates -tdadatatable_businessrulesid -tdadatatable_cancelupdates -tdadatatable_close -tdadatatable_closing -tdadatatable_delta -tdadatatable_detailfields -tdadatatable_detailoptions -tdadatatable_editing -tdadatatable_eof -tdadatatable_fetching -tdadatatable_fieldbyname -tdadatatable_fieldcount -tdadatatable_fields -tdadatatable_fieldvalues -tdadatatable_hasdelta -tdadatatable_hasdeltarecursive -tdadatatable_isempty -tdadatatable_loadfromfile -tdadatatable_loadfromremotesource -tdadatatable_loadfromstream -tdadatatable_loadschema -tdadatatable_loadscript -tdadatatable_localconnection -tdadatatable_localdatastreamer -tdadatatable_localschema -tdadatatable_logchanges -tdadatatable_logicalname -tdadatatable_masterfields -tdadatatable_mastermappingmode -tdadatatable_masteroptions -tdadatatable_masterparamsmappings -tdadatatable_masterrequestmappings -tdadatatable_mastersource -tdadatatable_maxrecords -tdadatatable_mergedelta -tdadatatable_object -tdadatatable_onafterapplyupdates -tdadatatable_onafterfieldchange -tdadatatable_onaftermergedelta -tdadatatable_onbeforeapplyupdates -tdadatatable_onbeforefieldchange -tdadatatable_onbeforemergedelta -tdadatatable_open -tdadatatable_opening -tdadatatable_parambyname -tdadatatable_params -tdadatatable_readonly -tdadatatable_recordcount -tdadatatable_remotedataadapter -tdadatatable_remotefetchenabled -tdadatatable_remoteupdatesoptions -tdadatatable_savetofile -tdadatatable_savetostream -tdadatatable_scriptcode -tdadatatable_storeactive -tdadatatable_streamingoptions -tdadatatable_where -tdadbisamdriver -tdadbisamdriver_object -tdadbsessionmanager -tdadbsessionmanager_clearsessionscommand -tdadbsessionmanager_clearsessionsoncreate -tdadbsessionmanager_clearsessionsondestroy -tdadbsessionmanager_connection -tdadbsessionmanager_deletesessioncommand -tdadbsessionmanager_fieldnamecreated -tdadbsessionmanager_fieldnamedata -tdadbsessionmanager_fieldnamelastaccessed -tdadbsessionmanager_fieldnamesessionid -tdadbsessionmanager_getallsessionidsdataset -tdadbsessionmanager_getsessioncountdataset -tdadbsessionmanager_getsessiondataset -tdadbsessionmanager_insertsessioncommand -tdadbsessionmanager_object -tdadbsessionmanager_onconvertguid -tdadbsessionmanager_schema -tdadbsessionmanager_updatesessioncommand -tdadbxdriver -tdadbxdriver_object -tdadelta -tdadelta_add -tdadelta_changes -tdadelta_clear -tdadelta_count -tdadelta_isnewrecord -tdadelta_keyfieldcount -tdadelta_keyfieldnames -tdadelta_loggedfieldcount -tdadelta_loggedfieldnames -tdadelta_loggedfieldtypes -tdadelta_object -tdadelta_removechange -tdadeltachange -tdadeltachange_changetype -tdadeltachange_delta -tdadeltachange_message -tdadeltachange_newvaluebyname -tdadeltachange_newvalues -tdadeltachange_object -tdadeltachange_oldvaluebyname -tdadeltachange_oldvalues -tdadeltachange_recid -tdadeltachange_refreshedbyserver -tdadeltachange_status -tdadiagrams -tdadiagrams_object -tdadrivermanager -tdadrivermanager_autoload -tdadrivermanager_drivercount -tdadrivermanager_driverdirectory -tdadrivermanager_driverinfo -tdadrivermanager_drivers -tdadrivermanager_loaddriver -tdadrivermanager_loaddrivers -tdadrivermanager_object -tdadrivermanager_ondriverloaded -tdadrivermanager_ondriverunloaded -tdadrivermanager_unloadalldrivers -tdadrivermanager_unloaddriver -tdafibdriver -tdafibdriver_object -tdafield -tdafield_calculated -tdafield_dictionaryentry -tdafield_inprimarykey -tdafield_keyfields -tdafield_lookup -tdafield_lookupcache -tdafield_lookupkeyfields -tdafield_lookupresultfield -tdafield_lookupsource -tdafield_object -tdafield_onchange -tdafield_onvalidate -tdagetdatarequest -tdagetdatarequest_incomingdataparameter -tdagetdatarequest_object -tdagetdatarequest_outgoingincludeschemaparameter -tdagetdatarequest_outgoingmaxrecordsparameter -tdagetdatarequest_outgoingparamsparameter -tdagetdatarequest_outgoingtablenamesparameter -tdagetdatarequest_outgoingtablerequestinfosparameter -tdagetschemarequest -tdagetschemarequest_incomingschemaparameter -tdagetschemarequest_object -tdagetschemarequest_outgoingfilterparameter -tdagetscriptsrequest -tdagetscriptsrequest_incomingscriptparameter -tdagetscriptsrequest_object -tdagetscriptsrequest_outgoingtablenamesparameter -tdaibodriver -tdaibodriver_object -tdaibxdriver -tdaibxdriver_object -tdamydacdriver -tdamydacdriver_object -tdamysqldacdriver -tdamysqldacdriver_object -tdaodacdriver -tdaodacdriver_object -tdaparam -tdaparam_asstring -tdaparam_object -tdaparam_paramtype -tdaparam_value -tdapostgresdacdriver -tdapostgresdacdriver_object -tdapoweredbydataabstractbutton -tdapoweredbydataabstractbutton_object -tdapsscriptingprovider -tdapsscriptingprovider_object -tdapsscriptingprovider_scriptengine -tdaremotedataadapter -tdaremotedataadapter_afterapplyupdates -tdaremotedataadapter_aftergetdatacall -tdaremotedataadapter_aftergetschemacall -tdaremotedataadapter_aftergetscriptscall -tdaremotedataadapter_afterupdatedatacall -tdaremotedataadapter_applyupdates -tdaremotedataadapter_beforeapplyupdates -tdaremotedataadapter_beforegetdatacall -tdaremotedataadapter_beforegetschemacall -tdaremotedataadapter_beforegetscriptscall -tdaremotedataadapter_beforeupdatedatacall -tdaremotedataadapter_cacheschema -tdaremotedataadapter_datastreamer -tdaremotedataadapter_fill -tdaremotedataadapter_fillschema -tdaremotedataadapter_fillscripts -tdaremotedataadapter_flushschema -tdaremotedataadapter_getdatacall -tdaremotedataadapter_getschemacall -tdaremotedataadapter_getscriptscall -tdaremotedataadapter_object -tdaremotedataadapter_remoteservice -tdaremotedataadapter_schema -tdaremotedataadapter_setupdefaultrequest -tdaremotedataadapter_setupdefaultrequestv3 -tdaremotedataadapter_updatedatacall -tdaremotedataadapterrequest -tdaremotedataadapterrequest_methodname -tdaremotedataadapterrequest_object -tdaremotedataadapterrequest_params -tdaremoteservice -tdaremoteservice_object -tdaschema -tdaschema_clear -tdaschema_commands -tdaschema_connectionmanager -tdaschema_datadictionary -tdaschema_datasets -tdaschema_diagrams -tdaschema_object -tdaschema_relationships -tdaschema_updaterules -tdascriptingprovider -tdascriptingprovider_object -tdasdacdriver -tdasdacdriver_object -tdasqlcommand -tdasqlcommand_description -tdasqlcommand_name -tdasqlcommand_object -tdasqlcommand_parambyname -tdasqlcommand_params -tdasqlcommand_sqlcommandcollection -tdasqlcommand_statements -tdastatement -tdastatement_columnmappings -tdastatement_connection -tdastatement_name -tdastatement_needsparams -tdastatement_object -tdastatement_sql -tdastatement_statementcollection -tdastatement_statementtype -tdastatement_targettable -tdataabstractservice -tdataabstractservice_acquireconnection -tdataabstractservice_afteracquireconnection -tdataabstractservice_afterexecutecommand -tdataabstractservice_aftergetdatasetdata -tdataabstractservice_aftergetdatasetschema -tdataabstractservice_afterprocessdeltas -tdataabstractservice_afterreleaseconnection -tdataabstractservice_allowdataaccess -tdataabstractservice_allowexecutecommands -tdataabstractservice_allowexecutesql -tdataabstractservice_allowschemaaccess -tdataabstractservice_allowwheresql -tdataabstractservice_autocreatebusinessprocessors -tdataabstractservice_beforeacquireconnection -tdataabstractservice_beforeexecutecommand -tdataabstractservice_beforegetdatasetdata -tdataabstractservice_beforegetdatasetschema -tdataabstractservice_beforeprocessdeltas -tdataabstractservice_beforereleaseconnection -tdataabstractservice_connection -tdataabstractservice_connectionname -tdataabstractservice_exporteddatatables -tdataabstractservice_object -tdataabstractservice_onacquireconnectionfailure -tdataabstractservice_onbusinessprocessorautocreated -tdataabstractservice_ongetschemaasxmlevent -tdataabstractservice_onprocessdeltaserror -tdataabstractservice_onupdatedatabegintransaction -tdataabstractservice_onupdatedatacommittransaction -tdataabstractservice_onupdatedatarollbacktransaction -tdataabstractservice_processdeltaswithoutupdaterules -tdataabstractservice_releaseconnection -tdataabstractservice_servicedatastreamer -tdataabstractservice_serviceschema -tdataabstractservice_validatecommandexecution -tdataabstractservice_validatedatasetaccess -tdataabstractservice_validatedirectsqlaccess -tdaupdatedatarequest -tdaupdatedatarequest_incomingdeltaparameter -tdaupdatedatarequest_object -tdaupdatedatarequest_outgoingdeltaparameter -tdaupdaterule -tdaupdaterule_datasetname -tdaupdaterule_dodelete -tdaupdaterule_doinsert -tdaupdaterule_doupdate -tdaupdaterule_failurebehavior -tdaupdaterule_name -tdaupdaterule_object -tdawhere -tdawhere_addcondition -tdawhere_addconditions -tdawhere_addoperator -tdawhere_addtext -tdawhere_addvaluegroup -tdawhere_changed -tdawhere_clause -tdawhere_clear -tdawhere_clientfields -tdawhere_closebracket -tdawhere_defaultoperator -tdawhere_empty -tdawhere_object -tdawhere_onchange -tdawhere_openbracket -tdaxmldatastreamer -tdaxmldatastreamer_documentname -tdaxmldatastreamer_object -tdaxmldatastreamer_options -tdaxmldatastreamer_readxslt -tdaxmldatastreamer_rowoptions -tdaxmldatastreamer_schemaoptions -tdaxmldatastreamer_skipnull -tdaxmldatastreamer_writexslt -tmultidbloginservice -tmultidbloginservice_object -tmultidbloginservice_onlogin -tsimpleloginservice -tsimpleloginservice_object -tsimpleloginservice_onlogin -userinfo -userinfo_attributes -userinfo_object -userinfo_privileges -userinfo_sessionid -userinfo_userdata -userinfo_userid diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.cnt b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.cnt deleted file mode 100644 index f206a75..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.cnt +++ /dev/null @@ -1,629 +0,0 @@ -:Base RemObjects Data Abstract for Delphi.hlp>MAIN -:Title RemObjects Data Abstract for Delphi -1 Welcome to Data Abstract -2 Welcome to Data Abstract=id_1 -2 What's New in Data Abstract -3 What's New in Data Abstract=id_9 -3 Breaking Changes=id_11 -2 Overview of DA Components -3 Overview of DA Components=id_5 -1 Programming with Data Abstract -2 Programming with Data Abstract=id_3 -2 Concepts -3 Concepts=id_35 -3 Schemas=id_38 -3 Database Drivers -4 Database Drivers=id_33 -4 Driver Components=id_60 -3 Connection Pooling -4 Connection Pooling=id_41 -3 Transaction Handling -4 Transaction Handling=id_42 -3 Command and Data Table Parameters -4 Command and Data Table Parameters=id_43 -3 Where Clauses -4 Where Clauses=id_45 -3 Master/Detail Relationships -4 Master/Detail Relationships=id_46 -3 Updates -4 Updates=id_47 -4 Deltas and Delta Changes=id_79 -4 AutoIncs and Generators=id_72 -4 Update Rules=id_80 -3 Cross Database Support -4 Cross Database Support=id_49 -4 Column Mapping=id_53 -3 Business Rules Scripts -4 Business Rules Scripts=id_50 -3 Dynamic Method Binding -4 Dynamic Method Binding=id_51 -4 The New v4.0 Service Interface=id_109 -2 IDE Integration -3 IDE Integration=id_36 -3 New Project Templates=id_113 -3 Component Editors -4 Component Editors=id_114 -4 Remote Data Adapter Design-Time Support=id_116 -4 Data Table Design-Time Support -5 Data Table Design-Time Support=id_117 -5 Master/Detail Wizard=id_73 -2 Comparing .NET and Delphi Implementations of Data Abstract -3 Comparing .NET and Delphi Implementations of Data Abstract=id_4 -1 Tools -2 Schema Modeler -3 Schema Modeler=id_6 -3 Schema Modeler Overview=id_132 -3 Data Tables Pane=id_54 -3 Commands Pane=id_55 -3 Detail Pane -4 Detail Pane=id_136 -4 Data Table Details=id_137 -4 Command Details=id_138 -4 Connection Details=id_139 -4 Relationships View=id_70 -4 Data Dictionary Editor=id_140 -4 Update Rules View=id_89 -4 Diagramming and Modeling Support=id_71 -4 Schema Modeler Welcome Page=id_133 -3 Connections Pane -4 Connections Pane=id_134 -3 Data Explorer -4 Data Explorer=id_135 -3 SQL Editor -4 SQL Editor=id_141 -1 Data Abstract Reference -2 Data Abstract Reference=id_7 -2 Classes -3 EDASchemaModelerOnly Class=id_155 -3 TBaseLoginService Class -4 TBaseLoginService Class=id_156 -4 TBaseLoginService.OnLogout Property=id_234 -3 TDAADODataTable Class -4 TDAADODataTable Class=id_23 -3 TDAADODriver Class -4 TDAADODriver Class=id_129 -3 TDABaseField Class -4 TDABaseField Class=id_159 -4 TDABaseField.AsBoolean Property=id_319 -4 TDABaseField.AsCurrency Property=id_320 -4 TDABaseField.AsDateTime Property=id_321 -4 TDABaseField.AsFloat Property=id_322 -4 TDABaseField.AsInteger Property=id_323 -4 TDABaseField.AsLargeInt Property=id_324 -4 TDABaseField.AsString Property=id_325 -4 TDABaseField.AsVariant Property=id_326 -4 TDABaseField.AsWideString Property=id_327 -4 TDABaseField.BlobType Property=id_328 -4 TDABaseField.DataType Property=id_316 -4 TDABaseField.Description Property=id_330 -4 TDABaseField.DictionaryEntry Property=id_331 -4 TDABaseField.GeneratorName Property=id_332 -4 TDABaseField.IsNull Property=id_333 -4 TDABaseField.Name Property=id_315 -4 TDABaseField.Size Property=id_329 -4 TDABaseField.Value Property=id_317 -4 TDABaseField.Clear Method=id_335 -3 TDABinDataStreamer Class -4 TDABinDataStreamer Class=id_13 -3 TDABusinessProcessor Class -4 TDABusinessProcessor Class=id_27 -4 TDABusinessProcessor.BusinessRulesID Property=id_380 -4 TDABusinessProcessor.CurrentChange Property=id_381 -4 TDABusinessProcessor.CurrentDelta Property=id_382 -4 TDABusinessProcessor.DeleteCommandName Property=id_383 -4 TDABusinessProcessor.InsertCommandName Property=id_384 -4 TDABusinessProcessor.OnAfterProcessChange Event=id_83 -4 TDABusinessProcessor.OnAfterProcessDelta Event=id_390 -4 TDABusinessProcessor.OnBeforeProcessChange Event=id_82 -4 TDABusinessProcessor.OnBeforeProcessDelta Event=id_81 -4 TDABusinessProcessor.OnGenerateSQL Event=id_391 -4 TDABusinessProcessor.OnProcessChange Event=id_392 -4 TDABusinessProcessor.OnProcessError Event=id_393 -4 TDABusinessProcessor.OnRefreshDeltaChange Event=id_394 -4 TDABusinessProcessor.ProcessorOptions Property=id_218 -4 TDABusinessProcessor.ReferencedDataset Property=id_378 -4 TDABusinessProcessor.RefreshDatasetName Property=id_385 -4 TDABusinessProcessor.Schema Property=id_376 -4 TDABusinessProcessor.UpdateCommandName Property=id_386 -4 TDABusinessProcessor.UpdateMode Property=id_387 -4 TDABusinessProcessor.UserUpdateFields Property=id_388 -3 TDACache Class -4 TDACache Class=id_30 -3 TDACDSDataTable Class -4 TDACDSDataTable Class=id_22 -4 TDACDSDataTable.ApplyUpdates Method=id_423 -4 TDACDSDataTable.NativeLoadFromFile Method=id_424 -4 TDACDSDataTable.NativeLoadFromStream Method=id_425 -4 TDACDSDataTable.NativeSaveToFile Method=id_426 -4 TDACDSDataTable.NativeSaveToStream Method=id_427 -3 TDAColumnMapping Class -4 TDAColumnMapping Class=id_161 -4 TDAColumnMapping.DatasetField Property=id_93 -4 TDAColumnMapping.SQLOrigin Property=id_95 -4 TDAColumnMapping.TableField Property=id_94 -3 TDAConnectionManager Class -4 TDAConnectionManager Class=id_19 -4 TDAConnectionManager.Connections Property=id_162 -4 TDAConnectionManager.DriverManager Property=id_174 -4 TDAConnectionManager.MaxPoolSize Property=id_452 -4 TDAConnectionManager.OnConnectionAcquired Event=id_460 -4 TDAConnectionManager.OnConnectionCreated Event=id_461 -4 TDAConnectionManager.OnConnectionFailure Event=id_462 -4 TDAConnectionManager.OnConnectionTimedOut Event=id_463 -4 TDAConnectionManager.PoolBehaviour Property=id_453 -4 TDAConnectionManager.PoolingEnabled Property=id_454 -4 TDAConnectionManager.PoolSize Property=id_456 -4 TDAConnectionManager.PoolTimeoutSeconds Property=id_457 -4 TDAConnectionManager.PoolTransactionBehaviour Property=id_63 -4 TDAConnectionManager.WaitIntervalSeconds Property=id_458 -4 TDAConnectionManager.ClearPool Method=id_465 -4 TDAConnectionManager.NewConnection Method=id_455 -3 TDACustomField Class -4 TDACustomField Class=id_163 -4 TDACustomField.Alignment Property=id_355 -4 TDACustomField.BusinessClassID Property=id_350 -4 TDACustomField.Calculated Property=id_489 -4 TDACustomField.CustomAttributes Property=id_490 -4 TDACustomField.DefaultValue Property=id_356 -4 TDACustomField.DisplayFormat Property=id_353 -4 TDACustomField.DisplayLabel Property=id_352 -4 TDACustomField.DisplayWidth Property=id_351 -4 TDACustomField.EditFormat Property=id_359 -4 TDACustomField.EditMask Property=id_358 -4 TDACustomField.FieldCollection Property=id_491 -4 TDACustomField.InPrimaryKey Property=id_492 -4 TDACustomField.KeyFields Property=id_493 -4 TDACustomField.LogChanges Property=id_495 -4 TDACustomField.Lookup Property=id_496 -4 TDACustomField.LookupCache Property=id_498 -4 TDACustomField.LookupKeyFields Property=id_499 -4 TDACustomField.LookupResultField Property=id_497 -4 TDACustomField.LookupSource Property=id_494 -4 TDACustomField.OldValue Property=id_500 -4 TDACustomField.OnChange Event=id_506 -4 TDACustomField.OnValidate Event=id_507 -4 TDACustomField.ReadOnly Property=id_357 -4 TDACustomField.RegExpression Property=id_360 -4 TDACustomField.Required Property=id_361 -4 TDACustomField.ServerAutoRefresh Property=id_501 -4 TDACustomField.Visible Property=id_354 -4 LoadFromStream Method -5 TDACustomField.LoadFromStream Method (IROStream)=id_503 -5 TDACustomField.LoadFromStream Method (TStream)=id_530 -4 SaveToStream Method -5 TDACustomField.SaveToStream Method (IROStream)=id_504 -5 TDACustomField.SaveToStream Method (TStream)=id_531 -3 TDADataDictionary Class -4 TDADataDictionary Class=id_21 -4 TDADataDictionary.Fields Property=id_536 -3 TDADataDictionaryField Class -4 TDADataDictionaryField Class=id_164 -3 TDADataset Class -4 TDADataset Class=id_165 -4 TDADataset.BusinessRulesClient Property=id_561 -4 TDADataset.Fields Property=id_563 -4 TDADataset.FieldByName Method=id_566 -3 TDADatasetProvider Class -4 TDADatasetProvider Class=id_26 -4 TDADatasetProvider.DataTable Property=id_576 -3 TDADatasetRelationship Class -4 TDADatasetRelationship Class=id_168 -4 TDADatasetRelationship.Description Property=id_585 -3 TDADataSource Class -4 TDADataSource Class=id_24 -4 TDADataSource.DataTable Property=id_601 -3 TDADataStreamer Class -4 TDADataStreamer Class=id_77 -3 TDADataTable Class -4 TDADataTable Class=id_25 -4 TDADataTable.Active Property=id_261 -4 TDADataTable.BusinessRulesID Property=id_262 -4 TDADataTable.Closing Property=id_263 -4 TDADataTable.Delta Property=id_170 -4 TDADataTable.DetailFields Property=id_124 -4 TDADataTable.DetailOptions Property=id_210 -4 TDADataTable.Editing Property=id_265 -4 TDADataTable.EOF Property=id_266 -4 TDADataTable.Fetching Property=id_267 -4 TDADataTable.FieldCount Property=id_268 -4 TDADataTable.Fields Property=id_269 -4 TDADataTable.FieldValues Property=id_270 -4 TDADataTable.HasDelta Property=id_271 -4 TDADataTable.HasDeltaRecursive Property=id_272 -4 TDADataTable.IsEmpty Property=id_273 -4 TDADataTable.LocalConnection Property=id_274 -4 TDADataTable.LocalDataStreamer Property=id_275 -4 TDADataTable.LocalSchema Property=id_276 -4 TDADataTable.LogChanges Property=id_278 -4 TDADataTable.LogicalName Property=id_86 -4 TDADataTable.MasterFields Property=id_123 -4 TDADataTable.MasterMappingMode Property=id_128 -4 TDADataTable.MasterOptions Property=id_213 -4 TDADataTable.MasterParamsMappings Property=id_125 -4 TDADataTable.MasterRequestMappings Property=id_126 -4 TDADataTable.MasterSource Property=id_264 -4 TDADataTable.MaxRecords Property=id_279 -4 TDADataTable.OnAfterApplyUpdates Event=id_302 -4 TDADataTable.OnAfterFieldChange Event=id_303 -4 TDADataTable.OnAfterMergeDelta Event=id_304 -4 TDADataTable.OnBeforeApplyUpdates Event=id_305 -4 TDADataTable.OnBeforeFieldChange Event=id_306 -4 TDADataTable.OnBeforeMergeDelta Event=id_307 -4 TDADataTable.Opening Property=id_280 -4 TDADataTable.Params Property=id_281 -4 TDADataTable.ReadOnly Property=id_282 -4 TDADataTable.RecordCount Property=id_283 -4 TDADataTable.RemoteDataAdapter Property=id_284 -4 TDADataTable.RemoteFetchEnabled Property=id_277 -4 TDADataTable.RemoteUpdatesOptions Property=id_220 -4 TDADataTable.ScriptCode Property=id_285 -4 TDADataTable.StoreActive Property=id_286 -4 TDADataTable.StreamingOptions Property=id_223 -4 TDADataTable.Where Property=id_287 -4 TDADataTable.ApplyUpdates Method=id_104 -4 TDADataTable.CancelUpdates Method=id_293 -4 TDADataTable.Close Method=id_294 -4 TDADataTable.FieldByName Method=id_295 -4 TDADataTable.LoadFromFile Method=id_121 -4 TDADataTable.LoadFromRemoteSource Method=id_296 -4 TDADataTable.LoadFromStream Method=id_297 -4 TDADataTable.LoadSchema Method=id_107 -4 TDADataTable.LoadScript Method=id_98 -4 TDADataTable.MergeDelta Method=id_298 -4 TDADataTable.Open Method=id_102 -4 TDADataTable.ParamByName Method=id_299 -4 TDADataTable.SaveToFile Method=id_122 -4 TDADataTable.SaveToStream Method=id_300 -3 TDADBISAMDriver Class -4 TDADBISAMDriver Class=id_171 -3 TDADBSessionManager Class -4 TDADBSessionManager Class=id_28 -4 TDADBSessionManager.ClearSessionsCommand Property=id_685 -4 TDADBSessionManager.ClearSessionsOnCreate Property=id_686 -4 TDADBSessionManager.ClearSessionsOnDestroy Property=id_687 -4 TDADBSessionManager.Connection Property=id_675 -4 TDADBSessionManager.DeleteSessionCommand Property=id_679 -4 TDADBSessionManager.FieldNameCreated Property=id_682 -4 TDADBSessionManager.FieldNameData Property=id_681 -4 TDADBSessionManager.FieldNameLastAccessed Property=id_683 -4 TDADBSessionManager.FieldNameSessionID Property=id_680 -4 TDADBSessionManager.GetAllSessionIDsDataset Property=id_688 -4 TDADBSessionManager.GetSessionCountDataSet Property=id_689 -4 TDADBSessionManager.GetSessionDataSet Property=id_676 -4 TDADBSessionManager.InsertSessionCommand Property=id_677 -4 TDADBSessionManager.OnConvertGUID Event=id_691 -4 TDADBSessionManager.Schema Property=id_674 -4 TDADBSessionManager.UpdateSessionCommand Property=id_678 -3 TDADBXDriver Class -4 TDADBXDriver Class=id_172 -3 TDADelta Class -4 TDADelta Class=id_173 -4 TDADelta.Changes Property=id_712 -4 TDADelta.Count Property=id_713 -4 TDADelta.KeyFieldCount Property=id_723 -4 TDADelta.KeyFieldNames Property=id_724 -4 TDADelta.LoggedFieldCount Property=id_725 -4 TDADelta.LoggedFieldNames Property=id_726 -4 TDADelta.LoggedFieldTypes Property=id_727 -4 Add Method -5 TDADelta.Add Method (TDADeltaChange)=id_733 -5 TDADelta.Add Method (integer, TDAChangeType, TDAChangeStatus, string)=id_745 -4 TDADelta.Clear Method -5 TDADelta.Clear Method=id_734 -4 TDADelta.IsNewRecord Method -5 TDADelta.IsNewRecord Method=id_735 -4 TDADelta.RemoveChange Method -5 TDADelta.RemoveChange Method=id_736 -3 TDADeltaChange Class -4 TDADeltaChange Class=id_84 -4 TDADeltaChange.ChangeType Property=id_748 -4 TDADeltaChange.Delta Property=id_759 -4 TDADeltaChange.Message Property=id_756 -4 TDADeltaChange.NewValueByName Property=id_760 -4 TDADeltaChange.NewValues Property=id_755 -4 TDADeltaChange.OldValueByName Property=id_761 -4 TDADeltaChange.OldValues Property=id_754 -4 TDADeltaChange.RecID Property=id_762 -4 TDADeltaChange.RefreshedByServer Property=id_529 -4 TDADeltaChange.Status Property=id_757 -3 TDADiagrams Class -4 TDADiagrams Class=id_29 -3 TDADriverManager Class -4 TDADriverManager Class=id_18 -4 TDADriverManager.AutoLoad Property=id_782 -4 TDADriverManager.DriverCount Property=id_784 -4 TDADriverManager.DriverDirectory Property=id_783 -4 TDADriverManager.DriverInfo Property=id_785 -4 TDADriverManager.Drivers Property=id_786 -4 TDADriverManager.OnDriverLoaded Event=id_788 -4 TDADriverManager.OnDriverUnloaded Event=id_789 -4 TDADriverManager.LoadDriver Method=id_791 -4 TDADriverManager.LoadDrivers Method=id_792 -4 TDADriverManager.UnloadAllDrivers Method=id_793 -4 TDADriverManager.UnloadDriver Method=id_794 -3 TDAFIBDriver Class -4 TDAFIBDriver Class=id_175 -3 TDAField Class -4 TDAField Class=id_160 -4 TDAField.Calculated Property=id_815 -4 TDAField.DictionaryEntry Property=id_816 -4 TDAField.InPrimaryKey Property=id_817 -4 TDAField.KeyFields Property=id_818 -4 TDAField.Lookup Property=id_819 -4 TDAField.LookupCache Property=id_820 -4 TDAField.LookupKeyFields Property=id_821 -4 TDAField.LookupResultField Property=id_822 -4 TDAField.LookupSource Property=id_823 -4 TDAField.OnChange Event=id_826 -4 TDAField.OnValidate Event=id_827 -3 TDAGetDataRequest Class -4 TDAGetDataRequest Class=id_176 -4 TDAGetDataRequest.IncomingDataParameter Property=id_844 -4 TDAGetDataRequest.OutgoingIncludeSchemaParameter Property=id_847 -4 TDAGetDataRequest.OutgoingMaxRecordsParameter Property=id_848 -4 TDAGetDataRequest.OutgoingParamsParameter Property=id_849 -4 TDAGetDataRequest.OutgoingTableNamesParameter Property=id_845 -4 TDAGetDataRequest.OutgoingTableRequestInfosParameter Property=id_850 -3 TDAGetSchemaRequest Class -4 TDAGetSchemaRequest Class=id_177 -4 TDAGetSchemaRequest.IncomingSchemaParameter Property=id_862 -4 TDAGetSchemaRequest.OutgoingFilterParameter Property=id_864 -3 TDAGetScriptsRequest Class -4 TDAGetScriptsRequest Class=id_178 -4 TDAGetScriptsRequest.IncomingScriptParameter Property=id_873 -4 TDAGetScriptsRequest.OutgoingTableNamesParameter Property=id_874 -3 TDAIBODriver Class -4 TDAIBODriver Class=id_179 -3 TDAIBXDriver Class -4 TDAIBXDriver Class=id_130 -3 TDAMyDACDriver Class -4 TDAMyDACDriver Class=id_180 -3 TDAMySQLDacDriver Class -4 TDAMySQLDacDriver Class=id_181 -3 TDAODACDriver Class -4 TDAODACDriver Class=id_182 -3 TDAParam Class -4 TDAParam Class=id_44 -4 TDAParam.AsString Property=id_891 -4 TDAParam.ParamType Property=id_889 -4 TDAParam.Value Property=id_892 -3 TDAPostgresDACDriver Class -4 TDAPostgresDACDriver Class=id_183 -3 TDAPoweredByDataAbstractButton Class -4 TDAPoweredByDataAbstractButton Class=id_184 -3 TDAPSScriptingProvider Class -4 TDAPSScriptingProvider Class=id_32 -4 TDAPSScriptingProvider.ScriptEngine Property=id_904 -3 TDARemoteDataAdapter Class -4 TDARemoteDataAdapter Class=id_12 -4 TDARemoteDataAdapter.AfterApplyUpdates Event=id_917 -4 TDARemoteDataAdapter.AfterGetDataCall Event=id_918 -4 TDARemoteDataAdapter.AfterGetSchemaCall Event=id_919 -4 TDARemoteDataAdapter.AfterGetScriptsCall Event=id_920 -4 TDARemoteDataAdapter.AfterUpdateDataCall Event=id_921 -4 TDARemoteDataAdapter.BeforeApplyUpdates Event=id_922 -4 TDARemoteDataAdapter.BeforeGetDataCall Event=id_923 -4 TDARemoteDataAdapter.BeforeGetSchemaCall Event=id_924 -4 TDARemoteDataAdapter.BeforeGetScriptsCall Event=id_925 -4 TDARemoteDataAdapter.BeforeUpdateDataCall Event=id_926 -4 TDARemoteDataAdapter.CacheSchema Property=id_928 -4 TDARemoteDataAdapter.DataStreamer Property=id_369 -4 TDARemoteDataAdapter.GetDataCall Property=id_101 -4 TDARemoteDataAdapter.GetSchemaCall Property=id_105 -4 TDARemoteDataAdapter.GetScriptsCall Property=id_108 -4 TDARemoteDataAdapter.RemoteService Property=id_913 -4 TDARemoteDataAdapter.Schema Property=id_929 -4 TDARemoteDataAdapter.UpdateDataCall Property=id_78 -4 TDARemoteDataAdapter.ApplyUpdates Method=id_76 -4 TDARemoteDataAdapter.Fill Method=id_103 -4 TDARemoteDataAdapter.FillSchema Method=id_106 -4 TDARemoteDataAdapter.FillScripts Method=id_97 -4 TDARemoteDataAdapter.FlushSchema Method=id_930 -4 TDARemoteDataAdapter.SetupDefaultRequest Method=id_914 -4 TDARemoteDataAdapter.SetupDefaultRequestV3 Method=id_915 -3 TDARemoteDataAdapterRequest Class -4 TDARemoteDataAdapterRequest Class=id_185 -4 TDARemoteDataAdapterRequest.MethodName Property=id_843 -4 TDARemoteDataAdapterRequest.Params Property=id_637 -3 TDARemoteService Class -4 TDARemoteService Class=id_31 -3 TDASchema Class -4 TDASchema Class=id_20 -4 TDASchema.Commands Property=id_186 -4 TDASchema.ConnectionManager Property=id_972 -4 TDASchema.DataDictionary Property=id_973 -4 TDASchema.Datasets Property=id_167 -4 TDASchema.Diagrams Property=id_774 -4 TDASchema.RelationShips Property=id_169 -4 TDASchema.UpdateRules Property=id_187 -4 TDASchema.Clear Method=id_976 -3 TDAScriptingProvider Class -4 TDAScriptingProvider Class=id_188 -3 TDASDACDriver Class -4 TDASDACDriver Class=id_190 -3 TDASQLCommand Class -4 TDASQLCommand Class=id_166 -4 TDASQLCommand.Description Property=id_556 -4 TDASQLCommand.Name Property=id_557 -4 TDASQLCommand.Params Property=id_558 -4 TDASQLCommand.SQLCommandCollection Property=id_559 -4 TDASQLCommand.Statements Property=id_193 -4 TDASQLCommand.ParamByName Method=id_565 -3 TDAStatement Class -4 TDAStatement Class=id_191 -3 TDataAbstractService Class -4 TDataAbstractService Class=id_56 -4 TDataAbstractService.AcquireConnection Property=id_1028 -4 TDataAbstractService.AfterAcquireConnection Event=id_1040 -4 TDataAbstractService.AfterExecuteCommand Event=id_1041 -4 TDataAbstractService.AfterGetDatasetData Event=id_1042 -4 TDataAbstractService.AfterGetDatasetSchema Event=id_1043 -4 TDataAbstractService.AfterProcessDeltas Event=id_1044 -4 TDataAbstractService.AfterReleaseConnection Event=id_1045 -4 TDataAbstractService.AllowDataAccess Property=id_1029 -4 TDataAbstractService.AllowExecuteCommands Property=id_1030 -4 TDataAbstractService.AllowExecuteSQL Property=id_1031 -4 TDataAbstractService.AllowSchemaAccess Property=id_1032 -4 TDataAbstractService.AllowWhereSQL Property=id_68 -4 TDataAbstractService.AutoCreateBusinessProcessors Property=id_1033 -4 TDataAbstractService.BeforeAcquireConnection Event=id_1046 -4 TDataAbstractService.BeforeExecuteCommand Event=id_1047 -4 TDataAbstractService.BeforeGetDatasetData Event=id_1048 -4 TDataAbstractService.BeforeGetDatasetSchema Event=id_1049 -4 TDataAbstractService.BeforeProcessDeltas Event=id_1050 -4 TDataAbstractService.BeforeReleaseConnection Event=id_1051 -4 TDataAbstractService.Connection Property=id_1034 -4 TDataAbstractService.ConnectionName Property=id_1035 -4 TDataAbstractService.ExportedDataTables Property=id_1037 -4 TDataAbstractService.OnAcquireConnectionFailure Event=id_1052 -4 TDataAbstractService.OnBusinessProcessorAutoCreated Event=id_1053 -4 TDataAbstractService.OnGetSchemaAsXMLEvent Event=id_865 -4 TDataAbstractService.OnProcessDeltasError Event=id_1054 -4 TDataAbstractService.OnUpdateDataBeginTransaction Event=id_1055 -4 TDataAbstractService.OnUpdateDataCommitTransaction Event=id_1056 -4 TDataAbstractService.OnUpdateDataRollBackTransaction Event=id_1057 -4 TDataAbstractService.ProcessDeltasWithoutUpdateRules Property=id_1038 -4 TDataAbstractService.ServiceDataStreamer Property=id_370 -4 TDataAbstractService.ServiceSchema Property=id_377 -4 TDataAbstractService.ValidateCommandExecution Event=id_1058 -4 TDataAbstractService.ValidateDatasetAccess Event=id_1059 -4 TDataAbstractService.ValidateDirectSQLAccess Event=id_1060 -4 TDataAbstractService.ReleaseConnection Method=id_1036 -3 TDAUpdateDataRequest Class -4 TDAUpdateDataRequest Class=id_194 -4 TDAUpdateDataRequest.IncomingDeltaParameter Property=id_1103 -4 TDAUpdateDataRequest.OutgoingDeltaParameter Property=id_1102 -3 TDAUpdateRule Class -4 TDAUpdateRule Class=id_195 -4 TDAUpdateRule.DatasetName Property=id_1113 -4 TDAUpdateRule.DoDelete Property=id_1114 -4 TDAUpdateRule.DoInsert Property=id_1115 -4 TDAUpdateRule.DoUpdate Property=id_1116 -4 TDAUpdateRule.FailureBehavior Property=id_1117 -4 TDAUpdateRule.Name Property=id_1118 -3 TDAWhere Class -4 TDAWhere Class=id_15 -4 TDAWhere.Changed Property=id_1130 -4 TDAWhere.Clause Property=id_1131 -4 TDAWhere.ClientFields Property=id_1132 -4 TDAWhere.DefaultOperator Property=id_1133 -4 TDAWhere.Empty Property=id_1135 -4 TDAWhere.OnChange Property=id_1136 -4 TDAWhere.AddCondition Method=id_1138 -4 TDAWhere.AddConditions Method=id_1139 -4 TDAWhere.AddOperator Method=id_1134 -4 TDAWhere.AddText Method=id_1140 -4 TDAWhere.AddValueGroup Method=id_1141 -4 TDAWhere.Clear Method=id_1142 -4 TDAWhere.CloseBracket Method=id_17 -4 TDAWhere.OpenBracket Method=id_16 -3 TDAXmlDataStreamer Class -4 TDAXmlDataStreamer Class=id_14 -4 TDAXmlDataStreamer.DocumentName Property=id_1162 -4 TDAXmlDataStreamer.Options Property=id_1163 -4 TDAXmlDataStreamer.ReadXSLT Property=id_1164 -4 TDAXmlDataStreamer.RowOptions Property=id_1165 -4 TDAXmlDataStreamer.SchemaOptions Property=id_1166 -4 TDAXmlDataStreamer.SkipNull Property=id_1167 -4 TDAXmlDataStreamer.WriteXSLT Property=id_1168 -3 TMultiDbLoginService Class -4 TMultiDbLoginService Class=id_158 -4 TMultiDbLoginService.OnLogin Event=id_239 -3 TSimpleLoginService Class -4 TSimpleLoginService Class=id_157 -4 TSimpleLoginService.OnLogin Event=id_238 -3 UserInfo Class -4 UserInfo Class=id_196 -4 UserInfo.Attributes Property=id_1198 -4 UserInfo.Privileges Property=id_1199 -4 UserInfo.SessionID Property=id_1201 -4 UserInfo.UserData Property=id_1200 -4 UserInfo.UserID Property=id_1202 -2 Interfaces -3 IDAADOConnection Interface -4 IDAADOConnection Interface=id_198 -4 IDAADOConnection.ProviderName Property=id_1214 -4 IDAADOConnection.ProviderType Property=id_1215 -3 IDAConnection Interface -4 IDAConnection Interface=id_39 -4 IDAConnection.Connected Property=id_1217 -4 IDAConnection.ConnectionString Property=id_1220 -4 IDAConnection.InTransaction Property=id_1221 -4 IDAConnection.Name Property=id_1222 -4 IDAConnection.Password Property=id_1223 -4 IDAConnection.UserID Property=id_1224 -4 IDAConnection.BeginTransaction Method=id_1226 -4 IDAConnection.Close Method=id_1219 -4 IDAConnection.CommitTransaction Method=id_1227 -4 IDAConnection.NewCommand Method=id_203 -4 IDAConnection.NewDataset Method=id_201 -4 IDAConnection.Open Method=id_1218 -4 IDAConnection.RollbackTransaction Method=id_1228 -3 IDADataset Interface -4 IDADataset Interface=id_40 -4 IDADataset.Active Property=id_252 -4 IDADataset.EOF Property=id_255 -4 IDADataset.FieldCount Property=id_257 -4 IDADataset.Fields Property=id_258 -4 IDADataset.FieldValues Property=id_259 -4 IDADataset.IsEmpty Property=id_260 -4 IDADataset.Close Method=id_254 -4 IDADataset.FieldByName Method=id_292 -4 IDADataset.Next Method=id_256 -4 IDADataset.Open Method=id_253 -3 IDADelta Interface -4 IDADelta Interface=id_48 -4 IDADelta.Changes Property=id_715 -4 IDADelta.Count Property=id_716 -4 IDADelta.KeyFieldCount Property=id_717 -4 IDADelta.KeyFieldNames Property=id_718 -4 IDADelta.LoggedFieldCount Property=id_719 -4 IDADelta.LoggedFieldNames Property=id_720 -4 IDADelta.LoggedFieldTypes Property=id_721 -4 IDADelta.LogicalName Property=id_722 -4 Add Method -5 Add Method=id_729 -5 IDADelta.Add Method (TDADeltaChange)=id_1290 -5 IDADelta.Add Method (integer, TDAChangeType, TDAChangeStatus, string)=id_1291 -4 IDADelta.Clear Method -5 IDADelta.Clear Method=id_730 -4 IDADelta.IsNewRecord Method -5 IDADelta.IsNewRecord Method=id_731 -4 IDADelta.RemoveChange Method -5 IDADelta.RemoveChange Method=id_732 -3 IDAIBConnectionProperties Interface -4 IDAIBConnectionProperties Interface=id_202 -4 IDAIBConnectionProperties.Charset Property=id_1299 -4 IDAIBConnectionProperties.Role Property=id_1300 -4 IDAIBConnectionProperties.SQLDialect Property=id_1301 -3 IDAIBTransactionAccess Interface -4 IDAIBTransactionAccess Interface=id_65 -4 IDAIBTransactionAccess.Transaction Property=id_1309 -4 IDAIBTransactionAccess.Commit Method=id_1312 -4 IDAIBTransactionAccess.CommitRetaining Method=id_1314 -4 IDAIBTransactionAccess.Rollback Method=id_1313 -4 IDAIBTransactionAccess.RollbackRetaining Method=id_1315 -3 IDAInterbaseConnection Interface -4 IDAInterbaseConnection Interface=id_199 -3 IDAOracleConnection Interface -4 IDAOracleConnection Interface=id_200 -3 IDASQLCommand Interface -4 IDASQLCommand Interface=id_59 -4 IDASQLCommand.Name Property=id_247 -4 IDASQLCommand.Params Property=id_248 -4 IDASQLCommand.Prepared Property=id_249 -4 IDASQLCommand.SQL Property=id_250 -4 IDASQLCommand.Where Property=id_251 -4 IDASQLCommand.Execute Method=id_289 -4 IDASQLCommand.ParamByName Method=id_290 -4 IDASQLCommand.RefreshParams Method=id_291 -1 Samples -2 Samples=id_8 -1 Additional Information -2 Additional Information=id_1373 -2 FAQs=id_1375 -2 Online Articles=id_1376 -2 Getting Technical Support=id_189 -2 Newsgroups=id_1377 -1 Copyright Notice -2 Copyright Notice=id_1382 diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.hlp b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.hlp deleted file mode 100644 index ca2a11d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi.hlp and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_F.HxK b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_F.HxK deleted file mode 100644 index 47df63c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_F.HxK +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_K.HxK b/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_K.HxK deleted file mode 100644 index 22bd572..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Help/RemObjects Data Abstract for Delphi_K.HxK +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/INSTALL.LOG b/internal/5.0.23.613/1/Data Abstract for Delphi/INSTALL.LOG deleted file mode 100644 index 3f1bff2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/INSTALL.LOG +++ /dev/null @@ -1,2988 +0,0 @@ -*** Installation Started 09/07/2007 15:44 *** -Title: RemObjects Data Abstract for Delphi -Source: C:\DOCUME~1\Usuario\CONFIG~1\Temp\GLB51.tmp | 09-07-2007 | 15:44:52 | 71680 -Made Dir: C:\Archivos de programa\RemObjects Software -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\UNWISE.EXE | 07-26-2002 | 18:02:06 | | 153088 | 5be5019b -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: Data Abstract 'Vinci' for Delphi -RegDB Name: DisplayName -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: C:\ARCHIV~1\REMOBJ~1\DATAAB~1\UNWISE.EXE C:\ARCHIV~1\REMOBJ~1\DATAAB~1\INSTALL.LOG -RegDB Name: UninstallString -RegDB Root: 2 -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood\Bin -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\EWSetRegistryPath.exe | 01-06-2006 | 09:33:30 | | 116224 | 96193577 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D6.bpl | 08-25-2007 | 15:01:08 | 2.0.1.97 | 260608 | f158d312 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D7.bpl | 08-25-2007 | 15:01:10 | 2.0.1.97 | 261120 | 511afccd -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D6.dcp | 08-25-2007 | 15:01:08 | | 83886 | cea1a2ad -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D7.dcp | 08-25-2007 | 15:01:10 | | 87272 | ec388aa6 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D9.bpl | 08-25-2007 | 15:01:10 | 2.0.1.97 | 268288 | 6ccbc9c9 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D9.dcp | 08-25-2007 | 15:01:10 | | 91337 | cad6e501 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D10.bpl | 08-25-2007 | 15:01:12 | 2.0.1.97 | 264704 | 15d20230 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects_Everwood_D10.dcp | 08-25-2007 | 15:01:12 | | 91551 | 7751e7f3 -RegDB Key: Software\Borland\BDS\5.0\Environment Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood -RegDB Name: Everwood -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Everwood -RegDB Name: $(Everwood)\Bin\RemObjects_Everwood_D10.bpl -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood for Delphi -RegDB Val: 1 -RegDB Name: Installed -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood -RegDB Name: InstallDir -RegDB Root: 1 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.dll | 08-25-2007 | 14:48:06 | 2.0.1.97 | 360448 | 598f7855 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.BDS2.dll | 08-25-2007 | 14:48:06 | 2.0.1.97 | 28672 | c083221b -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.BDS3.dll | 08-25-2007 | 14:48:06 | 2.0.1.97 | 28672 | 170a8621 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.BDS4.dll | 08-25-2007 | 14:48:08 | 2.0.1.97 | 28672 | db061908 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.BDS5.dll | 08-25-2007 | 14:48:16 | 2.0.1.97 | 28672 | 9ecbeea2 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.VisualStudio.dll | 08-25-2007 | 14:48:06 | 2.0.1.97 | 28672 | 10ccfb7d -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.VisualStudio.2005.dll | 08-25-2007 | 14:48:18 | 2.0.1.97 | 20480 | 3c9ae7e5 -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood\Bin\1033 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\1033\RemObjects.Everwood.Resources.dll | 08-25-2007 | 14:48:20 | | 34816 | 437e5900 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.ShDocWv.dll | 09-20-2003 | 00:05:20 | 1.1.0.0 | 45056 | f40d2fd3 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\SHDocVw.dll | 09-20-2003 | 00:05:18 | 1.1.0.0 | 126976 | ebcbceb7 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\Microsoft.VisualStudio.VSIP.Helper.dll | 03-17-2004 | 01:36:20 | 7.0.4077.0 | 77824 | 9a8a7b05 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\Microsoft.VisualStudio.OLE.Interop.dll | 03-17-2004 | 01:36:22 | 7.0.4077.0 | 118784 | fb88135d -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\Microsoft.VisualStudio.Shell.Interop.dll | 03-17-2004 | 01:36:20 | 7.0.4077.0 | 249856 | 7caed748 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\Microsoft.VisualStudio.Shell.Interop.8.0.dll | 04-09-2005 | 03:12:44 | 8.0.50215.44 | 163840 | 40276db7 -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\Microsoft.VisualStudio.TextManager.Interop.dll | 03-17-2004 | 01:36:20 | 7.0.4077.0 | 114688 | 6491f7e -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.VarReplacer.exe | 10-21-2004 | 15:45:02 | | 3584 | ddf48d20 -RegDB Key: Software\Borland\BDS\5.0\Known IDE Assemblies -RegDB Val: Everwood -RegDB Name: C:\Archivos de programa\RemObjects Software\Everwood\Bin\RemObjects.Everwood.BDS5.dll -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood for .NET -RegDB Val: 1 -RegDB Name: Installed -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood for .NET -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood -RegDB Name: InstallDir -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood for .NET -RegDB Val: -RegDB Name: Version -RegDB Root: 1 -Made Dir: C:\Archivos de programa\Archivos comunes\RemObjects Software -Made Dir: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\RemObjects.HxC | 12-30-2005 | 15:47:36 | | 981 | cf99aaff -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\RemObjects.HxT | 06-04-2005 | 04:16:32 | | 542 | b5ef3cda -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\RemObjects_F.HxK | 05-14-2002 | 18:57:32 | | 114 | 57ef63da -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\RemObjects_K.HxK | 07-26-2004 | 18:04:30 | | 164 | 7867ef6c -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\h2reg.ini | 06-11-2007 | 11:33:02 | | 3698 | 7dea23e6 -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\RemObjects.HxA | 06-04-2005 | 03:52:46 | | 1515 | b3b89fef -File Copy: C:\Archivos de programa\Archivos comunes\RemObjects Software\Help\H2Reg.exe | 04-12-2003 | 09:02:08 | 1.2.2.0 | 182272 | ef6ecdc5 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common) -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\RemObjects SDK.lic | 08-25-2007 | 15:00:02 | | 946 | b359cae7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceBuilder.exe | 08-25-2007 | 15:00:18 | 5.0.23.613 | 3167232 | ac3859af -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceBuilder3.chm | 08-25-2007 | 15:00:40 | | 1188261 | 6bd263c0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceBuilder70.bpl | 08-25-2007 | 15:00:12 | 5.0.23.613 | 6812672 | 222b9fea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\vcl70.bpl | 08-09-2002 | 17:00:00 | 7.0.4.453 | 1381376 | ee3f2d0b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\rtl70.bpl | 08-09-2002 | 17:00:00 | 7.0.4.453 | 778240 | cc284be7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\RODL.exe | 08-25-2007 | 15:01:00 | 5.0.23.613 | 564736 | 3ca46412 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBDefaultEditor.dll | 08-25-2007 | 15:00:26 | 5.0.23.613 | 195584 | da2c6634 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBDefaultValidator.dll | 08-25-2007 | 15:00:24 | 5.0.23.613 | 30720 | 3ea85a93 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBStandardViews.dll | 08-25-2007 | 15:00:26 | 5.0.23.613 | 90112 | fe0a58c1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBStandardImporters.dll | 08-25-2007 | 15:00:28 | 5.0.23.613 | 172544 | c7ccac8e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBSOAP.dll | 08-25-2007 | 15:00:28 | 5.0.23.613 | 245760 | 1cc8113a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBPasImporter.dll | 08-25-2007 | 15:00:30 | 5.0.23.613 | 46592 | ee7d5d3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBTLBImporter.dll | 08-25-2007 | 15:00:30 | 5.0.23.613 | 53248 | 6ab7a1a0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBPHP.dll | 08-25-2007 | 15:00:22 | 5.0.23.613 | 52224 | 90142b6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBDelphi.dll | 08-25-2007 | 15:00:20 | 5.0.23.613 | 154624 | 990319fd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBBCB.dll | 08-25-2007 | 15:00:22 | 5.0.23.613 | 355328 | 7508093c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROMasterServer.exe | 08-25-2007 | 15:00:58 | 5.0.23.613 | 2908160 | ccf6cb87 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\MasterServer_Data -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\MasterServer_Data\MessagesPerSession.nx1 | 03-03-2004 | 04:56:12 | | 32768 | 72745057 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\MasterServer_Data\nxTrans.cfg | 03-03-2004 | 04:56:12 | | 8 | 8b312d43 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\MasterServer_Data\Sessions.nx1 | 03-03-2004 | 04:56:12 | | 32768 | 8f654dbb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\MasterServer_Data\Messages.nx1 | 03-03-2004 | 04:56:12 | | 40960 | e4a98f7c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROCOM.dll | 08-25-2007 | 15:00:54 | 5.0.23.613 | 1239552 | 13839958 -Self-Register: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROCOM.dll -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceTester.exe | 08-25-2007 | 15:00:50 | 5.0.23.613 | 8729600 | 4c87c93b -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\ro.png | 05-17-2007 | 02:20:34 | | 10767 | 829fa9a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\License.txt | 06-26-2007 | 15:48:28 | | 9419 | bdf4ee4e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Launch.exe | 02-21-2003 | 13:47:32 | | 14848 | 81197b84 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\README.html | 08-24-2007 | 14:21:58 | | 12094 | d38c180c -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.hlp | 08-25-2007 | 15:04:00 | | 3676978 | b2997ff2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.cnt | 08-25-2007 | 15:02:30 | | 35446 | 410c03f9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.als | 08-25-2007 | 15:02:30 | | 20911 | 92bc2948 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.HxA | 12-30-2005 | 15:45:14 | | 1527 | 6360cfc0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.HxC | 12-30-2005 | 15:46:18 | | 1049 | 56fb5d0a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.HxI | 08-25-2007 | 15:03:12 | 4.0.0.0 | 70996 | 3f8b6a05 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.HxS | 08-25-2007 | 15:03:12 | 4.0.0.0 | 1958444 | e1aa8b10 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi.HxT | 12-30-2005 | 15:45:40 | | 562 | 2eb9d0d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi_F.HxK | 05-14-2002 | 18:57:32 | | 114 | 57ef63da -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RemObjects SDK for Delphi_K.HxK | 04-28-2002 | 01:27:58 | | 164 | 7867ef6c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\H2Reg.ini | 01-08-2007 | 12:52:48 | | 3914 | 14d3913f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\H2Reg.exe | 04-12-2003 | 09:02:08 | 1.2.2.0 | 182272 | ef6ecdc5 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP -File Delete: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\H2Reg.ini -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\H2Reg.ini -File Delete: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\H2Reg.exe -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\H2Reg.exe -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Core_D6.bpl | 08-25-2007 | 15:01:24 | 5.0.23.613 | 1855488 | dfe2b195 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_IDE_D6.bpl | 08-25-2007 | 15:01:26 | 5.0.23.613 | 1435136 | b0e7191 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_WebBroker_D6.bpl | 08-25-2007 | 15:01:26 | 5.0.23.613 | 30208 | 2d8d0ee0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Indy_D6.bpl | 08-25-2007 | 15:01:26 | 5.0.23.613 | 202240 | 53d1f7fa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_RODX_D6.bpl | 08-25-2007 | 15:01:28 | 5.0.23.613 | 131072 | f95cb211 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_BPDX_D6.bpl | 08-25-2007 | 15:01:28 | 5.0.23.613 | 40960 | 8c79c438 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_DataSnap_D6.bpl | 08-25-2007 | 15:01:28 | 5.0.23.613 | 102912 | 1b8e0f93 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Synapse_D6.bpl | 08-25-2007 | 15:01:30 | 5.0.23.613 | 166400 | 8c8dd0ac -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Core_D7.bpl | 08-25-2007 | 15:01:30 | 5.0.23.613 | 1864192 | fd6f5dff -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_IDE_D7.bpl | 08-25-2007 | 15:01:32 | 5.0.23.613 | 1436672 | 1a1d2e47 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_WebBroker_D7.bpl | 08-25-2007 | 15:01:32 | 5.0.23.613 | 29696 | 5a138c9a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Indy_D7.bpl | 08-25-2007 | 15:01:34 | 5.0.23.613 | 207872 | 67e4f7b1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_RODX_D7.bpl | 08-25-2007 | 15:01:34 | 5.0.23.613 | 131072 | 9d34ed62 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_BPDX_D7.bpl | 08-25-2007 | 15:01:34 | 5.0.23.613 | 40960 | 59f51219 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_DataSnap_D7.bpl | 08-25-2007 | 15:01:36 | 5.0.23.613 | 102912 | 97089494 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Synapse_D7.bpl | 08-25-2007 | 15:01:36 | 5.0.23.613 | 166400 | 42dae71e -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Core_D10.bpl | 08-25-2007 | 15:01:48 | 5.0.23.613 | 1861632 | 4062c9f6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_IDE_D10.bpl | 08-25-2007 | 15:01:38 | 5.0.23.613 | 1438720 | aa7dc5f9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_WebBroker_D10.bpl | 08-25-2007 | 15:01:48 | 5.0.23.613 | 29696 | 8a59fe22 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_RODX_D10.bpl | 08-25-2007 | 15:01:50 | 5.0.23.613 | 131072 | a7e0e409 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_BPDX_D10.bpl | 08-25-2007 | 15:01:50 | 5.0.23.613 | 40448 | cee70334 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_DataSnap_D10.bpl | 08-25-2007 | 15:01:52 | 5.0.23.613 | 100864 | 20805163 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Synapse_D10.bpl | 08-25-2007 | 15:01:52 | 5.0.23.613 | 164864 | e3f95d25 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Indy_D10.bpl | 08-25-2007 | 15:01:50 | 5.0.23.613 | 214528 | 7b86912d -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnap.rodl | 01-29-2006 | 00:23:10 | | 3713 | 95566916 -RegDB Key: Software\RemObjects\RemObjects SDK -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK\KnownRodls -RegDB Val: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnap.rodl -RegDB Name: DataSnap -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK\Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi -RegDB Name: RemObjects SDK for Delphi -RegDB Root: 1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Core_D6.dcp | 08-25-2007 | 15:01:24 | | 2298909 | 1396c299 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_IDE_D6.dcp | 08-25-2007 | 15:01:26 | | 558477 | 9f0ce06c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_WebBroker_D6.dcp | 08-25-2007 | 15:01:26 | | 19180 | cab7d699 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Indy_D6.dcp | 08-25-2007 | 15:01:26 | | 248825 | 593aac22 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_RODX_D6.dcp | 08-25-2007 | 15:01:28 | | 215728 | 2f6f847b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_BPDX_D6.dcp | 08-25-2007 | 15:01:28 | | 28028 | 53fe5c58 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_DataSnap_D6.dcp | 08-25-2007 | 15:01:28 | | 105512 | c7077cbd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D6\RemObjects_Synapse_D6.dcp | 08-25-2007 | 15:01:30 | | 241012 | c3cfdf31 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Core_D7.dcp | 08-25-2007 | 15:01:32 | | 2309856 | 756c80d9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_IDE_D7.dcp | 08-25-2007 | 15:01:32 | | 570985 | 958c8f24 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_WebBroker_D7.dcp | 08-25-2007 | 15:01:32 | | 19865 | 92465fa5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Indy_D7.dcp | 08-25-2007 | 15:01:34 | | 258512 | a7731939 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_RODX_D7.dcp | 08-25-2007 | 15:01:34 | | 216538 | 8795d104 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_BPDX_D7.dcp | 08-25-2007 | 15:01:34 | | 29101 | 689f58e1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_DataSnap_D7.dcp | 08-25-2007 | 15:01:36 | | 108924 | 1bd70bc7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D7\RemObjects_Synapse_D7.dcp | 08-25-2007 | 15:01:36 | | 242637 | f1eed958 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Core_D10.dcp | 08-25-2007 | 15:01:38 | | 2436035 | 242effba -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_IDE_D10.dcp | 08-25-2007 | 15:01:38 | | 583218 | 79f667d4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_WebBroker_D10.dcp | 08-25-2007 | 15:01:40 | | 19902 | 4abba169 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_RODX_D10.dcp | 08-25-2007 | 15:01:42 | | 225728 | 88a1c4f2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_BPDX_D10.dcp | 08-25-2007 | 15:01:42 | | 28868 | fed76f63 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_DataSnap_D10.dcp | 08-25-2007 | 15:01:44 | | 112088 | a59a17a1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Synapse_D10.dcp | 08-25-2007 | 15:01:44 | | 254402 | 3e7f123f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Indy_D10.dcp | 08-25-2007 | 15:01:40 | | 273742 | 895f5dea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\BuildPackages_D7.bpg | 04-01-2004 | 18:01:48 | | 1428 | e4c25f6a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\BuildPackages_D6.bpg | 04-01-2004 | 18:02:48 | | 1424 | ec47a211 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\BuildPackages_D5.bpg | 04-01-2004 | 18:03:30 | | 1326 | be224155 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\BuildPackages_D10.bdsgroup | 12-21-2005 | 13:04:16 | | 2301 | feb7d934 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\BuildPackages_K3.bpg | 02-02-2004 | 13:08:30 | | 1390 | 3b4da2fe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_Reg.res | 05-23-2007 | 10:26:08 | | 5140 | f13f9c8f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_Reg.pas | 05-23-2007 | 10:26:08 | | 3460 | 5fc50882 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D7.dpk | 06-07-2007 | 12:21:48 | | 3842 | d198d41e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D6.dpk | 06-07-2007 | 12:21:34 | | 3848 | 4e54daad -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D5.dpk | 06-07-2007 | 12:21:14 | | 3840 | 25304658 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_K3.dpk | 05-27-2007 | 11:47:24 | | 2846 | 6cb1c79d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D7.res | 08-25-2007 | 15:01:30 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D6.res | 08-25-2007 | 15:01:22 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D5.res | 06-07-2007 | 12:21:14 | | 524 | b44217e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_K3.res | 05-27-2007 | 11:47:24 | | 876 | 483416c3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D7.dof | 06-07-2007 | 12:21:48 | | 2240 | 9917ab7d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D6.dof | 06-07-2007 | 12:21:34 | | 1303 | 5f86dfa6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D5.dof | 06-07-2007 | 12:21:14 | | 1798 | 7f2edaa8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_K3.kof | 05-27-2007 | 11:47:24 | | 706 | 851cee35 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D10.dpk | 06-07-2007 | 12:23:42 | | 3917 | 4e993086 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D10.res | 08-25-2007 | 15:01:56 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D10.bdsproj | 06-07-2007 | 12:23:42 | | 10371 | 7fada18e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D10.dproj | 06-07-2007 | 12:23:42 | | 8991 | 7993a9dd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_D10.cfg | 06-07-2007 | 12:23:42 | | 625 | e95f7b80 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_Reg.pas | 10-12-2006 | 14:37:04 | | 6225 | 368af77b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D7.dpk | 08-08-2006 | 15:24:54 | | 3065 | 344f3dd8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D6.dpk | 08-08-2006 | 15:25:02 | | 3038 | 67ca0d20 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D5.dpk | 04-03-2006 | 17:52:26 | | 2243 | 17b957ee -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_K3.dpk | 05-15-2006 | 11:29:40 | | 1285 | 98af5f56 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D7.res | 08-25-2007 | 15:01:32 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D5.res | 04-03-2006 | 17:52:26 | | 524 | b44217e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D6.res | 08-25-2007 | 15:01:24 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_K3.res | 05-15-2006 | 11:29:40 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D7.dof | 08-08-2006 | 15:24:54 | | 3289 | 9c225b07 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D6.dof | 08-08-2006 | 15:25:02 | | 4792 | e63040c7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D5.dof | 04-03-2006 | 17:52:26 | | 1899 | 6d4f41de -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_K3.kof | 05-15-2006 | 11:29:40 | | 726 | ceb1c6b3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D10.cfg | 05-12-2007 | 04:21:46 | | 772 | d902a5ef -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D10.dpk | 05-12-2007 | 04:21:46 | | 3149 | 32ac9ec8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D10.res | 08-25-2007 | 15:01:38 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D10.bdsproj | 05-12-2007 | 04:21:46 | | 10437 | f00c9da0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\RemObjects_IDE_D10.dproj | 05-12-2007 | 04:21:46 | | 9238 | 83fcaeaa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_Reg.pas | 01-05-2006 | 20:59:44 | | 1312 | 9a494e4f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D7.dpk | 04-06-2004 | 20:26:52 | | 749 | 484ef75c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D6.dpk | 04-06-2004 | 20:26:46 | | 749 | b5a2387d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D5.dpk | 03-12-2007 | 10:06:42 | | 749 | 68e66f5f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_K3.dpk | 05-15-2006 | 11:41:32 | | 718 | 4d73db70 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_K3.kof | 05-15-2006 | 11:41:32 | | 1182 | dbf5e9ee -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D7.dof | 04-06-2004 | 20:26:52 | | 5028 | 55d9911 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D6.dof | 04-06-2004 | 20:26:46 | | 1841 | ca10d7c8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D5.dof | 03-12-2007 | 10:06:42 | | 2132 | cc075741 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D7.res | 08-25-2007 | 15:01:32 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D6.res | 08-25-2007 | 15:01:26 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_K3.res | 05-15-2006 | 11:41:32 | | 520 | 93617178 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D5.res | 03-12-2007 | 10:06:42 | | 520 | 93617178 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D10.cfg | 05-12-2007 | 04:21:06 | | 625 | 4c0fb2cb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D10.dpk | 05-12-2007 | 04:21:06 | | 844 | 6dacf9e9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D10.res | 08-25-2007 | 15:01:58 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D10.bdsproj | 05-12-2007 | 04:21:06 | | 10321 | af7fb77f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_D10.dproj | 05-12-2007 | 04:21:06 | | 5947 | facdc428 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_Reg.pas | 05-22-2007 | 18:28:42 | | 2305 | 60e208e4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D7.dpk | 05-22-2007 | 18:30:04 | | 1806 | 9a729c0b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D6.dpk | 05-22-2007 | 18:30:00 | | 1806 | fa698fd4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D5.dpk | 05-22-2007 | 18:29:18 | | 1783 | f90cb013 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_K3.dpk | 05-22-2007 | 18:30:12 | | 1205 | 24539f7f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D7.res | 08-25-2007 | 15:01:34 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D6.res | 08-25-2007 | 15:01:26 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D5.res | 05-22-2007 | 18:29:18 | | 524 | b44217e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_K3.res | 05-22-2007 | 18:30:12 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D7.dof | 05-22-2007 | 18:30:04 | | 2233 | 7b9988dd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D6.dof | 05-22-2007 | 18:30:00 | | 3181 | 957e6ee5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D5.dof | 05-22-2007 | 18:29:18 | | 1666 | 5c79d686 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_K3.kof | 05-22-2007 | 18:30:12 | | 1285 | 1bd84806 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D10.cfg | 05-22-2007 | 18:30:08 | | 625 | e95f7b80 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D10.dpk | 05-22-2007 | 18:30:08 | | 1970 | b4b7e97d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D10.res | 08-25-2007 | 15:01:58 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D10.bdsproj | 05-22-2007 | 18:30:08 | | 10876 | c76d72bb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_D10.dproj | 05-22-2007 | 18:30:08 | | 7832 | 957bb348 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D7.dpk | 02-21-2005 | 13:06:10 | | 1087 | dd3e4e92 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D6.dpk | 02-21-2005 | 13:08:06 | | 1087 | 5a13eec0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D5.dpk | 08-10-2003 | 23:12:54 | | 1066 | 59143c73 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_K3.dpk | 03-06-2007 | 13:06:00 | | 1081 | 78d84cec -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D7.res | 08-25-2007 | 15:01:34 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D6.res | 08-25-2007 | 15:01:28 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D5.res | 08-10-2003 | 23:12:54 | | 524 | b44217e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_K3.res | 03-06-2007 | 13:06:00 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D7.dof | 02-21-2005 | 13:06:10 | | 2357 | 9f01cc49 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D6.dof | 02-21-2005 | 13:08:06 | | 1962 | 5eb705fd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D5.dof | 08-10-2003 | 23:12:54 | | 1420 | 46367fa7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_K3.kof | 03-06-2007 | 13:06:00 | | 1287 | 6f198669 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D10.cfg | 05-12-2007 | 04:21:56 | | 648 | 84739fe3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D10.dpk | 05-12-2007 | 04:21:56 | | 1083 | ea3a6300 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D10.res | 08-25-2007 | 15:02:00 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D10.bdsproj | 05-12-2007 | 04:21:56 | | 10322 | 95be4803 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\RemObjects_RODX_D10.dproj | 05-12-2007 | 04:21:56 | | 6263 | 23461e2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_Reg.pas | 04-03-2007 | 16:26:06 | | 1773 | 4171ef3b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D7.dpk | 04-06-2004 | 20:26:56 | | 766 | 9e4543c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D6.dpk | 04-06-2004 | 20:26:48 | | 758 | 3b8c680c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D5.dpk | 03-25-2004 | 19:40:50 | | 781 | 7fe91ee3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_K3.dpk | 03-25-2004 | 19:41:02 | | 734 | 410311f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D7.res | 08-25-2007 | 15:01:34 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D6.res | 08-25-2007 | 15:01:28 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D5.res | 03-25-2004 | 19:40:50 | | 524 | b44217e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_K3.res | 03-25-2004 | 19:41:02 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D7.dof | 04-06-2004 | 20:26:56 | | 3420 | e75f9f7a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D6.dof | 04-06-2004 | 20:26:48 | | 2100 | 8250c8d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D5.dof | 03-25-2004 | 19:40:50 | | 1550 | 2168121c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_K3.kof | 03-25-2004 | 19:41:02 | | 1275 | 7109680a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D10.cfg | 05-12-2007 | 04:21:22 | | 611 | 5a60a775 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D10.dpk | 05-12-2007 | 04:21:22 | | 783 | 5b0d9394 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D10.res | 08-25-2007 | 15:02:00 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D10.bdsproj | 05-12-2007 | 04:21:22 | | 10302 | 6089406f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_BPDX_D10.dproj | 05-12-2007 | 04:21:22 | | 5881 | 4d25dfbc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_Reg.pas | 03-25-2004 | 19:45:32 | | 1473 | 8aff7282 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D6.dpk | 06-07-2007 | 12:05:00 | | 1428 | b810615c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D7.dpk | 06-07-2007 | 12:05:14 | | 1428 | bbc4cdb0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_K3.dpk | 06-07-2007 | 12:08:44 | | 1411 | 7614d795 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D6.res | 08-25-2007 | 15:01:28 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D7.res | 08-25-2007 | 15:01:36 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_K3.res | 06-07-2007 | 12:08:44 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D6.dof | 06-07-2007 | 12:05:00 | | 3023 | 26fa06ae -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D7.dof | 06-07-2007 | 12:05:14 | | 2828 | 3df2888c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_K3.kof | 06-07-2007 | 12:08:44 | | 1291 | 33ec8d5f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D10.cfg | 06-07-2007 | 12:07:54 | | 673 | 59119278 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D10.dpk | 06-07-2007 | 12:07:54 | | 1430 | 1afd6561 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D10.res | 08-25-2007 | 15:02:02 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D10.bdsproj | 06-07-2007 | 12:07:54 | | 10427 | e4f287f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_D10.dproj | 06-07-2007 | 12:07:54 | | 6626 | 9089510d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_Reg.pas | 05-23-2007 | 10:31:28 | | 1513 | bb0d8c93 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D7.dpk | 05-23-2007 | 13:28:18 | | 1237 | c8a235f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D7.res | 08-25-2007 | 15:01:36 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D7.dof | 05-23-2007 | 13:28:18 | | 2287 | 1cf41cc5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D6.dof | 05-23-2007 | 13:29:48 | | 2238 | 110281c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D6.dpk | 05-23-2007 | 13:29:48 | | 1237 | c244e161 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D6.res | 08-25-2007 | 15:01:30 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D5.dof | 05-23-2007 | 13:29:56 | | 2227 | b0b8da85 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D5.dpk | 05-23-2007 | 13:29:56 | | 1222 | bf452451 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D5.res | 05-23-2007 | 13:29:56 | | 1880 | 4ea2599b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_K3.kof | 05-23-2007 | 13:10:44 | | 2227 | 19dd39d1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_K3.dpk | 05-23-2007 | 13:10:44 | | 1256 | 5a892206 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_K3.res | 05-23-2007 | 13:10:44 | | 1880 | 4ea2599b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D10.dpk | 05-23-2007 | 13:26:58 | | 1239 | dd97218d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D10.res | 08-25-2007 | 15:02:02 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D10.bdsproj | 05-23-2007 | 13:26:58 | | 8465 | acdd26d1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D10.dproj | 05-23-2007 | 13:26:58 | | 6439 | 81158932 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_D10.cfg | 05-23-2007 | 13:26:58 | | 641 | 77d8c8a4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Core_Glyphs.res | 08-25-2007 | 15:01:22 | | 68052 | cbdf9881 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_WebBroker_Glyphs.res | 08-25-2007 | 15:01:22 | | 2748 | d438f66d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Indy_Glyphs.res | 08-25-2007 | 15:01:22 | | 42532 | 20d5b2a9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Bpdx_Glyphs.res | 08-25-2007 | 15:01:22 | | 7272 | 88982fc0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects_Synapse_Glyphs.res | 08-25-2007 | 15:01:22 | | 8228 | e3a0d8d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\RemObjects_DataSnap_Glyphs.res | 08-25-2007 | 15:01:22 | | 7344 | 24ff0fc1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RemObjects.inc | 07-26-2007 | 13:31:40 | | 3746 | a55374a5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\eDefines.inc | 02-20-2007 | 13:50:50 | | 14033 | 45fcae7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyHTTPChannel.pas | 05-24-2007 | 17:36:20 | | 6251 | addd4508 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIdeOnly.pas | 04-03-2007 | 14:11:26 | | 1332 | f7120a08 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHTTPTools.pas | 04-05-2007 | 17:12:02 | | 3527 | 75bb1fb7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHTTPDispatch.pas | 01-05-2006 | 20:57:04 | | 4416 | 83168d19 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODL.pas | 08-07-2007 | 12:43:52 | | 58716 | f0c3aa90 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROClientIntf.pas | 04-06-2007 | 10:59:24 | | 18965 | 13094b68 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROClient.pas | 07-10-2007 | 11:09:08 | | 59346 | 1305a9f3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROXMLSerializer.pas | 08-15-2007 | 17:48:44 | | 63129 | 805d879c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROXDOM_2_3.pas | 04-19-2006 | 16:07:34 | | 1258190 | d3950911 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROWebBrokerServer.pas | 03-22-2007 | 11:45:54 | | 14300 | d072e3db -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROUnicodeConv.pas | 03-12-2007 | 12:41:40 | | 132501 | 9f5b6b55 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROTypes.pas | 08-15-2007 | 17:41:58 | | 29277 | 4b2b3459 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROStreamSerializer.pas | 06-27-2007 | 23:09:04 | | 37616 | 6b0226bc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSOAPMessage.pas | 08-15-2007 | 17:16:32 | | 31902 | 28bfb4e1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROServerIntf.pas | 10-12-2006 | 15:38:54 | | 5080 | 50f3d43a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROServer.pas | 05-21-2007 | 11:32:46 | | 39575 | 70dbb68d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSerializer.pas | 04-26-2007 | 11:12:54 | | 31537 | b70b9a4e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRORes.pas | 05-24-2006 | 15:20:28 | | 11326 | 90b062a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROPoweredByRemObjectsButton.res | 05-04-2007 | 11:29:42 | | 14712 | ccc5efee -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROPoweredByRemObjectsButton.pas | 05-04-2007 | 11:29:42 | | 4980 | 3f1d779e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROWinInetHttpChannel.pas | 06-01-2007 | 10:06:18 | | 22426 | a4431c1d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROEncryption.pas | 01-05-2006 | 18:34:58 | | 19903 | 215a63a2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODLLChannel.pas | 06-18-2007 | 10:42:36 | | 8656 | 7304e6e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODLLServer.pas | 10-06-2006 | 17:33:36 | | 5482 | d840cc42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODLLHelpers.pas | 10-06-2006 | 14:42:28 | | 2981 | a1dfecef -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROClasses.pas | 08-02-2007 | 10:59:12 | | 51680 | f89ef189 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROClassFactories.pas | 02-23-2007 | 12:02:46 | | 14848 | abe7a5c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROAsync.pas | 10-16-2006 | 16:08:14 | | 10472 | 16e18512 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROAsyncResponseStorage.pas | 01-05-2006 | 20:59:26 | | 7511 | 811d0880 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROThread.pas | 04-02-2007 | 19:47:34 | | 5835 | ea44026e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRORemoteDataModule.pas | 03-13-2007 | 10:12:06 | | 12675 | 77d3878e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROCOMInit.pas | 01-05-2006 | 20:58:20 | | 1107 | abb84986 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROLocalChannel.pas | 05-23-2007 | 10:19:42 | | 2960 | e9274176 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROLocalServer.pas | 01-17-2006 | 14:31:16 | | 1987 | e85222e0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROThreadPool.pas | 05-04-2007 | 03:08:46 | | 7291 | a587fca3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSCHelpers.pas | 08-17-2007 | 12:39:22 | | 27357 | b49f7471 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSuperTCPServer.pas | 08-17-2007 | 12:33:18 | | 17132 | 809eed30 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSuperTCPChannel.pas | 06-28-2007 | 11:33:02 | | 25349 | 84ea3d2a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROXmlRpcMessage.pas | 06-27-2007 | 23:08:50 | | 43229 | 80ebcdf5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROServerMultiMessage.pas | 07-26-2007 | 08:13:56 | | 10709 | 4760904f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROCompression.pas | 09-27-2006 | 14:41:16 | | 9753 | 67b0811 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyTCPChannel.pas | 05-07-2007 | 22:25:48 | | 7829 | ad8556e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROMSXML2_TLB.pas | 02-04-2006 | 11:59:58 | | 158036 | b888507 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROMSXMLImpl.pas | 12-19-2006 | 16:41:20 | | 15826 | eef9d8ee -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROOpenXMLImpl.pas | 12-19-2006 | 11:38:58 | | 16562 | 86134b24 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROXMLIntf.pas | 12-19-2006 | 16:44:30 | | 6116 | 85b45bd9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROWinMessageServer.pas | 01-17-2007 | 10:25:36 | | 7906 | b7b2733a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROWinMessageChannel.pas | 01-17-2007 | 10:17:40 | | 8775 | 3951b933 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBinMessage.pas | 06-27-2007 | 11:18:14 | | 21029 | 84ed6910 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyHTTPServer.pas | 06-01-2007 | 12:13:16 | | 13574 | 3e107ad7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyTCPServer.pas | 04-19-2006 | 01:13:14 | | 8511 | 1b3b3c72 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBPDXHTTPServer.pas | 03-22-2007 | 11:39:10 | | 15593 | 675646a2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBPDXTCPServer.pas | 03-21-2006 | 19:23:22 | | 5317 | 79c1ea64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyUDPChannel.pas | 03-29-2007 | 00:35:52 | | 19638 | 7ceb86e6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyUDPServer.pas | 05-24-2006 | 17:42:00 | | 9528 | 669333a1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSessions.pas | 08-24-2007 | 10:29:46 | | 31105 | 40b0412c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRORemoteService.pas | 01-17-2007 | 10:03:58 | | 7129 | 91ec9d2c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODBSessionManager.pas | 10-31-2006 | 13:32:18 | | 13273 | 57716924 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRoPleaseWaitForm.pas | 05-04-2007 | 11:54:34 | | 3233 | 81c8715a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRoPleaseWaitForm.dfm | 05-04-2007 | 11:54:34 | | 5716 | d59dd4e5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROPleaseWaitForm_Kylix.xfm | 05-17-2006 | 11:44:18 | | 769 | bc6625e3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROPleaseWaitForm_Kylix.pas | 05-17-2006 | 11:44:18 | | 2758 | b9066e72 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROServiceComponent.pas | 03-12-2007 | 15:45:34 | | 1121 | 79c50204 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSynapseHTTPChannel.pas | 06-07-2007 | 15:15:44 | | 5752 | f3d4285 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROEventRepository.pas | 08-17-2007 | 11:52:34 | | 49081 | f490ac0e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODynamicRequest.pas | 01-17-2007 | 10:02:20 | | 43697 | 1f08a6fe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROMasterServerSessionManager.pas | 05-04-2007 | 11:20:54 | | 5054 | ee600713 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROMasterServerEventRepository.pas | 01-17-2007 | 10:02:42 | | 4346 | 4be538be -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ROMasterServerLibrary_Intf.pas | 03-12-2007 | 15:30:04 | | 15185 | dd9e9714 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROPostMessage.pas | 08-20-2007 | 07:38:26 | | 33755 | f5b1a831 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROComboService.pas | 06-19-2007 | 10:25:16 | | 9180 | 11c12804 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfoRes.html | 12-02-2006 | 07:56:54 | | 1236 | 9fbac4c2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfoRes.ico | 03-05-2004 | 14:57:14 | | 22486 | 5c6e478a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfoRes.xsl | 07-23-2007 | 09:29:08 | | 24545 | 99ca10fe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfoRes.css | 01-18-2006 | 15:01:32 | | 2599 | 3ff25ea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfo.lrs | 07-23-2007 | 09:33:12 | | 98758 | 719f5cf9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfo.pas | 07-23-2007 | 09:33:12 | | 5166 | 143465c4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfo.res | 07-23-2007 | 09:33:12 | | 51252 | e955a0cb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROHtmlServerInfo.rc | 06-28-2007 | 18:49:00 | | 304 | 74a67f86 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBroadcastServer.pas | 03-09-2006 | 13:38:20 | | 4538 | d789bc34 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBroadcastChannel.pas | 04-23-2007 | 15:16:50 | | 7362 | 885973eb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROStreamUtils.pas | 04-23-2007 | 15:11:24 | | 9191 | b318de53 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRONamedPipeServer.pas | 08-03-2007 | 09:39:00 | | 14603 | 899ca6ea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRONamedPipeChannel.pas | 06-08-2007 | 10:41:48 | | 9689 | 9e6cde9a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyEmailChannel.pas | 01-17-2007 | 10:09:36 | | 10256 | 2dcd628b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyEmailServer.pas | 02-26-2007 | 17:37:36 | | 12196 | 7f3695aa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndyEmail.pas | 01-05-2006 | 20:56:28 | | 2616 | 5d857d0a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODiscovery_Intf.pas | 04-23-2007 | 15:17:50 | | 3254 | 701d11db -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODiscovery_Invk.pas | 04-23-2007 | 15:18:44 | | 2411 | 777f86c3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODiscoveryService_Impl.pas | 04-23-2007 | 15:18:22 | | 1776 | 1966ff5c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODiscovery.pas | 01-17-2007 | 09:47:02 | | 12003 | 99d6b993 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uRODiscovery_Async.pas | 04-23-2007 | 15:18:02 | | 3220 | 3841ed8c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ROServiceDiscovery.RODL | 03-23-2004 | 14:03:22 | | 1071 | 22ce5614 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBaseSuperHttpServer.pas | 07-17-2007 | 14:48:06 | | 36026 | 3fc28674 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uIPAsyncHttpServer.pas | 07-17-2007 | 13:02:12 | | 16113 | 5fefad59 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uIPAsyncSocket.pas | 08-21-2007 | 16:50:14 | | 28471 | ff93f22a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uIPHttpHeaders.pas | 05-29-2007 | 13:27:48 | | 3503 | b3c72b57 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIpSuperHttpServer.pas | 07-17-2007 | 14:43:08 | | 5617 | a94fdccb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROIndySuperHttpChannel.pas | 08-21-2007 | 13:32:38 | | 4272 | ec4d3b91 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROSynapseSuperHttpChannel.pas | 08-21-2007 | 16:37:42 | | 3912 | c5888850 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBaseSuperHttpChannel.pas | 07-18-2007 | 10:33:00 | | 18981 | ad4f97ed -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\sslinux.pas | 01-09-2007 | 13:13:56 | | 41239 | b4b66fbc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\sswin32.pas | 01-09-2007 | 13:14:24 | | 54466 | 4f2205a4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\synacode.pas | 01-04-2007 | 22:50:46 | | 51924 | bd7f3f60 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\synautil.pas | 01-31-2007 | 14:12:08 | | 48931 | f760e5aa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\synsock.pas | 05-09-2006 | 21:24:04 | | 3775 | 3bb04fc6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\synafpc.pas | 03-23-2006 | 09:34:48 | | 5151 | df1e2ac4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\synaip.pas | 04-02-2007 | 11:59:46 | | 11703 | 8425449d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\blcksock.pas | 02-14-2007 | 16:33:34 | | 124856 | c47047a4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Synapse\httpsend.pas | 01-23-2007 | 23:21:22 | | 25922 | 2f1fa7ba -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSockClient.pas | 03-15-2007 | 15:05:18 | | 22516 | 1b6ecca0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSock.pas | 03-15-2007 | 14:59:50 | | 56348 | b8a630f9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSessionTracker.pas | 03-15-2007 | 15:04:12 | | 4021 | 97b94cd7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXServerCore.pas | 03-12-2007 | 18:25:58 | | 38495 | cb0df59d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSecurity.pas | 09-24-2002 | 14:34:20 | | 12379 | b135107b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXISAPIFilter.pas | 09-24-2002 | 14:34:16 | | 15441 | 6a49e425 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXISAPI.pas | 05-04-2007 | 13:24:16 | | 60653 | 713bd813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXHTTPServerCore.pas | 03-15-2007 | 14:57:44 | | 28863 | 82473feb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXHTTPHeaderTools.pas | 03-15-2007 | 15:04:32 | | 22705 | 3bfac439 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_Turkish.inc | 09-07-2002 | 03:50:00 | | 3048 | ab191098 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_Spanish.inc | 09-07-2002 | 03:50:00 | | 3710 | 98a473c4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_Russian.inc | 09-07-2002 | 03:50:00 | | 3239 | a5a510e1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_Portuguese.inc | 09-07-2002 | 03:50:00 | | 3661 | 38bc11b6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_LowMem.inc | 09-07-2002 | 03:50:00 | | 2002 | 8240cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_Italian.inc | 09-07-2002 | 03:50:00 | | 3192 | 95c19c3b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_German.inc | 09-07-2002 | 03:50:00 | | 3710 | 6f2b156f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_French.inc | 09-07-2002 | 03:50:00 | | 3536 | 8f7cb1fc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\Resource_English.inc | 09-07-2002 | 03:50:00 | | 4772 | ff7a857c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSock.def | 03-15-2007 | 15:01:08 | | 1520 | b9792a6d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXFree.def | 03-15-2007 | 14:54:16 | | 1520 | ab22d957 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXString.pas | 05-04-2007 | 13:52:46 | | 80111 | 8223cc41 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX\uRODXSocket.pas | 05-04-2007 | 13:44:58 | | 32276 | 81e56336 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRODECReg.pas | 10-17-2002 | 17:52:18 | | 5011 | 71808eeb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRODECUtil.pas | 01-18-2006 | 19:24:52 | | 49030 | 91ea3dfb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROEncKeyPropEditor.pas | 10-20-2002 | 05:02:38 | | 3382 | 7bc73578 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROHash.pas | 03-03-2006 | 14:28:20 | | 176604 | 78d53ee9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROHCMngr.pas | 10-17-2002 | 17:51:26 | | 12218 | e39003c0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRORFC2289.pas | 01-18-2006 | 14:59:34 | | 20132 | d95b167d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRORng.pas | 10-17-2002 | 17:51:22 | | 22359 | 93f22bb5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROcipher1.inc | 08-27-1999 | 00:08:32 | | 80869 | 3a40b145 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROcipher.inc | 08-27-1999 | 00:08:32 | | 137282 | 50274e0d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROHash.inc | 08-27-1999 | 00:08:32 | | 68213 | 764984a8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRORFC1760.inc | 08-27-1999 | 00:08:32 | | 17654 | f39f3a8e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROSquare.inc | 08-27-1999 | 00:08:32 | | 27741 | b7eb3564 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROVer.inc | 08-27-1999 | 00:08:32 | | 1111 | 26ae3b07 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRODECReg.res | 10-17-2002 | 17:52:18 | | 1388 | 9b9386e5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRORFC1760.RES | 08-27-1999 | 00:08:32 | | 8266 | e967ccfe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROEncKeyPropEditor.dfm | 10-20-2002 | 05:02:38 | | 9363 | 2cb3cbb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROCipher1.pas | 10-17-2002 | 17:51:18 | | 114429 | ae7c402 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROCipher.pas | 10-17-2002 | 17:51:14 | | 116936 | 34d6963b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uROCiphers.pas | 06-12-2003 | 18:00:40 | | 1717 | fa1353d2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC\uRODECConst.pas | 04-19-2006 | 12:48:44 | | 3901 | 2eb2da90 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapNewServerModuleWizard.pas | 08-10-2006 | 12:22:12 | | 10347 | 85998c6e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapNewServerModuleWizard.res | 08-10-2006 | 12:22:12 | | 3388 | 42118f7b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapProviderManager.pas | 10-18-2002 | 21:22:38 | | 2043 | 3a3af53d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapProviderPublisher.dfm | 06-13-2003 | 22:05:38 | | 67 | fd402d2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapProviderPublisher.pas | 06-13-2003 | 22:05:38 | | 3638 | b6c1f366 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapPublishedProvidersCollection.pas | 01-14-2003 | 23:42:54 | | 3263 | af3ba108 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapRes.pas | 10-18-2002 | 21:22:28 | | 142 | 603a38c4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\uROBinaryHelpers.pas | 07-03-2007 | 12:44:08 | | 21752 | 1a6a957b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnap_Intf.pas | 06-01-2006 | 10:02:18 | | 11847 | 1be46df3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnap_Async.pas | 05-16-2006 | 10:48:04 | | 11339 | 539125e1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnap_Invk.pas | 05-04-2007 | 11:21:10 | | 9252 | 68678d4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapBaseAppServer.pas | 09-17-2003 | 12:08:48 | | 7825 | 8badb29a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapConnection.pas | 02-02-2007 | 12:55:34 | | 14283 | 6865a975 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap\uRODataSnapModule.pas | 11-29-2002 | 15:38:16 | | 5553 | b65bb0af -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToPascalIntf.pas | 08-15-2007 | 17:41:02 | | 96464 | 7a81e4b1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToPascalInvk.pas | 04-22-2007 | 22:35:20 | | 14559 | 178f40d2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToPascalAsync.pas | 06-14-2007 | 11:30:46 | | 14562 | 814d4e2b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToPascalImpl.pas | 04-22-2007 | 22:34:54 | | 11984 | d32732c5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToWSDL.pas | 08-15-2007 | 18:07:30 | | 25058 | 60bdd082 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToXML.pas | 04-04-2007 | 16:47:40 | | 49915 | 2ee8db50 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLGenTools.pas | 05-04-2007 | 03:17:54 | | 18213 | 5ea61abc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen\uRODLToPascal.pas | 03-07-2004 | 19:40:02 | | 221 | 1cba3fe8 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLIntfConverter.pas | 04-03-2007 | 17:47:42 | | 7405 | b7c675ec -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLSplitableConverter.pas | 04-03-2007 | 17:46:50 | | 17928 | 917d0e0c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLTemplateBasedConverter.pas | 08-02-2007 | 09:34:06 | | 121172 | 727c9c85 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLLineStream.pas | 07-31-2007 | 10:46:34 | | 1970 | 1a90f6be -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLTemplateBasedConverterUtils.pas | 08-01-2007 | 12:53:50 | | 22537 | 39a628a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLCppConverters.pas | 08-01-2007 | 12:50:56 | | 15708 | f07be991 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLDelphiConverters.pas | 04-03-2007 | 17:09:12 | | 8308 | 63a824a4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLImplConverter.pas | 04-03-2007 | 17:09:18 | | 5467 | 6915b5e0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLAsyncConverter.pas | 04-03-2007 | 17:09:06 | | 2973 | 452c9d06 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLConvertersUtils.pas | 04-03-2007 | 17:08:42 | | 35350 | bbd969fd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\uRODLInvkConverter.pas | 04-03-2007 | 17:48:04 | | 4115 | 980446ad -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_async.pas | 06-16-2006 | 19:17:42 | | 817 | 13e3d46b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_intf.pas | 05-12-2006 | 18:49:36 | | 817 | 13e3d46b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_invk.pas | 05-15-2006 | 22:38:00 | | 833 | 7ddc96f6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.impl.dfm | 04-22-2007 | 22:36:00 | | 381 | a04cbe0d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.async.h | 02-06-2007 | 10:43:20 | | 9602 | cb6fee90 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.impl.h | 06-01-2007 | 16:44:36 | | 3441 | 54d1a9b3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.intf.h | 08-01-2007 | 12:58:48 | | 19894 | d4af25c2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.invk.h | 02-06-2007 | 10:44:52 | | 2733 | 50fa14db -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_async.h | 08-08-2006 | 13:43:40 | | 697 | 78d74350 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_intf.h | 05-15-2006 | 22:38:00 | | 697 | 78d74350 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.wrapper_invk.h | 05-15-2006 | 22:38:00 | | 697 | 78d74350 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.async.cpp | 02-06-2007 | 10:43:20 | | 7250 | 65158a6d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.impl.cpp | 06-01-2007 | 16:44:36 | | 2853 | dd9d0cdf -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.intf.cpp | 08-01-2007 | 12:58:48 | | 60313 | 21dcd8e9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.invk.cpp | 02-06-2007 | 10:44:52 | | 8721 | 66b9cc12 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.async.pas | 04-22-2007 | 22:35:54 | | 8009 | 27b351e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.impl.pas | 04-22-2007 | 22:36:00 | | 2806 | 565aff50 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.intf.pas | 08-01-2007 | 12:56:20 | | 59300 | 29878b2f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\template.invk.pas | 04-22-2007 | 22:36:08 | | 6808 | 314d10b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\Templates.res | 08-25-2007 | 15:01:22 | | 198052 | 7adb8438 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen2\Templates\Templates.rc | 08-08-2006 | 13:50:38 | | 1090 | 8e4c6ca0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fCustomIDEMessagesForm.pas | 12-16-2002 | 20:49:56 | | 3426 | d6070695 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fServerProjectOptions.pas | 05-27-2007 | 19:02:36 | | 6474 | e68df966 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDEMenu.pas | 08-24-2007 | 11:20:20 | | 18743 | f1cbc85a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDEPrjWizard.pas | 06-08-2007 | 13:06:18 | | 20411 | 6eb6f495 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDETools.pas | 06-27-2007 | 19:39:24 | | 22492 | ba97f902 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uRORODLNotifier.pas | 03-27-2007 | 15:58:52 | | 18555 | 83f3ff1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROResWriter.pas | 10-29-2002 | 16:33:34 | | 1787 | 2a870d35 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fCustomIDEMessagesForm.dfm | 12-16-2002 | 20:49:56 | | 11001 | 1b57e70 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fServerProjectOptions.dfm | 08-25-2007 | 15:01:18 | | 235625 | 51edc32e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fDispatchersEditorForm.pas | 04-17-2004 | 19:05:20 | | 7084 | f18dbb41 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fDispatchersEditorForm.dfm | 04-17-2004 | 19:05:20 | | 10137 | f3772345 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fROAbout.dfm | 06-07-2007 | 14:51:34 | | 1015047 | 1ca832a3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fROAbout.pas | 06-07-2007 | 14:51:34 | | 2756 | 6d6fdf10 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDEData.pas | 04-05-2004 | 20:29:32 | | 910 | f96f0c72 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDEData.dfm | 04-05-2004 | 20:29:32 | | 29041 | 9c99abdb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\NewRORemoteDataModule.ico | 07-04-1996 | 12:00:00 | | 2238 | 321668e3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fCustomIDEMessagesFormKylix.pas | 12-31-2002 | 07:42:22 | | 3156 | ad2d34ca -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fCustomIDEMessagesFormKylix.dfm | 12-31-2002 | 07:42:22 | | 1098 | 4d16bf32 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fDispatchersEditorFormKylix.pas | 01-20-2003 | 19:28:24 | | 6937 | 88ea2b74 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fDispatchersEditorFormKylix.dfm | 01-20-2003 | 19:28:24 | | 9991 | 7add467f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fServerProjectOptionsKylix.pas | 01-20-2003 | 19:28:24 | | 6156 | bad0c7fa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fServerProjectOptionsKylix.dfm | 01-20-2003 | 19:28:24 | | 61226 | aa9b7d0e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROIDEEditors.pas | 04-20-2006 | 12:31:40 | | 4635 | ffb56c1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROProductVersionInfo_Intf.pas | 06-01-2006 | 10:03:20 | | 22521 | a0a63bee -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROProductVersionInfoForm.dfm | 10-12-2006 | 15:03:04 | | 7248 | ec99494b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROProductVersionInfoForm.pas | 10-12-2006 | 15:03:04 | | 1830 | f1abe6f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROProductVersionInfo.pas | 05-04-2007 | 11:21:22 | | 2693 | 106f42e2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fROServerClassForm.pas | 05-16-2007 | 17:36:42 | | 3156 | 4d9ac0f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fROServerClassForm.dfm | 08-25-2007 | 15:01:18 | | 226559 | 805783c8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROExtraEditors.pas | 01-19-2006 | 01:50:54 | | 3056 | 3924fb00 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fNewProjectForm.pas | 05-27-2007 | 19:10:40 | | 7019 | 7ced46a9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\fNewProjectForm.dfm | 08-25-2007 | 15:01:18 | | 233351 | d6521de4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\Resources.BDS.RES | 03-09-2007 | 17:17:42 | | 8644 | d5066feb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROLoginNeededForm.pas | 08-17-2006 | 14:08:12 | | 5366 | 18fbc25 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\IDE\uROLoginNeededForm.dfm | 08-25-2007 | 15:01:18 | | 56169 | 4e657208 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\uROZLib.pas | 08-01-2007 | 15:59:28 | | 30408 | 9bb506fc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\infback.obj | 04-21-2006 | 10:46:22 | | 6913 | d0e3dbc8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\inffast.obj | 04-21-2006 | 10:46:22 | | 1568 | 17e887e3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\inflate.obj | 04-21-2006 | 10:46:22 | | 10546 | 5515441c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\inftrees.obj | 04-21-2006 | 10:46:22 | | 1681 | efdd92be -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\trees.obj | 04-21-2006 | 10:46:22 | | 10932 | 727b7484 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\adler32.obj | 04-21-2006 | 10:46:22 | | 977 | 60aaa699 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\deflate.obj | 04-21-2006 | 10:46:22 | | 8769 | 85e9bb8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\uncompr.obj | 04-21-2006 | 10:46:22 | | 440 | f2e963c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\compress.obj | 04-21-2006 | 10:46:22 | | 502 | b9f3f946 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\crc32.obj | 04-21-2006 | 10:46:22 | | 10586 | 12c7f923 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\gzio.obj | 04-21-2006 | 10:46:22 | | 5124 | c680789 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\zutil.obj | 04-21-2006 | 10:46:22 | | 747 | 1e962822 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Zlib\FPC -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\FPC\uROZLib.pas | 05-04-2007 | 03:06:04 | | 19834 | 6383d90e -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\Zlib\Kylix -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\uROZLib.pas | 10-18-2002 | 06:48:12 | | 19372 | d1328973 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\infblock.obj | 07-27-2001 | 03:11:00 | | 5527 | 723c3620 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\infcodes.obj | 07-27-2001 | 03:11:00 | | 3790 | e8753755 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\inffast.obj | 07-27-2001 | 03:11:00 | | 2335 | f80d2de0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\inflate.obj | 07-27-2001 | 03:11:00 | | 3280 | 7c512d85 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\inftrees.obj | 07-27-2001 | 03:11:00 | | 8115 | 52a21d54 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\infutil.obj | 07-27-2001 | 03:11:00 | | 1409 | 8577507f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\trees.obj | 07-27-2001 | 03:11:00 | | 11868 | b3a0e0b8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\adler32.obj | 07-27-2001 | 03:11:00 | | 612 | f48dc4c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\ZLib\Kylix\deflate.obj | 07-27-2001 | 03:11:00 | | 7304 | d130f05b -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Styles.css | 06-27-2006 | 10:20:44 | | 1490 | c0549e5f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Samples.html | 06-06-2007 | 17:20:16 | | 14709 | dd09565b -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServer.dpr | 05-29-2007 | 13:34:58 | | 558 | b5a84afb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServer.bdsproj | 05-29-2007 | 13:34:58 | | 8387 | 38d3d70c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServer.dproj | 05-29-2007 | 13:34:58 | | 3588 | cff21a55 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\Arrays.Sample.html | 12-06-2006 | 15:09:34 | | 664 | 1ba26052 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClientMain.pas | 02-19-2007 | 14:24:12 | | 5435 | a2131f15 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysLibrary_Intf.pas | 11-19-2006 | 23:02:58 | | 20467 | ad2bf492 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysLibrary_Invk.pas | 11-19-2006 | 23:02:58 | | 1962 | eb93b462 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServerMain.pas | 11-19-2006 | 23:01:08 | | 874 | 23ab142c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysService_Impl.pas | 11-19-2006 | 20:43:48 | | 4178 | 60d8224a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysLibrary.rodl | 11-19-2006 | 20:42:38 | | 3037 | aac405c6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\Arrays.bpg | 05-29-2007 | 13:35:00 | | 833 | 97a9dbba -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\Arrays.bdsgroup | 05-29-2007 | 13:35:00 | | 711 | a3e53f03 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\Arrays.groupproj | 05-29-2007 | 13:35:00 | | 1464 | bb452b16 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClient.res | 05-29-2007 | 13:34:58 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServer.res | 05-29-2007 | 13:34:58 | | 22748 | 9880fe42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\RODLFILE.res | 11-19-2006 | 23:02:58 | | 3117 | ec338fc8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClientMain.dfm | 02-19-2007 | 14:24:12 | | 2189 | 46b6f8d9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysServerMain.dfm | 08-25-2007 | 15:01:14 | | 1479 | dce2147 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClient.dpr | 05-29-2007 | 13:34:58 | | 316 | 94959e23 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClient.bdsproj | 05-29-2007 | 13:34:58 | | 8387 | 1037e0b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Arrays\ArraysClient.dproj | 05-29-2007 | 13:34:58 | | 3423 | cb8a42c -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\async_EmailSettings.pas | 03-22-2007 | 18:24:56 | | 5320 | 43f7800e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClientMain.dfm | 04-18-2007 | 14:14:08 | | 2935 | db754b5c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServerMain.dfm | 04-18-2007 | 14:14:50 | | 1774 | 6d619ced -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClient.dpr | 05-29-2007 | 13:34:50 | | 291 | c9083b0e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClient.bdsproj | 05-29-2007 | 13:34:50 | | 8386 | 8d907d80 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClient.dproj | 05-29-2007 | 13:34:50 | | 3417 | 85bc08c6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServer.dpr | 05-29-2007 | 13:34:50 | | 528 | 6c666e7b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServer.bdsproj | 05-29-2007 | 13:34:50 | | 8385 | 116b65e9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServer.dproj | 05-29-2007 | 13:34:50 | | 3578 | 81e9b4eb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncGroup.Sample.html | 06-25-2006 | 11:29:28 | | 1077 | 9a81331f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncLibrary.rodl | 03-29-2006 | 01:38:18 | | 960 | 733497f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncGroup.bpg | 05-29-2007 | 13:34:52 | | 827 | 28d7ce26 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncGroup.bdsgroup | 05-29-2007 | 13:34:52 | | 705 | bf4ab570 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncGroup.groupproj | 05-29-2007 | 13:34:52 | | 1446 | f014c1d4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClientMain.pas | 04-18-2007 | 14:14:08 | | 4437 | df3bd674 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncLibrary_Async.pas | 03-29-2006 | 01:42:18 | | 2797 | e4f347f6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncLibrary_Intf.pas | 05-28-2007 | 11:09:00 | | 2759 | 1ada3524 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncLibrary_Invk.pas | 05-28-2007 | 11:09:00 | | 1880 | 1894656e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServerMain.pas | 04-18-2007 | 14:14:50 | | 800 | e77d4111 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncService_Impl.pas | 03-29-2006 | 01:40:48 | | 1390 | 1db46eb1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncClient.res | 05-29-2007 | 13:34:50 | | 22748 | a6c8709c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\AsyncServer.res | 05-29-2007 | 13:34:50 | | 23460 | 98e0e797 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Async\RODLFILE.res | 03-29-2006 | 01:49:18 | | 1040 | dd47a7de -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerLibrary_Intf.pas | 04-04-2006 | 10:36:50 | | 3196 | 19ac35fa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerLibrary_Invk.pas | 04-04-2006 | 10:36:50 | | 2595 | 8125cb17 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerService_Impl.pas | 04-04-2006 | 02:46:10 | | 1544 | 85caed2e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer.res | 05-29-2007 | 13:34:40 | | 22748 | b8aec145 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_Client.res | 05-29-2007 | 13:34:40 | | 23752 | 5cc5b097 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\RODLFILE.res | 04-04-2006 | 10:36:50 | | 1200 | ae3a88b4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_ClientMain.dfm | 08-25-2007 | 15:01:14 | | 1897 | 5e37b29d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_ServerMain.dfm | 08-25-2007 | 15:01:14 | | 880 | 69862c41 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer.dpr | 05-29-2007 | 13:34:40 | | 607 | b94d6b61 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer.bdsproj | 05-29-2007 | 13:34:40 | | 8385 | 75a3053c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer.dproj | 05-29-2007 | 13:34:40 | | 3602 | 9f44686f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_Client.dpr | 05-29-2007 | 13:34:40 | | 349 | 76b958cb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_Client.bdsproj | 05-29-2007 | 13:34:40 | | 8391 | e6a035f4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_Client.dproj | 05-29-2007 | 13:34:40 | | 3452 | 7668b92b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerGroup.Sample.html | 04-21-2006 | 14:09:48 | | 851 | 4235d66 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer.rodl | 04-04-2006 | 02:38:46 | | 1120 | 2edc714f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerGroup.bpg | 05-29-2007 | 13:34:42 | | 842 | 5abd1df7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerGroup.bdsgroup | 05-29-2007 | 13:34:42 | | 720 | 747589dc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServerGroup.groupproj | 05-29-2007 | 13:34:42 | | 1491 | 68e88ba7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_ClientMain.pas | 05-30-2006 | 13:48:20 | | 4146 | 469d57e6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Auto Server\AutoServer_ServerMain.pas | 04-01-2006 | 07:34:54 | | 831 | 786df99e -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChat.res | 05-29-2007 | 13:34:26 | | 23604 | 68173a9b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\RODLFILE.res | 03-29-2006 | 02:16:36 | | 1080 | f324ff5a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatMain.dfm | 05-17-2006 | 19:35:34 | | 11317 | 8578e85 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChat.dpr | 05-29-2007 | 13:34:26 | | 598 | dfee1aa1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChat.bdsproj | 05-29-2007 | 13:34:26 | | 8387 | 44121064 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChat.dproj | 05-29-2007 | 13:34:26 | | 3614 | e1bd1ed4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChat.Sample.html | 04-18-2007 | 15:07:42 | | 808 | 5663d643 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatLibrary.rodl | 03-29-2006 | 02:00:58 | | 1000 | 391f0573 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatLibrary_Async.pas | 03-29-2006 | 02:15:36 | | 3696 | 23ad42f7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatLibrary_Intf.pas | 03-29-2006 | 02:16:36 | | 3384 | 471d9498 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatLibrary_Invk.pas | 03-29-2006 | 02:16:36 | | 2725 | c644c74 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatMain.pas | 05-17-2006 | 19:35:34 | | 3684 | e86b4c62 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Broadcast Chat\BroadcastChatService_Impl.pas | 04-25-2006 | 16:35:54 | | 2268 | 98f9851d -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM.Sample.html | 06-09-2006 | 12:16:42 | | 1014 | 45690f16 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM_Main.dfm | 05-25-2006 | 02:13:24 | | 1097 | fe40284b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM_Main.pas | 05-25-2006 | 02:13:24 | | 2534 | e20f7fdc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COMClient.dpr | 05-29-2007 | 13:34:06 | | 292 | ab1866ac -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COMClient.bdsproj | 05-29-2007 | 13:34:06 | | 8384 | c3f13863 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COMClient.dproj | 05-29-2007 | 13:34:06 | | 3441 | 439f963d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COMClient.res | 05-29-2007 | 13:34:06 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\ExcelDemo.xls | 05-25-2006 | 02:01:20 | | 33280 | 6a62f60a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\ROASPDemo.asp | 05-25-2006 | 02:11:46 | | 777 | 43fcce39 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\ROCOM_TLB.dcr | 03-04-2004 | 01:47:42 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\ROCOM_TLB.pas | 03-04-2004 | 01:47:42 | | 11780 | 83b1e903 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\Test.vbs | 05-25-2006 | 02:09:46 | | 631 | 97dd7ac2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM.bpg | 05-29-2007 | 13:34:08 | | 842 | feb6358b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM.bdsgroup | 05-29-2007 | 13:34:08 | | 720 | cbb716e0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\COM\COM.groupproj | 05-29-2007 | 13:34:08 | | 1491 | 9ad0cdc7 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServerMain.pas | 05-23-2007 | 11:01:46 | | 797 | da0dfbc5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClient.res | 05-29-2007 | 13:33:58 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapIsapiServer.res | 05-29-2007 | 13:33:58 | | 876 | 384c3b77 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServer.res | 05-29-2007 | 13:33:58 | | 22748 | 5ac86f48 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClientMain.dfm | 05-23-2007 | 11:04:48 | | 11464 | 1c0b714 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapISAPIServerMain.dfm | 03-29-2006 | 04:18:06 | | 767 | 5ba888d9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServerData.dfm | 05-23-2007 | 10:13:48 | | 2451 | 7c351e65 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServerMain.dfm | 08-25-2007 | 15:01:14 | | 50379 | c76bc287 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClient.dpr | 05-29-2007 | 13:33:58 | | 314 | 8751c22b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClient.bdsproj | 05-29-2007 | 13:33:58 | | 8389 | 64e1961b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClient.dproj | 05-29-2007 | 13:33:58 | | 3435 | b645afa3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapIsapiServer.dpr | 05-29-2007 | 13:33:58 | | 588 | a1718417 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapIsapiServer.bdsproj | 05-29-2007 | 13:33:58 | | 8394 | df59b532 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapIsapiServer.dproj | 05-29-2007 | 13:33:58 | | 3582 | 62ad9211 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServer.dpr | 05-29-2007 | 13:33:58 | | 437 | 6b5b288b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServer.bdsproj | 05-29-2007 | 13:33:58 | | 8389 | eff3f304 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServer.dproj | 05-29-2007 | 13:33:58 | | 3552 | 294b0b69 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnap.Sample.html | 06-28-2006 | 22:01:16 | | 450 | e26dfd76 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnap.bpg | 05-29-2007 | 13:34:00 | | 931 | af39af27 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnap.bdsgroup | 05-29-2007 | 13:34:00 | | 834 | bad36964 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnap.groupproj | 05-29-2007 | 13:34:00 | | 1942 | e6d5be4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapClientMain.pas | 05-23-2007 | 11:04:48 | | 3295 | 15836f58 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapISAPIServerMain.pas | 03-29-2006 | 04:18:06 | | 521 | 74ba5549 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\DataSnap\DataSnapServerData.pas | 05-23-2007 | 10:13:48 | | 1602 | 42fc21e1 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClientMain.dfm | 08-25-2007 | 15:01:16 | | 2188 | 5263b0e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServerData.dfm | 08-25-2007 | 15:01:16 | | 810 | fcd4035e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServerMain.dfm | 08-25-2007 | 15:01:16 | | 1619 | 19f7f60f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferService_Impl.dfm | 06-28-2006 | 09:40:16 | | 316 | a691b8a8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClient.dpr | 05-29-2007 | 13:31:50 | | 601 | c35fab3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClient.bdsproj | 05-29-2007 | 13:31:50 | | 8401 | 39fb6ab6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClient.dproj | 05-29-2007 | 13:31:50 | | 3659 | 79aedd3a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServer.dpr | 05-29-2007 | 13:31:50 | | 1260 | 80907c1c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServer.bdsproj | 05-29-2007 | 13:31:50 | | 8401 | 4ef3fa44 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServer.dproj | 05-29-2007 | 13:31:50 | | 3922 | c701be9a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransfer.Sample.html | 06-29-2006 | 08:59:50 | | 1061 | 5edbf2de -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferLibrary.rodl | 03-29-2006 | 05:13:42 | | 2042 | f6cf27f2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransfer.bpg | 05-29-2007 | 13:33:00 | | 917 | 382b179b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransfer.bdsgroup | 05-29-2007 | 13:33:00 | | 795 | fdcabdde -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransfer.groupproj | 05-29-2007 | 13:33:00 | | 1716 | 14580fc3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClientDownloadThread.pas | 12-12-2006 | 14:18:48 | | 5614 | 3f297787 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClientMain.pas | 08-24-2007 | 17:28:48 | | 6730 | d8877ad3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClientUploadThread.pas | 01-12-2007 | 13:51:16 | | 6077 | dfc7137b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferLibrary_Intf.pas | 06-28-2006 | 10:11:06 | | 7224 | f5545d3c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferLibrary_Invk.pas | 03-29-2006 | 05:31:20 | | 4675 | feda1613 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServerData.pas | 06-28-2006 | 09:38:26 | | 915 | acf5730a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServerMain.pas | 06-29-2006 | 09:30:54 | | 1501 | 1131f900 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferService_Impl.pas | 06-28-2006 | 09:40:16 | | 3562 | a82b63c9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferClient.res | 05-29-2007 | 13:31:50 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ExtendedFileTransferServer.res | 05-29-2007 | 13:31:50 | | 22748 | 9880fe42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\RODLFILE.res | 03-29-2006 | 05:31:20 | | 2122 | c3f7ba9c -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\DownloadFiles -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\DownloadFiles\create.dir -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ServerFiles -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Extended File Transfer\ServerFiles\create.dir -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleService_Impl.dfm | 04-19-2006 | 14:02:42 | | 136 | 1152cd98 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClient.dpr | 05-29-2007 | 13:31:42 | | 336 | db8b9bd4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClient.bdsproj | 05-29-2007 | 13:31:42 | | 8392 | f2dbf45d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClient.dproj | 05-29-2007 | 13:31:42 | | 3506 | 6c9ed85 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServer.dpr | 05-29-2007 | 13:31:42 | | 622 | 4e9b285 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServer.bdsproj | 05-29-2007 | 13:31:42 | | 8392 | 66498e4a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServer.dproj | 05-29-2007 | 13:31:42 | | 3677 | 6b9e25d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample.Sample.html | 04-19-2006 | 14:07:06 | | 1827 | a487b847 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample.rodl | 03-27-2006 | 13:41:14 | | 1595 | b0838078 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample.bpg | 05-29-2007 | 13:31:44 | | 863 | 46a2c77c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample.bdsgroup | 05-29-2007 | 13:31:44 | | 741 | fcd643c5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample.groupproj | 05-29-2007 | 13:31:44 | | 1554 | 27ee451e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample_Intf.pas | 03-27-2006 | 12:13:16 | | 4551 | ac8d4205 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSample_Invk.pas | 03-27-2006 | 12:13:16 | | 4440 | 80e9d23e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClientMain.pas | 05-30-2006 | 13:48:20 | | 2066 | a28c596f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServerMain.pas | 06-29-2006 | 10:44:06 | | 3419 | 2319eacf -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleService_Impl.pas | 04-19-2006 | 14:02:42 | | 3250 | d0906ccf -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClient.res | 05-29-2007 | 13:31:42 | | 876 | dd75daa5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServer.res | 05-29-2007 | 13:31:42 | | 876 | dd75daa5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\RODLFILE.res | 03-27-2006 | 13:40:02 | | 1675 | 2dc15a9b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleClientMain.dfm | 05-30-2006 | 13:48:20 | | 3058 | 8e2f398b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\First Sample\FirstSampleServerMain.dfm | 08-25-2007 | 15:01:16 | | 2937 | e46f243a -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClientMain.dfm | 08-25-2007 | 15:01:16 | | 4056 | c23dfedd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServerMain.dfm | 08-25-2007 | 15:01:16 | | 3622 | abf2971 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatService_Impl.dfm | 04-24-2006 | 15:03:22 | | 307 | 8e66e832 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClient.dpr | 05-29-2007 | 13:31:32 | | 330 | fef6b892 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClient.bdsproj | 05-29-2007 | 13:31:32 | | 8389 | eb9ab432 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClient.dproj | 05-29-2007 | 13:31:32 | | 3435 | ed3871cb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServer.dpr | 05-29-2007 | 13:31:32 | | 622 | 14469723 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServer.bdsproj | 05-29-2007 | 13:31:32 | | 8389 | 4a0fa1e9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServer.dproj | 05-29-2007 | 13:31:32 | | 3661 | 2ba21947 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChat.Sample.html | 06-27-2006 | 11:44:10 | | 1087 | 95ee99fb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatLibrary.rodl | 03-29-2006 | 05:59:28 | | 3714 | 5ae0c36f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChat.bpg | 05-29-2007 | 13:31:34 | | 845 | ee47f7a8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChat.bdsgroup | 05-29-2007 | 13:31:34 | | 723 | 49ae321b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChat.groupproj | 05-29-2007 | 13:31:34 | | 1500 | 98d48d16 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClientMain.pas | 07-14-2006 | 10:33:14 | | 8032 | 355838ad -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatLibrary_Intf.pas | 03-29-2006 | 06:46:46 | | 20759 | cccf53e5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatLibrary_Invk.pas | 03-29-2006 | 06:46:46 | | 4289 | 7882a86f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServerMain.pas | 03-29-2006 | 06:48:40 | | 4623 | 6afe478f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatService_Impl.pas | 04-24-2006 | 15:03:22 | | 4752 | 665685f5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatClient.res | 05-29-2007 | 13:31:32 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\HTTP Chat\HTTPChatServer.res | 05-29-2007 | 13:31:32 | | 22748 | b8aec145 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPI.res | 05-29-2007 | 13:31:24 | | 876 | 483416c3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServer.res | 05-29-2007 | 13:34:06 | | 23724 | 358994b2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\RODLFile.RES | 04-05-2006 | 01:31:52 | | 5085 | d0d904f4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClientMain.dfm | 08-25-2007 | 15:01:16 | | 31528 | 4e4d33ea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPIMain.dfm | 03-28-2006 | 01:56:30 | | 986 | 7a404030 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServerMain.dfm | 08-25-2007 | 15:01:16 | | 30985 | a5181617 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoService_Impl.dfm | 12-05-2006 | 10:53:02 | | 177 | e33bc8cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClient.dpr | 05-29-2007 | 13:31:24 | | 378 | f957e04d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClient.bdsproj | 05-29-2007 | 13:31:24 | | 8389 | 3ea7b0f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClient.dproj | 05-29-2007 | 13:31:24 | | 3491 | 1bdaa565 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPI.dpr | 05-29-2007 | 13:31:24 | | 872 | dd546aad -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPI.bdsproj | 05-29-2007 | 13:31:24 | | 8388 | 210b432f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPI.dproj | 05-29-2007 | 13:31:24 | | 3651 | 9c14862e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServer.dpr | 05-29-2007 | 13:34:06 | | 666 | 268a8936 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServer.bdsproj | 05-29-2007 | 13:34:06 | | 8388 | 75c39234 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServer.dproj | 05-29-2007 | 13:34:06 | | 3419 | 193be3fc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemo.Sample.html | 04-23-2007 | 10:09:50 | | 2005 | f7071e14 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoLibrary.rodl | 03-28-2006 | 01:49:04 | | 5005 | 8ce21a9e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemo.bpg | 05-29-2007 | 13:31:26 | | 913 | a68ed935 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemo.bdsgroup | 05-29-2007 | 13:31:26 | | 816 | b2e81e1f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemo.groupproj | 05-29-2007 | 13:31:26 | | 1888 | 6bfe9ff8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClientMain.pas | 06-07-2007 | 15:19:52 | | 48225 | 6ea1b7c9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoCustomClass.pas | 04-17-2007 | 16:54:12 | | 1921 | 1a2cab74 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoISAPIMain.pas | 03-28-2006 | 01:56:30 | | 542 | 4150b3ed -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoLibrary_Intf.pas | 04-26-2006 | 12:17:06 | | 23475 | c252c6a2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoLibrary_Invk.pas | 04-05-2006 | 01:31:52 | | 13480 | 8dad5d1e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoServerMain.pas | 11-20-2006 | 12:34:22 | | 14707 | eb63d867 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoService_Impl.pas | 12-05-2006 | 10:53:02 | | 5057 | e29a2f3a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\MegaDemo\MegaDemoClient.res | 05-29-2007 | 13:31:24 | | 22748 | ab21813 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ServerMain.pas | 06-24-2006 | 21:23:18 | | 5618 | d1810551 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannelLibrary_Intf.pas | 04-04-2006 | 07:01:00 | | 2635 | abb4ea9c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannelLibrary_Invk.pas | 04-04-2006 | 07:01:00 | | 1725 | 5bf8baf5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannelService_Impl.pas | 04-04-2006 | 04:45:14 | | 1362 | 2c284490 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Client.res | 05-29-2007 | 13:31:14 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_DLLServer.res | 05-29-2007 | 13:31:14 | | 876 | d795f11f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Server.res | 05-29-2007 | 13:31:14 | | 23724 | 358994b2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ClientData.dfm | 04-04-2006 | 06:05:08 | | 484 | fe120d71 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ClientMain.dfm | 08-25-2007 | 15:01:16 | | 3250 | bce2f3c2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ServerMain.dfm | 08-25-2007 | 15:01:16 | | 6099 | 9dd21ec0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Client.dpr | 05-29-2007 | 13:31:14 | | 540 | 6fb162af -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Client.bdsproj | 05-29-2007 | 13:31:14 | | 8394 | e2ffee59 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Client.dproj | 05-29-2007 | 13:31:14 | | 3592 | 6758ebc9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_DLLServer.dpr | 05-29-2007 | 13:31:14 | | 752 | 98b19d6c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_DLLServer.bdsproj | 05-29-2007 | 13:31:14 | | 8397 | 2d3bb92a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_DLLServer.dproj | 05-29-2007 | 13:31:14 | | 3533 | ffe4175e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Server.dpr | 05-29-2007 | 13:31:14 | | 634 | 44dec486 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Server.bdsproj | 05-29-2007 | 13:31:14 | | 8393 | 7391f66a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_Server.dproj | 05-29-2007 | 13:31:14 | | 3647 | 604bf35d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel.Sample.html | 06-24-2006 | 21:27:30 | | 1655 | 56ed5cca -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannelLibrary.rodl | 04-04-2006 | 04:12:18 | | 674 | 96daa98b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel.bpg | 05-29-2007 | 13:31:18 | | 970 | 3b881d46 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel.bdsgroup | 05-29-2007 | 13:31:18 | | 873 | a9530172 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel.groupproj | 05-29-2007 | 13:31:18 | | 2059 | b0cf8117 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ClientData.pas | 04-04-2006 | 06:05:08 | | 1181 | 1b030990 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Multi Channel\MultiChannel_ClientMain.pas | 06-24-2006 | 21:25:30 | | 3851 | 3504389 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client.res | 05-29-2007 | 13:30:56 | | 23460 | 92e057f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer.res | 05-29-2007 | 13:30:56 | | 23460 | 98e0e797 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer.res | 05-29-2007 | 13:30:56 | | 23460 | 98e0e797 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\RODLFILE.res | 03-30-2006 | 02:47:58 | | 1775 | c321a7ed -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client_Main.dfm | 08-25-2007 | 15:01:16 | | 1825 | 6e75767d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer_Main.dfm | 08-25-2007 | 15:01:16 | | 909 | 6b58c17b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer_Main.dfm | 03-30-2006 | 02:37:00 | | 961 | 5d8699c9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client.dpr | 05-29-2007 | 13:30:56 | | 348 | 62313c1e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client.bdsproj | 05-29-2007 | 13:30:56 | | 8392 | 4b5d3ff3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client.dproj | 05-29-2007 | 13:30:56 | | 3460 | 8a5d75f7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer.dpr | 05-29-2007 | 13:30:56 | | 682 | 9397013d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer.bdsproj | 05-29-2007 | 13:30:56 | | 8396 | 684f9f13 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer.dproj | 05-29-2007 | 13:30:56 | | 3676 | b626780a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer.dpr | 05-29-2007 | 13:30:56 | | 455 | cda8c474 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer.bdsproj | 05-29-2007 | 13:30:56 | | 8397 | 5c66ee8e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer.dproj | 05-29-2007 | 13:30:56 | | 3555 | bf1c9c95 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer.Sample.html | 06-26-2006 | 10:10:02 | | 1263 | 2e2c6279 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServerMainLibrary.rodl | 03-30-2006 | 02:42:14 | | 1695 | bb61173 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer.bpg | 05-29-2007 | 13:31:00 | | 979 | 5e269229 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer.bdsgroup | 05-29-2007 | 13:31:00 | | 882 | 3d97a4a9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer.groupproj | 05-29-2007 | 13:31:00 | | 2086 | eb0273b0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_Client_Main.pas | 03-30-2006 | 02:44:30 | | 2087 | 81d8b1a2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_MainServer_Main.pas | 03-30-2006 | 02:33:50 | | 882 | c0a56925 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer_Impl.pas | 06-26-2006 | 09:33:24 | | 3220 | f4204377 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServer_ProxyServer_Main.pas | 03-30-2006 | 02:37:00 | | 995 | 23eb98 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServerMainLibrary_Intf.pas | 03-30-2006 | 02:47:58 | | 5837 | c0e0db99 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServerMainLibrary_Invk.pas | 03-30-2006 | 02:47:58 | | 3960 | 446bc71a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Proxy Server\ProxyServerMainService_Impl.pas | 03-30-2006 | 02:43:30 | | 1874 | d1203b0e -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscoveryMain.dfm | 08-25-2007 | 15:01:16 | | 5962 | 844dc044 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscoveryMain.pas | 07-27-2006 | 14:56:14 | | 5879 | 96244e36 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\RODLFILE.res | 04-24-2003 | 14:04:56 | | 1233 | 11366909 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscovery.dpr | 05-29-2007 | 13:30:42 | | 335 | d93d2659 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscovery.bdsproj | 05-29-2007 | 13:30:42 | | 8391 | 880860f1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscovery.dproj | 05-29-2007 | 13:30:42 | | 3447 | 19461b56 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscovery.res | 05-29-2007 | 13:30:42 | | 22748 | a6c8709c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Service Discovery\ServiceDiscovery.Sample.html | 06-26-2006 | 12:08:28 | | 766 | 19fd5fdf -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypesService_Impl.pas | 06-26-2006 | 14:16:00 | | 3421 | ac3f679b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\RODLFILE.res | 04-26-2006 | 22:13:44 | | 2414 | 9fe1547c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Client.res | 05-29-2007 | 13:30:30 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server.res | 05-29-2007 | 13:30:30 | | 22748 | 5ac86f48 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\LoginService_Impl.dfm | 04-05-2006 | 03:46:14 | | 124 | 32ea6995 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_ClientMain.dfm | 08-25-2007 | 15:01:16 | | 3774 | 703923f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server_DBSessionManager.dfm | 06-26-2006 | 14:10:58 | | 4009 | cb30ca18 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_ServerMain.dfm | 08-25-2007 | 15:01:16 | | 3848 | 4e60f6f8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypesService_Impl.dfm | 06-26-2006 | 14:16:00 | | 138 | 4416762f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Client.dpr | 05-29-2007 | 13:30:30 | | 354 | 272a299b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Client.bdsproj | 05-29-2007 | 13:30:30 | | 8394 | 23d4b218 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Client.dproj | 05-29-2007 | 13:30:30 | | 3465 | 3cfd8184 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server.dpr | 05-29-2007 | 13:30:30 | | 1015 | b36c19c5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server.bdsproj | 05-29-2007 | 13:30:30 | | 8394 | 4983b340 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server.dproj | 05-29-2007 | 13:30:30 | | 3966 | 7f9ef0a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes.Sample.html | 06-23-2006 | 10:01:24 | | 2052 | 33b83a6a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes Create Session Table.sql | 03-20-2006 | 00:06:18 | | 351 | f2b14a0c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypesLibrary.rodl | 04-05-2006 | 04:12:48 | | 2334 | b8ea53de -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes.bpg | 05-29-2007 | 13:30:32 | | 875 | 5ddae631 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes.bdsgroup | 05-29-2007 | 13:30:32 | | 753 | c8beb8f9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes.groupproj | 05-29-2007 | 13:30:32 | | 1590 | 5e7ce81a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\LoginService_Impl.pas | 04-05-2006 | 03:46:14 | | 2933 | 6fac7acd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_ClientMain.pas | 06-26-2006 | 11:19:42 | | 2896 | 4a03cfc1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_Server_DBSessionManager.pas | 06-26-2006 | 14:10:58 | | 715 | 5da68cb1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypes_ServerMain.pas | 10-23-2006 | 16:23:20 | | 8838 | 80411a76 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypesLibrary_Intf.pas | 04-26-2006 | 22:13:44 | | 6466 | a8c0b11b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Session Types\SessionTypesLibrary_Invk.pas | 04-26-2006 | 22:13:44 | | 6085 | c939878 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Server.res | 05-29-2007 | 13:30:22 | | 22748 | 9880fe42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\ChatServerService_Impl.dfm | 03-31-2006 | 00:13:12 | | 306 | 78c64ebb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\LoginService_Impl.dfm | 08-14-2006 | 14:55:04 | | 270 | f057e2a3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_ClientMain.dfm | 08-25-2007 | 15:01:16 | | 2525 | eb12f20f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_ServerMain.dfm | 05-24-2006 | 16:41:36 | | 1236 | 4a229ff2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Client.dpr | 05-29-2007 | 13:30:22 | | 358 | 253cff1a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Client.bdsproj | 05-29-2007 | 13:30:22 | | 8401 | 2b0832e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Client.dproj | 05-29-2007 | 13:30:22 | | 3507 | 126cbbfa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Server.dpr | 05-29-2007 | 13:30:22 | | 849 | c8660929 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Server.bdsproj | 05-29-2007 | 13:30:22 | | 8401 | 610111ed -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Server.dproj | 05-29-2007 | 13:30:22 | | 3865 | 702df497 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat.Sample.html | 06-27-2006 | 11:56:42 | | 882 | b73f1b52 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChatLibrary.rodl | 04-24-2006 | 18:08:12 | | 2743 | 122f4946 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat.bpg | 05-29-2007 | 13:30:24 | | 917 | 66912271 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat.bdsgroup | 05-29-2007 | 13:30:24 | | 795 | 2d5f9084 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat.groupproj | 05-29-2007 | 13:30:24 | | 1716 | 82bf135a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\ChatServerService_Impl.pas | 03-31-2006 | 00:13:12 | | 2589 | 3825ad11 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\LoginService_Impl.pas | 08-14-2006 | 14:55:04 | | 3065 | f390bf2d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_ClientMain.pas | 06-27-2006 | 16:56:08 | | 5666 | 260056d1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_ServerMain.pas | 05-24-2006 | 16:41:36 | | 1372 | 1052fde9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChatLibrary_Intf.pas | 04-24-2006 | 18:13:44 | | 11648 | cb35ed3c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChatLibrary_Invk.pas | 03-31-2006 | 00:13:16 | | 4215 | 38f1609b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\RODLFILE.res | 04-24-2006 | 18:13:44 | | 2823 | b1b817e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Super TCP Channel Chat\SuperTCPChannelChat_Client.res | 05-29-2007 | 13:30:22 | | 22748 | a6c8709c -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\SingletonService_Impl.pas | 04-11-2004 | 02:03:22 | | 1026 | bdda303d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\SingleCallService_Impl.pas | 06-27-2006 | 16:26:50 | | 984 | ee851bfb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\RODLFile.RES | 06-27-2006 | 17:29:44 | | 2344 | b28394f1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\PooledService_Impl.pas | 06-27-2006 | 17:32:42 | | 1086 | e3d6491f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClientMain.pas | 06-27-2006 | 16:25:46 | | 2449 | 7cbd4d47 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClientMain.dfm | 08-25-2007 | 15:01:14 | | 3886 | 74ed0aac -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactories.Sample.html | 06-29-2006 | 10:15:22 | | 1782 | 2a889f32 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServerMain.pas | 06-27-2006 | 16:25:22 | | 893 | 64337583 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServerMain.dfm | 08-25-2007 | 15:01:14 | | 1033 | fc957de2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServer.res | 05-29-2007 | 13:34:14 | | 23724 | 358994b2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServer.dpr | 05-29-2007 | 13:34:14 | | 683 | c186b4c7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServer.bdsproj | 05-29-2007 | 13:34:14 | | 8392 | 6556a4af -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryServer.dproj | 05-29-2007 | 13:34:14 | | 3752 | dcda899f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryLibrary_Invk.pas | 06-27-2006 | 17:29:44 | | 5685 | c0e8cfbd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryLibrary_Intf.pas | 06-27-2006 | 17:29:44 | | 6971 | b6a2c4e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryLibrary.RODL | 06-27-2006 | 16:29:30 | | 2264 | 14f71e45 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClient.res | 05-29-2007 | 13:34:14 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClient.dpr | 05-29-2007 | 13:34:14 | | 358 | 516f1074 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClient.bdsproj | 05-29-2007 | 13:34:14 | | 8393 | a538cd47 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactoryClient.dproj | 05-29-2007 | 13:34:14 | | 3520 | 3891a138 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactories.bpg | 05-29-2007 | 13:34:18 | | 869 | 73b63fcc -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactories.bdsgroup | 05-29-2007 | 13:34:18 | | 747 | 12f840bd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Class Factories\ClassFactories.groupproj | 05-29-2007 | 13:34:18 | | 1572 | 66abd4ee -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClient.res | 05-29-2007 | 13:33:20 | | 23752 | 96821486 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServer.res | 05-29-2007 | 13:33:20 | | 22748 | 14d4a9ca -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\RODLFile.RES | 04-06-2006 | 06:44:34 | | 937 | f222f8a2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClientMain.dfm | 08-25-2007 | 15:01:14 | | 1751 | 4862e361 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServerMain.dfm | 08-25-2007 | 15:01:14 | | 1382 | 21bdb27f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClient.dpr | 05-29-2007 | 13:33:20 | | 319 | f950b058 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClient.bdsproj | 05-29-2007 | 13:33:20 | | 8396 | 54180f71 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClient.dproj | 05-29-2007 | 13:33:20 | | 3482 | 5ad67acf -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServer.dpr | 05-29-2007 | 13:33:20 | | 631 | dd2b21f8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServer.bdsproj | 05-29-2007 | 13:33:20 | | 8397 | 2b05eed9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServer.dproj | 05-29-2007 | 13:33:20 | | 3678 | ab8e7b08 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifier.Sample.html | 06-27-2006 | 11:01:12 | | 1004 | 8e6ae02 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierLibrary.rodl | 03-28-2006 | 03:00:50 | | 857 | 1980f353 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifier.bpg | 05-29-2007 | 13:33:22 | | 893 | b7af5d3c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifier.bdsgroup | 05-29-2007 | 13:33:22 | | 771 | 6dca8732 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifier.groupproj | 05-29-2007 | 13:33:22 | | 1644 | e17d4e3c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierClientMain.pas | 05-30-2006 | 13:54:06 | | 1260 | 6ad7dec -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierLibrary_Intf.pas | 04-06-2006 | 06:44:34 | | 2755 | 37b19a0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierLibrary_Invk.pas | 04-06-2006 | 06:44:34 | | 1795 | 8f82af1f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierServerMain.pas | 07-17-2006 | 11:16:24 | | 1295 | c22a8943 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dispatch Notifier\DispatchNotifierService_Impl.pas | 06-27-2006 | 11:00:44 | | 5114 | 7f0cc17f -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClient.res | 05-29-2007 | 13:33:06 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServer.res | 05-29-2007 | 13:33:06 | | 22748 | 5ac86f48 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\RODLFile.RES | 03-31-2006 | 00:23:08 | | 2164 | d19dd717 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClientMain.dfm | 08-25-2007 | 15:01:14 | | 2869 | 635cb96e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServerMain.dfm | 08-25-2007 | 15:01:14 | | 932 | fda20638 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClient.dpr | 05-29-2007 | 13:33:06 | | 357 | 6f318736 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClient.bdsproj | 05-29-2007 | 13:33:06 | | 8395 | d2ac705c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClient.dproj | 05-29-2007 | 13:33:06 | | 3471 | 284c8c82 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServer.dpr | 05-29-2007 | 13:33:06 | | 655 | e1a64f90 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServer.bdsproj | 05-29-2007 | 13:33:06 | | 8395 | 643a4d87 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServer.dproj | 05-29-2007 | 13:33:06 | | 3660 | 19191994 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequest.Sample.html | 06-26-2006 | 07:28:08 | | 1154 | e497961d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestLibrary.rodl | 03-28-2006 | 03:23:24 | | 2084 | 828a54fb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequest.bpg | 05-29-2007 | 13:33:12 | | 881 | 1b665247 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequest.bdsgroup | 05-29-2007 | 13:33:12 | | 759 | 4e609930 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequest.groupproj | 05-29-2007 | 13:33:12 | | 1608 | 1060d47d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestClientMain.pas | 06-07-2007 | 16:46:58 | | 2900 | d0e0109a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestLibrary_Intf.pas | 03-31-2006 | 00:23:08 | | 6010 | 5fdb6261 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestLibrary_Invk.pas | 03-31-2006 | 00:23:08 | | 3949 | bc346d43 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestServerMain.pas | 06-27-2006 | 16:15:04 | | 787 | 55792a7e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Dynamic Request\DynamicRequestService_Impl.pas | 03-28-2006 | 21:35:20 | | 1972 | 9033c9cf -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_ClientMain.dfm | 08-25-2007 | 15:01:16 | | 1457 | ed042424 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_ServerMain.dfm | 06-27-2006 | 10:15:28 | | 1302 | ae6cc604 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer.dpr | 05-29-2007 | 13:30:12 | | 542 | 7d667549 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer.bdsproj | 05-29-2007 | 13:30:12 | | 8385 | 7866e466 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer.dproj | 05-29-2007 | 13:30:12 | | 3581 | 9e29961 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Client.dpr | 05-29-2007 | 13:30:12 | | 373 | 10a750ac -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Client.bdsproj | 05-29-2007 | 13:30:12 | | 8391 | 2b842348 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Client.dproj | 05-29-2007 | 13:30:12 | | 3504 | 25e5588 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServerGroup.Sample.html | 06-26-2006 | 17:44:38 | | 467 | 54ecfae1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer.rodl | 10-24-2006 | 13:34:38 | | 1147 | eb4e22c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServerGroup.bpg | 05-29-2007 | 13:30:16 | | 842 | b6041d43 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServerGroup.bdsgroup | 05-29-2007 | 13:30:16 | | 720 | ad39a29a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServerGroup.groupproj | 05-29-2007 | 13:30:16 | | 1491 | 632a5bb8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TfrmServerSelectSrc.pas | 03-20-2006 | 01:06:16 | | 2517 | 508ceed0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_ClientMain.pas | 06-27-2006 | 10:15:24 | | 1278 | e42d9801 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Impl.pas | 03-29-2006 | 00:57:52 | | 1497 | 72e65940 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Intf.pas | 03-29-2006 | 00:58:04 | | 3042 | bb449283 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Invk.pas | 03-29-2006 | 00:58:04 | | 2500 | 903786b8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_ServerMain.pas | 06-27-2006 | 10:15:28 | | 1165 | c09b5c8c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\RODLFILE.res | 03-29-2006 | 00:58:04 | | 1207 | c1267b38 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer.res | 05-29-2007 | 13:30:12 | | 22748 | 14d4a9ca -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TimeServer_Client.res | 05-29-2007 | 13:30:12 | | 23752 | 96821486 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Time Server\TfrmServerSelectSrc.dfm | 03-20-2006 | 01:06:16 | | 1145 | 4e62f37e -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClientMain.dfm | 05-30-2006 | 13:57:36 | | 1583 | bd960831 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServerMain.dfm | 08-25-2007 | 15:01:16 | | 1228 | 8741aadd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClient.dpr | 05-29-2007 | 13:30:02 | | 286 | f7c59a8a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClient.bdsproj | 05-29-2007 | 13:30:02 | | 8389 | 153ed42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClient.dproj | 05-29-2007 | 13:30:02 | | 3435 | e64f9915 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServer.dpr | 05-29-2007 | 13:30:02 | | 542 | 5f5cdee4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServer.bdsproj | 05-29-2007 | 13:30:02 | | 8388 | f5d45a0e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServer.dproj | 05-29-2007 | 13:30:02 | | 3605 | 9152030b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsGroup.Sample.html | 06-26-2006 | 07:31:40 | | 987 | 65bab1ad -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsLibrary.rodl | 03-29-2006 | 01:07:22 | | 1908 | 69ac7181 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsGroup.bpg | 05-29-2007 | 13:30:06 | | 845 | 85aad375 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsGroup.bdsgroup | 05-29-2007 | 13:30:06 | | 723 | 73c67975 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsGroup.groupproj | 05-29-2007 | 13:30:06 | | 1500 | f2ad60ff -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClientMain.pas | 05-30-2006 | 13:57:36 | | 6589 | 2d22299b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsLibrary_Intf.pas | 03-29-2006 | 01:12:12 | | 9556 | d2a15afe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsLibrary_Invk.pas | 03-29-2006 | 01:12:12 | | 4579 | de754769 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServerMain.pas | 03-29-2006 | 01:05:38 | | 832 | a8570c9b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsService_Impl.pas | 03-29-2006 | 01:08:50 | | 1940 | 15ebb708 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\RODLFILE.res | 03-29-2006 | 01:12:12 | | 1988 | 2b045a80 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsClient.res | 05-29-2007 | 13:30:02 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Variants\VariantsServer.res | 05-29-2007 | 13:30:02 | | 23724 | 358994b2 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethodsMain.dfm | 08-25-2007 | 15:01:16 | | 41603 | b20b6935 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethods.dpr | 05-29-2007 | 13:29:52 | | 782 | 8850176f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethods.bdsproj | 05-29-2007 | 13:29:52 | | 8382 | cd5e8ac2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethods.dproj | 05-29-2007 | 13:29:52 | | 3918 | 268f7a17 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\XMethods.Sample.html | 06-27-2006 | 17:15:08 | | 1482 | 72f4457a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethodsMain.pas | 06-27-2006 | 15:22:44 | | 10962 | 45ec5c46 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\xMethods.res | 05-29-2007 | 13:29:52 | | 23752 | 5cc5b097 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\CurrencyExchange_Intf.pas | 05-31-2007 | 09:21:52 | | 3783 | 3e649cf5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\DomainChecker_Intf.pas | 05-27-2007 | 12:57:48 | | 4376 | e3015d0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\eBayPriceWatcher_Intf.pas | 05-31-2007 | 09:23:28 | | 3577 | ec096ff8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\FedExTracker_Intf.pas | 05-31-2007 | 09:28:14 | | 3624 | 7c9c10ff -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\xMethodsQueryService_Intf.pas | 05-30-2007 | 21:24:36 | | 40661 | cd2b3c04 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\BabelFish_Intf.pas | 05-31-2007 | 09:18:14 | | 3721 | 118642cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\BarnsAndNoblePrice_Intf.pas | 05-31-2007 | 09:19:24 | | 3421 | f2e1e186 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\xMethods\Imports\CaliforniaTrafic_Intf.pas | 05-31-2007 | 09:20:44 | | 3502 | 3a9f9ef4 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\NewLibrary_Async.pas | 05-24-2007 | 14:17:32 | | 3312 | 535fd9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\NewLibrary_Intf.pas | 06-06-2007 | 13:17:00 | | 3221 | d7a84d38 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\NewLibrary_Invk.pas | 06-06-2007 | 13:17:00 | | 2643 | eb241b2d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\NewService_Impl.pas | 06-06-2007 | 13:21:26 | | 1440 | 1cf11f01 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\RODLFILE.res | 06-06-2007 | 13:17:00 | | 1252 | 62a99134 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\SimpleClient.pas | 06-06-2007 | 16:30:54 | | 1078 | fd5aeb4c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\SimpleServer.pas | 06-06-2007 | 16:30:54 | | 884 | 965ab5e7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\SimpleServer.res | 06-06-2007 | 16:30:54 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\FPC Server\NewLibrary.RODL | 05-25-2007 | 10:38:12 | | 1172 | a40ccbd9 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServerMain.dfm | 06-03-2006 | 05:20:40 | | 610 | 96997373 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClient.dpr | 05-29-2007 | 13:31:06 | | 338 | 631153ea -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClient.bdsproj | 05-29-2007 | 13:31:06 | | 8390 | adf6fe48 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClient.dproj | 05-29-2007 | 13:31:06 | | 3441 | 5f69df6e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServer.dpr | 05-29-2007 | 13:31:06 | | 609 | c7f00fe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServer.bdsproj | 05-29-2007 | 13:31:06 | | 8390 | 6e7f6aa1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServer.dproj | 05-29-2007 | 13:31:06 | | 3614 | 14bbeb7b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeGroup.Sample.html | 06-27-2006 | 15:37:56 | | 778 | 5108701f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeLibrary.rodl | 06-08-2006 | 00:05:16 | | 1242 | 9f2c46b2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeGroup.bpg | 05-29-2007 | 13:31:08 | | 851 | 751af4f8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeGroup.bdsgroup | 05-29-2007 | 13:31:08 | | 729 | 1b786781 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeGroup.groupproj | 05-29-2007 | 13:31:08 | | 1518 | 6b44b807 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClientMain.pas | 06-08-2006 | 00:38:28 | | 1796 | b3704dc6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClientMain.dfm | 08-25-2007 | 15:01:16 | | 1654 | 8512858e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeLibrary_Intf.pas | 06-08-2006 | 00:23:06 | | 3450 | 22205f2b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeLibrary_Invk.pas | 06-08-2006 | 00:23:06 | | 3164 | cae4d7df -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServerMain.pas | 06-03-2006 | 05:20:40 | | 1619 | 24e4e96d -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeService_Impl.pas | 06-08-2006 | 00:17:50 | | 1640 | 5f7195a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeClient.res | 05-29-2007 | 13:31:06 | | 22748 | ab21813 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\NamedPipeServer.res | 05-29-2007 | 13:31:06 | | 22748 | 9880fe42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\RODLFILE.res | 06-08-2006 | 00:23:06 | | 1322 | f261f79b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\install_service.cmd | 06-26-2006 | 15:01:26 | | 62 | bb836ea2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\Named Pipes\uninstall_service.cmd | 06-26-2006 | 15:01:24 | | 65 | b751f1a9 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODLMain.dfm | 01-30-2007 | 10:07:28 | | 3010 | dac13340 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODL.dpr | 05-29-2007 | 13:30:52 | | 211 | 2ad324e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODL.bdsproj | 05-29-2007 | 13:30:52 | | 8379 | c13bf6b1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODL.dproj | 05-29-2007 | 13:30:52 | | 3375 | 166668 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODL.Sample.html | 12-08-2006 | 09:16:26 | | 1072 | e09c999f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODLMain.pas | 01-30-2007 | 10:07:28 | | 10211 | 2ecfaf9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples\RODL\RODL.res | 05-29-2007 | 13:30:52 | | 3372 | 20e772fd -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\Config.ini | 03-30-2006 | 04:05:20 | | 121 | cbc6ac8 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\TemplateOptions.ini | 10-09-2006 | 14:30:54 | | 420 | dadceb6a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\$svclibname.rodl | 04-08-2004 | 17:52:40 | | 1007 | fc2a22bb -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS\Server -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS\Server\$PRJNAME.bdsproj | 11-24-2004 | 17:34:30 | | 8205 | b6c69788 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS\Client -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS\Client\$PRJNAMEClient.bdsproj | 11-24-2004 | 17:34:18 | | 8211 | 1cb444d1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_BDS\Client\$PRJNAMEGroup.bdsgroup | 11-24-2004 | 17:28:50 | | 667 | 83580582 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\fServerForm.pas | 10-09-2006 | 14:49:34 | | 697 | 1463511b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\fServerForm.dfm | 10-09-2006 | 14:49:34 | | 856 | a7ba6d6c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\Info.ini | 12-21-2006 | 19:56:54 | | 158 | 98249651 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\Icon.ico | 04-08-2004 | 23:12:16 | | 3262 | 64303600 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\VclExe\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 317 | 19ffefe -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\Unit1.pas | 10-09-2006 | 14:49:48 | | 347 | 52615b3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\Unit1.dfm | 10-09-2006 | 14:49:48 | | 422 | d3a6baa7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\Info.ini | 03-05-2004 | 17:01:08 | | 110 | ca291550 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\Icon.ico | 04-08-2004 | 23:12:30 | | 3262 | 8ee81af9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Isapi\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 622 | 54ed9445 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\Unit1.pas | 10-09-2006 | 14:50:20 | | 347 | 52615b3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\Unit1.dfm | 10-09-2006 | 14:50:20 | | 422 | d3a6baa7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\Info.ini | 03-05-2004 | 17:01:00 | | 94 | d3d3c4ef -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\Icon.ico | 04-08-2004 | 23:10:38 | | 3262 | 733ff608 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Cgi\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 392 | aae96eb8 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\Unit1.pas | 10-09-2006 | 14:50:24 | | 347 | 52615b3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\Unit1.dfm | 10-09-2006 | 14:50:24 | | 422 | d3a6baa7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\Info.ini | 03-08-2006 | 13:57:38 | | 148 | 7592c51b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\Icon.ico | 04-08-2004 | 23:12:30 | | 3262 | 8ee81af9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache2\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 429 | aa813a73 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\Unit1.pas | 10-09-2006 | 14:50:26 | | 347 | 52615b3f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\Unit1.dfm | 10-09-2006 | 14:50:26 | | 422 | d3a6baa7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\Info.ini | 03-05-2004 | 17:02:00 | | 148 | d9ab060e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\Icon.ico | 04-08-2004 | 23:12:30 | | 3262 | 8ee81af9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Apache\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 426 | 75893ef7 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\Info.ini | 12-21-2006 | 19:44:32 | | 237 | a1338b1c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\fServerForm.pas | 10-09-2006 | 14:50:16 | | 508 | 7ea3b882 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\fServerForm.xfm | 10-09-2006 | 14:50:16 | | 496 | cb6a647b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 318 | 7903a49e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\ClxExe\Icon.ico | 04-08-2004 | 23:12:16 | | 3262 | 64303600 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\DLL -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\DLL\$PRJNAME.res | 10-09-2006 | 14:50:12 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\DLL\Icon.ico | 04-08-2004 | 23:11:40 | | 3262 | f8946563 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\DLL\Info.ini | 04-23-2007 | 13:42:14 | | 124 | acc8f0d3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\DLL\$PRJNAME.dpr | 10-09-2006 | 14:50:12 | | 658 | 15dd3baa -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\Icon.ico | 04-08-2004 | 23:11:58 | | 3262 | e7eada98 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\Info.ini | 12-21-2006 | 19:56:06 | | 174 | 6245c3be -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\Unit1.dfm | 10-09-2006 | 14:49:38 | | 541 | a936c1ff -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\Unit1.pas | 10-09-2006 | 14:49:38 | | 1468 | 545dbf57 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\$PRJNAME.dpr | 04-08-2004 | 23:44:28 | | 310 | 567f5cf3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\Service\$PRJNAME.res | 04-08-2004 | 23:44:28 | | 22748 | 34fa96cd -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\Info.ini | 01-17-2006 | 16:52:20 | | 130 | ff44ec14 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fClientDataModule.dfm | 10-09-2006 | 14:49:46 | | 375 | 64b222eb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fMainForm.dfm | 01-17-2006 | 15:04:18 | | 522 | 59ec7f7a -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fServerDataModule.dfm | 10-09-2006 | 14:49:40 | | 420 | 82a92caa -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\$PRJNAME.dpr | 01-17-2006 | 15:01:58 | | 573 | 15181692 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\Icon.ico | 01-17-2006 | 16:50:18 | | 3262 | 13498aad -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fClientDataModule.pas | 10-09-2006 | 14:49:46 | | 427 | da03f341 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fMainForm.pas | 01-17-2006 | 15:04:18 | | 409 | 1f1f39e0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\fServerDataModule.pas | 10-09-2006 | 14:49:40 | | 411 | d559bae0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\LOCAL\$PRJNAME.res | 01-17-2006 | 15:01:58 | | 22748 | 557d2f64 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\fServerDataModule.pas | 10-09-2006 | 14:50:14 | | 643 | 91f5a349 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\fServerForm.dfm | 04-11-2004 | 06:01:54 | | 579 | 19c9757 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\fServerForm.pas | 04-11-2004 | 06:01:54 | | 477 | ad54006 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\Icon.ico | 04-11-2004 | 14:54:54 | | 3262 | 7ccd8aff -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\Info.ini | 12-21-2006 | 20:00:42 | | 184 | dfc20223 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\$PRJNAME.dpr | 04-11-2004 | 05:56:08 | | 643 | d4ecd304 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\$PRJNAME.res | 04-11-2004 | 05:56:08 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\COMBOEXE\fServerDataModule.dfm | 10-09-2006 | 14:50:14 | | 451 | 1285274 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\CONSOLE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\CONSOLE\$PRJNAME.dpr | 06-06-2007 | 13:14:06 | | 679 | 7de5bf0f -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\CONSOLE\$PRJNAME.res | 06-06-2007 | 13:14:06 | | 22748 | 34fa96cd -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\CONSOLE\Info.ini | 06-06-2007 | 12:54:06 | | 172 | 55b57515 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\RO\CONSOLE\Icon.ico | 04-08-2004 | 23:10:38 | | 3262 | 733ff608 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client\$PRJNAMEClient.res | 03-06-2004 | 13:08:18 | | 22748 | a6c8709c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client\$PRJNAMEGroup.bpg | 03-06-2004 | 12:15:30 | | 822 | b30475f0 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client\fClientForm.dfm | 10-09-2006 | 14:49:30 | | 719 | b44c58c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client\fClientForm.pas | 10-09-2006 | 14:49:30 | | 889 | e7894cb2 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\_Client\$PRJNAMEClient.dpr | 03-06-2004 | 13:08:18 | | 236 | 265eaeb5 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Bin -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RegisterDelphiHelp.exe | 06-05-2003 | 12:24:14 | | 97280 | bd823b42 -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects SDK\Service Builder.lnk -Link Info: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceBuilder.exe | | | 0 | 1 | 0 | -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects SDK\Service Tester.lnk -Link Info: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROServiceTester.exe | | | 0 | 1 | 0 | -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects SDK\MasterServer.lnk -Link Info: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROMasterServer.exe | | | 0 | 1 | 0 | -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood\Welcome -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\RemObjects SDK -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\RemObjects SDK\Welcome.png | 05-17-2007 | 13:14:38 | | 34659 | cc05cf6a -RegDB Key: Software\RemObjects\Everwood\Welcome -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK -RegDB Val: 5.0.23.613 -RegDB Name: Installed Version -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK -RegDB Val: 3 -RegDB Name: Order -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\RemObjects SDK\Welcome.png -RegDB Name: Image -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK\Samples for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Samples -RegDB Name: Folder -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK\Samples for Delphi -RegDB Val: Flat -RegDB Name: Structure -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK -RegDB Val: Data Abstract -RegDB Name: Hide For -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\RemObjects SDK -RegDB Val: http://devcenter.remobjects.com/ro -RegDB Name: DevCenter URL -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - Core Package -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Core_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - IDE -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_IDE_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - WebBroker -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_WebBroker_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - RODXSock -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_RODX_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - DXSock -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_BPDX_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - DataSnap -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_DataSnap_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - Synapse -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Synapse_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: RemObjects - Indy -RegDB Name: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Dcu\D10\RemObjects_Indy_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Environment Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi -RegDB Name: RemObjects SDK -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Globals -RegDB Val: 1 -RegDB Name: ForceEnvOptionsUpdate -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Debugging\Borland Debuggers\Language Exception Classes -RegDB Val: 1 -RegDB Name: EROSendNoResponse -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Show -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Show\Delphi 2007 for Win32 -RegDB Val: -RegDB Name: RemObjects SDK -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK for Delphi -RegDB Val: 1 -RegDB Name: Installed -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi -RegDB Name: InstallDir -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK for Delphi -RegDB Val: 5.0.23.613 -RegDB Name: Version -RegDB Root: 1 -File Delete: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Help\RegisterDelphiHelp.exe -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\RegisterDelphiHelp.exe -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract (Common) -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASchemaModeler.exe | 08-25-2007 | 15:09:42 | 5.0.23.613 | 11446784 | 93467d7a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASchemaModeler.chm | 08-25-2007 | 15:10:12 | | 116399 | 7c404663 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\borlndmm.dll | 08-09-2002 | 17:00:00 | 7.0.4.453 | 22528 | ec93288e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DefaultConnections.ini | 04-03-2006 | 16:09:58 | | 879 | dfaa0117 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\Data Abstract.lic | 08-25-2007 | 15:09:28 | | 945 | fc17dccf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAConverter.exe | 08-25-2007 | 15:10:22 | | 113080 | 49dc1210 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DABDEDrv.dad | 08-25-2007 | 15:09:48 | 5.0.23.613 | 1175552 | 8a91d26f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAIBXDrv.dad | 08-25-2007 | 15:09:46 | 5.0.23.613 | 1178112 | 755eae74 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAIBODrv.dad | 08-25-2007 | 15:10:02 | 5.0.23.613 | 1642496 | 590ead83 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DADBXDrv.dad | 08-25-2007 | 15:09:44 | 5.0.23.613 | 1138176 | ce3d1068 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAADODrv.dad | 08-25-2007 | 15:09:44 | 5.0.23.613 | 1120768 | e0ff08c9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASDACDrv.dad | 08-25-2007 | 15:09:50 | 5.0.23.613 | 1329664 | 1fe6bc01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAMyDACDrv.dad | 08-25-2007 | 15:09:52 | 5.0.23.613 | 1406464 | 1452cd26 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAODACDrv.dad | 08-25-2007 | 15:09:52 | 5.0.23.613 | 1476096 | 7bd411ce -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAIBDACDrv.dad | 08-25-2007 | 15:09:54 | 5.0.23.613 | 1410048 | 73c8779e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DANexusDBDrv.dad | 08-25-2007 | 15:10:04 | 5.0.23.613 | 2975232 | 55988fd6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DADBISAM3Drv.dad | 08-25-2007 | 15:09:58 | 5.0.23.613 | 1669632 | 560e45af -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DADBISAM4Drv.dad | 08-25-2007 | 15:10:00 | 5.0.23.613 | 1956864 | 4e9569cd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAPostgresDACDrv.dad | 08-25-2007 | 15:09:54 | 5.0.23.613 | 1300992 | d6724c36 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAMySQLDACDrv.dad | 08-25-2007 | 15:09:56 | 5.0.23.613 | 1376256 | e146c3f2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAFIBDrv.dad | 08-25-2007 | 15:09:58 | 5.0.23.613 | 1490432 | 6116d85b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAZeosDrv.dad | 08-25-2007 | 15:10:08 | 5.0.23.613 | 1894400 | b392a7af -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASQLiteDrv.dad | 08-25-2007 | 15:09:48 | 5.0.23.613 | 1050624 | c27f48b4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\sqlite3.dll | 02-13-2007 | 09:09:00 | | 388126 | 5069b4ff -File Overwrite: C:\WINDOWS\system32\msvcrt.dll | 08-19-2004 | 20:42:18 | 7.0.2600.2180 | 681472 | 3e43316c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\license.txt | 06-26-2007 | 15:48:28 | | 9419 | bdf4ee4e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\README.html | 08-24-2007 | 14:26:30 | | 12730 | 4c179b85 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\da.png | 05-17-2007 | 02:22:30 | | 6599 | 3933defd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Launch.exe | 02-21-2003 | 13:47:32 | | 14848 | 81197b84 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAServer.exe | 08-25-2007 | 15:10:18 | 5.0.23.613 | 6941696 | 3ac42f08 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBDataAbstract.dll | 08-25-2007 | 15:00:32 | 5.0.23.613 | 291840 | 1e6fdfe7 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK (Common)\Bin\ROSBDataAbstract.codetemplates.cfg | 08-20-2003 | 22:46:22 | | 2487 | 44b5ea9c -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.hlp | 08-25-2007 | 15:12:12 | | 1289835 | 1a2e6589 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.cnt | 08-25-2007 | 15:11:50 | | 25905 | e8d6adeb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.als | 08-25-2007 | 15:11:50 | | 15379 | 27c60b99 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.HxS | 08-25-2007 | 15:11:36 | 4.0.0.0 | 1214030 | 4b77e4c4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi_K.HxK | 04-28-2002 | 01:27:58 | | 164 | 7867ef6c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi_F.HxK | 05-14-2002 | 18:57:32 | | 114 | 57ef63da -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.HxA | 12-30-2005 | 15:14:42 | | 1568 | d051a905 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.HxC | 12-30-2005 | 15:14:12 | | 1099 | 57b5d9fb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.HxT | 12-30-2005 | 15:15:12 | | 569 | 7f3712cc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RemObjects Data Abstract for Delphi.HxI | 08-25-2007 | 15:11:36 | 4.0.0.0 | 56100 | 35c03adf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\h2reg.ini | 01-08-2007 | 12:48:16 | | 4121 | d7378715 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\H2Reg.exe | 04-12-2003 | 09:02:08 | 1.2.2.0 | 182272 | ef6ecdc5 -File Delete: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\h2reg.ini -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\h2reg.001 -File Delete: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\H2Reg.exe -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\H2Reg.002 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_Core_D6.bpl | 08-25-2007 | 15:09:06 | 5.0.23.613 | 1178112 | 7c920973 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_Scripting_D6.bpl | 08-25-2007 | 15:09:06 | 5.0.23.613 | 72192 | b331d964 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_IDE_D6.bpl | 08-25-2007 | 15:09:08 | 5.0.23.613 | 272896 | bfb11d63 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_ADODriver_D6.bpl | 08-25-2007 | 15:09:08 | 5.0.23.613 | 79872 | cb1237b5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_IBXDriver_D6.bpl | 08-25-2007 | 15:09:10 | 5.0.23.613 | 57856 | e73eb677 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_DBXDriver_D6.bpl | 08-25-2007 | 15:09:10 | 5.0.23.613 | 70656 | 4678151 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_BDEDriver_D6.bpl | 08-25-2007 | 15:09:10 | 5.0.23.613 | 76288 | 52997aec -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_SQLiteDriver_D6.bpl | 08-25-2007 | 15:09:12 | 5.0.23.613 | 137216 | d9e6dcdc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_Core_D6.dcp | 08-25-2007 | 15:09:06 | | 1656714 | 2728077f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_Scripting_D6.dcp | 08-25-2007 | 15:09:06 | | 54398 | f0238a65 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_IDE_D6.dcp | 08-25-2007 | 15:09:08 | | 128714 | 4ef87e2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_ADODriver_D6.dcp | 08-25-2007 | 15:09:08 | | 53378 | 8179825b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_IBXDriver_D6.dcp | 08-25-2007 | 15:09:10 | | 31465 | b385ef40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_DBXDriver_D6.dcp | 08-25-2007 | 15:09:10 | | 43483 | 6b849a1a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_BDEDriver_D6.dcp | 08-25-2007 | 15:09:10 | | 44520 | 8c3338d9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D6\DataAbstract_SQLiteDriver_D6.dcp | 08-25-2007 | 15:09:12 | | 128441 | 81f6013 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_Core_D7.bpl | 08-25-2007 | 15:09:12 | 5.0.23.613 | 1179648 | 99b71f5f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_Scripting_D7.bpl | 08-25-2007 | 15:09:14 | 5.0.23.613 | 73728 | 7d08942a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_IDE_D7.bpl | 08-25-2007 | 15:09:14 | 5.0.23.613 | 274944 | 503bcd96 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_ADODriver_D7.bpl | 08-25-2007 | 15:09:16 | 5.0.23.613 | 80384 | 8694bfb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_IBXDriver_D7.bpl | 08-25-2007 | 15:09:16 | 5.0.23.613 | 59392 | 5e60cb32 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_DBXDriver_D7.bpl | 08-25-2007 | 15:09:18 | 5.0.23.613 | 71680 | 436573d3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_BDEDriver_D7.bpl | 08-25-2007 | 15:09:18 | 5.0.23.613 | 77824 | 2b036fb2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_SQLiteDriver_D7.bpl | 08-25-2007 | 15:09:18 | 5.0.23.613 | 138240 | 82ca4955 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_Core_D7.dcp | 08-25-2007 | 15:09:12 | | 1670830 | f0312f55 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_Scripting_D7.dcp | 08-25-2007 | 15:09:14 | | 56040 | 225e6095 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_IDE_D7.dcp | 08-25-2007 | 15:09:14 | | 135172 | 39f081ff -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_ADODriver_D7.dcp | 08-25-2007 | 15:09:16 | | 54720 | 25bc6223 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_IBXDriver_D7.dcp | 08-25-2007 | 15:09:16 | | 32822 | 26e8daa4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_DBXDriver_D7.dcp | 08-25-2007 | 15:09:18 | | 44892 | 5e535e92 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_BDEDriver_D7.dcp | 08-25-2007 | 15:09:18 | | 45846 | 4237864b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D7\DataAbstract_SQLiteDriver_D7.dcp | 08-25-2007 | 15:09:18 | | 129717 | 55a5fe71 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Core_D10.bpl | 08-25-2007 | 15:09:20 | 5.0.23.613 | 1186304 | 6cc76571 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Scripting_D10.bpl | 08-25-2007 | 15:09:20 | 5.0.23.613 | 65536 | bdd6013e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IDE_D10.bpl | 08-25-2007 | 15:09:22 | 5.0.23.613 | 264192 | e943207c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_ADODriver_D10.bpl | 08-25-2007 | 15:09:24 | 5.0.23.613 | 74752 | 639c4cf5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IBXDriver_D10.bpl | 08-25-2007 | 15:09:24 | 5.0.23.613 | 52736 | 4a26450e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10.bpl | 08-25-2007 | 15:09:26 | 5.0.23.613 | 67584 | d51422bf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10B.bpl | 08-25-2007 | 15:09:26 | 5.0.23.613 | 68096 | e9fc1038 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_BDEDriver_D10.bpl | 08-25-2007 | 15:09:28 | 5.0.23.613 | 71168 | ad64a67a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_SQLiteDriver_D10.bpl | 08-25-2007 | 15:09:28 | 5.0.23.613 | 135680 | a26a40b1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Core_D10.dcp | 08-25-2007 | 15:09:20 | | 1749452 | f615ad9c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Scripting_D10.dcp | 08-25-2007 | 15:09:20 | | 53413 | 71eeeb79 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IDE_D10.dcp | 08-25-2007 | 15:09:22 | | 130228 | c41bdad2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_ADODriver_D10.dcp | 08-25-2007 | 15:09:24 | | 52506 | fb36321d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IBXDriver_D10.dcp | 08-25-2007 | 15:09:24 | | 30248 | b0b7194e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10.dcp | 08-25-2007 | 15:09:26 | | 43145 | 8cc4c0b7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10B.dcp | 08-25-2007 | 15:09:26 | | 43355 | 29741233 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_BDEDriver_D10.dcp | 08-25-2007 | 15:09:28 | | 43452 | 14fab4b2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_SQLiteDriver_D10.dcp | 08-25-2007 | 15:09:28 | | 133850 | c66b651a -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\eDefines.inc | 02-20-2007 | 13:50:50 | | 14033 | 45fcae7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract.inc | 07-26-2007 | 13:49:16 | | 150 | bd771289 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAADODataTable.pas | 04-24-2007 | 14:00:36 | | 6942 | 3f07e367 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDABinAdapter.pas | 08-01-2007 | 10:06:32 | | 40658 | 5424a821 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDABin2DataStreamer.pas | 08-24-2007 | 11:42:28 | | 58273 | 969cc2c3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDABusinessProcessor.pas | 08-24-2007 | 12:20:28 | | 79528 | 4328b9f1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDACDSDataTable.pas | 04-24-2007 | 14:01:42 | | 22570 | 6672cc30 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDACache.pas | 04-24-2007 | 13:46:36 | | 10849 | b3ba7d48 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAClasses.pas | 08-02-2007 | 15:42:14 | | 52495 | d4a740cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAClientDataModule.pas | 04-24-2007 | 14:11:12 | | 1109 | dcd10cf6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADataTable.pas | 08-24-2007 | 12:20:10 | | 148069 | e73de42f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADatasetProvider.pas | 04-24-2007 | 14:53:30 | | 2596 | b79e934 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADatasetWrapper.pas | 08-24-2007 | 12:20:52 | | 17418 | 1c8cbc3c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADataStreamer.pas | 07-30-2007 | 14:56:34 | | 21778 | 7a5e0c47 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADataTableReferenceCollection.pas | 04-24-2007 | 13:54:18 | | 5956 | cb6689b2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADBSessionManager.pas | 04-24-2007 | 14:03:54 | | 11535 | d166d381 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADelta.pas | 04-24-2007 | 13:54:22 | | 33098 | d35ef4c5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADesigntimeCall.pas | 04-24-2007 | 13:52:22 | | 1249 | 4a6d3fea -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADriverInfo.pas | 04-24-2007 | 13:54:36 | | 2094 | 76462e36 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDADriverManager.pas | 03-13-2007 | 16:52:42 | | 14555 | 10ebfd7d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAEngine.pas | 08-24-2007 | 12:19:04 | | 66937 | a37b306c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAExceptions.pas | 04-24-2007 | 13:52:32 | | 1206 | f0f67b46 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAExpressionEvaluator.pas | 04-24-2007 | 13:40:20 | | 18684 | 7c615abd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAHelpers.pas | 06-04-2007 | 11:22:52 | | 13285 | 279760bd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAInterfaces.pas | 08-24-2007 | 12:19:28 | | 191381 | 3b0bad7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAInterfacesEx.pas | 04-24-2007 | 13:54:52 | | 1497 | f27633b3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAMacroProcessors.pas | 04-24-2007 | 13:44:18 | | 17740 | 63291a0b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAMacros.pas | 06-06-2007 | 10:15:44 | | 24900 | 418e8405 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAMemDataset.pas | 08-20-2007 | 10:10:14 | | 56633 | c984fae9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAMemDataTable.pas | 07-04-2007 | 10:46:40 | | 7045 | fc877c58 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPleaseWaitForm.pas | 04-24-2007 | 14:22:42 | | 3800 | 6533db7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAReconcileDialog.pas | 07-16-2007 | 16:56:30 | | 10305 | 10cef70e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAReconcileDialog.dfm | 07-16-2007 | 16:56:30 | | 32166 | ebc340d1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAReconcileDialogDetails.pas | 07-16-2007 | 14:20:14 | | 8262 | 1010a863 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAReconcileDialogDetails.dfm | 07-16-2007 | 14:20:14 | | 2095 | b10912dd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDARemoteDataAdapter.pas | 07-30-2007 | 15:32:28 | | 41665 | fd141876 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDARemoteDataAdapterRequests.pas | 05-14-2007 | 15:19:50 | | 11102 | 8b089baa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDARemoteCommand.pas | 06-25-2007 | 15:27:00 | | 6345 | caf5e384 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDARes.pas | 05-05-2007 | 17:33:26 | | 5169 | dab5016d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDARegExpr.pas | 04-24-2007 | 13:42:02 | | 159235 | b6885eef -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAServerLog.pas | 04-24-2007 | 13:56:42 | | 18367 | 23740b4c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDASupportClasses.pas | 08-23-2007 | 12:13:58 | | 9737 | 703d683e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAMySQLInterfaces.pas | 06-26-2007 | 16:29:20 | | 25380 | 849bf298 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDASQLiteInterfaces.pas | 07-05-2007 | 16:16:30 | | 3575 | ce72458a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDASQL92Interfaces.pas | 04-24-2007 | 13:56:46 | | 10988 | 6fda3e95 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDASQL92QueryBuilder.pas | 07-23-2007 | 15:02:04 | | 5494 | 1d48e9eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPostgresInterfaces.pas | 06-26-2007 | 17:10:26 | | 9407 | cf1f4291 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAUtils.pas | 04-24-2007 | 13:30:08 | | 7682 | b3685690 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAWhere.pas | 07-23-2007 | 15:04:44 | | 27609 | 1c147bd0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAXmlAdapter.pas | 05-08-2007 | 23:43:04 | | 27924 | cd6584d7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAXmlUtils.pas | 03-13-2007 | 16:53:22 | | 21289 | 9d5d9bc5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPoweredByDataAbstractButton.pas | 04-24-2007 | 14:19:36 | | 1979 | 632848d9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPoweredByDataAbstractButton.res | 04-24-2007 | 14:19:36 | | 61352 | 519c6dbb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAADOInterfaces.pas | 06-26-2007 | 17:15:24 | | 22818 | 9dd50bc7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAIBInterfaces.pas | 07-24-2007 | 10:50:40 | | 26165 | 2560c233 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAOracleInterfaces.pas | 06-26-2007 | 17:08:02 | | 3712 | 6a927cb5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\MultiDbLoginService_Impl.pas | 04-24-2007 | 14:10:28 | | 2178 | c1bc9499 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\MultiDbLoginService_Impl.dfm | 04-24-2007 | 14:10:28 | | 58 | 97df86d8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\SimpleLoginService_Impl.pas | 04-24-2007 | 14:10:50 | | 2066 | a384deaf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\SimpleLoginService_Impl.dfm | 04-24-2007 | 14:10:50 | | 56 | 67462fb1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BaseLoginService_Impl.pas | 03-13-2007 | 16:48:34 | | 1641 | 82a00e34 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BaseLoginService_Impl.dfm | 03-13-2007 | 16:48:34 | | 105 | 26e53c6c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstractService_Impl.pas | 07-24-2007 | 12:34:58 | | 58645 | 945bf6b6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstractService_Impl.dfm | 07-24-2007 | 12:34:58 | | 111 | 23de7f5b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract4_Intf.pas | 07-24-2007 | 11:50:58 | | 75170 | e829319b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract4_Async.pas | 07-24-2007 | 11:52:56 | | 23116 | 7e89baa5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract4_Invk.pas | 07-24-2007 | 13:40:04 | | 22039 | da93c23f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DALoginService_Impl.pas | 04-24-2007 | 13:48:42 | | 6639 | 639bab7b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DARemoteService_Impl.pas | 05-10-2007 | 16:58:00 | | 41839 | 3124a1be -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract3_Invk.pas | 04-24-2007 | 13:48:00 | | 13763 | b0eb2857 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract3_Intf.pas | 04-24-2007 | 13:26:50 | | 32171 | d6e9a666 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract3_Async.pas | 04-24-2007 | 14:07:58 | | 15154 | 274546d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DBSessionManager Default Schema.daConnections | 08-05-2003 | 16:18:14 | | 707 | d560b296 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DBSessionManager Default Schema.daSchema | 02-05-2007 | 16:36:42 | | 16273 | e1c54e62 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DBSessionManager Create Session Table.sql | 07-16-2003 | 17:49:12 | | 383 | 5ab3fc4e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAScriptingProvider.pas | 04-24-2007 | 13:40:56 | | 3521 | bb426b21 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPascalScript.pas | 04-24-2007 | 13:55:44 | | 40974 | 3e57a882 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAPSScriptingProvider.pas | 04-24-2007 | 16:02:28 | | 7539 | 8149f2af -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\uDAKDBInfo.pas | 04-24-2007 | 13:55:00 | | 9336 | 7bd7d4d5 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADBSessionManagerEditor.pas | 11-14-2006 | 20:52:24 | | 4128 | 2d5f3794 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataAbstractEditors.pas | 06-13-2007 | 14:13:08 | | 40610 | b48ba720 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAIDEMenu.pas | 05-07-2007 | 19:09:32 | | 7641 | 3310cc28 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAIDEData.pas | 05-19-2006 | 10:00:28 | | 1149 | 543f1e83 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAIDEData.dfm | 05-19-2006 | 10:00:28 | | 10644 | f3a6d240 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDASchemaUnitsGenerator.pas | 06-27-2007 | 22:49:28 | | 40805 | 263165e9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_AdditionalResources.res | 08-25-2007 | 15:09:02 | | 2200 | 4597e39a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_AdditionalResources.rc | 05-01-2003 | 14:21:42 | | 50 | a17c7a22 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAIDERes.pas | 08-20-2003 | 18:54:52 | | 328 | aba952e4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\Resources.BDS.RES | 03-09-2007 | 17:15:36 | | 8644 | fe8d4a28 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDASelectDataTablesForm.dfm | 05-15-2007 | 19:46:58 | | 10964 | 17cfbaca -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDASelectDataTablesForm.pas | 05-15-2007 | 19:46:58 | | 1966 | 8bfbf404 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAGuideWizardForm.pas | 06-15-2007 | 16:27:04 | | 8436 | 3c3b6371 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAGuideWizardForm.dfm | 06-15-2007 | 16:27:04 | | 112294 | c07740c4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataTableWizards.pas | 06-13-2007 | 14:15:00 | | 6954 | f8275dcc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientDataModuleWizard.pas | 02-08-2006 | 19:07:22 | | 12175 | f9222b1f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientModuleWizard.res | 08-25-2007 | 15:09:02 | | 3392 | c53a085e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataTableEditorForm.pas | 01-25-2006 | 05:28:44 | | 15313 | fe38d34f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataTableEditorForm.dfm | 01-25-2006 | 05:28:44 | | 14241 | 96f2d075 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientDataModuleDataTableWizardForm.pas | 05-21-2007 | 16:37:56 | | 3148 | 11710161 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientDataModuleDataTableWizardForm.dfm | 05-21-2007 | 16:37:56 | | 8944 | d24b6b44 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientDataModuleEditorForm.dfm | 03-29-2004 | 19:09:10 | | 13817 | b03b5a6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDAClientDataModuleEditorForm.pas | 03-29-2004 | 19:09:10 | | 4296 | 18c1eb32 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataTableMasterLinkWizardForm.dfm | 06-08-2007 | 11:12:24 | | 79536 | c5f12a97 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\uDADataTableMasterLinkWizardForm.pas | 06-08-2007 | 11:12:24 | | 11866 | 8326854b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildPackages_D6.bpg | 05-11-2007 | 15:31:48 | | 2980 | 978016ca -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildPackages_D7.bpg | 05-11-2007 | 15:26:02 | | 2980 | cb7ca7a9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildPackages_D10.bdsgroup | 05-11-2007 | 15:53:02 | | 3344 | 4b70e5fe -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildPackages_D10.groupproj | 06-07-2007 | 14:21:18 | | 11491 | 9a65a918 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildPackages_K3.bpg | 12-10-2003 | 11:39:38 | | 884 | 4d1ea896 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\BuildDrivers.bpg | 05-11-2007 | 15:29:02 | | 1850 | f99b805d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_Reg.pas | 06-25-2007 | 10:44:58 | | 2537 | 715dccf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_Glyphs.res | 08-25-2007 | 15:09:02 | | 59848 | a63596a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D6.dof | 08-25-2007 | 15:08:58 | | 1097 | c3e0bd46 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D6.dpk | 06-25-2007 | 15:26:06 | | 3925 | 72eba14f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D6.res | 08-25-2007 | 15:09:04 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D6.cfg | 06-25-2007 | 15:26:06 | | 563 | f23c0c0e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D7.dof | 08-25-2007 | 15:08:58 | | 2769 | d5cf05d0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D7.dpk | 06-25-2007 | 15:26:10 | | 3925 | e3ee2fb3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D7.res | 08-25-2007 | 15:09:12 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D7.cfg | 06-25-2007 | 15:26:10 | | 887 | 8637066f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D10.cfg | 06-25-2007 | 15:26:18 | | 485 | 3412f4b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D10.dpk | 06-25-2007 | 15:26:18 | | 3929 | 4c1eeb43 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D10.res | 08-25-2007 | 15:09:18 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D10.bdsproj | 06-25-2007 | 15:26:18 | | 8134 | 88fe3c55 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_D10.dproj | 06-25-2007 | 15:26:18 | | 8910 | 58a57e9d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_K3.dpk | 02-06-2007 | 15:25:32 | | 3233 | 95a0453d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_K3.kof | 02-06-2007 | 15:25:32 | | 1307 | 4eab987c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Core_K3.conf | 02-06-2007 | 15:25:32 | | 343 | 2899c1c8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_Reg.pas | 04-24-2007 | 16:00:04 | | 1354 | 94e969d8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_Glyphs.res | 08-25-2007 | 15:09:02 | | 2764 | 1e3006d0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D6.cfg | 08-02-2004 | 14:27:22 | | 549 | b0468548 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D6.dof | 08-25-2007 | 15:08:58 | | 1104 | 4ada4aee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D6.dpk | 08-02-2004 | 14:27:22 | | 858 | e790e6e4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D6.res | 08-25-2007 | 15:09:06 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D7.dof | 08-25-2007 | 15:08:58 | | 1980 | b98782ab -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D7.dpk | 08-02-2004 | 17:21:30 | | 879 | a4690651 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D7.res | 08-25-2007 | 15:09:12 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D7.cfg | 08-02-2004 | 17:21:30 | | 497 | 5c2ed55a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D10.dpk | 05-11-2007 | 15:34:54 | | 862 | d9480104 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D10.res | 08-25-2007 | 15:09:20 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D10.bdsproj | 05-11-2007 | 15:34:54 | | 10085 | f1772c51 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D10.dproj | 05-11-2007 | 15:34:54 | | 6289 | 8727db32 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_Scripting_D10.cfg | 05-11-2007 | 15:34:54 | | 723 | 2836ccdf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_Reg.pas | 07-11-2004 | 01:54:58 | | 776 | db1e34a9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_Glyphs.res | 08-25-2007 | 15:09:02 | | 3704 | e971ae17 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D7.dpk | 12-22-2005 | 16:53:44 | | 822 | 84381291 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D7.res | 12-22-2005 | 16:53:44 | | 1880 | 4ea2599b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D7.cfg | 12-22-2005 | 16:53:44 | | 497 | 5c2ed55a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D7.dof | 08-25-2007 | 15:08:58 | | 1988 | ea17dc8d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D6.dpk | 07-13-2004 | 10:40:56 | | 823 | 72b63012 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D6.res | 07-13-2004 | 10:40:56 | | 1880 | 4ea2599b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D6.cfg | 07-13-2004 | 10:40:56 | | 509 | 4fb58f6f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D6.dof | 08-25-2007 | 15:08:58 | | 1952 | d7f996ac -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D10.dpk | 05-11-2007 | 21:57:46 | | 827 | de031c94 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D10.res | 05-11-2007 | 21:57:46 | | 1536 | 452e318 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D10.bdsproj | 05-11-2007 | 21:57:46 | | 8301 | 58236b7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D10.dproj | 05-11-2007 | 21:57:46 | | 5529 | f232ab3a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract_SimpleQuery_D10.cfg | 05-11-2007 | 21:57:46 | | 605 | d7c17c03 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_Reg.pas | 12-21-2006 | 19:14:48 | | 9057 | 76f016f1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D6.dof | 08-25-2007 | 15:09:00 | | 1817 | 68d45614 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D6.dpk | 04-05-2006 | 14:32:00 | | 1390 | c8272fde -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D6.res | 08-25-2007 | 15:09:06 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D6.cfg | 04-05-2006 | 14:32:00 | | 402 | 38ad768f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D7.dof | 08-25-2007 | 15:09:00 | | 2738 | d59c730f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D7.dpk | 04-05-2006 | 14:31:56 | | 1390 | e40e9fa1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D7.res | 08-25-2007 | 15:09:14 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D7.cfg | 04-05-2006 | 14:31:56 | | 766 | 785e6e46 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D10.cfg | 05-11-2007 | 15:34:54 | | 648 | 39af4325 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D10.dpk | 05-11-2007 | 15:34:54 | | 1395 | 72a6272f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D10.res | 08-25-2007 | 15:09:22 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D10.bdsproj | 05-11-2007 | 15:34:54 | | 10040 | c61a9fcc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_D10.dproj | 05-11-2007 | 15:34:54 | | 6920 | b72dc289 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_K3.kof | 05-15-2006 | 11:48:48 | | 1325 | 30620dcf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_K3.res | 05-15-2006 | 11:48:48 | | 32 | 245d8dcd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_K3.conf | 05-15-2006 | 11:48:48 | | 432 | 3fd8efd7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\IDE\DataAbstract_IDE_K3.dpk | 05-15-2006 | 11:48:48 | | 835 | bf7f53d4 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_Drivers_D6.bpg | 05-17-2003 | 10:37:14 | | 1847 | 11a70210 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAADODriver.pas | 06-26-2007 | 16:44:54 | | 42549 | b4c31325 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | d757a94f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D6.dpk | 07-09-2004 | 10:21:30 | | 698 | 8e88eab7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D6.res | 08-25-2007 | 15:09:08 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D6.cfg | 07-09-2004 | 10:21:30 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D6.dof | 08-25-2007 | 15:09:00 | | 1106 | 3a76705 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D7.dpk | 07-09-2004 | 10:21:34 | | 698 | f4df1e90 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D7.res | 08-25-2007 | 15:09:16 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D7.cfg | 07-09-2004 | 10:21:34 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D7.dof | 08-25-2007 | 15:09:00 | | 2738 | dcbfe9e3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D10.dpk | 05-11-2007 | 15:34:54 | | 700 | f141a483 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D10.res | 08-25-2007 | 15:09:22 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D10.bdsproj | 05-11-2007 | 15:34:54 | | 8215 | bcc4e536 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D10.dproj | 05-11-2007 | 15:34:54 | | 5915 | dbd71463 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ADODriver_D10.cfg | 05-11-2007 | 15:34:54 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAADODriverHtml.res | 08-25-2007 | 15:09:42 | | 1592 | 151a895e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAADODrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 3427db80 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAADODrv.dpr | 07-10-2004 | 17:12:14 | | 189 | fd7fb5b3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAADODrv.res | 08-25-2007 | 15:09:42 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAADODrv.cfg | 07-10-2004 | 17:12:14 | | 570 | 1ac34a70 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAIBXDriver.pas | 06-09-2007 | 07:41:22 | | 14119 | b4470e03 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1108 | 1bcc12a2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | e1149f47 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D6.dpk | 07-09-2004 | 10:21:30 | | 702 | 338e872e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D6.res | 08-25-2007 | 15:09:08 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D6.cfg | 07-09-2004 | 10:21:30 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2740 | 9ebd3d94 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D7.dpk | 07-09-2004 | 10:21:34 | | 702 | 8a6d3f0f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D7.res | 08-25-2007 | 15:09:16 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D7.cfg | 07-09-2004 | 10:21:34 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D10.cfg | 05-11-2007 | 15:34:54 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D10.dpk | 05-11-2007 | 15:34:54 | | 704 | 78a4c5ad -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D10.res | 08-25-2007 | 15:09:24 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D10.bdsproj | 05-11-2007 | 15:34:54 | | 8217 | 4b9d404d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBXDriver_D10.dproj | 05-11-2007 | 15:34:54 | | 5919 | 59017fc2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBXDriverHtml.res | 08-25-2007 | 15:09:42 | | 1028 | 494e2631 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBXDrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 5f0ba1a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBXDrv.dpr | 07-10-2004 | 17:12:20 | | 146 | 3e93234c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBXDrv.res | 08-25-2007 | 15:09:46 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBXDrv.cfg | 07-10-2004 | 17:12:20 | | 565 | 554472c9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDABDEDriver.pas | 07-05-2007 | 13:09:56 | | 49978 | 35e3c3ee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D7.cfg | 01-09-2007 | 11:05:42 | | 702 | 538151b0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D7.dpk | 01-09-2007 | 11:05:42 | | 686 | 4ecfc953 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D7.res | 08-25-2007 | 15:09:18 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D6.dpk | 01-09-2007 | 11:00:50 | | 686 | e95de8c5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D6.cfg | 01-09-2007 | 11:00:50 | | 538 | 21fc77be -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D6.res | 08-25-2007 | 15:09:10 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8194 | 765d2fbf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D10.dproj | 05-11-2007 | 15:34:56 | | 5903 | 45bf859c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 688 | 67f196bf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_D10.res | 08-25-2007 | 15:09:26 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_BDEDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | 1b92d3d1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDriverHtml.res | 08-25-2007 | 15:09:42 | | 1260 | 73153790 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDrv.bdsproj | 01-18-2007 | 10:42:02 | | 7991 | 32b3ddda -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDrv.dpr | 01-18-2007 | 10:42:02 | | 144 | ebac53d2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDrv.cfg | 01-18-2007 | 10:42:02 | | 355 | 53932dcf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDrv.dof | 08-25-2007 | 15:09:00 | | 1377 | 84ba5373 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DABDEDrv.res | 08-25-2007 | 15:09:46 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDADBXDriver.pas | 07-18-2007 | 15:55:32 | | 29322 | cefbb29a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | bd88b2d2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D6.dpk | 07-09-2004 | 10:21:30 | | 701 | 24c1fbb1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D6.res | 08-25-2007 | 15:09:10 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D6.cfg | 07-09-2004 | 10:21:30 | | 602 | 21091978 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1100 | 4947e4fd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D7.dpk | 07-09-2004 | 10:21:36 | | 701 | 5a85369f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D7.res | 08-25-2007 | 15:09:16 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D7.cfg | 07-09-2004 | 10:21:36 | | 766 | 67f91117 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2732 | fc96c760 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10.dpk | 05-11-2007 | 15:34:54 | | 680 | 67d8dcd6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10.res | 08-25-2007 | 15:09:24 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10.bdsproj | 05-11-2007 | 15:34:54 | | 8209 | b56cb2c1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10.dproj | 05-11-2007 | 15:34:54 | | 6149 | fbd94edd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10.cfg | 05-11-2007 | 15:34:54 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10B.dpk | 03-22-2007 | 13:22:08 | | 681 | c5ef3cd8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10B.res | 08-25-2007 | 15:09:26 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBXDriver_D10B.dproj | 03-22-2007 | 13:22:08 | | 6102 | c8748d34 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBXDriverHtml.res | 08-25-2007 | 15:09:42 | | 1536 | 91e65f1a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBXDrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 5f0ba1a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBXDrv.dpr | 07-10-2004 | 17:12:18 | | 146 | 71150d57 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBXDrv.res | 08-25-2007 | 15:09:44 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBXDrv.cfg | 07-10-2004 | 17:12:18 | | 565 | 554472c9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDASDACDriver.pas | 07-19-2007 | 02:34:46 | | 16343 | 7d051084 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | 956249d6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D6.dpk | 07-09-2004 | 10:21:22 | | 726 | c2b8031 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D6.res | 07-09-2004 | 10:21:22 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D6.cfg | 07-09-2004 | 10:21:22 | | 602 | 21091978 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1180 | 6a31b850 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D7.dpk | 07-09-2004 | 10:21:22 | | 726 | 2c977e43 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D7.res | 07-09-2004 | 10:21:22 | | 1368 | 9d3db5ae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D7.cfg | 07-09-2004 | 10:21:22 | | 766 | 67f91117 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2812 | 5b7d16d5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 731 | 30255ff9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8258 | bfd9d50d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10B.dpk | 05-18-2007 | 10:45:28 | | 732 | de1c6d9b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10B.res | 05-18-2007 | 10:45:28 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SDACDriver_D10B.dproj | 05-18-2007 | 10:45:28 | | 6094 | f66d54bd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASDACDriverHtml.res | 08-25-2007 | 15:09:42 | | 1072 | 866a09f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASDACDrv.dof | 08-25-2007 | 15:09:00 | | 2613 | a50a6321 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASDACDrv.dpr | 07-10-2004 | 17:12:22 | | 143 | f3834ab -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASDACDrv.res | 08-25-2007 | 15:09:48 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASDACDrv.cfg | 07-10-2004 | 17:12:22 | | 449 | 1bb117f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAODACDriver.pas | 07-19-2007 | 02:34:36 | | 22180 | 57bda2bc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | f42f8c57 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D6.dpk | 07-09-2004 | 10:21:22 | | 726 | a84315fa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D6.res | 07-09-2004 | 10:21:22 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D6.cfg | 07-09-2004 | 10:21:22 | | 602 | 21091978 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1180 | 16320b11 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D7.dpk | 07-09-2004 | 10:21:22 | | 726 | 99f46189 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D7.res | 07-09-2004 | 10:21:22 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D7.cfg | 07-09-2004 | 10:21:22 | | 766 | 67f91117 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2812 | 1e4a55a4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 731 | 3b5ef5e5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8258 | 87d6b4dd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10B.dpk | 05-18-2007 | 10:47:14 | | 732 | 9315e81a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10B.res | 05-18-2007 | 10:47:14 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ODACDriver_D10B.dproj | 05-18-2007 | 10:47:14 | | 6508 | 25ff48a7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAODACDriverHtml.res | 08-25-2007 | 15:09:42 | | 256 | 418ed98a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAODACDrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 5f0ba1a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAODACDrv.dpr | 07-10-2004 | 17:12:24 | | 199 | 3df4ee55 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAODACDrv.res | 08-25-2007 | 15:09:50 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAODACDrv.cfg | 07-10-2004 | 17:12:24 | | 449 | 1bb117f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDACRLabsUtils.inc | 04-20-2007 | 12:05:32 | | 2054 | 5d74ea99 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4884 | 72488e5b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D6.dpk | 09-10-2006 | 10:08:22 | | 700 | 73a803f5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D6.res | 09-10-2006 | 10:08:22 | | 1508 | 6f44119 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D6.cfg | 09-10-2006 | 10:08:22 | | 414 | 1094c05a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1034 | f95aacde -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D7.cfg | 09-10-2006 | 09:27:46 | | 578 | 62cae970 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 1825 | eb6ad336 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D7.dpk | 09-10-2006 | 09:27:46 | | 700 | 5fae4726 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D7.res | 09-10-2006 | 09:27:46 | | 1508 | 6f44119 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8251 | c6f5d44d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 704 | 6025204c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10B.dproj | 05-18-2007 | 10:48:42 | | 5845 | 759e2e23 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10B.dpk | 05-18-2007 | 10:48:42 | | 705 | f6893b22 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBDACDriver_D10B.res | 05-18-2007 | 10:48:42 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBDACDriverHtml.res | 08-25-2007 | 15:09:42 | | 1016 | db72aff4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBDACDrv.dpr | 09-10-2006 | 09:12:34 | | 147 | de1534cb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBDACDrv.res | 08-25-2007 | 15:09:52 | | 664 | 76cee5b9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAIBDACDriver.pas | 07-19-2007 | 02:34:58 | | 15489 | 7c7eb8e3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAIBODriver.pas | 06-09-2007 | 07:41:12 | | 14459 | fed6eab4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D6.dpk | 07-09-2004 | 10:21:22 | | 734 | f564b2c0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | 85f9f724 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D6.res | 07-09-2004 | 10:21:22 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D6.cfg | 07-09-2004 | 10:21:22 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D6.dof | 08-25-2007 | 15:09:00 | | 1184 | 23c713ba -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D7.dpk | 07-09-2004 | 10:21:22 | | 734 | 591166e9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D7.res | 07-09-2004 | 10:21:22 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D7.cfg | 07-09-2004 | 10:21:22 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D7.dof | 08-25-2007 | 15:09:00 | | 2816 | 836073f9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D10.dpk | 05-11-2007 | 15:34:56 | | 738 | b398211 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8261 | f65e0e4c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D10.dproj | 05-11-2007 | 15:34:56 | | 6067 | c8dbf3b8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_IBODriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBODriverHtml.res | 08-25-2007 | 15:09:42 | | 1012 | 37a24168 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBODrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 5f0ba1a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBODrv.dpr | 07-10-2004 | 17:12:32 | | 146 | 8f0effc8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBODrv.res | 08-25-2007 | 15:10:00 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAIBODrv.cfg | 07-10-2004 | 17:12:32 | | 449 | 1bb117f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAMyDACDriver.pas | 07-30-2007 | 11:31:54 | | 15317 | b167f7ed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4884 | e4fbadb3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D7.dpk | 10-22-2006 | 00:02:22 | | 731 | c74fe3f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D7.res | 10-22-2006 | 00:02:22 | | 1508 | 6f44119 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 1825 | d3a6d83c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D7.cfg | 10-22-2006 | 00:02:22 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D6.dpk | 09-10-2006 | 10:13:00 | | 731 | 9254802d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1825 | 3af3fd2a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D6.res | 09-10-2006 | 10:13:00 | | 1508 | 6f44119 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D6.cfg | 09-10-2006 | 10:13:00 | | 432 | aecf6ae9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 736 | 11aa8590 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8260 | 96a97aa8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10B.dpk | 05-18-2007 | 10:47:04 | | 737 | 5e0d4eaa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10B.res | 05-18-2007 | 10:47:04 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MyDACDriver_D10B.dproj | 05-18-2007 | 10:47:04 | | 6061 | 6f53f2d3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMyDACDriverHtml.res | 08-25-2007 | 15:09:42 | | 724 | ac60826 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMyDACDrv.dpr | 09-19-2006 | 14:54:14 | | 147 | b10d44d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMyDACDrv.res | 08-25-2007 | 15:09:52 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMyDACDrv.cfg | 09-19-2006 | 14:54:14 | | 449 | 1bb117f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMyDACDrv.dof | 08-25-2007 | 15:09:00 | | 2598 | a8b74ae7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDADBISAMDriver.pas | 07-28-2007 | 12:53:58 | | 24084 | da483221 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4884 | 875eabb1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D7.cfg | 07-15-2004 | 01:10:42 | | 578 | 8164ffed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D7.dof | 08-25-2007 | 15:09:00 | | 1817 | cbbbdbda -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D7.dpk | 07-15-2004 | 01:10:42 | | 718 | 7cf06ac3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D7.res | 07-15-2004 | 01:10:42 | | 1572 | c5df4b68 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D6.cfg | 07-15-2004 | 01:10:42 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1430 | 39f52545 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D6.dpk | 07-15-2004 | 01:10:42 | | 718 | 1eec0c60 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D6.res | 07-15-2004 | 01:10:42 | | 1572 | c5df4b68 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 721 | 222456c2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D10.res | 05-11-2007 | 15:34:56 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8253 | 60bcd634 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D10.dproj | 05-11-2007 | 15:34:56 | | 6072 | 3154d31e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_DBISAMDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAMDriverHtml.res | 08-25-2007 | 15:09:42 | | 240 | 6a537da3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM3Drv.dpr | 07-10-2004 | 20:11:32 | | 268 | d16776c5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM3Drv.cfg | 07-10-2004 | 20:11:32 | | 491 | 97729ed7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM3Drv.dof | 08-25-2007 | 15:09:00 | | 2864 | a75aea6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM3Drv.res | 08-25-2007 | 15:09:58 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM4Drv.dpr | 07-10-2004 | 20:11:32 | | 269 | 5f37a275 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM4Drv.cfg | 07-10-2004 | 20:11:32 | | 491 | 97729ed7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM4Drv.dof | 08-25-2007 | 15:09:00 | | 2864 | a75aea6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DADBISAM4Drv.res | 08-25-2007 | 15:10:00 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D6.res | 05-08-2006 | 14:40:06 | | 524 | 4b031689 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D6.dpk | 05-08-2006 | 14:40:06 | | 719 | 886411ae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1106 | 3a76705 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D6.cfg | 05-08-2006 | 14:40:06 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D7.res | 05-08-2006 | 14:39:58 | | 524 | 4b031689 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D7.dpk | 05-08-2006 | 14:39:58 | | 719 | db5ef128 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2738 | dcbfe9e3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D7.cfg | 05-08-2006 | 14:39:58 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D10.res | 05-11-2007 | 15:37:38 | | 5096 | ef765b40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D10.dpk | 05-11-2007 | 15:37:38 | | 722 | 56a49633 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D10.bdsproj | 05-11-2007 | 15:37:38 | | 8220 | 6ec03f93 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_D10.dproj | 05-11-2007 | 15:37:38 | | 5932 | 8b48c086 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_MySQLDACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4896 | 19613f13 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAMySQLDACDriver.pas | 07-30-2007 | 11:05:06 | | 8713 | 8875afc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMySQLDACDriverHtml.res | 08-25-2007 | 15:09:42 | | 736 | 6cd38443 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMySQLDACDrv.dpr | 09-19-2006 | 14:57:28 | | 159 | d6b72e17 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMySQLDACDrv.res | 08-25-2007 | 15:09:56 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMySQLDACDrv.cfg | 09-19-2006 | 14:57:28 | | 577 | a269b6ae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAMySQLDACDrv.dof | 08-25-2007 | 15:09:00 | | 2598 | a8b74ae7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D6.res | 05-08-2006 | 14:45:38 | | 524 | 4b031689 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D6.dpk | 05-08-2006 | 14:45:38 | | 734 | e40f698d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1106 | 3a76705 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D6.cfg | 05-08-2006 | 14:45:38 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D7.res | 05-08-2006 | 14:45:30 | | 524 | 4b031689 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D7.dpk | 05-08-2006 | 14:45:30 | | 734 | 12d548b8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2738 | dcbfe9e3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D7.cfg | 05-08-2006 | 14:45:30 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10.res | 05-11-2007 | 15:34:56 | | 5096 | ef765b40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 737 | 332279bc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8229 | ca062619 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10B.res | 06-05-2007 | 10:17:04 | | 5096 | ef765b40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10B.dpk | 06-05-2007 | 10:17:04 | | 738 | 9b6588df -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_D10B.dproj | 06-05-2007 | 10:17:04 | | 5632 | 4c3d6bbd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_PostgresDACDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4920 | 274f9c98 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAPostgresDACDriverHtml.res | 08-25-2007 | 15:09:42 | | 736 | 6cd38443 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAPostgresDACDriver.pas | 06-26-2007 | 17:10:18 | | 9203 | 9d102b4e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAPostgresDACDrv.res | 08-25-2007 | 15:09:54 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAPostgresDACDrv.cfg | 09-19-2006 | 14:57:32 | | 577 | a269b6ae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAPostgresDACDrv.dof | 08-25-2007 | 15:09:00 | | 2598 | a8b74ae7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAPostgresDACDrv.dpr | 09-19-2006 | 14:57:32 | | 171 | a5e72af9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D7.res | 06-21-2006 | 14:45:34 | | 524 | 4b031689 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D7.dpk | 06-21-2006 | 14:45:34 | | 692 | a968230e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2730 | 33cb27a6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D7.cfg | 06-21-2006 | 14:45:34 | | 766 | 663e6809 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D6.res | 06-21-2006 | 14:50:22 | | 1368 | 8faf9850 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D6.dpk | 06-21-2006 | 14:50:22 | | 692 | e92d3631 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1109 | 4f6da5c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D6.cfg | 06-21-2006 | 14:50:22 | | 602 | e309783a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D10.res | 05-11-2007 | 15:34:56 | | 5096 | ef765b40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D10.dpk | 05-11-2007 | 15:34:56 | | 697 | 223cc4f7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D10.cfg | 05-11-2007 | 15:34:56 | | 682 | 5332ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D10.bdsproj | 05-11-2007 | 15:34:56 | | 8207 | 71e15c8e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_D10.dproj | 05-11-2007 | 15:34:56 | | 5912 | cf803ea7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_FIBDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | 39fb8fc7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAFIBDriverHtml.res | 08-25-2007 | 15:09:42 | | 1032 | acfaa4a2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAFIBDriver.pas | 08-02-2007 | 13:30:32 | | 20441 | fcef6968 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAFIBDrv.res | 08-25-2007 | 15:09:56 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAFIBDrv.dpr | 09-19-2006 | 14:57:24 | | 139 | 63f63be5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAFIBDrv.dof | 08-25-2007 | 15:09:00 | | 2613 | 3427db80 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAFIBDrv.cfg | 09-19-2006 | 14:57:24 | | 582 | dc75a12c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D7.res | 08-25-2007 | 15:09:18 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D7.cfg | 02-15-2007 | 13:50:54 | | 702 | ef2cc5bc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D7.dof | 08-25-2007 | 15:09:00 | | 2729 | dba0f13c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D7.dpk | 02-15-2007 | 13:50:54 | | 670 | 42681415 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D6.cfg | 02-15-2007 | 13:50:46 | | 538 | 45ac3f83 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1108 | 9ef26646 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D6.dpk | 02-15-2007 | 13:50:46 | | 670 | d7f90673 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D6.res | 08-25-2007 | 15:09:10 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D10.bdsproj | 05-11-2007 | 15:36:50 | | 8209 | 8750d664 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D10.dproj | 05-11-2007 | 15:36:50 | | 6100 | a7d2df4a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D10.cfg | 05-11-2007 | 15:36:50 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D10.dpk | 05-11-2007 | 15:36:50 | | 672 | 44fc6714 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_D10.res | 08-25-2007 | 15:09:28 | | 528 | a03b067b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_SQLiteDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4884 | 26831d13 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASQLiteDriverHtml.res | 08-25-2007 | 15:09:42 | | 616 | 13eaaa89 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDASQLiteDriver.pas | 07-05-2007 | 16:20:46 | | 9860 | b0d51d69 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASQLiteDrv.bdsproj | 02-15-2007 | 13:50:08 | | 10223 | 7dbfc7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASQLiteDrv.cfg | 02-15-2007 | 13:50:08 | | 295 | e9de943c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASQLiteDrv.dpr | 02-15-2007 | 13:50:08 | | 158 | 2a3af1a4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DASQLiteDrv.res | 08-25-2007 | 15:09:48 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\ASGRout3.pas | 09-21-2005 | 10:29:00 | | 11531 | 7635d901 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\asgsqlite3.pas | 03-23-2006 | 10:03:00 | | 203585 | d8aae3f9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\asqlite_def.inc | 01-10-2006 | 11:23:00 | | 2413 | aeae0406 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D6.cfg | 07-12-2004 | 13:11:52 | | 423 | 82fbbbc0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1767 | dcba9716 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D6.dpk | 07-12-2004 | 13:11:52 | | 896 | 719cd410 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D6.res | 07-12-2004 | 13:11:52 | | 1536 | d862b20a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D7.cfg | 07-12-2004 | 13:11:42 | | 497 | 8a5b2508 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D7.dof | 08-25-2007 | 15:09:00 | | 1767 | 858527c3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D7.dpk | 07-12-2004 | 13:11:42 | | 953 | 310c39fa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D7.res | 07-12-2004 | 13:11:42 | | 1216 | be2dbc7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D10.bdsproj | 05-04-2007 | 13:00:54 | | 8554 | dc31a1aa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D10.dproj | 05-04-2007 | 13:00:54 | | 6347 | 302a7ed5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D10.cfg | 05-04-2007 | 13:00:54 | | 470 | 1a635324 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D10.dpk | 05-04-2007 | 13:00:54 | | 956 | 2f2b500c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_NexusDBDriver_D10.res | 05-04-2007 | 13:00:54 | | 1508 | e2970298 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDANexusDBDriver.dcr | 08-03-2007 | 14:25:02 | | 1732 | fbd3a80a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDANexusDBDriver.pas | 08-03-2007 | 14:25:02 | | 35541 | 4353e3c3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DANexusDBDriverHtml.res | 08-25-2007 | 15:09:42 | | 1108 | 62b1686a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DANexusDBDrv.cfg | 08-17-2006 | 14:11:58 | | 579 | eb667121 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DANexusDBDrv.dpr | 08-17-2006 | 14:11:58 | | 155 | 940e2aea -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DANexusDBDrv.res | 08-25-2007 | 15:10:02 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D6.cfg | 05-04-2007 | 21:09:24 | | 602 | 21091978 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D6.dof | 08-25-2007 | 15:09:00 | | 1171 | 3a724d62 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D6.dpk | 05-04-2007 | 21:09:24 | | 706 | bf55b8f3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D6.res | 05-04-2007 | 21:09:24 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D7.cfg | 05-04-2007 | 21:04:50 | | 766 | 67f91117 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D7.dof | 08-25-2007 | 15:09:00 | | 1954 | 8427f1eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D7.dpk | 05-04-2007 | 21:04:50 | | 706 | 46f6556d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D7.res | 05-04-2007 | 21:04:50 | | 1728 | 71daad01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D10.cfg | 05-11-2007 | 15:36:44 | | 682 | 43d7fe7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D10.dpk | 05-11-2007 | 15:36:44 | | 711 | ea667151 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D10.res | 05-11-2007 | 15:36:44 | | 1664 | 5b6ba919 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D10.bdsproj | 05-11-2007 | 15:36:44 | | 8249 | ab4f426d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_D10.dproj | 05-11-2007 | 15:36:44 | | 6241 | 9fd3c8d5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DataAbstract_ZeosDriver_Glyphs.res | 08-25-2007 | 15:09:04 | | 4872 | ff826d2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAZeosDriverHtml.res | 08-25-2007 | 15:09:42 | | 948 | 6cc4708e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\uDAZeosDriver.pas | 07-05-2007 | 16:23:02 | | 40164 | da6c3857 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAZeosDrv.dpr | 05-04-2007 | 20:45:02 | | 143 | c9e94b8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAZeosDrv.res | 08-25-2007 | 15:10:06 | | 672 | e1f57868 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\DAZeosDrv.cfg | 05-04-2007 | 20:45:02 | | 690 | 63c841c2 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DataAbstract_DOADriver_D7.dpk | 12-01-2003 | 16:26:40 | | 719 | 8e08b8af -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DataAbstract_DOADriver_D7.res | 12-01-2003 | 16:26:40 | | 1536 | 36084df3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DataAbstract_DOADriver_D7.cfg | 12-01-2003 | 16:26:40 | | 399 | 3b925e14 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DataAbstract_DOADriver_D7.dof | 08-25-2007 | 15:09:00 | | 1764 | 964b967b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DADOADriverHtml.res | 09-23-2004 | 13:00:48 | | 700 | 9c81d4a1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\uDADOADriver.dcr | 06-21-2006 | 10:49:58 | | 1728 | cc6089fc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\uDADOADriver.pas | 06-21-2006 | 10:49:58 | | 33360 | 1daf15b0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DADOADrv.cfg | 09-23-2004 | 14:28:16 | | 494 | d8385f74 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DADOADrv.dpr | 09-23-2004 | 14:28:16 | | 174 | 3603251c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DADOADrv.res | 09-23-2004 | 14:28:16 | | 520 | d6e8fdf5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Drivers\Unsupported\DOA.INC | 09-26-2003 | 21:13:06 | | 294 | 21b0e9c6 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Unsupported -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Unsupported\uDAJvMTable.pas | 12-10-2003 | 19:28:34 | | 4314 | 5a8ee3bc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Unsupported\uDASQLMemoryTable.pas | 12-10-2003 | 19:28:40 | | 6109 | e7811714 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\Unsupported\uDAMemTablesReg.pas | 12-10-2003 | 19:30:02 | | 288 | ed154e21 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract3.RODL | 01-04-2006 | 14:44:16 | | 5733 | 728f5508 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract4.RODL | 07-24-2007 | 11:47:14 | | 10099 | a5b69595 -RegDB Key: Software\RemObjects\RemObjects SDK -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK\Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi -RegDB Name: Data Abstract for Delphi -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK\KnownRodls -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract4.RODL -RegDB Name: Data Abstract -RegDB Root: 1 -RegDB Key: Software\RemObjects\RemObjects SDK\KnownRodls -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Source\DataAbstract3.RODL -RegDB Name: Data Abstract (v3.0 Legacy) -RegDB Root: 1 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fMainForm.pas | 04-17-2006 | 18:08:10 | | 449 | f35c45b9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fServerDataModule.dfm | 10-09-2006 | 14:50:56 | | 1210 | 2285fc42 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fServerDataModule.pas | 10-09-2006 | 14:50:56 | | 733 | fb3f1acb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\Icon.ico | 03-21-2006 | 15:30:24 | | 3262 | 1d8835a3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\Info.ini | 05-14-2007 | 13:07:24 | | 158 | 9c0257a5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\$SERVICENAME_Impl.dfm | 04-06-2007 | 15:39:04 | | 563 | 4124f31b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\$SERVICENAME_Impl.pas | 04-06-2007 | 15:39:04 | | 919 | 9594cffb -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\$LIBRARYNAME.RODL | 03-21-2006 | 14:51:40 | | 472 | c1b37c00 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\$PRJNAME.dpr | 04-07-2006 | 12:41:52 | | 688 | a4d2e2df -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\$PRJNAME.res | 04-07-2006 | 12:41:52 | | 22748 | 557d2f64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fClientDataModule.dfm | 05-24-2007 | 14:06:30 | | 773 | 9b924874 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fClientDataModule.pas | 05-24-2007 | 14:06:30 | | 730 | 3b68e80b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\LOCAL\fMainForm.dfm | 04-17-2006 | 18:08:10 | | 552 | e1d9eaed -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\$PRJNAME.dpr | 03-21-2006 | 13:46:04 | | 730 | 4e336099 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\$SERVICENAME_Impl.pas | 04-06-2007 | 15:39:54 | | 912 | e656c6c6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\fServerDataModule.pas | 10-09-2006 | 14:51:04 | | 933 | 88f03c26 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\fServerForm.pas | 03-21-2006 | 13:46:52 | | 432 | 477057d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\Icon.ico | 01-26-2006 | 09:15:48 | | 3262 | 832926e1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\$LIBRARYNAME.RODL | 03-21-2006 | 14:35:20 | | 468 | fb976f9b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\$PRJNAME.res | 03-21-2006 | 13:46:04 | | 22748 | 557d2f64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\Info.ini | 06-01-2007 | 21:51:46 | | 210 | 6f3ca70b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\$SERVICENAME_Impl.dfm | 04-06-2007 | 15:39:54 | | 558 | d5892979 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\fServerDataModule.dfm | 10-09-2006 | 14:51:04 | | 1214 | 13a1abf9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\fServerForm.dfm | 03-21-2006 | 13:46:52 | | 552 | f6a3417c -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\fClientDataModule.dfm | 04-06-2007 | 15:40:22 | | 3241 | 5442878e -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\fClientForm.dfm | 03-21-2006 | 13:51:46 | | 382 | 835e154b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\$PRJNAMEClient.dpr | 04-07-2006 | 12:41:54 | | 402 | 4901c6f1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\fClientDataModule.pas | 04-06-2007 | 15:40:22 | | 682 | dc60bb79 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\fClientForm.pas | 03-21-2006 | 13:51:46 | | 424 | c0256547 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\$PRJNAMEGroup.bpg | 03-06-2004 | 12:24:46 | | 824 | 207152a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXEv3\_CLIENT\$PRJNAMEClient.res | 04-07-2006 | 12:41:54 | | 22748 | 5f92caef -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\fServerDataModule.pas | 10-09-2006 | 14:50:52 | | 933 | 88f03c26 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\fServerForm.pas | 03-21-2006 | 13:46:52 | | 432 | 477057d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\$PRJNAME.res | 03-21-2006 | 13:43:24 | | 22748 | 557d2f64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\Info.ini | 05-14-2007 | 13:07:30 | | 207 | 7cd48564 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\$SERVICENAME_Impl.dfm | 04-06-2007 | 15:33:38 | | 563 | 4124f31b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\fServerDataModule.dfm | 10-09-2006 | 14:50:52 | | 1214 | 5c5680fe -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\fServerForm.dfm | 03-21-2006 | 13:46:52 | | 552 | f6a3417c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\$PRJNAME.dpr | 03-21-2006 | 13:43:24 | | 730 | 4e336099 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\Icon.ico | 04-08-2004 | 23:11:02 | | 3262 | bd87e090 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\$LIBRARYNAME.RODL | 03-21-2006 | 14:51:40 | | 472 | c1b37c00 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\$SERVICENAME_Impl.pas | 04-06-2007 | 15:33:38 | | 936 | c8c42ed6 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\fClientDataModule.pas | 05-14-2007 | 17:26:32 | | 682 | dc60bb79 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\fClientForm.pas | 03-21-2006 | 13:51:44 | | 424 | c0256547 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\$PRJNAMEClient.res | 04-07-2006 | 12:41:54 | | 22748 | 5f92caef -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\fClientDataModule.dfm | 05-14-2007 | 17:26:32 | | 665 | ca676979 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\fClientForm.dfm | 03-21-2006 | 13:51:44 | | 382 | 835e154b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\$PRJNAMEClient.dpr | 04-07-2006 | 12:41:54 | | 402 | 4901c6f1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLEXE\_Client\$PRJNAMEGroup.bpg | 03-06-2004 | 12:24:46 | | 824 | 207152a6 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\$SERVICENAME_Impl.pas | 04-06-2007 | 15:40:44 | | 920 | 54555b96 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\fServerDataModule.dfm | 10-09-2006 | 14:50:44 | | 1214 | 13a1abf9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\fServerDataModule.pas | 10-09-2006 | 14:50:44 | | 933 | 88f03c26 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\fServerForm.dfm | 03-21-2006 | 13:52:48 | | 552 | f6a3417c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\fServerForm.pas | 03-21-2006 | 13:52:48 | | 432 | 477057d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\Icon.ico | 03-21-2006 | 13:58:56 | | 3262 | 64a07412 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\Info.ini | 05-14-2007 | 13:07:46 | | 232 | 6e47031b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\LoginService_Impl.dfm | 04-27-2006 | 14:53:10 | | 240 | 50f21526 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\LoginService_Impl.pas | 04-27-2006 | 14:53:10 | | 2765 | 5d58283 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\$LIBRARYNAME.RODL | 03-21-2006 | 14:35:20 | | 727 | 19d72479 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\$PRJNAME.dpr | 03-21-2006 | 13:47:14 | | 815 | 58d36299 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\$PRJNAME.res | 03-21-2006 | 13:47:14 | | 22748 | 557d2f64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\$SERVICENAME_Impl.dfm | 04-06-2007 | 15:40:44 | | 589 | 20d7bc81 -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\$PRJNAMEGroup.bpg | 03-06-2004 | 12:24:46 | | 824 | 207152a6 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fClientDataModule.dfm | 08-23-2007 | 22:50:30 | | 665 | ca676979 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fClientDataModule.pas | 08-23-2007 | 22:50:30 | | 696 | d0d441d1 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fClientForm.dfm | 03-21-2006 | 14:35:40 | | 430 | 90480bf5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fClientForm.pas | 03-21-2006 | 14:35:40 | | 1544 | bd1989a3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fLoginForm.dfm | 08-25-2007 | 15:01:18 | | 1481 | 26e4dee4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\fLoginForm.pas | 03-21-2006 | 14:48:38 | | 857 | c5ad0243 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\$PRJNAMEClient.dpr | 04-07-2006 | 12:42:04 | | 449 | e9022e5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLLOGINEXE\_CLIENT\$PRJNAMEClient.res | 04-07-2006 | 12:42:04 | | 22748 | 5f92caef -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\fServerDataModule.dfm | 10-09-2006 | 14:50:32 | | 1214 | 13a1abf9 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\fServerDataModule.pas | 10-09-2006 | 14:50:32 | | 933 | 88f03c26 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\fServerForm.dfm | 03-21-2006 | 13:52:48 | | 552 | f6a3417c -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\fServerForm.pas | 03-21-2006 | 13:52:48 | | 432 | 477057d5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\Icon.ico | 03-21-2006 | 13:58:56 | | 3262 | 64a07412 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\Info.ini | 05-14-2007 | 13:07:56 | | 234 | f028dc2b -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\LoginService_Impl.dfm | 04-27-2006 | 14:52:56 | | 240 | 50f21526 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\LoginService_Impl.pas | 04-27-2006 | 14:52:56 | | 2924 | 2990258 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\$LIBRARYNAME.RODL | 03-21-2006 | 14:35:20 | | 728 | ca502df4 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\$PRJNAME.dpr | 03-21-2006 | 13:47:14 | | 815 | 58d36299 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\$PRJNAME.res | 03-21-2006 | 13:47:14 | | 22748 | 557d2f64 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\$SERVICENAME_Impl.dfm | 04-06-2007 | 15:41:24 | | 661 | 51761ba -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\$SERVICENAME_Impl.pas | 04-06-2007 | 15:41:24 | | 1227 | bc00f46a -Made Dir: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fClientDataModule.dfm | 04-06-2007 | 15:41:44 | | 665 | ca676979 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fClientDataModule.pas | 04-06-2007 | 15:41:44 | | 702 | 4391a3df -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fClientForm.dfm | 04-20-2006 | 12:17:38 | | 430 | 90480bf5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fClientForm.pas | 04-20-2006 | 12:17:38 | | 1576 | 5a8c40af -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fLoginForm.dfm | 08-25-2007 | 15:01:18 | | 1815 | 2ea49fe3 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\fLoginForm.pas | 03-21-2006 | 14:43:56 | | 910 | 38c7c2ae -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\$PRJNAMEClient.dpr | 04-07-2006 | 12:42:20 | | 449 | e9022e5 -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\$PRJNAMEClient.res | 04-07-2006 | 12:42:20 | | 22748 | 5f92caef -File Copy: C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Templates\DA\VCLMULTIDBLOGINEXE\_CLIENT\$PRJNAMEGroup.bpg | 03-06-2004 | 12:24:46 | | 824 | 207152a6 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Samples.html | 05-31-2007 | 09:14:30 | | 26820 | 7afb8b40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Styles.css | 06-27-2006 | 10:20:44 | | 1490 | c0549e5f -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientChanges.dfm | 11-03-2006 | 16:23:54 | | 1264 | 8eec4241 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientChanges.pas | 11-03-2006 | 16:23:54 | | 3222 | 99d8995a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServerMain.pas | 11-03-2006 | 16:24:02 | | 529 | 10edc539 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelService_Impl.pas | 08-22-2007 | 01:30:48 | | 1547 | 338fd928 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClient.res | 05-29-2007 | 13:58:00 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServer.res | 05-29-2007 | 13:58:00 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\RODLFILE.res | 11-03-2006 | 16:19:08 | | 7688 | b7448ee7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientData.dfm | 11-03-2006 | 16:23:56 | | 10419 | a87db52e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientMain.dfm | 11-09-2006 | 10:49:30 | | 3229 | 501f0d2c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServerData.dfm | 08-25-2007 | 15:08:50 | | 1384 | c71fbcd3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServerMain.dfm | 11-03-2006 | 16:24:02 | | 624 | aff26fe -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelService_Impl.dfm | 08-22-2007 | 01:30:48 | | 15425 | ed975fc2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClient.dpr | 05-29-2007 | 13:58:00 | | 697 | 3deca3b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClient.bdsproj | 05-29-2007 | 13:58:00 | | 8395 | ade9bed8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClient.dproj | 05-29-2007 | 13:58:00 | | 3737 | bcfce161 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServer.dpr | 05-29-2007 | 13:58:00 | | 941 | bc5bf434 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServer.bdsproj | 05-29-2007 | 13:58:00 | | 8395 | 68452c3b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServer.dproj | 05-29-2007 | 13:58:00 | | 3852 | 2c95b659 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModel.Sample.html | 10-24-2006 | 10:41:52 | | 938 | 86e07f73 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelLibrary.rodl | 10-16-2006 | 10:20:46 | | 668 | 74fcd02a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModel.bpg | 05-29-2007 | 13:58:04 | | 881 | f1ebdc12 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModel.bdsgroup | 05-29-2007 | 13:58:04 | | 759 | b8326ff3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModel.groupproj | 05-29-2007 | 13:58:04 | | 1608 | 626ad7e3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientData.pas | 11-03-2006 | 16:23:56 | | 950 | b8a15c57 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelClientMain.pas | 11-09-2006 | 10:49:30 | | 4065 | 8130f903 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelLibrary_Intf.pas | 11-03-2006 | 16:19:08 | | 2273 | d04fb38f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelLibrary_Invk.pas | 10-16-2006 | 10:27:24 | | 1029 | 6029273 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Briefcase\BriefcaseModelServerData.pas | 11-03-2006 | 16:24:06 | | 980 | ed56a357 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorLibrary_Intf.pas | 03-02-2007 | 14:51:40 | | 2345 | b8539baf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorLibrary_Invk.pas | 03-02-2007 | 14:51:40 | | 1050 | 8b286a5d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServerData.pas | 10-24-2006 | 12:13:50 | | 994 | f441d6ea -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServerMain.pas | 06-28-2007 | 14:48:24 | | 2784 | 18210d59 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorService_Impl.pas | 10-31-2006 | 12:10:54 | | 1710 | b14e6733 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\SchemaClient_Intf.pas | 09-12-2006 | 12:43:44 | | 38849 | e7d4fc67 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\SchemaServer_Intf.pas | 09-12-2006 | 12:43:46 | | 48848 | f98a988a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\ServerGlobal.pas | 10-03-2006 | 16:48:34 | | 314 | 7c231e12 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClient.res | 05-29-2007 | 13:57:52 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServer.res | 05-29-2007 | 13:57:52 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\RODLFILE.res | 03-02-2007 | 14:51:40 | | 7995 | a926911e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientData.dfm | 03-07-2007 | 11:16:04 | | 11846 | a24f155e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientMain.dfm | 03-02-2007 | 10:43:04 | | 3048 | 223e067d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientUnit1.dfm | 03-30-2007 | 21:09:30 | | 1853 | dd019e55 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServerData.dfm | 08-25-2007 | 15:08:50 | | 1391 | 1767b386 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServerMain.dfm | 08-25-2007 | 15:08:50 | | 2545 | fd6f8630 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorService_Impl.dfm | 10-31-2006 | 12:10:54 | | 22056 | 7a0aba0d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClient.dpr | 05-29-2007 | 13:57:52 | | 726 | 491f3c9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClient.bdsproj | 05-29-2007 | 13:57:52 | | 8398 | dab0f144 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClient.dproj | 05-29-2007 | 13:57:52 | | 3811 | 3d2ea593 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServer.dpr | 05-29-2007 | 13:57:52 | | 1130 | 5af71c5a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServer.bdsproj | 05-29-2007 | 13:57:52 | | 8398 | 256bf437 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorServer.dproj | 05-29-2007 | 13:57:52 | | 4097 | e17e24bd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessor.Sample.html | 10-24-2006 | 15:22:48 | | 993 | 59a72f93 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorLibrary.RODL | 10-24-2006 | 12:12:22 | | 674 | 254c1100 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessor.bpg | 05-29-2007 | 13:57:54 | | 899 | 752446e7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessor.bdsgroup | 05-29-2007 | 13:57:54 | | 777 | 6eb01f31 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessor.groupproj | 05-29-2007 | 13:57:54 | | 1662 | 14c60e69 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BizSchemaClient.pas | 10-03-2006 | 17:31:58 | | 3859 | 4f1bf657 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BizSchemaServer.pas | 06-28-2007 | 14:12:30 | | 4563 | e79ad12b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientData.pas | 03-07-2007 | 11:16:04 | | 3085 | 5c3617a8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientMain.pas | 03-02-2007 | 10:43:04 | | 2019 | 879d9f11 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Processor\BusinessProcessorClientUnit1.pas | 03-30-2007 | 21:09:30 | | 8818 | 111f8076 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ClientData.dfm | 10-31-2006 | 12:04:52 | | 11055 | 31806259 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ClientMain.dfm | 08-29-2006 | 15:25:00 | | 3199 | 7d22f5b0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ServerData.dfm | 08-25-2007 | 15:08:50 | | 10474 | d8a0d185 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ServerMain.dfm | 05-18-2006 | 13:01:42 | | 1094 | 5696ed51 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\NewService_Impl.dfm | 05-17-2006 | 10:10:32 | | 362 | 14180eed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Client.dpr | 05-29-2007 | 13:57:44 | | 663 | 9eccd8b4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Client.bdsproj | 05-29-2007 | 13:57:44 | | 8402 | 54c97976 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Client.dproj | 05-29-2007 | 13:57:44 | | 3658 | 1c1c4306 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Server.dpr | 05-29-2007 | 13:57:44 | | 996 | d6a91f54 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Server.bdsproj | 05-29-2007 | 13:57:44 | | 8402 | 3d91221a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Server.dproj | 05-29-2007 | 13:57:44 | | 3898 | a0d4c161 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts.Sample.html | 04-24-2006 | 09:37:04 | | 1145 | 1f18b956 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScriptsLibrary.rodl | 05-17-2006 | 10:10:06 | | 859 | e419c5f4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts.bpg | 05-29-2007 | 13:57:46 | | 923 | b1129b54 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts.bdsgroup | 05-29-2007 | 13:57:46 | | 801 | 7f856e17 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts.groupproj | 05-29-2007 | 13:57:46 | | 1734 | 3c7732ee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ClientData.pas | 10-31-2006 | 12:04:52 | | 1072 | 17c0f60b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ClientMain.pas | 08-29-2006 | 15:25:00 | | 1121 | 15549909 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ServerData.pas | 04-24-2006 | 09:36:10 | | 976 | 158825ee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_ServerMain.pas | 05-18-2006 | 13:01:42 | | 1286 | c6726b8c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScriptsLibrary_Intf.pas | 04-27-2006 | 04:44:46 | | 2697 | f82480da -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScriptsLibrary_Invk.pas | 04-27-2006 | 04:44:46 | | 1952 | c9874536 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\NewService_Impl.pas | 05-17-2006 | 10:10:32 | | 1354 | 9b670f33 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Client.res | 05-29-2007 | 13:57:44 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\BusinessRulesScripts_Server.res | 05-29-2007 | 13:57:44 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Business Rules Scripts\RODLFILE.res | 05-17-2006 | 10:10:34 | | 790 | afd5341e -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ServerMain.pas | 04-07-2006 | 06:16:06 | | 554 | b2899700 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFieldsLibrary_Intf.pas | 06-25-2007 | 08:14:08 | | 2816 | e71eebbc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFieldsLibrary_Invk.pas | 06-25-2007 | 08:14:08 | | 1913 | 66290027 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFieldsService_Impl.pas | 06-25-2007 | 08:07:14 | | 2344 | db4deabf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Client.res | 05-29-2007 | 13:57:36 | | 22748 | 8ffae5cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Server.res | 05-29-2007 | 13:57:36 | | 23380 | 66a71fb0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\RODLFILE.res | 06-25-2007 | 08:14:08 | | 10793 | 1f742670 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ClientData.dfm | 06-25-2007 | 08:11:14 | | 3731 | 4ca61b4e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ClientMain.dfm | 06-25-2007 | 08:09:10 | | 1234 | 6518e734 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ServerData.dfm | 08-25-2007 | 15:08:50 | | 1168 | 32443adb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ServerMain.dfm | 04-07-2006 | 06:16:06 | | 610 | c344df7b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFieldsService_Impl.dfm | 06-25-2007 | 08:07:14 | | 3980 | 515da666 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Client.dpr | 05-29-2007 | 13:57:36 | | 539 | a0ce9dc8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Client.bdsproj | 05-29-2007 | 13:57:36 | | 8392 | aac9248f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Client.dproj | 05-29-2007 | 13:57:36 | | 3576 | c380ab9c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Server.dpr | 05-29-2007 | 13:57:36 | | 843 | b94e74e0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Server.bdsproj | 05-29-2007 | 13:57:36 | | 8391 | 1684d806 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_Server.dproj | 05-29-2007 | 13:57:36 | | 3809 | bacf05fd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields.Sample.html | 04-27-2006 | 14:57:44 | | 905 | 1e94e578 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFieldsLibrary.rodl | 04-07-2006 | 06:21:20 | | 1047 | 9bf6f4a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields.bpg | 05-29-2007 | 13:57:38 | | 863 | 143e151b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields.bdsgroup | 05-29-2007 | 13:57:38 | | 741 | 69330715 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields.groupproj | 05-29-2007 | 13:57:38 | | 1554 | b17689be -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ClientData.pas | 06-25-2007 | 08:11:14 | | 1814 | f6f0e629 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ClientMain.pas | 06-25-2007 | 08:09:10 | | 1060 | 92e3f2b5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Calculated Fields\CalcFields_ServerData.pas | 06-25-2007 | 08:06:40 | | 870 | 23d3e24b -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUserMain.dfm | 08-25-2007 | 15:08:50 | | 3767 | 6b8226cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUser.dpr | 05-29-2007 | 13:57:30 | | 329 | 65ab4831 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUser.bdsproj | 05-29-2007 | 13:57:30 | | 8391 | 4cb3f376 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUser.dproj | 05-29-2007 | 13:57:30 | | 3447 | c1b5533a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUser.Sample.html | 06-28-2006 | 13:29:08 | | 1470 | f825d278 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUserMain.pas | 06-28-2006 | 13:26:10 | | 6112 | 5f33a15b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection By User\ConnectionByUser.res | 05-29-2007 | 13:57:30 | | 22748 | 23808d40 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPoolingMain.dfm | 08-25-2007 | 15:08:50 | | 3871 | 2fad26dc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPooling.dpr | 05-29-2007 | 13:57:20 | | 334 | ccc0bec4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPooling.bdsproj | 05-29-2007 | 13:57:20 | | 8392 | 574bd204 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPooling.dproj | 05-29-2007 | 13:57:20 | | 3453 | 84446969 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPooling.Sample.html | 04-27-2006 | 15:10:56 | | 928 | b1ebda5c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPoolingMain.pas | 12-08-2006 | 15:31:52 | | 4553 | 99ba8166 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Connection Pooling\ConnectionPooling.res | 05-29-2007 | 13:57:20 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogonMain.dfm | 04-10-2006 | 03:02:30 | | 2342 | 3904483b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogon.dpr | 05-29-2007 | 13:57:12 | | 320 | e5a55a8e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogon.bdsproj | 05-29-2007 | 13:57:12 | | 8390 | 30d29fae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogon.dproj | 05-29-2007 | 13:57:12 | | 3148 | 53e5d916 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogon.Sample.html | 04-27-2006 | 16:03:28 | | 1339 | f891346a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogonMain.pas | 04-10-2006 | 03:02:30 | | 1491 | 7c7e48f1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Custom User Logon\CustomUserLogon.res | 05-29-2007 | 13:57:12 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersTest.res | 05-29-2007 | 13:56:58 | | 22748 | 23808d40 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersMain.dfm | 10-16-2006 | 15:39:58 | | 20553 | c9c47646 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\fMainForm.dfm | 06-16-2006 | 15:47:48 | | 20505 | 918e9ea3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersTest.dpr | 05-29-2007 | 13:56:58 | | 310 | 9ecd4c70 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersTest.bdsproj | 05-29-2007 | 13:56:58 | | 8392 | 883931d1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersTest.dproj | 05-29-2007 | 13:56:58 | | 3445 | f43bbcd9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersTest.Sample.html | 06-21-2006 | 08:52:02 | | 914 | 74c42ac6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\DataStreamersMain.pas | 10-16-2006 | 15:39:58 | | 7026 | 392b833a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Data Streamers\fMainForm.pas | 06-16-2006 | 15:47:48 | | 6655 | e98e2107 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServerMain.pas | 07-17-2006 | 15:32:46 | | 1419 | 1674ac2e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLService_Impl.pas | 06-22-2007 | 04:42:14 | | 2661 | 5c97c28a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLClient.res | 06-22-2007 | 05:15:28 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServer.res | 05-29-2007 | 13:56:36 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\RODLFILE.res | 06-22-2007 | 04:58:54 | | 10778 | ef7e29b6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLMainClient.dfm | 06-26-2007 | 09:54:28 | | 5881 | 9db119bf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServerMain.dfm | 08-25-2007 | 15:08:50 | | 1903 | 4559b8da -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLService_Impl.dfm | 06-22-2007 | 04:42:14 | | 633 | 3e6603d6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLClient.dpr | 06-22-2007 | 05:15:28 | | 351 | 7b3f619f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLClient.bdsproj | 06-22-2007 | 05:15:28 | | 8387 | ca3d414e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLClient.dproj | 06-22-2007 | 05:15:28 | | 3185 | 59319b97 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServer.dpr | 05-29-2007 | 13:56:36 | | 594 | c28c21fc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServer.bdsproj | 05-29-2007 | 13:56:36 | | 8387 | d8a3bf29 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLServer.dproj | 05-29-2007 | 13:56:36 | | 3641 | fbd71cb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQL.Sample.html | 04-27-2006 | 16:16:24 | | 2671 | 83f55a8f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLLibrary.RODL | 06-14-2006 | 16:15:38 | | 1033 | 25dc015b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQL.bpg | 05-29-2007 | 13:56:38 | | 833 | d52b2698 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQL.bdsgroup | 05-29-2007 | 13:56:38 | | 711 | e4a0fa4d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQL.groupproj | 05-29-2007 | 13:56:38 | | 1464 | 2eb718d4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLLibrary_Intf.pas | 06-22-2007 | 04:58:54 | | 2745 | 7908e2fd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLLibrary_Invk.pas | 06-22-2007 | 04:58:54 | | 2131 | 705e792c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Dynamic SQL\DynSQLMainClient.pas | 06-26-2007 | 09:54:28 | | 3336 | 4159a8a4 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServerData.dfm | 08-25-2007 | 15:08:50 | | 1339 | 186564be -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServerMain.dfm | 06-22-2007 | 02:29:36 | | 596 | 9327c51f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchService_Impl.dfm | 06-22-2007 | 04:25:50 | | 26862 | a7ca5287 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClient.dpr | 06-22-2007 | 02:54:28 | | 485 | 1e9c7370 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServer.dpr | 06-22-2007 | 02:25:42 | | 760 | a231df09 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\Fetch.Sample.html | 06-24-2007 | 10:16:04 | | 1893 | 8816de46 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClientData.pas | 06-22-2007 | 02:50:26 | | 659 | eaa3ba9a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClientMain.pas | 06-22-2007 | 04:21:58 | | 4345 | 2b152f05 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchLibrary_Intf.pas | 06-22-2007 | 04:27:50 | | 3043 | c776ecab -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchLibrary_Invk.pas | 06-22-2007 | 04:27:50 | | 2389 | 333b74cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServerData.pas | 06-22-2007 | 03:00:16 | | 930 | 899927de -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServerMain.pas | 06-22-2007 | 02:29:36 | | 493 | 6725a7b6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchService_Impl.pas | 06-22-2007 | 04:25:50 | | 2300 | e8b60ab2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchLibrary.RODL | 06-22-2007 | 01:50:20 | | 1319 | 6182a20d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\Fetch.bdsgroup | 06-22-2007 | 04:31:24 | | 705 | 716302ba -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClient.bdsproj | 06-22-2007 | 02:54:28 | | 8386 | 51f44bac -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServer.bdsproj | 06-22-2007 | 02:25:42 | | 8386 | 3b1164c8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\Fetch.groupproj | 06-22-2007 | 04:31:24 | | 1673 | 131c2c0a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\Fetch.bpg | 06-22-2007 | 04:31:24 | | 827 | 618939f4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClient.res | 06-22-2007 | 02:54:28 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServer.res | 06-22-2007 | 02:25:42 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\RODLFILE.res | 06-22-2007 | 04:27:50 | | 10930 | ef7a2e7c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClient.dproj | 06-22-2007 | 02:54:28 | | 3695 | 8012e0f3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchServer.dproj | 06-22-2007 | 02:25:42 | | 3417 | da95149a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClientData.dfm | 06-22-2007 | 02:50:26 | | 684 | 9c3b841a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Fetch\FetchClientMain.dfm | 08-25-2007 | 15:08:50 | | 25997 | 85177039 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServerMain.pas | 05-09-2006 | 19:32:30 | | 517 | 9b99816b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleService_Impl.pas | 05-09-2006 | 19:34:28 | | 1005 | 20b9bbfe -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClient.res | 05-29-2007 | 13:56:20 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServer.res | 05-29-2007 | 13:56:20 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\RODLFILE.res | 05-28-2006 | 05:58:26 | | 7683 | 2b020581 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClientData.dfm | 05-28-2006 | 05:58:22 | | 5176 | dfdaaa87 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleclientMain.dfm | 08-25-2007 | 15:08:50 | | 1407 | 599512ae -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServerData.dfm | 08-25-2007 | 15:08:50 | | 1573 | 1ed8b78f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServerMain.dfm | 05-09-2006 | 19:32:30 | | 614 | 9d0bcf23 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleService_Impl.dfm | 05-09-2006 | 19:34:28 | | 6811 | 6a100574 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClient.dpr | 05-29-2007 | 13:56:20 | | 558 | 50cbe513 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClient.bdsproj | 05-29-2007 | 13:56:20 | | 8392 | 81e73c78 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClient.dproj | 05-29-2007 | 13:56:20 | | 3578 | caaceff4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServer.dpr | 05-29-2007 | 13:56:20 | | 1066 | 316fbed3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServer.bdsproj | 05-29-2007 | 13:56:20 | | 8392 | d38ed87d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServer.dproj | 05-29-2007 | 13:56:20 | | 3816 | a421b2e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSample.Sample.html | 05-30-2006 | 15:57:30 | | 1335 | c66cdecf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleLibrary.RODL | 05-09-2006 | 19:25:08 | | 616 | 7738310d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSample.bpg | 05-29-2007 | 13:56:22 | | 863 | 46a2c77c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSample.bdsgroup | 05-29-2007 | 13:56:22 | | 741 | 7d04d0ea -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSample.groupproj | 05-29-2007 | 13:56:22 | | 1554 | 5f1fa1ce -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleClientData.pas | 05-28-2006 | 05:58:22 | | 861 | 3155ebfc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleclientMain.pas | 05-18-2006 | 14:38:18 | | 1123 | 200d57af -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleLibrary_Intf.pas | 05-09-2006 | 19:34:30 | | 2188 | b022c3f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleLibrary_Invk.pas | 05-09-2006 | 19:34:30 | | 1020 | f9fded7d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\First Sample\FirstSampleServerData.pas | 05-09-2006 | 20:36:18 | | 1008 | 8db74204 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchemaMain.dfm | 06-21-2006 | 04:57:52 | | 21118 | 40a8679a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchema.dpr | 05-29-2007 | 13:56:08 | | 302 | 713f515e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchema.bdsproj | 05-29-2007 | 13:56:08 | | 8386 | 80f4142e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchema.dproj | 05-29-2007 | 13:56:08 | | 3417 | 7f512139 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchema.Sample.html | 06-21-2006 | 09:26:38 | | 2066 | 5702728f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchemaMain.pas | 06-21-2006 | 04:57:52 | | 1630 | 172251f0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Local Schema\LocalSchema.res | 05-29-2007 | 13:56:08 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\RODLFILE.res | 05-09-2006 | 18:34:08 | | 7216 | 21a5e9f3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ClientData.dfm | 05-30-2006 | 13:45:58 | | 2744 | a2b0a41c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ClientMain.dfm | 08-25-2007 | 15:08:52 | | 8203 | 24c7ebb8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ServerData.dfm | 08-25-2007 | 15:08:52 | | 1442 | b622052c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ServerMain.dfm | 04-27-2006 | 01:57:20 | | 614 | 15f933ee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSampleService_Impl.dfm | 04-27-2006 | 01:55:10 | | 10135 | 3adcc24b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginService_Impl.dfm | 06-14-2006 | 10:40:32 | | 1940 | e9b7152b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_Client.dpr | 05-29-2007 | 13:55:56 | | 568 | 753f93b1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_Client.bdsproj | 05-29-2007 | 13:55:56 | | 8393 | 9e65bba -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_Client.dproj | 05-29-2007 | 13:55:56 | | 3586 | 9561cfad -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_server.dpr | 05-29-2007 | 13:55:56 | | 953 | 28f7dd2e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_server.bdsproj | 05-29-2007 | 13:55:56 | | 8393 | 6cc32374 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_server.dproj | 05-29-2007 | 13:55:56 | | 3930 | 53c347aa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample.Sample.html | 05-26-2006 | 10:57:04 | | 698 | e83cc260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSampleLibrary.RODL | 04-27-2006 | 00:37:16 | | 935 | 461ed2bc -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample.bpg | 05-29-2007 | 13:56:00 | | 869 | 93572466 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample.bdsgroup | 05-29-2007 | 13:56:00 | | 747 | 8fd8eaf8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample.groupproj | 05-29-2007 | 13:56:00 | | 1572 | 3b976ff6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ClientData.pas | 05-30-2006 | 13:45:58 | | 752 | a8c530b2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ClientMain.pas | 06-28-2006 | 15:14:00 | | 2442 | eae74f4e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ServerData.pas | 05-09-2006 | 20:38:38 | | 970 | 70ebb947 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_ServerMain.pas | 04-27-2006 | 01:57:20 | | 521 | bfee5ce3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSampleLibrary_Intf.pas | 05-09-2006 | 18:34:08 | | 3202 | c580b8e9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSampleLibrary_Invk.pas | 05-09-2006 | 18:34:08 | | 1129 | ec0b3044 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSampleService_Impl.pas | 04-27-2006 | 01:55:10 | | 1006 | 8ae362aa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginService_Impl.pas | 06-14-2006 | 10:40:32 | | 2370 | 1b1fd0b8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_Client.res | 05-29-2007 | 13:55:56 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Login Sample\LoginSample_server.res | 05-29-2007 | 13:55:56 | | 22748 | f90747eb -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient.res | 05-29-2007 | 13:55:50 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer.res | 05-29-2007 | 13:55:48 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\RODLFILE.res | 05-27-2007 | 12:02:54 | | 12341 | c5ee82a4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\LoginService_Impl.dfm | 05-27-2007 | 12:02:48 | | 6134 | f53090ed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient_Data.dfm | 10-31-2006 | 12:07:08 | | 7173 | ab65ea6f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient_Main.dfm | 08-25-2007 | 15:08:52 | | 8210 | 953825ef -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer_Data.dfm | 08-24-2006 | 20:55:50 | | 1820 | 287679f0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer_Main.dfm | 08-24-2006 | 20:55:50 | | 1024 | 7465dbc0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\OrdersService_Impl.dfm | 05-17-2007 | 11:17:12 | | 10631 | 25ac23f8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient.dpr | 05-29-2007 | 13:55:50 | | 488 | ec1e04f0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient.bdsproj | 05-29-2007 | 13:55:50 | | 8389 | 26ea8fba -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient.dproj | 05-29-2007 | 13:55:50 | | 3558 | 4dd77162 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer.dpr | 05-29-2007 | 13:55:48 | | 911 | fd2db59 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer.bdsproj | 05-29-2007 | 13:55:48 | | 8389 | ad9878ed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer.dproj | 05-29-2007 | 13:55:48 | | 3886 | eb58a713 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoGroup.Sample.html | 07-04-2006 | 15:23:52 | | 1677 | 6acdb099 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoLibrary.RODL | 05-27-2007 | 12:02:12 | | 2736 | 22537a4a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoGroup.bpg | 05-29-2007 | 13:55:52 | | 845 | 384ad875 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoGroup.bdsgroup | 05-29-2007 | 13:55:52 | | 723 | 1da53ad9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoGroup.groupproj | 05-29-2007 | 13:55:52 | | 1500 | f410f800 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\LoginService_Impl.pas | 05-27-2007 | 12:02:48 | | 3882 | ad340c1d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient_Data.pas | 10-31-2006 | 12:07:08 | | 1710 | e221392 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoClient_Main.pas | 05-27-2007 | 12:03:06 | | 5569 | dc87edcf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoLibrary_Intf.pas | 05-27-2007 | 12:02:54 | | 11694 | 8ff6077d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoLibrary_Invk.pas | 05-27-2007 | 12:02:54 | | 4426 | b7823cf0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer_Data.pas | 08-24-2006 | 20:55:50 | | 1000 | fa9f4854 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\MegaDemoServer_Main.pas | 08-24-2006 | 20:55:50 | | 1520 | 6eeeeb49 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\MegaDemo\OrdersService_Impl.pas | 05-17-2007 | 11:17:12 | | 3153 | bba5fe0 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Server.dpr | 05-29-2007 | 13:55:42 | | 824 | fe11b666 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Server.bdsproj | 05-29-2007 | 13:55:42 | | 8392 | baa786a5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Server.dproj | 05-29-2007 | 13:55:42 | | 3798 | 1b8b1193 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Server.res | 05-29-2007 | 13:55:42 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ServerData.dfm | 08-25-2007 | 15:08:52 | | 1431 | f29f5b6e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ServerData.pas | 04-19-2006 | 05:51:18 | | 1114 | c0b26ca6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ServerMain.dfm | 04-19-2006 | 05:51:32 | | 612 | 5867721a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ServerMain.pas | 04-19-2006 | 05:51:32 | | 590 | e2a3ca8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryDataLibrary.rodl | 04-19-2006 | 05:49:52 | | 847 | 39fdca01 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryDataLibrary_Intf.pas | 04-19-2006 | 05:54:26 | | 2035 | 622910ff -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryDataLibrary_Invk.pas | 04-19-2006 | 05:54:26 | | 1010 | 76ab5397 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\NewService_Impl.dfm | 12-05-2006 | 13:36:32 | | 20633 | 20767160 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\NewService_Impl.pas | 12-05-2006 | 13:36:32 | | 5763 | db560853 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\RODLFILE.res | 04-19-2006 | 05:54:26 | | 7130 | 85aba0c9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData.bpg | 05-29-2007 | 13:55:44 | | 863 | 110a5434 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData.bdsgroup | 05-29-2007 | 13:55:44 | | 741 | 11b96f3e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData.groupproj | 05-29-2007 | 13:55:44 | | 1554 | 18c7b34f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData.Sample.html | 06-21-2006 | 11:39:12 | | 918 | b2436b9b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Client.dpr | 05-29-2007 | 13:55:42 | | 545 | 4dbae178 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Client.bdsproj | 05-29-2007 | 13:55:42 | | 8392 | 33f3101f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Client.dproj | 05-29-2007 | 13:55:42 | | 3578 | d00896aa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_Client.res | 05-29-2007 | 13:55:42 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ClientData.dfm | 05-30-2006 | 14:15:16 | | 5880 | 6505d246 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ClientData.pas | 05-30-2006 | 14:15:16 | | 978 | 67bd9575 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ClientMain.dfm | 05-18-2006 | 21:06:50 | | 2667 | a947f123 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Memory Data\MemoryData_ClientMain.pas | 05-18-2006 | 21:06:50 | | 1342 | 51b0d213 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailService_Impl.dfm | 06-23-2006 | 11:12:12 | | 12116 | 98cac14a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient.dpr | 05-29-2007 | 13:55:34 | | 629 | 55b21925 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient.bdsproj | 05-29-2007 | 13:55:34 | | 8397 | ba430ed0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient.dproj | 05-29-2007 | 13:55:34 | | 3622 | 13ef4fbd -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer.dpr | 05-29-2007 | 13:55:34 | | 1199 | 65f49506 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer.bdsproj | 05-29-2007 | 13:55:34 | | 8397 | a041f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer.dproj | 05-29-2007 | 13:55:34 | | 3880 | 26e56fee -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetail.Sample.html | 06-23-2006 | 10:35:30 | | 575 | ed7298f6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailLibrary.RODL | 06-23-2006 | 09:29:38 | | 626 | 541402b2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetail.bpg | 05-29-2007 | 13:55:36 | | 893 | 845cf42f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetail.bdsgroup | 05-29-2007 | 13:55:36 | | 771 | 7b5fdd2e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetail.groupproj | 05-29-2007 | 13:55:36 | | 1644 | e420a7aa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient_Data.pas | 06-23-2006 | 10:24:12 | | 1033 | 5134eff -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient_Main.pas | 06-23-2006 | 11:12:56 | | 1162 | 91ab0a1d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailLibrary_Intf.pas | 06-23-2006 | 10:14:58 | | 2288 | 855d5d31 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailLibrary_Invk.pas | 06-23-2006 | 10:14:58 | | 1035 | 685f1e4d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer_Data.pas | 06-23-2006 | 10:21:10 | | 1038 | a5b004eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer_Main.pas | 06-23-2006 | 10:21:54 | | 541 | c9a90de4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailService_Impl.pas | 06-23-2006 | 11:12:12 | | 1071 | 7eddfd33 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient.res | 05-29-2007 | 13:55:34 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer.res | 05-29-2007 | 13:55:34 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\RODLFILE.res | 06-23-2006 | 10:14:58 | | 7693 | aec6c697 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient_Data.dfm | 06-23-2006 | 10:24:12 | | 9633 | ea5b79ba -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailClient_Main.dfm | 06-23-2006 | 11:12:56 | | 2457 | ea3f0ec3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer_Data.dfm | 08-25-2007 | 15:08:52 | | 1461 | c2b9e7d8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Multi Level Detail\MultiLevelDetailServer_Main.dfm | 06-23-2006 | 10:21:54 | | 634 | 3bb0b231 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\NewService_Impl.dfm | 04-17-2006 | 06:34:14 | | 22101 | 92d79cda -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ClientData.dfm | 05-30-2006 | 13:45:46 | | 13374 | e41e6f0b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ClientMain.dfm | 05-19-2006 | 02:26:00 | | 6213 | a93f9887 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ServerData.dfm | 08-25-2007 | 15:08:52 | | 1258 | 1b36acf7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ServerMain.dfm | 04-17-2006 | 06:18:08 | | 614 | feef7147 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_Client.dpr | 05-29-2007 | 13:55:24 | | 567 | 4e4addb0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_Client.bdsproj | 05-29-2007 | 13:55:24 | | 8394 | 17bc2e65 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_Client.dproj | 05-29-2007 | 13:55:24 | | 3594 | f31674cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_server.dpr | 05-29-2007 | 13:55:24 | | 856 | 56e99448 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_server.bdsproj | 05-29-2007 | 13:55:24 | | 8394 | 6f38f4a4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_server.dproj | 05-29-2007 | 13:55:24 | | 3818 | c6c6d743 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4.Sample.html | 04-17-2006 | 07:16:02 | | 1478 | 52176045 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4Library.rodl | 04-17-2006 | 06:36:06 | | 1449 | 3c77e5f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4.bpg | 05-29-2007 | 13:55:28 | | 875 | 24385237 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4.bdsgroup | 05-29-2007 | 13:55:28 | | 753 | 13fa43a3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4.groupproj | 05-29-2007 | 13:55:28 | | 1590 | 822788e4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\NewService_Impl.pas | 04-17-2006 | 06:34:14 | | 2549 | ad7252b4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ClientData.pas | 05-30-2006 | 13:45:46 | | 2241 | d5adafb7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ClientMain.pas | 05-19-2006 | 02:26:00 | | 2633 | f102598a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ServerData.pas | 04-17-2006 | 06:18:24 | | 903 | 818f20e6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_ServerMain.pas | 04-17-2006 | 06:18:08 | | 563 | 54b10a5b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4Library_Intf.pas | 04-17-2006 | 06:37:24 | | 3751 | 23f1d9d9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4Library_Invk.pas | 04-17-2006 | 06:37:24 | | 4227 | 4411e7fa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_Client.res | 05-29-2007 | 13:55:24 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\QuantumGrid4_server.res | 05-29-2007 | 13:55:24 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\QuantumGrid 4\RODLFILE.res | 04-17-2006 | 06:37:24 | | 7864 | b71f43db -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpen.res | 05-29-2007 | 13:55:18 | | 22748 | 8ffae5cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpenMain.dfm | 08-25-2007 | 15:08:52 | | 8568 | 33bca660 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpen.dpr | 05-29-2007 | 13:55:18 | | 278 | f23a2e6c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpen.bdsproj | 05-29-2007 | 13:55:18 | | 8384 | 69371e72 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpen.dproj | 05-29-2007 | 13:55:18 | | 3405 | 96f01caa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpen.Sample.html | 06-28-2006 | 16:06:34 | | 512 | bdf47c17 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Quick Open\QuickOpenMain.pas | 06-30-2006 | 13:08:58 | | 982 | 927cf99f -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressionsMain.dfm | 07-20-2006 | 16:05:52 | | 6447 | 133d7ed2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressions.dpr | 05-29-2007 | 13:55:10 | | 342 | bdfbfeab -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressions.bdsproj | 05-29-2007 | 13:55:10 | | 8393 | ff0de059 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressions.dproj | 05-29-2007 | 13:55:10 | | 3459 | 5bd0247b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressions.Sample.html | 06-28-2006 | 21:52:24 | | 554 | 49fe1f16 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressionsMain.pas | 07-20-2006 | 16:05:52 | | 4782 | f34b0f0d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Regular Expressions\RegularExpressions.res | 05-29-2007 | 13:55:10 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder_ClientMain.dfm | 06-28-2006 | 16:18:18 | | 14250 | 38287906 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder_ServerMain.dfm | 08-25-2007 | 15:08:52 | | 1701 | 9625bb63 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderClient.dpr | 05-29-2007 | 13:54:54 | | 351 | 3f34b16e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderClient.bdsproj | 05-29-2007 | 13:54:54 | | 8394 | c53360eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderClient.dproj | 05-29-2007 | 13:54:54 | | 3466 | 2bb5d29d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderServer.dpr | 05-29-2007 | 13:54:54 | | 678 | 998fd363 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderServer.bdsproj | 05-29-2007 | 13:54:54 | | 8394 | 47ab0bce -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderServer.dproj | 05-29-2007 | 13:54:54 | | 3695 | e4829c3a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder.Sample.html | 06-20-2006 | 10:40:20 | | 886 | 8b86cc2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ClientArchive.raf | 04-17-2006 | 07:43:44 | | 94185 | f4fe7383 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ServerArchive.raf | 04-17-2006 | 07:43:44 | | 94185 | f4fe7383 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderLibrary.rodl | 04-17-2006 | 07:32:46 | | 1181 | 3e1fbc71 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\Report1.rtm | 07-13-2003 | 13:14:00 | | 4451 | 53546618 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder.bpg | 05-29-2007 | 13:54:56 | | 875 | 291bd647 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder.bdsgroup | 05-29-2007 | 13:54:56 | | 753 | 527e7c64 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder.groupproj | 05-29-2007 | 13:54:56 | | 1590 | ca22b7bb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\DARBService_Impl.pas | 04-17-2006 | 07:43:22 | | 3382 | 79d5f8e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder_ClientMain.pas | 06-28-2006 | 16:18:18 | | 2617 | 6aedd9ce -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilder_ServerMain.pas | 04-17-2006 | 07:40:44 | | 1068 | af0776c0 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderLibrary_Intf.pas | 04-17-2006 | 07:43:30 | | 2847 | 33555db7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderLibrary_Invk.pas | 04-17-2006 | 07:43:30 | | 2264 | bcdf172b -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderClient.res | 05-29-2007 | 13:54:54 | | 22748 | f3e8a260 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\ReportBuilderServer.res | 05-29-2007 | 13:54:54 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\RODLFILE.res | 04-17-2006 | 07:43:30 | | 7469 | e6ff9c1e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Report Builder\DARBService_Impl.dfm | 04-17-2006 | 07:43:22 | | 13988 | f9ef50db -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_ClientMain.dfm | 08-25-2007 | 15:08:52 | | 19210 | 723d5603 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_ServerMain.dfm | 08-25-2007 | 15:08:52 | | 9497 | 7bb30a57 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Service_Impl.dfm | 06-28-2006 | 16:26:08 | | 16975 | b3e93104 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Client.dpr | 05-29-2007 | 13:54:44 | | 313 | a4e58b62 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Client.bdsproj | 05-29-2007 | 13:54:44 | | 8396 | 6f9982ca -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Client.dproj | 05-29-2007 | 13:54:44 | | 3477 | cc17d5c6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Server.dpr | 05-29-2007 | 13:54:44 | | 674 | 56436116 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Server.bdsproj | 05-29-2007 | 13:54:44 | | 8395 | 9f742b85 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Server.dproj | 05-29-2007 | 13:54:44 | | 3728 | 38df963e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods.Sample.html | 06-08-2006 | 12:27:06 | | 939 | 9da2756c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethodsLibrary.rodl | 06-05-2006 | 22:09:52 | | 670 | f602916f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods.bpg | 05-29-2007 | 13:54:46 | | 887 | 62dcc103 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods.bdsgroup | 05-29-2007 | 13:54:46 | | 765 | a8908c0a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods.groupproj | 05-29-2007 | 13:54:46 | | 1626 | 469679c2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_ClientMain.pas | 11-14-2006 | 12:20:22 | | 21741 | 9c3f75c7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_ServerMain.pas | 06-05-2006 | 22:06:30 | | 5540 | 84cbaceb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Service_Impl.pas | 06-28-2006 | 16:26:08 | | 18240 | 39b8738d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethodsLibrary_Intf.pas | 06-05-2006 | 22:06:38 | | 2267 | 37626eaa -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethodsLibrary_Invk.pas | 06-05-2006 | 22:06:38 | | 1030 | b00a907d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\RODLFILE.res | 06-05-2006 | 22:06:38 | | 7690 | c7d55ce4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Client.res | 05-29-2007 | 13:54:44 | | 22748 | 8ffae5cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Service Methods\ServiceMethods_Server.res | 05-29-2007 | 13:54:44 | | 23380 | 66a71fb0 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccessMain.dfm | 06-28-2006 | 16:40:26 | | 15935 | 61f97b79 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccess.dpr | 05-29-2007 | 13:54:30 | | 279 | caafb988 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccess.bdsproj | 05-29-2007 | 13:54:30 | | 8384 | a4e55cc8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccess.dproj | 05-29-2007 | 13:54:30 | | 3405 | 8325ce0d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccess.Sample.html | 06-28-2006 | 11:54:18 | | 1260 | 3d2274b9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccessMain.pas | 06-28-2006 | 16:40:26 | | 5500 | 3da6f9e6 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\SQL Access\SQLAccess.res | 05-29-2007 | 13:54:30 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProceduresMain.dfm | 10-25-2006 | 10:15:48 | | 4684 | 25d2a0a5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProcedures.dpr | 05-29-2007 | 13:54:08 | | 283 | b5c6a7ed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProcedures.bdsproj | 05-29-2007 | 13:54:08 | | 8391 | 82a9db5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProcedures.dproj | 05-29-2007 | 13:54:08 | | 3447 | ec40d3d3 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProcedures.Sample.html | 06-29-2006 | 09:35:28 | | 878 | 22e46581 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProceduresMain.pas | 10-25-2006 | 10:15:48 | | 3799 | 3419c1d5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Stored Procedures\StoredProcedures.res | 05-29-2007 | 13:54:08 | | 22748 | 8ffae5cf -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServer.res | 05-29-2007 | 13:53:58 | | 22748 | f90747eb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClientData.dfm | 05-22-2007 | 10:44:06 | | 12945 | ab4d13c7 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClientMain.dfm | 05-22-2007 | 11:29:44 | | 3321 | 98ad9672 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServerMain.dfm | 08-25-2007 | 15:08:52 | | 1684 | fa52a4b2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedService_Impl.dfm | 05-23-2007 | 09:14:02 | | 33755 | de155b53 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClient.dpr | 05-29-2007 | 13:53:58 | | 743 | 148c38c1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClient.bdsproj | 05-29-2007 | 13:53:58 | | 8394 | dccdf7a2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClient.dproj | 05-29-2007 | 13:53:58 | | 3770 | 3436d18 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServer.dpr | 05-29-2007 | 13:53:58 | | 827 | bce9b6df -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServer.bdsproj | 05-29-2007 | 13:53:58 | | 8394 | 8212a9ac -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServer.dproj | 05-29-2007 | 13:53:58 | | 3887 | 2653e0ff -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTyped.Sample.html | 06-20-2006 | 10:26:52 | | 2776 | 58569e33 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedLibrary.RODL | 03-19-2006 | 21:02:20 | | 1396 | b7311c89 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTyped.bpg | 05-29-2007 | 13:54:00 | | 875 | c7273cc8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTyped.bdsgroup | 05-29-2007 | 13:54:00 | | 753 | d3d0d927 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTyped.groupproj | 05-29-2007 | 13:54:00 | | 1590 | 52f38ceb -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\SampleSchemaClient_Intf.pas | 05-22-2007 | 12:45:40 | | 38135 | 2cff822f -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\SampleSchemaServer_Intf.pas | 05-22-2007 | 12:03:22 | | 48140 | cf855f37 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClientData.pas | 05-22-2007 | 10:44:06 | | 943 | 720a121e -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClientMain.pas | 05-22-2007 | 11:29:44 | | 4209 | d3e50e8a -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedLibrary_Intf.pas | 05-22-2007 | 14:05:24 | | 3681 | 1316c686 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedLibrary_Invk.pas | 05-22-2007 | 14:05:24 | | 3191 | 37093e99 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedServerMain.pas | 04-12-2006 | 05:13:54 | | 986 | c024288c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedService_Impl.pas | 05-23-2007 | 09:14:02 | | 2718 | 31dc10d2 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\uBizCustomersClient.pas | 03-19-2006 | 21:08:02 | | 6816 | a89f194c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\uBizCustomersServer.pas | 07-26-2006 | 13:25:02 | | 2205 | c7ac42a5 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\RODLFILE.res | 05-22-2007 | 14:05:24 | | 11123 | 4f38b0c8 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\Strongly Typed\StronglyTypedClient.res | 05-29-2007 | 13:53:58 | | 22748 | f3e8a260 -Made Dir: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\CustomersToHTML.xsl | 04-21-2006 | 08:18:48 | | 1352 | 5a1bff3d -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\CustomersToSimpleXML.xsl | 04-21-2006 | 08:18:32 | | 999 | 43daa672 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLTMain.pas | 05-28-2007 | 16:25:28 | | 6837 | c59af7f1 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLT.res | 05-29-2007 | 13:53:52 | | 22748 | 8ffae5cf -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLTMain.dfm | 05-28-2007 | 16:25:28 | | 32515 | d5a6b725 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLT.dpr | 05-29-2007 | 13:53:52 | | 250 | df4e9e08 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLT.bdsproj | 05-29-2007 | 13:53:52 | | 8379 | b94fcdd9 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLT.dproj | 05-29-2007 | 13:53:52 | | 3375 | 2808a503 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\CustomersHTML.html | 04-24-2006 | 14:30:00 | | 17160 | 6d71d395 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\XSLT.Sample.html | 07-03-2006 | 10:38:44 | | 612 | a14f753c -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples\XSLT\DALogo.png | 09-08-2004 | 03:40:42 | | 3360 | 6eb28ef4 -File Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Help\RegisterDelphiHelp.exe | 06-05-2003 | 12:24:14 | | 97280 | bd823b42 -RegDB Key: Software\RemObjects\Data Abstract for Delphi -RegDB Val: 1 -RegDB Name: Installed -RegDB Root: 1 -RegDB Key: Software\RemObjects\Data Abstract for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi -RegDB Name: InstallDir -RegDB Root: 1 -RegDB Key: Software\RemObjects\Data Abstract for Delphi -RegDB Val: 5.0.23.613 -RegDB Name: Version -RegDB Root: 1 -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects Data Abstract\Schema Modeler.lnk -Link Info: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASchemaModeler.exe | | | 0 | 1 | 0 | -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects Data Abstract\DAServer.lnk -Link Info: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DAServer.exe | | | 0 | 1 | 0 | -Made Dir: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\Data Abstract -File Copy: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\Data Abstract\Welcome.png | 05-17-2007 | 13:15:06 | | 32526 | 474c45f1 -RegDB Key: Software\RemObjects\Everwood\Welcome -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract -RegDB Val: 5.0.23.613 -RegDB Name: Installed Version -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract -RegDB Val: 2 -RegDB Name: Order -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\Data Abstract\Welcome.png -RegDB Name: Image -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract\Samples for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples -RegDB Name: Folder -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract\Samples for Delphi -RegDB Val: Flat -RegDB Name: Structure -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi -RegDB Val: 5.0.23.613 -RegDB Name: Installed Version -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi -RegDB Val: 2 -RegDB Name: Order -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Everwood\Welcome\Data Abstract\Welcome.png -RegDB Name: Image -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi\Samples for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Samples -RegDB Name: Folder -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi\Samples for Delphi -RegDB Val: Flat -RegDB Name: Structure -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract -RegDB Val: http://devcenter.remobjects.com/da -RegDB Name: DevCenter URL -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Products\Data Abstract for Delphi -RegDB Val: http://devcenter.remobjects.com/da -RegDB Name: DevCenter URL -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\ToolForm\Mapping -RegDB Val: -RegDB Name: RemObjects Data Abstract -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\ToolForm\Mapping -RegDB Val: -RegDB Name: Data Abstract -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - Core Package -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Core_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - IDE Package -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IDE_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - ADO Driver -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_ADODriver_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - IBX Driver -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_IBXDriver_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - DBX Driver -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_DBXDriver_D10B.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - BDE Driver -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_BDEDriver_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - SQLite Driver -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_SQLiteDriver_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Data Abstract - Scripting Package -RegDB Name: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Dcu\D10\DataAbstract_Scripting_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Environment Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi -RegDB Name: Data Abstract -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Globals -RegDB Val: 1 -RegDB Name: ForceEnvOptionsUpdate -RegDB Root: 1 -RegDB Old: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Show -RegDB Val: -RegDB Root: 1 -RegDB Key: Software\RemObjects\Everwood\Welcome\Show\Delphi 2007 for Win32 -RegDB Val: -RegDB Name: Data Abstract for Delphi -RegDB Root: 1 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\README.html | 04-20-2004 | 16:23:38 | | 1747 | 19f2794a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\ps.png | 04-25-2004 | 16:10:08 | | 16701 | a7a101 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Launch.exe | 02-21-2003 | 13:47:32 | | 14848 | 81197b84 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Changes.txt | 12-19-2005 | 20:07:16 | | 4447 | 7bb0bcbe -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Pascal Script.ico | 04-21-2004 | 22:14:42 | | 22486 | d564aa43 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Bin -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Bin\PSUnitImporter.exe | 08-25-2007 | 15:08:46 | 3.0.23.613 | 1353144 | ca4bfa7 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D6 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D6\PascalScript_Core_D6.bpl | 08-25-2007 | 15:08:34 | 3.0.23.613 | 627712 | aaf4edee -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D6\PascalScript_Core_D6.dcp | 08-25-2007 | 15:08:34 | | 764777 | b92e36ec -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D7\PascalScript_Core_D7.bpl | 08-25-2007 | 15:08:36 | 3.0.23.613 | 635392 | ce7c6439 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D7\PascalScript_Core_D7.dcp | 08-25-2007 | 15:08:36 | | 766330 | 59f04ff5 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_Core_D10.bpl | 08-25-2007 | 15:08:38 | 3.0.23.613 | 632832 | 61ec9a9c -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_Core_D10.dcp | 08-25-2007 | 15:08:38 | | 780981 | cb9f8f14 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D7\PascalScript_RO_D7.bpl | 08-25-2007 | 15:08:36 | 3.0.23.613 | 55808 | 425dce61 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D7\PascalScript_RO_D7.dcp | 08-25-2007 | 15:08:36 | | 43800 | 42a28f03 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_RO_D10.bpl | 08-25-2007 | 15:08:38 | 3.0.23.613 | 50176 | ff931314 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_RO_D10.dcp | 08-25-2007 | 15:08:38 | | 41712 | 6055aa21 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D10.dpk | 10-16-2006 | 17:18:42 | | 2210 | c7553ea5 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D10.res | 08-25-2007 | 15:08:36 | | 624 | b1aa5db -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D10.bdsproj | 08-25-2007 | 15:08:38 | | 8295 | 7ae5e9b8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D10.cfg | 10-16-2006 | 17:18:42 | | 535 | 129a73f7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D7.dpk | 10-16-2006 | 17:18:42 | | 2209 | 70232fa6 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D7.dof | 08-25-2007 | 15:08:36 | | 1919 | 48c77d6d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D7.res | 08-25-2007 | 15:08:34 | | 624 | b1aa5db -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D6.dof | 08-25-2007 | 15:08:34 | | 1851 | c9c208e9 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D6.dpk | 10-16-2006 | 17:18:54 | | 2209 | 96458ad1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D6.res | 08-25-2007 | 15:08:32 | | 624 | b1aa5db -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D5.dof | 08-25-2007 | 15:08:32 | | 1786 | 21061a8c -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D5.dpk | 10-16-2006 | 17:18:58 | | 2209 | 679f6309 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D4.dpk | 10-16-2006 | 17:19:02 | | 2208 | ac617051 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D4.dof | 08-25-2007 | 15:08:32 | | 1786 | c918aa04 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D3.dof | 08-25-2007 | 15:08:32 | | 1804 | 5288eae4 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_D3.dpk | 10-16-2006 | 17:19:06 | | 2209 | 5f5bb6f8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_K3.kof | 04-20-2004 | 16:20:46 | | 1786 | 2be344e0 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_K3.dpk | 04-20-2004 | 16:20:46 | | 2209 | 69dc73d4 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_Glyphs.RES | 08-25-2007 | 15:08:32 | | 18328 | e7641689 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_Core_Reg.pas | 03-19-2007 | 20:28:24 | | 1296 | cbc24b1b -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D10.cfg | 04-26-2006 | 11:03:46 | | 846 | 995e9ae1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D10.dpk | 04-26-2006 | 11:03:46 | | 930 | ab48f3b5 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D10.bdsproj | 08-25-2007 | 15:08:40 | | 8256 | c2a8c2f -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D7.dpk | 02-23-2006 | 14:13:00 | | 834 | 42a10e79 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D7.dof | 08-25-2007 | 15:08:36 | | 1940 | ebaab597 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D7.res | 08-25-2007 | 15:08:36 | | 624 | b1aa5db -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D6.dpk | 02-23-2006 | 14:13:18 | | 834 | 21e8b115 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D6.dof | 08-25-2007 | 15:08:32 | | 1804 | 252473d1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_D6.res | 02-23-2006 | 14:13:18 | | 616 | 9bbf6df1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_Glyphs.RES | 08-25-2007 | 15:08:32 | | 1876 | 88704ce0 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript_RO_Reg.pas | 04-17-2006 | 15:56:16 | | 745 | 7e39e914 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\PascalScript.inc | 01-05-2006 | 18:02:32 | | 1732 | 155d434c -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\eDefines.inc | 02-20-2007 | 13:50:50 | | 14033 | 45fcae7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\BuildPackages_D6.bpg | 04-25-2004 | 15:47:52 | | 875 | 17e01450 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\BuildPackages_D7.bpg | 04-25-2004 | 14:16:46 | | 875 | dc57cb7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\BuildPackages_D10.bdsgroup | 12-19-2005 | 16:57:16 | | 856 | 1e8535b2 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSDebugger.pas | 07-27-2005 | 14:19:56 | | 15796 | 4da4b45f -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSDisassembly.pas | 07-27-2005 | 14:19:54 | | 15818 | 4462d079 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSPreProcessor.pas | 07-27-2005 | 14:19:58 | | 21848 | ff6b02a8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_buttons.pas | 09-17-2004 | 16:47:08 | | 789 | 45ccccdd -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_classes.pas | 07-27-2005 | 14:19:54 | | 14735 | 7bec20bc -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_comobj.pas | 07-27-2005 | 14:19:52 | | 2154 | 6098c2a9 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_controls.pas | 11-10-2005 | 10:44:34 | | 10924 | 5923bb29 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_dateutils.pas | 03-15-2007 | 14:50:58 | | 1863 | 57f190dd -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_DB.pas | 11-10-2005 | 10:44:36 | | 75792 | feebf90d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_dll.pas | 11-10-2005 | 10:44:36 | | 7115 | a938d03 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_extctrls.pas | 11-10-2005 | 10:44:36 | | 3674 | fab516f0 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_forms.pas | 11-10-2005 | 10:44:36 | | 13843 | f2d576c5 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_graphics.pas | 01-16-2006 | 12:11:16 | | 8488 | 8c2b726e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_menus.pas | 11-10-2005 | 10:52:16 | | 17296 | a63d3bb4 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_std.pas | 09-17-2004 | 16:47:08 | | 2710 | 17cc7c4a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSR_stdctrls.pas | 11-10-2005 | 10:44:36 | | 11025 | 43456fc -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSRuntime.pas | 09-21-2006 | 22:54:42 | | 402717 | 9ed28ac4 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSUtils.pas | 03-15-2007 | 13:43:08 | | 35511 | 69d11e41 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_buttons.pas | 10-01-2004 | 19:19:56 | | 2806 | 35ea551 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_classes.pas | 10-01-2004 | 19:20:26 | | 12241 | bc7fbd7a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_comobj.pas | 10-01-2004 | 19:20:52 | | 612 | 38614afb -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_controls.pas | 11-10-2005 | 10:44:34 | | 9771 | 64c9a93f -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_dateutils.pas | 10-01-2004 | 19:22:44 | | 1553 | 6121bee5 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_DB.pas | 10-04-2006 | 10:02:38 | | 36742 | 851fdf6d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_dll.pas | 07-27-2005 | 14:19:54 | | 3621 | c94a1792 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_extctrls.pas | 07-27-2005 | 14:19:50 | | 12642 | b80a3fbd -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_forms.pas | 07-27-2005 | 14:19:58 | | 11886 | cf0f9153 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_graphics.pas | 01-16-2006 | 12:10:56 | | 13222 | eed66126 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_menus.pas | 11-10-2005 | 10:44:34 | | 9930 | 4517c1d1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_std.pas | 10-01-2004 | 19:25:34 | | 2707 | b9b9ec2d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSC_stdctrls.pas | 07-27-2005 | 14:19:56 | | 25016 | cc69c9de -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSCompiler.pas | 03-15-2007 | 13:46:54 | | 435316 | a572bba -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent.pas | 10-04-2006 | 10:01:32 | | 41868 | adec54c1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_COM.pas | 09-17-2004 | 16:47:08 | | 755 | 7d8d0635 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_Controls.pas | 11-03-2005 | 20:30:34 | | 1636 | c15c38a7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_DB.pas | 03-15-2007 | 14:50:18 | | 715 | 3a93c74c -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_Default.pas | 09-21-2006 | 22:54:42 | | 1945 | 64df0be9 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_Forms.pas | 11-10-2005 | 10:44:34 | | 1438 | d778cbb8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uPSComponent_StdCtrls.pas | 11-03-2005 | 20:32:02 | | 1558 | d2e2afb9 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uROPSServerLink.pas | 01-30-2006 | 16:08:54 | | 34753 | 40c7d51d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Source\uROPSImports.pas | 07-27-2005 | 21:06:32 | | 10899 | 67ed1671 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample4.dpr | 07-12-2005 | 11:17:20 | | 3652 | c62d935 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample5.dpr | 07-12-2005 | 11:22:32 | | 3946 | e7c2eb31 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample6.dpr | 07-12-2005 | 11:28:26 | | 4597 | 473765e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample7.dpr | 07-12-2005 | 11:47:22 | | 4854 | fc4ed706 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample8.dpr | 07-12-2005 | 11:52:22 | | 4045 | bd5cb91b -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample1.dpr | 07-12-2005 | 11:08:06 | | 2051 | f2022a40 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample2.dpr | 07-12-2005 | 11:10:44 | | 2745 | e0bc2dda -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Console\sample3.dpr | 07-12-2005 | 11:13:16 | | 2797 | f1bb348c -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide_debugoutput.pas | 05-04-2004 | 10:59:04 | | 580 | 6d77c2b7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide_editor.dfm | 05-04-2004 | 10:59:04 | | 5732 | 212433b7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide_editor.pas | 05-04-2004 | 10:59:04 | | 10086 | deb814f6 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\readme.txt | 05-04-2004 | 10:59:04 | | 62 | c9df037d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide.dpr | 05-04-2004 | 10:59:04 | | 309 | 3133d127 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide.res | 05-04-2004 | 10:59:04 | | 876 | 1671909e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Debug\ide_debugoutput.dfm | 05-04-2004 | 10:59:04 | | 521 | 69396746 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\fDwin.pas | 04-20-2004 | 16:29:56 | | 380 | 2aca94c7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\fMain.pas | 08-02-2005 | 11:42:26 | | 12131 | cb87ae26 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\Import.res | 04-19-2004 | 21:02:16 | | 22748 | 7b82a90a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\fDwin.dfm | 04-20-2004 | 16:29:56 | | 608 | b0dc1522 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\fMain.dfm | 08-02-2005 | 11:42:26 | | 1997 | 2b89a703 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\Import.dpr | 04-19-2004 | 21:02:16 | | 310 | fbd0d2b2 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\importtest.rops | 04-19-2004 | 15:04:28 | | 188 | 8ad17bd8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\longfortest.rops | 04-19-2004 | 15:04:30 | | 132 | f2f55245 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\rectest.rops | 04-19-2004 | 15:04:30 | | 168 | 95f5d1ea -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\stringtest.rops | 04-19-2004 | 15:04:28 | | 81 | e855a712 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t1.rops | 04-25-2004 | 12:51:06 | | 82 | fdd4ff5e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t2.rops | 04-19-2004 | 15:04:28 | | 71 | ac71c911 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t3.rops | 04-19-2004 | 15:04:30 | | 44 | fae7f743 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t4.rops | 04-19-2004 | 15:04:30 | | 92 | a4ea2881 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t5.rops | 04-19-2004 | 15:04:30 | | 120 | 9555109e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t6.rops | 04-19-2004 | 15:04:30 | | 314 | 146387e4 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t7.rops | 04-19-2004 | 15:04:30 | | 76 | 1fdd5565 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t8.rops | 04-19-2004 | 15:04:30 | | 748 | ec525a55 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t9.rops | 04-25-2004 | 12:51:06 | | 236 | 8ce601a5 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t10.rops | 04-19-2004 | 15:04:30 | | 187 | 79538f8a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\t11.rops | 04-25-2004 | 12:51:06 | | 1353 | fda91ca6 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\testdefine.rops | 04-25-2004 | 12:51:06 | | 172 | db084c84 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\testinclude.rops | 04-25-2004 | 12:51:06 | | 214 | b8fe8ebb -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\vartype.rops | 04-25-2004 | 12:51:06 | | 286 | d18add38 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\wordole.rops | 04-19-2004 | 15:04:28 | | 126 | cfeabde8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\arraytest.rops | 04-19-2004 | 15:04:28 | | 313 | 308fcb11 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\booleantest.rops | 04-19-2004 | 15:04:32 | | 303 | 1c2a740e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\bytearray.rops | 04-25-2004 | 12:51:04 | | 319 | 1a6d5b0f -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\casetest.rops | 04-19-2004 | 15:04:30 | | 162 | f882dc71 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\dlltest.rops | 04-19-2004 | 15:04:28 | | 876 | 7464642d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\exittest.rops | 04-19-2004 | 15:04:28 | | 145 | 877c07ad -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\fortest.rops | 04-19-2004 | 15:04:32 | | 117 | 786be752 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\if.rops | 04-19-2004 | 15:04:30 | | 131 | 3bac7a0e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Import\iformtest.rops | 04-19-2004 | 15:04:32 | | 2337 | 8e8ce14d -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\Import.dpr | 04-20-2004 | 19:55:40 | | 270 | 4fa91fdc -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\fDwin.pas | 04-20-2004 | 19:55:40 | | 367 | 679c1d4e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\fMain.pas | 08-02-2005 | 11:47:24 | | 8060 | 78685d4b -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\fDwin.dfm | 04-20-2004 | 19:55:40 | | 666 | 7202d3fa -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\fMain.dfm | 08-02-2005 | 11:47:24 | | 1775 | 22ef8cf0 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\bytearray.rops | 04-19-2004 | 15:04:26 | | 157 | bc32e18 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\casetest.rops | 04-19-2004 | 15:04:26 | | 162 | f882dc71 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\exittest.rops | 04-19-2004 | 15:04:26 | | 145 | 877c07ad -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\fortest.rops | 04-19-2004 | 15:04:26 | | 117 | 786be752 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\if.rops | 04-19-2004 | 15:04:24 | | 131 | 3bac7a0e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\importtest.rops | 04-19-2004 | 15:04:26 | | 188 | 8ad17bd8 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\longfortest.rops | 04-19-2004 | 15:04:26 | | 132 | f2f55245 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\rectest.rops | 04-19-2004 | 15:04:26 | | 168 | 95f5d1ea -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\vartype.rops | 04-20-2004 | 19:55:40 | | 273 | 8fa661e1 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\arraytest.rops | 04-19-2004 | 15:04:26 | | 313 | 6db1db30 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\Kylix\booleantest.rops | 04-19-2004 | 15:04:26 | | 303 | 1c2a740e -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\TestApp -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\TestApp\fMain.dfm | 04-19-2004 | 20:56:32 | | 1232 | 72734836 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\TestApp\fMain.pas | 04-19-2004 | 20:56:32 | | 4048 | d11eb69e -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\TestApp\TestApplication.dpr | 04-19-2004 | 20:56:36 | | 239 | 2688dabc -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\TestApp\TestApplication.res | 04-19-2004 | 20:56:36 | | 22748 | 7b82a90a -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\MegaDemo.RODL | 04-25-2004 | 12:51:08 | | 5125 | 48070b2a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\MegaDemo.rops | 04-25-2004 | 12:51:06 | | 2369 | fce045d7 -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\TestApplication.dpr | 04-25-2004 | 12:51:06 | | 239 | 2688dabc -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\TestApplication.res | 04-25-2004 | 12:51:06 | | 22748 | 7b82a90a -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\fMain.dfm | 04-25-2004 | 16:24:16 | | 1923 | 2def403d -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Samples\RemObjects SDK Client\fMain.pas | 04-25-2004 | 16:24:16 | | 4816 | e4ab80f4 -Made Dir: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Help -File Copy: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Help\RegisterDelphiHelp.exe | 06-05-2003 | 12:24:14 | | 97280 | bd823b42 -RegDB Key: Software\RemObjects\Pascal Script -RegDB Val: 1 -RegDB Name: Installed -RegDB Root: 1 -RegDB Key: Software\RemObjects\Pascal Script -RegDB Val: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi -RegDB Name: InstallDir -RegDB Root: 1 -RegDB Key: Software\RemObjects\Pascal Script -RegDB Val: 5.0.23.613 -RegDB Name: Version -RegDB Root: 1 -Shell Link: C:\Documents and Settings\Usuario\Menú Inicio\Programas\RemObjects Pascal Script\Unit Importer.lnk -Link Info: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Bin\PSUnitImporter.exe | | | 0 | 1 | 0 | -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Pascal Script - Core Package -RegDB Name: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_Core_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Known Packages -RegDB Val: Pascal Script - RO Package -RegDB Name: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi\Dcu\D10\PascalScript_RO_D10.bpl -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Environment Variables -RegDB Val: C:\Archivos de programa\RemObjects Software\Pascal Script for Delphi -RegDB Name: Pascal Script -RegDB Root: 1 -RegDB Key: Software\Borland\BDS\5.0\Globals -RegDB Val: 1 -RegDB Name: ForceEnvOptionsUpdate -RegDB Root: 1 -RegDB Old: 1 -File Delete: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\Launch.exe -Backup Copy: C:\Archivos de programa\RemObjects Software\Data Abstract for Delphi\BACKUP\Launch.exe -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: 5.0.23.613 -RegDB Name: DisplayVersion -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: http://www.remobjects.com?da -RegDB Name: HelpLink -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: RemObjects Software -RegDB Name: Publisher -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: C:\Archivos de programa\RemObjects Software\Data Abstract (Common)\Bin\DASchemaModeler.exe,0 -RegDB Name: DisplayIcon -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Data Abstract 'Vinci' for Delphi -RegDB Val: RemObjects Data Abstract for Delphi -RegDB Name: DisplayName -RegDB Root: 2 -RegDB Old: Data Abstract 'Vinci' for Delphi -User Rights: Admin diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/README.html b/internal/5.0.23.613/1/Data Abstract for Delphi/README.html deleted file mode 100644 index d0fac60..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/README.html +++ /dev/null @@ -1,271 +0,0 @@ - - - -

Welcome to RemObjects Data Abstract™ 'Vinci' for Delphi (5.0.23).

- -

- Thank you for your interest in our products and for choosing Data Abstract for Delphi. -

- -

- Our goal with Data Abstract is to provide you with the best, easiest and most - flexible database and multi-tier framework available for Delphi and other platforms. -

- -

- We will continue to improve Data Abstract (DA for short) over time and these improvements will be available to you as part of your subscription. Please make sure that your subscription - stays active to ensure continued access to the latest release to be sure you have - the most recent fixes and new features. -

- -

- Please check our website - regularly to keep your product up to date with the latest additions. In particular, see the change log for details of recent changes to the product.

- -

- The following README contains a few guidelines that you should follow in order to install and get started with Data Abstract. -

- -
-

TRIAL Version & RemObjects SDK

-

- Data Abstract relies on RemObjects SDK. To use the trial version of Data Abstract, you must have the exact matching version of - RemObjects SDK (either the trial or full version) installed, and not have made any manual modifications to the RemObjects SDK library code. -

- -

TRIAL Version & Third Party Data Access

-

- The trial version currently does not include support for static linking of the third party database - drivers (such as SDAC, ODAC and IBO) provided with Data Abstract. Dynamic driver libraries (.dad files) are provided. -

- -

TRIAL Version Requirements

-

- The following requirements must be met for the trial version: -

-

- Delphi 2007 for Win32

-
    -
  • Update #1 required.
  • -
-

- Note: the DBX driver is not available for the trial version. 

-

Delphi 2006

-
    -
  • - Update Pack 2 required. -
  • -
-

Delphi 7

-
    -
  • - No updates required. -
  • -
-

Delphi 6

-
    -
  • Update Pack 2
  • -
  • RTL Update Pack 2
  • -
  • RTL Update Pack 3
  • -
-

- Please note that these requirements are for the TRIAL version only. Since the retail version comes with full source, - you can easily rebuild it to match whatever exact version of Delphi you have installed, by opening the - BuildPackages_Dx.bpg project group and doing a Build All Projects. -

-
- -

Package Installation

- -

The current Data Abstract comes separated into several individual packages; these packages are provided -in versions for Delphi 6, 7, 2006 and 2007 for Win32.

- -

These packages are:

-
    -
  • DataAbstract_Core_Dx.bpl
  • -
  • DataAbstract_IDE_Dx.bpl
  • -
-

- As well as several Data Abstract driver packages for ADO, dbExpress, InterBase Express. -

-

- Installation in Delphi 6, Delphi 7, Delphi 2006 and Delphi 2007 for Win32

-

- The RO setup will install prebuilt versions of the packages in the Delphi 6, 7, - 2006 and 2007 IDEs.  -

-

- If you have a custom version of IBX (such as the version 6.5/7.5 that comes with InterBase 7) downloaded and installed to - replace the default IBX, loading of this package will most likely fail when you launch Delphi for the first time after installing RO. - If this is happens, you will need to manually rebuild the IBX driver package to match your specific IBX version, by opening - the DataAbstract_IBXDriver_D6.dpk, DataAbstract_IBXDriver_D7.dpk or DataAbstract_IBXDriver_D9.bdsproj in the IDE and then building and installing it. -

- -

Free Pascal (FPC)

-

- The current release of Data Abstract 'Vinci' for Delphi provides library support for Free Pascal 2.1.4 and above, allowing you to rebuild your - projects for the Win32 (x86), Win64 (x64), Linux (x86 and x64) platforms. Compilation against other platforms provided by FPC might be possible, - but is not currently supported; however, we are interested in your feedback if you do try to build against other platforms. -

-

- Official support for other platforms, as well as support for the Lazarus IDE, is under review for future releases. -

-

- The minimum version of FPC required is Free Pascal 2.1.4 or newer (which can be downloaded here). Please note that we explicitly do not support the 2.0.x release, as it is missing crucial functionality. -

-

- More information about Free Pascal can be found on the FPC homepage at http://www.freepascal.org; - please also read http://www.remobjects.com?fpc for more details. -

-

Limitations of Free Pascal Support

-

- At the time of this release, only the new ZEOS database driver is supported for Free Pascal, as the underlying components for all the other drivers - are not supported for Free Pascal by Borland/CodeGear or the third party vendors. Please contact the third party component vendors directly to - inquire about support for FPC in future versions of their components. -

- -
-

License File

-

- To avoid piracy and abuse, the Data Abstract Install contains a time-limited license for Schema Modeler and Service Builder, which will - expire after 30 days of use. -

-

- You will be prompted to download your personal license file when you start Schema Modeler or Service Builder for the first time; you can choose to either download your own license file right away, - or keep working with the trial license until such a time when the download is more convenient for you. - Alternatively, it's possible to download it directly from - http://www.remobjects.com/myro. -

-
- -

- Note for users migrating from version 3 or below

-

- Later versions of Data Abstract for Delphi provide two modes for server applications. For backward compatibility, it provides the server interface you already know from version 3.0, thus allowing you to rebuild your existing server applications with only minimal changes. In addition though, a new service interface is provided matching the .NET edition that streamlines data access further, thus simplifying development of cross platform client/server solutions. - See the DA26 article for full details, including the steps needed to upgrade version 3 applications directly to 'Vinci' (version 5). -

-

- To aid your conversion, we ship a tool to create Remote Data Adapters from your - existing code (also described by DA26). You can find the DAConverter - tool at: C:\Program Files\RemObjects Software\Data Abstract (Common)\Bin.

-

- Note for users migrating from version 4

-

- Data Abstract 'Vinci' employs the version 4 architecture, so there are no actual - upgrade requirements. However, you may well wish to upgrade your applications to - use the new TDAMemDataTable and TDABin2DataStreamer - components. The DAConverter tool described above (see DA26 also) - has been extended to do this as well (and will accept version 3 and version 4 project - files).

- -

Sample Projects

-

- A number of sample projects are included in the \Samples folder of your Data Abstract install. These sample projects - will show you how to get started and how to use the various functions of Data Abstract. -
- A detailed overview of the available samples can be found in the - Samples.html file provided.  -

-

- For BDS2006 and later, after the first start of the Visual Studio IDE, the Welcome - Page for Data Abstract will be presented, giving you the option to directly open - any of the samples provided. -

- -

Support

-

- Support for Data Abstract is available via our newsgroups at - remobjects.public.dataabstract.delphi.

-

- You can use these newsgroups to report any problems or suggestions you might have in regards to Data Abstract, you can communicate with fellow Data Abstract users and exchange ideas and solutions. -

-

- Please also make sure to check out our extensive Online Help to get started with Data Abstract; the online help is available integrated into the Delphi Help and also as a standalone .HLP help file. -

-

- More information about our support offerings, including the Premium Support subscription, - can be found at http://www.remobjects.com/support.

-
-

- Known Issues in this Release -

-

- While we try our best to get all known issues fixed and addressed for each build, - sometimes less - important issues need to be deferred for later releases in favor - for getting a version released. Please check our list of known issues for - any known problems with the current release 

-
- - - -

Where to go from here

-

- To get started using Data Abstract, please visit our new Developer Center available - at - http://www.remobjects.com/devcenter/da. -

-

-DevCenter provides hands-on developer resources such as articles (see article roadmap: - DA00), - videos and FAQs - about all our products, including Data Abstract, and is the central - hub for all developer-oriented information about our products. -

- -

Thank You

-

- Let us thank you again for choosing Data Abstract. We are confident that you - will find it to be a worthwhile addition to your development toolset. -

-

- Should you, at any time, encounter a problem or need assistance using Data Abstract, please feel free to ask on the newsgroups - or contact us directly via email at support@remobjects.com. -

- -
- -

Best Regards, -
-The RemObjects Team -
-http://www.remobjects.com

\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.Sample.html deleted file mode 100644 index 3698485..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.Sample.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - -

- Briefcase model sample -

- - -

Purpose

-

- This example shows how to create a briefcase model using a Data Abstract Client. -

-

Getting Started

- -
    -
  • Launch the Server.
  • -
  • Launch the Client.
  • -
  • The first time the server runs it will ask to fetch the data, else it will load it from disk.
  • -
  • Make some changes to the records.
  • Close the client.
  • -
  • Re-open the client and the changes will still be there.
  • -
  • Pressing Apply Updates will send the changes back to the server.
  • -
- - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bdsgroup deleted file mode 100644 index 1bf8297..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - BriefcaseModelServer.bdsproj - BriefcaseModelClient.bdsproj - BriefcaseModelServer.exe BriefcaseModelClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bpg deleted file mode 100644 index ef89764..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = BriefcaseModelServer.exe BriefcaseModelClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -BriefcaseModelServer.exe: BriefcaseModelServer.dpr - $(DCC) - -BriefcaseModelClient.exe: BriefcaseModelClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.groupproj deleted file mode 100644 index 25568d5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModel.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {8aedcb5a-78e5-4e85-8261-093aa6a47a12} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.bdsproj deleted file mode 100644 index e3d7939..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BriefcaseModelClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dpr deleted file mode 100644 index 71bcbd6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dpr +++ /dev/null @@ -1,19 +0,0 @@ -program BriefcaseModelClient; - -uses - uROComInit, - Forms, - MidasLib, - BriefcaseModelClientMain in 'BriefcaseModelClientMain.pas' {BriefcaseModelClientMainForm}, - BriefcaseModelClientData in 'BriefcaseModelClientData.pas' {BriefcaseModelClientDataModule: TDAClientDataModule}, - BriefcaseModelClientChanges in 'BriefcaseModelClientChanges.pas' {BriefcaseModelClientChangesForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Briefcase Model Client'; - Application.CreateForm(TBriefcaseModelClientDataModule, BriefcaseModelClientDataModule); - Application.CreateForm(TBriefcaseModelClientMainForm, BriefcaseModelClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dproj deleted file mode 100644 index 0d29ec6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.dproj +++ /dev/null @@ -1,78 +0,0 @@ - - - {bbc1c7e0-ae64-480d-a016-c817f7590577} - BriefcaseModelClient.dpr - Debug - AnyCPU - DCC32 - BriefcaseModelClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BriefcaseModelClient.dpr - - - - - - - MainSource - - -
BriefcaseModelClientChangesForm
-
- -
BriefcaseModelClientDataModule
-
- -
BriefcaseModelClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.dfm deleted file mode 100644 index 33a5545..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.dfm +++ /dev/null @@ -1,62 +0,0 @@ -object BriefcaseModelClientChangesForm: TBriefcaseModelClientChangesForm - Left = 108 - Top = 133 - AutoScroll = False - Caption = 'Changes' - ClientHeight = 352 - ClientWidth = 405 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 123 - Width = 405 - Height = 8 - Cursor = crVSplit - Align = alBottom - Beveled = True - end - object ListView: TListView - Left = 0 - Top = 131 - Width = 405 - Height = 221 - Align = alBottom - Columns = < - item - Caption = 'Name' - Width = 200 - end - item - Caption = 'Old value' - Width = 100 - end - item - Caption = 'New value' - Width = 100 - end> - OwnerData = True - ReadOnly = True - RowSelect = True - TabOrder = 0 - ViewStyle = vsReport - OnData = ListViewData - end - object ListBox: TListBox - Left = 0 - Top = 0 - Width = 405 - Height = 123 - Align = alClient - ItemHeight = 13 - TabOrder = 1 - OnClick = ListBoxClick - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.pas deleted file mode 100644 index 5218501..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientChanges.pas +++ /dev/null @@ -1,115 +0,0 @@ -unit BriefcaseModelClientChanges; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ExtCtrls, ComCtrls; - -type - TBriefcaseModelClientChangesForm = class(TForm) - ListView: TListView; - Splitter1: TSplitter; - ListBox: TListBox; - procedure ListBoxClick(Sender: TObject); - procedure ListViewData(Sender: TObject; Item: TListItem); - private - { Private declarations } - procedure SetupListview; - procedure Setup; - public - { Public declarations } - - end; - -var - BriefcaseModelClientChangesForm: TBriefcaseModelClientChangesForm; - -procedure ShowChanges; -implementation -uses - uDADelta, BriefcaseModelClientData, uDAInterfaces; - -{$R *.dfm} - -procedure ShowChanges; -begin - with TBriefcaseModelClientChangesForm.Create(Application) do try - Setup; - if ListBox.Count = 0 then Exit; - ShowModal; - finally - Release; - end; -end; - -procedure TBriefcaseModelClientChangesForm.ListBoxClick(Sender: TObject); -begin - SetupListView; -end; - -procedure TBriefcaseModelClientChangesForm.SetupListview; -begin - ListView.Items.Count := 0; - if ListBox.ItemIndex = -1 then Exit; - ListView.Items.Count := TDADeltaChange(Listbox.Items.Objects[ListBox.ItemIndex]).Delta.LoggedFieldCount; -end; - -procedure TBriefcaseModelClientChangesForm.ListViewData(Sender: TObject; - Item: TListItem); -var - DeltaChange: TDADeltaChange; -begin - if (Item = nil) or (Item.Index >= ListView.Items.Count) then Exit; - DeltaChange := TDADeltaChange(Listbox.Items.Objects[ListBox.ItemIndex]); - Item.Caption := DeltaChange.Delta.LoggedFieldNames[Item.Index]; - if DeltaChange.ChangeType <> ctInsert then - Item.SubItems.Add(VarToStr(DeltaChange.OldValueByName[Item.Caption])) - else - Item.SubItems.Add(''); - if DeltaChange.ChangeType <> ctDelete then - Item.SubItems.Add(VarToStr(DeltaChange.NewValueByName[Item.Caption])) - else - Item.SubItems.Add(''); -end; - -procedure TBriefcaseModelClientChangesForm.Setup; - - procedure AddDelta(Delta: IDADelta); - var - str: string; - i, j: integer; - begin - for i := 0 to Delta.Count - 1 do - with Delta.Changes[i] do begin - case ChangeType of - ctInsert: str := '[New]'; - ctUpdate: str := '[Update]'; - ctDelete: str := '[Delete]'; - end; - str := str + ' ' + Delta.LogicalName + ': '; - for j := 0 to delta.KeyFieldCount - 1 do begin - if ChangeType = ctDelete then - str := str + VarToStr(OldValueByName[delta.KeyFieldNames[j]]) + ',' - else - str := str + VarToStr(NewValueByName[delta.KeyFieldNames[j]]) + ',' - end; - if delta.KeyFieldCount > 0 then SetLength(Str, Length(str) - 1); - ListBox.Items.AddObject(str, Delta.Changes[i]); - end; - end; - -begin - ListBox.Items.Clear; - with BriefcaseModelClientDataModule do begin - if tbl_Customers.DeltaInitialized then AddDelta(tbl_Customers.Delta); - if tbl_Orders.DeltaInitialized then AddDelta(tbl_Orders.Delta); - end; - if ListBox.Count > 0 then begin - ListBox.ItemIndex := 0; - ListBoxClick(ListBox); - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.dfm deleted file mode 100644 index fee315d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.dfm +++ /dev/null @@ -1,383 +0,0 @@ -object BriefcaseModelClientDataModule: TBriefcaseModelClientDataModule - OldCreateOrder = True - Left = 126 - Top = 134 - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'BriefcaseModelService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 40 - Top = 184 - end - object tbl_Customers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - LocalDataStreamer = DataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 184 - Top = 144 - end - object ds_Customers: TDADataSource - DataSet = tbl_Customers.Dataset - DataTable = tbl_Customers - Left = 136 - Top = 144 - end - object tbl_Orders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DefaultValue = '0' - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - LocalDataStreamer = DataStreamer - MasterSource = ds_Customers - MasterFields = 'CustomerID' - DetailFields = 'CustomerID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Orders' - IndexDefs = <> - Left = 184 - Top = 192 - end - object ds_Orders: TDADataSource - DataSet = tbl_Orders.Dataset - DataTable = tbl_Orders - Left = 136 - Top = 192 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.pas deleted file mode 100644 index e206cde..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientData.pas +++ /dev/null @@ -1,36 +0,0 @@ -unit BriefcaseModelClientData; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter, uDAScriptingProvider, - uDACDSDataTable, uDAClasses; - -type - TBriefcaseModelClientDataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - tbl_Customers: TDACDSDataTable; - ds_Customers: TDADataSource; - tbl_Orders: TDACDSDataTable; - ds_Orders: TDADataSource; - private - { Private declarations } - public - { Public declarations } - end; - -var - BriefcaseModelClientDataModule: TBriefcaseModelClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.dfm deleted file mode 100644 index 98a5a1d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.dfm +++ /dev/null @@ -1,135 +0,0 @@ -object BriefcaseModelClientMainForm: TBriefcaseModelClientMainForm - Left = 85 - Top = 124 - AutoScroll = False - Caption = 'Briefcase Model Client' - ClientHeight = 398 - ClientWidth = 567 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnClose = FormClose - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 215 - Width = 567 - Height = 5 - Cursor = crVSplit - Align = alBottom - Beveled = True - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 567 - Height = 34 - Align = alTop - TabOrder = 0 - object OpenButton: TButton - Left = 10 - Top = 7 - Width = 90 - Height = 22 - Caption = 'Fetch Data' - TabOrder = 0 - OnClick = OpenButtonClick - end - object ApplyUpdateButton: TButton - Left = 101 - Top = 7 - Width = 90 - Height = 22 - Action = ApplyUpdateAction - TabOrder = 1 - end - object DiscardChangesButton: TButton - Left = 192 - Top = 7 - Width = 90 - Height = 22 - Action = DiscardChangesAction - TabOrder = 2 - end - object ShowChangesButton: TButton - Left = 283 - Top = 7 - Width = 90 - Height = 22 - Action = ShowChangesAction - TabOrder = 3 - end - end - object gCustomers: TDBGrid - Left = 0 - Top = 59 - Width = 567 - Height = 156 - Align = alClient - DataSource = BriefcaseModelClientDataModule.ds_Customers - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gOrders: TDBGrid - Left = 0 - Top = 220 - Width = 567 - Height = 153 - Align = alBottom - DataSource = BriefcaseModelClientDataModule.ds_Orders - TabOrder = 2 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object dbnCustomers: TDBNavigator - Left = 0 - Top = 34 - Width = 567 - Height = 25 - DataSource = BriefcaseModelClientDataModule.ds_Customers - Align = alTop - TabOrder = 3 - end - object dbnOrders: TDBNavigator - Left = 0 - Top = 373 - Width = 567 - Height = 25 - DataSource = BriefcaseModelClientDataModule.ds_Orders - Align = alBottom - TabOrder = 4 - end - object ActionList1: TActionList - Left = 337 - Top = 87 - object ApplyUpdateAction: TAction - Caption = 'Apply update' - OnExecute = ApplyUpdateButtonClick - OnUpdate = ApplyUpdateActionUpdate - end - object DiscardChangesAction: TAction - Caption = 'Discard changes' - OnExecute = DiscardChangesButtonClick - OnUpdate = ApplyUpdateActionUpdate - end - object ShowChangesAction: TAction - Caption = 'Show changes' - OnExecute = ShowChangesButtonClick - OnUpdate = ApplyUpdateActionUpdate - end - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.pas deleted file mode 100644 index 6b421d5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelClientMain.pas +++ /dev/null @@ -1,140 +0,0 @@ -unit BriefcaseModelClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, - DBCtrls, Grids, DBGrids, ActnList; - -type - TBriefcaseModelClientMainForm = class(TForm) - Panel1: TPanel; - gCustomers: TDBGrid; - gOrders: TDBGrid; - dbnCustomers: TDBNavigator; - dbnOrders: TDBNavigator; - Splitter1: TSplitter; - OpenButton: TButton; - ApplyUpdateButton: TButton; - DiscardChangesButton: TButton; - ShowChangesButton: TButton; - ActionList1: TActionList; - ApplyUpdateAction: TAction; - DiscardChangesAction: TAction; - ShowChangesAction: TAction; - procedure ApplyUpdateButtonClick(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure FormCreate(Sender: TObject); - procedure OpenButtonClick(Sender: TObject); - procedure DiscardChangesButtonClick(Sender: TObject); - procedure ShowChangesButtonClick(Sender: TObject); - procedure ApplyUpdateActionUpdate(Sender: TObject); - private - { Private declarations } - procedure Load; - procedure Save; - procedure FetchData; - public - { Public declarations } - end; - -var - BriefcaseModelClientMainForm: TBriefcaseModelClientMainForm; - -implementation - -uses - BriefcaseModelClientData, uDADataTable, BriefcaseModelClientChanges; - -{$R *.dfm} - -procedure TBriefcaseModelClientMainForm.ApplyUpdateButtonClick(Sender: TObject); -begin - BriefcaseModelClientDataModule.RemoteDataAdapter.ApplyUpdates([BriefcaseModelClientDataModule.tbl_Customers]); -end; - -procedure TBriefcaseModelClientMainForm.Load; - - function loadTable(ATable: TDADataTable): Boolean; - var - aFileName: string; - begin - aFileName := ExtractFilePath(Application.ExeName) + ATable.LogicalName + '.table'; - if FileExists(aFileName) then begin - aTable.LoadFromFile(aFileName); - Result := True; - end else - Result := False; - end; - -begin - if not loadTable(BriefcaseModelClientDataModule.tbl_Customers) or not loadTable(BriefcaseModelClientDataModule.tbl_Orders) then begin - if MessageDlg('No data table files could be found, do you want to fetch the data from the server?', mtConfirmation, [mbYes, mbNo], 0) = idYes then begin - FetchData; - end; - end; -end; - -procedure TBriefcaseModelClientMainForm.Save; - - procedure SaveTable(ATable: TDADataTable); - begin - with ATable do - if active then - SaveToFile(ExtractFilePath(Application.ExeName) + LogicalName + '.table'); - end; - -begin - with BriefcaseModelClientDataModule do begin - SaveTable(tbl_Customers); - SaveTable(tbl_Orders); - end; -end; - -procedure TBriefcaseModelClientMainForm.FormClose(Sender: TObject; var Action: TCloseAction); -begin - Save; -end; - -procedure TBriefcaseModelClientMainForm.FormCreate(Sender: TObject); -begin - Load; -end; - -procedure TBriefcaseModelClientMainForm.OpenButtonClick(Sender: TObject); -begin - FetchData; -end; - -procedure TBriefcaseModelClientMainForm.FetchData; -begin - BriefcaseModelClientDataModule.tbl_Orders.close; - BriefcaseModelClientDataModule.tbl_Customers.close; - BriefcaseModelClientDataModule.RemoteDataAdapter.Fill([BriefcaseModelClientDataModule.tbl_Customers, - BriefcaseModelClientDataModule.tbl_Orders], true, false); -end; - -procedure TBriefcaseModelClientMainForm.DiscardChangesButtonClick(Sender: TObject); -begin - with BriefcaseModelClientDataModule do begin - tbl_Customers.CancelUpdates; - end; -end; - -procedure TBriefcaseModelClientMainForm.ShowChangesButtonClick(Sender: TObject); -begin - ShowChanges; -end; - -procedure TBriefcaseModelClientMainForm.ApplyUpdateActionUpdate( - Sender: TObject); -begin - with BriefcaseModelClientDataModule do - TAction(Sender).Enabled := - (tbl_Customers.DeltaInitialized) and ((tbl_Customers.Delta.Count > 0)) or - (tbl_Orders.DeltaInitialized) and ((tbl_Orders.Delta.Count > 0)) -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary.rodl deleted file mode 100644 index 4c957b1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary.rodl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Intf.pas deleted file mode 100644 index 48b30f5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Intf.pas +++ /dev/null @@ -1,77 +0,0 @@ -unit BriefcaseModelLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{0C6D69E2-2FEC-49FE-B07B-EE237D69F422}'; - TargetNamespace = ''; - - { Service Interface ID's } - IBriefcaseModelService_IID : TGUID = '{DF3E1E54-2924-4DE3-9834-4B225408D09F}'; - - { Event ID's } - -type - { Forward declarations } - IBriefcaseModelService = interface; - - - - - { IBriefcaseModelService } - IBriefcaseModelService = interface(IDataAbstractService) - ['{DF3E1E54-2924-4DE3-9834-4B225408D09F}'] - end; - - { CoBriefcaseModelService } - CoBriefcaseModelService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBriefcaseModelService; - end; - - { TBriefcaseModelService_Proxy } - TBriefcaseModelService_Proxy = class(TDataAbstractService_Proxy, IBriefcaseModelService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoBriefcaseModelService } - -class function CoBriefcaseModelService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBriefcaseModelService; -begin - result := TBriefcaseModelService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TBriefcaseModelService_Proxy.__GetInterfaceName:string; -begin - result := 'BriefcaseModelService'; -end; - -initialization - RegisterProxyClass(IBriefcaseModelService_IID, TBriefcaseModelService_Proxy); - - -finalization - UnregisterProxyClass(IBriefcaseModelService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Invk.pas deleted file mode 100644 index 34ea4df..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit BriefcaseModelLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} BriefcaseModelLibrary_Intf; - -type - TBriefcaseModelService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.bdsproj deleted file mode 100644 index bf8e10d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BriefcaseModelServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dpr deleted file mode 100644 index 715dd7e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dpr +++ /dev/null @@ -1,24 +0,0 @@ -program BriefcaseModelServer; - -{#ROGEN:BriefcaseModelLibrary.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - BriefcaseModelServerMain in 'BriefcaseModelServerMain.pas' {BriefcaseModelServerMainForm}, - BriefcaseModelServerData in 'BriefcaseModelServerData.pas' {BriefcaseModelServerDataModule: TDataModule}, - BriefcaseModelLibrary_Intf in 'BriefcaseModelLibrary_Intf.pas', - BriefcaseModelLibrary_Invk in 'BriefcaseModelLibrary_Invk.pas', - BriefcaseModelService_Impl in 'BriefcaseModelService_Impl.pas' {BriefcaseModelService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'Briefcase Model Server'; - Application.CreateForm(TBriefcaseModelServerDataModule, BriefcaseModelServerDataModule); - Application.CreateForm(TBriefcaseModelServerMainForm, BriefcaseModelServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dproj deleted file mode 100644 index 7a42c8d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {55d87c1e-5021-4276-a4c8-aef5b2fb31d9} - BriefcaseModelServer.dpr - Debug - AnyCPU - DCC32 - BriefcaseModelServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BriefcaseModelServer.dpr - - - - - - - MainSource - - - - -
BriefcaseModelServerDataModule
-
- -
BriefcaseModelServerMainForm
-
- -
BriefcaseModelService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.dfm deleted file mode 100644 index e6fc791..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.dfm +++ /dev/null @@ -1,60 +0,0 @@ -object BriefcaseModelServerDataModule: TBriefcaseModelServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 226 - Top = 160 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.pas deleted file mode 100644 index dcd422e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerData.pas +++ /dev/null @@ -1,41 +0,0 @@ -unit BriefcaseModelServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAADODriver, uROIndyTCPServer; - -type - TBriefcaseModelServerDataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - SessionManager: TROInMemorySessionManager; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BriefcaseModelServerDataModule: TBriefcaseModelServerDataModule; - -implementation - -{$R *.dfm} - -procedure TBriefcaseModelServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.dfm deleted file mode 100644 index 93afb00..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object BriefcaseModelServerMainForm: TBriefcaseModelServerMainForm - Left = 185 - Top = 138 - BorderStyle = bsDialog - Caption = 'Briefcase Model Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.pas deleted file mode 100644 index 269ea1a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelServerMain.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit BriefcaseModelServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TBriefcaseModelServerMainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - BriefcaseModelServerMainForm: TBriefcaseModelServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.dfm deleted file mode 100644 index 786a369..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.dfm +++ /dev/null @@ -1,500 +0,0 @@ -object BriefcaseModelService: TBriefcaseModelService - OldCreateOrder = True - SessionManager = BriefcaseModelServerDataModule.SessionManager - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Left = 196 - Top = 147 - Height = 164 - Width = 174 - object Schema: TDASchema - ConnectionManager = BriefcaseModelServerDataModule.ConnectionManager - DataDictionary = BriefcaseModelServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - Default = True - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'Northwind' - Default = True - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders'#10#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DefaultValue = '0' - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = < - item - Name = 'FK_Orders_Customers' - MasterDatasetName = 'Customers' - MasterFields = 'CustomerID' - DetailDatasetName = 'Orders' - DetailFields = 'CustomerID' - RelationshipType = rtForeignKey - end> - UpdateRules = <> - Version = 0 - Left = 32 - Top = 56 - end - object DataStreamer: TDABinDataStreamer - BufferSize = 262144 - IsCompatibleV4 = True - Left = 32 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.pas deleted file mode 100644 index 5600ede..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/BriefcaseModelService_Impl.pas +++ /dev/null @@ -1,48 +0,0 @@ -unit BriefcaseModelService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} BriefcaseModelLibrary_Intf, uDADataStreamer, uDABinAdapter, - uDAClasses; - -type - { TBriefcaseModelService } - TBriefcaseModelService = class(TDataAbstractService, IBriefcaseModelService) - DataStreamer: TDABinDataStreamer; - Schema: TDASchema; - private - protected - { IBriefcaseModelService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} BriefcaseModelLibrary_Invk,BriefcaseModelServerData; - -procedure Create_BriefcaseModelService(out anInstance : IUnknown); -begin - anInstance := TBriefcaseModelService.Create(nil); -end; - -{ BriefcaseModelService } -initialization - TROClassFactory.Create('BriefcaseModelService', Create_BriefcaseModelService, TBriefcaseModelService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/RODLFILE.res deleted file mode 100644 index 8e8bd7e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Briefcase/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaClient.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaClient.pas deleted file mode 100644 index 369bec6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaClient.pas +++ /dev/null @@ -1,165 +0,0 @@ -unit BizSchemaClient; - -interface -uses - Classes, - SchemaClient_Intf; - -type - IBizCustomers = interface(ICustomers) - ['{63BAECDD-6091-4A86-BA58-E6FFD5330240}'] - end; - - TBizCustomersDataTableRules = class(TCustomersDataTableRules, IBizCustomers) - end; - - IBizOrders = interface(IOrders) - ['{E43D1B71-EEF0-4805-9F1E-EE032353BD0F}'] - end; - - TBizOrdersDataTableRules = class(TOrdersDataTableRules, IBizOrders) - end; - - TBizErrorMessageItem = class - public - Field: string; - ErrorMessage: string; - end; - - TBizErrorMessage = class - private - FMessage: string; - FList: TList; - function GetItems(Index: integer): TBizErrorMessageItem; - function GetCount: integer; - function GetAsString: string; - procedure SetAsString(const Value: string); - public - constructor Create; - destructor Destroy; override; - function Add(AField: string; AErrorMessage: string): integer; - procedure Clear; - property ItemCount: integer read GetCount; - property Message: string read FMessage write FMessage; - property Items[Index: integer]: TBizErrorMessageItem read GetItems; - property AsString: string read GetAsString write SetAsString; - end; - -implementation - -uses uDADataTable, Variants; - -{ TBizErrorMessage } - -function TBizErrorMessage.Add(AField: string; AErrorMessage: string): integer; -var - Aitem: TBizErrorMessageItem; -begin - Aitem := TBizErrorMessageItem.Create; - Aitem.Field := AField; - Aitem.ErrorMessage := AErrorMessage; - Result := FList.Add(AItem); -end; - -procedure TBizErrorMessage.Clear; -var - i: integer; -begin - for i := 0 to Flist.Count - 1 do - TBizErrorMessageItem(FList[i]).Free; - FList.Clear; -end; - -constructor TBizErrorMessage.Create; -begin - inherited; - FList := TList.Create; -end; - -destructor TBizErrorMessage.Destroy; -begin - Clear; - Flist.Free; - inherited; -end; - -function TBizErrorMessage.GetAsString: string; - - procedure WriteStringToStream(Str: string; Stream: TStringStream); - var - size: integer; - begin - size := Length(Str); - stream.Write(size, Sizeof(integer)); - stream.WriteString(Str); - end; - -var - Stream: TStringStream; - cnt: integer; - i: integer; -begin - Stream := TStringStream.Create(''); - try - Stream.WriteString(Message); - i := 0; - stream.Write(Byte(i), 1); - cnt := GetCount; - stream.Write(cnt, SizeOf(cnt)); - for i := 0 to cnt - 1 do - with Items[i] do begin - WriteStringToStream(Field, Stream); - WriteStringToStream(ErrorMessage, Stream); - end; - Result := Stream.DataString; - finally - Stream.Free; - end; -end; - -function TBizErrorMessage.GetCount: integer; -begin - Result := FList.Count; -end; - -function TBizErrorMessage.GetItems(Index: integer): TBizErrorMessageItem; -begin - Result := TBizErrorMessageItem(FList[Index]); -end; - -procedure TBizErrorMessage.SetAsString(const Value: string); - - function ReadStringToStream(Stream: TStringStream): string; - var - Size: integer; - begin - stream.Read(size, Sizeof(integer)); - Result := stream.ReadString(size); - end; - -var - Stream: TStringStream; - i, cnt: integer; -begin - Clear; - Stream := TStringStream.Create(Value); - try - Message := Pchar(Value); - if Stream.Size < Length(Message) + 1 then exit; - Stream.Seek(Length(Message) + 1, soFromBeginning); - stream.Read(cnt, SizeOf(cnt)); - for i := 0 to cnt - 1 do - with Items[Add('', '')] do begin - Field := ReadStringToStream(Stream); - ErrorMessage := ReadStringToStream(Stream); - end; - finally - Stream.Free; - end; -end; - -initialization - RegisterDataTableRules('Customers.ClientRules', TBizCustomersDataTableRules); - RegisterDataTableRules('Orders.ClientRules', TBizOrdersDataTableRules); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaServer.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaServer.pas deleted file mode 100644 index 708c409..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BizSchemaServer.pas +++ /dev/null @@ -1,128 +0,0 @@ -unit BizSchemaServer; - -interface - -uses Classes, SysUtils, uDADataTable, uDABusinessProcessor, - SchemaServer_Intf, BizSchemaClient, uDADelta, uDAInterfaces; - -type - TBizCustomersServerRules = class(TCustomersBusinessProcessorRules) - protected - // Business events - procedure BeforeProcessChange(Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; var ProcessChange: boolean); override; - procedure ProcessError(Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; - const aCommand: IDASQLCommand; var CanRemoveFromDelta: boolean; Error: Exception); override; - end; - - TBizOrdersServerRules = class(TOrdersBusinessProcessorRules) - protected - // Business events - procedure BeforeProcessChange(Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; var ProcessChange: boolean); override; - procedure ProcessError(Sender: TDABusinessProcessor; aChangeType: TDAChangeType; aChange: TDADeltaChange; - const aCommand: IDASQLCommand; var CanRemoveFromDelta: boolean; Error: Exception); override; - - end; - -implementation -uses - ServerGlobal, dialogs; -{ TBizCustomersServerRules } - -function CheckCustomer(CustID: string): boolean; -var - i: integer; -begin - Result := False; - if Length(CustID) <> 5 then Exit; - for i := 1 to Length(CustID) do - if not (CustID[i] in ['A'..'Z', 'a'..'z']) then Exit; - Result := True; -end; - -procedure TBizCustomersServerRules.BeforeProcessChange(Sender: TDABusinessProcessor; - aChangeType: TDAChangeType; aChange: TDADeltaChange; var ProcessChange: boolean); -begin - inherited; - aChange.Message := ''; - if (aChangeType = ctInsert) then begin - with TBizErrorMessage.Create do try - if gCheckCustomerID and not checkCustomer(CustomerID) then - Add('CustomerID', 'CustomerID needs at least 5 characters'); - if gCompanyCheck and not SameText(CompanyName, gCompany) then - Add('CompanyName', 'Company name should be ' + gCompany); - finally - if ItemCount > 0 then begin - Message := 'Cannot process an insert ' + sLineBreak + - '(Customer = ''' + CustomerID + ''')'; - aChange.Message := asString; - end; - Free; - end; - end; - - if (aChangeType = ctDelete) and gDeclineDeleteCustomers then begin - with TBizErrorMessage.Create do try - Message := 'Deleting of customers is not allowed ' + sLineBreak + - '(Customer = ''' + OldCustomerID + ''')'; - aChange.Message := asString; - finally - Free; - end; - end; - ProcessChange := aChange.Message = ''; - if not ProcessChange then aChange.Status := csFailed; -end; - -procedure TBizCustomersServerRules.ProcessError( - Sender: TDABusinessProcessor; aChangeType: TDAChangeType; - aChange: TDADeltaChange; const aCommand: IDASQLCommand; - var CanRemoveFromDelta: boolean; Error: Exception); -begin - aChange.Message := Error.Message; -end; - -{ TBizOrdersServerRules } - -procedure TBizOrdersServerRules.BeforeProcessChange( - Sender: TDABusinessProcessor; aChangeType: TDAChangeType; - aChange: TDADeltaChange; var ProcessChange: boolean); -begin - inherited; - aChange.Message := ''; - if aChangeType <> ctDelete then - if gFreightCheck and (Freight < gFreight) then begin - with TBizErrorMessage.Create do try - Message := 'Cannot process operation ' + sLineBreak + '(OrderID = ' + intToStr(OrderID) + ')'; - Add('Freight', 'Freight should be greater than ' + IntToStr(gFreight)); - aChange.Message := asString; - finally - Free; - end; - end; - if (aChangeType = ctDelete) and gDeclineDeleteOrders then begin - with TBizErrorMessage.Create do try - Message := 'Deleting of orders is not allowed ' + sLineBreak + - '(OrderID = ''' + IntToStr(OldOrderID) + ''')'; - aChange.Message := asString; - finally - Free; - end; - end; - ProcessChange := aChange.Message = ''; - if not ProcessChange then aChange.Status := csFailed; -end; - -procedure TBizOrdersServerRules.ProcessError(Sender: TDABusinessProcessor; - aChangeType: TDAChangeType; aChange: TDADeltaChange; - const aCommand: IDASQLCommand; var CanRemoveFromDelta: boolean; - Error: Exception); -begin - aChange.Message := Error.Message; - aChange.Status := csFailed; -end; - -initialization - RegisterBusinessProcessorRules('Customers.ServerRules', TBizCustomersServerRules); - RegisterBusinessProcessorRules('Orders.ServerRules', TBizOrdersServerRules); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.Sample.html deleted file mode 100644 index 3a99fee..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.Sample.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - -

- Business Processor sample -

- -

Purpose

- -

- This is a good example to show the advantages of a multi-tier architecture: systems can be updated via a server re-deploy without the need to update any client. Also, - the sample shows advanced handling on the client of any errors returned from the - server. -

- -

Examine the Code

-
    -
  • - BizSchemaServer.pas: this unit contains the business rules handlers for the server application. -
  • -
  • - BizSchemaClient.pas: this unit contains the business rules handlers for the client application.
    -
  • -
- - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bdsgroup deleted file mode 100644 index f4f1dd2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - BusinessProcessorServer.bdsproj - BusinessProcessorClient.bdsproj - BusinessProcessorServer.exe BusinessProcessorClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bpg deleted file mode 100644 index ed4c7cc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = BusinessProcessorServer.exe BusinessProcessorClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -BusinessProcessorServer.exe: BusinessProcessorServer.dpr - $(DCC) - -BusinessProcessorClient.exe: BusinessProcessorClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.groupproj deleted file mode 100644 index 2cdc078..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessor.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {e64b5502-8847-4dd5-8e67-4e6d0176cf50} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.bdsproj deleted file mode 100644 index 22248ef..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BusinessProcessorClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dpr deleted file mode 100644 index 67f0b32..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dpr +++ /dev/null @@ -1,20 +0,0 @@ -program BusinessProcessorClient; - -uses - uROComInit, - Forms, - MidasLib, - BusinessProcessorClientMain in 'BusinessProcessorClientMain.pas' {BusinessProcessorClientMainForm}, - BusinessProcessorClientData in 'BusinessProcessorClientData.pas' {BusinessProcessorClientDataModule: TDAClientDataModule}, - BizSchemaClient in 'BizSchemaClient.pas', - BusinessProcessorClientUnit1 in 'BusinessProcessorClientUnit1.pas' {BusinessProcessorClientForm2}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TBusinessProcessorClientDataModule, BusinessProcessorClientDataModule); - Application.CreateForm(TBusinessProcessorClientMainForm, BusinessProcessorClientMainForm); - Application.Run; -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dproj deleted file mode 100644 index e6a4576..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.dproj +++ /dev/null @@ -1,79 +0,0 @@ - - - {701a77fa-871d-41bc-ab21-ba2b8d978e5b} - BusinessProcessorClient.dpr - Debug - AnyCPU - DCC32 - BusinessProcessorClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BusinessProcessorClient.dpr - - - - - - - MainSource - - - -
BusinessProcessorClientDataModule
-
- -
BusinessProcessorClientMainForm
-
- -
BusinessProcessorClientForm2
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.dfm deleted file mode 100644 index a7e6ea9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.dfm +++ /dev/null @@ -1,422 +0,0 @@ -object BusinessProcessorClientDataModule: TBusinessProcessorClientDataModule - OldCreateOrder = True - Left = 345 - Top = 206 - Height = 266 - Width = 184 - object Channel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'BusinessProcessorService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - BufferSize = 262144 - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - FailureBehavior = fbShowReconcile - OnGenerateRecordMessage = RemoteDataAdapterGenerateRecordMessage - OnShowReconcileRecordInAppUI = RemoteDataAdapterShowReconcileRecordInAppUI - Left = 40 - Top = 184 - end - object tbl_Customers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - BusinessRulesID = 'Customers.ClientRules' - IndexDefs = <> - Left = 89 - Top = 100 - end - object ds_Customers: TDADataSource - DataSet = tbl_Customers.Dataset - DataTable = tbl_Customers - Left = 118 - Top = 99 - end - object tbl_Orders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DefaultValue = '0' - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Value = 'ALFKI' - ParamType = daptUnknown - end> - MasterParamsMappings.Strings = ( - 'CustomerID=CustomerID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - MasterSource = ds_Customers - MasterFields = 'CustomerID' - DetailFields = 'CustomerID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Orders' - BusinessRulesID = 'Orders.ClientRules' - IndexDefs = <> - Left = 99 - Top = 151 - end - object ds_Orders: TDADataSource - DataSet = tbl_Orders.Dataset - DataTable = tbl_Orders - Left = 128 - Top = 149 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.pas deleted file mode 100644 index 9f96a19..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientData.pas +++ /dev/null @@ -1,86 +0,0 @@ -unit BusinessProcessorClientData; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, Variants, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter, uDAScriptingProvider, - uDACDSDataTable, uDADelta; - -type - TBusinessProcessorClientDataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - tbl_Customers: TDACDSDataTable; - ds_Customers: TDADataSource; - tbl_Orders: TDACDSDataTable; - ds_Orders: TDADataSource; - procedure RemoteDataAdapterGenerateRecordMessage(Sender: TObject; - aChange: TDADeltaChange; ADatatable: TDADataTable; - var aMessage: string); - procedure RemoteDataAdapterShowReconcileRecordInAppUI(Sender: TObject; - aChange: TDADeltaChange; aDatatable: TDADataTable; - var aHandled: Boolean; var aAction: TDAReconcileDialogAction); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessProcessorClientDataModule: TBusinessProcessorClientDataModule; - -implementation -uses BusinessProcessorClientUnit1; -{$R *.dfm} - -procedure TBusinessProcessorClientDataModule.RemoteDataAdapterGenerateRecordMessage( - Sender: TObject; aChange: TDADeltaChange; ADatatable: TDADataTable; - var aMessage: string); -var - i: integer; -begin - aMessage := 'A problem occured while '; - case achange.ChangeType of - ctInsert: aMessage := aMessage + 'inserting'; - ctUpdate: aMessage := aMessage + 'updating'; - ctDelete: aMessage := aMessage + 'deleting'; - end; - aMessage := aMessage + ' a record in table "' + ADatatable.LogicalName + '"'; - if ADatatable = tbl_Customers then begin - aMessage := aMessage + ' , CustomerID = '''; - if aChange.ChangeType = ctInsert then - aMessage := aMessage + VarToStr(aChange.NewValueByName['CustomerID']) + '''' - else - aMessage := aMessage + VarToStr(aChange.OldValueByName['CustomerID']) + ''''; - end - else begin - aMessage := aMessage + ' , OrderID = '''; - if aChange.ChangeType = ctInsert then - aMessage := aMessage + VarToStr(aChange.NewValueByName['OrderID']) + '''' - else - aMessage := aMessage + VarToStr(aChange.OldValueByName['OrderID']) + ''''; - end; - - i := pos(sLineBreak, aChange.Message); - if i = 0 then - aMessage := aMessage + sLineBreak + sLineBreak + aChange.Message - else - aMessage := aMessage + sLineBreak + sLineBreak + copy(aChange.Message, 1, i - 1); -end; - -procedure TBusinessProcessorClientDataModule.RemoteDataAdapterShowReconcileRecordInAppUI( - Sender: TObject; aChange: TDADeltaChange; aDatatable: TDADataTable; - var aHandled: Boolean; var aAction: TDAReconcileDialogAction); -begin - BusinessProcessorClientUnit1.ReconcileDialogShowDetails(aChange, ADatatable, AAction); - AHandled := True; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.dfm deleted file mode 100644 index 717efe7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.dfm +++ /dev/null @@ -1,134 +0,0 @@ -object BusinessProcessorClientMainForm: TBusinessProcessorClientMainForm - Left = 320 - Top = 215 - AutoScroll = False - Caption = 'BusinessProcessor Client' - ClientHeight = 414 - ClientWidth = 624 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 266 - Width = 624 - Height = 3 - Cursor = crVSplit - Align = alBottom - end - object gCustomers: TDBGrid - Left = 0 - Top = 58 - Width = 624 - Height = 208 - Align = alClient - DataSource = BusinessProcessorClientDataModule.ds_Customers - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object dbnCustomers: TDBNavigator - Left = 0 - Top = 33 - Width = 624 - Height = 25 - DataSource = BusinessProcessorClientDataModule.ds_Customers - Align = alTop - TabOrder = 1 - end - object Button1: TButton - Left = 13 - Top = 8 - Width = 75 - Height = 25 - Caption = 'Open' - TabOrder = 2 - OnClick = Button1Click - end - object Button2: TButton - Left = 91 - Top = 7 - Width = 75 - Height = 25 - Caption = 'Button2' - TabOrder = 3 - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 624 - Height = 33 - Align = alTop - BevelOuter = bvNone - TabOrder = 4 - object ApplyUpdateButton: TButton - Left = 92 - Top = 6 - Width = 74 - Height = 25 - Caption = 'Apply Update' - TabOrder = 0 - OnClick = ApplyUpdateButtonClick - end - object OpenButton: TButton - Left = 13 - Top = 6 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = Button1Click - end - object CreateCustomerButton: TButton - Left = 222 - Top = 6 - Width = 95 - Height = 25 - Caption = 'Create customer' - TabOrder = 2 - OnClick = CreateCustomerButtonClick - end - object CreateOrderButton: TButton - Left = 322 - Top = 6 - Width = 75 - Height = 25 - Caption = 'Create order' - TabOrder = 3 - OnClick = CreateOrderButtonClick - end - end - object gOrders: TDBGrid - Left = 0 - Top = 269 - Width = 624 - Height = 120 - Align = alBottom - DataSource = BusinessProcessorClientDataModule.ds_Orders - TabOrder = 5 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object dbnOrders: TDBNavigator - Left = 0 - Top = 389 - Width = 624 - Height = 25 - DataSource = BusinessProcessorClientDataModule.ds_Orders - Align = alBottom - TabOrder = 6 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.pas deleted file mode 100644 index 7da77cd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientMain.pas +++ /dev/null @@ -1,77 +0,0 @@ -unit BusinessProcessorClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, - DBCtrls, Grids, DBGrids; - -type - TBusinessProcessorClientMainForm = class(TForm) - gCustomers: TDBGrid; - dbnCustomers: TDBNavigator; - Button1: TButton; - Button2: TButton; - Panel1: TPanel; - ApplyUpdateButton: TButton; - OpenButton: TButton; - gOrders: TDBGrid; - dbnOrders: TDBNavigator; - Splitter1: TSplitter; - CreateCustomerButton: TButton; - CreateOrderButton: TButton; - procedure Button1Click(Sender: TObject); - procedure ApplyUpdateButtonClick(Sender: TObject); - procedure CreateCustomerButtonClick(Sender: TObject); - procedure CreateOrderButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessProcessorClientMainForm: TBusinessProcessorClientMainForm; - -implementation - -uses - BusinessProcessorClientData, BizSchemaClient, SchemaClient_Intf; - -{$R *.dfm} - -procedure TBusinessProcessorClientMainForm.Button1Click(Sender: TObject); -begin - with BusinessProcessorClientDataModule.tbl_Customers do - Active := not Active; -end; - -procedure TBusinessProcessorClientMainForm.ApplyUpdateButtonClick(Sender: TObject); -begin - with BusinessProcessorClientDataModule.tbl_Customers do - ApplyUpdates(); -end; - -procedure TBusinessProcessorClientMainForm.CreateCustomerButtonClick(Sender: TObject); -begin - with BusinessProcessorClientDataModule.tbl_Customers as IBizCustomers do begin - Insert; - CustomerID := 'test'; - CompanyName := 'test company'; - Post; - end; -end; - -procedure TBusinessProcessorClientMainForm.CreateOrderButtonClick(Sender: TObject); -begin - with BusinessProcessorClientDataModule.tbl_Orders as IBizOrders do begin - Insert; - OrderID := 1; - Freight := 10; - Post; - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.dfm deleted file mode 100644 index db0f536..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.dfm +++ /dev/null @@ -1,86 +0,0 @@ -object BusinessProcessorClientForm2: TBusinessProcessorClientForm2 - Left = 358 - Top = 217 - Width = 490 - Height = 298 - BorderIcons = [biSystemMenu] - Caption = 'Show Details' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poOwnerFormCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object ScrollBox: TScrollBox - Left = 0 - Top = 148 - Width = 482 - Height = 85 - Align = alClient - BevelInner = bvNone - BevelOuter = bvNone - BorderStyle = bsNone - TabOrder = 0 - end - object BottomPanel: TPanel - Left = 0 - Top = 233 - Width = 482 - Height = 32 - Align = alBottom - BevelOuter = bvNone - TabOrder = 1 - DesignSize = ( - 482 - 32) - object OkButton: TButton - Left = 225 - Top = 4 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = '&Ok' - Default = True - ModalResult = 1 - TabOrder = 0 - OnClick = OkButtonClick - end - object CancelButton: TButton - Left = 304 - Top = 4 - Width = 95 - Height = 25 - Anchors = [akRight, akBottom] - Caption = '&Cancel Change' - ModalResult = 2 - TabOrder = 1 - OnClick = CancelButtonClick - end - object CloseButton: TButton - Left = 404 - Top = 4 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Close' - ModalResult = 7 - TabOrder = 2 - OnClick = CancelButtonClick - end - end - object TopPanel: TPanel - Left = 0 - Top = 0 - Width = 482 - Height = 148 - Align = alTop - BevelOuter = bvNone - TabOrder = 2 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.pas deleted file mode 100644 index 40a8e92..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorClientUnit1.pas +++ /dev/null @@ -1,298 +0,0 @@ -unit BusinessProcessorClientUnit1; - -interface -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ExtCtrls, uDADelta, uDADataTable, DB, BizSchemaClient, uDARemoteDataAdapter; - -type - TBusinessProcessorClientForm2 = class(TForm) - ScrollBox: TScrollBox; - BottomPanel: TPanel; - TopPanel: TPanel; - OkButton: TButton; - CancelButton: TButton; - CloseButton: TButton; - procedure FormCreate(Sender: TObject); - procedure OkButtonClick(Sender: TObject); - procedure CancelButtonClick(Sender: TObject); - private - { Private declarations } - dbeditHeight, labelheight: integer; - FChange: TDADeltaChange; - Datasource: TDADataSource; - procedure Setup; - procedure GenerateControls; - procedure ApplyErrorMessage(BizErrorMessage: TBizErrorMessage); - procedure OnFieldValueChanged(Sender: TObject); - public - { Public declarations } - - end; - -procedure ReconcileDialogShowDetails(AChange: TDADeltaChange; aTable: TDADataTable;var AAction: TDAReconcileDialogAction); -implementation -uses - uDAInterfaces, uROClasses, dbCtrls; -{$R *.dfm} - -const - labelWidth = 100; - editWidth = 200; - c_Color: TColor = clMoneyGreen; - -procedure ReconcileDialogShowDetails(AChange: TDADeltaChange; aTable: TDADataTable;var AAction: TDAReconcileDialogAction); -var - FFiltered: Boolean; - FMasterDS: TDADataSource; - FRemoteFetchEnabled: Boolean; - FMasterFields: string; -begin - with TBusinessProcessorClientForm2.Create(Application) do try - FChange := AChange; - FFiltered := ATable.Filtered; - FMasterDS := aTable.MasterSource; - FMasterFields := aTable.MasterFields; - FRemoteFetchEnabled := aTable.RemoteFetchEnabled; - try - ATable.Filtered := False; - aTable.MasterSource := nil; - aTable.MasterFields := ''; - aTable.RemoteFetchEnabled := False; - DataSource.DataTable := aTable; - Setup; - case ShowModal() of - mrOk: AAction := rdlgSkip; - mrCancel: AAction := rdlgCancel; - else AAction := rdlgNone; - end; - finally - aTable.RemoteFetchEnabled := FRemoteFetchEnabled; - aTable.Filtered := FFiltered; - aTable.MasterSource := FMasterDS; - aTable.MasterFields := FMasterFields - end; - finally - Release; - end; -end; - -{ TShowDetailsForm } - -procedure TBusinessProcessorClientForm2.Setup; -var - BizErrorMessage: TBizErrorMessage; -begin - if FChange.ChangeType <> ctDelete then - with DataSource.DataTable do - if not Locate(RecIDFieldName, FChange.RecID, []) then RaiseError('Couldn''t find record #' + FormatRecIDString(FChange.RecID)); - GenerateControls; - BizErrorMessage := TBizErrorMessage.Create; - try - BizErrorMessage.AsString := FChange.Message; - ApplyErrorMessage(BizErrorMessage); - finally - BizErrorMessage.Free; - end; - - if Screen.Height > Self.Height + (ScrollBox.VertScrollBar.Range - ScrollBox.Height) then - Self.Height := Self.Height + (ScrollBox.VertScrollBar.Range - ScrollBox.Height) - else - Self.Height := Screen.Height; - case FChange.ChangeType of - ctInsert: OkButton.Caption := 'Skip'; - ctUpdate: OkButton.Caption := 'Skip'; - ctDelete: OkButton.Caption := 'Skip'; - end; -end; - -procedure TBusinessProcessorClientForm2.GenerateControls; -var - i: integer; - aField: string; - aTop, aleft: integer; - FLabel: TLabel; - FdbEdit: TDBEdit; - FEdit: TEdit; -begin - aleft := 7; - aTop := 7; - for i := 0 to FChange.Delta.LoggedFieldCount - 1 do begin - aField := FChange.Delta.LoggedFieldNames[i]; - aTop := 7 + (3 + dbeditHeight) * i; - aleft := 7; - - FLabel := TLabel.Create(Self); - with FLabel do begin - Parent := ScrollBox; - Name := 'l_' + aField; - Caption := aField; - Left := aleft; - Top := (dbeditHeight - Height) div 2 + aTop + 1; - Width := labelWidth; - aleft := aleft + 7 + labelWidth; - end; - - if FChange.ChangeType in [ctInsert, ctUpdate] then begin - if Self.DataSource.DataTable.FieldByName(aField).DataType = datBlob then begin - FEdit := TEdit.Create(Self); - with FEdit do begin - Name := 'dbe_' + aField; - Parent := ScrollBox; - Left := aleft; - aleft := aleft + 7 + editWidth; - Top := aTop; - Width := editWidth; - ReadOnly := True; - Text := '[blob]'; - end; - end - else begin - FdbEdit := TDBEdit.Create(Self); - with FdbEdit do begin - Name := 'dbe_' + aField; - DataSource := Self.DataSource; - Parent := ScrollBox; - DataField := aField; - Left := aleft; - Top := aTop; - Width := editWidth; - OnChange := OnFieldValueChanged; - aleft := aleft + 7 + editWidth; - if (FChange.ChangeType = ctUpdate) and - not ROVariantsEqual(FChange.OldValues[i], FChange.NewValues[i]) then - Color := c_Color; - end; - end; - end; - - if FChange.ChangeType in [ctUpdate, ctDelete] then begin - FEdit := TEdit.Create(Self); - with FEdit do begin - Name := 'e_' + aField; - Parent := ScrollBox; - Left := aleft; - aleft := aleft + 7 + editWidth; - Top := aTop; - Width := editWidth; - ReadOnly := True; - Color := clBtnFace; - if Self.DataSource.DataTable.FieldByName(aField).DataType = datBlob then begin - Text := '[blob]' - end - else begin - case FChange.ChangeType of - ctDelete: text := VarToStr(FChange.OldValues[i]); - ctUpdate: begin - if not Self.DataSource.DataTable.HasReducedDelta then - text := VarToStr(FChange.OldValues[i]) - else - if not VarIsEmpty(FChange.OldValues[i]) then - text := VarToStr(FChange.OldValues[i]) - else text := Self.DataSource.DataTable.FieldByName(aField).AsString; - end; - end; - end; - end; - end; - end; - inc(aTop, 20); - inc(aLeft, 7); - //ScrollBox.HorzScrollBar.Range := aleft; - Self.ClientWidth := aleft + ScrollBox.VertScrollBar.Size + 2; - Self.Constraints.MinWidth := Self.Width; - Self.Constraints.MaxWidth := Self.Width; - - ScrollBox.VertScrollBar.Range := aTop; -end; - -procedure TBusinessProcessorClientForm2.FormCreate(Sender: TObject); -begin - inherited; - with TDBEdit.Create(Self) do try - dbeditHeight := Height; - finally - free; - end; - with TLabel.Create(Self) do try - labelheight := Height; - finally - free; - end; - Datasource := TDADataSource.Create(Self); -end; - -procedure TBusinessProcessorClientForm2.OkButtonClick(Sender: TObject); -begin - if DataSource.DataTable.State in [dsEdit, dsInsert] then DataSource.DataTable.Post; -end; - -procedure TBusinessProcessorClientForm2.CancelButtonClick(Sender: TObject); -begin - if DataSource.DataTable.State in [dsEdit, dsInsert] then DataSource.DataTable.Cancel; -end; - -procedure TBusinessProcessorClientForm2.ApplyErrorMessage( - BizErrorMessage: TBizErrorMessage); -var - i: integer; - FLabel: TLabel; - Fcomp: TComponent; - aTop: integer; -begin - ShowHint := True; - Caption := Datasource.DataTable.LogicalName; - FLabel := TLabel.Create(Self); - with FLabel do begin - Parent := TopPanel; - i := pos(sLineBreak, BizErrorMessage.Message); - if i = 0 then - Caption := BizErrorMessage.Message - else - Caption := copy(BizErrorMessage.Message, 1, i-1); - Hint := Caption; - Left := 7; - Top := 7; - AutoSize := true; - WordWrap := True; - AutoSize := False; - Height:= labelheight * (Width div (Parent.ClientWidth - Left * 2)+1); - Width := Parent.ClientWidth - Left * 2; -{ if BizErrorMessage.ItemCount = 0 then - Height := labelheight * 4 - else - Height := labelheight; } - aTop := Height + Top + 3; - Anchors := Anchors + [akRight]; - end; - - for i := 0 to BizErrorMessage.ItemCount - 1 do begin - with BizErrorMessage.Items[i] do begin - Fcomp := Self.FindComponent('l_' + Field); - if Fcomp <> nil then TLabel(Fcomp).Font.Color := clRed; - - FLabel := TLabel.Create(Self); - with FLabel do begin - Parent := TopPanel; - Name := 'error_' + Field; - Caption := ErrorMessage; - Left := 7; - Top := aTop; - AutoSize := True; - Font.Color := clRed; - aTop := Height + Top + 3; - end; - end; - end; - - TopPanel.ClientHeight := aTop; -end; - -procedure TBusinessProcessorClientForm2.OnFieldValueChanged( - Sender: TObject); -begin - OkButton.Caption := 'Update'; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary.RODL deleted file mode 100644 index 60a510d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary.RODL +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Intf.pas deleted file mode 100644 index 2ff6be0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Intf.pas +++ /dev/null @@ -1,77 +0,0 @@ -unit BusinessProcessorLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{EBAEAB9A-1E78-4BB3-8417-2E226959496F}'; - TargetNamespace = ''; - - { Service Interface ID's } - IBusinessProcessorService_IID : TGUID = '{4404161B-2A9E-4711-AADF-4493AC19BB34}'; - - { Event ID's } - -type - { Forward declarations } - IBusinessProcessorService = interface; - - - - - { IBusinessProcessorService } - IBusinessProcessorService = interface(IDataAbstractService) - ['{4404161B-2A9E-4711-AADF-4493AC19BB34}'] - end; - - { CoBusinessProcessorService } - CoBusinessProcessorService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBusinessProcessorService; - end; - - { TBusinessProcessorService_Proxy } - TBusinessProcessorService_Proxy = class(TDataAbstractService_Proxy, IBusinessProcessorService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoBusinessProcessorService } - -class function CoBusinessProcessorService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBusinessProcessorService; -begin - result := TBusinessProcessorService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TBusinessProcessorService_Proxy.__GetInterfaceName:string; -begin - result := 'BusinessProcessorService'; -end; - -initialization - RegisterProxyClass(IBusinessProcessorService_IID, TBusinessProcessorService_Proxy); - - -finalization - UnregisterProxyClass(IBusinessProcessorService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Invk.pas deleted file mode 100644 index a265b95..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit BusinessProcessorLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} BusinessProcessorLibrary_Intf; - -type - TBusinessProcessorService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.bdsproj deleted file mode 100644 index 4053265..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BusinessProcessorServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dpr deleted file mode 100644 index b304ddc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dpr +++ /dev/null @@ -1,27 +0,0 @@ -program BusinessProcessorServer; - -{#ROGEN:BusinessProcessorLibrary.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - BusinessProcessorServerMain in 'BusinessProcessorServerMain.pas' {BusinessProcessorServerMainForm}, - BusinessProcessorServerData in 'BusinessProcessorServerData.pas' {BusinessProcessorServerDataModule: TDataModule}, - SchemaClient_Intf in 'SchemaClient_Intf.pas', - SchemaServer_Intf in 'SchemaServer_Intf.pas', - BizSchemaServer in 'BizSchemaServer.pas', - ServerGlobal in 'ServerGlobal.pas', - BusinessProcessorLibrary_Intf in 'BusinessProcessorLibrary_Intf.pas', - BusinessProcessorLibrary_Invk in 'BusinessProcessorLibrary_Invk.pas', - BusinessProcessorService_Impl in 'BusinessProcessorService_Impl.pas' {BusinessProcessorService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TBusinessProcessorServerDataModule, BusinessProcessorServerDataModule); - Application.CreateForm(TBusinessProcessorServerMainForm, BusinessProcessorServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dproj deleted file mode 100644 index fc2e95e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.dproj +++ /dev/null @@ -1,84 +0,0 @@ - - - {dac310a9-44d2-4920-b4d5-46703300c98d} - BusinessProcessorServer.dpr - Debug - AnyCPU - DCC32 - BusinessProcessorServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BusinessProcessorServer.dpr - - - - - - - MainSource - - - - - -
BusinessProcessorServerDataModule
-
- -
BusinessProcessorServerMainForm
-
- -
BusinessProcessorService
-
- - - -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.dfm deleted file mode 100644 index 5268506..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.dfm +++ /dev/null @@ -1,60 +0,0 @@ -object BusinessProcessorServerDataModule: TBusinessProcessorServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 186 - Top = 136 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI;' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.pas deleted file mode 100644 index 871cd5e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerData.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit BusinessProcessorServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAADODriver, uROIndyTCPServer; - -type - TBusinessProcessorServerDataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - SessionManager: TROInMemorySessionManager; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessProcessorServerDataModule: TBusinessProcessorServerDataModule; - -implementation - -{$R *.dfm} - -procedure TBusinessProcessorServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.dfm deleted file mode 100644 index 7d1094d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.dfm +++ /dev/null @@ -1,109 +0,0 @@ -object BusinessProcessorServerMainForm: TBusinessProcessorServerMainForm - Left = 100 - Top = 111 - BorderStyle = bsDialog - Caption = 'Business Processor Server' - ClientHeight = 170 - ClientWidth = 380 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 7 - Top = 7 - Width = 39 - Height = 13 - Caption = 'Checks:' - end - object GroupBox1: TGroupBox - Left = 7 - Top = 24 - Width = 365 - Height = 73 - Anchors = [akLeft, akTop, akRight] - Caption = 'Customers' - TabOrder = 0 - object cbCheckCustomerID: TCheckBox - Left = 8 - Top = 15 - Width = 321 - Height = 17 - Caption = 'New records: CustomerID needs at least 5 characters' - TabOrder = 0 - OnClick = cbCheckCustomerIDClick - end - object cbDeclineDeleteCustomers: TCheckBox - Left = 8 - Top = 49 - Width = 216 - Height = 17 - Caption = 'Restrict deleting records' - TabOrder = 1 - OnClick = cbDeclineDeleteCustomersClick - end - object cbCompany: TCheckBox - Left = 8 - Top = 32 - Width = 228 - Height = 17 - Caption = 'New records: Company name for should be ' - TabOrder = 2 - OnClick = cbCompanyClick - end - object eCompany: TEdit - Left = 245 - Top = 30 - Width = 110 - Height = 21 - TabOrder = 3 - Text = 'Company' - OnChange = eCompanyChange - end - end - object GroupBox2: TGroupBox - Left = 7 - Top = 100 - Width = 365 - Height = 60 - Anchors = [akLeft, akTop, akRight] - Caption = 'Orders' - TabOrder = 1 - object cbFreight: TCheckBox - Left = 8 - Top = 15 - Width = 218 - Height = 17 - Caption = 'Freight should be greater than' - TabOrder = 0 - OnClick = cbFreightClick - end - object cbDeclineDeleteOrders: TCheckBox - Left = 8 - Top = 33 - Width = 216 - Height = 17 - Caption = 'Restrict deleting of orders' - TabOrder = 1 - OnClick = cbDeclineDeleteOrdersClick - end - object eFreight: TSpinEdit - Left = 245 - Top = 12 - Width = 110 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 2 - Value = 0 - OnChange = eFreightChange - end - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.pas deleted file mode 100644 index 7d70ed7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorServerMain.pas +++ /dev/null @@ -1,96 +0,0 @@ -unit BusinessProcessorServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, Spin; - -type - TBusinessProcessorServerMainForm = class(TForm) - Label1: TLabel; - GroupBox1: TGroupBox; - cbCheckCustomerID: TCheckBox; - cbDeclineDeleteCustomers: TCheckBox; - cbCompany: TCheckBox; - eCompany: TEdit; - GroupBox2: TGroupBox; - cbFreight: TCheckBox; - cbDeclineDeleteOrders: TCheckBox; - eFreight: TSpinEdit; - procedure cbCompanyClick(Sender: TObject); - procedure eCompanyChange(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure cbFreightClick(Sender: TObject); - procedure eFreightChange(Sender: TObject); - procedure cbDeclineDeleteCustomersClick(Sender: TObject); - procedure cbDeclineDeleteOrdersClick(Sender: TObject); - procedure cbCheckCustomerIDClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessProcessorServerMainForm : TBusinessProcessorServerMainForm; - -implementation -uses - ServerGlobal; -{$R *.dfm} - -procedure TBusinessProcessorServerMainForm.cbCompanyClick(Sender: TObject); -begin - eCompany.Enabled := cbCompany.Checked; - gCompanyCheck := cbCompany.Checked; - eCompanyChange(eCompany); -end; - -procedure TBusinessProcessorServerMainForm.eCompanyChange(Sender: TObject); -begin - gCompany := eCompany.Text; -end; - -procedure TBusinessProcessorServerMainForm.FormShow(Sender: TObject); -begin - eCompany.Text := gCompany; - eFreight.Value := gFreight; - cbCompany.Checked := gCompanyCheck; - cbFreight.Checked := gFreightCheck; - cbCompanyClick(cbCompany); - cbFreightClick(cbFreight); - cbDeclineDeleteCustomers.Checked := gDeclineDeleteCustomers; - cbDeclineDeleteOrders.Checked := gDeclineDeleteOrders; - cbCheckCustomerID.Checked := gCheckCustomerID; -end; - -procedure TBusinessProcessorServerMainForm.cbFreightClick(Sender: TObject); -begin - eFreight.Enabled := cbFreight.Checked; - gFreightCheck := cbFreight.Checked; - eFreightChange(eFreight); -end; - -procedure TBusinessProcessorServerMainForm.eFreightChange(Sender: TObject); -begin - gFreight := eFreight.Value; -end; - -procedure TBusinessProcessorServerMainForm.cbDeclineDeleteCustomersClick(Sender: TObject); -begin - gDeclineDeleteCustomers := cbDeclineDeleteCustomers.Checked; -end; - -procedure TBusinessProcessorServerMainForm.cbDeclineDeleteOrdersClick(Sender: TObject); -begin - gDeclineDeleteOrders := cbDeclineDeleteOrders.Checked; -end; - -procedure TBusinessProcessorServerMainForm.cbCheckCustomerIDClick(Sender: TObject); -begin - gCheckCustomerID := cbCheckCustomerID.Checked; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.dfm deleted file mode 100644 index 227e306..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.dfm +++ /dev/null @@ -1,712 +0,0 @@ -object BusinessProcessorService: TBusinessProcessorService - OldCreateOrder = True - SessionManager = BusinessProcessorServerDataModule.SessionManager - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Left = 200 - Top = 200 - Height = 300 - Width = 300 - object DataStreamer: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = BusinessProcessorServerDataModule.ConnectionManager - DataDictionary = BusinessProcessorServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders'#10' WHERE'#10' CustomerID = :CustomerID'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - LogChanges = False - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = < - item - Params = < - item - Name = 'CustomerID' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'CompanyName' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'ContactName' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'ContactTitle' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Address' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'City' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Region' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'PostalCode' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Country' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Phone' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Fax' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'INSERT'#10' INTO Customers'#10' (CustomerID, CompanyName, ContactNam' + - 'e, ContactTitle, '#10' Address, City, Region, PostalCode, Countr' + - 'y, Phone, '#10' Fax)'#10' VALUES'#10' (:CustomerID, :CompanyName, :C' + - 'ontactName, :ContactTitle, '#10' :Address, :City, :Region, :Post' + - 'alCode, :Country, :Phone, '#10' :Fax)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Insert_Customers' - end - item - Params = < - item - Name = 'OLD_CustomerID' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'DELETE '#10' FROM'#10' Customers'#10' WHERE'#10' (CustomerID = :OLD_Cust' + - 'omerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Delete_Customers' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'CompanyName' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'ContactName' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'ContactTitle' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Address' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'City' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Region' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'PostalCode' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Country' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Phone' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'Fax' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end - item - Name = 'OLD_CustomerID' - DataType = datWideString - BlobType = dabtUnknown - Value = '' - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'UPDATE Customers'#10' SET '#10' CustomerID = :CustomerID, '#10' Compa' + - 'nyName = :CompanyName, '#10' ContactName = :ContactName, '#10' Con' + - 'tactTitle = :ContactTitle, '#10' Address = :Address, '#10' City = ' + - ':City, '#10' Region = :Region, '#10' PostalCode = :PostalCode, '#10' ' + - ' Country = :Country, '#10' Phone = :Phone, '#10' Fax = :Fax'#10' WHE' + - 'RE'#10' (CustomerID = :OLD_CustomerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Update_Customers' - end> - RelationShips = < - item - Name = 'Relationship' - MasterDatasetName = 'Customers' - MasterFields = 'CustomerID' - DetailDatasetName = 'Orders' - DetailFields = 'CustomerID' - end> - UpdateRules = <> - Left = 32 - Top = 56 - end - object bpCustomers: TDABusinessProcessor - Schema = Schema - InsertCommandName = 'Insert_Customers' - DeleteCommandName = 'Delete_Customers' - UpdateCommandName = 'Update_Customers' - ReferencedDataset = 'Customers' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poAutoGenerateRefreshDataset, poPrepareCommands] - UpdateMode = updWhereKeyOnly - BusinessRulesID = 'Customers.ServerRules' - Left = 76 - Top = 55 - end - object bpOrders: TDABusinessProcessor - Schema = Schema - ReferencedDataset = 'Orders' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poAutoGenerateRefreshDataset, poPrepareCommands] - UpdateMode = updWhereKeyOnly - BusinessRulesID = 'Orders.ServerRules' - Left = 80 - Top = 98 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.pas deleted file mode 100644 index f0baff7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/BusinessProcessorService_Impl.pas +++ /dev/null @@ -1,50 +0,0 @@ -unit BusinessProcessorService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} BusinessProcessorLibrary_Intf, uDAScriptingProvider, - uDABusinessProcessor, uDAClasses, uDADataStreamer, uDABinAdapter; - -type - { TBusinessProcessorService } - TBusinessProcessorService = class(TDataAbstractService, IBusinessProcessorService) - DataStreamer: TDABinDataStreamer; - Schema: TDASchema; - bpCustomers: TDABusinessProcessor; - bpOrders: TDABusinessProcessor; - private - protected - { IBusinessProcessorService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} BusinessProcessorLibrary_Invk,BusinessProcessorServerData; - -procedure Create_BusinessProcessorService(out anInstance : IUnknown); -begin - anInstance := TBusinessProcessorService.Create(nil); -end; - -{ BusinessProcessorService } -initialization - TROClassFactory.Create('BusinessProcessorService', Create_BusinessProcessorService, TBusinessProcessorService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/RODLFILE.res deleted file mode 100644 index 6919cc8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaClient_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaClient_Intf.pas deleted file mode 100644 index e7dda72..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaClient_Intf.pas +++ /dev/null @@ -1,981 +0,0 @@ -unit SchemaClient_Intf; - -interface - -uses - Classes, DB, SysUtils, uROClasses, uDADataTable; - -const - { Data table rules ids - Feel free to change them to something more human readable - but make sure they are unique in the context of your application } - RID_Customers = '{A9F7C630-77E0-44A8-B46B-E3EE67954A42}'; - RID_Orders = '{B5125DCD-A27D-488D-A1A2-4FB5D49D7079}'; - - { Data table names } - nme_Customers = 'Customers'; - nme_Orders = 'Orders'; - - { Customers fields } - fld_CustomersCustomerID = 'CustomerID'; - fld_CustomersCompanyName = 'CompanyName'; - fld_CustomersContactName = 'ContactName'; - fld_CustomersContactTitle = 'ContactTitle'; - fld_CustomersAddress = 'Address'; - fld_CustomersCity = 'City'; - fld_CustomersRegion = 'Region'; - fld_CustomersPostalCode = 'PostalCode'; - fld_CustomersCountry = 'Country'; - fld_CustomersPhone = 'Phone'; - fld_CustomersFax = 'Fax'; - - { Customers field indexes } - idx_CustomersCustomerID = 0; - idx_CustomersCompanyName = 1; - idx_CustomersContactName = 2; - idx_CustomersContactTitle = 3; - idx_CustomersAddress = 4; - idx_CustomersCity = 5; - idx_CustomersRegion = 6; - idx_CustomersPostalCode = 7; - idx_CustomersCountry = 8; - idx_CustomersPhone = 9; - idx_CustomersFax = 10; - - { Orders fields } - fld_OrdersOrderID = 'OrderID'; - fld_OrdersCustomerID = 'CustomerID'; - fld_OrdersEmployeeID = 'EmployeeID'; - fld_OrdersOrderDate = 'OrderDate'; - fld_OrdersRequiredDate = 'RequiredDate'; - fld_OrdersShippedDate = 'ShippedDate'; - fld_OrdersShipVia = 'ShipVia'; - fld_OrdersFreight = 'Freight'; - fld_OrdersShipName = 'ShipName'; - fld_OrdersShipAddress = 'ShipAddress'; - fld_OrdersShipCity = 'ShipCity'; - fld_OrdersShipRegion = 'ShipRegion'; - fld_OrdersShipPostalCode = 'ShipPostalCode'; - fld_OrdersShipCountry = 'ShipCountry'; - - { Orders field indexes } - idx_OrdersOrderID = 0; - idx_OrdersCustomerID = 1; - idx_OrdersEmployeeID = 2; - idx_OrdersOrderDate = 3; - idx_OrdersRequiredDate = 4; - idx_OrdersShippedDate = 5; - idx_OrdersShipVia = 6; - idx_OrdersFreight = 7; - idx_OrdersShipName = 8; - idx_OrdersShipAddress = 9; - idx_OrdersShipCity = 10; - idx_OrdersShipRegion = 11; - idx_OrdersShipPostalCode = 12; - idx_OrdersShipCountry = 13; - -type - { ICustomers } - ICustomers = interface(IDAStronglyTypedDataTable) - ['{AD74260F-B808-430E-85E6-FB469055C068}'] - { Property getters and setters } - function GetCustomerIDValue: WideString; - procedure SetCustomerIDValue(const aValue: WideString); - function GetCustomerIDIsNull: Boolean; - procedure SetCustomerIDIsNull(const aValue: Boolean); - function GetCompanyNameValue: WideString; - procedure SetCompanyNameValue(const aValue: WideString); - function GetCompanyNameIsNull: Boolean; - procedure SetCompanyNameIsNull(const aValue: Boolean); - function GetContactNameValue: WideString; - procedure SetContactNameValue(const aValue: WideString); - function GetContactNameIsNull: Boolean; - procedure SetContactNameIsNull(const aValue: Boolean); - function GetContactTitleValue: WideString; - procedure SetContactTitleValue(const aValue: WideString); - function GetContactTitleIsNull: Boolean; - procedure SetContactTitleIsNull(const aValue: Boolean); - function GetAddressValue: WideString; - procedure SetAddressValue(const aValue: WideString); - function GetAddressIsNull: Boolean; - procedure SetAddressIsNull(const aValue: Boolean); - function GetCityValue: WideString; - procedure SetCityValue(const aValue: WideString); - function GetCityIsNull: Boolean; - procedure SetCityIsNull(const aValue: Boolean); - function GetRegionValue: WideString; - procedure SetRegionValue(const aValue: WideString); - function GetRegionIsNull: Boolean; - procedure SetRegionIsNull(const aValue: Boolean); - function GetPostalCodeValue: WideString; - procedure SetPostalCodeValue(const aValue: WideString); - function GetPostalCodeIsNull: Boolean; - procedure SetPostalCodeIsNull(const aValue: Boolean); - function GetCountryValue: WideString; - procedure SetCountryValue(const aValue: WideString); - function GetCountryIsNull: Boolean; - procedure SetCountryIsNull(const aValue: Boolean); - function GetPhoneValue: WideString; - procedure SetPhoneValue(const aValue: WideString); - function GetPhoneIsNull: Boolean; - procedure SetPhoneIsNull(const aValue: Boolean); - function GetFaxValue: WideString; - procedure SetFaxValue(const aValue: WideString); - function GetFaxIsNull: Boolean; - procedure SetFaxIsNull(const aValue: Boolean); - - - { Properties } - property CustomerID: WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property CompanyName: WideString read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull: Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property ContactName: WideString read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull: Boolean read GetContactNameIsNull write SetContactNameIsNull; - property ContactTitle: WideString read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull: Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property Address: WideString read GetAddressValue write SetAddressValue; - property AddressIsNull: Boolean read GetAddressIsNull write SetAddressIsNull; - property City: WideString read GetCityValue write SetCityValue; - property CityIsNull: Boolean read GetCityIsNull write SetCityIsNull; - property Region: WideString read GetRegionValue write SetRegionValue; - property RegionIsNull: Boolean read GetRegionIsNull write SetRegionIsNull; - property PostalCode: WideString read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull: Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property Country: WideString read GetCountryValue write SetCountryValue; - property CountryIsNull: Boolean read GetCountryIsNull write SetCountryIsNull; - property Phone: WideString read GetPhoneValue write SetPhoneValue; - property PhoneIsNull: Boolean read GetPhoneIsNull write SetPhoneIsNull; - property Fax: WideString read GetFaxValue write SetFaxValue; - property FaxIsNull: Boolean read GetFaxIsNull write SetFaxIsNull; - end; - - { TCustomersDataTableRules } - TCustomersDataTableRules = class(TDADataTableRules, ICustomers) - private - protected - { Property getters and setters } - function GetCustomerIDValue: WideString; virtual; - procedure SetCustomerIDValue(const aValue: WideString); virtual; - function GetCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetCompanyNameValue: WideString; virtual; - procedure SetCompanyNameValue(const aValue: WideString); virtual; - function GetCompanyNameIsNull: Boolean; virtual; - procedure SetCompanyNameIsNull(const aValue: Boolean); virtual; - function GetContactNameValue: WideString; virtual; - procedure SetContactNameValue(const aValue: WideString); virtual; - function GetContactNameIsNull: Boolean; virtual; - procedure SetContactNameIsNull(const aValue: Boolean); virtual; - function GetContactTitleValue: WideString; virtual; - procedure SetContactTitleValue(const aValue: WideString); virtual; - function GetContactTitleIsNull: Boolean; virtual; - procedure SetContactTitleIsNull(const aValue: Boolean); virtual; - function GetAddressValue: WideString; virtual; - procedure SetAddressValue(const aValue: WideString); virtual; - function GetAddressIsNull: Boolean; virtual; - procedure SetAddressIsNull(const aValue: Boolean); virtual; - function GetCityValue: WideString; virtual; - procedure SetCityValue(const aValue: WideString); virtual; - function GetCityIsNull: Boolean; virtual; - procedure SetCityIsNull(const aValue: Boolean); virtual; - function GetRegionValue: WideString; virtual; - procedure SetRegionValue(const aValue: WideString); virtual; - function GetRegionIsNull: Boolean; virtual; - procedure SetRegionIsNull(const aValue: Boolean); virtual; - function GetPostalCodeValue: WideString; virtual; - procedure SetPostalCodeValue(const aValue: WideString); virtual; - function GetPostalCodeIsNull: Boolean; virtual; - procedure SetPostalCodeIsNull(const aValue: Boolean); virtual; - function GetCountryValue: WideString; virtual; - procedure SetCountryValue(const aValue: WideString); virtual; - function GetCountryIsNull: Boolean; virtual; - procedure SetCountryIsNull(const aValue: Boolean); virtual; - function GetPhoneValue: WideString; virtual; - procedure SetPhoneValue(const aValue: WideString); virtual; - function GetPhoneIsNull: Boolean; virtual; - procedure SetPhoneIsNull(const aValue: Boolean); virtual; - function GetFaxValue: WideString; virtual; - procedure SetFaxValue(const aValue: WideString); virtual; - function GetFaxIsNull: Boolean; virtual; - procedure SetFaxIsNull(const aValue: Boolean); virtual; - - { Properties } - property CustomerID: WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property CompanyName: WideString read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull: Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property ContactName: WideString read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull: Boolean read GetContactNameIsNull write SetContactNameIsNull; - property ContactTitle: WideString read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull: Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property Address: WideString read GetAddressValue write SetAddressValue; - property AddressIsNull: Boolean read GetAddressIsNull write SetAddressIsNull; - property City: WideString read GetCityValue write SetCityValue; - property CityIsNull: Boolean read GetCityIsNull write SetCityIsNull; - property Region: WideString read GetRegionValue write SetRegionValue; - property RegionIsNull: Boolean read GetRegionIsNull write SetRegionIsNull; - property PostalCode: WideString read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull: Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property Country: WideString read GetCountryValue write SetCountryValue; - property CountryIsNull: Boolean read GetCountryIsNull write SetCountryIsNull; - property Phone: WideString read GetPhoneValue write SetPhoneValue; - property PhoneIsNull: Boolean read GetPhoneIsNull write SetPhoneIsNull; - property Fax: WideString read GetFaxValue write SetFaxValue; - property FaxIsNull: Boolean read GetFaxIsNull write SetFaxIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - - { IOrders } - IOrders = interface(IDAStronglyTypedDataTable) - ['{837F52E1-CF1E-44B5-9026-31E65685B868}'] - { Property getters and setters } - function GetOrderIDValue: Integer; - procedure SetOrderIDValue(const aValue: Integer); - function GetOrderIDIsNull: Boolean; - procedure SetOrderIDIsNull(const aValue: Boolean); - function GetCustomerIDValue: WideString; - procedure SetCustomerIDValue(const aValue: WideString); - function GetCustomerIDIsNull: Boolean; - procedure SetCustomerIDIsNull(const aValue: Boolean); - function GetEmployeeIDValue: Integer; - procedure SetEmployeeIDValue(const aValue: Integer); - function GetEmployeeIDIsNull: Boolean; - procedure SetEmployeeIDIsNull(const aValue: Boolean); - function GetOrderDateValue: DateTime; - procedure SetOrderDateValue(const aValue: DateTime); - function GetOrderDateIsNull: Boolean; - procedure SetOrderDateIsNull(const aValue: Boolean); - function GetRequiredDateValue: DateTime; - procedure SetRequiredDateValue(const aValue: DateTime); - function GetRequiredDateIsNull: Boolean; - procedure SetRequiredDateIsNull(const aValue: Boolean); - function GetShippedDateValue: DateTime; - procedure SetShippedDateValue(const aValue: DateTime); - function GetShippedDateIsNull: Boolean; - procedure SetShippedDateIsNull(const aValue: Boolean); - function GetShipViaValue: Integer; - procedure SetShipViaValue(const aValue: Integer); - function GetShipViaIsNull: Boolean; - procedure SetShipViaIsNull(const aValue: Boolean); - function GetFreightValue: Float; - procedure SetFreightValue(const aValue: Float); - function GetFreightIsNull: Boolean; - procedure SetFreightIsNull(const aValue: Boolean); - function GetShipNameValue: WideString; - procedure SetShipNameValue(const aValue: WideString); - function GetShipNameIsNull: Boolean; - procedure SetShipNameIsNull(const aValue: Boolean); - function GetShipAddressValue: WideString; - procedure SetShipAddressValue(const aValue: WideString); - function GetShipAddressIsNull: Boolean; - procedure SetShipAddressIsNull(const aValue: Boolean); - function GetShipCityValue: WideString; - procedure SetShipCityValue(const aValue: WideString); - function GetShipCityIsNull: Boolean; - procedure SetShipCityIsNull(const aValue: Boolean); - function GetShipRegionValue: WideString; - procedure SetShipRegionValue(const aValue: WideString); - function GetShipRegionIsNull: Boolean; - procedure SetShipRegionIsNull(const aValue: Boolean); - function GetShipPostalCodeValue: WideString; - procedure SetShipPostalCodeValue(const aValue: WideString); - function GetShipPostalCodeIsNull: Boolean; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); - function GetShipCountryValue: WideString; - procedure SetShipCountryValue(const aValue: WideString); - function GetShipCountryIsNull: Boolean; - procedure SetShipCountryIsNull(const aValue: Boolean); - - - { Properties } - property OrderID: Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull: Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property CustomerID: WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property EmployeeID: Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull: Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OrderDate: DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull: Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property RequiredDate: DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull: Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property ShippedDate: DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull: Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property ShipVia: Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull: Boolean read GetShipViaIsNull write SetShipViaIsNull; - property Freight: Float read GetFreightValue write SetFreightValue; - property FreightIsNull: Boolean read GetFreightIsNull write SetFreightIsNull; - property ShipName: WideString read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull: Boolean read GetShipNameIsNull write SetShipNameIsNull; - property ShipAddress: WideString read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull: Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property ShipCity: WideString read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull: Boolean read GetShipCityIsNull write SetShipCityIsNull; - property ShipRegion: WideString read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull: Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property ShipPostalCode: WideString read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull: Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property ShipCountry: WideString read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull: Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - end; - - { TOrdersDataTableRules } - TOrdersDataTableRules = class(TDADataTableRules, IOrders) - private - protected - { Property getters and setters } - function GetOrderIDValue: Integer; virtual; - procedure SetOrderIDValue(const aValue: Integer); virtual; - function GetOrderIDIsNull: Boolean; virtual; - procedure SetOrderIDIsNull(const aValue: Boolean); virtual; - function GetCustomerIDValue: WideString; virtual; - procedure SetCustomerIDValue(const aValue: WideString); virtual; - function GetCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetEmployeeIDValue: Integer; virtual; - procedure SetEmployeeIDValue(const aValue: Integer); virtual; - function GetEmployeeIDIsNull: Boolean; virtual; - procedure SetEmployeeIDIsNull(const aValue: Boolean); virtual; - function GetOrderDateValue: DateTime; virtual; - procedure SetOrderDateValue(const aValue: DateTime); virtual; - function GetOrderDateIsNull: Boolean; virtual; - procedure SetOrderDateIsNull(const aValue: Boolean); virtual; - function GetRequiredDateValue: DateTime; virtual; - procedure SetRequiredDateValue(const aValue: DateTime); virtual; - function GetRequiredDateIsNull: Boolean; virtual; - procedure SetRequiredDateIsNull(const aValue: Boolean); virtual; - function GetShippedDateValue: DateTime; virtual; - procedure SetShippedDateValue(const aValue: DateTime); virtual; - function GetShippedDateIsNull: Boolean; virtual; - procedure SetShippedDateIsNull(const aValue: Boolean); virtual; - function GetShipViaValue: Integer; virtual; - procedure SetShipViaValue(const aValue: Integer); virtual; - function GetShipViaIsNull: Boolean; virtual; - procedure SetShipViaIsNull(const aValue: Boolean); virtual; - function GetFreightValue: Float; virtual; - procedure SetFreightValue(const aValue: Float); virtual; - function GetFreightIsNull: Boolean; virtual; - procedure SetFreightIsNull(const aValue: Boolean); virtual; - function GetShipNameValue: WideString; virtual; - procedure SetShipNameValue(const aValue: WideString); virtual; - function GetShipNameIsNull: Boolean; virtual; - procedure SetShipNameIsNull(const aValue: Boolean); virtual; - function GetShipAddressValue: WideString; virtual; - procedure SetShipAddressValue(const aValue: WideString); virtual; - function GetShipAddressIsNull: Boolean; virtual; - procedure SetShipAddressIsNull(const aValue: Boolean); virtual; - function GetShipCityValue: WideString; virtual; - procedure SetShipCityValue(const aValue: WideString); virtual; - function GetShipCityIsNull: Boolean; virtual; - procedure SetShipCityIsNull(const aValue: Boolean); virtual; - function GetShipRegionValue: WideString; virtual; - procedure SetShipRegionValue(const aValue: WideString); virtual; - function GetShipRegionIsNull: Boolean; virtual; - procedure SetShipRegionIsNull(const aValue: Boolean); virtual; - function GetShipPostalCodeValue: WideString; virtual; - procedure SetShipPostalCodeValue(const aValue: WideString); virtual; - function GetShipPostalCodeIsNull: Boolean; virtual; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); virtual; - function GetShipCountryValue: WideString; virtual; - procedure SetShipCountryValue(const aValue: WideString); virtual; - function GetShipCountryIsNull: Boolean; virtual; - procedure SetShipCountryIsNull(const aValue: Boolean); virtual; - - { Properties } - property OrderID: Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull: Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property CustomerID: WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property EmployeeID: Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull: Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OrderDate: DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull: Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property RequiredDate: DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull: Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property ShippedDate: DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull: Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property ShipVia: Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull: Boolean read GetShipViaIsNull write SetShipViaIsNull; - property Freight: Float read GetFreightValue write SetFreightValue; - property FreightIsNull: Boolean read GetFreightIsNull write SetFreightIsNull; - property ShipName: WideString read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull: Boolean read GetShipNameIsNull write SetShipNameIsNull; - property ShipAddress: WideString read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull: Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property ShipCity: WideString read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull: Boolean read GetShipCityIsNull write SetShipCityIsNull; - property ShipRegion: WideString read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull: Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property ShipPostalCode: WideString read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull: Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property ShipCountry: WideString read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull: Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - -implementation - -uses Variants; - -{ TCustomersDataTableRules } -constructor TCustomersDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TCustomersDataTableRules.Destroy; -begin - inherited; -end; - -function TCustomersDataTableRules.GetCustomerIDValue: WideString; -begin - result := DataTable.Fields[idx_CustomersCustomerID].AsWideString; -end; - -procedure TCustomersDataTableRules.SetCustomerIDValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersCustomerID].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetCustomerIDIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCustomerID].IsNull; -end; - -procedure TCustomersDataTableRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCustomerID].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCompanyNameValue: WideString; -begin - result := DataTable.Fields[idx_CustomersCompanyName].AsWideString; -end; - -procedure TCustomersDataTableRules.SetCompanyNameValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersCompanyName].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetCompanyNameIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCompanyName].IsNull; -end; - -procedure TCustomersDataTableRules.SetCompanyNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCompanyName].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetContactNameValue: WideString; -begin - result := DataTable.Fields[idx_CustomersContactName].AsWideString; -end; - -procedure TCustomersDataTableRules.SetContactNameValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersContactName].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetContactNameIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersContactName].IsNull; -end; - -procedure TCustomersDataTableRules.SetContactNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersContactName].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetContactTitleValue: WideString; -begin - result := DataTable.Fields[idx_CustomersContactTitle].AsWideString; -end; - -procedure TCustomersDataTableRules.SetContactTitleValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersContactTitle].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetContactTitleIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersContactTitle].IsNull; -end; - -procedure TCustomersDataTableRules.SetContactTitleIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersContactTitle].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetAddressValue: WideString; -begin - result := DataTable.Fields[idx_CustomersAddress].AsWideString; -end; - -procedure TCustomersDataTableRules.SetAddressValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersAddress].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetAddressIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersAddress].IsNull; -end; - -procedure TCustomersDataTableRules.SetAddressIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersAddress].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCityValue: WideString; -begin - result := DataTable.Fields[idx_CustomersCity].AsWideString; -end; - -procedure TCustomersDataTableRules.SetCityValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersCity].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetCityIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCity].IsNull; -end; - -procedure TCustomersDataTableRules.SetCityIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCity].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetRegionValue: WideString; -begin - result := DataTable.Fields[idx_CustomersRegion].AsWideString; -end; - -procedure TCustomersDataTableRules.SetRegionValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersRegion].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetRegionIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersRegion].IsNull; -end; - -procedure TCustomersDataTableRules.SetRegionIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersRegion].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetPostalCodeValue: WideString; -begin - result := DataTable.Fields[idx_CustomersPostalCode].AsWideString; -end; - -procedure TCustomersDataTableRules.SetPostalCodeValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersPostalCode].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetPostalCodeIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersPostalCode].IsNull; -end; - -procedure TCustomersDataTableRules.SetPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersPostalCode].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCountryValue: WideString; -begin - result := DataTable.Fields[idx_CustomersCountry].AsWideString; -end; - -procedure TCustomersDataTableRules.SetCountryValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersCountry].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetCountryIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCountry].IsNull; -end; - -procedure TCustomersDataTableRules.SetCountryIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCountry].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetPhoneValue: WideString; -begin - result := DataTable.Fields[idx_CustomersPhone].AsWideString; -end; - -procedure TCustomersDataTableRules.SetPhoneValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersPhone].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetPhoneIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersPhone].IsNull; -end; - -procedure TCustomersDataTableRules.SetPhoneIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersPhone].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetFaxValue: WideString; -begin - result := DataTable.Fields[idx_CustomersFax].AsWideString; -end; - -procedure TCustomersDataTableRules.SetFaxValue(const aValue: WideString); -begin - DataTable.Fields[idx_CustomersFax].AsWideString := aValue; -end; - -function TCustomersDataTableRules.GetFaxIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersFax].IsNull; -end; - -procedure TCustomersDataTableRules.SetFaxIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersFax].AsVariant := Null; -end; - - -{ TOrdersDataTableRules } -constructor TOrdersDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TOrdersDataTableRules.Destroy; -begin - inherited; -end; - -function TOrdersDataTableRules.GetOrderIDValue: Integer; -begin - result := DataTable.Fields[idx_OrdersOrderID].AsInteger; -end; - -procedure TOrdersDataTableRules.SetOrderIDValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersOrderID].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetOrderIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersOrderID].IsNull; -end; - -procedure TOrdersDataTableRules.SetOrderIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersOrderID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetCustomerIDValue: WideString; -begin - result := DataTable.Fields[idx_OrdersCustomerID].AsWideString; -end; - -procedure TOrdersDataTableRules.SetCustomerIDValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersCustomerID].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetCustomerIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersCustomerID].IsNull; -end; - -procedure TOrdersDataTableRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersCustomerID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetEmployeeIDValue: Integer; -begin - result := DataTable.Fields[idx_OrdersEmployeeID].AsInteger; -end; - -procedure TOrdersDataTableRules.SetEmployeeIDValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersEmployeeID].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetEmployeeIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersEmployeeID].IsNull; -end; - -procedure TOrdersDataTableRules.SetEmployeeIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersEmployeeID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetOrderDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersOrderDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetOrderDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersOrderDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetOrderDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersOrderDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetOrderDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersOrderDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetRequiredDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersRequiredDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetRequiredDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersRequiredDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetRequiredDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersRequiredDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetRequiredDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersRequiredDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShippedDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersShippedDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetShippedDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersShippedDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetShippedDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShippedDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetShippedDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShippedDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipViaValue: Integer; -begin - result := DataTable.Fields[idx_OrdersShipVia].AsInteger; -end; - -procedure TOrdersDataTableRules.SetShipViaValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersShipVia].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetShipViaIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipVia].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipViaIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipVia].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetFreightValue: Float; -begin - result := DataTable.Fields[idx_OrdersFreight].AsFloat; -end; - -procedure TOrdersDataTableRules.SetFreightValue(const aValue: Float); -begin - DataTable.Fields[idx_OrdersFreight].AsFloat := aValue; -end; - -function TOrdersDataTableRules.GetFreightIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersFreight].IsNull; -end; - -procedure TOrdersDataTableRules.SetFreightIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersFreight].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipNameValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipName].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipNameValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipName].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipNameIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipName].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipName].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipAddressValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipAddress].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipAddressValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipAddress].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipAddressIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipAddress].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipAddressIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipAddress].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipCityValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipCity].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipCityValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipCity].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipCityIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipCity].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipCityIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipCity].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipRegionValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipRegion].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipRegionValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipRegion].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipRegionIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipRegion].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipRegionIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipRegion].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipPostalCodeValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipPostalCode].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipPostalCodeValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipPostalCode].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipPostalCodeIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipPostalCode].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipPostalCode].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipCountryValue: WideString; -begin - result := DataTable.Fields[idx_OrdersShipCountry].AsWideString; -end; - -procedure TOrdersDataTableRules.SetShipCountryValue(const aValue: WideString); -begin - DataTable.Fields[idx_OrdersShipCountry].AsWideString := aValue; -end; - -function TOrdersDataTableRules.GetShipCountryIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipCountry].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipCountryIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipCountry].AsVariant := Null; -end; - - -initialization - RegisterDataTableRules(RID_Customers, TCustomersDataTableRules); - RegisterDataTableRules(RID_Orders, TOrdersDataTableRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaServer_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaServer_Intf.pas deleted file mode 100644 index 8ca7acc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/SchemaServer_Intf.pas +++ /dev/null @@ -1,1168 +0,0 @@ -unit SchemaServer_Intf; - -interface - -uses - Classes, DB, SysUtils, uROClasses, uDADataTable, uDABusinessProcessor, SchemaClient_Intf; - -const - { Delta rules ids - Feel free to change them to something more human readable - but make sure they are unique in the context of your application } - RID_CustomersDelta = '{484D754F-68A9-4DC0-AADF-EBDB00C9E40F}'; - RID_OrdersDelta = '{6D8F66A7-58AC-4768-AC95-3437EABB042A}'; - -type - { ICustomersDelta } - ICustomersDelta = interface(ICustomers) - ['{484D754F-68A9-4DC0-AADF-EBDB00C9E40F}'] - { Property getters and setters } - function GetOldCustomerIDValue : WideString; - function GetOldCompanyNameValue : WideString; - function GetOldContactNameValue : WideString; - function GetOldContactTitleValue : WideString; - function GetOldAddressValue : WideString; - function GetOldCityValue : WideString; - function GetOldRegionValue : WideString; - function GetOldPostalCodeValue : WideString; - function GetOldCountryValue : WideString; - function GetOldPhoneValue : WideString; - function GetOldFaxValue : WideString; - - { Properties } - property OldCustomerID : WideString read GetOldCustomerIDValue; - property OldCompanyName : WideString read GetOldCompanyNameValue; - property OldContactName : WideString read GetOldContactNameValue; - property OldContactTitle : WideString read GetOldContactTitleValue; - property OldAddress : WideString read GetOldAddressValue; - property OldCity : WideString read GetOldCityValue; - property OldRegion : WideString read GetOldRegionValue; - property OldPostalCode : WideString read GetOldPostalCodeValue; - property OldCountry : WideString read GetOldCountryValue; - property OldPhone : WideString read GetOldPhoneValue; - property OldFax : WideString read GetOldFaxValue; - end; - - { TCustomersBusinessProcessorRules } - TCustomersBusinessProcessorRules = class(TDABusinessProcessorRules, ICustomers, ICustomersDelta) - private - protected - { Property getters and setters } - function GetCustomerIDValue: WideString; virtual; - function GetCustomerIDIsNull: Boolean; virtual; - function GetOldCustomerIDValue: WideString; virtual; - function GetOldCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDValue(const aValue: WideString); virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetCompanyNameValue: WideString; virtual; - function GetCompanyNameIsNull: Boolean; virtual; - function GetOldCompanyNameValue: WideString; virtual; - function GetOldCompanyNameIsNull: Boolean; virtual; - procedure SetCompanyNameValue(const aValue: WideString); virtual; - procedure SetCompanyNameIsNull(const aValue: Boolean); virtual; - function GetContactNameValue: WideString; virtual; - function GetContactNameIsNull: Boolean; virtual; - function GetOldContactNameValue: WideString; virtual; - function GetOldContactNameIsNull: Boolean; virtual; - procedure SetContactNameValue(const aValue: WideString); virtual; - procedure SetContactNameIsNull(const aValue: Boolean); virtual; - function GetContactTitleValue: WideString; virtual; - function GetContactTitleIsNull: Boolean; virtual; - function GetOldContactTitleValue: WideString; virtual; - function GetOldContactTitleIsNull: Boolean; virtual; - procedure SetContactTitleValue(const aValue: WideString); virtual; - procedure SetContactTitleIsNull(const aValue: Boolean); virtual; - function GetAddressValue: WideString; virtual; - function GetAddressIsNull: Boolean; virtual; - function GetOldAddressValue: WideString; virtual; - function GetOldAddressIsNull: Boolean; virtual; - procedure SetAddressValue(const aValue: WideString); virtual; - procedure SetAddressIsNull(const aValue: Boolean); virtual; - function GetCityValue: WideString; virtual; - function GetCityIsNull: Boolean; virtual; - function GetOldCityValue: WideString; virtual; - function GetOldCityIsNull: Boolean; virtual; - procedure SetCityValue(const aValue: WideString); virtual; - procedure SetCityIsNull(const aValue: Boolean); virtual; - function GetRegionValue: WideString; virtual; - function GetRegionIsNull: Boolean; virtual; - function GetOldRegionValue: WideString; virtual; - function GetOldRegionIsNull: Boolean; virtual; - procedure SetRegionValue(const aValue: WideString); virtual; - procedure SetRegionIsNull(const aValue: Boolean); virtual; - function GetPostalCodeValue: WideString; virtual; - function GetPostalCodeIsNull: Boolean; virtual; - function GetOldPostalCodeValue: WideString; virtual; - function GetOldPostalCodeIsNull: Boolean; virtual; - procedure SetPostalCodeValue(const aValue: WideString); virtual; - procedure SetPostalCodeIsNull(const aValue: Boolean); virtual; - function GetCountryValue: WideString; virtual; - function GetCountryIsNull: Boolean; virtual; - function GetOldCountryValue: WideString; virtual; - function GetOldCountryIsNull: Boolean; virtual; - procedure SetCountryValue(const aValue: WideString); virtual; - procedure SetCountryIsNull(const aValue: Boolean); virtual; - function GetPhoneValue: WideString; virtual; - function GetPhoneIsNull: Boolean; virtual; - function GetOldPhoneValue: WideString; virtual; - function GetOldPhoneIsNull: Boolean; virtual; - procedure SetPhoneValue(const aValue: WideString); virtual; - procedure SetPhoneIsNull(const aValue: Boolean); virtual; - function GetFaxValue: WideString; virtual; - function GetFaxIsNull: Boolean; virtual; - function GetOldFaxValue: WideString; virtual; - function GetOldFaxIsNull: Boolean; virtual; - procedure SetFaxValue(const aValue: WideString); virtual; - procedure SetFaxIsNull(const aValue: Boolean); virtual; - - { Properties } - property CustomerID : WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull : Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property OldCustomerID : WideString read GetOldCustomerIDValue; - property OldCustomerIDIsNull : Boolean read GetOldCustomerIDIsNull; - property CompanyName : WideString read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull : Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property OldCompanyName : WideString read GetOldCompanyNameValue; - property OldCompanyNameIsNull : Boolean read GetOldCompanyNameIsNull; - property ContactName : WideString read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull : Boolean read GetContactNameIsNull write SetContactNameIsNull; - property OldContactName : WideString read GetOldContactNameValue; - property OldContactNameIsNull : Boolean read GetOldContactNameIsNull; - property ContactTitle : WideString read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull : Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property OldContactTitle : WideString read GetOldContactTitleValue; - property OldContactTitleIsNull : Boolean read GetOldContactTitleIsNull; - property Address : WideString read GetAddressValue write SetAddressValue; - property AddressIsNull : Boolean read GetAddressIsNull write SetAddressIsNull; - property OldAddress : WideString read GetOldAddressValue; - property OldAddressIsNull : Boolean read GetOldAddressIsNull; - property City : WideString read GetCityValue write SetCityValue; - property CityIsNull : Boolean read GetCityIsNull write SetCityIsNull; - property OldCity : WideString read GetOldCityValue; - property OldCityIsNull : Boolean read GetOldCityIsNull; - property Region : WideString read GetRegionValue write SetRegionValue; - property RegionIsNull : Boolean read GetRegionIsNull write SetRegionIsNull; - property OldRegion : WideString read GetOldRegionValue; - property OldRegionIsNull : Boolean read GetOldRegionIsNull; - property PostalCode : WideString read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull : Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property OldPostalCode : WideString read GetOldPostalCodeValue; - property OldPostalCodeIsNull : Boolean read GetOldPostalCodeIsNull; - property Country : WideString read GetCountryValue write SetCountryValue; - property CountryIsNull : Boolean read GetCountryIsNull write SetCountryIsNull; - property OldCountry : WideString read GetOldCountryValue; - property OldCountryIsNull : Boolean read GetOldCountryIsNull; - property Phone : WideString read GetPhoneValue write SetPhoneValue; - property PhoneIsNull : Boolean read GetPhoneIsNull write SetPhoneIsNull; - property OldPhone : WideString read GetOldPhoneValue; - property OldPhoneIsNull : Boolean read GetOldPhoneIsNull; - property Fax : WideString read GetFaxValue write SetFaxValue; - property FaxIsNull : Boolean read GetFaxIsNull write SetFaxIsNull; - property OldFax : WideString read GetOldFaxValue; - property OldFaxIsNull : Boolean read GetOldFaxIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - - { IOrdersDelta } - IOrdersDelta = interface(IOrders) - ['{6D8F66A7-58AC-4768-AC95-3437EABB042A}'] - { Property getters and setters } - function GetOldOrderIDValue : Integer; - function GetOldCustomerIDValue : WideString; - function GetOldEmployeeIDValue : Integer; - function GetOldOrderDateValue : DateTime; - function GetOldRequiredDateValue : DateTime; - function GetOldShippedDateValue : DateTime; - function GetOldShipViaValue : Integer; - function GetOldFreightValue : Float; - function GetOldShipNameValue : WideString; - function GetOldShipAddressValue : WideString; - function GetOldShipCityValue : WideString; - function GetOldShipRegionValue : WideString; - function GetOldShipPostalCodeValue : WideString; - function GetOldShipCountryValue : WideString; - - { Properties } - property OldOrderID : Integer read GetOldOrderIDValue; - property OldCustomerID : WideString read GetOldCustomerIDValue; - property OldEmployeeID : Integer read GetOldEmployeeIDValue; - property OldOrderDate : DateTime read GetOldOrderDateValue; - property OldRequiredDate : DateTime read GetOldRequiredDateValue; - property OldShippedDate : DateTime read GetOldShippedDateValue; - property OldShipVia : Integer read GetOldShipViaValue; - property OldFreight : Float read GetOldFreightValue; - property OldShipName : WideString read GetOldShipNameValue; - property OldShipAddress : WideString read GetOldShipAddressValue; - property OldShipCity : WideString read GetOldShipCityValue; - property OldShipRegion : WideString read GetOldShipRegionValue; - property OldShipPostalCode : WideString read GetOldShipPostalCodeValue; - property OldShipCountry : WideString read GetOldShipCountryValue; - end; - - { TOrdersBusinessProcessorRules } - TOrdersBusinessProcessorRules = class(TDABusinessProcessorRules, IOrders, IOrdersDelta) - private - protected - { Property getters and setters } - function GetOrderIDValue: Integer; virtual; - function GetOrderIDIsNull: Boolean; virtual; - function GetOldOrderIDValue: Integer; virtual; - function GetOldOrderIDIsNull: Boolean; virtual; - procedure SetOrderIDValue(const aValue: Integer); virtual; - procedure SetOrderIDIsNull(const aValue: Boolean); virtual; - function GetCustomerIDValue: WideString; virtual; - function GetCustomerIDIsNull: Boolean; virtual; - function GetOldCustomerIDValue: WideString; virtual; - function GetOldCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDValue(const aValue: WideString); virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetEmployeeIDValue: Integer; virtual; - function GetEmployeeIDIsNull: Boolean; virtual; - function GetOldEmployeeIDValue: Integer; virtual; - function GetOldEmployeeIDIsNull: Boolean; virtual; - procedure SetEmployeeIDValue(const aValue: Integer); virtual; - procedure SetEmployeeIDIsNull(const aValue: Boolean); virtual; - function GetOrderDateValue: DateTime; virtual; - function GetOrderDateIsNull: Boolean; virtual; - function GetOldOrderDateValue: DateTime; virtual; - function GetOldOrderDateIsNull: Boolean; virtual; - procedure SetOrderDateValue(const aValue: DateTime); virtual; - procedure SetOrderDateIsNull(const aValue: Boolean); virtual; - function GetRequiredDateValue: DateTime; virtual; - function GetRequiredDateIsNull: Boolean; virtual; - function GetOldRequiredDateValue: DateTime; virtual; - function GetOldRequiredDateIsNull: Boolean; virtual; - procedure SetRequiredDateValue(const aValue: DateTime); virtual; - procedure SetRequiredDateIsNull(const aValue: Boolean); virtual; - function GetShippedDateValue: DateTime; virtual; - function GetShippedDateIsNull: Boolean; virtual; - function GetOldShippedDateValue: DateTime; virtual; - function GetOldShippedDateIsNull: Boolean; virtual; - procedure SetShippedDateValue(const aValue: DateTime); virtual; - procedure SetShippedDateIsNull(const aValue: Boolean); virtual; - function GetShipViaValue: Integer; virtual; - function GetShipViaIsNull: Boolean; virtual; - function GetOldShipViaValue: Integer; virtual; - function GetOldShipViaIsNull: Boolean; virtual; - procedure SetShipViaValue(const aValue: Integer); virtual; - procedure SetShipViaIsNull(const aValue: Boolean); virtual; - function GetFreightValue: Float; virtual; - function GetFreightIsNull: Boolean; virtual; - function GetOldFreightValue: Float; virtual; - function GetOldFreightIsNull: Boolean; virtual; - procedure SetFreightValue(const aValue: Float); virtual; - procedure SetFreightIsNull(const aValue: Boolean); virtual; - function GetShipNameValue: WideString; virtual; - function GetShipNameIsNull: Boolean; virtual; - function GetOldShipNameValue: WideString; virtual; - function GetOldShipNameIsNull: Boolean; virtual; - procedure SetShipNameValue(const aValue: WideString); virtual; - procedure SetShipNameIsNull(const aValue: Boolean); virtual; - function GetShipAddressValue: WideString; virtual; - function GetShipAddressIsNull: Boolean; virtual; - function GetOldShipAddressValue: WideString; virtual; - function GetOldShipAddressIsNull: Boolean; virtual; - procedure SetShipAddressValue(const aValue: WideString); virtual; - procedure SetShipAddressIsNull(const aValue: Boolean); virtual; - function GetShipCityValue: WideString; virtual; - function GetShipCityIsNull: Boolean; virtual; - function GetOldShipCityValue: WideString; virtual; - function GetOldShipCityIsNull: Boolean; virtual; - procedure SetShipCityValue(const aValue: WideString); virtual; - procedure SetShipCityIsNull(const aValue: Boolean); virtual; - function GetShipRegionValue: WideString; virtual; - function GetShipRegionIsNull: Boolean; virtual; - function GetOldShipRegionValue: WideString; virtual; - function GetOldShipRegionIsNull: Boolean; virtual; - procedure SetShipRegionValue(const aValue: WideString); virtual; - procedure SetShipRegionIsNull(const aValue: Boolean); virtual; - function GetShipPostalCodeValue: WideString; virtual; - function GetShipPostalCodeIsNull: Boolean; virtual; - function GetOldShipPostalCodeValue: WideString; virtual; - function GetOldShipPostalCodeIsNull: Boolean; virtual; - procedure SetShipPostalCodeValue(const aValue: WideString); virtual; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); virtual; - function GetShipCountryValue: WideString; virtual; - function GetShipCountryIsNull: Boolean; virtual; - function GetOldShipCountryValue: WideString; virtual; - function GetOldShipCountryIsNull: Boolean; virtual; - procedure SetShipCountryValue(const aValue: WideString); virtual; - procedure SetShipCountryIsNull(const aValue: Boolean); virtual; - - { Properties } - property OrderID : Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull : Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property OldOrderID : Integer read GetOldOrderIDValue; - property OldOrderIDIsNull : Boolean read GetOldOrderIDIsNull; - property CustomerID : WideString read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull : Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property OldCustomerID : WideString read GetOldCustomerIDValue; - property OldCustomerIDIsNull : Boolean read GetOldCustomerIDIsNull; - property EmployeeID : Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull : Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OldEmployeeID : Integer read GetOldEmployeeIDValue; - property OldEmployeeIDIsNull : Boolean read GetOldEmployeeIDIsNull; - property OrderDate : DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull : Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property OldOrderDate : DateTime read GetOldOrderDateValue; - property OldOrderDateIsNull : Boolean read GetOldOrderDateIsNull; - property RequiredDate : DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull : Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property OldRequiredDate : DateTime read GetOldRequiredDateValue; - property OldRequiredDateIsNull : Boolean read GetOldRequiredDateIsNull; - property ShippedDate : DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull : Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property OldShippedDate : DateTime read GetOldShippedDateValue; - property OldShippedDateIsNull : Boolean read GetOldShippedDateIsNull; - property ShipVia : Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull : Boolean read GetShipViaIsNull write SetShipViaIsNull; - property OldShipVia : Integer read GetOldShipViaValue; - property OldShipViaIsNull : Boolean read GetOldShipViaIsNull; - property Freight : Float read GetFreightValue write SetFreightValue; - property FreightIsNull : Boolean read GetFreightIsNull write SetFreightIsNull; - property OldFreight : Float read GetOldFreightValue; - property OldFreightIsNull : Boolean read GetOldFreightIsNull; - property ShipName : WideString read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull : Boolean read GetShipNameIsNull write SetShipNameIsNull; - property OldShipName : WideString read GetOldShipNameValue; - property OldShipNameIsNull : Boolean read GetOldShipNameIsNull; - property ShipAddress : WideString read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull : Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property OldShipAddress : WideString read GetOldShipAddressValue; - property OldShipAddressIsNull : Boolean read GetOldShipAddressIsNull; - property ShipCity : WideString read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull : Boolean read GetShipCityIsNull write SetShipCityIsNull; - property OldShipCity : WideString read GetOldShipCityValue; - property OldShipCityIsNull : Boolean read GetOldShipCityIsNull; - property ShipRegion : WideString read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull : Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property OldShipRegion : WideString read GetOldShipRegionValue; - property OldShipRegionIsNull : Boolean read GetOldShipRegionIsNull; - property ShipPostalCode : WideString read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull : Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property OldShipPostalCode : WideString read GetOldShipPostalCodeValue; - property OldShipPostalCodeIsNull : Boolean read GetOldShipPostalCodeIsNull; - property ShipCountry : WideString read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull : Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - property OldShipCountry : WideString read GetOldShipCountryValue; - property OldShipCountryIsNull : Boolean read GetOldShipCountryIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - -implementation - -uses - Variants, uROBinaryHelpers; - -{ TCustomersBusinessProcessorRules } -constructor TCustomersBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TCustomersBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TCustomersBusinessProcessorRules.GetCustomerIDValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID]; -end; - -function TCustomersBusinessProcessorRules.GetCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID]); -end; - -function TCustomersBusinessProcessorRules.GetOldCustomerIDValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCustomerID]; -end; - -function TCustomersBusinessProcessorRules.GetOldCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCustomerID]); -end; - -procedure TCustomersBusinessProcessorRules.SetCustomerIDValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCompanyNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName]; -end; - -function TCustomersBusinessProcessorRules.GetCompanyNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName]); -end; - -function TCustomersBusinessProcessorRules.GetOldCompanyNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCompanyName]; -end; - -function TCustomersBusinessProcessorRules.GetOldCompanyNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCompanyName]); -end; - -procedure TCustomersBusinessProcessorRules.SetCompanyNameValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCompanyNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName] := Null; -end; - -function TCustomersBusinessProcessorRules.GetContactNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName]; -end; - -function TCustomersBusinessProcessorRules.GetContactNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName]); -end; - -function TCustomersBusinessProcessorRules.GetOldContactNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactName]; -end; - -function TCustomersBusinessProcessorRules.GetOldContactNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactName]); -end; - -procedure TCustomersBusinessProcessorRules.SetContactNameValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetContactNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName] := Null; -end; - -function TCustomersBusinessProcessorRules.GetContactTitleValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle]; -end; - -function TCustomersBusinessProcessorRules.GetContactTitleIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle]); -end; - -function TCustomersBusinessProcessorRules.GetOldContactTitleValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactTitle]; -end; - -function TCustomersBusinessProcessorRules.GetOldContactTitleIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactTitle]); -end; - -procedure TCustomersBusinessProcessorRules.SetContactTitleValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetContactTitleIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle] := Null; -end; - -function TCustomersBusinessProcessorRules.GetAddressValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress]; -end; - -function TCustomersBusinessProcessorRules.GetAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress]); -end; - -function TCustomersBusinessProcessorRules.GetOldAddressValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersAddress]; -end; - -function TCustomersBusinessProcessorRules.GetOldAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersAddress]); -end; - -procedure TCustomersBusinessProcessorRules.SetAddressValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetAddressIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCityValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity]; -end; - -function TCustomersBusinessProcessorRules.GetCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity]); -end; - -function TCustomersBusinessProcessorRules.GetOldCityValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCity]; -end; - -function TCustomersBusinessProcessorRules.GetOldCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCity]); -end; - -procedure TCustomersBusinessProcessorRules.SetCityValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCityIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity] := Null; -end; - -function TCustomersBusinessProcessorRules.GetRegionValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion]; -end; - -function TCustomersBusinessProcessorRules.GetRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion]); -end; - -function TCustomersBusinessProcessorRules.GetOldRegionValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersRegion]; -end; - -function TCustomersBusinessProcessorRules.GetOldRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersRegion]); -end; - -procedure TCustomersBusinessProcessorRules.SetRegionValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetRegionIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion] := Null; -end; - -function TCustomersBusinessProcessorRules.GetPostalCodeValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode]; -end; - -function TCustomersBusinessProcessorRules.GetPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode]); -end; - -function TCustomersBusinessProcessorRules.GetOldPostalCodeValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPostalCode]; -end; - -function TCustomersBusinessProcessorRules.GetOldPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPostalCode]); -end; - -procedure TCustomersBusinessProcessorRules.SetPostalCodeValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCountryValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry]; -end; - -function TCustomersBusinessProcessorRules.GetCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry]); -end; - -function TCustomersBusinessProcessorRules.GetOldCountryValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCountry]; -end; - -function TCustomersBusinessProcessorRules.GetOldCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCountry]); -end; - -procedure TCustomersBusinessProcessorRules.SetCountryValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCountryIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry] := Null; -end; - -function TCustomersBusinessProcessorRules.GetPhoneValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone]; -end; - -function TCustomersBusinessProcessorRules.GetPhoneIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone]); -end; - -function TCustomersBusinessProcessorRules.GetOldPhoneValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPhone]; -end; - -function TCustomersBusinessProcessorRules.GetOldPhoneIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPhone]); -end; - -procedure TCustomersBusinessProcessorRules.SetPhoneValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetPhoneIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone] := Null; -end; - -function TCustomersBusinessProcessorRules.GetFaxValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax]; -end; - -function TCustomersBusinessProcessorRules.GetFaxIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax]); -end; - -function TCustomersBusinessProcessorRules.GetOldFaxValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersFax]; -end; - -function TCustomersBusinessProcessorRules.GetOldFaxIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersFax]); -end; - -procedure TCustomersBusinessProcessorRules.SetFaxValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetFaxIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax] := Null; -end; - - -{ TOrdersBusinessProcessorRules } -constructor TOrdersBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TOrdersBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TOrdersBusinessProcessorRules.GetOrderIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID]; -end; - -function TOrdersBusinessProcessorRules.GetOrderIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID]); -end; - -function TOrdersBusinessProcessorRules.GetOldOrderIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderID]; -end; - -function TOrdersBusinessProcessorRules.GetOldOrderIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderID]); -end; - -procedure TOrdersBusinessProcessorRules.SetOrderIDValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetOrderIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetCustomerIDValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID]; -end; - -function TOrdersBusinessProcessorRules.GetCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID]); -end; - -function TOrdersBusinessProcessorRules.GetOldCustomerIDValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersCustomerID]; -end; - -function TOrdersBusinessProcessorRules.GetOldCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersCustomerID]); -end; - -procedure TOrdersBusinessProcessorRules.SetCustomerIDValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetEmployeeIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID]; -end; - -function TOrdersBusinessProcessorRules.GetEmployeeIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID]); -end; - -function TOrdersBusinessProcessorRules.GetOldEmployeeIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersEmployeeID]; -end; - -function TOrdersBusinessProcessorRules.GetOldEmployeeIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersEmployeeID]); -end; - -procedure TOrdersBusinessProcessorRules.SetEmployeeIDValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetEmployeeIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetOrderDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate]; -end; - -function TOrdersBusinessProcessorRules.GetOrderDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldOrderDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldOrderDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetOrderDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetOrderDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetRequiredDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate]; -end; - -function TOrdersBusinessProcessorRules.GetRequiredDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldRequiredDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersRequiredDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldRequiredDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersRequiredDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetRequiredDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetRequiredDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShippedDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate]; -end; - -function TOrdersBusinessProcessorRules.GetShippedDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldShippedDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShippedDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldShippedDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShippedDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetShippedDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShippedDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipViaValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia]; -end; - -function TOrdersBusinessProcessorRules.GetShipViaIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipViaValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipVia]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipViaIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipVia]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipViaValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipViaIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia] := Null; -end; - -function TOrdersBusinessProcessorRules.GetFreightValue: Float; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight]; -end; - -function TOrdersBusinessProcessorRules.GetFreightIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight]); -end; - -function TOrdersBusinessProcessorRules.GetOldFreightValue: Float; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersFreight]; -end; - -function TOrdersBusinessProcessorRules.GetOldFreightIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersFreight]); -end; - -procedure TOrdersBusinessProcessorRules.SetFreightValue(const aValue: Float); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetFreightIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName]; -end; - -function TOrdersBusinessProcessorRules.GetShipNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipNameValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipName]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipName]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipNameValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipAddressValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress]; -end; - -function TOrdersBusinessProcessorRules.GetShipAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipAddressValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipAddress]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipAddress]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipAddressValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipAddressIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipCityValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity]; -end; - -function TOrdersBusinessProcessorRules.GetShipCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipCityValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCity]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCity]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipCityValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipCityIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipRegionValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion]; -end; - -function TOrdersBusinessProcessorRules.GetShipRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipRegionValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipRegion]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipRegion]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipRegionValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipRegionIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipPostalCodeValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode]; -end; - -function TOrdersBusinessProcessorRules.GetShipPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipPostalCodeValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipPostalCode]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipPostalCode]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipPostalCodeValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipCountryValue: WideString; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry]; -end; - -function TOrdersBusinessProcessorRules.GetShipCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipCountryValue: WideString; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCountry]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCountry]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipCountryValue(const aValue: WideString); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipCountryIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry] := Null; -end; - - -initialization - RegisterBusinessProcessorRules(RID_CustomersDelta, TCustomersBusinessProcessorRules); - RegisterBusinessProcessorRules(RID_OrdersDelta, TOrdersBusinessProcessorRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/ServerGlobal.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/ServerGlobal.pas deleted file mode 100644 index 2bbee06..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Processor/ServerGlobal.pas +++ /dev/null @@ -1,15 +0,0 @@ -unit ServerGlobal; - -interface -var - gCompany: string = 'Company'; - gCompanyCheck: Boolean = True; - gFreightCheck: Boolean = True; - gFreight: integer = 20; - gDeclineDeleteCustomers: Boolean = True; - gDeclineDeleteOrders: Boolean = True; - gCheckCustomerID: Boolean = True; -implementation - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.Sample.html deleted file mode 100644 index 5e87368..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.Sample.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - -

- BusinessRulesScripts -

- - -

Purpose

-

- This example demonstrates how client side scripts can be modified on the server - and then downloaded to the client via a simple call. -

-

- When you compile and launch the server, it displays a memo containing various client - side rules executed within event handlers such as BeforePost. -

-

- You can test it by compiling and launching the client. Try deleting an - item with a gain > 90, for example. -

-

- Next modify the server memo and click Refresh Scripts from Server - to see that your change has been actioned. -

-

- Note how the strong typing allows simple reference to field names, thus - making script changes as simple as possible. -

- - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bdsgroup deleted file mode 100644 index 2245049..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - BusinessRulesScripts_Server.bdsproj - BusinessRulesScripts_Client.bdsproj - BusinessRulesScripts_Server.exe BusinessRulesScripts_Client.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bpg deleted file mode 100644 index 12ab893..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = BusinessRulesScripts_Server.exe BusinessRulesScripts_Client.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -BusinessRulesScripts_Server.exe: BusinessRulesScripts_Server.dpr - $(DCC) - -BusinessRulesScripts_Client.exe: BusinessRulesScripts_Client.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.groupproj deleted file mode 100644 index 181c87d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {d1f18c23-83b8-4d53-bd98-adcf9fdf1af0} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary.rodl deleted file mode 100644 index 003f8dc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary.rodl +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Intf.pas deleted file mode 100644 index 11fa2f4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Intf.pas +++ /dev/null @@ -1,95 +0,0 @@ -unit BusinessRulesScriptsLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{E97481D6-EA65-4F8F-8CB0-128A20DA2B2C}'; - - { Service Interface ID's } - INewService_IID : TGUID = '{25DCCAE5-CA08-41B5-8DFC-03C4E548FE33}'; - - { Event ID's } - -type - { Forward declarations } - INewService = interface; - - - - - { INewService } - INewService = interface(IDataAbstractService) - ['{25DCCAE5-CA08-41B5-8DFC-03C4E548FE33}'] - function GetDatasetScripts(const DatasetNames: String): String; - end; - - { CoNewService } - CoNewService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; - end; - - { TNewService_Proxy } - TNewService_Proxy = class(TDataAbstractService_Proxy, INewService) - protected - function __GetInterfaceName:string; override; - - function GetDatasetScripts(const DatasetNames: String): String; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoNewService } - -class function CoNewService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; -begin - result := TNewService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TNewService_Proxy } - -function TNewService_Proxy.__GetInterfaceName:string; -begin - result := 'NewService'; -end; - -function TNewService_Proxy.GetDatasetScripts(const DatasetNames: String): String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'BusinessRulesScriptsLibrary', __InterfaceName, 'GetDatasetScripts'); - __Message.Write('DatasetNames', TypeInfo(String), DatasetNames, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(String), result, []); - finally - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(INewService_IID, TNewService_Proxy); - - -finalization - UnregisterProxyClass(INewService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Invk.pas deleted file mode 100644 index 07c636c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScriptsLibrary_Invk.pas +++ /dev/null @@ -1,54 +0,0 @@ -unit BusinessRulesScriptsLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} BusinessRulesScriptsLibrary_Intf; - -type - TNewService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TNewService_Invoker } - -procedure TNewService_Invoker.Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetScripts(const DatasetNames: String): String; } -var - DatasetNames: String; - lResult: String; -begin - try - __Message.Read('DatasetNames', TypeInfo(String), DatasetNames, []); - - lResult := (__Instance as INewService).GetDatasetScripts(DatasetNames); - - __Message.InitializeResponseMessage(__Transport, 'BusinessRulesScriptsLibrary', 'NewService', 'GetDatasetScriptsResponse'); - __Message.Write('Result', TypeInfo(String), lResult, []); - __Message.Finalize; - - finally - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.bdsproj deleted file mode 100644 index 3727fb3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BusinessRulesScripts_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dpr deleted file mode 100644 index 49b86b7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program BusinessRulesScripts_Client; - -uses - uROComInit, - Forms, - BusinessRulesScripts_ClientMain in 'BusinessRulesScripts_ClientMain.pas' {BusinessRulesScripts_ClientMainForm}, - BusinessRulesScripts_ClientData in 'BusinessRulesScripts_ClientData.pas' {BusinessRulesScripts_ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'BusinessRulesScripts Client'; - Application.CreateForm(TBusinessRulesScripts_ClientDataModule, BusinessRulesScripts_ClientDataModule); - Application.CreateForm(TBusinessRulesScripts_ClientMainForm, BusinessRulesScripts_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dproj deleted file mode 100644 index 71f4c0d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {d6188ece-37af-4464-a5cb-347a71598f81} - BusinessRulesScripts_Client.dpr - Debug - AnyCPU - DCC32 - BusinessRulesScripts_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BusinessRulesScripts_Client.dpr - - - - - - - MainSource - - -
BusinessRulesScripts_ClientDataModule
-
- -
BusinessRulesScripts_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.dfm deleted file mode 100644 index f4415e5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.dfm +++ /dev/null @@ -1,386 +0,0 @@ -object BusinessRulesScripts_ClientDataModule: TBusinessRulesScripts_ClientDataModule - OldCreateOrder = True - Left = 447 - Top = 246 - Height = 382 - Width = 300 - object ROChannel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 40 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = 'NewService' - Left = 41 - Top = 96 - end - object BinDataStreamer: TDABinDataStreamer - Left = 40 - Top = 142 - end - object dtProducts: TDACDSDataTable - ScriptingProvider = DAPSScriptingProvider - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'SupplierID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'QuantityPerUnit' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsInStock' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsOnOrder' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReorderLevel' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discontinued' - DataType = datBoolean - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Gain' - DataType = datFloat - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = True - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soIgnoreStreamSchema, soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Products' - IndexDefs = <> - Left = 128 - Top = 160 - end - object dsProducts: TDADataSource - DataSet = dtProducts.Dataset - DataTable = dtProducts - Left = 127 - Top = 187 - end - object DAPSScriptingProvider: TDAPSScriptingProvider - ScriptEngine.CompilerOptions = [icAllowNoBegin, icAllowNoEnd, icBooleanShortCircuit] - ScriptEngine.Plugins = < - item - Plugin = DAPSScriptingProvider.PluginClasses - end - item - Plugin = DAPSScriptingProvider.PluginDB - end - item - Plugin = DAPSScriptingProvider.PluginDateUtils - end> - ScriptEngine.UsePreProcessor = False - Left = 128 - Top = 256 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - Value = Null - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - Value = Null - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RemoteService - GetDataCall.MethodName = 'GetData' - GetDataCall.Params = < - item - Name = 'aTableNameArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'StringArray' - Value = Null - end - item - Name = 'aTableRequestInfoArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'TableRequestInfoArray' - Value = Null - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RemoteService - UpdateDataCall.MethodName = 'UpdateData' - UpdateDataCall.Params = < - item - Name = 'aDelta' - DataType = rtBinary - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'aDelta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RemoteService - GetScriptsCall.MethodName = 'GetDatasetScripts' - GetScriptsCall.Params = < - item - Name = 'Result' - DataType = rtString - Flag = fResult - end - item - Name = 'DatasetNames' - DataType = rtString - Flag = fIn - Value = Null - end> - GetScriptsCall.Default = False - GetScriptsCall.OutgoingTableNamesParameter = 'DatasetNames' - GetScriptsCall.IncomingScriptParameter = 'Result' - RemoteService = RemoteService - DataStreamer = BinDataStreamer - AutoFillScripts = True - Left = 128 - Top = 103 - end - object dtOrderDetails: TDACDSDataTable - ScriptingProvider = DAPSScriptingProvider - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductName' - DataType = datString - Size = 50 - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = True - LookupSource = dsProducts - LookupKeyFields = 'ProductID' - LookupResultField = 'ProductName' - KeyFields = 'ProductID' - LookupCache = True - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Visible = False - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayFormat = '0.##' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Gain' - DataType = datFloat - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - DisplayFormat = '0.##' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = True - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soIgnoreStreamSchema, soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'OrderDetails' - IndexDefs = <> - Left = 157 - Top = 159 - end - object dsOrderDetails: TDADataSource - DataSet = dtOrderDetails.Dataset - DataTable = dtOrderDetails - Left = 158 - Top = 188 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.pas deleted file mode 100644 index 3a2634c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientData.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit BusinessRulesScripts_ClientData; - -interface - -uses {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDAScriptingProvider, uDACDSDataTable, - uDAPSScriptingProvider, uDADataStreamer, uDARemoteDataAdapter; - -type - TBusinessRulesScripts_ClientDataModule = class(TDataModule) - ROMessage: TROBinMessage; - ROChannel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - BinDataStreamer: TDABinDataStreamer; - dtProducts: TDACDSDataTable; - dsProducts: TDADataSource; - DAPSScriptingProvider: TDAPSScriptingProvider; - RemoteDataAdapter: TDARemoteDataAdapter; - dtOrderDetails: TDACDSDataTable; - dsOrderDetails: TDADataSource; - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessRulesScripts_ClientDataModule: TBusinessRulesScripts_ClientDataModule; - -implementation - -{$R *.dfm} - -initialization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.dfm deleted file mode 100644 index 09aec1d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.dfm +++ /dev/null @@ -1,79 +0,0 @@ -object BusinessRulesScripts_ClientMainForm: TBusinessRulesScripts_ClientMainForm - Left = 163 - Top = 30 - AutoScroll = False - BorderWidth = 5 - Caption = 'Business Rules Script Client' - ClientHeight = 316 - ClientWidth = 565 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object BitBtn1: TBitBtn - Left = 0 - Top = 0 - Width = 169 - Height = 25 - Caption = 'Refresh Scripts from Server' - TabOrder = 0 - OnClick = BitBtn1Click - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFA467698E5D598E5D598E5D598E5D598E5D598E - 5D598E5D598E5D598E5D598E5D598E5D5980504BFF00FFFF00FFFF00FFA46769 - FCEACEF3DABCF2D5B1F0D0A7EECB9EEDC793EDC28BE9BD81E9BD7FE9BD7FEFC4 - 8180504BFF00FFFF00FFFF00FFA0675BFEEFDAF6E0C6F2DABCF2D5B2C1C18800 - 7000007000BDB672E9BD82E9BD7FEFC48180504BFF00FFFF00FFFF00FFA0675B - FFF4E5F7E5CF007000C4CA97007000C2C187C0BD80007000BDB66FEABF81EFC4 - 8080504BFF00FFFF00FFFF00FFA7756BFFFBF0F8EADC007000007000C4C998F2 - D5B1F0D0A9BFBD80007000EBC28AEFC58380504BFF00FFFF00FFFF00FFA7756B - FFFFFCFAF0E6007000007000007000F2DABAF2D5B1F0D0A7EECB9DEBC793F2C9 - 8C80504BFF00FFFF00FFFF00FFBC8268FFFFFFFEF7F2FAEFE6F8EAD9F7E3CFF6 - E0C5007000007000007000EECC9EF3CE9780504BFF00FFFF00FFFF00FFBC8268 - FFFFFFFFFEFC007000CADABAF7EADAF6E3CFC5CE9F007000007000F0D0A6F6D3 - A080504BFF00FFFF00FFFF00FFD1926DFFFFFFFFFFFFCEE7CC007000CADAB8C9 - D7B0007000C6CC9E007000F4D8B1EBCFA480504BFF00FFFF00FFFF00FFD1926D - FFFFFFFFFFFFFFFFFFCEE7CC007000007000C9D5B0F8E7D1FBEACEDECEB4B6AA - 9380504BFF00FFFF00FFFF00FFDA9D75FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFC - F6EFFCF3E6EDD8C9A0675BA0675BA0675BA0675BFF00FFFF00FFFF00FFDA9D75 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFFFEF7DAC1BAA0675BE19E55E68F - 31B56D4DFF00FFFF00FFFF00FFE7AB79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFDCC7C5A0675BF8B55CBF7A5CFF00FFFF00FFFF00FFFF00FFE7AB79 - FBF4F0FBF4EFFAF3EFFAF3EFF8F2EFF7F2EFF7F2EFD8C2C0A0675BC1836CFF00 - FFFF00FFFF00FFFF00FFFF00FFE7AB79CF8E68CF8E68CF8E68CF8E68CF8E68CF - 8E68CF8E68CF8E68A0675BFF00FFFF00FFFF00FFFF00FFFF00FF} - end - object gOrderDetails: TDBGrid - Left = 0 - Top = 33 - Width = 565 - Height = 283 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = BusinessRulesScripts_ClientDataModule.dsOrderDetails - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'Tahoma' - TitleFont.Style = [] - end - object DBNavigator1: TDBNavigator - Left = 176 - Top = 0 - Width = 370 - Height = 25 - DataSource = BusinessRulesScripts_ClientDataModule.dsOrderDetails - TabOrder = 2 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.pas deleted file mode 100644 index 61142e6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ClientMain.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit BusinessRulesScripts_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROIndyHTTPChannel, - Buttons, ExtCtrls, DBCtrls, Grids, DBGrids; - -type - TBusinessRulesScripts_ClientMainForm = class(TForm) - BitBtn1: TBitBtn; - gOrderDetails: TDBGrid; - DBNavigator1: TDBNavigator; - procedure BitBtn1Click(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessRulesScripts_ClientMainForm: TBusinessRulesScripts_ClientMainForm; - -implementation - -uses - BusinessRulesScripts_ClientData; - -{$R *.dfm} - -procedure TBusinessRulesScripts_ClientMainForm.BitBtn1Click(Sender: TObject); -begin - BusinessRulesScripts_ClientDataModule.dtOrderDetails.LoadScript(); - gOrderDetails.Refresh(); -end; - -procedure TBusinessRulesScripts_ClientMainForm.FormCreate(Sender: TObject); -begin - BusinessRulesScripts_ClientDataModule.dtOrderDetails.Open(); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.bdsproj deleted file mode 100644 index 98c5c99..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - BusinessRulesScripts_Server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dpr deleted file mode 100644 index 22834ce..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dpr +++ /dev/null @@ -1,23 +0,0 @@ -program BusinessRulesScripts_Server; - -{#ROGEN:BusinessRulesScriptsLibrary.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Forms, - BusinessRulesScripts_ServerMain in 'BusinessRulesScripts_ServerMain.pas' {BusinessRulesScripts_ServerMainForm}, - BusinessRulesScripts_ServerData in 'BusinessRulesScripts_ServerData.pas' {BusinessRulesScripts_ServerDataModule: TDataModule}, - BusinessRulesScriptsLibrary_Intf in 'BusinessRulesScriptsLibrary_Intf.pas', - BusinessRulesScriptsLibrary_Invk in 'BusinessRulesScriptsLibrary_Invk.pas', - NewService_Impl in 'NewService_Impl.pas' {NewService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'BusinessRulesScripts Server'; - Application.CreateForm(TBusinessRulesScripts_ServerDataModule, BusinessRulesScripts_ServerDataModule); - Application.CreateForm(TBusinessRulesScripts_ServerMainForm, BusinessRulesScripts_ServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dproj deleted file mode 100644 index bffa2c6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {61f4e143-e541-455f-bfd4-108c7175e3aa} - BusinessRulesScripts_Server.dpr - Debug - AnyCPU - DCC32 - BusinessRulesScripts_Server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - BusinessRulesScripts_Server.dpr - - - - - - - MainSource - - - - -
BusinessRulesScripts_ServerDataModule
-
- -
BusinessRulesScripts_ServerMainForm
-
- -
NewService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_Server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.dfm deleted file mode 100644 index dbfce7f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.dfm +++ /dev/null @@ -1,337 +0,0 @@ -object BusinessRulesScripts_ServerDataModule: TBusinessRulesScripts_ServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 340 - Top = 54 - Height = 399 - Width = 342 - object ROServer: TROIndyHTTPServer - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object Schema: TDASchema - ConnectionManager = ConnectionManager - DataDictionary = DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Products' - SQL = - 'SELECT '#10' ProductID, ProductName, SupplierID, CategoryID, Quan' + - 'tityPerUnit, '#10' UnitPrice, UnitsInStock, UnitsOnOrder, Reorder' + - 'Level, '#10' Discontinued'#10' FROM'#10' Products' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'ProductName' - TableField = 'ProductName' - end - item - DatasetField = 'SupplierID' - TableField = 'SupplierID' - end - item - DatasetField = 'CategoryID' - TableField = 'CategoryID' - end - item - DatasetField = 'QuantityPerUnit' - TableField = 'QuantityPerUnit' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'UnitsInStock' - TableField = 'UnitsInStock' - end - item - DatasetField = 'UnitsOnOrder' - TableField = 'UnitsOnOrder' - end - item - DatasetField = 'ReorderLevel' - TableField = 'ReorderLevel' - end - item - DatasetField = 'Discontinued' - TableField = 'Discontinued' - end> - end> - Name = 'Products' - Fields = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'SupplierID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'QuantityPerUnit' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsInStock' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsOnOrder' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReorderLevel' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discontinued' - DataType = datBoolean - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'OrderDetails' - SQL = - 'SELECT '#10' OrderID, ProductID, UnitPrice, Quantity, Discount'#10' ' + - 'FROM'#10' [Order Details]' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'Quantity' - TableField = 'Quantity' - end - item - DatasetField = 'Discount' - TableField = 'Discount' - end> - end> - Name = 'OrderDetails' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.Script = - 'procedure BeforeDelete;'#10'begin'#10' if Gain > 50 then'#10' RaiseError' + - '('#39'Cannot delete orders that make us more then 50$'#39');'#10'end;'#10#10'pro' + - 'cedure BeforePost;'#10'begin'#10' if VarIsNull(ProductID) then'#10' Rais' + - 'eError('#39'Please specify a name.'#39');'#10' '#10' if Quantity < 1 then'#10' ' + - ' RaiseError('#39'Quantity can not be less 1 !'#39');'#10#10' if UnitPrice < ' + - '10 then'#10' Quantity := 10;'#10'end;'#10#10'procedure OnCalcFields;'#10'begin'#10 + - ' Gain := UnitPrice*Quantity*(1-Discount);'#10'end;'#10#10'procedure OnNew' + - 'Record;'#10'begin'#10' Quantity := 1;'#10'end;' - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 43 - Top = 150 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 40 - Top = 200 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.pas deleted file mode 100644 index 6e4f778..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerData.pas +++ /dev/null @@ -1,39 +0,0 @@ -unit BusinessRulesScripts_ServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDADriverManager, uDAClasses, uDAEngine, uDAADODriver, uROIndyTCPServer, - uDADataTable, uDABINAdapter; - -type - TBusinessRulesScripts_ServerDataModule = class(TDataModule) - ROServer: TROIndyHTTPServer; - ROMessage: TROBinMessage; - DriverManager: TDADriverManager; - ConnectionManager: TDAConnectionManager; - Schema: TDASchema; - DataDictionary: TDADataDictionary; - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessRulesScripts_ServerDataModule: TBusinessRulesScripts_ServerDataModule; - -implementation - -{$R *.dfm} - -procedure TBusinessRulesScripts_ServerDataModule.DataModuleCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.dfm deleted file mode 100644 index 340e738..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.dfm +++ /dev/null @@ -1,44 +0,0 @@ -object BusinessRulesScripts_ServerMainForm: TBusinessRulesScripts_ServerMainForm - Left = 90 - Top = 79 - AutoScroll = False - BorderWidth = 5 - Caption = 'Business Rules Scripts Server' - ClientHeight = 406 - ClientWidth = 614 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object RoPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 0 - Top = 0 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object ed_Script: TMemo - Left = 0 - Top = 54 - Width = 614 - Height = 352 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - ParentFont = False - ScrollBars = ssVertical - TabOrder = 0 - OnChange = ed_ScriptChange - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.pas deleted file mode 100644 index 4c13c25..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/BusinessRulesScripts_ServerMain.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit BusinessRulesScripts_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer; - -type - TBusinessRulesScripts_ServerMainForm = class(TForm) - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - ed_Script: TMemo; - procedure FormCreate(Sender: TObject); - procedure ed_ScriptChange(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - BusinessRulesScripts_ServerMainForm: TBusinessRulesScripts_ServerMainForm; - -implementation - -uses - BusinessRulesScripts_ServerData; - -{$R *.dfm} - -procedure TBusinessRulesScripts_ServerMainForm.FormCreate(Sender: TObject); -begin - with BusinessRulesScripts_ServerDataModule.Schema.Datasets.DatasetByName('OrderDetails').BusinessRulesClient do - ed_Script.Text := StringReplace(Script, #10, sLineBreak, [rfReplaceAll]); -end; - -procedure TBusinessRulesScripts_ServerMainForm.ed_ScriptChange(Sender: TObject); -begin - with BusinessRulesScripts_ServerDataModule.Schema.Datasets.DatasetByName('OrderDetails').BusinessRulesClient do - Script := ed_Script.Text; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.dfm deleted file mode 100644 index 3cac002..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.dfm +++ /dev/null @@ -1,15 +0,0 @@ -object NewService: TNewService - OldCreateOrder = True - AcquireConnection = True - ServiceSchema = BusinessRulesScripts_ServerDataModule.Schema - ServiceDataStreamer = BinDataStreamer - ExportedDataTables = <> - Left = 188 - Top = 181 - Height = 150 - Width = 205 - object BinDataStreamer: TDABinDataStreamer - Left = 33 - Top = 18 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.pas deleted file mode 100644 index 51b6c4f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/NewService_Impl.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit NewService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} BusinessRulesScriptsLibrary_Intf, uDADataStreamer, - uDABinAdapter,uDAInterfaces; - -type - { TNewService } - TNewService = class(TDataAbstractService, INewService) - BinDataStreamer: TDABinDataStreamer; - private - protected - end; - -implementation - -{$R *.dfm} -uses - {Generated:} BusinessRulesScriptsLibrary_Invk, BusinessRulesScripts_ServerData,TypInfo; - -procedure Create_NewService(out anInstance: IUnknown); -begin - anInstance := TNewService.Create(nil); -end; - -initialization - TROClassFactory.Create('NewService', Create_NewService, TNewService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/RODLFILE.res deleted file mode 100644 index 53e3ab7..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Business Rules Scripts/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.Sample.html deleted file mode 100644 index 2d8151b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.Sample.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - -

- Calculated Fields Example -

-

Purpose

-

- This example shows how to handle calculated fields server side and client - side. -

-

Examine the Code

-

- Server side fields are processed via the BinAdapter's OnWriteFieldValue - event handler (see CalcFieldsService_Impl). -

-

- On the client side, they are handled as you would expect via dtCustomers.OnCalcFields - (see CalcFields_ClientData). Note though, how the client field actually references - the server value. -

- - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bdsgroup deleted file mode 100644 index 9fa715f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - CalcFields_Server.bdsproj - CalcFields_Client.bdsproj - CalcFields_Server.exe CalcFields_Client.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bpg deleted file mode 100644 index 024afdc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = CalcFields_Server.exe CalcFields_Client.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -CalcFields_Client.exe: CalcFields_Client.dpr - $(DCC) - -CalcFields_Server.exe: CalcFields_Server.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.groupproj deleted file mode 100644 index f6d8ad4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {70b86ab1-4399-4031-8bb6-28a50d072647} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary.rodl deleted file mode 100644 index 1eee0ac..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary.rodl +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Intf.pas deleted file mode 100644 index d7c07f7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Intf.pas +++ /dev/null @@ -1,101 +0,0 @@ -unit CalcFieldsLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{A54F3492-C4C5-4161-8536-FE04F7DE88E5}'; - TargetNamespace = ''; - - { Service Interface ID's } - ICalcFieldsService_IID : TGUID = '{7113FC5C-4AB9-4583-B4E6-5F7F5A975E0A}'; - - { Event ID's } - -type - { Forward declarations } - ICalcFieldsService = interface; - - - - - - { Enumerateds } - - { ICalcFieldsService } - ICalcFieldsService = interface(IDataAbstractService) - ['{7113FC5C-4AB9-4583-B4E6-5F7F5A975E0A}'] - function GetServiceVersion: String; - end; - - { CoCalcFieldsService } - CoCalcFieldsService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ICalcFieldsService; - end; - - { TCalcFieldsService_Proxy } - TCalcFieldsService_Proxy = class(TDataAbstractService_Proxy, ICalcFieldsService) - protected - function __GetInterfaceName:string; override; - - function GetServiceVersion: String; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ CoCalcFieldsService } - -class function CoCalcFieldsService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ICalcFieldsService; -begin - result := TCalcFieldsService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TCalcFieldsService_Proxy } - -function TCalcFieldsService_Proxy.__GetInterfaceName:string; -begin - result := 'CalcFieldsService'; -end; - -function TCalcFieldsService_Proxy.GetServiceVersion: String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'CalcFieldsLibrary', __InterfaceName, 'GetServiceVersion'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(ICalcFieldsService_IID, TCalcFieldsService_Proxy); - - -finalization - UnregisterProxyClass(ICalcFieldsService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Invk.pas deleted file mode 100644 index f1b7ff2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsLibrary_Invk.pas +++ /dev/null @@ -1,56 +0,0 @@ -unit CalcFieldsLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} CalcFieldsLibrary_Intf; - -type - {$M+} - TCalcFieldsService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_GetServiceVersion(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TCalcFieldsService_Invoker } - -procedure TCalcFieldsService_Invoker.Invoke_GetServiceVersion(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetServiceVersion: String; } -var - lResult: String; -begin - try - lResult := (__Instance as ICalcFieldsService).GetServiceVersion; - - __Message.InitializeResponseMessage(__Transport, 'CalcFieldsLibrary', 'CalcFieldsService', 'GetServiceVersionResponse'); - __Message.Write('Result', TypeInfo(String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.dfm deleted file mode 100644 index 3125b85..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.dfm +++ /dev/null @@ -1,133 +0,0 @@ -object CalcFieldsService: TCalcFieldsService - OldCreateOrder = True - OnCreate = DataAbstractServiceCreate - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Height = 300 - Width = 300 - object DataStreamer: TDABin2DataStreamer - OnWriteFieldValue = DataStreamerWriteFieldValue - BufferSize = 262144 - SendReducedDelta = False - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = CalcFields_ServerDataForm.ConnectionManager - DataDictionary = DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, 0 as DummyServer'#10#10' FROM'#10' ' + - ' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ServerCalculated' - TableField = 'DummyServer' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ClientCalculated' - DataType = datString - Size = 120 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - LogChanges = False - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = True - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ServerCalculated' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - LogChanges = False - DisplayWidth = 0 - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 32 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 103 - end - object bpCustomers: TDABusinessProcessor - Schema = Schema - ReferencedDataset = 'Customers' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poPrepareCommands] - UpdateMode = updWhereKeyOnly - Left = 112 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.pas deleted file mode 100644 index 5539bdd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFieldsService_Impl.pas +++ /dev/null @@ -1,80 +0,0 @@ -unit CalcFieldsService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} CalcFieldsLibrary_Intf, uDAScriptingProvider, - uDABusinessProcessor, uDAInterfaces, uDAClasses, uDADataStreamer, - uDABin2DataStreamer; - -const - { Dataset names for Schema } - ds_Customers = 'Customers'; - -type - { TCalcFieldsService } - TCalcFieldsService = class(TDataAbstractService, ICalcFieldsService) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - DataDictionary: TDADataDictionary; - bpCustomers: TDABusinessProcessor; - procedure DataStreamerWriteFieldValue(const aField: TDAField; - var Value: Variant); - procedure DataAbstractServiceCreate(Sender: TObject); - private - fNextCalcValue: Integer; - protected - { ICalcFieldsService methods } - function GetServiceVersion: string; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} CalcFieldsLibrary_Invk, CalcFields_ServerData; - -procedure Create_CalcFieldsService(out anInstance: IUnknown); -begin - anInstance := TCalcFieldsService.Create(nil); -end; - -{ CalcFieldsService } - -function TCalcFieldsService.GetServiceVersion: string; -begin -end; - -procedure TCalcFieldsService.DataStreamerWriteFieldValue( - const aField: TDAField; var Value: Variant); -begin - if (aField.Name = 'ServerCalculated') then begin - Value := fNextCalcValue; - Inc(fNextCalcValue); - end; -end; - -procedure TCalcFieldsService.DataAbstractServiceCreate(Sender: TObject); -begin - inherited; - fNextCalcValue := 100; -end; - -initialization - TROClassFactory.Create('CalcFieldsService', Create_CalcFieldsService, TCalcFieldsService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.bdsproj deleted file mode 100644 index 5415a64..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - CalcFields_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dpr deleted file mode 100644 index b5f93c5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program CalcFields_Client; - -uses - uROComInit, - Forms, - CalcFields_ClientMain in 'CalcFields_ClientMain.pas' {CalcFields_ClientMainForm}, - CalcFields_ClientData in 'CalcFields_ClientData.pas' {CalcFields_ClientDataForm: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'CalcFields - Client'; - Application.CreateForm(TCalcFields_ClientDataForm, CalcFields_ClientDataForm); - Application.CreateForm(TCalcFields_ClientMainForm, CalcFields_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dproj deleted file mode 100644 index b9f6c7d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {507351df-1ced-4f28-becd-e7e287bd9083} - CalcFields_Client.dpr - Debug - AnyCPU - DCC32 - CalcFields_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - CalcFields_Client.dpr - - - - - - - MainSource - - -
CalcFields_ClientDataForm
-
- -
CalcFields_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.dfm deleted file mode 100644 index 7619a22..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.dfm +++ /dev/null @@ -1,126 +0,0 @@ -object CalcFields_ClientDataForm: TCalcFields_ClientDataForm - OldCreateOrder = True - OnCreate = DataModuleCreate - Height = 300 - Width = 300 - object ROChannel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 42 - Top = 10 - end - object ROMessage: TROBinMessage - Left = 41 - Top = 52 - end - object RORemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = 'CalcFieldsService' - Left = 40 - Top = 95 - end - object DARemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RORemoteService - GetDataCall.RemoteService = RORemoteService - UpdateDataCall.RemoteService = RORemoteService - GetScriptsCall.RemoteService = RORemoteService - RemoteService = RORemoteService - DataStreamer = DataStreamer - FailureBehavior = fbBoth - Left = 128 - Top = 82 - end - object DataStreamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 40 - Top = 144 - end - object tbl_Customers: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - OnChange = tbl_CustomersCustomerIDChange - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - OnChange = tbl_CustomersCompanyNameChange - Lookup = False - LookupCache = False - end - item - Name = 'ClientCalculated' - DataType = datString - Size = 120 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - LogChanges = False - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = True - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ServerCalculated' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - LogChanges = False - DisplayWidth = 0 - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = DARemoteDataAdapter - OnCalcFields = tbl_CustomersCalcFields - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - Left = 136 - Top = 136 - end - object ds_Customers: TDADataSource - DataSet = tbl_Customers.Dataset - DataTable = tbl_Customers - Left = 144 - Top = 144 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.pas deleted file mode 100644 index fb33f58..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientData.pas +++ /dev/null @@ -1,62 +0,0 @@ -unit CalcFields_ClientData; - -interface - -uses {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDACDSDataTable, uDAScriptingProvider, - uDARemoteDataAdapter, uDADataStreamer, uROIndyTCPChannel, - uROIndyHTTPChannel, uDABin2DataStreamer, uDAMemDataTable; - -type - TCalcFields_ClientDataForm = class(TDataModule) - ROMessage: TROBinMessage; - ROChannel: TROWinInetHTTPChannel; - RORemoteService: TRORemoteService; - DARemoteDataAdapter: TDARemoteDataAdapter; - DataStreamer: TDABin2DataStreamer; - tbl_Customers: TDAMemDataTable; - ds_Customers: TDADataSource; - procedure DataModuleCreate(Sender: TObject); - procedure tbl_CustomersCustomerIDChange(Sender: TDACustomField); - procedure tbl_CustomersCompanyNameChange(Sender: TDACustomField); - procedure tbl_CustomersCalcFields(DataTable: TDADataTable); - private - { Private declarations } - public - { Public declarations } - end; - -var - CalcFields_ClientDataForm: TCalcFields_ClientDataForm; - -implementation -{$R *.dfm} - -procedure TCalcFields_ClientDataForm.tbl_CustomersCalcFields( - DataTable: TDADataTable); -begin - DataTable.FieldByName('ClientCalculated').AsString := 'Got #' + DataTable.FieldByName('ServerCalculated').AsString; -end; - -procedure TCalcFields_ClientDataForm.tbl_CustomersCompanyNameChange( - Sender: TDACustomField); -begin - Beep; -end; - -procedure TCalcFields_ClientDataForm.tbl_CustomersCustomerIDChange( - Sender: TDACustomField); -begin - Beep; -end; - -procedure TCalcFields_ClientDataForm.DataModuleCreate(Sender: TObject); -begin - DARemoteDataAdapter.SetupDefaultRequest; -end; - -initialization -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.dfm deleted file mode 100644 index 755be90..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.dfm +++ /dev/null @@ -1,51 +0,0 @@ -object CalcFields_ClientMainForm: TCalcFields_ClientMainForm - Left = 81 - Top = 65 - BorderWidth = 5 - Caption = 'CalcFields - Client' - ClientHeight = 263 - ClientWidth = 428 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object OpenCloseButton: TButton - Left = 0 - Top = 0 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 0 - OnClick = OpenCloseButtonClick - end - object gCustomers: TDBGrid - Left = 0 - Top = 31 - Width = 428 - Height = 232 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = CalcFields_ClientDataForm.ds_Customers - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object ApplyUpdatesButton: TButton - Left = 80 - Top = 0 - Width = 89 - Height = 25 - Caption = 'Apply Updates' - TabOrder = 2 - OnClick = ApplyUpdatesButtonClick - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.pas deleted file mode 100644 index c2df8b1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ClientMain.pas +++ /dev/null @@ -1,44 +0,0 @@ -unit CalcFields_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROIndyHTTPChannel, - Grids, DBGrids; - -type - TCalcFields_ClientMainForm = class(TForm) - OpenCloseButton: TButton; - gCustomers: TDBGrid; - ApplyUpdatesButton: TButton; - procedure OpenCloseButtonClick(Sender: TObject); - procedure ApplyUpdatesButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - CalcFields_ClientMainForm: TCalcFields_ClientMainForm; - -implementation - -uses CalcFields_ClientData; - -{$R *.dfm} - -procedure TCalcFields_ClientMainForm.OpenCloseButtonClick(Sender: TObject); -begin - with CalcFields_ClientDataForm do - tbl_Customers.Active := not tbl_Customers.Active; -end; - -procedure TCalcFields_ClientMainForm.ApplyUpdatesButtonClick(Sender: TObject); -begin - CalcFields_ClientDataForm.tbl_Customers.ApplyUpdates(True) -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.bdsproj deleted file mode 100644 index e42d0d9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - CalcFields_Server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dpr deleted file mode 100644 index 6a5f57f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dpr +++ /dev/null @@ -1,23 +0,0 @@ -program CalcFields_Server; - -{#ROGEN:CalcFieldsLibrary.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Forms, - CalcFields_ServerMain in 'CalcFields_ServerMain.pas' {CalcFields_ServerMainForm}, - CalcFields_ServerData in 'CalcFields_ServerData.pas' {CalcFields_ServerDataForm: TDataModule}, - CalcFieldsLibrary_Intf in 'CalcFieldsLibrary_Intf.pas', - CalcFieldsLibrary_Invk in 'CalcFieldsLibrary_Invk.pas', - CalcFieldsService_Impl in 'CalcFieldsService_Impl.pas' {CalcFieldsService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'CalcFields - Server'; - Application.CreateForm(TCalcFields_ServerDataForm, CalcFields_ServerDataForm); - Application.CreateForm(TCalcFields_ServerMainForm, CalcFields_ServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dproj deleted file mode 100644 index 8fcb2de..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {e6dc35c7-8101-4b42-8f70-e31cf121c23b} - CalcFields_Server.dpr - Debug - AnyCPU - DCC32 - CalcFields_Server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - CalcFields_Server.dpr - - - - - - - MainSource - - - - -
CalcFieldsService
-
- -
CalcFields_ServerDataForm
-
- -
CalcFields_ServerMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.res deleted file mode 100644 index 2435bfa..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_Server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.dfm deleted file mode 100644 index 53314e4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.dfm +++ /dev/null @@ -1,50 +0,0 @@ -object CalcFields_ServerDataForm: TCalcFields_ServerDataForm - OldCreateOrder = False - OnCreate = DataModuleCreate - Height = 207 - Width = 352 - object ROServer: TROIndyHTTPServer - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;UserID=sa;password=;AuxDriver=SQLOLEDB.1;Da' + - 'tabase=Northwind' - Description = 'Borland ADOExpress Connection' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 232 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.pas deleted file mode 100644 index 3d4b59a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerData.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit CalcFields_ServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDADriverManager, uDAClasses, uDADBXDriver, uDAEngine, uDAADODriver, - uROIndyTCPServer; - -type - TCalcFields_ServerDataForm = class(TDataModule) - ROServer: TROIndyHTTPServer; - ROMessage: TROBinMessage; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - ConnectionManager: TDAConnectionManager; - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - CalcFields_ServerDataForm: TCalcFields_ServerDataForm; - -implementation - -{$R *.dfm} - -procedure TCalcFields_ServerDataForm.DataModuleCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.dfm deleted file mode 100644 index b6a51ee..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object CalcFields_ServerMainForm: TCalcFields_ServerMainForm - Left = 122 - Top = 243 - BorderStyle = bsDialog - Caption = 'CalcFields - Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object RoPoweredByRemObjectsButton: TROPoweredByRemObjectsButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.pas deleted file mode 100644 index 9fa2b27..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/CalcFields_ServerMain.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit CalcFields_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer; - -type - TCalcFields_ServerMainForm = class(TForm) - RoPoweredByRemObjectsButton: TROPoweredByRemObjectsButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - CalcFields_ServerMainForm: TCalcFields_ServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/RODLFILE.res deleted file mode 100644 index ff7a9de..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Calculated Fields/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.Sample.html deleted file mode 100644 index 33b66bf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.Sample.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - -

- Connection By User -

-

Purpose

-

- Shows various methods how a standard application (i.e. not a RemObjects server or - client) can obtain a database connection at runtime. -
- The application uses four Data Abstract components:  TDAADODriver, - TDADriverManager, TDAConnectionManager and - TROInMemorySessionManager.

-
    -
  • - Acquire #1 : one-liner to open default connection -
  • -
  • - Acquire #2 : delayed open after supplying userid/pass separately -
  • -
  • - Acquire #3 : one-liner supplying userid/pass -
  • -
  • Acquire #4 : connect via the DADriverManager 
  • -
  • - Acquire and Hold in a Session : explore this method to see how to - create, - access and release a connection within a session. -
  • -
-

- All tests above connect via the DAConnectionManager except for - #4.

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.bdsproj deleted file mode 100644 index b010e02..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ConnectionByUser.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dpr deleted file mode 100644 index 460e7fd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program ConnectionByUser; - -uses - Forms, - ConnectionByUserMain in 'ConnectionByUserMain.pas' {ConnectionByUserMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Connection By User'; - Application.CreateForm(TConnectionByUserMainForm, ConnectionByUserMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dproj deleted file mode 100644 index e17d67b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {3a10f6d7-3d2b-4bea-bad3-215392d8b601} - ConnectionByUser.dpr - Debug - AnyCPU - DCC32 - ConnectionByUser.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ConnectionByUser.dpr - - - - - - - MainSource - - -
ConnectionByUserMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.res deleted file mode 100644 index 6a1db77..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUser.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.dfm deleted file mode 100644 index 9faa693..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.dfm +++ /dev/null @@ -1,173 +0,0 @@ -object ConnectionByUserMainForm: TConnectionByUserMainForm - Left = 32 - Top = 37 - AutoScroll = False - Caption = 'Connection by User' - ClientHeight = 313 - ClientWidth = 506 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label3: TLabel - Left = 309 - Top = 18 - Width = 117 - Height = 13 - Caption = 'Open default connection' - end - object Label4: TLabel - Left = 309 - Top = 52 - Width = 174 - Height = 13 - Caption = 'Delayed "Open" after supplying login' - end - object Label5: TLabel - Left = 309 - Top = 82 - Width = 155 - Height = 13 - Caption = 'One-liner Open with custom login' - end - object Label6: TLabel - Left = 309 - Top = 114 - Width = 133 - Height = 13 - Caption = 'Using the DADriverManager' - end - object GroupBox1: TGroupBox - Left = 8 - Top = 8 - Width = 217 - Height = 89 - Caption = 'Login Info' - TabOrder = 0 - object Label1: TLabel - Left = 29 - Top = 28 - Width = 36 - Height = 13 - Caption = 'UserID:' - end - object Label2: TLabel - Left = 16 - Top = 60 - Width = 49 - Height = 13 - Caption = 'Password:' - end - object eUserID: TEdit - Left = 72 - Top = 24 - Width = 121 - Height = 24 - TabOrder = 0 - Text = 'sa' - end - object ePassword: TEdit - Left = 72 - Top = 56 - Width = 121 - Height = 24 - TabOrder = 1 - end - end - object Acquire1Button: TButton - Left = 229 - Top = 12 - Width = 75 - Height = 25 - Caption = 'Acquire #1' - TabOrder = 1 - OnClick = Acquire1ButtonClick - end - object Acquire2Button: TButton - Left = 229 - Top = 44 - Width = 75 - Height = 25 - Caption = 'Acquire #2' - TabOrder = 2 - OnClick = Acquire2ButtonClick - end - object Acquire3Button: TButton - Left = 229 - Top = 76 - Width = 75 - Height = 25 - Caption = 'Acquire #3' - TabOrder = 3 - OnClick = Acquire3ButtonClick - end - object Acquire4Button: TButton - Left = 229 - Top = 108 - Width = 75 - Height = 25 - Caption = 'Acquire #4' - TabOrder = 4 - OnClick = Acquire4ButtonClick - end - object AcquireHoldButton: TButton - Left = 229 - Top = 140 - Width = 209 - Height = 25 - Caption = 'Acquire and Hold in a Session' - TabOrder = 5 - OnClick = AcquireHoldButtonClick - end - object Memo: TMemo - Left = 4 - Top = 173 - Width = 496 - Height = 137 - Anchors = [akLeft, akTop, akRight, akBottom] - ScrollBars = ssVertical - TabOrder = 6 - end - object DAADODriver: TDAADODriver - Left = 57 - Top = 127 - end - object DADriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 91 - Top = 127 - end - object DAConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADOPartial' - ConnectionString = 'ADO?Server=localhost;Database=Northwind;AuxDriver=SQLOLEDB.1' - Default = False - Tag = 0 - end - item - Name = 'ADOComplete' - ConnectionString = - 'ADO?Server=localhost;Database=Northwind;AuxDriver=SQLOLEDB.1;Use' + - 'rID=sa;Password=;' - Default = False - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = False - Left = 23 - Top = 127 - end - object ROSessionManager: TROInMemorySessionManager - Left = 129 - Top = 127 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.pas deleted file mode 100644 index 0ae0360..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection By User/ConnectionByUserMain.pas +++ /dev/null @@ -1,187 +0,0 @@ -unit ConnectionByUserMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, uDAClasses, uDADriverManager, uDAEngine, uDAADODriver, - uROSessions, uROClient; - -type - TConnectionByUserMainForm = class(TForm) - GroupBox1: TGroupBox; - Label1: TLabel; - Label2: TLabel; - eUserID: TEdit; - ePassword: TEdit; - Acquire1Button: TButton; - Acquire2Button: TButton; - Acquire3Button: TButton; - DAADODriver: TDAADODriver; - DADriverManager: TDADriverManager; - DAConnectionManager: TDAConnectionManager; - Acquire4Button: TButton; - ROSessionManager: TROInMemorySessionManager; - AcquireHoldButton: TButton; - Label3: TLabel; - Label4: TLabel; - Label5: TLabel; - Label6: TLabel; - Memo: TMemo; - procedure Acquire1ButtonClick(Sender: TObject); - procedure Acquire2ButtonClick(Sender: TObject); - procedure Acquire3ButtonClick(Sender: TObject); - procedure Acquire4ButtonClick(Sender: TObject); - procedure AcquireHoldButtonClick(Sender: TObject); - private - { Private declarations } - procedure Log(Str: string); - public - { Public declarations } - end; - -var - ConnectionByUserMainForm: TConnectionByUserMainForm; - -implementation - -uses uDAInterfaces; - -{$R *.dfm} - -procedure TConnectionByUserMainForm.Acquire1ButtonClick(Sender: TObject); -var - conn: IDAConnection; -begin - try - conn := DAConnectionManager.NewConnection('ADOComplete'); - finally - if (Conn <> nil) and conn.Connected then begin - Log(TButton(Sender).Caption + ': Connection successful'); - log('Connection via "' + conn.ConnectionString + '"'); - end - else begin - Log(TButton(Sender).Caption + ': Connection failed'); - end; - end; -end; - -procedure TConnectionByUserMainForm.Acquire2ButtonClick(Sender: TObject); -var - conn: IDAConnection; -begin - try - conn := DAConnectionManager.NewConnection('ADOPartial', FALSE); - conn.UserID := eUserID.Text; - conn.Password := ePassword.Text; - conn.Open; - finally - if (Conn <> nil) and conn.Connected then begin - Log(TButton(Sender).Caption + ': Connection successful'); - log('Connection via "' + conn.ConnectionString + '"'); - end - else begin - Log(TButton(Sender).Caption + ': Connection failed'); - end; - end; -end; - -procedure TConnectionByUserMainForm.Acquire3ButtonClick(Sender: TObject); -var - conn: IDAConnection; -begin - try - conn := DAConnectionManager.NewConnection('ADOPartial', TRUE, eUserID.Text, ePassword.Text); - finally - if (Conn <> nil) and conn.Connected then begin - Log(TButton(Sender).Caption + ': Connection successful'); - log('Connection via "' + conn.ConnectionString + '"'); - end - else begin - Log(TButton(Sender).Caption + ': Connection failed'); - end; - end; -end; - -procedure TConnectionByUserMainForm.Acquire4ButtonClick(Sender: TObject); -var - drv: IDADriver; - conn: IDAConnection; -begin - try - drv := DriverManager.DriverByDriverID('ADO'); // Raises exception if not found - conn := drv.NewConnection; - // If not empty strings, these will override any specific UserID, Password specified below - conn.ConnectionString := Format('Server=localhost;Database=Northwind;AuxDriver=SQLOLEDB.1;UserID=%s;Password=%s;', [eUserID.Text, ePassword.Text]); - conn.Open; - finally - if (Conn <> nil) and conn.Connected then begin - Log(TButton(Sender).Caption + ': Connection successful'); - log('Connection via "' + conn.ConnectionString + '"'); - end - else begin - Log(TButton(Sender).Caption + ': Connection failed'); - end; - end; -end; - -procedure TConnectionByUserMainForm.AcquireHoldButtonClick(Sender: TObject); -const - MySessionID: TGUID = '{2B0ABD74-465A-45A6-AAD7-837709A66DB9}'; -var - session: TROSession; - conn: IDAConnection; -begin - - conn := DAConnectionManager.NewConnection('ADOComplete'); - - with ROSessionManager do try - session := CreateSession(MySessionID); - - // #1: How to store IDAConnections in RO sessions ---------------------------------------- - conn._AddRef; // We increment its ref count because we want it locked by the session - session.Values['MyADOConnection'] := integer(conn); - // End of #1 ----------------------------------------------------------------------------- - - conn := nil; // We set it to NIL to simulate what would happen in a real RO Datamodule when the vars get out of scope - ReleaseSession(session, TRUE); -{$WARNINGS OFF} - session := nil; // Just to simulate real re-initialization -{$WARNINGS ON} - session := FindSession(MySessionID); - - // #2: How to get IDAConnections from RO Sessions ---------------------------------------- - try - conn := IDAConnection(pointer(integer(session.Values['MyADOConnection']))); - finally - if (Conn <> nil) and conn.Connected then begin - Log(TButton(Sender).Caption + ': Connection successful'); - log('Connection via "' + conn.ConnectionString + '"'); - end - else begin - Log(TButton(Sender).Caption + ': Connection failed'); - end; - end; - - // End of #2 ----------------------------------------------------------------------------- - - // #3: How to finally release the connection from the session. This should be done when you ------ - // want to get rid of the connection for good... - conn.Close; // Optional. Implicit when it gets freed - conn._Release; // Removes the lock we imposed on the connection at the very beginning - // End of #3 ------------------------------------------------------------------------------------- - - conn := nil; // This is only useful in this example because the ref count is still held up to one by the local "conn" variable. - - finally - DeleteSession(MySessionID, FALSE); // This is what the RO session manager does for you, so ignore this too - end; -end; - -procedure TConnectionByUserMainForm.Log(Str: string); -begin - Memo.Lines.Add(Str); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.Sample.html deleted file mode 100644 index f4e1e4c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.Sample.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - -

- Connection Pooling -

- - -

Purpose

-

- Shows how connections can be managed via a pool (ADO/Northwind & IBX/Employee - connections). -

-

- Use the three pairs of Acquire/Release connection buttons to experiment - with pooling. Note how connections timeout later than the Release call and how - the delay - depends on the selected PoolTimeoutSeconds value selected via the - track bar. -

-

- Examine the code in ConnectionPoolingMain - you will see that it is minimal - all one - or two liners. -

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.bdsproj deleted file mode 100644 index 557c349..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ConnectionPooling.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dpr deleted file mode 100644 index 90d1fad..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program ConnectionPooling; - -uses - Forms, - ConnectionPoolingMain in 'ConnectionPoolingMain.pas' {ConnectionPoolingMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'ConnectionPooling'; - Application.CreateForm(TConnectionPoolingMainForm, ConnectionPoolingMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dproj deleted file mode 100644 index 5559d22..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {1087a4d3-a1bb-4f0d-8193-c91d9ddf3a55} - ConnectionPooling.dpr - Debug - AnyCPU - DCC32 - ConnectionPooling.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ConnectionPooling.dpr - - - - - - - MainSource - - -
ConnectionPoolingMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPooling.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.dfm deleted file mode 100644 index 05e22e2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.dfm +++ /dev/null @@ -1,166 +0,0 @@ -object ConnectionPoolingMainForm: TConnectionPoolingMainForm - Left = 392 - Top = 182 - AutoScroll = False - BorderWidth = 5 - Caption = 'Connection Pooling' - ClientHeight = 323 - ClientWidth = 365 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 3 - Top = 0 - Width = 102 - Height = 13 - Caption = 'Selected Connection:' - end - object lPoolTimeoutSeconds: TLabel - Left = 3 - Top = 48 - Width = 113 - Height = 13 - Caption = 'PoolTimeoutSeconds: 5' - end - object Acquire1Button: TButton - Left = 208 - Top = 0 - Width = 75 - Height = 25 - Caption = '&Acquire #1' - TabOrder = 0 - OnClick = Acquire1ButtonClick - end - object cbConnections: TComboBox - Left = 3 - Top = 18 - Width = 193 - Height = 21 - Style = csDropDownList - ItemHeight = 13 - TabOrder = 1 - end - object Release1Button: TButton - Left = 288 - Top = 0 - Width = 75 - Height = 25 - Caption = '&Release #1' - TabOrder = 2 - OnClick = Release1ButtonClick - end - object Memo: TMemo - Left = 0 - Top = 97 - Width = 365 - Height = 226 - Anchors = [akLeft, akTop, akRight, akBottom] - ScrollBars = ssVertical - TabOrder = 3 - end - object Acquire2Button: TButton - Left = 208 - Top = 32 - Width = 75 - Height = 25 - Caption = '&Acquire #2' - TabOrder = 4 - OnClick = Acquire2ButtonClick - end - object Release2Button: TButton - Left = 288 - Top = 32 - Width = 75 - Height = 25 - Caption = '&Release #2' - TabOrder = 5 - OnClick = Release2ButtonClick - end - object Acquire3Button: TButton - Left = 208 - Top = 64 - Width = 75 - Height = 25 - Caption = '&Acquire #3' - TabOrder = 6 - OnClick = Acquire3ButtonClick - end - object Release3Button: TButton - Left = 288 - Top = 64 - Width = 75 - Height = 25 - Caption = '&Release #3' - TabOrder = 7 - OnClick = Release3ButtonClick - end - object TrackBar: TTrackBar - Left = -4 - Top = 64 - Width = 208 - Height = 30 - Max = 20 - Min = 1 - Orientation = trHorizontal - ParentShowHint = False - PageSize = 1 - Frequency = 1 - Position = 5 - SelEnd = 0 - SelStart = 0 - ShowHint = True - TabOrder = 8 - TickMarks = tmBottomRight - TickStyle = tsAuto - OnChange = TrackBarChange - end - object DAConnectionManager: TDAConnectionManager - PoolTimeoutSeconds = 5 - OnConnectionTimedOut = DAConnectionManagerConnectionTimedOut - OnConnectionCreated = DAConnectionManagerConnectionCreated - Connections = < - item - Name = 'MSSQL' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI;' - Description = 'Microsoft SQL Server Northwind Connection' - Default = True - Tag = 0 - end - item - Name = 'IBEmployees' - ConnectionString = - 'IBX?Server=;UserID=sysdba;Password=masterkey;Database=C:\Program' + - ' Files\Borland\InterBase\examples\Database\Employee.gdb' - Description = 'Borland Interbase Employee Connection' - Default = False - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = True - Left = 48 - Top = 112 - end - object DADriverManager: TDADriverManager - DriverDirectory = '%MODULE%\' - TraceActive = False - TraceFlags = [] - Left = 16 - Top = 112 - end - object DAADODriver: TDAADODriver - Left = 16 - Top = 144 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.pas deleted file mode 100644 index fb442ab..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Connection Pooling/ConnectionPoolingMain.pas +++ /dev/null @@ -1,152 +0,0 @@ -unit ConnectionPoolingMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDADriverManager, uDAClasses, StdCtrls, uDAInterfaces, - uDAIBXDriver, uDAEngine, uDAADODriver, ExtCtrls, ComCtrls; - -type - TConnectionPoolingMainForm = class(TForm) - DADriverManager: TDADriverManager; - DAConnectionManager: TDAConnectionManager; - Acquire1Button: TButton; - cbConnections: TComboBox; - DAADODriver: TDAADODriver; - Release1Button: TButton; - Memo: TMemo; - Acquire2Button: TButton; - Release2Button: TButton; - Acquire3Button: TButton; - Release3Button: TButton; - Label1: TLabel; - TrackBar: TTrackBar; - lPoolTimeoutSeconds: TLabel; - procedure FormCreate(Sender: TObject); - procedure Acquire1ButtonClick(Sender: TObject); - procedure Release1ButtonClick(Sender: TObject); - procedure Acquire2ButtonClick(Sender: TObject); - procedure Acquire3ButtonClick(Sender: TObject); - procedure Release2ButtonClick(Sender: TObject); - procedure Release3ButtonClick(Sender: TObject); - procedure DAConnectionManagerConnectionAcquired( - Sender: TDAConnectionManager; const Connection: IDAConnection); - procedure DAConnectionManagerConnectionCreated( - Sender: TDAConnectionManager; const Connection: IDAConnection); - procedure DAConnectionManagerConnectionTimedOut( - Sender: TDAConnectionManager); - procedure TrackBarChange(Sender: TObject); - procedure FormDestroy(Sender: TObject); - private - fConnection, - fConnection2, - fConnection3: IDAConnection; - procedure Log(Str: string); - public - - end; - -var - ConnectionPoolingMainForm: TConnectionPoolingMainForm; - -implementation - -{$R *.dfm} - -procedure TConnectionPoolingMainForm.FormCreate(Sender: TObject); -var - i: integer; -begin - for i := 0 to (DAConnectionManager.Connections.Count - 1) do - cbConnections.Items.Add(DAConnectionManager.Connections[i].Name); - - cbConnections.ItemIndex := 0; -end; - -procedure TConnectionPoolingMainForm.Acquire1ButtonClick(Sender: TObject); -begin - if not assigned(fConnection) then begin - fConnection := DAConnectionManager.NewConnection(cbConnections.Text); - Log('Connection #1 acquired...'); - end; -end; - -procedure TConnectionPoolingMainForm.Release1ButtonClick(Sender: TObject); -begin - if assigned(fConnection) then begin - fConnection := nil; - Log('Connection #1 released'); - end; -end; - -procedure TConnectionPoolingMainForm.Acquire2ButtonClick(Sender: TObject); -begin - if not assigned(fConnection2) then begin - fConnection2 := DAConnectionManager.NewConnection(cbConnections.Text); - Log('Connection #2 acquired...'); - end; -end; - -procedure TConnectionPoolingMainForm.Acquire3ButtonClick(Sender: TObject); -begin - if not assigned(fConnection3) then begin - fConnection3 := DAConnectionManager.NewConnection(cbConnections.Text); - Log('Connection #3 acquired...'); - end; -end; - -procedure TConnectionPoolingMainForm.Release2ButtonClick(Sender: TObject); -begin - if assigned(fConnection2) then begin - fConnection2 := nil; - Log('Connection #2 released'); - end; -end; - -procedure TConnectionPoolingMainForm.Release3ButtonClick(Sender: TObject); -begin - if assigned(fConnection3) then begin - fConnection3 := nil; - Log('Connection #3 released'); - end; -end; - -procedure TConnectionPoolingMainForm.DAConnectionManagerConnectionAcquired( - Sender: TDAConnectionManager; const Connection: IDAConnection); -begin - Log('EVENT -> Connection acquired from the pool at ' + TimeToStr(Now)); -end; - -procedure TConnectionPoolingMainForm.DAConnectionManagerConnectionCreated( - Sender: TDAConnectionManager; const Connection: IDAConnection); -begin - Log('EVENT -> New connection created at ' + TimeToStr(Now)); -end; - -procedure TConnectionPoolingMainForm.DAConnectionManagerConnectionTimedOut( - Sender: TDAConnectionManager); -begin - Log('EVENT -> A connection timed out at ' + TimeToStr(Now)); -end; - -procedure TConnectionPoolingMainForm.TrackBarChange(Sender: TObject); -begin - DAConnectionManager.PoolTimeoutSeconds := TrackBar.Position; - lPoolTimeoutSeconds.Caption := Format('PoolTimeoutSeconds: %d', [TrackBar.Position]); -end; - -procedure TConnectionPoolingMainForm.Log(Str: string); -begin - Memo.Lines.Add(Str); -end; - -procedure TConnectionPoolingMainForm.FormDestroy(Sender: TObject); -begin - fConnection:=nil; - fConnection2:=nil; - fConnection3:=nil; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.Sample.html deleted file mode 100644 index 40cb0e3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.Sample.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - -

- Custom User Logon -

- - -

Purpose

-

- A very simple example showing two methods of opening a connection at runtime. -

-
    -
  • - Open Connection (1st way): creates and opens the connection in a - single - call passing the UserID/Password values supplied. -
  • -
  • - Open Connection (2nd way): creates the connection and opens it afterwards. -
  • -
-

- The example uses DAConnectionManager.Connections[0] as the connection - it opens. Examining its ConnectionString value via the Object Inspector, - you will see that it is set to: -

-

-   -

-

- ADO?Server=localhost;UserID=sa;AuxDriver=SQLOLEDB.1;Database=Northwind -

-

-   -

-

- Modify it as needed to access a different database. See FAQ37 - for examples of connection strings. -

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.bdsproj deleted file mode 100644 index 8f5cb42..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - CustomUserLogon.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dpr deleted file mode 100644 index d837771..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program CustomUserLogon; - -uses - Forms, - CustomUserLogonMain in 'CustomUserLogonMain.pas' {CustomUserLogonMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'CustomUserLogon'; - Application.CreateForm(TCustomUserLogonMainForm, CustomUserLogonMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dproj deleted file mode 100644 index e42accf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.dproj +++ /dev/null @@ -1,36 +0,0 @@ - - - {ec6ab974-9d80-4b73-9f09-b3948cbfef67} - CustomUserLogon.dpr - Debug - AnyCPU - DCC32 - CustomUserLogon.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - -FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse105812511.0.0.01.0.0.0CustomUserLogon.dpr - - - - - MainSource - - -
CustomUserLogonMainForm
-
-
-
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogon.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.dfm deleted file mode 100644 index f6890e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.dfm +++ /dev/null @@ -1,107 +0,0 @@ -object TCustomUserLogonMainForm - Left = 294 - Top = 99 - BorderStyle = bsDialog - Caption = 'Custom User Logon' - ClientHeight = 158 - ClientWidth = 207 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object GroupBox1: TGroupBox - Left = 8 - Top = 7 - Width = 191 - Height = 81 - Caption = 'User Info' - TabOrder = 0 - object Label1: TLabel - Left = 21 - Top = 28 - Width = 36 - Height = 13 - Caption = 'UserID:' - end - object Label2: TLabel - Left = 8 - Top = 52 - Width = 49 - Height = 13 - Caption = 'Password:' - end - object eUserID: TEdit - Left = 62 - Top = 24 - Width = 121 - Height = 21 - TabOrder = 0 - Text = 'sa' - end - object ePassword: TEdit - Left = 62 - Top = 48 - Width = 121 - Height = 21 - TabOrder = 1 - end - end - object Open1Button: TButton - Left = 20 - Top = 95 - Width = 167 - Height = 25 - Caption = 'Open Connection (1st way)' - Default = True - TabOrder = 1 - OnClick = Open1ButtonClick - end - object Open2Button: TButton - Left = 20 - Top = 127 - Width = 167 - Height = 25 - Caption = 'Open Connection (2nd way)' - Default = True - TabOrder = 2 - OnClick = Open2ButtonClick - end - object DADriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 120 - Top = 40 - end - object DAConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;UserID=sa;AuxDriver=SQLOLEDB.1;Database=Nor' + - 'thwind' - Description = 'Borland ADOExpress Connection' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = False - Left = 152 - Top = 40 - end - object DAADODriver: TDAADODriver - Left = 32 - Top = 88 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.pas deleted file mode 100644 index d11ce41..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Custom User Logon/CustomUserLogonMain.pas +++ /dev/null @@ -1,57 +0,0 @@ -unit CustomUserLogonMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDAClasses, uDADriverManager, StdCtrls, uDAIBXDriver, - uDAEngine, uDAADODriver; - -type - TCustomUserLogonMainForm = class(TForm) - DADriverManager: TDADriverManager; - DAConnectionManager: TDAConnectionManager; - GroupBox1: TGroupBox; - Open1Button: TButton; - eUserID: TEdit; - ePassword: TEdit; - Label1: TLabel; - Label2: TLabel; - DAADODriver: TDAADODriver; - Open2Button: TButton; - procedure Open1ButtonClick(Sender: TObject); - procedure Open2ButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - CustomUserLogonMainForm: TCustomUserLogonMainForm; - -implementation - -{$R *.dfm} - -uses uDAInterfaces; - -procedure TCustomUserLogonMainForm.Open1ButtonClick(Sender: TObject); -var - conn: IDAConnection; -begin - conn := DAConnectionManager.NewConnection(DAConnectionManager.Connections[0].Name, TRUE, eUserID.Text, ePassword.Text); - MessageDlg('Connection created!', mtInformation, [mbOK], 0); -end; - -procedure TCustomUserLogonMainForm.Open2ButtonClick(Sender: TObject); -var - conn: IDAConnection; -begin - conn := DAConnectionManager.NewConnection(DAConnectionManager.Connections[0].Name, FALSE); - conn.Open(eUserID.Text, ePassword.Text); - MessageDlg('Connection created!', mtInformation, [mbOK], 0); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.dfm deleted file mode 100644 index 22a899e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.dfm +++ /dev/null @@ -1,728 +0,0 @@ -object DataStreamersMainForm: TDataStreamersMainForm - Left = 221 - Top = 146 - BorderWidth = 5 - Caption = 'DataStreamers Tester' - ClientHeight = 517 - ClientWidth = 611 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object gCustomers: TDBGrid - Left = 0 - Top = 228 - Width = 611 - Height = 91 - Align = alClient - DataSource = dsCustomers - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gOrders: TDBGrid - Left = 0 - Top = 354 - Width = 611 - Height = 163 - Align = alBottom - DataSource = dsOrders - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel1: TPanel - Left = 0 - Top = 319 - Width = 611 - Height = 35 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - object dbnOrders: TDBNavigator - Left = 240 - Top = 5 - Width = 240 - Height = 25 - DataSource = dsOrders - TabOrder = 0 - end - object btn_OpenOrders: TButton - Left = 152 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = btn_OpenOrdersClick - end - object cbApplyOrdersSchema: TCheckBox - Left = 4 - Top = 9 - Width = 133 - Height = 17 - Caption = 'Apply Orders Schema' - Checked = True - State = cbChecked - TabOrder = 2 - end - end - object Panel2: TPanel - Left = 0 - Top = 193 - Width = 611 - Height = 35 - Align = alTop - BevelOuter = bvNone - TabOrder = 3 - object cbApplyCustomersSchema: TCheckBox - Left = 4 - Top = 9 - Width = 141 - Height = 17 - Caption = 'Apply Customers Schema' - Checked = True - State = cbChecked - TabOrder = 0 - end - object btn_OpenCustomers: TButton - Left = 160 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = btn_OpenCustomersClick - end - object dbnCustomers: TDBNavigator - Left = 248 - Top = 5 - Width = 240 - Height = 25 - DataSource = dsCustomers - TabOrder = 2 - end - end - object Panel3: TPanel - Left = 0 - Top = 0 - Width = 611 - Height = 193 - Align = alTop - BevelOuter = bvNone - Caption = 'Panel3' - TabOrder = 4 - object Panel4: TPanel - Left = 346 - Top = 0 - Width = 265 - Height = 193 - Align = alRight - BevelOuter = bvNone - TabOrder = 0 - object btn_TestDatasets: TButton - Left = 8 - Top = 75 - Width = 129 - Height = 25 - Caption = 'Test Datasets' - TabOrder = 0 - OnClick = btn_TestDatasetsClick - end - object cbSkipCustomers: TCheckBox - Left = 8 - Top = 40 - Width = 97 - Height = 17 - Caption = 'Skip Customers' - TabOrder = 1 - end - object cbSkipOrders: TCheckBox - Left = 8 - Top = 56 - Width = 97 - Height = 17 - Caption = 'Skip Orders' - TabOrder = 2 - end - object btn_TurnMD: TButton - Left = 8 - Top = 139 - Width = 129 - Height = 25 - Caption = 'Turn M/D on/off' - TabOrder = 3 - OnClick = btn_TurnMDClick - end - object cbCloseBeforeTest: TCheckBox - Left = 8 - Top = 11 - Width = 113 - Height = 17 - Caption = 'Close Before Test' - Checked = True - State = cbChecked - TabOrder = 4 - end - object btn_ShowDeltaCounters: TButton - Left = 8 - Top = 168 - Width = 129 - Height = 25 - Caption = 'Show Delta Counters' - TabOrder = 5 - OnClick = btn_ShowDeltaCountersClick - end - object btn_TestDeltas: TButton - Left = 8 - Top = 107 - Width = 129 - Height = 25 - Caption = 'Test Deltas' - TabOrder = 6 - OnClick = btn_TestDeltasClick - end - object btn_ClearMemo: TButton - Left = 144 - Top = 168 - Width = 97 - Height = 25 - Caption = 'Clear Memo' - TabOrder = 7 - OnClick = btn_ClearMemoClick - end - end - object Memo: TMemo - Left = 0 - Top = 0 - Width = 346 - Height = 193 - Align = alClient - ScrollBars = ssVertical - TabOrder = 1 - end - end - object DADriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 16 - Top = 8 - end - object DAConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;Database=Northwind;UserID=sa;AuxDriver=SQLO' + - 'LEDB.1;password=;' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = True - Left = 80 - Top = 8 - end - object DASchema: TDASchema - ConnectionManager = DAConnectionManager - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 48 - Top = 8 - end - object DAADODriver: TDAADODriver - Left = 112 - Top = 8 - end - object dtCustomers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 276 - Top = 27 - end - object dsCustomers: TDADataSource - DataSet = dtCustomers.Dataset - DataTable = dtCustomers - Left = 292 - Top = 43 - end - object dtOrders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 340 - Top = 27 - end - object dsOrders: TDADataSource - DataSet = dtOrders.Dataset - DataTable = dtOrders - Left = 356 - Top = 43 - end - object DABinDataStreamer: TDABinDataStreamer - Left = 146 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.pas deleted file mode 100644 index 4cc3fb9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersMain.pas +++ /dev/null @@ -1,240 +0,0 @@ -unit DataStreamersMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, DB, Grids, DBGrids, ExtCtrls, DBCtrls, - uDADataTable, uDABINAdapter, uDAClasses, uDADriverManager, uDAInterfaces, - uDADataStreamer, uDAScriptingProvider, uDACDSDataTable, uDAEngine, - uDAADODriver; - -type - TDataStreamersMainForm = class(TForm) - DADriverManager: TDADriverManager; - DAADODriver: TDAADODriver; - DAConnectionManager: TDAConnectionManager; - dtCustomers: TDACDSDataTable; - dsCustomers: TDADataSource; - gCustomers: TDBGrid; - dtOrders: TDACDSDataTable; - dsOrders: TDADataSource; - gOrders: TDBGrid; - Panel1: TPanel; - dbnOrders: TDBNavigator; - btn_OpenOrders: TButton; - cbApplyOrdersSchema: TCheckBox; - Panel2: TPanel; - cbApplyCustomersSchema: TCheckBox; - btn_OpenCustomers: TButton; - dbnCustomers: TDBNavigator; - Panel3: TPanel; - Panel4: TPanel; - btn_TestDatasets: TButton; - cbSkipCustomers: TCheckBox; - cbSkipOrders: TCheckBox; - btn_TurnMD: TButton; - cbCloseBeforeTest: TCheckBox; - btn_ShowDeltaCounters: TButton; - btn_TestDeltas: TButton; - btn_ClearMemo: TButton; - Memo: TMemo; - DASchema: TDASchema; - DABinDataStreamer: TDABinDataStreamer; - procedure FormCreate(Sender: TObject); - procedure btn_TestDatasetsClick(Sender: TObject); - procedure btn_OpenCustomersClick(Sender: TObject); - procedure btn_OpenOrdersClick(Sender: TObject); - procedure btn_TurnMDClick(Sender: TObject); - procedure btn_ShowDeltaCountersClick(Sender: TObject); - procedure btn_TestDeltasClick(Sender: TObject); - procedure btn_ClearMemoClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); - private - fConnection: IDAConnection; - end; - -var - DataStreamersMainForm: TDataStreamersMainForm; - -implementation - -uses uROTypes, uDADelta; - -{$R *.dfm} - -procedure TDataStreamersMainForm.FormCreate(Sender: TObject); -begin - fConnection := DAConnectionManager.NewConnection('ADO'); -end; - -procedure TDataStreamersMainForm.FormDestroy(Sender: TObject); -begin -fConnection:=nil; -end; - -procedure TDataStreamersMainForm.btn_TestDatasetsClick(Sender: TObject); -var - stream: Binary; - customers, - orders: IDADataset; - i: integer; - start: Cardinal; -begin - if cbCloseBeforeTest.Checked then begin - dtCustomers.Close; - dtOrders.Close; - end; - - stream := Binary.Create; - - with DABinDataStreamer do try - customers := DASchema.NewDataset(fConnection, 'Customers'); - //customers.Where.AddText(' 1=2'); - orders := DASchema.NewDataset(fConnection, 'Orders'); - //orders.Where.AddText(' 1=2'); - - start := GetTickCount; - - // Writes the data - Initialize(stream, aiWrite); - if not cbSkipCustomers.Checked then WriteDataset(customers, [woSchema, woRows], -1); - - if not cbSkipOrders.Checked then WriteDataset(orders, [woRows, woSchema], -1); - Finalize; - // End of write data - - Memo.Lines.Add('WRITE completed in ' + IntToStr(GetTickCount - start) + 'ms'); - - // Logging info - Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long'); - - start := GetTickCount; - Initialize(stream, aiReadFromBeginning); - - // Reads the data - if not cbSkipCustomers.Checked then begin - if cbApplyCustomersSchema.Checked then - ReadDataset('Customers', dtCustomers, TRUE) - else - ReadDataset('Customers', dtCustomers); - end; - - if not cbSkipOrders.Checked then begin - if cbApplyOrdersSchema.Checked then - ReadDataset('Orders', dtOrders, TRUE) - else - ReadDataset('Orders', dtOrders); - end; - - Finalize; - - // End of read data - Memo.Lines.Add('READ completed in ' + IntToStr(GetTickCount - start) + 'ms'); - - // Logging info - Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas'); - for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]); - for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]); - Memo.Lines.Add(' '); - finally - stream.Free; - end; -end; - -procedure TDataStreamersMainForm.btn_OpenCustomersClick(Sender: TObject); -begin - dtCustomers.Active := dtCustomers.Active xor TRUE; -end; - -procedure TDataStreamersMainForm.btn_OpenOrdersClick(Sender: TObject); -begin - dtOrders.Active := dtOrders.Active xor TRUE -end; - -procedure TDataStreamersMainForm.btn_TurnMDClick(Sender: TObject); -begin - if dtOrders.MasterSource = nil then begin - dtOrders.MasterFields := 'CustomerID'; - dtOrders.DetailFields := 'CustomerID'; - dtOrders.MasterSource := dsCustomers; - end - - else begin - dtOrders.MasterSource := nil; - dtOrders.MasterFields := ''; - dtOrders.DetailFields := ''; - end; - - btn_TestDatasets.Enabled := dtOrders.MasterSource = nil; -end; - -procedure TDataStreamersMainForm.btn_ShowDeltaCountersClick(Sender: TObject); -begin - ShowMessage(Format('Changes: Customers %d, Orders %d', [dtCustomers.Delta.Count, dtOrders.Delta.Count])); -end; - -procedure TDataStreamersMainForm.btn_TestDeltasClick(Sender: TObject); -var - stream: TStream; - i: integer; - orddelta, - custdelta: TDADelta; -begin - if not dtCustomers.Active or not dtOrders.Active then begin - MessageDlg('Both datatables must be open!', mtError, [mbOK], 0); - Exit; - end; - - stream := TMemoryStream.Create; - - custdelta := TDADelta.Create(dtCustomers); - orddelta := TDADelta.Create(dtOrders); - with DABinDataStreamer do try - // Writes the data - Initialize(stream, aiWrite); - if not cbSkipCustomers.Checked then WriteDelta(dtCustomers); - - if not cbSkipOrders.Checked then WriteDelta(dtOrders); - Finalize; - // End of write data - - // Logging info - Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long'); - - Initialize(stream, aiReadFromBeginning); - - // Reads the data - if not cbSkipCustomers.Checked then begin - ReadDelta('dtCustomers', custdelta); - Memo.Lines.Add('Customers delta contains ' + IntToStr(custdelta.Count) + ' changes'); - end; - - if not cbSkipOrders.Checked then begin - ReadDelta('dtOrders', orddelta); - Memo.Lines.Add('Orders delta contains ' + IntToStr(orddelta.Count) + ' changes'); - end; - - Finalize; - - // Logging info - Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas'); - for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]); - for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]); - Memo.Lines.Add(' '); - - finally - stream.Free; - - custdelta.Free; - orddelta.Free; - end; -end; - -procedure TDataStreamersMainForm.btn_ClearMemoClick(Sender: TObject); -begin - Memo.Lines.Clear; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.Sample.html deleted file mode 100644 index 1babacb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.Sample.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - -

Data Streamers Sample


-

This example shows how a dataset can be written to a stream and read from it using the TDABinDataStreamer class.

-

When you compile and launch this example it displays two grids, the sources for which are datasets dynamically read using TStream.

-

Modify some data in the grids.

-

When you press the "Test Deltas" button, it shows the size of the delta containing the data to update the dataset.

-

The "Turn M/D on/off" button toggles the top grid as the master source for the bottom grid.

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.bdsproj deleted file mode 100644 index 9a4eae0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - DataStreamersTest.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dpr deleted file mode 100644 index d388589..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program DataStreamersTest; - -uses - Forms, - DataStreamersMain in 'DataStreamersMain.pas' {DataStreamersMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Adapters Test'; - Application.CreateForm(TDataStreamersMainForm, DataStreamersMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dproj deleted file mode 100644 index e5ff5da..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {0d9a7452-75b7-4181-9053-aa039d95be41} - DataStreamersTest.dpr - Debug - AnyCPU - DCC32 - DataStreamersTest.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - DataStreamersTest.dpr - - - - - - - MainSource - - -
DataStreamersMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.res deleted file mode 100644 index 6a1db77..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/DataStreamersTest.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.dfm deleted file mode 100644 index 3e0a9f4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.dfm +++ /dev/null @@ -1,730 +0,0 @@ -object Form1: TForm1 - Left = 70 - Top = 51 - Width = 807 - Height = 632 - BorderWidth = 5 - Caption = 'DataStream Tester' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object DBGrid1: TDBGrid - Left = 0 - Top = 228 - Width = 789 - Height = 163 - Align = alClient - DataSource = dsCustomers - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object DBGrid2: TDBGrid - Left = 0 - Top = 426 - Width = 789 - Height = 163 - Align = alBottom - DataSource = dsOrders - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel1: TPanel - Left = 0 - Top = 391 - Width = 789 - Height = 35 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - object DBNavigator2: TDBNavigator - Left = 240 - Top = 5 - Width = 240 - Height = 25 - DataSource = dsOrders - TabOrder = 0 - end - object Button3: TButton - Left = 152 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = Button3Click - end - object cbApplyOrdersSchema: TCheckBox - Left = 4 - Top = 9 - Width = 133 - Height = 17 - Caption = 'Apply Orders Schema' - Checked = True - State = cbChecked - TabOrder = 2 - end - end - object Panel2: TPanel - Left = 0 - Top = 193 - Width = 789 - Height = 35 - Align = alTop - BevelOuter = bvNone - TabOrder = 3 - object cbApplyCustomersSchema: TCheckBox - Left = 4 - Top = 9 - Width = 141 - Height = 17 - Caption = 'Apply Customers Schema' - Checked = True - State = cbChecked - TabOrder = 0 - end - object Button2: TButton - Left = 160 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = Button2Click - end - object DBNavigator1: TDBNavigator - Left = 248 - Top = 5 - Width = 240 - Height = 25 - DataSource = dsCustomers - TabOrder = 2 - end - end - object Panel3: TPanel - Left = 0 - Top = 0 - Width = 789 - Height = 193 - Align = alTop - BevelOuter = bvNone - Caption = 'Panel3' - TabOrder = 4 - object Panel4: TPanel - Left = 524 - Top = 0 - Width = 265 - Height = 193 - Align = alRight - BevelOuter = bvNone - TabOrder = 0 - object btn_TestDatasets: TButton - Left = 8 - Top = 75 - Width = 129 - Height = 25 - Caption = 'Test Datasets' - TabOrder = 0 - OnClick = btn_TestDatasetsClick - end - object cbSkipCustomers: TCheckBox - Left = 8 - Top = 40 - Width = 97 - Height = 17 - Caption = 'Skip Customers' - TabOrder = 1 - end - object cbSkipOrders: TCheckBox - Left = 8 - Top = 56 - Width = 97 - Height = 17 - Caption = 'Skip Orders' - TabOrder = 2 - end - object btn_TurnMD: TButton - Left = 8 - Top = 139 - Width = 129 - Height = 25 - Caption = 'Turn M/D on/off' - TabOrder = 3 - OnClick = btn_TurnMDClick - end - object cbCloseBeforeTest: TCheckBox - Left = 8 - Top = 11 - Width = 113 - Height = 17 - Caption = 'Close Before Test' - Checked = True - State = cbChecked - TabOrder = 4 - end - object btn_ShowDeltaCounters: TButton - Left = 8 - Top = 168 - Width = 129 - Height = 25 - Caption = 'Show Delta Counters' - TabOrder = 5 - OnClick = btn_ShowDeltaCountersClick - end - object btn_TestDeltas: TButton - Left = 8 - Top = 107 - Width = 129 - Height = 25 - Caption = 'Test Deltas' - TabOrder = 6 - OnClick = btn_TestDeltasClick - end - object btn_ClearMemo: TButton - Left = 144 - Top = 168 - Width = 97 - Height = 25 - Caption = 'Clear Memo' - TabOrder = 7 - OnClick = btn_ClearMemoClick - end - end - object Memo: TMemo - Left = 0 - Top = 0 - Width = 524 - Height = 193 - Align = alClient - ScrollBars = ssVertical - TabOrder = 1 - end - end - object DADriverManager1: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 16 - Top = 8 - end - object DAConnectionManager1: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=.;Database=Northwind;UserID=sa;AuxDriver=SQLOLEDB.1;p' + - 'assword=;' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager1 - PoolingEnabled = True - Left = 80 - Top = 8 - end - object DASchema1: TDASchema - ConnectionManager = DAConnectionManager1 - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 48 - Top = 8 - end - object DAADODriver1: TDAADODriver - Left = 112 - Top = 8 - end - object dtCustomers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 276 - Top = 27 - end - object dsCustomers: TDADataSource - DataTable = dtCustomers - Left = 292 - Top = 43 - end - object dtOrders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 340 - Top = 27 - end - object dsOrders: TDADataSource - DataTable = dtOrders - Left = 356 - Top = 43 - end - object DABinDataStreamer: TDABinDataStreamer - Left = 146 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.pas deleted file mode 100644 index 07dfc8a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Data Streamers/fMainForm.pas +++ /dev/null @@ -1,234 +0,0 @@ -unit fMainForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, DB, Grids, DBGrids, ExtCtrls, DBCtrls, - uDADataTable, uDABINAdapter, uDAClasses, uDADriverManager, uDAInterfaces, - uDADataStreamer, uDAScriptingProvider, uDACDSDataTable, uDAEngine, - uDAADODriver; - -type - TForm1 = class(TForm) - DADriverManager1: TDADriverManager; - DAADODriver1: TDAADODriver; - DAConnectionManager1: TDAConnectionManager; - dtCustomers: TDACDSDataTable; - dsCustomers: TDADataSource; - DBGrid1: TDBGrid; - dtOrders: TDACDSDataTable; - dsOrders: TDADataSource; - DBGrid2: TDBGrid; - Panel1: TPanel; - DBNavigator2: TDBNavigator; - Button3: TButton; - cbApplyOrdersSchema: TCheckBox; - Panel2: TPanel; - cbApplyCustomersSchema: TCheckBox; - Button2: TButton; - DBNavigator1: TDBNavigator; - Panel3: TPanel; - Panel4: TPanel; - btn_TestDatasets: TButton; - cbSkipCustomers: TCheckBox; - cbSkipOrders: TCheckBox; - btn_TurnMD: TButton; - cbCloseBeforeTest: TCheckBox; - btn_ShowDeltaCounters: TButton; - btn_TestDeltas: TButton; - btn_ClearMemo: TButton; - Memo: TMemo; - DASchema1: TDASchema; - DABinDataStreamer: TDABinDataStreamer; - procedure FormCreate(Sender: TObject); - procedure btn_TestDatasetsClick(Sender: TObject); - procedure Button2Click(Sender: TObject); - procedure Button3Click(Sender: TObject); - procedure btn_TurnMDClick(Sender: TObject); - procedure btn_ShowDeltaCountersClick(Sender: TObject); - procedure btn_TestDeltasClick(Sender: TObject); - procedure btn_ClearMemoClick(Sender: TObject); - private - fConnection: IDAConnection; - end; - -var - Form1: TForm1; - -implementation - -uses uROTypes, uDADelta; - -{$R *.dfm} - -procedure TForm1.FormCreate(Sender: TObject); -begin - fConnection := DAConnectionManager1.NewConnection('ADO'); -end; - -procedure TForm1.btn_TestDatasetsClick(Sender: TObject); -var - stream: Binary; - customers, - orders: IDADataset; - i: integer; - start: Cardinal; -begin - if cbCloseBeforeTest.Checked then begin - dtCustomers.Close; - dtOrders.Close; - end; - - stream := Binary.Create; - - with DABinDataStreamer do try - customers := DASchema1.NewDataset(fConnection, 'Customers'); - //customers.Where.AddText(' 1=2'); - orders := DASchema1.NewDataset(fConnection, 'Orders'); - //orders.Where.AddText(' 1=2'); - - start := GetTickCount; - - // Writes the data - Initialize(stream, aiWrite); - if not cbSkipCustomers.Checked then WriteDataset(customers, [woSchema, woRows], -1); - - if not cbSkipOrders.Checked then WriteDataset(orders, [woRows, woSchema], -1); - Finalize; - // End of write data - - Memo.Lines.Add('WRITE completed in ' + IntToStr(GetTickCount - start) + 'ms'); - - // Logging info - Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long'); - - start := GetTickCount; - Initialize(stream, aiReadFromBeginning); - - // Reads the data - if not cbSkipCustomers.Checked then begin - if cbApplyCustomersSchema.Checked then - ReadDataset('Customers', dtCustomers, TRUE) - else - ReadDataset('Customers', dtCustomers); - end; - - if not cbSkipOrders.Checked then begin - if cbApplyOrdersSchema.Checked then - ReadDataset('Orders', dtOrders, TRUE) - else - ReadDataset('Orders', dtOrders); - end; - - Finalize; - - // End of read data - Memo.Lines.Add('READ completed in ' + IntToStr(GetTickCount - start) + 'ms'); - - // Logging info - Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas'); - for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]); - for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]); - Memo.Lines.Add(' '); - finally - stream.Free; - end; -end; - -procedure TForm1.Button2Click(Sender: TObject); -begin - dtCustomers.Active := dtCustomers.Active xor TRUE; -end; - -procedure TForm1.Button3Click(Sender: TObject); -begin - dtOrders.Active := dtOrders.Active xor TRUE -end; - -procedure TForm1.btn_TurnMDClick(Sender: TObject); -begin - if dtOrders.MasterSource = nil then begin - dtOrders.MasterFields := 'CustomerID'; - dtOrders.DetailFields := 'CustomerID'; - dtOrders.MasterSource := dsCustomers; - end - - else begin - dtOrders.MasterSource := nil; - dtOrders.MasterFields := ''; - dtOrders.DetailFields := ''; - end; - - btn_TestDatasets.Enabled := dtOrders.MasterSource = nil; -end; - -procedure TForm1.btn_ShowDeltaCountersClick(Sender: TObject); -begin - ShowMessage(Format('Changes: Customers %d, Orders %d', [dtCustomers.Delta.Count, dtOrders.Delta.Count])); -end; - -procedure TForm1.btn_TestDeltasClick(Sender: TObject); -var - stream: TStream; - i: integer; - orddelta, - custdelta: TDADelta; -begin - if not dtCustomers.Active or not dtOrders.Active then begin - MessageDlg('Both datatables must be open!', mtError, [mbOK], 0); - Exit; - end; - - stream := TMemoryStream.Create; - - custdelta := TDADelta.Create(dtCustomers); - orddelta := TDADelta.Create(dtOrders); - with DABinDataStreamer do try - // Writes the data - Initialize(stream, aiWrite); - if not cbSkipCustomers.Checked then WriteDelta(dtCustomers); - - if not cbSkipOrders.Checked then WriteDelta(dtOrders); - Finalize; - // End of write data - - // Logging info - Memo.Lines.Add('Stream is now ' + IntToStr(stream.Size) + ' bytes long'); - - Initialize(stream, aiReadFromBeginning); - - // Reads the data - if not cbSkipCustomers.Checked then begin - ReadDelta('dtCustomers', custdelta); - Memo.Lines.Add('Customers delta contains ' + IntToStr(custdelta.Count) + ' changes'); - end; - - if not cbSkipOrders.Checked then begin - ReadDelta('dtOrders', orddelta); - Memo.Lines.Add('Orders delta contains ' + IntToStr(orddelta.Count) + ' changes'); - end; - - Finalize; - - // Logging info - Memo.Lines.Add('The stream contains ' + IntToStr(DatasetCount) + ' datasets and ' + IntToStr(DeltaCount) + ' deltas'); - for i := 0 to (DatasetCount - 1) do Memo.Lines.Add('Dataset -> ' + DatasetNames[i]); - for i := 0 to (DeltaCount - 1) do Memo.Lines.Add('Delta -> ' + DeltaNames[i]); - Memo.Lines.Add(' '); - - finally - stream.Free; - - custdelta.Free; - orddelta.Free; - end; -end; - -procedure TForm1.btn_ClearMemoClick(Sender: TObject); -begin - Memo.Lines.Clear; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.Sample.html deleted file mode 100644 index c0e0088..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.Sample.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - -

- Dynamic SQL -

- - -

Purpose

-

- This demo shows how to retrieve schema and/or data via SQL generated at - runtime. -

-

- When you compile and run the server, you will see it contains a memo displaying - "SQL details generated for Update will be displayed here". - The - demo does not actually attempt to update server data but merely display - the fields - that would be updated by processing the delta. See the TDynSQLService.UpdateData - code in DynSQLService_Impl to see how the delta is being processed. -

-

- Having next compiled and run the client, the first thing to try - is clicking - on the Retrieve Schema and Data button and you should then see the - Customers - data displayed in the grid. Changing the text in the memo, e.g. to - Select - * from "Order Details" and clicking the button again results - in the - display of a different dataset with a totally different schema. Any of - the datasets - in the database (Northwind, by default) may be accessed in this manner. -

-

- Other points of interest: -

-
    -
  • - As their names suggest, the Retrieve Schema and Retrieve Data - buttons - achieve the same as the Retrieve Schema and Data button. You might - want - to use them separately if the data has the same layout as the schema already - retrieved. - For example, having retrieved all the records (Max Records = -1), - you can - change the number of records required and select Retrieve Data because - the schema is correct. If you change the actual SQL though, you will need - to reload - the schema. -
  • -
  • - Save and Load buttons. Save stores the schema and - data in - Data.dat in the sample folder. If you only want to save the schema, - set - Max Records = 0 and retrieve schema and data (otherwise Save cannot work - because - the dataset is not open). Load restores the schema and any records - saved - no matter what data is currently open. Thus you can think of retrieve and - load - as similar operations but with remote and local data respectively. -
  • -
  • - The Update button simulates updating the dataset. You can see the - result - in the memo contained in the server form. -
  • -
- - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bdsgroup deleted file mode 100644 index 91866a0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - DynSQLServer.bdsproj - DynSQLClient.bdsproj - DynSQLServer.exe DynSQLClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bpg deleted file mode 100644 index ef95e27..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DynSQLServer.exe DynSQLClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DynSQLServer.exe: DynSQLServer.dpr - $(DCC) - -DynSQLClient.exe: DynSQLClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.groupproj deleted file mode 100644 index a79c349..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQL.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {67b524b6-f332-475d-8d78-7edde30d8a99} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.bdsproj deleted file mode 100644 index 7936d9b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - DynSQLClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dpr deleted file mode 100644 index 81907da..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dpr +++ /dev/null @@ -1,15 +0,0 @@ -program DynSQLClient; - -uses - Forms, - DynSQLMainClient in 'DynSQLMainClient.pas' {DynSQLMainClientForm}, - DynSQLLibrary_Intf in 'DynSQLLibrary_Intf.pas'; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'DynSQL Client'; - Application.CreateForm(TDynSQLMainClientForm, DynSQLMainClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dproj deleted file mode 100644 index c320b4c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.dproj +++ /dev/null @@ -1,37 +0,0 @@ - - - {a6ec96d6-69bf-4815-b64d-37174ee1d1be} - DynSQLClient.dpr - Debug - AnyCPU - DCC32 - DynSQLClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - -FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse105812511.0.0.01.0.0.0DynSQLClient.dpr - - - - - MainSource - - - -
DynSQLMainClientForm
-
-
-
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary.RODL deleted file mode 100644 index 161f4e9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary.RODL +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Intf.pas deleted file mode 100644 index 9b9c467..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Intf.pas +++ /dev/null @@ -1,101 +0,0 @@ -unit DynSQLLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{7DDA8CC1-A876-4A25-9280-3352E8A464EB}'; - TargetNamespace = ''; - - { Service Interface ID's } - IDynSQLService_IID : TGUID = '{02F71273-9E5C-4BD7-81EF-3BD4663EA0AB}'; - - { Event ID's } - -type - { Forward declarations } - IDynSQLService = interface; - - - - - - { Enumerateds } - - { IDynSQLService } - IDynSQLService = interface(IDataAbstractService) - ['{02F71273-9E5C-4BD7-81EF-3BD4663EA0AB}'] - procedure MyUpdateData(const Delta: Binary); - end; - - { CoDynSQLService } - CoDynSQLService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDynSQLService; - end; - - { TDynSQLService_Proxy } - TDynSQLService_Proxy = class(TDataAbstractService_Proxy, IDynSQLService) - protected - function __GetInterfaceName:string; override; - - procedure MyUpdateData(const Delta: Binary); - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ CoDynSQLService } - -class function CoDynSQLService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDynSQLService; -begin - result := TDynSQLService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TDynSQLService_Proxy } - -function TDynSQLService_Proxy.__GetInterfaceName:string; -begin - result := 'DynSQLService'; -end; - -procedure TDynSQLService_Proxy.MyUpdateData(const Delta: Binary); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DynSQLLibrary', __InterfaceName, 'MyUpdateData'); - __Message.Write('Delta', TypeInfo(Binary), Delta, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(IDynSQLService_IID, TDynSQLService_Proxy); - - -finalization - UnregisterProxyClass(IDynSQLService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Invk.pas deleted file mode 100644 index 2b91fc4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLLibrary_Invk.pas +++ /dev/null @@ -1,67 +0,0 @@ -unit DynSQLLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} DynSQLLibrary_Intf; - -type - {$M+} - TDynSQLService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_MyUpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TDynSQLService_Invoker } - -procedure TDynSQLService_Invoker.Invoke_MyUpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure MyUpdateData(const Delta: Binary); } -var - Delta: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - Delta := nil; - try - __Message.Read('Delta', TypeInfo(Binary), Delta, []); - - (__Instance as IDynSQLService).MyUpdateData(Delta); - - __Message.InitializeResponseMessage(__Transport, 'DynSQLLibrary', 'DynSQLService', 'MyUpdateDataResponse'); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - __oResponseOptions := [roNoResponse]; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(Delta); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.dfm deleted file mode 100644 index a4eb9d7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.dfm +++ /dev/null @@ -1,231 +0,0 @@ -object DynSQLMainClientForm: TDynSQLMainClientForm - Left = 466 - Top = 173 - BorderWidth = 5 - Caption = 'DynSQL Client' - ClientHeight = 343 - ClientWidth = 523 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 136 - Width = 66 - Height = 13 - Caption = 'Max Records:' - end - object Memo: TMemo - Left = 0 - Top = 0 - Width = 523 - Height = 124 - Align = alTop - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Courier New' - Font.Style = [] - Lines.Strings = ( - 'SELECT * FROM Customers') - ParentFont = False - ScrollBars = ssBoth - TabOrder = 0 - end - object seMaxRecs: TSpinEdit - Left = 80 - Top = 133 - Width = 65 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 1 - Value = -1 - end - object RetrieveSchema: TButton - Left = 0 - Top = 160 - Width = 92 - Height = 25 - Caption = 'Retrieve Schema' - TabOrder = 2 - OnClick = RetrieveSchemaClick - end - object Grid: TDBGrid - Left = 0 - Top = 195 - Width = 523 - Height = 148 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = DADataSource - TabOrder = 3 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object RetrieveData: TButton - Left = 95 - Top = 160 - Width = 92 - Height = 25 - Caption = 'Retrieve Data' - TabOrder = 4 - OnClick = RetrieveDataClick - end - object RetrieveSchemaAndData: TButton - Left = 191 - Top = 160 - Width = 154 - Height = 25 - Caption = 'Retrieve Schema and Data' - TabOrder = 5 - OnClick = RetrieveSchemaAndDataClick - end - object Save: TButton - Left = 349 - Top = 160 - Width = 45 - Height = 25 - Caption = 'Save' - TabOrder = 6 - OnClick = SaveClick - end - object Load: TButton - Left = 398 - Top = 160 - Width = 45 - Height = 25 - Caption = 'Load' - TabOrder = 7 - OnClick = LoadClick - end - object Update: TButton - Left = 446 - Top = 160 - Width = 75 - Height = 25 - Caption = 'Update' - TabOrder = 8 - OnClick = UpdateClick - end - object dbNavigator: TDBNavigator - Left = 151 - Top = 129 - Width = 320 - Height = 25 - DataSource = DADataSource - ParentShowHint = False - ShowHint = True - TabOrder = 9 - end - object ROBINMessage: TROBinMessage - Left = 32 - Top = 40 - end - object ROWinInetHTTPChannel1: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 64 - Top = 40 - end - object DataStreamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 128 - Top = 40 - end - object DataTable: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = DARemoteDataAdapter - BeforeRefresh = DataTableBeforeRefresh - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'DynamicDataset' - Left = 32 - Top = 80 - end - object DADataSource: TDADataSource - DataSet = DataTable.Dataset - DataTable = DataTable - Left = 64 - Top = 80 - end - object svcDynSQLService: TRORemoteService - Message = ROBINMessage - Channel = ROWinInetHTTPChannel1 - ServiceName = 'DynSQLService' - Left = 96 - Top = 40 - end - object DARemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = svcDynSQLService - GetDataCall.RemoteService = svcDynSQLService - GetDataCall.MethodName = 'SQLGetData' - GetDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'aSQLText' - DataType = rtString - Flag = fIn - Value = Null - end - item - Name = 'aIncludeSchema' - DataType = rtBoolean - Flag = fIn - Value = Null - end - item - Name = 'aMaxRecords' - DataType = rtInteger - Flag = fIn - Value = Null - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - GetDataCall.OutgoingIncludeSchemaParameter = 'aIncludeSchema' - GetDataCall.OutgoingMaxRecordsParameter = 'aMaxRecords' - UpdateDataCall.RemoteService = svcDynSQLService - UpdateDataCall.MethodName = 'MyUpdateData' - UpdateDataCall.Params = < - item - Name = 'Delta' - DataType = rtBinary - Flag = fIn - Value = Null - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'Delta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = svcDynSQLService - RemoteService = svcDynSQLService - DataStreamer = DataStreamer - FailureBehavior = fbBoth - Left = 98 - Top = 80 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.pas deleted file mode 100644 index b637a42..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLMainClient.pas +++ /dev/null @@ -1,117 +0,0 @@ -unit DynSQLMainClient; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uROWinInetHttpChannel, uROClient, - uROBINMessage, StdCtrls, Spin, uDADataTable, - DB, Grids, DBGrids, uRORemoteService, - uDAScriptingProvider, ExtCtrls, DBCtrls, uDARemoteDataAdapter, - uDADataStreamer, uDAInterfaces, uDABin2DataStreamer, - uDAMemDataTable; - -type - TDynSQLMainClientForm = class(TForm) - ROBINMessage: TROBINMessage; - ROWinInetHTTPChannel1: TROWinInetHTTPChannel; - Memo: TMemo; - seMaxRecs: TSpinEdit; - Label1: TLabel; - RetrieveSchema: TButton; - DataStreamer: TDABin2DataStreamer; - DataTable: TDAMemDataTable; - Grid: TDBGrid; - DADataSource: TDADataSource; - svcDynSQLService: TRORemoteService; - RetrieveData: TButton; - RetrieveSchemaAndData: TButton; - Save: TButton; - Load: TButton; - Update: TButton; - dbNavigator: TDBNavigator; - DARemoteDataAdapter: TDARemoteDataAdapter; - procedure RetrieveSchemaClick(Sender: TObject); - procedure RetrieveDataClick(Sender: TObject); - procedure RetrieveSchemaAndDataClick(Sender: TObject); - procedure SaveClick(Sender: TObject); - procedure LoadClick(Sender: TObject); - procedure UpdateClick(Sender: TObject); - procedure DataTableBeforeRefresh(DataTable: TDADataTable); - private - { Private declarations } - procedure InitRDA(aIncludeSchema: Boolean; AMaxRecords: integer); - public - { Public declarations } - end; - -var - DynSQLMainClientForm: TDynSQLMainClientForm; - -implementation - -uses DynSQLLibrary_Intf, uROTypes, uDARemoteDataAdapterRequests, uRODL; - -{$R *.dfm} - -procedure TDynSQLMainClientForm.RetrieveSchemaClick(Sender: TObject); -begin - InitRDA(True, 0); - DataTable.Close; -end; - -procedure TDynSQLMainClientForm.RetrieveDataClick(Sender: TObject); -begin - InitRDA(False, seMaxRecs.Value); -end; - -procedure TDynSQLMainClientForm.RetrieveSchemaAndDataClick(Sender: TObject); -begin - InitRDA(True, seMaxRecs.Value); -end; - -procedure TDynSQLMainClientForm.SaveClick(Sender: TObject); -begin - DataTable.SaveToFile(ExtractFilePath(Application.ExeName) + 'Data.dat'); -end; - -procedure TDynSQLMainClientForm.LoadClick(Sender: TObject); -begin - DataTable.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Data.dat'); -end; - -procedure TDynSQLMainClientForm.UpdateClick(Sender: TObject); -var - deltadata: Binary; -begin - deltadata := Binary.Create; - try - // Packs the delta of the data table and sends it over. - DataStreamer.Initialize(deltadata, aiWrite); - DataStreamer.WriteDelta(DataTable); - DataStreamer.Finalize; - - (svcDynSQLService as IDynSQLService).MyUpdateData(deltadata); - finally - deltadata.Free; - end; -end; - -procedure TDynSQLMainClientForm.DataTableBeforeRefresh(DataTable: TDADataTable); -begin - DaRemoteDataAdapter.GetDataCall.ParamByName('aSQLText').AsString := Memo.Lines.Text; -end; - -procedure TDynSQLMainClientForm.InitRDA(aIncludeSchema: Boolean; - AMaxRecords: integer); -begin - with DataTable do begin - Close; - DARemoteDataAdapter.GetDataCall.ParamByName('aSQLText').AsString := Memo.Lines.Text; - MaxRecords := AMaxRecords; - DARemoteDataAdapter.Fill([DataTable], true, aIncludeSchema); - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.bdsproj deleted file mode 100644 index 233d818..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - DynSQLServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dpr deleted file mode 100644 index f5094ec..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dpr +++ /dev/null @@ -1,21 +0,0 @@ -program DynSQLServer; - -{#ROGEN:DynSQLLibrary.rodl} // RemObjects: Careful, do not remove! - -uses - uROCOMInit, - Forms, - DynSQLServerMain in 'DynSQLServerMain.pas' {DynSQLServerMainForm}, - DynSQLLibrary_Intf in 'DynSQLLibrary_Intf.pas', - DynSQLLibrary_Invk in 'DynSQLLibrary_Invk.pas', - DynSQLService_Impl in 'DynSQLService_Impl.pas' {DynSQLService: TRORemoteDataModule}; - -{$R *.RES} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'DynSQL Server'; - Application.CreateForm(TDynSQLServerMainForm, DynSQLServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dproj deleted file mode 100644 index 789dac4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.dproj +++ /dev/null @@ -1,77 +0,0 @@ - - - {2d78a543-7091-4d6f-9ce8-69b6915cef48} - DynSQLServer.dpr - Debug - AnyCPU - DCC32 - DynSQLServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - DynSQLServer.dpr - - - - - - - MainSource - - - - -
DynSQLServerMainForm
-
- -
DynSQLService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.dfm deleted file mode 100644 index d962678..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.dfm +++ /dev/null @@ -1,79 +0,0 @@ -object DynSQLServerMainForm: TDynSQLServerMainForm - Left = 285 - Top = 181 - AutoScroll = False - BorderWidth = 5 - Caption = 'DynSQL Server' - ClientHeight = 221 - ClientWidth = 413 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Form1' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 14 - object RoPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 0 - Top = 0 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object Memo: TMemo - Left = 0 - Top = 54 - Width = 413 - Height = 167 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - Lines.Strings = ( - 'SQL details generated for Update will be displayed here') - ReadOnly = True - TabOrder = 0 - end - object ROMessage: TROBinMessage - Left = 256 - end - object ROServer: TROIndyHTTPServer - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'BIN' - end> - Port = 8099 - Left = 288 - end - object DADriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 320 - end - object DAConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;UserID=sa;AuxDriver=SQLOLEDB.1;Database=Nor' + - 'thwind;password=;' - Description = 'Borland ADOExpress Connection' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = True - Left = 384 - end - object DAADODriver: TDAADODriver - Left = 352 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.pas deleted file mode 100644 index 0cac268..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLServerMain.pas +++ /dev/null @@ -1,60 +0,0 @@ -unit DynSQLServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, uROClient, uROBINMessage, uROClientIntf, uROServer, uROIndyHTTPServer, - uROIndyTCPServer, uROPoweredByRemObjectsButton, SyncObjs, - uDAClasses, uDADriverManager, uDAEngine, uDAADODriver; - -type - TDynSQLServerMainForm = class(TForm) - ROMessage: TROBINMessage; - ROServer: TROIndyHTTPServer; - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - DADriverManager: TDADriverManager; - DAConnectionManager: TDAConnectionManager; - DAADODriver: TDAADODriver; - Memo: TMemo; - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - private - { Private declarations } - CriticalSection: TCriticalSection; - public - { Public declarations } - procedure LOG(str: string); - end; - -var - DynSQLServerMainForm: TDynSQLServerMainForm; - -implementation - -{$R *.dfm} - -{ TDynSQLServerMainForm } - -procedure TDynSQLServerMainForm.LOG(str: string); -begin - CriticalSection.Enter; - try - Memo.Lines.Text := str; - finally - CriticalSection.Leave; - end; -end; - -procedure TDynSQLServerMainForm.FormCreate(Sender: TObject); -begin - CriticalSection := TCriticalSection.Create; -end; - -procedure TDynSQLServerMainForm.FormDestroy(Sender: TObject); -begin - CriticalSection.Free; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.dfm deleted file mode 100644 index 61a5dfd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.dfm +++ /dev/null @@ -1,27 +0,0 @@ -object DynSQLService: TDynSQLService - OldCreateOrder = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - AllowExecuteSQL = True - ExportedDataTables = <> - Height = 300 - Width = 300 - object DataStreamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 64 - Top = 16 - end - object Schema: TDASchema - ConnectionManager = DynSQLServerMainForm.DAConnectionManager - Datasets = <> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 25 - Top = 16 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.pas deleted file mode 100644 index ccec0dc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/DynSQLService_Impl.pas +++ /dev/null @@ -1,90 +0,0 @@ -unit DynSQLService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, uDAInterfaces, - {Generated:} DynSQLLibrary_Intf, uDAClasses, - uDABin2DataStreamer, uDADataStreamer; - -type - { TDynSQLService } - TDynSQLService = class(TDataAbstractService, IDynSQLService) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - procedure Log(aStr: string); - function _GetConnection: IDAConnection; - protected - procedure MyUpdateData(const Delta: Binary); - end; - -implementation - -{$R *.dfm} -uses - {Generated:} DynSQLLibrary_Invk, DynSQLServerMain, Dialogs, TypInfo, uDADelta; - -procedure Create_DynSQLService(out anInstance: IUnknown); -begin - anInstance := TDynSQLService.Create(nil); -end; - -{ TDynSQLService } - -function TDynSQLService._GetConnection: IDAConnection; -begin - Result := DynSQLServerMainForm.DAConnectionManager.NewConnection('ADO'); -end; - -procedure TDynSQLService.Log(aStr: string); -begin - DynSQLServerMainForm.Log(aStr); -end; - -procedure TDynSQLService.MyUpdateData(const Delta: Binary); -var - conn: IDAConnection; - realdelta: IDADelta; - i: integer; - sql: string; -begin - // Opens a connection - conn := _GetConnection; - - // Creates a delta object - realdelta := NewDelta('tempDelta'); - - // Converts the binary stream we just received. - DataStreamer.Initialize(Delta, aiReadFromBeginning); - DataStreamer.ReadDelta(DataStreamer.DeltaNames[0], realdelta); - DataStreamer.Finalize; - - // Builds a fake SQL string for updating and displays it - sql := 'Updating query "' + DataStreamer.DeltaNames[0] + '", fields '; - - for i := 0 to (realdelta.LoggedFieldCount - 1) do - sql := sql + realdelta.LoggedFieldNames[i] + '(' + GetEnumName(TypeInfo(TDADataType), Ord(realdelta.LoggedFieldTypes[i])) + '), '; - - sql := Copy(sql, 1, Length(sql) - 2); - - Log(sql); -end; - -initialization - TROClassFactory.Create('DynSQLService', Create_DynSQLService, TDynSQLService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/RODLFILE.res deleted file mode 100644 index 9b68675..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Dynamic SQL/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.Sample.html deleted file mode 100644 index c101fc0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.Sample.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - -

- Fetch -

- - -

Purpose

-

- This demo shows how to fetch paged orders and also master/detail via single - server call. See the - DA04 - - article for a discussion on Dynamic Method Binding using this - sample as its example.

-

Getting Started

-

- When you compile and run both projects you will see the client present you - with two tabbed pages: -

- -
    -
  • - Paged Orders: when the master dataset ("Orders") is opened, - the first 40 records are fetched from the server (assuming that you haven't - modified the Max Records Per Fetch setting). Try clicking on the vertical - scrollbar. - Initially, you will be displaying the other records fetched when the dataset - was opened. Once you have reached record 40, another batch of records are then - fetched from the server and you can see when this happens because the scrollbar - thumb reduces size.
    OrderDetail records are only fetched as required. -
  • -
  • - Fetch All: retrieves all orders within the range specified. All - associated OrderDetail records are retrieved also. -
  • -
-

Examine the Code

-

- The following methods are worth examining: -

-
    -
  • - GetOrdersAndDetails in FetchService_Impl: called by the Fetch - All page and it shows how to retrieve master and detail records in a single - server call. -
  • -
  • - tbl_PagedOrdersAfterScroll in FetchClientMain: holds the paging logic. -
  • -
- - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bdsgroup deleted file mode 100644 index d2590a9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - FetchServer.bdsproj - FetchClient.bdsproj - FetchServer.exe FetchClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bpg deleted file mode 100644 index 2469b7d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = FetchServer.exe FetchClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -FetchServer.exe: FetchServer.dpr - $(DCC) - -FetchClient.exe: FetchClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.groupproj deleted file mode 100644 index deb928a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/Fetch.groupproj +++ /dev/null @@ -1,44 +0,0 @@ - - - {b6910b17-afe5-4bb5-af6f-cf820851de91} - - - - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.bdsproj deleted file mode 100644 index 87209ab..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - FetchClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dpr deleted file mode 100644 index f5f7e44..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program FetchClient; - -uses - uROComInit, - Forms, - MidasLib, - FetchClientMain in 'FetchClientMain.pas' {FetchClientMainForm}, - FetchClientData in 'FetchClientData.pas' {FetchClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Fetch Client'; - Application.CreateForm(TFetchClientDataModule, FetchClientDataModule); - Application.CreateForm(TFetchClientMainForm, FetchClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dproj deleted file mode 100644 index 47c8158..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.dproj +++ /dev/null @@ -1,44 +0,0 @@ - - - {3ef0f4e0-3dde-4abb-b2e8-8b555c0f23dc} - FetchClient.dpr - Debug - AnyCPU - DCC32 - FetchClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - False - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;D:\Jenya\DLIB\jcl\lib\d11\debug - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;D:\Jenya\DLIB\jcl\lib\d11\debug - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;D:\Jenya\DLIB\jcl\lib\d11\debug - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;D:\Jenya\DLIB\jcl\lib\d11\debug - - - Delphi.Personality - - -FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FetchClient.dpr - - - - - MainSource - - -
FetchClientDataModule
-
- -
FetchClientMainForm
-
-
-
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.dfm deleted file mode 100644 index 836db84..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.dfm +++ /dev/null @@ -1,30 +0,0 @@ -object FetchClientDataModule: TFetchClientDataModule - OldCreateOrder = True - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'FetchService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 40 - Top = 140 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.pas deleted file mode 100644 index c80a7c8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientData.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit FetchClientData; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDABin2DataStreamer, uDADataStreamer; - -type - TFetchClientDataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - private - { Private declarations } - public - { Public declarations } - - end; - -var - FetchClientDataModule: TFetchClientDataModule; - -implementation - -uses - FetchClientMain; -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.dfm deleted file mode 100644 index a79df0e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.dfm +++ /dev/null @@ -1,926 +0,0 @@ -object FetchClientMainForm: TFetchClientMainForm - Left = 353 - Top = 279 - Caption = 'Fetch Client' - ClientHeight = 406 - ClientWidth = 447 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poDesigned - PixelsPerInch = 96 - TextHeight = 13 - object PageControl1: TPageControl - Left = 0 - Top = 0 - Width = 447 - Height = 406 - ActivePage = TabSheet2 - Align = alClient - TabOrder = 0 - object TabSheet1: TTabSheet - BorderWidth = 5 - Caption = 'Paged Orders' - object Label1: TLabel - Left = 0 - Top = 9 - Width = 115 - Height = 13 - Caption = 'Max Records Per Fetch:' - end - object lbFetchedRecs: TLabel - Left = 222 - Top = 9 - Width = 117 - Height = 13 - Caption = 'No records fetched yet...' - end - object gPagedOrders: TDBGrid - Left = 2 - Top = 51 - Width = 429 - Height = 207 - Align = alCustom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = ds_PagedOrders - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object seMaxRecords: TSpinEdit - Left = 126 - Top = 4 - Width = 81 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 1 - Value = 40 - end - object bFetchPagedOrders: TButton - Left = 354 - Top = 3 - Width = 75 - Height = 25 - Anchors = [akTop, akRight] - Caption = 'Open/Close' - TabOrder = 2 - OnClick = bFetchPagedOrdersClick - end - object gPagedOrderDetails: TDBGrid - Left = 0 - Top = 264 - Width = 429 - Height = 104 - Align = alBottom - DataSource = ds_PagedOrderDetails - TabOrder = 3 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel1: TPanel - Left = 0 - Top = 259 - Width = 429 - Height = 5 - Align = alBottom - BevelOuter = bvNone - TabOrder = 4 - end - end - object TabSheet2: TTabSheet - BorderWidth = 5 - Caption = 'Fetch All' - ImageIndex = 1 - object Label2: TLabel - Left = 0 - Top = 3 - Width = 65 - Height = 13 - Caption = 'Start OrderID:' - end - object Label3: TLabel - Left = 0 - Top = 27 - Width = 62 - Height = 13 - Caption = 'End OrderID:' - end - object gOrders: TDBGrid - Left = 2 - Top = 51 - Width = 427 - Height = 207 - Align = alCustom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = ds_Orders - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gOrderDetails: TDBGrid - Left = 0 - Top = 264 - Width = 429 - Height = 104 - Align = alBottom - DataSource = ds_OrderDetails - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object bFetchAll: TButton - Left = 354 - Top = 3 - Width = 75 - Height = 25 - Anchors = [akTop, akRight] - Caption = 'Open/Close' - TabOrder = 2 - OnClick = bFetchAllClick - end - object seStart: TSpinEdit - Left = 72 - Top = 0 - Width = 76 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 3 - Value = 10248 - end - object seEnd: TSpinEdit - Left = 72 - Top = 24 - Width = 76 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 4 - Value = 10300 - end - object Panel2: TPanel - Left = 0 - Top = 259 - Width = 429 - Height = 5 - Align = alBottom - BevelOuter = bvNone - TabOrder = 5 - end - end - end - object daPaged: TDARemoteDataAdapter - GetSchemaCall.RemoteService = FetchClientDataModule.RemoteService - GetDataCall.RemoteService = FetchClientDataModule.RemoteService - UpdateDataCall.RemoteService = FetchClientDataModule.RemoteService - GetScriptsCall.RemoteService = FetchClientDataModule.RemoteService - RemoteService = FetchClientDataModule.RemoteService - DataStreamer = FetchClientDataModule.DataStreamer - FailureBehavior = fbBoth - Left = 117 - Top = 143 - end - object tbl_OrderDetails: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end - item - Name = 'EndingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - MasterMappingMode = mmWhere - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - RemoteDataAdapter = daFetchAll - ReadOnly = False - MasterSource = ds_Orders - MasterFields = 'OrderID' - DetailFields = 'OrderID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'OrderDetails' - Left = 269 - Top = 157 - end - object ds_OrderDetails: TDADataSource - DataSet = tbl_OrderDetails.Dataset - DataTable = tbl_OrderDetails - Left = 297 - Top = 157 - end - object tbl_Orders: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - GeneratorName = 'Orders' - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end - item - Name = 'EndingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = daFetchAll - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates, moAllInOneFetch] - LogicalName = 'Orders' - Left = 269 - Top = 129 - end - object ds_Orders: TDADataSource - DataSet = tbl_Orders.Dataset - DataTable = tbl_Orders - Left = 297 - Top = 129 - end - object tbl_PagedOrderDetails: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmWhere - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = daPaged - ReadOnly = False - MasterSource = ds_PagedOrders - MasterFields = 'OrderID' - DetailFields = 'OrderID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'PagedOrderDetails' - Left = 61 - Top = 157 - end - object ds_PagedOrderDetails: TDADataSource - DataSet = tbl_PagedOrderDetails.Dataset - DataTable = tbl_PagedOrderDetails - Left = 89 - Top = 157 - end - object tbl_PagedOrders: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - GeneratorName = 'Orders' - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = daPaged - AfterScroll = tbl_PagedOrdersAfterScroll - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'PagedOrders' - Left = 61 - Top = 129 - end - object ds_PagedOrders: TDADataSource - DataSet = tbl_PagedOrders.Dataset - DataTable = tbl_PagedOrders - Left = 89 - Top = 129 - end - object daFetchAll: TDARemoteDataAdapter - GetSchemaCall.RemoteService = FetchClientDataModule.RemoteService - GetDataCall.RemoteService = FetchClientDataModule.RemoteService - GetDataCall.MethodName = 'GetOrdersAndDetails' - GetDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'StartOrderID' - DataType = rtInteger - Flag = fIn - Value = Null - end - item - Name = 'EndOrderID' - DataType = rtInteger - Flag = fIn - Value = Null - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = FetchClientDataModule.RemoteService - GetScriptsCall.RemoteService = FetchClientDataModule.RemoteService - RemoteService = FetchClientDataModule.RemoteService - DataStreamer = FetchClientDataModule.DataStreamer - FailureBehavior = fbBoth - Left = 325 - Top = 143 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.pas deleted file mode 100644 index 1be4b4e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchClientMain.pas +++ /dev/null @@ -1,121 +0,0 @@ -unit FetchClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, Spin, - Grids, DBGrids, ComCtrls, DB, uDAInterfaces, uDADataTable, - uDAScriptingProvider, uDAMemDataTable, uDARemoteDataAdapter; - -type - TFetchClientMainForm = class(TForm) - PageControl1: TPageControl; - TabSheet1: TTabSheet; - Label1: TLabel; - lbFetchedRecs: TLabel; - gPagedOrders: TDBGrid; - seMaxRecords: TSpinEdit; - bFetchPagedOrders: TButton; - gPagedOrderDetails: TDBGrid; - Panel1: TPanel; - TabSheet2: TTabSheet; - Label2: TLabel; - Label3: TLabel; - gOrders: TDBGrid; - gOrderDetails: TDBGrid; - bFetchAll: TButton; - seStart: TSpinEdit; - seEnd: TSpinEdit; - Panel2: TPanel; - daPaged: TDARemoteDataAdapter; - tbl_OrderDetails: TDAMemDataTable; - ds_OrderDetails: TDADataSource; - tbl_Orders: TDAMemDataTable; - ds_Orders: TDADataSource; - tbl_PagedOrderDetails: TDAMemDataTable; - ds_PagedOrderDetails: TDADataSource; - tbl_PagedOrders: TDAMemDataTable; - ds_PagedOrders: TDADataSource; - daFetchAll: TDARemoteDataAdapter; - procedure bFetchPagedOrdersClick(Sender: TObject); - procedure bFetchAllClick(Sender: TObject); - procedure tbl_PagedOrdersAfterScroll(DataTable: TDADataTable); - private - { Private declarations } - fFetchRequired: boolean; - public - { Public declarations } - end; - -var - FetchClientMainForm: TFetchClientMainForm; - -implementation - -uses - FetchClientData; - -{$R *.dfm} - -procedure TFetchClientMainForm.bFetchAllClick(Sender: TObject); -begin - { Sets the filtering options for the server method so we only retrieve the selected - records. It's good advice to always filter data like this to minimize network trafic. - - The server method is defined as: - - function GetOrdersAndDetails(const StartOrderID: Integer; - const EndOrderID: Integer): Binary; - - The Binary returned by the server contains a stream with all the orders and all the details } - - daFetchAll.GetDataCall.ParamByName('StartOrderID').AsInteger := seStart.Value; - daFetchAll.GetDataCall.ParamByName('EndOrderID').AsInteger := seEnd.Value; - tbl_Orders.Active :=not tbl_Orders.Active; -end; - -procedure TFetchClientMainForm.bFetchPagedOrdersClick(Sender: TObject); -begin - lbFetchedRecs.Caption := 'No records fetched yet...'; - if not tbl_PagedOrders.Active then begin - tbl_PagedOrders.ParamByName('StartingOrderID').AsInteger := 0; - tbl_PagedOrders.MaxRecords := seMaxRecords.Value; - lbFetchedRecs.Caption := 'No records fetched yet...'; - // fFetchedRequired is a flag that we set to FALSE when the last page is fetched - fFetchRequired := True; - end; - tbl_PagedOrders.Active := not tbl_PagedOrders.Active -end; - -procedure TFetchClientMainForm.tbl_PagedOrdersAfterScroll( - DataTable: TDADataTable); -var - lrecordcount: integer; -begin - { This is the core of the paging process. When we reach the last record in the current - set we want to issue a new request to the server to get the next packet. If the requested - records is different than the returned amount it means there's nothing more to fetch and - we're done with the paging. - - By doing paging this way we have full control on what happens server side and what SQL statements - are generated. This is only one of the many possible paging implementations you could do using - Data Abstract. The control is in your hands! } - - if fFetchRequired and DataTable.EOF and not DataTable.Fetching then - with DataTable do begin - ParamByName('StartingOrderID').AsInteger := FieldByName('OrderID').AsInteger; - MaxRecords := seMaxRecords.Value; - lrecordcount := DataTable.RecordCount; - LoadFromRemoteSource(True); - lrecordcount := RecordCount-lrecordcount; - - lbFetchedRecs.Caption := IntTostr(lrecordcount) + ' records retrieved'; - fFetchRequired := lrecordcount = MaxRecords; - if not fFetchRequired then - MessageDlg(Format('Done fetching!!! Expected %d rows but only got %d ', - [MaxRecords, lrecordcount]), mtInformation, [mbOK], 0); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary.RODL deleted file mode 100644 index 8f79f9a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary.RODL +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Intf.pas deleted file mode 100644 index 874a513..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Intf.pas +++ /dev/null @@ -1,104 +0,0 @@ -unit FetchLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{02C22018-F060-4159-A052-DDFAECD3EA97}'; - TargetNamespace = ''; - - { Service Interface ID's } - IFetchService_IID : TGUID = '{E70F3537-38F1-4C4E-AB64-6935C9C9CF69}'; - - { Event ID's } - -type - { Forward declarations } - IFetchService = interface; - - - - - - { Enumerateds } - - { IFetchService } - IFetchService = interface(IDataAbstractService) - ['{E70F3537-38F1-4C4E-AB64-6935C9C9CF69}'] - function GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; - end; - - { CoFetchService } - CoFetchService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IFetchService; - end; - - { TFetchService_Proxy } - TFetchService_Proxy = class(TDataAbstractService_Proxy, IFetchService) - protected - function __GetInterfaceName:string; override; - - function GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ CoFetchService } - -class function CoFetchService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IFetchService; -begin - result := TFetchService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TFetchService_Proxy } - -function TFetchService_Proxy.__GetInterfaceName:string; -begin - result := 'FetchService'; -end; - -function TFetchService_Proxy.GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'FetchLibrary', __InterfaceName, 'GetOrdersAndDetails'); - __Message.Write('StartOrderID', TypeInfo(Integer), StartOrderID, []); - __Message.Write('EndOrderID', TypeInfo(Integer), EndOrderID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(IFetchService_IID, TFetchService_Proxy); - - -finalization - UnregisterProxyClass(IFetchService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Invk.pas deleted file mode 100644 index 00626d4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchLibrary_Invk.pas +++ /dev/null @@ -1,69 +0,0 @@ -unit FetchLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} FetchLibrary_Intf; - -type - {$M+} - TFetchService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_GetOrdersAndDetails(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TFetchService_Invoker } - -procedure TFetchService_Invoker.Invoke_GetOrdersAndDetails(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; } -var - StartOrderID: Integer; - EndOrderID: Integer; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('StartOrderID', TypeInfo(Integer), StartOrderID, []); - __Message.Read('EndOrderID', TypeInfo(Integer), EndOrderID, []); - - lResult := (__Instance as IFetchService).GetOrdersAndDetails(StartOrderID, EndOrderID); - - __Message.InitializeResponseMessage(__Transport, 'FetchLibrary', 'FetchService', 'GetOrdersAndDetailsResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.bdsproj deleted file mode 100644 index b800b9e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - FetchServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dpr deleted file mode 100644 index 4d702b2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dpr +++ /dev/null @@ -1,24 +0,0 @@ -program FetchServer; - -{#ROGEN:FetchLibrary.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - FetchServerMain in 'FetchServerMain.pas' {FetchServerMainForm}, - FetchServerData in 'FetchServerData.pas' {FetchServerDataModule: TDataModule}, - FetchLibrary_Intf in 'FetchLibrary_Intf.pas', - FetchLibrary_Invk in 'FetchLibrary_Invk.pas', - FetchService_Impl in 'FetchService_Impl.pas' {FetchService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'Fetch Server'; - Application.CreateForm(TFetchServerDataModule, FetchServerDataModule); - Application.CreateForm(TFetchServerMainForm, FetchServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dproj deleted file mode 100644 index 7708464..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.dproj +++ /dev/null @@ -1,44 +0,0 @@ - - - {c960438c-973c-4609-85d8-f600fec539dc} - FetchServer.dpr - Debug - AnyCPU - DCC32 - FetchServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - - -FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0FetchServer.dpr - - - - - MainSource - - - - -
FetchServerDataModule
-
- -
FetchServerMainForm
-
- -
FetchService
-
-
-
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.dfm deleted file mode 100644 index 06b3c89..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object FetchServerDataModule: TFetchServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.pas deleted file mode 100644 index d7ad9cb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerData.pas +++ /dev/null @@ -1,41 +0,0 @@ -unit FetchServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAADODriver, uROIndyTCPServer; - -type - TFetchServerDataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - SessionManager: TROInMemorySessionManager; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - FetchServerDataModule: TFetchServerDataModule; - -implementation - -{$R *.dfm} - -procedure TFetchServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.dfm deleted file mode 100644 index bdeb43b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object FetchServerMainForm: TFetchServerMainForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Fetch Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.pas deleted file mode 100644 index 6d39b86..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchServerMain.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit FetchServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TFetchServerMainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - FetchServerMainForm: TFetchServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.dfm deleted file mode 100644 index 2d46bb3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.dfm +++ /dev/null @@ -1,857 +0,0 @@ -object FetchService: TFetchService - OldCreateOrder = True - SessionManager = FetchServerDataModule.SessionManager - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Height = 300 - Width = 300 - object Schema: TDASchema - ConnectionManager = FetchServerDataModule.ConnectionManager - DataDictionary = FetchServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Order Details' - StatementType = stAutoSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'Quantity' - TableField = 'Quantity' - end - item - DatasetField = 'Discount' - TableField = 'Discount' - end> - end> - Name = 'PagedOrderDetails' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end - item - Name = 'EndingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Order Details' - SQL = - 'SELECT '#10' OrderID, ProductID, UnitPrice, Quantity, Discount'#10'FR' + - 'OM'#10' [Order Details]'#10'WHERE'#10' OrderID >= :StartingOrderID an' + - 'd'#10' OrderID <= :EndingOrderID and'#10' {Where}'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'Quantity' - TableField = 'Quantity' - end - item - DatasetField = 'Discount' - TableField = 'Discount' - end> - end> - Name = 'OrderDetails' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end - item - Name = 'EndingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10'FROM'#10' ' + - ' Orders'#10'WHERE'#10' OrderID >= :StartingOrderID and'#10' OrderID ' + - '<= :EndingOrderID and'#10' {Where}'#10' '#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - GeneratorName = 'Orders' - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'StartingOrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10'FROM'#10' ' + - ' Orders'#10'WHERE'#10' OrderID > :StartingOrderID and'#10' {Where}'#10'ORD' + - 'ER BY'#10' OrderID'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'PagedOrders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - GeneratorName = 'Orders' - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 32 - Top = 56 - end - object DataStreamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 32 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.pas deleted file mode 100644 index 945d08d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/FetchService_Impl.pas +++ /dev/null @@ -1,74 +0,0 @@ -unit FetchService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} FetchLibrary_Intf, uDADataStreamer, uDABin2DataStreamer, - uDAClasses, FetchServerData, uDAInterfaces; - -type - { TFetchService } - TFetchService = class(TDataAbstractService, IFetchService) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - protected - { IFetchService methods } - function GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} FetchLibrary_Invk; - -procedure Create_FetchService(out anInstance : IUnknown); -begin - anInstance := TFetchService.Create(nil); -end; - -{ FetchService } -function TFetchService.GetOrdersAndDetails(const StartOrderID: Integer; const EndOrderID: Integer): Binary; - - procedure ProcessDataset(aDataset: IDADataset); - begin - aDataset.ParamByName('StartingOrderID').AsInteger := StartOrderID; - aDataset.ParamByName('EndingOrderID').AsInteger := EndOrderID; - aDataset.Open; - DataStreamer.WriteDataset(aDataset, [woRows], -1); - end; - -begin - result := Binary.Create; - DataStreamer.Initialize(result, aiWrite); - try - // writing orders - ProcessDataset(Schema.NewDataset(Connection, 'Orders')); - // writing order details - ProcessDataset(Schema.NewDataset(Connection, 'OrderDetails')); - finally - DataStreamer.Finalize; - end; -end; - -initialization - TROClassFactory.Create('FetchService', Create_FetchService, TFetchService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/RODLFILE.res deleted file mode 100644 index be37b0d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Fetch/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.Sample.html deleted file mode 100644 index 02a861a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.Sample.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - -
-

- First Sample -

- -
-

Purpose

-

- This example illustrates the basic functionality of Data Abstract from RemObjects Software.

- The application shows how to receive data from a remote database. -

- -

Getting Started

-
    -
  • Build or compile both projects.
  • -
  • Launch the server (via the menu option: RemObjects | Launch Server Executable).
  • -
  • Ensure that FirstSampleClient is the selected project and run it.
  • -
  • Check that the client buttons work as expected.
  • -
  • Modify the server names list and retry the client actions.
  • -
-

Examine the Code

-
    -
  • - This application was created using the Data Abstract 4.0 Combo Server wizard - (see File->New->Other, tab RemObjects Data Abstract).
    - After running the wizard, only a DBGrid, two Buttons and 3 lines of code were added. -
  • -
  • - Examine the simple code in FirstSampleclientMain.pas. -
  • -
- - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bdsgroup deleted file mode 100644 index 3121f9f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - FirstSampleServer.bdsproj - FirstSampleClient.bdsproj - FirstSampleServer.exe FirstSampleClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bpg deleted file mode 100644 index 1de9e53..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = FirstSampleServer.exe FirstSampleClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -FirstSampleServer.exe: FirstSampleServer.dpr - $(DCC) - -FirstSampleClient.exe: FirstSampleClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.groupproj deleted file mode 100644 index 26658df..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSample.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {7122486e-398e-464f-b75b-a8169350c11e} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.bdsproj deleted file mode 100644 index df27704..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - FirstSampleClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dpr deleted file mode 100644 index 7477e94..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program FirstSampleClient; - -uses - uROComInit, - Forms, - MidasLib, - FirstSampleclientMain in 'FirstSampleclientMain.pas' {FirstSampleclientMainForm}, - FirstSampleClientData in 'FirstSampleClientData.pas' {FirstSampleClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'First Sample Client'; - Application.CreateForm(TFirstSampleClientDataModule, FirstSampleClientDataModule); - Application.CreateForm(TFirstSampleclientMainForm, FirstSampleclientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dproj deleted file mode 100644 index d05ce2b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {2ac631a8-06a9-4df5-8645-51b6996e3f52} - FirstSampleClient.dpr - Debug - AnyCPU - DCC32 - FirstSampleClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - FirstSampleClient.dpr - - - - - - - MainSource - - -
FirstSampleClientDataModule
-
- -
FirstSampleclientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.dfm deleted file mode 100644 index 30dab50..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.dfm +++ /dev/null @@ -1,191 +0,0 @@ -object FirstSampleClientDataModule: TFirstSampleClientDataModule - OldCreateOrder = True - Left = 139 - Top = 77 - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'FirstSampleService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 40 - Top = 184 - end - object tbl_Customers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 130 - Top = 117 - end - object ds_Customers: TDADataSource - DataTable = tbl_Customers - Left = 138 - Top = 125 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.pas deleted file mode 100644 index 45c6a8b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleClientData.pas +++ /dev/null @@ -1,34 +0,0 @@ -unit FirstSampleClientData; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter, uDAScriptingProvider, - uDACDSDataTable; - -type - TFirstSampleClientDataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - tbl_Customers: TDACDSDataTable; - ds_Customers: TDADataSource; - private - { Private declarations } - public - { Public declarations } - end; - -var - FirstSampleClientDataModule: TFirstSampleClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary.RODL deleted file mode 100644 index b83e242..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary.RODL +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Intf.pas deleted file mode 100644 index 3b688bc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Intf.pas +++ /dev/null @@ -1,76 +0,0 @@ -unit FirstSampleLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{668FD1CF-765E-4C72-86E1-5BB53EA5CE34}'; - - { Service Interface ID's } - IFirstSampleService_IID : TGUID = '{58D29079-CADF-4D12-B78C-F1403B2BBF34}'; - - { Event ID's } - -type - { Forward declarations } - IFirstSampleService = interface; - - - - - { IFirstSampleService } - IFirstSampleService = interface(IDataAbstractService) - ['{58D29079-CADF-4D12-B78C-F1403B2BBF34}'] - end; - - { CoFirstSampleService } - CoFirstSampleService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IFirstSampleService; - end; - - { TFirstSampleService_Proxy } - TFirstSampleService_Proxy = class(TDataAbstractService_Proxy, IFirstSampleService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoFirstSampleService } - -class function CoFirstSampleService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IFirstSampleService; -begin - result := TFirstSampleService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TFirstSampleService_Proxy.__GetInterfaceName:string; -begin - result := 'FirstSampleService'; -end; - -initialization - RegisterProxyClass(IFirstSampleService_IID, TFirstSampleService_Proxy); - - -finalization - UnregisterProxyClass(IFirstSampleService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Invk.pas deleted file mode 100644 index d4eb2fb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit FirstSampleLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} FirstSampleLibrary_Intf; - -type - TFirstSampleService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.bdsproj deleted file mode 100644 index fa88e8c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - FirstSampleServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dpr deleted file mode 100644 index d8d551d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dpr +++ /dev/null @@ -1,30 +0,0 @@ -program FirstSampleServer; - -{#ROGEN:FirstSampleLibrary.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - FirstSampleServerMain in 'FirstSampleServerMain.pas' {FirstSampleServerMainForm}, - FirstSampleService_Impl in 'FirstSampleService_Impl.pas' {FirstSampleService: TDARemoteService}, - FirstSampleServerData in 'FirstSampleServerData.pas' {FirstSampleServerDataModule: TDataModule}, - FirstSampleLibrary_Intf in 'FirstSampleLibrary_Intf.pas', - FirstSampleLibrary_Invk in 'FirstSampleLibrary_Invk.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('FirstSample', 'FirstSample') then begin - ROService.CreateForm(TFirstSampleServerDataModule, FirstSampleServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.Title := 'First Sample Server'; - Application.CreateForm(TFirstSampleServerDataModule, FirstSampleServerDataModule); - Application.CreateForm(TFirstSampleServerMainForm, FirstSampleServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dproj deleted file mode 100644 index f5ec2f7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {4845004a-289d-4c48-baea-2a580444e3a9} - FirstSampleServer.dpr - Debug - AnyCPU - DCC32 - FirstSampleServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - FirstSampleServer.dpr - - - - - - - MainSource - - - - -
FirstSampleServerDataModule
-
- -
FirstSampleServerMainForm
-
- -
FirstSampleService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.dfm deleted file mode 100644 index e3abc09..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.dfm +++ /dev/null @@ -1,69 +0,0 @@ -object FirstSampleServerDataModule: TFirstSampleServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 74 - Top = 68 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.pas deleted file mode 100644 index f093cee..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerData.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit FirstSampleServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver, uROIndyTCPServer; - -type - TFirstSampleServerDataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - FirstSampleServerDataModule: TFirstSampleServerDataModule; - -implementation - -{$R *.dfm} - -procedure TFirstSampleServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.dfm deleted file mode 100644 index c62db54..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object FirstSampleServerMainForm: TFirstSampleServerMainForm - Left = 109 - Top = 97 - BorderStyle = bsDialog - Caption = 'First Sample Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.pas deleted file mode 100644 index bcaeffa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleServerMain.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit FirstSampleServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TFirstSampleServerMainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - FirstSampleServerMainForm: TFirstSampleServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.dfm deleted file mode 100644 index ebb253c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.dfm +++ /dev/null @@ -1,227 +0,0 @@ -object FirstSampleService: TFirstSampleService - OldCreateOrder = True - SessionManager = FirstSampleServerDataModule.SessionManager - AcquireConnection = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Left = 69 - Top = 46 - Height = 212 - Width = 216 - object DataStreamer: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = FirstSampleServerDataModule.ConnectionManager - DataDictionary = FirstSampleServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = < - item - Name = 'FK_Employees_Employees' - MasterDatasetName = 'Customers' - MasterFields = 'EmployeeID' - DetailDatasetName = 'Customers' - DetailFields = 'ReportsTo' - end> - UpdateRules = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.pas deleted file mode 100644 index e5d0c19..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleService_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit FirstSampleService_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABinAdapter, uDAInterfaces, uDADataStreamer, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} FirstSampleLibrary_Intf; - -type - { TFirstSampleService } - TFirstSampleService = class(TDataAbstractService, IFirstSampleService) - DataStreamer: TDABinDataStreamer; - Schema: TDASchema; - private - protected - { IFirstSampleService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} FirstSampleLibrary_Invk, FirstSampleServerData; - -procedure Create_FirstSampleService(out anInstance: IUnknown); -begin - anInstance := TFirstSampleService.Create(nil); -end; - -initialization - TROClassFactory.Create('FirstSampleService', Create_FirstSampleService, TFirstSampleService_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.dfm deleted file mode 100644 index 238b333..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.dfm +++ /dev/null @@ -1,59 +0,0 @@ -object FirstSampleclientMainForm: TFirstSampleclientMainForm - Left = 31 - Top = 80 - AutoScroll = False - Caption = 'First Sample Client' - ClientHeight = 411 - ClientWidth = 615 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -14 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 120 - TextHeight = 16 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 2 - Top = 5 - Width = 212 - Height = 48 - Cursor = crHandPoint - ApplicationType = atClient - end - object FillButton: TButton - Left = 384 - Top = 20 - Width = 92 - Height = 30 - Caption = '&Fill' - TabOrder = 0 - OnClick = FillButtonClick - end - object UpdateButton: TButton - Left = 512 - Top = 20 - Width = 92 - Height = 30 - Caption = '&Update' - Enabled = False - TabOrder = 1 - OnClick = UpdateButtonClick - end - object DBGrid1: TDBGrid - Left = 2 - Top = 70 - Width = 609 - Height = 336 - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = FirstSampleClientDataModule.ds_Customers - TabOrder = 2 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -14 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.pas deleted file mode 100644 index 22e50b7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/FirstSampleclientMain.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit FirstSampleclientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, Grids, - DBGrids, uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton; - -type - TFirstSampleclientMainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - FillButton: TButton; - UpdateButton: TButton; - DBGrid1: TDBGrid; - procedure FillButtonClick(Sender: TObject); - procedure UpdateButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - FirstSampleclientMainForm: TFirstSampleclientMainForm; - -implementation - -uses - FirstSampleClientData; - -{$R *.dfm} - -procedure TFirstSampleclientMainForm.FillButtonClick(Sender: TObject); -begin - FirstSampleClientDataModule.tbl_Customers.Open; - UpdateButton.Enabled:=True; -end; - -procedure TFirstSampleclientMainForm.UpdateButtonClick(Sender: TObject); -begin - FirstSampleClientDataModule.tbl_Customers.ApplyUpdates; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/RODLFILE.res deleted file mode 100644 index f3eeb87..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/First Sample/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.Sample.html deleted file mode 100644 index 6e6c2e4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.Sample.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - -

- Local Schema Sample -

- - -

Purpose

-

- A simple demo showing the use of several Data Abstract components to select/update - a range of Customer records. -

-

Examine the Code

-

- The Data Abstract components on the form are: -

-
    -
  • - TDAConnectionManager: examine its Connections property - this has a standard - collections property editor and Connections[0].ConnectionString supplies - an ADO connection to Northwind. If you change this to a different driver, you - will need to drop the appropriate driver on the form. -
  • -
  • - TDADriverManager: a singleton component that manages the drivers used by - the application. Set AutoLoad to True and DriverDirectory - to your folder containing .DAD files to be loaded when the application - starts. -
  • -
  • - TDAADODriver: supports ADO databases. You can drop other drivers - onto the - form, e.g. TDAIBXDriver, TDADBXDriver etc. -
  • -
  • - TDABinDataStreamer: handles the transfer of binary data packets. Note - the events provided - they allow you to access/modify the data packets before and - after transmission. -
  • -
  • - TDASchema: manages the datasets available. Double click on its icon to - invoke the Schema Modeler. -
  • -
  • - TDABusinessProcessor: handles dataset updates. Its Schema - component is set first followed by ReferencedDataSet. -
  • -
  • - TDACDSDataTable: a DataAbstract aware descendant of the standard ClientDataSet. -
  • -
  • - TDADataSource: a DataSource descendant that works with DataTables. -
  • -
-

-   -

-

-   -

- - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.bdsproj deleted file mode 100644 index 0010851..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - LocalSchema.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dpr deleted file mode 100644 index ca77be5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program LocalSchema; - -uses - Forms, - LocalSchemaMain in 'LocalSchemaMain.pas' {LocalSchemaMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Manual DataTable fill'; - Application.CreateForm(TLocalSchemaMainForm, LocalSchemaMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dproj deleted file mode 100644 index 2b86fe9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {836cc650-b903-40cd-bf94-647e264ddc3c} - LocalSchema.dpr - Debug - AnyCPU - DCC32 - LocalSchema.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - LocalSchema.dpr - - - - - - - MainSource - - -
LocalSchemaMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchema.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.dfm deleted file mode 100644 index 87b6722..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.dfm +++ /dev/null @@ -1,759 +0,0 @@ -object LocalSchemaMainForm: TLocalSchemaMainForm - Left = 140 - Top = 73 - AutoScroll = False - BorderWidth = 5 - Caption = 'Local Schema Sample' - ClientHeight = 317 - ClientWidth = 502 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 0 - Top = 4 - Width = 84 - Height = 13 - Caption = 'From CustomerID:' - end - object Label2: TLabel - Left = 217 - Top = 4 - Width = 74 - Height = 13 - Caption = 'To CustomerID:' - end - object DBGrid1: TDBGrid - Left = 0 - Top = 25 - Width = 502 - Height = 262 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = DataSource - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object eCust1: TEdit - Left = 88 - Top = 0 - Width = 121 - Height = 21 - TabOrder = 1 - Text = 'ALFKI' - end - object eCust2: TEdit - Left = 296 - Top = 0 - Width = 121 - Height = 21 - TabOrder = 2 - Text = 'BOTTM' - end - object Panel1: TPanel - Left = 0 - Top = 287 - Width = 502 - Height = 30 - Align = alBottom - BevelOuter = bvNone - TabOrder = 3 - DesignSize = ( - 502 - 30) - object DBNavigator1: TDBNavigator - Left = 0 - Top = 5 - Width = 230 - Height = 25 - DataSource = DataSource - Anchors = [akLeft] - TabOrder = 0 - end - object bOpenClose: TButton - Left = 240 - Top = 5 - Width = 75 - Height = 25 - Anchors = [akLeft] - Caption = 'Open/Close' - TabOrder = 1 - OnClick = bOpenCloseClick - end - object bApplyUpdates: TButton - Left = 315 - Top = 5 - Width = 97 - Height = 25 - Anchors = [akLeft] - Caption = 'Apply Updates' - TabOrder = 2 - OnClick = bApplyUpdatesClick - end - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;Database=Northwind;UserID=sa;Password=;AuxD' + - 'river=SQLOLEDB.1' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 24 - Top = 152 - end - object DriverManager: TDADriverManager - DriverDirectory = 'C:\Dev\DataAbstract\Bin\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 56 - Top = 152 - end - object ADODriver: TDAADODriver - Left = 88 - Top = 152 - end - object BINAdapter: TDABinDataStreamer - Left = 120 - Top = 152 - end - object DataSource: TDADataSource - DataTable = DataTable - Left = 72 - Top = 200 - end - object DataTable: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustA' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CustB' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - LocalSchema = DASchema - LocalDataStreamer = BINAdapter - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 64 - Top = 192 - end - object DASchema: TDASchema - ConnectionManager = ConnectionManager - Datasets = < - item - Params = < - item - Name = 'CustA' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CustB' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers'#10' WHERE CustomerID>=:CustA and CustomerID<' + - '=:CustB' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = < - item - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'TestNumeric' - DataType = datFloat - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'INSERT'#10' INTO Customers'#10' (CustomerID, CompanyName, ContactNam' + - 'e, ContactTitle, Address, City, Region, PostalCode, Country, Pho' + - 'ne, Fax, TestNumeric)'#10' VALUES'#10' (:CustomerID, :CompanyName, :' + - 'ContactName, :ContactTitle, :Address, :City, :Region, :PostalCod' + - 'e, :Country, :Phone, :Fax, :TestNumeric)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Insert_Customers' - end - item - Params = < - item - Name = 'OLD_CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'DELETE '#10' FROM'#10' Customers'#10' WHERE'#10' (CustomerID = :OLD_Cust' + - 'omerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Delete_Customers' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'TestNumeric' - DataType = datFloat - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'OLD_CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'UPDATE Customers'#10' SET '#10' CustomerID = :CustomerID, '#10' Compa' + - 'nyName = :CompanyName, '#10' ContactName = :ContactName, '#10' Con' + - 'tactTitle = :ContactTitle, '#10' Address = :Address, '#10' City = ' + - ':City, '#10' Region = :Region, '#10' PostalCode = :PostalCode, '#10' ' + - ' Country = :Country, '#10' Phone = :Phone, '#10' Fax = :Fax, '#10' ' + - ' TestNumeric = :TestNumeric'#10' WHERE'#10' (CustomerID = :OLD_Custo' + - 'merID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Update_Customers' - end> - RelationShips = <> - UpdateRules = <> - Left = 160 - Top = 152 - end - object BusinessProcessor: TDABusinessProcessor - Schema = DASchema - ReferencedDataset = 'Customers' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poPrepareCommands] - UpdateMode = updWhereKeyOnly - Left = 112 - Top = 200 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.pas deleted file mode 100644 index b1f750a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Local Schema/LocalSchemaMain.pas +++ /dev/null @@ -1,62 +0,0 @@ -unit LocalSchemaMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDAEngine, uDAADODriver, uDADriverManager, uDAClasses, - uDADataTable, uDABINAdapter, uDACDSDataTable, DB, StdCtrls, ExtCtrls, - DBCtrls, Grids, DBGrids, uDABusinessProcessor, uDAScriptingProvider, - uDADataStreamer; - -type - TLocalSchemaMainForm = class(TForm) - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - BINAdapter: TDABinDataStreamer; - DataSource: TDADataSource; - DataTable: TDACDSDataTable; - DBGrid1: TDBGrid; - BusinessProcessor: TDABusinessProcessor; - eCust1: TEdit; - eCust2: TEdit; - Label1: TLabel; - Label2: TLabel; - ConnectionManager: TDAConnectionManager; - Panel1: TPanel; - DBNavigator1: TDBNavigator; - bOpenClose: TButton; - bApplyUpdates: TButton; - DASchema: TDASchema; - procedure bOpenCloseClick(Sender: TObject); - procedure bApplyUpdatesClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - LocalSchemaMainForm: TLocalSchemaMainForm; - -implementation - -{$R *.dfm} - -procedure TLocalSchemaMainForm.bOpenCloseClick(Sender: TObject); -begin - if not DataTable.Active then begin - DataTable.ParamByName('CustA').AsString := eCust1.Text; - DataTable.ParamByName('CustB').AsString := eCust2.Text; - end; - - DataTable.Active := DataTable.Active xor TRUE; -end; - -procedure TLocalSchemaMainForm.bApplyUpdatesClick(Sender: TObject); -begin - BusinessProcessor.ProcessDelta(DataTable, AllChanges); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.Sample.html deleted file mode 100644 index 2c21f56..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.Sample.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - -

- Login Sample -

- - -

Purpose

- -

- This example shows how to provide a simple Login.
-

-

- The login data is held in Northwind's Employees table, with the FirstName and LastName fields used for UserName and Password respectively. -

- -

Examine the Code

-
    -
  • - See the simple code within LoginService_Impl.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bdsgroup deleted file mode 100644 index ca45e64..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - LoginSample_server.bdsproj - LoginSample_Client.bdsproj - LoginSample_server.exe LoginSample_Client.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bpg deleted file mode 100644 index f74198c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = LoginSample_server.exe LoginSample_Client.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -LoginSample_server.exe: LoginSample_server.dpr - $(DCC) - -LoginSample_Client.exe: LoginSample_Client.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.groupproj deleted file mode 100644 index e9204af..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {72af6019-78ce-45df-b5c2-80318d022ad3} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary.RODL deleted file mode 100644 index 2daa08c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary.RODL +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Intf.pas deleted file mode 100644 index aaa5a30..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Intf.pas +++ /dev/null @@ -1,109 +0,0 @@ -unit LoginSampleLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{8923B665-D147-4E49-B262-59B91DE7EF10}'; - - { Service Interface ID's } - ILoginSampleService_IID : TGUID = '{B3131769-5008-4AAE-A339-A65950032EEE}'; - ILoginService_IID : TGUID = '{4E74056F-733F-4415-81D2-D8E7297C9EC2}'; - - { Event ID's } - -type - { Forward declarations } - ILoginSampleService = interface; - ILoginService = interface; - - - - - { ILoginSampleService } - ILoginSampleService = interface(IDataAbstractService) - ['{B3131769-5008-4AAE-A339-A65950032EEE}'] - end; - - { CoLoginSampleService } - CoLoginSampleService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginSampleService; - end; - - { TLoginSampleService_Proxy } - TLoginSampleService_Proxy = class(TDataAbstractService_Proxy, ILoginSampleService) - protected - function __GetInterfaceName:string; override; - - end; - - { ILoginService } - ILoginService = interface(ISimpleLoginService) - ['{4E74056F-733F-4415-81D2-D8E7297C9EC2}'] - end; - - { CoLoginService } - CoLoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginService; - end; - - { TLoginService_Proxy } - TLoginService_Proxy = class(TSimpleLoginService_Proxy, ILoginService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoLoginSampleService } - -class function CoLoginSampleService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginSampleService; -begin - result := TLoginSampleService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TLoginSampleService_Proxy.__GetInterfaceName:string; -begin - result := 'LoginSampleService'; -end; - -{ CoLoginService } - -class function CoLoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginService; -begin - result := TLoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TLoginService_Proxy.__GetInterfaceName:string; -begin - result := 'LoginService'; -end; - -initialization - RegisterProxyClass(ILoginSampleService_IID, TLoginSampleService_Proxy); - RegisterProxyClass(ILoginService_IID, TLoginService_Proxy); - - -finalization - UnregisterProxyClass(ILoginSampleService_IID); - UnregisterProxyClass(ILoginService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Invk.pas deleted file mode 100644 index 5997211..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleLibrary_Invk.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit LoginSampleLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} LoginSampleLibrary_Intf; - -type - TLoginSampleService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - - TLoginService_Invoker = class(TSimpleLoginService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.dfm deleted file mode 100644 index f91ab57..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.dfm +++ /dev/null @@ -1,335 +0,0 @@ -object LoginSampleService: TLoginSampleService - OldCreateOrder = True - RequiresSession = True - SessionManager = LoginSample_ServerDataModule.SessionManager - AcquireConnection = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = LoginSample_ServerDataModule.ConnectionManager - DataDictionary = LoginSample_ServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Employees' - SQL = - 'SELECT '#10' EmployeeID, LastName, FirstName, Title, TitleOfCourt' + - 'esy, '#10' BirthDate, HireDate, Address, City, Region, PostalCode' + - ', '#10' Country, HomePhone, Extension, Photo, Notes, ReportsTo, '#10 + - ' PhotoPath'#10' FROM'#10' Employees' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'LastName' - TableField = 'LastName' - end - item - DatasetField = 'FirstName' - TableField = 'FirstName' - end - item - DatasetField = 'Title' - TableField = 'Title' - end - item - DatasetField = 'TitleOfCourtesy' - TableField = 'TitleOfCourtesy' - end - item - DatasetField = 'BirthDate' - TableField = 'BirthDate' - end - item - DatasetField = 'HireDate' - TableField = 'HireDate' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'HomePhone' - TableField = 'HomePhone' - end - item - DatasetField = 'Extension' - TableField = 'Extension' - end - item - DatasetField = 'Photo' - TableField = 'Photo' - end - item - DatasetField = 'Notes' - TableField = 'Notes' - end - item - DatasetField = 'ReportsTo' - TableField = 'ReportsTo' - end - item - DatasetField = 'PhotoPath' - TableField = 'PhotoPath' - end> - end> - Name = 'Employees' - Fields = < - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'LastName' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FirstName' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Title' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'TitleOfCourtesy' - DataType = datWideString - Size = 25 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'BirthDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HireDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HomePhone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Extension' - DataType = datWideString - Size = 4 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Photo' - DataType = datBlob - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Notes' - DataType = datMemo - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReportsTo' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PhotoPath' - DataType = datWideString - Size = 255 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = < - item - Name = 'FK_Employees_Employees' - MasterDatasetName = 'Employees' - MasterFields = 'EmployeeID' - DetailDatasetName = 'Employees' - DetailFields = 'ReportsTo' - end> - UpdateRules = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.pas deleted file mode 100644 index b003b0b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSampleService_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit LoginSampleService_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABinAdapter, uDAInterfaces, uDADataStreamer, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} LoginSampleLibrary_Intf; - -type - { TLoginSampleService } - TLoginSampleService = class(TDataAbstractService, ILoginSampleService) - DataStreamer: TDABinDataStreamer; - Schema: TDASchema; - private - protected - { ILoginSampleService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} LoginSampleLibrary_Invk, LoginSample_ServerData; - -procedure Create_LoginSampleService(out anInstance: IUnknown); -begin - anInstance := TLoginSampleService.Create(nil); -end; - -initialization - TROClassFactory.Create('LoginSampleService', Create_LoginSampleService, TLoginSampleService_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.bdsproj deleted file mode 100644 index 42fff79..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - LoginSample_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dpr deleted file mode 100644 index 56feae1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program LoginSample_Client; - -uses - uROComInit, - Forms, - MidasLib, - LoginSample_ClientMain in 'LoginSample_ClientMain.pas' {LoginSample_ClientMainForm}, - LoginSample_ClientData in 'LoginSample_ClientData.pas' {LoginSample_ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'LoginSample Client'; - Application.CreateForm(TLoginSample_ClientDataModule, LoginSample_ClientDataModule); - Application.CreateForm(TLoginSample_ClientMainForm, LoginSample_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dproj deleted file mode 100644 index 5aac6d1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {fb47079d-d00b-4688-901d-b23e72791c7b} - LoginSample_Client.dpr - Debug - AnyCPU - DCC32 - LoginSample_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - LoginSample_Client.dpr - - - - - - - MainSource - - -
LoginSample_ClientDataModule
-
- -
LoginSample_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.dfm deleted file mode 100644 index 262f235..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.dfm +++ /dev/null @@ -1,100 +0,0 @@ -object LoginSample_ClientDataModule: TLoginSample_ClientDataModule - OldCreateOrder = True - Left = 81 - Top = 16 - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - ServiceName = 'LoginSampleService' - Message = Message - Channel = Channel - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - Value = Null - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - Value = Null - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RemoteService - GetDataCall.MethodName = 'GetData' - GetDataCall.Params = < - item - Name = 'aTableNameArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'StringArray' - Value = Null - end - item - Name = 'aTableRequestInfoArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'TableRequestInfoArray' - Value = Null - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RemoteService - UpdateDataCall.MethodName = 'UpdateData' - UpdateDataCall.Params = < - item - Name = 'aDelta' - DataType = rtBinary - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'aDelta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RemoteService - GetScriptsCall.Params = <> - GetScriptsCall.Default = False - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 40 - Top = 183 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.pas deleted file mode 100644 index 8bae154..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientData.pas +++ /dev/null @@ -1,31 +0,0 @@ -unit LoginSample_ClientData; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter; - -type - TLoginSample_ClientDataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - LoginSample_ClientDataModule: TLoginSample_ClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.dfm deleted file mode 100644 index e08e765..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.dfm +++ /dev/null @@ -1,324 +0,0 @@ -object LoginSample_ClientMainForm: TLoginSample_ClientMainForm - Left = 357 - Top = 264 - AutoScroll = False - Caption = 'LoginSample Client' - ClientHeight = 174 - ClientWidth = 482 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnDestroy = FormDestroy - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 7 - Top = 17 - Width = 56 - Height = 13 - Caption = '&User Name:' - FocusControl = edUsername - end - object Label2: TLabel - Left = 7 - Top = 60 - Width = 49 - Height = 13 - Caption = '&Password:' - FocusControl = edPassword - end - object edPassword: TEdit - Left = 7 - Top = 78 - Width = 155 - Height = 21 - TabOrder = 1 - Text = 'davolio' - end - object edUsername: TEdit - Left = 7 - Top = 35 - Width = 155 - Height = 21 - TabOrder = 0 - Text = 'nancy' - end - object LoginButton: TButton - Left = 7 - Top = 102 - Width = 75 - Height = 22 - Caption = 'Login' - TabOrder = 2 - OnClick = LoginButtonClick - end - object LogoutButton: TButton - Left = 87 - Top = 102 - Width = 75 - Height = 22 - Caption = 'Logout' - Enabled = False - TabOrder = 3 - OnClick = LogoutButtonClick - end - object Grid: TDBGrid - Left = 171 - Top = 34 - Width = 303 - Height = 132 - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = DataSource - TabOrder = 5 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object FillButton: TButton - Left = 172 - Top = 6 - Width = 75 - Height = 22 - Caption = 'Fill' - Enabled = False - TabOrder = 4 - OnClick = FillButtonClick - end - object DataTable: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'LastName' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FirstName' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Title' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'TitleOfCourtesy' - DataType = datWideString - Size = 25 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'BirthDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HireDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HomePhone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Extension' - DataType = datWideString - Size = 4 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Photo' - DataType = datBlob - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Notes' - DataType = datMemo - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReportsTo' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PhotoPath' - DataType = datWideString - Size = 255 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soIgnoreStreamSchema, soDisableEventsWhileStreaming] - RemoteDataAdapter = LoginSample_ClientDataModule.RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Employees' - IndexDefs = <> - Left = 336 - Top = 13 - end - object DataSource: TDADataSource - DataTable = DataTable - Left = 345 - Top = 21 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.pas deleted file mode 100644 index 35151d4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ClientMain.pas +++ /dev/null @@ -1,98 +0,0 @@ -unit LoginSample_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, - DataAbstract4_Intf, LoginSampleLibrary_Intf, DB, uDADataTable, - uDAScriptingProvider, uDACDSDataTable, Grids, DBGrids; - -type - TLoginSample_ClientMainForm = class(TForm) - Label1: TLabel; - Label2: TLabel; - edPassword: TEdit; - edUsername: TEdit; - LoginButton: TButton; - LogoutButton: TButton; - Grid: TDBGrid; - DataTable: TDACDSDataTable; - DataSource: TDADataSource; - FillButton: TButton; - procedure FormDestroy(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure LoginButtonClick(Sender: TObject); - procedure LogoutButtonClick(Sender: TObject); - procedure FillButtonClick(Sender: TObject); - private - fLoggedIn: Boolean; - fUserInfo: UserInfo; - fLogin: ILoginService; - protected - procedure Login; - procedure Logout; - public - { Public declarations } - end; - -var - LoginSample_ClientMainForm: TLoginSample_ClientMainForm; - -implementation - -uses - LoginSample_ClientData; - -{$R *.dfm} - -procedure TLoginSample_ClientMainForm.FormShow(Sender: TObject); -begin - with LoginSample_ClientDataModule do - fLogin := CoLoginService.Create(Message, Channel); -end; - -procedure TLoginSample_ClientMainForm.FormDestroy(Sender: TObject); -begin - Logout; -end; - -procedure TLoginSample_ClientMainForm.Login; -begin - FreeAndNil(fUserInfo); - fLoggedIn := fLogin.Login(edUsername.Text, edPassword.Text, fUserInfo); - if not fLoggedIn then ShowMessage('Login failed!'); -end; - -procedure TLoginSample_ClientMainForm.Logout; -begin - if fLoggedIn then begin - fLogin.Logout(); - fLoggedIn := false; - end; -end; - -procedure TLoginSample_ClientMainForm.LoginButtonClick(Sender: TObject); -begin - Login; - LoginButton.Enabled := not fLoggedIn; - LogoutButton.Enabled := fLoggedIn; - FillButton.Enabled := fLoggedIn; -end; - -procedure TLoginSample_ClientMainForm.LogoutButtonClick(Sender: TObject); -begin - Logout; - if not fLoggedIn then DataTable.Active := False; - LoginButton.Enabled := not fLoggedIn; - LogoutButton.Enabled := fLoggedIn; - FillButton.Enabled := fLoggedIn; -end; - -procedure TLoginSample_ClientMainForm.FillButtonClick(Sender: TObject); -begin - DataTable.Active := True; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.dfm deleted file mode 100644 index 1b59373..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.dfm +++ /dev/null @@ -1,64 +0,0 @@ -object LoginSample_ServerDataModule: TLoginSample_ServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 39 - Top = 15 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.pas deleted file mode 100644 index ede8501..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerData.pas +++ /dev/null @@ -1,41 +0,0 @@ -unit LoginSample_ServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAADODriver, uROIndyTCPServer; - -type - TLoginSample_ServerDataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - SessionManager: TROInMemorySessionManager; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - LoginSample_ServerDataModule: TLoginSample_ServerDataModule; - -implementation - -{$R *.dfm} - -procedure TLoginSample_ServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.dfm deleted file mode 100644 index 7adb148..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object LoginSample_ServerMainForm: TLoginSample_ServerMainForm - Left = 95 - Top = 46 - BorderStyle = bsDialog - Caption = 'LoginSample Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.pas deleted file mode 100644 index 301ddbd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_ServerMain.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit LoginSample_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TLoginSample_ServerMainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - LoginSample_ServerMainForm: TLoginSample_ServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.bdsproj deleted file mode 100644 index 41de46c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - LoginSample_server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dpr deleted file mode 100644 index 4c39cb0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dpr +++ /dev/null @@ -1,25 +0,0 @@ -program LoginSample_server; - -{#ROGEN:LoginSampleLibrary.RODL}// RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - Forms, - LoginSample_ServerMain in 'LoginSample_ServerMain.pas' {LoginSample_ServerMainForm}, - LoginSampleService_Impl in 'LoginSampleService_Impl.pas' {LoginSampleService: TDARemoteService}, - LoginSample_ServerData in 'LoginSample_ServerData.pas' {LoginSample_ServerDataModule: TDataModule}, - LoginService_Impl in 'LoginService_Impl.pas' {LoginService: TSimpleLoginService}, - LoginSampleLibrary_Intf in 'LoginSampleLibrary_Intf.pas', - LoginSampleLibrary_Invk in 'LoginSampleLibrary_Invk.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'LoginSample Server'; - Application.CreateForm(TLoginSample_ServerDataModule, LoginSample_ServerDataModule); - Application.CreateForm(TLoginSample_ServerMainForm, LoginSample_ServerMainForm); - Application.Run; -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dproj deleted file mode 100644 index 5ab3f7c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.dproj +++ /dev/null @@ -1,83 +0,0 @@ - - - {ae701f0a-2268-47e6-b890-c7deb4753af7} - LoginSample_server.dpr - Debug - AnyCPU - DCC32 - LoginSample_server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - LoginSample_server.dpr - - - - - - - MainSource - - - - -
LoginSampleService
-
- -
LoginSample_ServerDataModule
-
- -
LoginSample_ServerMainForm
-
- -
LoginService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginSample_server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.dfm deleted file mode 100644 index 8d58d0a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.dfm +++ /dev/null @@ -1,66 +0,0 @@ -object LoginService: TLoginService - OldCreateOrder = True - SessionManager = LoginSample_ServerDataModule.SessionManager - OnLogout = SimpleLoginServiceLogout - OnLogin = SimpleLoginServiceLogin - Left = 321 - Top = 216 - Height = 96 - Width = 188 - object Schema: TDASchema - ConnectionManager = LoginSample_ServerDataModule.ConnectionManager - DataDictionary = LoginSample_ServerDataModule.DataDictionary - Datasets = < - item - Params = < - item - Name = 'UserId' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Pass' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'ValidateLogin' - SQL = - 'SELECT Count(*) as Cnt FROM Employees WHERE (FirstName = :UserId' + - ') AND (LastName = :Pass)' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'Cnt' - TableField = 'Cnt' - end> - end> - Name = 'ValidateLogin' - Fields = < - item - Name = 'Cnt' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 17 - Top = 12 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.pas deleted file mode 100644 index 2fcdb78..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/LoginService_Impl.pas +++ /dev/null @@ -1,77 +0,0 @@ -unit LoginService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} SimpleLoginService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} LoginSampleLibrary_Intf, uDAClasses; - -type - { TLoginService } - TLoginService = class(TSimpleLoginService, ILoginService) - Schema: TDASchema; - procedure SimpleLoginServiceLogout(Sender: TObject); - procedure SimpleLoginServiceLogin(Sender: TObject; aUserID, - aPassword: string; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); - private - protected - { ILoginService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} LoginSampleLibrary_Invk, LoginSample_ServerData, uRORemoteDataModule, uDAInterfaces; - -procedure Create_LoginService(out anInstance: IUnknown); -begin - anInstance := TLoginService.Create(nil); -end; - -{ LoginService } - -procedure TLoginService.SimpleLoginServiceLogin(Sender: TObject; aUserID, - aPassword: string; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); -var - cmd: IDADataset; -begin - cmd := Schema.NewDataset(Schema.ConnectionManager.NewConnection(Schema.ConnectionManager.GetDefaultConnectionName), 'ValidateLogin', ['UserId', 'Pass'], [aUserID, aPassword]); - cmd.Open; - - aLoginSuccessful := (cmd.Fields[0].AsInteger <> 0); - if (ALoginSuccessful) then begin - aUserInfo := UserInfo.Create; - aUserInfo.SessionID := GuidToString(ClientID); - aUserInfo.UserID := aUserID; - Session['UserID'] := aUserID; - end - else begin - DestroySession; - end; -end; - -procedure TLoginService.SimpleLoginServiceLogout(Sender: TObject); -begin - DestroySession; -end; - -initialization - TROClassFactory.Create('LoginService', Create_LoginService, TLoginService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/RODLFILE.res deleted file mode 100644 index 1643ed4..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Login Sample/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.dfm deleted file mode 100644 index 752ea72..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.dfm +++ /dev/null @@ -1,185 +0,0 @@ -object LoginService: TLoginService - OldCreateOrder = True - SessionManager = MegaDemoServer_DataModule.SessionManager - ServiceSchema = Schema - ServiceDataStreamer = BinDataStreamer - ExportedDataTables = <> - BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection - Left = 170 - Top = 200 - Height = 124 - Width = 208 - object Schema: TDASchema - ConnectionManager = MegaDemoServer_DataModule.ConnectionManager - DataDictionary = MegaDemoServer_DataModule.DataDictionary - Datasets = < - item - Params = < - item - Name = 'UserName' - DataType = datString - Size = 20 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Password' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'Employees' - TargetTable = 'EMPLOYEE' - SQL = - 'SELECT'#10' E.EMP_NO, E.FIRST_NAME, E.LAST_NAME, J.JOB_TITLE'#10#10'FROM'#10 + - ' EMPLOYEE E'#10' '#10'JOIN JOB J ON'#10' (J.JOB_CODE=E.JOB_CODE) AND'#10' (J' + - '.JOB_GRADE=E.JOB_GRADE) AND'#10' (J.JOB_COUNTRY='#39'USA'#39')'#10' ' + - ' '#10'WHERE'#10' E.FIRST_NAME=:UserName AND'#10' E.LAST_NAME=:Password' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'EmployeeID' - TableField = 'EMP_NO' - end - item - DatasetField = 'FirstName' - TableField = 'FIRST_NAME' - end - item - DatasetField = 'LastName' - TableField = 'LAST_NAME' - end - item - DatasetField = 'JobTitle' - TableField = 'JOB_TITLE' - end> - end - item - Connection = 'Northwind' - TargetTable = 'Employees' - SQL = - 'SELECT Emps.EmployeeID, Emps.FirstName, Emps.LastName, Emps.Titl' + - 'e'#10'FROM Employees Emps'#10'WHERE Emps.FirstName=:UserName AND Emps.La' + - 'stName=:Password' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'FirstName' - TableField = 'FirstName' - end - item - DatasetField = 'LastName' - TableField = 'LastName' - end - item - DatasetField = 'JobTitle' - TableField = 'Title' - end> - end> - Name = 'FindEmployee' - Description = - 'Query that validates a username and password against the first n' + - 'ame and last name of the employees in the target databases' - Fields = < - item - Name = 'EmployeeID' - DataType = datAutoInc - Description = 'A numeric number used to reference the employee in other tables' - BlobType = dabtUnknown - GeneratorName = 'EMP_NO_GEN' - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - DisplayLabel = 'Employee ID' - Alignment = taLeftJustify - ServerAutoRefresh = True - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FirstName' - DataType = datString - Size = 10 - Description = 'The employee'#39's first name' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - DisplayLabel = 'First Name' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'LastName' - DataType = datString - Size = 20 - Description = 'The employee'#39's last name' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - DisplayLabel = 'Last Name' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'JobTitle' - DataType = datString - Size = 25 - Description = 'The employee'#39's job title' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - DisplayLabel = 'Job Title' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 28 - Top = 11 - end - object BinDataStreamer: TDABinDataStreamer - BufferSize = 262144 - Left = 77 - Top = 12 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.pas deleted file mode 100644 index 9bc62c8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/LoginService_Impl.pas +++ /dev/null @@ -1,111 +0,0 @@ -unit LoginService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} MegaDemoLibrary_Intf, uDADataStreamer, uDABinAdapter, - uDAClasses, uDAInterfaces; - -type - { TLoginService } - TLoginService = class(TDataAbstractService, ILoginService) - BinDataStreamer: TDABinDataStreamer; - Schema: TDASchema; - procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; - var aConnectionName: string); - private - protected - { ILoginService methods } - function Login(const UserName: string; const Password: string; out aLoginInfo: LoginInfo): Boolean; - procedure Logout; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} MegaDemoLibrary_Invk, MegaDemoServer_Data, MegaDemoServer_Main; - -procedure Create_LoginService(out anInstance: IUnknown); -begin - anInstance := TLoginService.Create(nil); -end; - -{ LoginService } - -function TLoginService.Login(const UserName: string; const Password: string; out aLoginInfo: LoginInfo): Boolean; -var - jobTitle, Upper_jobTitle: string; - loginReader: IDADataset; -begin - aLoginInfo := nil; - loginReader := Schema.NewDataset(Connection, 'FindEmployee', ['UserName', 'Password'], [UserName, Password]); - jobTitle := ''; - try - if (loginReader.IsEmpty) then begin - DestroySession; - Result := false; - end - else begin - aLoginInfo := LoginInfo.Create; - - // Prepares the LoginInfo struct that will be sent back to the client - aLoginInfo.EmployeeID := loginReader.Fields[0].AsInteger; - aLoginInfo.FirstName := loginReader.Fields[1].AsString; - aLoginInfo.LastName := loginReader.Fields[2].AsString; - - // Determines the job type by parsing the JobTitle returned - jobTitle := loginReader.Fields[3].AsString; - Upper_jobTitle := UpperCase(jobTitle); - if Pos('PRESIDENT', Upper_jobTitle) >= 1 then aLoginInfo.Job_Type := JobType_Manager - else if Pos('MANAGER', Upper_jobTitle) >= 1 then aLoginInfo.Job_Type := JobType_Manager - else if Pos('SALES', Upper_jobTitle) >= 1 then aLoginInfo.Job_Type := JobType_SalesRep - else if Pos('CHIEF', Upper_jobTitle) >= 1 then aLoginInfo.Job_Type := JobType_Manager - else aLoginInfo.Job_Type := JobType_Engineer; - - aLoginInfo.JobTitle := jobTitle; - aLoginInfo.SessionID := GUIDToString(Session.SessionID); - - // Saves information in the current session for the other services to use - Session['EmployeeID'] := aLoginInfo.EmployeeID; - Session['JobType'] := aLoginInfo.Job_Type; - - Result := true; - end - finally - if loginReader.Active then loginReader.Close; - if Connection.InTransaction then Connection.CommitTransaction; - end; -end; - -procedure TLoginService.Logout; -begin - DestroySession; -end; - -procedure TLoginService.DataAbstractServiceBeforeAcquireConnection( - aSender: TObject; var aConnectionName: string); -begin - // Reads the connection name from the main form. - aConnectionName := MegaDemoServer_MainForm.GetSelectedConnectionName; -end; - -initialization - TROClassFactory.Create('LoginService', Create_LoginService, TLoginService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.bdsproj deleted file mode 100644 index 6717d6f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MegaDemoClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dpr deleted file mode 100644 index 24b238b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program MegaDemoClient; - -uses - uROComInit, - Forms, - MidasLib, - MegaDemoClient_Main in 'MegaDemoClient_Main.pas' {MegaDemoClient_MainForm}, - MegaDemoClient_Data in 'MegaDemoClient_Data.pas' {MegaDemoClient_DataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TMegaDemoClient_DataModule, MegaDemoClient_DataModule); - Application.CreateForm(TMegaDemoClient_MainForm, MegaDemoClient_MainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dproj deleted file mode 100644 index 9ca14d2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {691439f0-e360-44b6-972b-b2ffccfc5582} - MegaDemoClient.dpr - Debug - AnyCPU - DCC32 - MegaDemoClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MegaDemoClient.dpr - - - - - - - MainSource - - -
MegaDemoClient_DataModule
-
- -
MegaDemoClient_MainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.dfm deleted file mode 100644 index 20f84ec..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.dfm +++ /dev/null @@ -1,236 +0,0 @@ -object MegaDemoClient_DataModule: TMegaDemoClient_DataModule - OldCreateOrder = True - OnCreate = DataModuleCreate - OnDestroy = DataModuleDestroy - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'OrdersService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - Left = 40 - Top = 140 - end - object rdaCustomers: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 195 - Top = 119 - end - object tbl_Customers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - Description = 'The customer'#39's code' - BlobType = dabtUnknown - GeneratorName = 'CUST_NO_GEN' - DisplayWidth = 0 - DisplayLabel = 'Customer ID' - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerName' - DataType = datString - Size = 40 - Description = 'The customer'#39's name' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Name' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 25 - Description = 'The customer'#39's city' - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = rdaCustomers - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 167 - Top = 119 - end - object ds_Customers: TDADataSource - DataSet = tbl_Customers.Dataset - DataTable = tbl_Customers - Left = 140 - Top = 119 - end - object tbl_OrdersByCustomer: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - Description = 'The identifier of the customer that placed this order' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Customer ID' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - Description = 'The order'#39's date' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Order Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - Description = 'The date by which the order has to be received' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Required Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - Description = 'The date this order has been shipped' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Shipped Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderAmount' - DataType = datCurrency - Description = 'The order'#39's amount' - BlobType = dabtUnknown - DisplayWidth = 0 - DisplayLabel = 'Order Amount' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - MasterParamsMappings.Strings = ( - 'CustomerID=CustomerID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = rdaOrders - ReadOnly = False - MasterSource = ds_Customers - MasterFields = 'CustomerID' - DetailFields = 'CustomerID' - MasterRequestMappings.Strings = ( - 'CustomerID=CustomerID') - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'OrdersByCustomer' - IndexDefs = <> - Left = 167 - Top = 167 - end - object ds_OrdersByCustomer: TDADataSource - DataSet = tbl_OrdersByCustomer.Dataset - DataTable = tbl_OrdersByCustomer - Left = 139 - Top = 166 - end - object rdaOrders: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - GetDataCall.MethodName = 'GetCustomerOrders' - GetDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'CustomerID' - DataType = rtString - Flag = fIn - Value = Null - end> - GetDataCall.Default = False - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 194 - Top = 167 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.pas deleted file mode 100644 index 359a7ed..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Data.pas +++ /dev/null @@ -1,62 +0,0 @@ -unit MegaDemoClient_Data; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter, MegaDemoLibrary_Intf, - uDAScriptingProvider, uDACDSDataTable; - -type - TMegaDemoClient_DataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - rdaCustomers: TDARemoteDataAdapter; - tbl_Customers: TDACDSDataTable; - ds_Customers: TDADataSource; - tbl_OrdersByCustomer: TDACDSDataTable; - ds_OrdersByCustomer: TDADataSource; - rdaOrders: TDARemoteDataAdapter; - procedure DataModuleCreate(Sender: TObject); - procedure DataModuleDestroy(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - fLoginInfo: LoginInfo; - fLoginService: ILoginService; - fOrdersService: IOrdersService; - function LoggedIn: Boolean; - end; - -var - MegaDemoClient_DataModule: TMegaDemoClient_DataModule; - -implementation - -{$R *.dfm} - -{ TMegaDemoClient_DataModule } - -function TMegaDemoClient_DataModule.LoggedIn: Boolean; -begin - Result := fLoginInfo <> nil; -end; - -procedure TMegaDemoClient_DataModule.DataModuleCreate(Sender: TObject); -begin - fLoginService := CoLoginService.Create(Message, Channel); - fOrdersService := CoOrdersService.Create(message, Channel); -end; - -procedure TMegaDemoClient_DataModule.DataModuleDestroy(Sender: TObject); -begin - if fLoginInfo <> nil then fLoginInfo.Free; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.dfm deleted file mode 100644 index 9a379d8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.dfm +++ /dev/null @@ -1,305 +0,0 @@ -object MegaDemoClient_MainForm: TMegaDemoClient_MainForm - Left = 224 - Top = 141 - AutoScroll = False - BorderIcons = [biSystemMenu] - Caption = 'Data Abstract Client' - ClientHeight = 322 - ClientWidth = 617 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object PageControl1: TPageControl - Left = 6 - Top = 5 - Width = 605 - Height = 296 - ActivePage = tpLogin - Anchors = [akLeft, akTop, akRight, akBottom] - TabIndex = 0 - TabOrder = 0 - OnChange = PageControl1Change - OnChanging = PageControl1Changing - object tpLogin: TTabSheet - Caption = 'Login' - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 17 - Top = 16 - Width = 212 - Height = 48 - Cursor = crHandPoint - ApplicationType = atClient - end - object GroupBox1: TGroupBox - Left = 38 - Top = 93 - Width = 246 - Height = 105 - Caption = 'Login Information' - TabOrder = 0 - DesignSize = ( - 246 - 105) - object Label2: TLabel - Left = 7 - Top = 24 - Width = 56 - Height = 13 - Caption = 'User Name:' - end - object Label3: TLabel - Left = 14 - Top = 47 - Width = 49 - Height = 13 - Caption = 'Password:' - end - object tbUserName: TEdit - Left = 72 - Top = 20 - Width = 164 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 0 - end - object tbPassword: TEdit - Left = 72 - Top = 43 - Width = 164 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 1 - end - object bLogin: TButton - Left = 80 - Top = 74 - Width = 75 - Height = 22 - Anchors = [akTop, akRight] - Caption = 'Login' - TabOrder = 2 - OnClick = bLoginClick - end - object bLogout: TButton - Left = 161 - Top = 74 - Width = 75 - Height = 22 - Anchors = [akTop, akRight] - Caption = 'Logout' - TabOrder = 3 - OnClick = bLogoutClick - end - end - object GroupBox2: TGroupBox - Left = 335 - Top = 61 - Width = 239 - Height = 168 - Caption = 'Pre-configured Logins' - TabOrder = 1 - DesignSize = ( - 239 - 168) - object Label4: TLabel - Left = 2 - Top = 16 - Width = 234 - Height = 13 - Alignment = taCenter - Anchors = [akLeft, akTop, akRight] - AutoSize = False - Caption = 'SQL Server'#39's Northwind' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object Label5: TLabel - Left = 1 - Top = 93 - Width = 235 - Height = 13 - Alignment = taCenter - Anchors = [akLeft, akTop, akRight] - AutoSize = False - Caption = 'Firebird Employee' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object rbPreDefLogin1: TRadioButton - Left = 4 - Top = 33 - Width = 230 - Height = 17 - Caption = 'Nancy/Davolio (Sales Representative)' - TabOrder = 0 - OnClick = rbPreDefLoginClick - end - object rbPreDefLogin2: TRadioButton - Left = 4 - Top = 50 - Width = 230 - Height = 17 - Caption = 'Andrew/Fuller (Vice President, Sales)' - TabOrder = 1 - OnClick = rbPreDefLoginClick - end - object rbPreDefLogin3: TRadioButton - Left = 4 - Top = 67 - Width = 230 - Height = 17 - Caption = 'Laura/Callahan (Inside Sales Coordinator)' - TabOrder = 2 - OnClick = rbPreDefLoginClick - end - object rbPreDefLogin4: TRadioButton - Left = 4 - Top = 110 - Width = 230 - Height = 17 - Caption = 'Claudia/Sutherland (Sales Representative)' - TabOrder = 3 - OnClick = rbPreDefLoginClick - end - object rbPreDefLogin5: TRadioButton - Left = 4 - Top = 127 - Width = 230 - Height = 17 - Caption = 'Luke/Leung (Sales Representative)' - TabOrder = 4 - OnClick = rbPreDefLoginClick - end - object rbPreDefLogin6: TRadioButton - Left = 4 - Top = 144 - Width = 230 - Height = 17 - Caption = 'Takashi/Yamamoto (Sales Representative)' - TabOrder = 5 - OnClick = rbPreDefLoginClick - end - end - end - object tpCustomerManagement: TTabSheet - Caption = 'Customer Management' - ImageIndex = 1 - object Splitter1: TSplitter - Left = 0 - Top = 174 - Width = 597 - Height = 8 - Cursor = crVSplit - Align = alBottom - Beveled = True - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 597 - Height = 22 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object DBNavigator1: TDBNavigator - Left = 0 - Top = 0 - Width = 240 - Height = 22 - DataSource = MegaDemoClient_DataModule.ds_Customers - Align = alLeft - TabOrder = 0 - end - object tsbApplyUpdatesCustomers: TButton - Left = 240 - Top = 0 - Width = 100 - Height = 22 - Action = aApplyUpdate - TabOrder = 1 - end - end - object gCustomers: TDBGrid - Left = 0 - Top = 22 - Width = 597 - Height = 152 - Align = alClient - DataSource = MegaDemoClient_DataModule.ds_Customers - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gOrdersByCustomer: TDBGrid - Left = 0 - Top = 182 - Width = 597 - Height = 86 - Align = alBottom - DataSource = MegaDemoClient_DataModule.ds_OrdersByCustomer - TabOrder = 2 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - end - object tpBank: TTabSheet - Caption = 'Bank' - ImageIndex = 3 - object Label1: TLabel - Left = 4 - Top = 5 - Width = 592 - Height = 149 - Anchors = [akLeft, akTop, akRight, akBottom] - AutoSize = False - Caption = 'This tab doesn'#39't really do anything beside being accessible ' - Font.Charset = DEFAULT_CHARSET - Font.Color = clGreen - Font.Height = -16 - Font.Name = 'Tahoma' - Font.Style = [fsBold, fsItalic] - ParentFont = False - WordWrap = True - end - end - end - object sslPageHint: TStatusBar - Left = 0 - Top = 303 - Width = 617 - Height = 19 - Panels = <> - SimplePanel = True - end - object ActionList1: TActionList - Left = 544 - Top = 58 - object aApplyUpdate: TAction - Caption = 'Apply Update' - OnExecute = aApplyUpdateExecute - OnUpdate = aApplyUpdateUpdate - end - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.pas deleted file mode 100644 index 6e1b7a1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoClient_Main.pas +++ /dev/null @@ -1,168 +0,0 @@ -unit MegaDemoClient_Main; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ComCtrls, - uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, ExtCtrls, - Grids, DBGrids, DBCtrls, ActnList; - -type - TMegaDemoClient_MainForm = class(TForm) - PageControl1: TPageControl; - tpLogin: TTabSheet; - tpCustomerManagement: TTabSheet; - tpBank: TTabSheet; - Label1: TLabel; - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - sslPageHint: TStatusBar; - GroupBox1: TGroupBox; - Label2: TLabel; - Label3: TLabel; - tbUserName: TEdit; - tbPassword: TEdit; - bLogin: TButton; - bLogout: TButton; - GroupBox2: TGroupBox; - Label4: TLabel; - rbPreDefLogin1: TRadioButton; - rbPreDefLogin2: TRadioButton; - rbPreDefLogin3: TRadioButton; - Label5: TLabel; - rbPreDefLogin4: TRadioButton; - rbPreDefLogin5: TRadioButton; - rbPreDefLogin6: TRadioButton; - Panel1: TPanel; - DBNavigator1: TDBNavigator; - gCustomers: TDBGrid; - tsbApplyUpdatesCustomers: TButton; - ActionList1: TActionList; - aApplyUpdate: TAction; - gOrdersByCustomer: TDBGrid; - Splitter1: TSplitter; - procedure bLoginClick(Sender: TObject); - procedure bLogoutClick(Sender: TObject); - procedure rbPreDefLoginClick(Sender: TObject); - procedure PageControl1Changing(Sender: TObject; - var AllowChange: Boolean); - procedure FormShow(Sender: TObject); - procedure PageControl1Change(Sender: TObject); - procedure aApplyUpdateExecute(Sender: TObject); - procedure aApplyUpdateUpdate(Sender: TObject); - private - { Private declarations } - procedure PrivilegesSetup; - public - { Public declarations } - end; - -var - MegaDemoClient_MainForm: TMegaDemoClient_MainForm; - -implementation - -uses - MegaDemoClient_Data, MegaDemoLibrary_Intf, uDADataTable; - -{$R *.dfm} - -procedure TMegaDemoClient_MainForm.bLoginClick(Sender: TObject); -var - serverLoginInfo: LoginInfo; -begin - bLogout.Click; // Forces a logout click - if (MegaDemoClient_DataModule.fLoginService.Login(tbUserName.Text, tbPassword.Text, serverLoginInfo) = false) then begin - ShowMessage('Invalid login'); - end else begin - if MegaDemoClient_DataModule.fLoginInfo <> nil then MegaDemoClient_DataModule.fLoginInfo.Free; - MegaDemoClient_DataModule.fLoginInfo := serverLoginInfo; - ShowMessage('Welcome ' + MegaDemoClient_DataModule.fLoginInfo.JobTitle + ' ' + MegaDemoClient_DataModule.fLoginInfo.FirstName); - - MegaDemoClient_DataModule.tbl_Customers.Close; - MegaDemoClient_DataModule.tbl_Customers.Open; - - bLogin.Enabled := false; - bLogout.Enabled := true; - end; - PrivilegesSetup; -end; - -procedure TMegaDemoClient_MainForm.bLogoutClick(Sender: TObject); -begin - PrivilegesSetup; - if not MegaDemoClient_DataModule.LoggedIn then Exit; - if MegaDemoClient_DataModule.FLoginInfo <> nil then - FreeAndNil(MegaDemoClient_DataModule.FLoginInfo); - MegaDemoClient_DataModule.tbl_Customers.Close; - MegaDemoClient_DataModule.tbl_OrdersByCustomer.Close; - bLogin.Enabled := true; - bLogout.Enabled := false; -end; - -procedure TMegaDemoClient_MainForm.rbPreDefLoginClick(Sender: TObject); -var - senderRadioButton: TRadioButton; - ctrlLabel: string; - textIdx: integer; -begin - senderRadioButton := sender as TRadioButton; - if (senderRadioButton.Checked) then begin - ctrlLabel := senderRadioButton.Caption; - textIdx := pos('/', ctrlLabel); - tbUserName.Text := copy(ctrlLabel, 1, textIdx - 1); - tbPassword.Text := copy(ctrlLabel, textIdx + 1, Pos(' ', ctrlLabel) - textIdx - 1); - end; -end; - -procedure TMegaDemoClient_MainForm.PageControl1Changing(Sender: TObject; - var AllowChange: Boolean); -begin - if (not MegaDemoClient_DataModule.LoggedIn) and (PageControl1.TabIndex = 0) then begin - ShowMessage('You must login first'); - AllowChange := False; - end; -end; - -procedure TMegaDemoClient_MainForm.PrivilegesSetup; -begin - tpCustomerManagement.TabVisible := MegaDemoClient_DataModule.LoggedIn; - tpBank.TabVisible := MegaDemoClient_DataModule.LoggedIn and (MegaDemoClient_DataModule.fLoginInfo.Job_Type = JobType_Manager); - gOrdersByCustomer.Visible := MegaDemoClient_DataModule.LoggedIn and (MegaDemoClient_DataModule.fLoginInfo.Job_Type <> JobType_Engineer); - Splitter1.Visible := gOrdersByCustomer.Visible; - Splitter1.top := 0; -end; - -procedure TMegaDemoClient_MainForm.FormShow(Sender: TObject); -begin - PrivilegesSetup; - PageControl1.ActivePage := tpLogin; - PageControl1.OnChange(PageControl1); -end; - -procedure TMegaDemoClient_MainForm.PageControl1Change(Sender: TObject); -begin - case ((sender as TPageControl).ActivePageIndex) of - 0: sslPageHint.SimpleText := 'Login page. Click on the pre-configured logins to avoid typing a username and a password'; - 1: sslPageHint.SimpleText := 'Customer magamenet page. You can view all customers and create new ones, if your privileges allow you to'; - else - sslPageHint.SimpleText := ''; - end; -end; - -procedure TMegaDemoClient_MainForm.aApplyUpdateExecute(Sender: TObject); -begin - try - MegaDemoClient_DataModule.tbl_Customers.ApplyUpdates; - except - on e: Exception do ShowMessage(E.Message); - end; -end; - -procedure TMegaDemoClient_MainForm.aApplyUpdateUpdate(Sender: TObject); -begin - TAction(Sender).Enabled := MegaDemoClient_DataModule.tbl_Customers.HasDelta; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.Sample.html deleted file mode 100644 index 5a4c9fd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.Sample.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - -

- Mega Demo Sample -

- - -

Purpose

-

- The sample shows: -

-
    -
  • - How we can work with several connections to different databases (Northwind - MS SQL and Employee - Firebird). -
  • -
  • - How we can implement security and access rights in our application. -
  • -
  • Master-detail relations between tables is implemented via a service that provides a list of orders by user id.
  • -
- -

Examine the code

-
    -
  • Check how the server methods were implemented in OrdersService_Impl.pas and LoginService_Impl.pas.
  • -
  • See the code needed to invoke server methods in MegaDemoClient_Main.pas
  • -
- -

Getting started

-
    -
  • Compile the entire solution.
  • -
  • Run the server.
  • -
  • Run the client.
  • -
  • Login to client (for login, you just can select appropriate user in the Preconfigured login section) -

    Note: for login to appropriate database (NorthWind or Employee), you should select the correct connection in the server application (Selected Connection combo box)

    -
  • -
  • Check user privileges. "Bank" page should only be accessible for managers.
  • -
  • Try to change data on the Customer Management page and post the changes or discard them.
  • - - -
- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bdsgroup deleted file mode 100644 index a4c5907..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - MegaDemoServer.bdsproj - MegaDemoClient.bdsproj - MegaDemoServer.exe MegaDemoClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bpg deleted file mode 100644 index 069815f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = MegaDemoServer.exe MegaDemoClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -MegaDemoServer.exe: MegaDemoServer.dpr - $(DCC) - -MegaDemoClient.exe: MegaDemoClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.groupproj deleted file mode 100644 index e53f7be..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoGroup.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {6de371b5-c051-4282-a7a2-9b5eda33c8d4} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary.RODL deleted file mode 100644 index 3fd1a70..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary.RODL +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Intf.pas deleted file mode 100644 index c750723..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Intf.pas +++ /dev/null @@ -1,355 +0,0 @@ -unit MegaDemoLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{7C1E1A6D-C50B-482D-AE41-090E9A61BBB0}'; - TargetNamespace = ''; - - { Service Interface ID's } - ILoginService_IID : TGUID = '{ABD98EFC-78DA-4704-A3EB-0D89CC8BC618}'; - IOrdersService_IID : TGUID = '{6EC8387D-B288-4EE0-BFB7-C4BAEF28E50B}'; - - { Event ID's } - -type - { Forward declarations } - ILoginService = interface; - IOrdersService = interface; - - - LoginInfo = class; - - - - { Enumerateds } - JobType = (JobType_SalesRep,JobType_Manager,JobType_Engineer); - - { LoginInfo } - LoginInfo = class(TROComplexType) - private - fSessionID: String; - fEmployeeID: Integer; - fFirstName: String; - fLastName: String; - fJob_Type: JobType; - fJobTitle: String; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property SessionID:String read fSessionID write fSessionID; - property EmployeeID:Integer read fEmployeeID write fEmployeeID; - property FirstName:String read fFirstName write fFirstName; - property LastName:String read fLastName write fLastName; - property Job_Type:JobType read fJob_Type write fJob_Type; - property JobTitle:String read fJobTitle write fJobTitle; - end; - - { LoginInfoCollection } - LoginInfoCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): LoginInfo; - procedure SetItems(aIndex: integer; const Value: LoginInfo); - public - constructor Create; overload; - function Add: LoginInfo; reintroduce; - property Items[Index: integer]:LoginInfo read GetItems write SetItems; default; - end; - - { ILoginService } - ILoginService = interface(IDataAbstractService) - ['{ABD98EFC-78DA-4704-A3EB-0D89CC8BC618}'] - function Login(const UserName: String; const Password: String; out aLoginInfo: LoginInfo): Boolean; - procedure Logout; - end; - - { CoLoginService } - CoLoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginService; - end; - - { TLoginService_Proxy } - TLoginService_Proxy = class(TDataAbstractService_Proxy, ILoginService) - protected - function __GetInterfaceName:string; override; - - function Login(const UserName: String; const Password: String; out aLoginInfo: LoginInfo): Boolean; - procedure Logout; - end; - - { IOrdersService } - IOrdersService = interface(IDataAbstractService) - ['{6EC8387D-B288-4EE0-BFB7-C4BAEF28E50B}'] - function GetCustomerOrders(const CustomerID: String): Binary; - end; - - { CoOrdersService } - CoOrdersService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IOrdersService; - end; - - { TOrdersService_Proxy } - TOrdersService_Proxy = class(TDataAbstractService_Proxy, IOrdersService) - protected - function __GetInterfaceName:string; override; - - function GetCustomerOrders(const CustomerID: String): Binary; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ LoginInfo } - -procedure LoginInfo.Assign(iSource: TPersistent); -var lSource: MegaDemoLibrary_Intf.LoginInfo; -begin - inherited Assign(iSource); - if (iSource is MegaDemoLibrary_Intf.LoginInfo) then begin - lSource := MegaDemoLibrary_Intf.LoginInfo(iSource); - SessionID := lSource.SessionID; - EmployeeID := lSource.EmployeeID; - FirstName := lSource.FirstName; - LastName := lSource.LastName; - Job_Type := lSource.Job_Type; - JobTitle := lSource.JobTitle; - end; -end; - -procedure LoginInfo.ReadComplex(ASerializer: TObject); -var - l_EmployeeID: Integer; - l_FirstName: String; - l_Job_Type: JobType; - l_JobTitle: String; - l_LastName: String; - l_SessionID: String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_SessionID := SessionID; - TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - l_EmployeeID := EmployeeID; - TROSerializer(ASerializer).ReadInteger('EmployeeID', otSLong, l_EmployeeID); - EmployeeID := l_EmployeeID; - l_FirstName := FirstName; - TROSerializer(ASerializer).ReadUTF8String('FirstName', l_FirstName); - FirstName := l_FirstName; - l_LastName := LastName; - TROSerializer(ASerializer).ReadUTF8String('LastName', l_LastName); - LastName := l_LastName; - l_Job_Type := Job_Type; - TROSerializer(ASerializer).ReadEnumerated('Job_Type',TypeInfo(JobType), l_Job_Type); - Job_Type := l_Job_Type; - l_JobTitle := JobTitle; - TROSerializer(ASerializer).ReadUTF8String('JobTitle', l_JobTitle); - JobTitle := l_JobTitle; - end else begin - l_EmployeeID := EmployeeID; - TROSerializer(ASerializer).ReadInteger('EmployeeID', otSLong, l_EmployeeID); - EmployeeID := l_EmployeeID; - l_FirstName := FirstName; - TROSerializer(ASerializer).ReadUTF8String('FirstName', l_FirstName); - FirstName := l_FirstName; - l_Job_Type := Job_Type; - TROSerializer(ASerializer).ReadEnumerated('Job_Type',TypeInfo(JobType), l_Job_Type); - Job_Type := l_Job_Type; - l_JobTitle := JobTitle; - TROSerializer(ASerializer).ReadUTF8String('JobTitle', l_JobTitle); - JobTitle := l_JobTitle; - l_LastName := LastName; - TROSerializer(ASerializer).ReadUTF8String('LastName', l_LastName); - LastName := l_LastName; - l_SessionID := SessionID; - TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - end; -end; - -procedure LoginInfo.WriteComplex(ASerializer: TObject); -var - l_EmployeeID: Integer; - l_FirstName: String; - l_Job_Type: JobType; - l_JobTitle: String; - l_LastName: String; - l_SessionID: String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_SessionID := SessionID; - TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - l_EmployeeID := EmployeeID; - TROSerializer(ASerializer).WriteInteger('EmployeeID', otSLong, l_EmployeeID); - EmployeeID := l_EmployeeID; - l_FirstName := FirstName; - TROSerializer(ASerializer).WriteUTF8String('FirstName', l_FirstName); - FirstName := l_FirstName; - l_LastName := LastName; - TROSerializer(ASerializer).WriteUTF8String('LastName', l_LastName); - LastName := l_LastName; - l_Job_Type := Job_Type; - TROSerializer(ASerializer).WriteEnumerated('Job_Type',TypeInfo(JobType), l_Job_Type); - Job_Type := l_Job_Type; - l_JobTitle := JobTitle; - TROSerializer(ASerializer).WriteUTF8String('JobTitle', l_JobTitle); - JobTitle := l_JobTitle; - end else begin - l_EmployeeID := EmployeeID; - TROSerializer(ASerializer).WriteInteger('EmployeeID', otSLong, l_EmployeeID); - EmployeeID := l_EmployeeID; - l_FirstName := FirstName; - TROSerializer(ASerializer).WriteUTF8String('FirstName', l_FirstName); - FirstName := l_FirstName; - l_Job_Type := Job_Type; - TROSerializer(ASerializer).WriteEnumerated('Job_Type',TypeInfo(JobType), l_Job_Type); - Job_Type := l_Job_Type; - l_JobTitle := JobTitle; - TROSerializer(ASerializer).WriteUTF8String('JobTitle', l_JobTitle); - JobTitle := l_JobTitle; - l_LastName := LastName; - TROSerializer(ASerializer).WriteUTF8String('LastName', l_LastName); - LastName := l_LastName; - l_SessionID := SessionID; - TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - end; -end; - -{ LoginInfoCollection } -constructor LoginInfoCollection.Create; -begin - inherited Create(LoginInfo); -end; - -constructor LoginInfoCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function LoginInfoCollection.Add: LoginInfo; -begin - result := LoginInfo(inherited Add); -end; - -function LoginInfoCollection.GetItems(aIndex: integer): LoginInfo; -begin - result := LoginInfo(inherited Items[aIndex]); -end; - -procedure LoginInfoCollection.SetItems(aIndex: integer; const Value: LoginInfo); -begin - LoginInfo(inherited Items[aIndex]).Assign(Value); -end; - -{ CoLoginService } - -class function CoLoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ILoginService; -begin - result := TLoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TLoginService_Proxy } - -function TLoginService_Proxy.__GetInterfaceName:string; -begin - result := 'LoginService'; -end; - -function TLoginService_Proxy.Login(const UserName: String; const Password: String; out aLoginInfo: LoginInfo): Boolean; -begin - try - aLoginInfo := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'MegaDemoLibrary', __InterfaceName, 'Login'); - __Message.Write('UserName', TypeInfo(String), UserName, []); - __Message.Write('Password', TypeInfo(String), Password, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - __Message.Read('aLoginInfo', TypeInfo(MegaDemoLibrary_Intf.LoginInfo), aLoginInfo, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -procedure TLoginService_Proxy.Logout; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'MegaDemoLibrary', __InterfaceName, 'Logout'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -{ CoOrdersService } - -class function CoOrdersService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IOrdersService; -begin - result := TOrdersService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TOrdersService_Proxy } - -function TOrdersService_Proxy.__GetInterfaceName:string; -begin - result := 'OrdersService'; -end; - -function TOrdersService_Proxy.GetCustomerOrders(const CustomerID: String): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'MegaDemoLibrary', __InterfaceName, 'GetCustomerOrders'); - __Message.Write('CustomerID', TypeInfo(String), CustomerID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -initialization - RegisterROClass(LoginInfo); - RegisterProxyClass(ILoginService_IID, TLoginService_Proxy); - RegisterProxyClass(IOrdersService_IID, TOrdersService_Proxy); - - -finalization - UnregisterROClass(LoginInfo); - UnregisterProxyClass(ILoginService_IID); - UnregisterProxyClass(IOrdersService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Invk.pas deleted file mode 100644 index d407890..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoLibrary_Invk.pas +++ /dev/null @@ -1,126 +0,0 @@ -unit MegaDemoLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} MegaDemoLibrary_Intf; - -type - {$M+} - TLoginService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - {$M+} - TOrdersService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_GetCustomerOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TLoginService_Invoker } - -procedure TLoginService_Invoker.Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function Login(const UserName: String; const Password: String; out aLoginInfo: LoginInfo): Boolean; } -var - UserName: String; - Password: String; - aLoginInfo: MegaDemoLibrary_Intf.LoginInfo; - lResult: Boolean; - __lObjectDisposer: TROObjectDisposer; -begin - aLoginInfo := nil; - try - __Message.Read('UserName', TypeInfo(String), UserName, []); - __Message.Read('Password', TypeInfo(String), Password, []); - - lResult := (__Instance as ILoginService).Login(UserName, Password, aLoginInfo); - - __Message.InitializeResponseMessage(__Transport, 'MegaDemoLibrary', 'LoginService', 'LoginResponse'); - __Message.Write('Result', TypeInfo(Boolean), lResult, []); - __Message.Write('aLoginInfo', TypeInfo(MegaDemoLibrary_Intf.LoginInfo), aLoginInfo, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aLoginInfo); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TLoginService_Invoker.Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure Logout; } -begin - try - (__Instance as ILoginService).Logout; - - __Message.InitializeResponseMessage(__Transport, 'MegaDemoLibrary', 'LoginService', 'LogoutResponse'); - __Message.Finalize; - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -{ TOrdersService_Invoker } - -procedure TOrdersService_Invoker.Invoke_GetCustomerOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetCustomerOrders(const CustomerID: String): Binary; } -var - CustomerID: String; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('CustomerID', TypeInfo(String), CustomerID, []); - - lResult := (__Instance as IOrdersService).GetCustomerOrders(CustomerID); - - __Message.InitializeResponseMessage(__Transport, 'MegaDemoLibrary', 'OrdersService', 'GetCustomerOrdersResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.bdsproj deleted file mode 100644 index bf14e9b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MegaDemoServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dpr deleted file mode 100644 index a4f42f4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dpr +++ /dev/null @@ -1,26 +0,0 @@ -program MegaDemoServer; - -{#ROGEN:MegaDemoLibrary.RODL}// RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - MegaDemoServer_Main in 'MegaDemoServer_Main.pas' {MegaDemoServer_MainForm}, - MegaDemoServer_Data in 'MegaDemoServer_Data.pas' {MegaDemoServer_DataModule: TDataModule}, - MegaDemoLibrary_Intf in 'MegaDemoLibrary_Intf.pas', - MegaDemoLibrary_Invk in 'MegaDemoLibrary_Invk.pas', - LoginService_Impl in 'LoginService_Impl.pas' {LoginService: TDataAbstractService}, - OrdersService_Impl in 'OrdersService_Impl.pas' {OrdersService: TDataAbstractService}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'MegaDemo server'; - Application.CreateForm(TMegaDemoServer_DataModule, MegaDemoServer_DataModule); - Application.CreateForm(TMegaDemoServer_MainForm, MegaDemoServer_MainForm); - Application.Run; -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dproj deleted file mode 100644 index 9977beb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.dproj +++ /dev/null @@ -1,83 +0,0 @@ - - - {52bc4b5a-f3b4-4085-b7e9-63fe80cf7d83} - MegaDemoServer.dpr - Debug - AnyCPU - DCC32 - MegaDemoServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MegaDemoServer.dpr - - - - - - - MainSource - - -
LoginService
-
- - - -
MegaDemoServer_DataModule
-
- -
MegaDemoServer_MainForm
-
- -
OrdersService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.dfm deleted file mode 100644 index 9e14fb4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.dfm +++ /dev/null @@ -1,74 +0,0 @@ -object MegaDemoServer_DataModule: TMegaDemoServer_DataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'Employees' - ConnectionString = - 'IBX?Server=localhost;Database=C:\Program Files\Borland\InterBase' + - '\examples\Database\EMPLOYEE.FDB;UserID=SYSDBA;Password=masterkey' + - ';' - Description = 'Local connection to FireBird'#39's EMPLOYEE.FDB' - Default = False - Tag = 0 - end - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%MODULE%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end - object DAADODriver: TDAADODriver - Left = 243 - Top = 11 - end - object DAIBXDriver: TDAIBXDriver - Left = 244 - Top = 59 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.pas deleted file mode 100644 index a9b415b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Data.pas +++ /dev/null @@ -1,43 +0,0 @@ -unit MegaDemoServer_Data; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uROIndyTCPServer, uDAADODriver, uDAIBXDriver; - -type - TMegaDemoServer_DataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - SessionManager: TROInMemorySessionManager; - DAADODriver: TDAADODriver; - DAIBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - MegaDemoServer_DataModule: TMegaDemoServer_DataModule; - -implementation - -{$R *.dfm} - -procedure TMegaDemoServer_DataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.dfm deleted file mode 100644 index 513b0f2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.dfm +++ /dev/null @@ -1,44 +0,0 @@ -object MegaDemoServer_MainForm: TMegaDemoServer_MainForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Data Abstract Server' - ClientHeight = 108 - ClientWidth = 345 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 66 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object Label1: TLabel - Left = 8 - Top = 60 - Width = 101 - Height = 13 - Caption = 'Selected connection:' - end - object cbConnectionName: TComboBox - Left = 7 - Top = 75 - Width = 329 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 13 - TabOrder = 0 - OnChange = cbConnectionNameChange - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.pas deleted file mode 100644 index a935c0f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/MegaDemoServer_Main.pas +++ /dev/null @@ -1,56 +0,0 @@ -unit MegaDemoServer_Main; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TMegaDemoServer_MainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - Label1: TLabel; - cbConnectionName: TComboBox; - procedure FormCreate(Sender: TObject); - procedure cbConnectionNameChange(Sender: TObject); - private - fCurrentConnectionName: string; - public - { Public declarations } - function GetSelectedConnectionName: string; - end; - -var - MegaDemoServer_MainForm: TMegaDemoServer_MainForm; - -implementation -uses - MegaDemoServer_Data; -{$R *.dfm} - -procedure TMegaDemoServer_MainForm.FormCreate(Sender: TObject); -var - i: integer; -begin - with MegaDemoServer_DataModule.ConnectionManager.Connections do - for i := 0 to Count - 1 do begin - cbConnectionName.AddItem(Connections[i].Name + ' - ' + Connections[i].Description, nil); - if Connections[i].Default then begin - cbConnectionName.ItemIndex := i; - cbConnectionNameChange(cbConnectionName); - end; - end; -end; - -function TMegaDemoServer_MainForm.GetSelectedConnectionName: string; -begin - Result := fCurrentConnectionName; -end; - -procedure TMegaDemoServer_MainForm.cbConnectionNameChange(Sender: TObject); -begin - fCurrentConnectionName := copy(cbConnectionName.Text, 1, pos(' ', cbConnectionName.Text)-1); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.dfm deleted file mode 100644 index 8eeb63c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.dfm +++ /dev/null @@ -1,323 +0,0 @@ -object OrdersService: TOrdersService - OldCreateOrder = True - RequiresSession = True - SessionManager = MegaDemoServer_DataModule.SessionManager - ServiceSchema = Schema - ServiceDataStreamer = BinDataStreamer - ExportedDataTables = <> - BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection - Left = 221 - Top = 190 - Height = 206 - Width = 256 - object bpCustomers: TDABusinessProcessor - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poAutoGenerateRefreshDataset, poPrepareCommands] - UpdateMode = updWhereKeyOnly - Left = 138 - Top = 60 - end - object BinDataStreamer: TDABinDataStreamer - BufferSize = 262144 - Left = 62 - Top = 60 - end - object Schema: TDASchema - ConnectionManager = MegaDemoServer_DataModule.ConnectionManager - DataDictionary = MegaDemoServer_DataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Employees' - TargetTable = 'CUSTOMER' - SQL = 'SELECT C.CUST_NO, C.CUSTOMER, C.CITY'#10'FROM CUSTOMER C' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CUST_NO' - end - item - DatasetField = 'CustomerName' - TableField = 'CUSTOMER' - end - item - DatasetField = 'City' - TableField = 'CITY' - end> - end - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' Custs.CustomerID, Custs.CompanyName, Custs.City'#10' FR' + - 'OM'#10' Customers Custs' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CustomerName' - TableField = 'CompanyName' - end - item - DatasetField = 'City' - TableField = 'City' - end> - end> - Name = 'Customers' - Description = 'Retrieves the list of customers in the database' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - Description = 'The customer'#39's code' - BlobType = dabtUnknown - GeneratorName = 'CUST_NO_GEN' - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - DisplayLabel = 'Customer ID' - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerName' - DataType = datString - Size = 40 - Description = 'The customer'#39's name' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - DisplayLabel = 'Name' - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 25 - Description = 'The customer'#39's city' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'Employees' - TargetTable = 'SALES' - SQL = - 'SELECT S.CUST_NO, S.ORDER_DATE, S.DATE_NEEDED, S.SHIP_DATE, S.TO' + - 'TAL_VALUE'#10'FROM SALES S'#10'WHERE S.SALES_REP=:EmployeeID AND S.CUST_' + - 'NO=:CustomerID' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CUST_NO' - end - item - DatasetField = 'OrderDate' - TableField = 'ORDER_DATE' - end - item - DatasetField = 'RequiredDate' - TableField = 'DATE_NEEDED' - end - item - DatasetField = 'ShippedDate' - TableField = 'SHIP_DATE' - end - item - DatasetField = 'OrderAmount' - TableField = 'TOTAL_VALUE' - end> - end - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' Ords.CustomerID, Ords.OrderDate, Ords.RequiredDate, ' + - 'Ords.ShippedDate, Ords.Freight as OrderAmount'#10' FROM'#10' Orders ' + - 'Ords'#10'WHERE Ords.EmployeeID=:EmployeeID AND Ords.CustomerID=:Cust' + - 'omerID' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'OrderAmount' - TableField = 'OrderAmount' - end> - end> - Name = 'OrdersByCustomer' - Description = - 'Retrieves the list of orders for a specific customer entered by ' + - 'the loged employee' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - Description = 'The identifier of the customer that placed this order' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - LogChanges = False - DisplayWidth = 0 - DisplayLabel = 'Customer ID' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - Description = 'The order'#39's date' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - DisplayLabel = 'Order Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - Description = 'The date by which the order has to be received' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - DisplayLabel = 'Required Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - Description = 'The date this order has been shipped' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - DisplayLabel = 'Shipped Date' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderAmount' - DataType = datCurrency - Description = 'The order'#39's amount' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - DisplayLabel = 'Order Amount' - ReadOnly = True - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = < - item - Name = 'CustomersToOrders' - MasterDatasetName = 'Customers' - MasterFields = 'CustomerID' - DetailDatasetName = 'OrdersByCustomer' - DetailFields = 'CustomerID' - RelationshipType = rtForeignKey - end> - UpdateRules = <> - Version = 0 - Left = 62 - Top = 15 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.pas deleted file mode 100644 index 0199193..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/OrdersService_Impl.pas +++ /dev/null @@ -1,97 +0,0 @@ -unit OrdersService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} MegaDemoLibrary_Intf, uDAClasses, uDADataStreamer, - uDABinAdapter, uDAScriptingProvider, uDABusinessProcessor; - -type - { TOrdersService } - TOrdersService = class(TDataAbstractService, IOrdersService) - bpCustomers: TDABusinessProcessor; - BinDataStreamer: TDABinDataStreamer; - Schema: TDASchema; - procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; - var aConnectionName: string); - private - protected - { IOrdersService methods } - function GetCustomerOrders(const CustomerID: string): Binary; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} MegaDemoLibrary_Invk, - MegaDemoServer_Data, MegaDemoServer_Main; - -procedure Create_OrdersService(out anInstance: IUnknown); -begin - anInstance := TOrdersService.Create(nil); -end; - -{ OrdersService } - -function TOrdersService.GetCustomerOrders(const CustomerID: string): Binary; -var - aTableNameArray: StringArray; - aTableRequestInfoArray: TableRequestInfoArray; - aTableRequestInfo: TableRequestInfo; -begin - // This method reads all the orders of the specified customer and also filters - // based on the current employee's ID. The employee ID has been previously stored - // in the session upon the call to LoginService.Login. - - aTableNameArray := StringArray.Create; - aTableRequestInfoArray := TableRequestInfoArray.Create; - try - aTableNameArray.Add('OrdersByCustomer'); - aTableRequestInfo := aTableRequestInfoArray.Add; - with aTableRequestInfo do begin - IncludeSchema := True; - MaxRecords := -1; - UserFilter := ''; - with Parameters.Add do begin - Name := 'CustomerID'; - Value := CustomerID; - end; - with Parameters.Add do begin - Name := 'EmployeeID'; - Value := Session['EmployeeID']; - end; - end; - Result := GetData(aTableNameArray, aTableRequestInfoArray) - finally - aTableRequestInfoArray.Free; - aTableNameArray.Free; - end; -end; - -procedure TOrdersService.DataAbstractServiceBeforeAcquireConnection( - aSender: TObject; var aConnectionName: string); -begin - // Reads the connection name from the main form. - aConnectionName := MegaDemoServer_MainForm.GetSelectedConnectionName; -end; - -initialization - TROClassFactory.Create('OrdersService', Create_OrdersService, TOrdersService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/RODLFILE.res deleted file mode 100644 index e8d19db..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/MegaDemo/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.Sample.html deleted file mode 100644 index 38fadb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.Sample.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - -

- Memory Data -

- - -

Purpose

- -

- This example shows how to create and populate a virtual dataset dynamically.
-The client displays two grids: - -

    -
  • - Top Grid: this displays the primary keys of one or more datasets from Northwind. Supply the names of the datasets required in a comma separated list, e.g. Regions, Customers, Employees. -
  • -
  • - Bottom Grid: this displays the names and sizes of files contained in the specified disk folder. -
  • -
-

- -

Examine the Code

-
    -
  • - See the simple code in NewService_Impl.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bdsgroup deleted file mode 100644 index 515b8e1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - MemoryData_Server.bdsproj - MemoryData_Client.bdsproj - MemoryData_Server.exe MemoryData_Client.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bpg deleted file mode 100644 index 0a15ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = MemoryData_Server.exe MemoryData_Client.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -MemoryData_Server.exe: MemoryData_Server.dpr - $(DCC) - -MemoryData_Client.exe: MemoryData_Client.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.groupproj deleted file mode 100644 index 6c66ace..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {3e35d412-e6fa-41c3-a9d2-f8c07e8dc6fb} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary.rodl deleted file mode 100644 index 113ead8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary.rodl +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Intf.pas deleted file mode 100644 index 5594e0f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Intf.pas +++ /dev/null @@ -1,76 +0,0 @@ -unit MemoryDataLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{D4B11283-58D8-4C0D-9747-FEB990A41DEE}'; - - { Service Interface ID's } - INewService_IID : TGUID = '{1E22E1AC-FB18-4085-8260-F6AFF4E697BA}'; - - { Event ID's } - -type - { Forward declarations } - INewService = interface; - - - - - { INewService } - INewService = interface(IDataAbstractService) - ['{1E22E1AC-FB18-4085-8260-F6AFF4E697BA}'] - end; - - { CoNewService } - CoNewService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; - end; - - { TNewService_Proxy } - TNewService_Proxy = class(TDataAbstractService_Proxy, INewService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoNewService } - -class function CoNewService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; -begin - result := TNewService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TNewService_Proxy.__GetInterfaceName:string; -begin - result := 'NewService'; -end; - -initialization - RegisterProxyClass(INewService_IID, TNewService_Proxy); - - -finalization - UnregisterProxyClass(INewService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Invk.pas deleted file mode 100644 index 8f0bbd9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryDataLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit MemoryDataLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} MemoryDataLibrary_Intf; - -type - TNewService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.bdsproj deleted file mode 100644 index c07331f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MemoryData_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dpr deleted file mode 100644 index 54e3179..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program MemoryData_Client; - -uses - uROComInit, - Forms, - MemoryData_ClientMain in 'MemoryData_ClientMain.pas' {MemoryData_ClientMainForm}, - MemoryData_ClientData in 'MemoryData_ClientData.pas' {MemoryData_ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'MemoryData - Client'; - Application.CreateForm(TMemoryData_ClientDataModule, MemoryData_ClientDataModule); - Application.CreateForm(TMemoryData_ClientMainForm, MemoryData_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dproj deleted file mode 100644 index 62803ed..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {5aba4cae-f8e7-4072-9515-dc1d0e7611fe} - MemoryData_Client.dpr - Debug - AnyCPU - DCC32 - MemoryData_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MemoryData_Client.dpr - - - - - - - MainSource - - -
MemoryData_ClientDataModule
-
- -
MemoryData_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.dfm deleted file mode 100644 index 21191e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.dfm +++ /dev/null @@ -1,197 +0,0 @@ -object MemoryData_ClientDataModule: TMemoryData_ClientDataModule - OldCreateOrder = True - Left = 152 - Top = 69 - Height = 289 - Width = 252 - object ROChannel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 40 - Top = 52 - end - object RORemoteService: TRORemoteService - ServiceName = 'NewService' - Message = ROMessage - Channel = ROChannel - Left = 40 - Top = 96 - end - object DABinAdapter: TDABinDataStreamer - Left = 40 - Top = 142 - end - object tbl_ComboDataset1: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'AutoIncField' - DataType = datAutoInc - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'TextField' - DataType = datString - Size = 50 - BlobType = dabtUnknown - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomParameter' - DataType = datString - Size = 50 - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = DARemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'ComboDataset' - IndexDefs = <> - Left = 136 - Top = 16 - end - object ds_ComboDataset1: TDADataSource - DataTable = tbl_ComboDataset1 - Left = 152 - Top = 32 - end - object tbl_DirectoryData1: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'FileName' - DataType = datString - Size = 200 - BlobType = dabtUnknown - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FileSize' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'Directory' - DataType = datString - Size = 200 - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = DARemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'DirectoryData' - IndexDefs = <> - Left = 136 - Top = 112 - end - object ds_DirectoryData1: TDADataSource - DataTable = tbl_DirectoryData1 - Left = 152 - Top = 128 - end - object DARemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RORemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - Value = Null - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - Value = Null - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RORemoteService - GetDataCall.MethodName = 'GetData' - GetDataCall.Params = < - item - Name = 'aTableNameArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'StringArray' - end - item - Name = 'aTableRequestInfoArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'TableRequestInfoArray' - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RORemoteService - UpdateDataCall.MethodName = 'UpdateData' - UpdateDataCall.Params = < - item - Name = 'aDelta' - DataType = rtBinary - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'aDelta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RORemoteService - GetScriptsCall.Params = <> - GetScriptsCall.Default = False - RemoteService = RORemoteService - DataStreamer = DABinAdapter - Left = 40 - Top = 192 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.pas deleted file mode 100644 index 244bca4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientData.pas +++ /dev/null @@ -1,36 +0,0 @@ -unit MemoryData_ClientData; - -interface - -uses {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDAScriptingProvider, uDACDSDataTable, - uDARemoteDataAdapter, uDADataStreamer; - -type - TMemoryData_ClientDataModule = class(TDataModule) - ROMessage: TROBinMessage; - ROChannel: TROWinInetHTTPChannel; - RORemoteService: TRORemoteService; - DABinAdapter: TDABinDataStreamer; - tbl_ComboDataset1: TDACDSDataTable; - ds_ComboDataset1: TDADataSource; - tbl_DirectoryData1: TDACDSDataTable; - ds_DirectoryData1: TDADataSource; - DARemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - MemoryData_ClientDataModule: TMemoryData_ClientDataModule; - -implementation - -{$R *.dfm} - -initialization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.dfm deleted file mode 100644 index d1332b0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.dfm +++ /dev/null @@ -1,121 +0,0 @@ -object MemoryData_ClientMainForm: TMemoryData_ClientMainForm - Left = 98 - Top = 36 - AutoScroll = False - BorderWidth = 5 - Caption = 'MemoryData - Client' - ClientHeight = 440 - ClientWidth = 512 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DBGrid1: TDBGrid - Left = 0 - Top = 35 - Width = 512 - Height = 122 - Align = alClient - DataSource = MemoryData_ClientDataModule.ds_ComboDataset1 - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object DBGrid2: TDBGrid - Left = 0 - Top = 192 - Width = 512 - Height = 248 - Align = alBottom - DataSource = MemoryData_ClientDataModule.ds_DirectoryData1 - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 512 - Height = 35 - Align = alTop - BevelOuter = bvNone - TabOrder = 2 - DesignSize = ( - 512 - 35) - object Label1: TLabel - Left = 88 - Top = 11 - Width = 89 - Height = 13 - Caption = 'Custom Parameter:' - end - object Open1: TButton - Left = 0 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 0 - OnClick = Open1Click - end - object eCustomParameter: TEdit - Left = 183 - Top = 8 - Width = 325 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 1 - Text = 'Regions, Customers, Employees' - end - end - object Panel2: TPanel - Left = 0 - Top = 157 - Width = 512 - Height = 35 - Align = alBottom - BevelOuter = bvNone - TabOrder = 3 - DesignSize = ( - 512 - 35) - object Label2: TLabel - Left = 88 - Top = 10 - Width = 45 - Height = 13 - Caption = 'Directory:' - end - object open2: TButton - Left = 0 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 0 - OnClick = open2Click - end - object eDirectory: TEdit - Left = 138 - Top = 8 - Width = 370 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 1 - Text = 'C:\Windows' - end - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.pas deleted file mode 100644 index fe8473b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ClientMain.pas +++ /dev/null @@ -1,56 +0,0 @@ -unit MemoryData_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROIndyHTTPChannel, - Grids, DBGrids, ExtCtrls; - -type - TMemoryData_ClientMainForm = class(TForm) - DBGrid1: TDBGrid; - DBGrid2: TDBGrid; - Panel1: TPanel; - Panel2: TPanel; - open2: TButton; - Label2: TLabel; - eDirectory: TEdit; - Open1: TButton; - Label1: TLabel; - eCustomParameter: TEdit; - procedure Open1Click(Sender: TObject); - procedure open2Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - MemoryData_ClientMainForm: TMemoryData_ClientMainForm; - -implementation - -uses MemoryData_ClientData; - -{$R *.dfm} - -procedure TMemoryData_ClientMainForm.Open1Click(Sender: TObject); -begin - with MemoryData_ClientDataModule.tbl_ComboDataset1 do begin - ParamByName('CustomParameter').AsString := eCustomParameter.Text; - Active := Active xor TRUE; - end; -end; - -procedure TMemoryData_ClientMainForm.open2Click(Sender: TObject); -begin - with MemoryData_ClientDataModule.tbl_DirectoryData1 do begin - ParamByName('Directory').AsString := eDirectory.Text; - Active := Active xor TRUE; - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.bdsproj deleted file mode 100644 index 48f2368..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MemoryData_Server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dpr deleted file mode 100644 index a8d30c4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dpr +++ /dev/null @@ -1,23 +0,0 @@ -program MemoryData_Server; - -{#ROGEN:MemoryDataLibrary.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Forms, - MemoryData_ServerMain in 'MemoryData_ServerMain.pas' {MemoryData_ServerMainForm}, - NewService_Impl in 'NewService_Impl.pas' {NewService: TDARemoteService}, - MemoryData_ServerData in 'MemoryData_ServerData.pas' {MemoryData_ServerDataModule: TDataModule}, - MemoryDataLibrary_Intf in 'MemoryDataLibrary_Intf.pas', - MemoryDataLibrary_Invk in 'MemoryDataLibrary_Invk.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'MemoryData - Server'; - Application.CreateForm(TMemoryData_ServerDataModule, MemoryData_ServerDataModule); - Application.CreateForm(TMemoryData_ServerMainForm, MemoryData_ServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dproj deleted file mode 100644 index 7ad4518..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {36625199-3349-4952-8391-e35b3fcc6935} - MemoryData_Server.dpr - Debug - AnyCPU - DCC32 - MemoryData_Server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MemoryData_Server.dpr - - - - - - - MainSource - - - - -
MemoryData_ServerDataModule
-
- -
MemoryData_ServerMainForm
-
- -
NewService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_Server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.dfm deleted file mode 100644 index 5e57f4b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.dfm +++ /dev/null @@ -1,64 +0,0 @@ -object MemoryData_ServerDataModule: TMemoryData_ServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 104 - Top = 110 - Height = 207 - Width = 352 - object ROServer: TROIndyHTTPServer - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.pas deleted file mode 100644 index fa141a5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerData.pas +++ /dev/null @@ -1,48 +0,0 @@ -unit MemoryData_ServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDADriverManager, uDAClasses, uDAEngine, uDAIBXDriver, uDAADODriver, - uROIndyTCPServer; - -const - { Dataset names for Schema } - ds_Employees = 'Employees'; - ds_ComboDataset = 'ComboDataset'; - ds_Customers = 'Customers'; - ds_Region = 'Region'; - -type - TMemoryData_ServerDataModule = class(TDataModule) - ROServer: TROIndyHTTPServer; - ROMessage: TROBinMessage; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - ConnectionManager: TDAConnectionManager; - DataDictionary: TDADataDictionary; - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - MemoryData_ServerDataModule: TMemoryData_ServerDataModule; - -implementation - -{$R *.dfm} - -procedure TMemoryData_ServerDataModule.DataModuleCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.dfm deleted file mode 100644 index 4043fbb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object MemoryData_ServerMainForm: TMemoryData_ServerMainForm - Left = 41 - Top = 43 - BorderStyle = bsDialog - Caption = 'MemoryData - Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton: TDAPoweredByDataAbstractButton - Left = 9 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.pas deleted file mode 100644 index 7a60dcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/MemoryData_ServerMain.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit MemoryData_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, uDAPoweredByDataAbstractButton; - -type - TMemoryData_ServerMainForm = class(TForm) - DAPoweredByDataAbstractButton: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - MemoryData_ServerMainForm: TMemoryData_ServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.dfm deleted file mode 100644 index 393cef1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.dfm +++ /dev/null @@ -1,677 +0,0 @@ -object NewService: TNewService - OldCreateOrder = True - ServiceSchema = Schema - ServiceDataStreamer = BinAdapter - ExportedDataTables = < - item - DataTable = dtComboDataset - end - item - DataTable = dtWindowsDir - end> - BeforeGetDatasetData = DataAbstractServiceBeforeGetDatasetData - ValidateDatasetAccess = DataAbstractServiceValidateDatasetAccess - Left = 339 - Top = 191 - Height = 149 - Width = 326 - object BinAdapter: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = MemoryData_ServerDataModule.ConnectionManager - DataDictionary = MemoryData_ServerDataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Employees' - SQL = - 'SELECT '#10' EmployeeID, LastName, FirstName, Title, TitleOfCourt' + - 'esy, '#10' BirthDate, HireDate, Address, City, Region, PostalCode' + - ', '#10' Country, HomePhone, Extension, Photo, Notes, ReportsTo, '#10 + - ' PhotoPath'#10' FROM'#10' Employees' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'LastName' - TableField = 'LastName' - end - item - DatasetField = 'FirstName' - TableField = 'FirstName' - end - item - DatasetField = 'Title' - TableField = 'Title' - end - item - DatasetField = 'TitleOfCourtesy' - TableField = 'TitleOfCourtesy' - end - item - DatasetField = 'BirthDate' - TableField = 'BirthDate' - end - item - DatasetField = 'HireDate' - TableField = 'HireDate' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'HomePhone' - TableField = 'HomePhone' - end - item - DatasetField = 'Extension' - TableField = 'Extension' - end - item - DatasetField = 'Photo' - TableField = 'Photo' - end - item - DatasetField = 'Notes' - TableField = 'Notes' - end - item - DatasetField = 'ReportsTo' - TableField = 'ReportsTo' - end - item - DatasetField = 'PhotoPath' - TableField = 'PhotoPath' - end> - end> - Name = 'Employees' - Fields = < - item - Name = 'EmployeeID' - DataType = datAutoInc - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'LastName' - DataType = datString - Size = 20 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FirstName' - DataType = datString - Size = 10 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Title' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'TitleOfCourtesy' - DataType = datString - Size = 25 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'BirthDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HireDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'HomePhone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Extension' - DataType = datString - Size = 4 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Photo' - DataType = datBlob - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Notes' - DataType = datMemo - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReportsTo' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PhotoPath' - DataType = datString - Size = 255 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Region' - SQL = 'SELECT '#10' RegionID, RegionDescription'#10' FROM'#10' Region' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'RegionID' - TableField = 'RegionID' - end - item - DatasetField = 'RegionDescription' - TableField = 'RegionDescription' - end> - end> - Name = 'Regions' - Fields = < - item - Name = 'RegionID' - DataType = datAutoInc - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RegionDescription' - DataType = datString - Size = 50 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = < - item - Name = 'FK_Employees_Employees' - MasterDatasetName = 'Employees' - MasterFields = 'EmployeeID' - DetailDatasetName = 'Employees' - DetailFields = 'ReportsTo' - end> - UpdateRules = <> - Left = 32 - Top = 56 - end - object dtComboDataset: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'AutoIncField' - DataType = datAutoInc - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'TextField' - DataType = datString - Size = 50 - BlobType = dabtUnknown - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomParameter' - DataType = datString - Size = 50 - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'ComboDataset' - IndexDefs = <> - Left = 128 - Top = 56 - end - object dtWindowsDir: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'FileName' - DataType = datString - Size = 200 - BlobType = dabtUnknown - DisplayWidth = 50 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'FileSize' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'Directory' - DataType = datString - Size = 200 - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'DirectoryData' - IndexDefs = <> - Left = 216 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.pas deleted file mode 100644 index 3d06ac6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/NewService_Impl.pas +++ /dev/null @@ -1,173 +0,0 @@ -unit NewService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} MemoryDataLibrary_Intf, uDAScriptingProvider, uDADataTable, - uDACDSDataTable, uDAClasses, uDADataStreamer, uDABinAdapter, uDAInterfaces; - -const - { Dataset names for Schema } - ds_Employees = 'Employees'; - ds_Customers = 'Customers'; - ds_Regions = 'Regions'; - -type - { TNewService } - TNewService = class(TDataAbstractService, INewService) - BinAdapter: TDABinDataStreamer; - dtComboDataset: TDACDSDataTable; - dtWindowsDir: TDACDSDataTable; - Schema: TDASchema; - procedure DataAbstractServiceBeforeGetDatasetData(aSender: TObject; - const aDataset: IDADataset; const aIncludeSchema: Boolean; - const aMaxRecords: Integer); - procedure DataAbstractServiceValidateDatasetAccess(Sender: TObject; - const aConnection: IDAConnection; const aDatasetName: string; - const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); - private - procedure FillComboDataset(const aDataset: IDAEditableDataset); - procedure FillWinDirDataset(const aDataset: IDAEditableDataset); - protected - { INewService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} MemoryDataLibrary_Invk, MemoryData_ServerData, Dialogs; - -procedure Create_NewService(out anInstance: IUnknown); -begin - anInstance := TNewService.Create(nil); -end; - -procedure TNewService.FillComboDataset(const aDataset: IDAEditableDataset); -var - employees, - customers, - regions: IDADataset; - textfield: TDAField; -begin - with aDataset do begin - // Opens the in memory data table - Open; - textfield := FieldByName('TextField'); - - // Adds 3 dummy records - Insert; - textfield.AsString := 'String A'; - Post; - - Insert; - textfield.AsString := 'String B'; - Post; - - Insert; - textfield.AsString := 'String C'; - Post; - - // Fetches data from other datasets, according to the value of the parameter "CustomParameter" - if (Pos('EMPLOYEES', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin - employees := Schema.NewDataset(Connection, ds_Employees, [], [], TRUE); - while not employees.EOF do begin - Insert; - textfield.AsString := employees.FieldByName('FirstName').AsString + ' ' + employees.FieldByName('LastName').AsString; - Post; - - employees.Next; - end; - employees:=nil; - end; - if (Pos('CUSTOMERS', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin - customers := Schema.NewDataset(Connection, ds_Customers, [], [], TRUE); - while not customers.EOF do begin - Insert; - textfield.AsString := customers.FieldByName('CompanyName').AsString; - Post; - - customers.Next; - end; - customers := nil; - end; - if (Pos('REGIONS', UpperCase(ParamByName('CustomParameter').AsString)) > 0) then begin - regions := Schema.NewDataset(Connection, ds_Regions, [], [], TRUE); - while not regions.EOF do begin - Insert; - textfield.AsString := regions.FieldByName('RegionDescription').AsString; - Post; - - regions.Next; - end; - regions := nil; - end; - end; -end; - -procedure TNewService.FillWinDirDataset(const aDataset: IDAEditableDataset); -var - dirinfo: TSearchRec; -begin - aDataset.Open; - if (FindFirst(IncludeTrailingPathDelimiter(aDataset.ParamByName('Directory').AsString) + '*.*', faArchive, dirinfo) = 0) then repeat - aDataset.Insert; - - aDataset.FieldByName('FileName').AsString := dirinfo.Name; - aDataset.FieldByName('FileSize').AsInteger := dirinfo.Size; - - aDataset.Post; - until (FindNext(dirinfo) <> 0); -end; - -procedure TNewService.DataAbstractServiceBeforeGetDatasetData( - aSender: TObject; const aDataset: IDADataset; - const aIncludeSchema: Boolean; const aMaxRecords: Integer); -begin - if SameText(aDataset.LogicalName, dtComboDataset.LogicalName) then - FillComboDataset((dtComboDataset as IDAEditableDataset)) - else if SameText(aDataset.LogicalName, dtWindowsDir.LogicalName) then - FillWinDirDataset((dtWindowsDir as IDAEditableDataset)); -end; - -procedure TNewService.DataAbstractServiceValidateDatasetAccess( - Sender: TObject; const aConnection: IDAConnection; - const aDatasetName: string; const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); - - procedure FillParameters(aDataSet: TDACDSDataTable); - var - i: integer; - begin - for i := Low(aParamNames) to High(aParamNames) do - aDataset.ParamByName(aParamNames[i]).Value := aParamValues[i]; - end; - -begin - if SameText(aDatasetName, dtComboDataset.LogicalName) then - FillParameters(dtComboDataset) - else if SameText(aDatasetName, dtWindowsDir.LogicalName) then - FillParameters(dtWindowsDir) -end; - -initialization - TROClassFactory.Create('NewService', Create_NewService, TNewService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/RODLFILE.res deleted file mode 100644 index 066b5bf..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Memory Data/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.Sample.html deleted file mode 100644 index 0c9d025..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.Sample.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -

- Multi Level Detail Sample -

- - -

Purpose

- -

- This sample shows how to implement master/detail/detail updates as simply as possible.
-

- -

Examine the Code

-
    -
  • - Examine the simple code in MultiLevelDetailClient_Main.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bdsgroup deleted file mode 100644 index 14cde7c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - MultiLevelDetailServer.bdsproj - MultiLevelDetailClient.bdsproj - MultiLevelDetailServer.exe MultiLevelDetailClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bpg deleted file mode 100644 index 514c8c0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = MultiLevelDetailServer.exe MultiLevelDetailClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -MultiLevelDetailServer.exe: MultiLevelDetailServer.dpr - $(DCC) - -MultiLevelDetailClient.exe: MultiLevelDetailClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.groupproj deleted file mode 100644 index 0249223..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetail.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {a8aee872-234f-4970-aa60-4963b9b3acfb} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.bdsproj deleted file mode 100644 index 98918df..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MultiLevelDetailClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dpr deleted file mode 100644 index c6d38c4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program MultiLevelDetailClient; - -uses - uROComInit, - Forms, - MidasLib, - MultiLevelDetailClient_Main in 'MultiLevelDetailClient_Main.pas' {MultiLevelDetailClient_MainForm}, - MultiLevelDetailClient_Data in 'MultiLevelDetailClient_Data.pas' {MultiLevelDetailClient_DataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Multi Level Detail Client'; - Application.CreateForm(TMultiLevelDetailClient_DataModule, MultiLevelDetailClient_DataModule); - Application.CreateForm(TMultiLevelDetailClient_MainForm, MultiLevelDetailClient_MainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dproj deleted file mode 100644 index a75f4ff..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {f33b19c1-5014-448b-8588-d80873810fe1} - MultiLevelDetailClient.dpr - Debug - AnyCPU - DCC32 - MultiLevelDetailClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MultiLevelDetailClient.dpr - - - - - - - MainSource - - -
MultiLevelDetailClient_DataModule
-
- -
MultiLevelDetailClient_MainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.dfm deleted file mode 100644 index cd7ca26..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.dfm +++ /dev/null @@ -1,335 +0,0 @@ -object MultiLevelDetailClient_DataModule: TMultiLevelDetailClient_DataModule - OldCreateOrder = True - Left = 124 - Top = 89 - Height = 300 - Width = 300 - object Channel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object Message: TROBinMessage - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = 'MultiLevelDetailService' - Left = 40 - Top = 96 - end - object DataStreamer: TDABinDataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetDataCall.RemoteService = RemoteService - UpdateDataCall.RemoteService = RemoteService - GetScriptsCall.RemoteService = RemoteService - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 40 - Top = 184 - end - object tbl_Categories: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryName' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Description' - DataType = datMemo - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Picture' - DataType = datBlob - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Categories' - IndexDefs = <> - Left = 161 - Top = 131 - end - object ds_Categories: TDADataSource - DataTable = tbl_Categories - Left = 133 - Top = 131 - end - object tbl_Products: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'SupplierID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'QuantityPerUnit' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsInStock' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsOnOrder' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReorderLevel' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discontinued' - DataType = datBoolean - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterParamsMappings.Strings = ( - 'CategoryID=CategoryID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - MasterSource = ds_Categories - MasterFields = 'CategoryID' - DetailFields = 'CategoryID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Products' - IndexDefs = <> - Left = 161 - Top = 177 - end - object ds_Products: TDADataSource - DataTable = tbl_Products - Left = 133 - Top = 177 - end - object tbl_OrderDetails: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterParamsMappings.Strings = ( - 'ProductID=ProductID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - MasterSource = ds_Products - MasterFields = 'ProductID' - DetailFields = 'ProductID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'OrderDetails' - IndexDefs = <> - Left = 161 - Top = 86 - end - object ds_OrderDetails: TDADataSource - DataTable = tbl_OrderDetails - Left = 133 - Top = 86 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.pas deleted file mode 100644 index 8340f03..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Data.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit MultiLevelDetailClient_Data; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter, uDAScriptingProvider, - uDACDSDataTable; - -type - TMultiLevelDetailClient_DataModule = class(TDataModule) - Message: TROBinMessage; - Channel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABinDataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - tbl_Categories: TDACDSDataTable; - ds_Categories: TDADataSource; - tbl_Products: TDACDSDataTable; - ds_Products: TDADataSource; - tbl_OrderDetails: TDACDSDataTable; - ds_OrderDetails: TDADataSource; - private - { Private declarations } - public - { Public declarations } - end; - -var - MultiLevelDetailClient_DataModule: TMultiLevelDetailClient_DataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.dfm deleted file mode 100644 index 0881615..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.dfm +++ /dev/null @@ -1,105 +0,0 @@ -object MultiLevelDetailClient_MainForm: TMultiLevelDetailClient_MainForm - Left = 138 - Top = 151 - AutoScroll = False - Caption = 'Multi Level Detail Client' - ClientHeight = 380 - ClientWidth = 457 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Splitter1: TSplitter - Left = 0 - Top = 252 - Width = 457 - Height = 8 - Cursor = crVSplit - Align = alBottom - Beveled = True - end - object Splitter2: TSplitter - Left = 0 - Top = 124 - Width = 457 - Height = 8 - Cursor = crVSplit - Align = alBottom - Beveled = True - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 457 - Height = 27 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object FillButton: TButton - Left = 9 - Top = 3 - Width = 75 - Height = 22 - Caption = 'Fill' - TabOrder = 0 - OnClick = FillButtonClick - end - object UpdateButton: TButton - Left = 147 - Top = 3 - Width = 75 - Height = 22 - Caption = 'Update' - TabOrder = 1 - OnClick = UpdateButtonClick - end - end - object gOrderDetails: TDBGrid - Left = 0 - Top = 260 - Width = 457 - Height = 120 - Align = alBottom - DataSource = MultiLevelDetailClient_DataModule.ds_OrderDetails - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gProducts: TDBGrid - Left = 0 - Top = 132 - Width = 457 - Height = 120 - Align = alBottom - DataSource = MultiLevelDetailClient_DataModule.ds_Products - TabOrder = 2 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gCategories: TDBGrid - Left = 0 - Top = 27 - Width = 457 - Height = 97 - Align = alClient - DataSource = MultiLevelDetailClient_DataModule.ds_Categories - TabOrder = 3 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.pas deleted file mode 100644 index 9eeba1e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailClient_Main.pas +++ /dev/null @@ -1,49 +0,0 @@ -unit MultiLevelDetailClient_Main; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, - Grids, DBGrids; - -type - TMultiLevelDetailClient_MainForm = class(TForm) - Panel1: TPanel; - FillButton: TButton; - gOrderDetails: TDBGrid; - Splitter1: TSplitter; - gProducts: TDBGrid; - Splitter2: TSplitter; - gCategories: TDBGrid; - UpdateButton: TButton; - procedure FillButtonClick(Sender: TObject); - procedure UpdateButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - MultiLevelDetailClient_MainForm: TMultiLevelDetailClient_MainForm; - -implementation - -uses - MultiLevelDetailClient_Data; - -{$R *.dfm} - -procedure TMultiLevelDetailClient_MainForm.FillButtonClick(Sender: TObject); -begin - MultiLevelDetailClient_DataModule.tbl_Categories.Open; -end; - -procedure TMultiLevelDetailClient_MainForm.UpdateButtonClick(Sender: TObject); -begin - MultiLevelDetailClient_DataModule.tbl_Categories.ApplyUpdates; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary.RODL deleted file mode 100644 index d1e6d7a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary.RODL +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Intf.pas deleted file mode 100644 index 1a6c1d6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Intf.pas +++ /dev/null @@ -1,76 +0,0 @@ -unit MultiLevelDetailLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{C36F2B70-713D-4D12-A330-097CEF6EBDDB}'; - - { Service Interface ID's } - IMultiLevelDetailService_IID : TGUID = '{F2D11C9C-E4E6-4732-8692-0CAC26018C78}'; - - { Event ID's } - -type - { Forward declarations } - IMultiLevelDetailService = interface; - - - - - { IMultiLevelDetailService } - IMultiLevelDetailService = interface(IDataAbstractService) - ['{F2D11C9C-E4E6-4732-8692-0CAC26018C78}'] - end; - - { CoMultiLevelDetailService } - CoMultiLevelDetailService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiLevelDetailService; - end; - - { TMultiLevelDetailService_Proxy } - TMultiLevelDetailService_Proxy = class(TDataAbstractService_Proxy, IMultiLevelDetailService) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoMultiLevelDetailService } - -class function CoMultiLevelDetailService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiLevelDetailService; -begin - result := TMultiLevelDetailService_Proxy.Create(aMessage, aTransportChannel); -end; - -function TMultiLevelDetailService_Proxy.__GetInterfaceName:string; -begin - result := 'MultiLevelDetailService'; -end; - -initialization - RegisterProxyClass(IMultiLevelDetailService_IID, TMultiLevelDetailService_Proxy); - - -finalization - UnregisterProxyClass(IMultiLevelDetailService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Invk.pas deleted file mode 100644 index 111a642..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit MultiLevelDetailLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} MultiLevelDetailLibrary_Intf; - -type - TMultiLevelDetailService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.bdsproj deleted file mode 100644 index 0a3e952..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - MultiLevelDetailServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dpr deleted file mode 100644 index cd8a8ab..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dpr +++ /dev/null @@ -1,30 +0,0 @@ -program MultiLevelDetailServer; - -{#ROGEN:MultiLevelDetailLibrary.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - MultiLevelDetailServer_Main in 'MultiLevelDetailServer_Main.pas' {MultiLevelDetailServer_MainForm}, - MultiLevelDetailService_Impl in 'MultiLevelDetailService_Impl.pas' {MultiLevelDetailService: TDARemoteService}, - MultiLevelDetailServer_Data in 'MultiLevelDetailServer_Data.pas' {MultiLevelDetailServer_DataModule: TDataModule}, - MultiLevelDetailLibrary_Intf in 'MultiLevelDetailLibrary_Intf.pas', - MultiLevelDetailLibrary_Invk in 'MultiLevelDetailLibrary_Invk.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('MultiLevelDetail', 'MultiLevelDetail') then begin - ROService.CreateForm(TMultiLevelDetailServer_DataModule, MultiLevelDetailServer_DataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.Title := 'Multi Level Detail Server'; - Application.CreateForm(TMultiLevelDetailServer_DataModule, MultiLevelDetailServer_DataModule); - Application.CreateForm(TMultiLevelDetailServer_MainForm, MultiLevelDetailServer_MainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dproj deleted file mode 100644 index 0cdcabd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {b4f8c45f-3323-46d4-ba1a-8642a93d1e6e} - MultiLevelDetailServer.dpr - Debug - AnyCPU - DCC32 - MultiLevelDetailServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - MultiLevelDetailServer.dpr - - - - - - - MainSource - - - - -
MultiLevelDetailServer_DataModule
-
- -
MultiLevelDetailServer_MainForm
-
- -
MultiLevelDetailService
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.dfm deleted file mode 100644 index 549ecae..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.dfm +++ /dev/null @@ -1,64 +0,0 @@ -object MultiLevelDetailServer_DataModule: TMultiLevelDetailServer_DataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object Message: TROBinMessage - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Int' + - 'egrated Security=SSPI' - Description = 'Microsoft SQL Server 2000, localhost' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.pas deleted file mode 100644 index 8dd6a39..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Data.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit MultiLevelDetailServer_Data; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver, uROIndyTCPServer; - -type - TMultiLevelDetailServer_DataModule = class(TDataModule) - Server: TROIndyHTTPServer; - Message: TROBinMessage; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - SessionManager: TROInMemorySessionManager; - DataDictionary: TDADataDictionary; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - MultiLevelDetailServer_DataModule: TMultiLevelDetailServer_DataModule; - -implementation - -{$R *.dfm} - -procedure TMultiLevelDetailServer_DataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.dfm deleted file mode 100644 index 0e830ae..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object MultiLevelDetailServer_MainForm: TMultiLevelDetailServer_MainForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Multi Level Detail Server' - ClientHeight = 64 - ClientWidth = 277 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 34 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.pas deleted file mode 100644 index bf43bb4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailServer_Main.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit MultiLevelDetailServer_Main; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton, uROPoweredByRemObjectsButton; - -type - TMultiLevelDetailServer_MainForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - MultiLevelDetailServer_MainForm: TMultiLevelDetailServer_MainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.dfm deleted file mode 100644 index 4185ec4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.dfm +++ /dev/null @@ -1,390 +0,0 @@ -object MultiLevelDetailService: TMultiLevelDetailService - OldCreateOrder = True - SessionManager = MultiLevelDetailServer_DataModule.SessionManager - AcquireConnection = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - ExportedDataTables = <> - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = MultiLevelDetailServer_DataModule.ConnectionManager - DataDictionary = MultiLevelDetailServer_DataModule.DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Categories' - SQL = - 'SELECT '#10' CategoryID, CategoryName, Description, Picture'#10' FRO' + - 'M'#10' Categories' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CategoryID' - TableField = 'CategoryID' - end - item - DatasetField = 'CategoryName' - TableField = 'CategoryName' - end - item - DatasetField = 'Description' - TableField = 'Description' - end - item - DatasetField = 'Picture' - TableField = 'Picture' - end> - end> - Name = 'Categories' - Fields = < - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryName' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Description' - DataType = datMemo - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Picture' - DataType = datBlob - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Products' - SQL = - 'SELECT '#10' ProductID, ProductName, SupplierID, CategoryID, Quan' + - 'tityPerUnit, '#10' UnitPrice, UnitsInStock, UnitsOnOrder, Reorder' + - 'Level, '#10' Discontinued'#10'FROM'#10' Products'#10'WHERE'#10' [CategoryID' + - '] = :CategoryID'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'ProductName' - TableField = 'ProductName' - end - item - DatasetField = 'SupplierID' - TableField = 'SupplierID' - end - item - DatasetField = 'CategoryID' - TableField = 'CategoryID' - end - item - DatasetField = 'QuantityPerUnit' - TableField = 'QuantityPerUnit' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'UnitsInStock' - TableField = 'UnitsInStock' - end - item - DatasetField = 'UnitsOnOrder' - TableField = 'UnitsOnOrder' - end - item - DatasetField = 'ReorderLevel' - TableField = 'ReorderLevel' - end - item - DatasetField = 'Discontinued' - TableField = 'Discontinued' - end> - end> - Name = 'Products' - Fields = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'SupplierID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CategoryID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'QuantityPerUnit' - DataType = datWideString - Size = 20 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsInStock' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitsOnOrder' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ReorderLevel' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discontinued' - DataType = datBoolean - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Order Details' - SQL = - 'SELECT '#10' OrderID, ProductID, UnitPrice, Quantity, Discount'#10' ' + - 'FROM'#10' [Order Details]'#10'WHERE'#10' ProductID = :ProductID'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'ProductID' - TableField = 'ProductID' - end - item - DatasetField = 'UnitPrice' - TableField = 'UnitPrice' - end - item - DatasetField = 'Quantity' - TableField = 'Quantity' - end - item - DatasetField = 'Discount' - TableField = 'Discount' - end> - end> - Name = 'OrderDetails' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ProductID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'UnitPrice' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Quantity' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Discount' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = < - item - Name = 'FK_Products_Categories' - MasterDatasetName = 'Categories' - MasterFields = 'CategoryID' - DetailDatasetName = 'Products' - DetailFields = 'CategoryID' - end> - UpdateRules = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.pas deleted file mode 100644 index 43f3d54..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/MultiLevelDetailService_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit MultiLevelDetailService_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABinAdapter, uDAInterfaces, uDADataStreamer, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} MultiLevelDetailLibrary_Intf; - -type - { TMultiLevelDetailService } - TMultiLevelDetailService = class(TDataAbstractService, IMultiLevelDetailService) - DataStreamer: TDABinDataStreamer; - Schema: TDASchema; - private - protected - { IMultiLevelDetailService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} MultiLevelDetailLibrary_Invk, MultiLevelDetailServer_Data; - -procedure Create_MultiLevelDetailService(out anInstance: IUnknown); -begin - anInstance := TMultiLevelDetailService.Create(nil); -end; - -initialization - TROClassFactory.Create('MultiLevelDetailService', Create_MultiLevelDetailService, TMultiLevelDetailService_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/RODLFILE.res deleted file mode 100644 index 008a4f9..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Multi Level Detail/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.dfm deleted file mode 100644 index 1007367..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.dfm +++ /dev/null @@ -1,727 +0,0 @@ -object NewService: TNewService - OldCreateOrder = True - AcquireConnection = True - ConnectionName = 'ADO' - ServiceSchema = Schema - ServiceDataStreamer = BinAdapter - ExportedDataTables = <> - Left = 372 - Top = 283 - Height = 364 - Width = 436 - object BinAdapter: TDABinDataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = QuantumGrid4_ServerDataModule.ConnectionManager - DataDictionary = DataDictionary - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders'#10' WHERE CustomerID=:CustomerID' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'AllOrders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 32 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 33 - Top = 104 - end - object bsCustomers: TDABusinessProcessor - Schema = Schema - ReferencedDataset = 'Customers' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete] - UpdateMode = updWhereKeyOnly - Left = 64 - Top = 176 - end - object bsOrders: TDABusinessProcessor - Schema = Schema - ReferencedDataset = 'Orders' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete] - UpdateMode = updWhereKeyOnly - Left = 160 - Top = 176 - end - object bsAllOrders: TDABusinessProcessor - Schema = Schema - ReferencedDataset = 'AllOrders' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete] - UpdateMode = updWhereKeyOnly - Left = 240 - Top = 176 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.pas deleted file mode 100644 index 6ee8bac..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/NewService_Impl.pas +++ /dev/null @@ -1,84 +0,0 @@ -unit NewService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} QuantumGrid4Library_Intf, uDAScriptingProvider, uDABusinessProcessor, - uDAClasses, uDADataStreamer, uDABinAdapter; - -const - { Dataset names for Schema } - ds_Customers = 'Customers'; - ds_Orders = 'Orders'; - ds_AllOrders = 'AllOrders'; - -type - { TNewService } - TNewService = class(TDataAbstractService, INewService) - BinAdapter: TDABinDataStreamer; - bsCustomers: TDABusinessProcessor; - bsOrders: TDABusinessProcessor; - Schema: TDASchema; - DataDictionary: TDADataDictionary; - bsAllOrders: TDABusinessProcessor; - private - protected - { INewService methods } - function GetCustomers: Binary; - function UpdateCustomers(const IncomingData: Binary): Binary; - function GetOrders(const CustomerID: String): Binary; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} QuantumGrid4Library_Invk, QuantumGrid4_ServerData, uDAInterfaces; - -procedure Create_NewService(out anInstance : IUnknown); -begin - anInstance := TNewService.Create(NIL); -end; - - -{ TNewService } - - -function TNewService.GetCustomers: Binary; -begin - result := Binary.Create; - BinAdapter.Initialize(result, aiWrite); - BinAdapter.WriteDataset(Schema.NewDataset(Connection, ds_Customers), [woRows]); - BinAdapter.Finalize; -end; - -function TNewService.GetOrders(const CustomerID: String): Binary; -begin - result := Binary.Create; - BinAdapter.Initialize(result, aiWrite); - BinAdapter.WriteDataset(Schema.NewDataset(Connection, ds_Orders,['CustomerID'], [CustomerID]), [woRows]); - BinAdapter.Finalize; -end; - -function TNewService.UpdateCustomers(const IncomingData: Binary): Binary; -begin - result := UpdateData(IncomingData); -end; - -initialization - TROClassFactory.Create('NewService', Create_NewService, TNewService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.Sample.html deleted file mode 100644 index fb68fed..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.Sample.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - -

- QuantumGrid4 -

- - -

Purpose

- -

- This example demonstrates how to use the QuantumGrid4 (or QuantumGrid5) - product from Developer Express (contact www.devexpress.com. for - licensing - information if you do not already have the product). -

-

-   -

-

- Things to look at in QuantumGrid4_server.exe -

-

- The most important methods in the host application are in the NewService_Impl - unit: -

-
    -
  • - GetCustomers retrieves all the records from that dataset. -
  • -
  • - GetOrders only retrieves Orders for the current Customer. - Note the parameters passed to it. -
  • -
-

- Things to look at in QuantumGrid4_client.exe -

-

- There's only two lines of code in QuantumGrid4_ClientMain, one for each button. -

-

- Have a look at QuantumGrid4_ClientData though. This contains code that - saves references to customers previously accessed, thus avoiding re-fetching details. -

-

-   -

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bdsgroup deleted file mode 100644 index 23846d8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - QuantumGrid4_Client.bdsproj - QuantumGrid4_server.bdsproj - QuantumGrid4_Client.exe QuantumGrid4_server.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bpg deleted file mode 100644 index b2cc016..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = QuantumGrid4_Client.exe QuantumGrid4_server.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -QuantumGrid4_Client.exe: QuantumGrid4_Client.dpr - $(DCC) - -QuantumGrid4_server.exe: QuantumGrid4_server.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.groupproj deleted file mode 100644 index abbfa8b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {91a9ff88-032e-4329-a4e4-75d3d762f4d9} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library.rodl deleted file mode 100644 index be38352..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library.rodl +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Intf.pas deleted file mode 100644 index 1f01454..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Intf.pas +++ /dev/null @@ -1,131 +0,0 @@ -unit QuantumGrid4Library_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{7EF63C27-FB17-4F10-985E-92BAF0E3E619}'; - - { Service Interface ID's } - INewService_IID : TGUID = '{E4E6FDE4-2542-4554-B59A-438E23439111}'; - - { Event ID's } - -type - { Forward declarations } - INewService = interface; - - - - - { INewService } - INewService = interface(IDataAbstractService) - ['{E4E6FDE4-2542-4554-B59A-438E23439111}'] - function GetCustomers: Binary; - function UpdateCustomers(const IncomingData: Binary): Binary; - function GetOrders(const CustomerID: String): Binary; - end; - - { CoNewService } - CoNewService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; - end; - - { TNewService_Proxy } - TNewService_Proxy = class(TDataAbstractService_Proxy, INewService) - protected - function __GetInterfaceName:string; override; - - function GetCustomers: Binary; - function UpdateCustomers(const IncomingData: Binary): Binary; - function GetOrders(const CustomerID: String): Binary; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoNewService } - -class function CoNewService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): INewService; -begin - result := TNewService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TNewService_Proxy } - -function TNewService_Proxy.__GetInterfaceName:string; -begin - result := 'NewService'; -end; - -function TNewService_Proxy.GetCustomers: Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'QuantumGrid4Library', __InterfaceName, 'GetCustomers'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TNewService_Proxy.UpdateCustomers(const IncomingData: Binary): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'QuantumGrid4Library', __InterfaceName, 'UpdateCustomers'); - __Message.Write('IncomingData', TypeInfo(Binary), IncomingData, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TNewService_Proxy.GetOrders(const CustomerID: String): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'QuantumGrid4Library', __InterfaceName, 'GetOrders'); - __Message.Write('CustomerID', TypeInfo(String), CustomerID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(INewService_IID, TNewService_Proxy); - - -finalization - UnregisterProxyClass(INewService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Invk.pas deleted file mode 100644 index 23590ae..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4Library_Invk.pas +++ /dev/null @@ -1,117 +0,0 @@ -unit QuantumGrid4Library_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} QuantumGrid4Library_Intf; - -type - TNewService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_GetCustomers(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UpdateCustomers(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TNewService_Invoker } - -procedure TNewService_Invoker.Invoke_GetCustomers(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetCustomers: Binary; } -var - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - lResult := (__Instance as INewService).GetCustomers; - - __Message.InitializeResponseMessage(__Transport, 'QuantumGrid4Library', 'NewService', 'GetCustomersResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TNewService_Invoker.Invoke_UpdateCustomers(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function UpdateCustomers(const IncomingData: Binary): Binary; } -var - IncomingData: Binary; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - IncomingData := nil; - lResult := nil; - try - __Message.Read('IncomingData', TypeInfo(Binary), IncomingData, []); - - lResult := (__Instance as INewService).UpdateCustomers(IncomingData); - - __Message.InitializeResponseMessage(__Transport, 'QuantumGrid4Library', 'NewService', 'UpdateCustomersResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(IncomingData); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TNewService_Invoker.Invoke_GetOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetOrders(const CustomerID: String): Binary; } -var - CustomerID: String; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('CustomerID', TypeInfo(String), CustomerID, []); - - lResult := (__Instance as INewService).GetOrders(CustomerID); - - __Message.InitializeResponseMessage(__Transport, 'QuantumGrid4Library', 'NewService', 'GetOrdersResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.bdsproj deleted file mode 100644 index 9f1d6d4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - QuantumGrid4_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dpr deleted file mode 100644 index e5424b7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program QuantumGrid4_Client; - -uses - uROComInit, - Forms, - QuantumGrid4_ClientMain in 'QuantumGrid4_ClientMain.pas' {QuantumGrid4_ClientMainForm}, - QuantumGrid4_ClientData in 'QuantumGrid4_ClientData.pas' {QuantumGrid4_ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'QuantumGrid4 Client'; - Application.CreateForm(TQuantumGrid4_ClientDataModule, QuantumGrid4_ClientDataModule); - Application.CreateForm(TQuantumGrid4_ClientMainForm, QuantumGrid4_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dproj deleted file mode 100644 index d7eddb5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.dproj +++ /dev/null @@ -1,75 +0,0 @@ - - - {186a7cf2-9814-47d5-8eba-10b5c4756fee} - QuantumGrid4_Client.dpr - Debug - AnyCPU - DCC32 - QuantumGrid4_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - QuantumGrid4_Client.dpr - - - - - - - MainSource - - -
QuantumGrid4_ClientDataModule
-
- -
QuantumGrid4_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.dfm deleted file mode 100644 index 74ea4b8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.dfm +++ /dev/null @@ -1,490 +0,0 @@ -object QuantumGrid4_ClientDataModule: TQuantumGrid4_ClientDataModule - OldCreateOrder = True - Left = 281 - Top = 207 - Height = 300 - Width = 437 - object ROChannel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 40 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 40 - Top = 52 - end - object RORemoteService: TRORemoteService - ServiceName = 'NewService' - Message = ROMessage - Channel = ROChannel - Left = 40 - Top = 96 - end - object bdsCustomers: TDABinDataStreamer - Left = 306 - Top = 49 - end - object dtCustomers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = rdaCustomers - AfterOpen = dtCustomersAfterOpen - AfterScroll = dtCustomersAfterScroll - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 192 - Top = 32 - end - object dsCustomers: TDADataSource - DataTable = dtCustomers - Left = 208 - Top = 48 - end - object dtOrders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomerID' - DataType = datString - BlobType = dabtUnknown - ParamType = daptInput - end> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - RemoteDataAdapter = rdaorders - ReadOnly = False - MasterSource = dsCustomers - MasterRequestMappings.Strings = ( - 'CustomerID=CustomerID') - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Orders' - IndexDefs = <> - Left = 192 - Top = 120 - end - object dsOrders: TDADataSource - DataTable = dtOrders - Left = 208 - Top = 136 - end - object rdaCustomers: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RORemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RORemoteService - GetDataCall.MethodName = 'GetCustomers' - GetDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end> - GetDataCall.Default = False - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RORemoteService - UpdateDataCall.MethodName = 'UpdateCustomers' - UpdateDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'IncomingData' - DataType = rtBinary - Flag = fIn - Value = Null - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'IncomingData' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RORemoteService - RemoteService = RORemoteService - DataStreamer = bdsCustomers - Left = 278 - Top = 48 - end - object rdaorders: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RORemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RORemoteService - GetDataCall.MethodName = 'GetOrders' - GetDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'CustomerID' - DataType = rtString - Flag = fIn - Value = Null - end> - GetDataCall.Default = False - GetDataCall.IncomingDataParameter = 'Result' - GetDataCall.OutgoingParamsParameter = 'CustomerID' - UpdateDataCall.RemoteService = RORemoteService - UpdateDataCall.MethodName = 'UpdateCustomers' - UpdateDataCall.Params = < - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - Value = Null - end - item - Name = 'IncomingData' - DataType = rtBinary - Flag = fIn - Value = Null - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'IncomingData' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RORemoteService - RemoteService = RORemoteService - DataStreamer = bdsOrders - Left = 277 - Top = 141 - end - object bdsOrders: TDABinDataStreamer - Left = 306 - Top = 141 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.pas deleted file mode 100644 index 971eb1e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientData.pas +++ /dev/null @@ -1,84 +0,0 @@ -unit QuantumGrid4_ClientData; - -interface - -uses {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, - uDACDSDataTable, uDAADODataTable, uDAScriptingProvider, - uDARemoteDataAdapter, uDADataStreamer; - -type - TQuantumGrid4_ClientDataModule = class(TDataModule) - ROMessage: TROBinMessage; - ROChannel: TROWinInetHTTPChannel; - RORemoteService: TRORemoteService; - bdsCustomers: TDABinDataStreamer; - dtCustomers: TDACDSDataTable; - dsCustomers: TDADataSource; - dtOrders: TDACDSDataTable; - dsOrders: TDADataSource; - rdaCustomers: TDARemoteDataAdapter; - rdaorders: TDARemoteDataAdapter; - bdsOrders: TDABinDataStreamer; - procedure dtCustomersAfterScroll(DataTable: TDADataTable); - procedure dtCustomersAfterOpen(DataTable: TDADataTable); - private - fFetchedCustomers : TStringList; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - end; - -var - QuantumGrid4_ClientDataModule: TQuantumGrid4_ClientDataModule; - -implementation - -uses uDAInterfaces; - -{$R *.dfm} - -{ TClientDataModule } -constructor TQuantumGrid4_ClientDataModule.Create(aOwner: TComponent); -begin - inherited; - - fFetchedCustomers := TStringList.Create; - fFetchedCustomers.Sorted := TRUE; -end; - -destructor TQuantumGrid4_ClientDataModule.Destroy; -begin - fFetchedCustomers.Free; - inherited; -end; - -procedure TQuantumGrid4_ClientDataModule.dtCustomersAfterScroll( - DataTable: TDADataTable); -var lCustomerID : string; -begin - if dtCustomers.Fetching then Exit; - - with dtOrders do begin - lCustomerID := dtCustomers.FieldByName('CustomerID').AsString; - - if (fFetchedCustomers.IndexOf(lCustomerID)>=0) - then Exit - else fFetchedCustomers.Add(lCustomerID); - - rdaorders.GetDataCall.ParamByName('CustomerID').AsString := lCustomerID; - LoadFromRemoteSource; - end; -end; - -procedure TQuantumGrid4_ClientDataModule.dtCustomersAfterOpen(DataTable: TDADataTable); -begin - fFetchedCustomers.Clear; - dtCustomersAfterScroll(DataTable); -end; - -initialization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.dfm deleted file mode 100644 index 7bb91bd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.dfm +++ /dev/null @@ -1,190 +0,0 @@ -object QuantumGrid4_ClientMainForm: TQuantumGrid4_ClientMainForm - Left = 125 - Top = 83 - AutoScroll = False - BorderWidth = 5 - Caption = 'QuantumGrid 4 Client' - ClientHeight = 447 - ClientWidth = 506 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object PageControl: TPageControl - Left = 0 - Top = 33 - Width = 506 - Height = 414 - ActivePage = TabSheet2 - Align = alClient - TabIndex = 0 - TabOrder = 0 - object TabSheet2: TTabSheet - Caption = 'Quantum Grid 4 - OnDemand' - ImageIndex = 1 - object cxGrid1: TcxGrid - Left = 0 - Top = 0 - Width = 498 - Height = 261 - Align = alClient - TabOrder = 0 - LookAndFeel.Kind = lfFlat - object viewCustomers: TcxGridDBTableView - NavigatorButtons.ConfirmDelete = False - DataController.DataSource = QuantumGrid4_ClientDataModule.dsCustomers - DataController.Summary.DefaultGroupSummaryItems = <> - DataController.Summary.FooterSummaryItems = <> - DataController.Summary.SummaryGroups = <> - object viewCustomersCustomerID: TcxGridDBColumn - DataBinding.FieldName = 'CustomerID' - end - object viewCustomersCompanyName: TcxGridDBColumn - DataBinding.FieldName = 'CompanyName' - end - object viewCustomersContactName: TcxGridDBColumn - DataBinding.FieldName = 'ContactName' - end - object viewCustomersContactTitle: TcxGridDBColumn - DataBinding.FieldName = 'ContactTitle' - end - object viewCustomersAddress: TcxGridDBColumn - DataBinding.FieldName = 'Address' - end - object viewCustomersCity: TcxGridDBColumn - DataBinding.FieldName = 'City' - end - object viewCustomersRegion: TcxGridDBColumn - DataBinding.FieldName = 'Region' - end - object viewCustomersPostalCode: TcxGridDBColumn - DataBinding.FieldName = 'PostalCode' - end - object viewCustomersCountry: TcxGridDBColumn - DataBinding.FieldName = 'Country' - end - object viewCustomersPhone: TcxGridDBColumn - DataBinding.FieldName = 'Phone' - end - object viewCustomersFax: TcxGridDBColumn - DataBinding.FieldName = 'Fax' - end - end - object viewOrders: TcxGridDBTableView - NavigatorButtons.ConfirmDelete = False - DataController.DataSource = QuantumGrid4_ClientDataModule.dsOrders - DataController.DetailKeyFieldNames = 'CustomerID' - DataController.KeyFieldNames = 'OrderID' - DataController.MasterKeyFieldNames = 'CustomerID' - DataController.Summary.DefaultGroupSummaryItems = <> - DataController.Summary.FooterSummaryItems = <> - DataController.Summary.SummaryGroups = <> - object viewOrdersOrderID: TcxGridDBColumn - DataBinding.FieldName = 'OrderID' - end - object viewOrdersCustomerID: TcxGridDBColumn - DataBinding.FieldName = 'CustomerID' - end - object viewOrdersEmployeeID: TcxGridDBColumn - DataBinding.FieldName = 'EmployeeID' - end - object viewOrdersOrderDate: TcxGridDBColumn - DataBinding.FieldName = 'OrderDate' - end - object viewOrdersRequiredDate: TcxGridDBColumn - DataBinding.FieldName = 'RequiredDate' - end - object viewOrdersShippedDate: TcxGridDBColumn - DataBinding.FieldName = 'ShippedDate' - end - object viewOrdersShipVia: TcxGridDBColumn - DataBinding.FieldName = 'ShipVia' - end - object viewOrdersFreight: TcxGridDBColumn - DataBinding.FieldName = 'Freight' - end - object viewOrdersShipName: TcxGridDBColumn - DataBinding.FieldName = 'ShipName' - end - object viewOrdersShipAddress: TcxGridDBColumn - DataBinding.FieldName = 'ShipAddress' - end - object viewOrdersShipCity: TcxGridDBColumn - DataBinding.FieldName = 'ShipCity' - end - object viewOrdersShipRegion: TcxGridDBColumn - DataBinding.FieldName = 'ShipRegion' - end - object viewOrdersShipPostalCode: TcxGridDBColumn - DataBinding.FieldName = 'ShipPostalCode' - end - object viewOrdersShipCountry: TcxGridDBColumn - DataBinding.FieldName = 'ShipCountry' - end - end - object cxGrid1Level1: TcxGridLevel - GridView = viewCustomers - object cxGrid1Level2: TcxGridLevel - GridView = viewOrders - end - end - end - object DBGrid3: TDBGrid - Left = 0 - Top = 266 - Width = 498 - Height = 120 - Align = alBottom - DataSource = QuantumGrid4_ClientDataModule.dsOrders - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel2: TPanel - Left = 0 - Top = 261 - Width = 498 - Height = 5 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - end - end - end - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 506 - Height = 33 - Align = alTop - BevelOuter = bvNone - TabOrder = 1 - object Button1: TButton - Left = 80 - Top = 0 - Width = 97 - Height = 25 - Caption = 'Apply Updates' - TabOrder = 0 - OnClick = Button1Click - end - object Button2: TButton - Left = 0 - Top = 0 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 1 - OnClick = Button2Click - end - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.pas deleted file mode 100644 index 13e8065..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ClientMain.pas +++ /dev/null @@ -1,81 +0,0 @@ -unit QuantumGrid4_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROIndyHTTPChannel, - Grids, DBGrids, ComCtrls, cxStyles, cxCustomData, cxGraphics, cxFilter, - cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, - cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, - cxGridDBTableView, cxGrid, ExtCtrls, DBClient; - -type - TQuantumGrid4_ClientMainForm = class(TForm) - PageControl: TPageControl; - TabSheet2: TTabSheet; - viewCustomers: TcxGridDBTableView; - cxGrid1Level1: TcxGridLevel; - cxGrid1: TcxGrid; - viewOrders: TcxGridDBTableView; - viewCustomersCustomerID: TcxGridDBColumn; - viewCustomersCompanyName: TcxGridDBColumn; - viewCustomersContactName: TcxGridDBColumn; - viewCustomersContactTitle: TcxGridDBColumn; - viewCustomersAddress: TcxGridDBColumn; - viewCustomersCity: TcxGridDBColumn; - viewCustomersRegion: TcxGridDBColumn; - viewCustomersPostalCode: TcxGridDBColumn; - viewCustomersCountry: TcxGridDBColumn; - viewCustomersPhone: TcxGridDBColumn; - viewCustomersFax: TcxGridDBColumn; - Panel1: TPanel; - Button1: TButton; - Button2: TButton; - viewOrdersOrderID: TcxGridDBColumn; - viewOrdersCustomerID: TcxGridDBColumn; - viewOrdersEmployeeID: TcxGridDBColumn; - viewOrdersOrderDate: TcxGridDBColumn; - viewOrdersRequiredDate: TcxGridDBColumn; - viewOrdersShippedDate: TcxGridDBColumn; - viewOrdersShipVia: TcxGridDBColumn; - viewOrdersFreight: TcxGridDBColumn; - viewOrdersShipName: TcxGridDBColumn; - viewOrdersShipAddress: TcxGridDBColumn; - viewOrdersShipCity: TcxGridDBColumn; - viewOrdersShipRegion: TcxGridDBColumn; - viewOrdersShipPostalCode: TcxGridDBColumn; - viewOrdersShipCountry: TcxGridDBColumn; - cxGrid1Level2: TcxGridLevel; - DBGrid3: TDBGrid; - Panel2: TPanel; - procedure Button2Click(Sender: TObject); - procedure Button1Click(Sender: TObject); - private - fLastMaster: Variant; - public - - end; - -var - QuantumGrid4_ClientMainForm: TQuantumGrid4_ClientMainForm; - -implementation - -uses QuantumGrid4_ClientData, uDAInterfaces, uDADataTable; - -{$R *.dfm} - -procedure TQuantumGrid4_ClientMainForm.Button2Click(Sender: TObject); -begin - with QuantumGrid4_ClientDataModule.dtCustomers do - Active := Active xor TRUE; -end; - -procedure TQuantumGrid4_ClientMainForm.Button1Click(Sender: TObject); -begin - QuantumGrid4_ClientDataModule.dtCustomers.ApplyUpdates(TRUE); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.dfm deleted file mode 100644 index 03c5056..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.dfm +++ /dev/null @@ -1,55 +0,0 @@ -object QuantumGrid4_ServerDataModule: TQuantumGrid4_ServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 73 - Top = 69 - Height = 207 - Width = 352 - object ROServer: TROIndyHTTPServer - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 32 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.pas deleted file mode 100644 index f624b32..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerData.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit QuantumGrid4_ServerData; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, - uDADriverManager, uDAClasses, uDADBXDriver, uDAIBXDriver, uDAEngine, uDAADODriver, - uROIndyTCPServer; - -type - TQuantumGrid4_ServerDataModule = class(TDataModule) - ROServer: TROIndyHTTPServer; - ROMessage: TROBinMessage; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - ConnectionManager: TDAConnectionManager; - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - QuantumGrid4_ServerDataModule: TQuantumGrid4_ServerDataModule; - -implementation - -{$R *.dfm} - -procedure TQuantumGrid4_ServerDataModule.DataModuleCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.dfm deleted file mode 100644 index cfaa725..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object QuantumGrid4_ServerMainForm: TQuantumGrid4_ServerMainForm - Left = 66 - Top = 76 - BorderStyle = bsDialog - Caption = 'QuantumGrid 4 Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object RoPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.pas deleted file mode 100644 index a70c5a0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_ServerMain.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit QuantumGrid4_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer; - -type - TQuantumGrid4_ServerMainForm = class(TForm) - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - QuantumGrid4_ServerMainForm: TQuantumGrid4_ServerMainForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.bdsproj deleted file mode 100644 index 862243b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - QuantumGrid4_server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dpr deleted file mode 100644 index de173a0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dpr +++ /dev/null @@ -1,23 +0,0 @@ -program QuantumGrid4_server; - -{#ROGEN:QuantumGrid4Library.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Forms, - QuantumGrid4_ServerMain in 'QuantumGrid4_ServerMain.pas' {QuantumGrid4_ServerMainForm}, - NewService_Impl in 'NewService_Impl.pas' {NewService: TDARemoteService}, - QuantumGrid4_ServerData in 'QuantumGrid4_ServerData.pas' {QuantumGrid4_ServerDataModule: TDataModule}, - QuantumGrid4Library_Intf in 'QuantumGrid4Library_Intf.pas', - QuantumGrid4Library_Invk in 'QuantumGrid4Library_Invk.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'QuantumGrid4 Server'; - Application.CreateForm(TQuantumGrid4_ServerDataModule, QuantumGrid4_ServerDataModule); - Application.CreateForm(TQuantumGrid4_ServerMainForm, QuantumGrid4_ServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dproj deleted file mode 100644 index 11b11c4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {540b874b-c44a-4832-b75a-f3873582e77c} - QuantumGrid4_server.dpr - Debug - AnyCPU - DCC32 - QuantumGrid4_server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - QuantumGrid4_server.dpr - - - - - - - MainSource - - -
NewService
-
- - - -
QuantumGrid4_ServerDataModule
-
- -
QuantumGrid4_ServerMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/QuantumGrid4_server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/RODLFILE.res deleted file mode 100644 index 66470ea..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/QuantumGrid 4/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.Sample.html deleted file mode 100644 index 8b2f535..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.Sample.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -

- QuickOpen -

- - -

Purpose

- -

- This example shows how to receive data from a local database. -

- -

Examine the Code

-
    -
  • - See the simple code in QuickOpenMain.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.bdsproj deleted file mode 100644 index 143c7d8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - QuickOpen.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dpr deleted file mode 100644 index 02aced4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program QuickOpen; - -uses - Forms, - QuickOpenMain in 'QuickOpenMain.pas' {QuickOpenMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'QuickOpen'; - Application.CreateForm(TQuickOpenMainForm, QuickOpenMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dproj deleted file mode 100644 index a6ad6ef..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {b3f06429-5ddc-4ac4-8f56-ce4275c9a145} - QuickOpen.dpr - Debug - AnyCPU - DCC32 - QuickOpen.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - QuickOpen.dpr - - - - - - - MainSource - - -
QuickOpenMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpen.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.dfm deleted file mode 100644 index 6aabf85..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.dfm +++ /dev/null @@ -1,296 +0,0 @@ -object QuickOpenMainForm: TQuickOpenMainForm - Left = 116 - Top = 122 - AutoScroll = False - Caption = 'Quick Open' - ClientHeight = 311 - ClientWidth = 539 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object OpenButton: TButton - Left = 8 - Top = 8 - Width = 75 - Height = 25 - Caption = 'Open' - TabOrder = 0 - OnClick = OpenButtonClick - end - object DBGrid1: TDBGrid - Left = 8 - Top = 40 - Width = 523 - Height = 269 - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = dsCustomers - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object DADriverManager1: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 12 - Top = 11 - end - object DASchema1: TDASchema - ConnectionManager = DAConnectionManager1 - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 45 - Top = 11 - end - object DAConnectionManager1: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;Database=Northwind;UserID=sa;AuxDriver=SQLO' + - 'LEDB.1;password=' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager1 - PoolingEnabled = True - Left = 76 - Top = 11 - end - object DAADODriver1: TDAADODriver - Left = 109 - Top = 11 - end - object DataTable: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - LocalSchema = DASchema1 - LocalDataStreamer = DABINAdapter - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 140 - Top = 11 - end - object dsCustomers: TDADataSource - DataSet = DataTable.Dataset - DataTable = DataTable - Left = 156 - Top = 27 - end - object DABINAdapter: TDABinDataStreamer - Left = 192 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.pas deleted file mode 100644 index 5a4bba5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Quick Open/QuickOpenMain.pas +++ /dev/null @@ -1,41 +0,0 @@ -unit QuickOpenMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, DB, uDADataTable, uDACDSDataTable, uDAEngine, uDAADODriver, - uDAClasses, uDADriverManager, uDABINAdapter, Grids, DBGrids, StdCtrls, - uDAScriptingProvider, uDADataStreamer; - -type - TQuickOpenMainForm = class(TForm) - DADriverManager1: TDADriverManager; - DAADODriver1: TDAADODriver; - DataTable: TDACDSDataTable; - dsCustomers: TDADataSource; - DAConnectionManager1: TDAConnectionManager; - OpenButton: TButton; - DBGrid1: TDBGrid; - DABINAdapter: TDABinDataStreamer; - DASchema1: TDASchema; - procedure OpenButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - QuickOpenMainForm: TQuickOpenMainForm; - -implementation - -{$R *.dfm} - -procedure TQuickOpenMainForm.OpenButtonClick(Sender: TObject); -begin - DataTable.Open; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.Sample.html deleted file mode 100644 index 410cdc8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.Sample.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -

- Regular Expressions -

- - -

Purpose

- -

- This sample illustrates the support provided for regular expressions.
-

- -

Examine the Code

-
    -
  • - Examine the simple code in RegularExpressionsMain.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.bdsproj deleted file mode 100644 index f07c865..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - RegularExpressions.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dpr deleted file mode 100644 index e39f53c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program RegularExpressions; - -uses - Forms, - RegularExpressionsMain in 'RegularExpressionsMain.pas' {RegularExpressionsMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'Regular Expressions'; - Application.CreateForm(TRegularExpressionsMainForm, RegularExpressionsMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dproj deleted file mode 100644 index 3a4a572..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {bb6ba93f-d097-423b-8543-9afc638ec2c4} - RegularExpressions.dpr - Debug - AnyCPU - DCC32 - RegularExpressions.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - RegularExpressions.dpr - - - - - - - MainSource - - -
RegularExpressionsMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressions.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.dfm deleted file mode 100644 index 14e1f76..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.dfm +++ /dev/null @@ -1,267 +0,0 @@ -object RegularExpressionsMainForm: TRegularExpressionsMainForm - Left = 15 - Top = 41 - AutoScroll = False - BorderWidth = 5 - Caption = 'Regular Expression' - ClientHeight = 240 - ClientWidth = 740 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label4: TLabel - Left = 355 - Top = 5 - Width = 242 - Height = 19 - Caption = 'Press a cell of a grid to fill the text' - Font.Charset = DEFAULT_CHARSET - Font.Color = clNavy - Font.Height = -16 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - end - object GroupBox1: TGroupBox - Left = 0 - Top = 0 - Width = 352 - Height = 129 - Caption = 'Test Expression' - TabOrder = 0 - object lbResult: TLabel - Left = 150 - Top = 102 - Width = 183 - Height = 13 - Caption = 'Click the button to verify your input...' - end - object Label1: TLabel - Left = 16 - Top = 20 - Width = 48 - Height = 13 - Caption = 'Template:' - end - object Label2: TLabel - Left = 9 - Top = 44 - Width = 56 - Height = 13 - Caption = 'Expression:' - end - object Label3: TLabel - Left = 39 - Top = 68 - Width = 26 - Height = 13 - Caption = 'Text:' - end - object cbExpression: TComboBox - Left = 68 - Top = 16 - Width = 273 - Height = 21 - Style = csDropDownList - ItemHeight = 13 - TabOrder = 0 - OnChange = cbExpressionChange - end - object eText: TEdit - Left = 68 - Top = 64 - Width = 273 - Height = 21 - TabOrder = 2 - end - object bCheck: TButton - Left = 68 - Top = 96 - Width = 75 - Height = 25 - Caption = '&Check' - Default = True - TabOrder = 3 - OnClick = bCheckClick - end - object eExpression: TEdit - Left = 68 - Top = 40 - Width = 273 - Height = 21 - TabOrder = 1 - end - end - object DBGrid1: TDBGrid - Left = 0 - Top = 136 - Width = 740 - Height = 104 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = DADataSource - ReadOnly = True - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'Tahoma' - TitleFont.Style = [] - OnCellClick = DBGrid1CellClick - Columns = < - item - Expanded = False - FieldName = 'USPhoneNumber' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'Email' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'RealNumber' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'RomanNumber' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'URL' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'ZipCode' - Width = 100 - Visible = True - end - item - Expanded = False - FieldName = 'Path' - Width = 100 - Visible = True - end> - end - object DACDSDataTable: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'USPhoneNumber' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Email' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RealNumber' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RomanNumber' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'URL' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ZipCode' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Path' - DataType = datString - Size = 100 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 411 - Top = 57 - end - object DADataSource: TDADataSource - DataSet = DACDSDataTable.Dataset - DataTable = DACDSDataTable - Left = 427 - Top = 73 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.pas deleted file mode 100644 index 243d144..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Regular Expressions/RegularExpressionsMain.pas +++ /dev/null @@ -1,148 +0,0 @@ -unit RegularExpressionsMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, DB, uDADataTable, uDACDSDataTable, ExtCtrls, DBCtrls, - Grids, DBGrids, uDAScriptingProvider; - -type - TRegExpressionTemplate = record - Description, - RegExpression: string; - end; - -const - RegExpressionTemplates: array[0..6] of TRegExpressionTemplate = ( - (Description: 'US Phone Number'; RegExpression: '^\d{3}-(\d{2}-\d{2}|\d{4})'), - (Description: 'Email'; RegExpression: '[_a-zA-Z\d\-\.]+@([_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+)'), - (Description: 'Real Number'; RegExpression: '^[+\-]?\d+(\.\d+)?([eE][+\-]?\d+)?$'), - (Description: 'Roman Number'; RegExpression: '^(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$'), - (Description: 'URL'; RegExpression: '(?i)(FTP|HTTP)://([_a-z\d\-]+(\.[_a-z\d\-]+)+)((/[ _a-z\d\-\\\.]+)+)*'), - (Description: 'ZipCode'; RegExpression: '^\d{5}$'), - (Description: 'Path'; RegExpression: '[A-Za-z]:(\\[a-zA-Z0-9_]+)+')); - -type - TRegularExpressionsMainForm = class(TForm) - GroupBox1: TGroupBox; - cbExpression: TComboBox; - eText: TEdit; - bCheck: TButton; - lbResult: TLabel; - eExpression: TEdit; - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - DACDSDataTable: TDACDSDataTable; - DADataSource: TDADataSource; - DBGrid1: TDBGrid; - Label4: TLabel; - procedure bCheckClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure cbExpressionChange(Sender: TObject); - procedure DBGrid1CellClick(Column: TColumn); - private - { Private declarations } - procedure SetupTable; - public - { Public declarations } - end; - -var - RegularExpressionsMainForm: TRegularExpressionsMainForm; - -implementation - -uses uDARegExpr; - -{$R *.dfm} - -procedure TRegularExpressionsMainForm.bCheckClick(Sender: TObject); -begin - if ExecRegExpr(eExpression.Text, eText.Text) then begin - lbResult.Caption := 'The text is valid!' - end - else begin - Beep; - lbResult.Caption := 'The text is INVALID!' - end; -end; - -procedure TRegularExpressionsMainForm.FormCreate(Sender: TObject); -var - i: integer; -begin - for i := 0 to High(RegExpressionTemplates) do - cbExpression.Items.Add(RegExpressionTemplates[i].Description); - cbExpression.ItemIndex := 0; - cbExpressionChange(nil); - SetupTable; -end; - -procedure TRegularExpressionsMainForm.cbExpressionChange(Sender: TObject); -begin - eExpression.Text := RegExpressionTemplates[cbExpression.ItemIndex].RegExpression -end; - -procedure TRegularExpressionsMainForm.DBGrid1CellClick(Column: TColumn); -begin - if (Column.Index >= 0) and (Column.Index < cbExpression.Items.Count) then begin - cbExpression.ItemIndex := Column.Index; - cbExpressionChange(cbExpression); - end; - eText.Text := DACDSDataTable.Fields[Column.Index].AsString; -end; - -procedure TRegularExpressionsMainForm.SetupTable; -begin - with DACDSDataTable do begin - Open; - First; - // valid record - Insert; - FieldByName('USPhoneNumber').AsString := '123-45-67'; - FieldByName('Email').AsString := 'test@test.com'; - FieldByName('RealNumber').AsString := '-12e+10'; - FieldByName('RomanNumber').AsString := 'MCXX'; - FieldByName('URL').AsString := 'http://www.site.com'; - FieldByName('ZipCode').AsString := '12345'; - FieldByName('path').AsString := 'c:\file.exe'; - post; - // invalid - Insert; - FieldByName('USPhoneNumber').AsString := '12-145-67'; - FieldByName('Email').AsString := 'test@testcom'; - FieldByName('RealNumber').AsString := '-12e'; - FieldByName('RomanNumber').AsString := 'MCXX1'; - FieldByName('URL').AsString := 'http:/www.site.com'; - FieldByName('ZipCode').AsString := '23 45'; - FieldByName('path').AsString := '\file.exe'; - post; - // mixed - Insert; - FieldByName('USPhoneNumber').AsString := '101-15-6917'; - FieldByName('Email').AsString := 'test@test.test.com'; - FieldByName('RealNumber').AsString := '-12'; - FieldByName('RomanNumber').AsString := 'IXM'; - FieldByName('URL').AsString := 'www.site.com'; - FieldByName('ZipCode').AsString := '0192'; - FieldByName('path').AsString := 'z:\folder\'; - post; - - // mixed - Insert; - FieldByName('USPhoneNumber').AsString := '101.15.6917'; - FieldByName('Email').AsString := 'test#test.com'; - FieldByName('RealNumber').AsString := '+1212'; - FieldByName('RomanNumber').AsString := 'MCIX'; - FieldByName('URL').AsString := 'http://www.site.com/files/program.zip'; - FieldByName('ZipCode').AsString := '192911'; - FieldByName('path').AsString := 'z:\folder\subfolder\program.exe'; - post; - - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ClientArchive.raf b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ClientArchive.raf deleted file mode 100644 index 8cf3638..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ClientArchive.raf and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.dfm deleted file mode 100644 index 4475c80..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.dfm +++ /dev/null @@ -1,460 +0,0 @@ -object DARBService: TDARBService - OldCreateOrder = True - OnActivate = DataAbstractServiceActivate - OnDeactivate = DataAbstractServiceDeactivate - AcquireConnection = True - ServiceSchema = DASchema - ServiceDataStreamer = BinDataStreamer - ExportedDataTables = <> - Left = 345 - Top = 207 - Height = 300 - Width = 300 - object DASchema: TDASchema - ConnectionManager = ReportBuilder_ServerMainForm.DAConnectionManager1 - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#13#10' CustomerID, CompanyName, ContactName, ContactTitle,' + - ' '#13#10' Address, City, Region, PostalCode, Country, Phone, '#13#10' ' + - 'Fax'#13#10' FROM'#13#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = < - item - Params = < - item - Name = 'CustomerID' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CompanyName' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactName' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactTitle' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Address' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'City' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Region' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'PostalCode' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Country' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Phone' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Fax' - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'INSERT'#13#10' INTO Customers'#13#10' (CustomerID, CompanyName, ContactN' + - 'ame, ContactTitle, Address, City, Region, PostalCode, Country, P' + - 'hone, Fax)'#13#10' VALUES'#13#10' (:CustomerID, :CompanyName, :ContactNa' + - 'me, :ContactTitle, :Address, :City, :Region, :PostalCode, :Count' + - 'ry, :Phone, :Fax)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Insert_Customers' - end - item - Params = < - item - Name = 'OLD_CustomerID' - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'DELETE '#13#10' FROM'#13#10' Customers'#13#10' WHERE'#13#10' (CustomerID = :OLD_' + - 'CustomerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Delete_Customers' - end - item - Params = < - item - Name = 'CustomerID' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CompanyName' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactName' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'ContactTitle' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Address' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'City' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Region' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'PostalCode' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Country' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Phone' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'Fax' - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'OLD_CustomerID' - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'UPDATE Customers'#13#10' SET '#13#10' CustomerID = :CustomerID, '#13#10' Co' + - 'mpanyName = :CompanyName, '#13#10' ContactName = :ContactName, '#13#10' ' + - ' ContactTitle = :ContactTitle, '#13#10' Address = :Address, '#13#10' ' + - 'City = :City, '#13#10' Region = :Region, '#13#10' PostalCode = :Postal' + - 'Code, '#13#10' Country = :Country, '#13#10' Phone = :Phone, '#13#10' Fax ' + - '= :Fax'#13#10' WHERE'#13#10' (CustomerID = :OLD_CustomerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Update_Customers' - end> - RelationShips = <> - UpdateRules = <> - Left = 24 - Top = 6 - end - object ppReport: TppDBPipeline - DataSource = dsReport - UserName = 'Pipeline' - Left = 68 - Top = 117 - end - object dtReport: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = <> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - IndexDefs = <> - Left = 22 - Top = 69 - end - object dsReport: TDADataSource - DataTable = dtReport - Left = 22 - Top = 117 - end - object Report: TppReport - AutoStop = False - DataPipeline = ppReport - PrinterSetup.BinName = 'Default' - PrinterSetup.DocumentName = 'Report' - PrinterSetup.PaperName = 'A4 210 x 297 mm' - PrinterSetup.PrinterName = 'Default' - PrinterSetup.mmMarginBottom = 6350 - PrinterSetup.mmMarginLeft = 6350 - PrinterSetup.mmMarginRight = 6350 - PrinterSetup.mmMarginTop = 6350 - PrinterSetup.mmPaperHeight = 297000 - PrinterSetup.mmPaperWidth = 210000 - PrinterSetup.PaperSize = 9 - Units = utMillimeters - DeviceType = 'ArchiveFile' - EmailSettings.ReportFormat = 'PDF' - OutlineSettings.CreateNode = True - OutlineSettings.CreatePageNodes = True - OutlineSettings.Enabled = True - OutlineSettings.Visible = True - ShowCancelDialog = False - ShowPrintDialog = False - TextSearchSettings.DefaultString = '' - TextSearchSettings.Enabled = True - Left = 68 - Top = 70 - Version = '10.02' - mmColumnWidth = 0 - DataPipelineName = 'ppReport' - object ppHeaderBand1: TppHeaderBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - object ppDetailBand1: TppDetailBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - object ppFooterBand1: TppFooterBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - end - object BinDataStreamer: TDABinDataStreamer - Left = 85 - Top = 5 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.pas deleted file mode 100644 index 2d7533e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/DARBService_Impl.pas +++ /dev/null @@ -1,100 +0,0 @@ -unit DARBService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} ReportBuilderLibrary_Intf, uDADataStreamer, uDABinAdapter, - ppBands, ppCache, ppClass, ppProd, ppReport, DB, uDADataTable, - uDAScriptingProvider, uDACDSDataTable, ppComm, ppRelatv, ppDB, ppDBPipe, - uDAClasses, uDaInterfaces; - -type - { TDARBService } - TDARBService = class(TDataAbstractService, IDARBService) - DASchema: TDASchema; - ppReport: TppDBPipeline; - dtReport: TDACDSDataTable; - dsReport: TDADataSource; - Report: TppReport; - ppHeaderBand1: TppHeaderBand; - ppDetailBand1: TppDetailBand; - ppFooterBand1: TppFooterBand; - BinDataStreamer: TDABinDataStreamer; - procedure DataAbstractServiceActivate(const aClientID: TGUID; - aSession: TROSession; const aMessage: IROMessage); - procedure DataAbstractServiceDeactivate(const aClientID: TGUID; - aSession: TROSession); - private - fConnection: IDAConnection; - protected - { IDARBService methods } - function DA_GenReport(const ReportName: string; const DatasetName: string): Binary; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} ReportBuilderLibrary_Invk, ReportBuilder_ServerMain; - -procedure Create_DARBService(out anInstance: IUnknown); -begin - anInstance := TDARBService.Create(nil); -end; - -{ DARBService } - -function TDARBService.DA_GenReport(const ReportName: string; const DatasetName: string): Binary; -var - ds: IDADataset; - s: TMemoryStream; -begin - s := TMemoryStream.Create; - result := Binary.Create; - try - Report.DataPipeline := ppReport; - Report.Template.FileName := ReportBuilder_ServerMainForm.AppPath + ReportName; - Report.Template.LoadFromFile; - Report.Template.Load; - ds := DASchema.NewDataset(fConnection, DatasetName); - BinDataStreamer.WriteDataset(s, ds, [woRows, woSchema], -1); - BinDataStreamer.ReadDataset(s, dtReport, TRUE, '', TRUE, TRUE); - Report.DeviceType := 'dtArchive'; - Report.ArchiveFileName := ReportBuilder_ServerMainForm.AppPath + 'ServerArchive.raf'; - Report.Print; - result.LoadFromFile(ReportBuilder_ServerMainForm.AppPath + 'ServerArchive.raf'); - finally - s.Free; - end; -end; - -procedure TDARBService.DataAbstractServiceActivate(const aClientID: TGUID; - aSession: TROSession; const aMessage: IROMessage); -begin - fConnection := ReportBuilder_ServerMainForm.DAConnectionManager1.NewConnection('ADO', TRUE); -end; - -procedure TDARBService.DataAbstractServiceDeactivate( - const aClientID: TGUID; aSession: TROSession); -begin - fConnection := nil; -end; - -initialization - TROClassFactory.Create('DARBService', Create_DARBService, TDARBService_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/RODLFILE.res deleted file mode 100644 index b23b77d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/Report1.rtm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/Report1.rtm deleted file mode 100644 index 270bd58..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/Report1.rtm and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.Sample.html deleted file mode 100644 index dd01eef..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.Sample.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - -

- Report Builder Sample -

- - -

Purpose

- -

- This example shows how to create the report on the server, stream it to the client and then display to the client.
-

-

-To use this sample, you will need to copy the report template file to the server folder. -

-

Examine the Code

-
    -
  • - See the simple code in DARBService_Impl.pas and ReportBuilder_ClientMain.pas. -
  • -
-

Note

-

- This sample requires the installation of Report Builder (www.digital-metaphors.com). -

- - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bdsgroup deleted file mode 100644 index f049f0b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - ReportBuilderClient.bdsproj - ReportBuilderServer.bdsproj - ReportBuilderClient.exe ReportBuilderServer.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bpg deleted file mode 100644 index f11e550..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = ReportBuilderClient.exe ReportBuilderServer.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -ReportBuilderClient.exe: ReportBuilderClient.dpr - $(DCC) - -ReportBuilderServer.exe: ReportBuilderServer.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.groupproj deleted file mode 100644 index e59150b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {edbe07cb-363c-46f5-a6d3-c92276275a6f} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.bdsproj deleted file mode 100644 index 1a2b7cf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ReportBuilderClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dpr deleted file mode 100644 index 890e31b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program ReportBuilderClient; - -uses - Forms, - ReportBuilder_ClientMain in 'ReportBuilder_ClientMain.pas' {ReportBuilderClientMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'ReportBuilder Client'; - Application.CreateForm(TReportBuilderClientMainForm, ReportBuilderClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dproj deleted file mode 100644 index fb953dd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {39e1b6f4-4674-4588-8f39-e3edce5eaa45} - ReportBuilderClient.dpr - Debug - AnyCPU - DCC32 - ReportBuilderClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ReportBuilderClient.dpr - - - - - - - MainSource - - -
ReportBuilderClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary.rodl deleted file mode 100644 index 73faed0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary.rodl +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Intf.pas deleted file mode 100644 index 20eb590..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Intf.pas +++ /dev/null @@ -1,97 +0,0 @@ -unit ReportBuilderLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{AF63BD44-BEA9-4B7A-853F-3792A67A751B}'; - - { Service Interface ID's } - IDARBService_IID : TGUID = '{373D25E9-7848-4554-8AE7-7703C081E853}'; - - { Event ID's } - -type - { Forward declarations } - IDARBService = interface; - - - - - { IDARBService } - IDARBService = interface(IDataAbstractService) - ['{373D25E9-7848-4554-8AE7-7703C081E853}'] - function DA_GenReport(const ReportName: String; const DatasetName: String): Binary; - end; - - { CoDARBService } - CoDARBService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARBService; - end; - - { TDARBService_Proxy } - TDARBService_Proxy = class(TDataAbstractService_Proxy, IDARBService) - protected - function __GetInterfaceName:string; override; - - function DA_GenReport(const ReportName: String; const DatasetName: String): Binary; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoDARBService } - -class function CoDARBService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARBService; -begin - result := TDARBService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TDARBService_Proxy } - -function TDARBService_Proxy.__GetInterfaceName:string; -begin - result := 'DARBService'; -end; - -function TDARBService_Proxy.DA_GenReport(const ReportName: String; const DatasetName: String): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'ReportBuilderLibrary', __InterfaceName, 'DA_GenReport'); - __Message.Write('ReportName', TypeInfo(String), ReportName, []); - __Message.Write('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(IDARBService_IID, TDARBService_Proxy); - - -finalization - UnregisterProxyClass(IDARBService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Invk.pas deleted file mode 100644 index 29131eb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderLibrary_Invk.pas +++ /dev/null @@ -1,64 +0,0 @@ -unit ReportBuilderLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} ReportBuilderLibrary_Intf; - -type - TDARBService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_DA_GenReport(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TDARBService_Invoker } - -procedure TDARBService_Invoker.Invoke_DA_GenReport(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function DA_GenReport(const ReportName: String; const DatasetName: String): Binary; } -var - ReportName: String; - DatasetName: String; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('ReportName', TypeInfo(String), ReportName, []); - __Message.Read('DatasetName', TypeInfo(String), DatasetName, []); - - lResult := (__Instance as IDARBService).DA_GenReport(ReportName, DatasetName); - - __Message.InitializeResponseMessage(__Transport, 'ReportBuilderLibrary', 'DARBService', 'DA_GenReportResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.bdsproj deleted file mode 100644 index 2eb51ac..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ReportBuilderServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dpr deleted file mode 100644 index 80bdae4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dpr +++ /dev/null @@ -1,21 +0,0 @@ -program ReportBuilderServer; - -{#ROGEN:ReportBuilderLibrary.rodl} // RemObjects: Careful, do not remove! - -uses - uROCOMInit, - Forms, - ReportBuilderLibrary_Intf in 'ReportBuilderLibrary_Intf.pas', - ReportBuilderLibrary_Invk in 'ReportBuilderLibrary_Invk.pas', - DARBService_Impl in 'DARBService_Impl.pas' {DARBService: TDataAbstractService}, - ReportBuilder_ServerMain in 'ReportBuilder_ServerMain.pas' {ReportBuilder_ServerMainForm}; - -{$R *.RES} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.Title := 'ReportBuilder Server'; - Application.CreateForm(TReportBuilder_ServerMainForm, ReportBuilder_ServerMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dproj deleted file mode 100644 index a0fc579..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.dproj +++ /dev/null @@ -1,77 +0,0 @@ - - - {c3bd883e-cf1f-451a-a2c0-b0a16351f9af} - ReportBuilderServer.dpr - Debug - AnyCPU - DCC32 - ReportBuilderServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ReportBuilderServer.dpr - - - - - - - MainSource - - -
DARBService
-
- - - -
ReportBuilder_ServerMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilderServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.dfm deleted file mode 100644 index d6959e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.dfm +++ /dev/null @@ -1,525 +0,0 @@ -object ReportBuilderClientMainForm: TReportBuilderClientMainForm - Left = 457 - Top = 208 - AutoScroll = False - Caption = 'ReportBuilder Client' - ClientHeight = 242 - ClientWidth = 571 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 232 - Top = 13 - Width = 58 - Height = 13 - Caption = 'Reportname' - end - object Grid: TDBGrid - Left = 0 - Top = 42 - Width = 571 - Height = 200 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = dsCustomers - TabOrder = 3 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object OpenButton: TButton - Left = 8 - Top = 8 - Width = 121 - Height = 25 - Caption = 'Close/Open Customers' - TabOrder = 1 - OnClick = OpenButtonClick - end - object ReportButton: TButton - Left = 152 - Top = 8 - Width = 75 - Height = 25 - Caption = 'GenReport' - TabOrder = 2 - OnClick = ReportButtonClick - end - object edtRN: TEdit - Left = 304 - Top = 8 - Width = 121 - Height = 21 - TabOrder = 0 - Text = 'Report1.rtm' - end - object BINMessage: TROBinMessage - UseCompression = False - Left = 128 - Top = 72 - end - object WinInetHTTPChannel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/bin' - Left = 160 - Top = 72 - end - object RemoteService: TRORemoteService - Message = BINMessage - Channel = WinInetHTTPChannel - ServiceName = 'DARBService' - Left = 193 - Top = 72 - end - object dtCustomers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soIgnoreStreamSchema, soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 254 - Top = 72 - end - object dsCustomers: TDADataSource - DataTable = dtCustomers - Left = 288 - Top = 72 - end - object ArchiveReader: TppArchiveReader - AllowPrintToFile = True - DeviceType = 'Screen' - EmailSettings.ReportFormat = 'PDF' - PreviewFormSettings.WindowState = wsMaximized - PreviewFormSettings.ZoomSetting = zsPageWidth - SuppressOutline = False - TextSearchSettings.DefaultString = '' - TextSearchSettings.Enabled = True - Left = 320 - Top = 72 - Version = '10.02' - end - object Report: TppReport - AutoStop = False - DataPipeline = ppReport - PrinterSetup.BinName = 'Default' - PrinterSetup.DocumentName = 'Report' - PrinterSetup.PaperName = 'A4 210 x 297 mm' - PrinterSetup.PrinterName = 'Default' - PrinterSetup.mmMarginBottom = 6350 - PrinterSetup.mmMarginLeft = 6350 - PrinterSetup.mmMarginRight = 6350 - PrinterSetup.mmMarginTop = 6350 - PrinterSetup.mmPaperHeight = 297000 - PrinterSetup.mmPaperWidth = 210000 - PrinterSetup.PaperSize = 9 - Units = utMillimeters - DeviceType = 'ArchiveFile' - EmailSettings.ReportFormat = 'PDF' - OutlineSettings.CreateNode = True - OutlineSettings.CreatePageNodes = True - OutlineSettings.Enabled = True - OutlineSettings.Visible = True - ShowCancelDialog = False - ShowPrintDialog = False - TextSearchSettings.DefaultString = '' - TextSearchSettings.Enabled = True - Left = 320 - Top = 127 - Version = '10.02' - mmColumnWidth = 0 - DataPipelineName = 'ppReport' - object ppHeaderBand1: TppHeaderBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - object ppDetailBand1: TppDetailBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - object ppFooterBand1: TppFooterBand - mmBottomOffset = 0 - mmHeight = 13229 - mmPrintPosition = 0 - end - end - object ppReport: TppDBPipeline - DataSource = dsReport - UserName = 'Pipeline' - Left = 352 - Top = 127 - end - object dtReport: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soIgnoreStreamSchema, soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 256 - Top = 127 - end - object dsReport: TDADataSource - DataTable = dtReport - Left = 288 - Top = 128 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetSchemaCall.MethodName = 'GetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aFilter' - GetDataCall.RemoteService = RemoteService - GetDataCall.MethodName = 'GetData' - GetDataCall.Params = < - item - Name = 'aTableNameArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'StringArray' - end - item - Name = 'aTableRequestInfoArray' - DataType = rtUserDefined - Flag = fIn - TypeName = 'TableRequestInfoArray' - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'aTableNameArray' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - UpdateDataCall.RemoteService = RemoteService - UpdateDataCall.MethodName = 'UpdateData' - UpdateDataCall.Params = < - item - Name = 'aDelta' - DataType = rtBinary - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'aDelta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RemoteService - GetScriptsCall.Params = <> - GetScriptsCall.Default = False - RemoteService = RemoteService - DataStreamer = DataStreamer - Left = 422 - Top = 68 - end - object DataStreamer: TDABinDataStreamer - Left = 488 - Top = 68 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.pas deleted file mode 100644 index d7c27c7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ClientMain.pas +++ /dev/null @@ -1,90 +0,0 @@ -unit ReportBuilder_ClientMain; - -interface - -{ - IF YOU GET - - [Fatal Error] uClientForm.pas(17): File not found: 'ppModule.dcu' - - HERE: This sample requires ReportBuilder to be installed on your system. -} - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDADataTable, uDACDSDataTable, uDABINAdapter, uRORemoteService, - uROWinInetHttpChannel, uROClient, - uROBINMessage, DB, Grids, DBGrids, StdCtrls, ppModule, - ppCtrls, ppVar, ppPrnabl, ppClass, ppBands, ppCache, ppDB, ppDBPipe, - ppComm, ppRelatv, ppProd, ppReport, ppArchiv, uROTypes, - ppParameter, uDAScriptingProvider, - uDARemoteDataAdapter, uDADataStreamer, ReportBuilderLibrary_Intf; - -type - TReportBuilderClientMainForm = class(TForm) - BINMessage: TROBINMessage; - WinInetHTTPChannel: TROWinInetHTTPChannel; - RemoteService: TRORemoteService; - dtCustomers: TDACDSDataTable; - dsCustomers: TDADataSource; - Grid: TDBGrid; - OpenButton: TButton; - ReportButton: TButton; - ArchiveReader: TppArchiveReader; - Report: TppReport; - ppReport: TppDBPipeline; - dtReport: TDACDSDataTable; - dsReport: TDADataSource; - edtRN: TEdit; - Label1: TLabel; - ppHeaderBand1: TppHeaderBand; - ppDetailBand1: TppDetailBand; - ppFooterBand1: TppFooterBand; - RemoteDataAdapter: TDARemoteDataAdapter; - DataStreamer: TDABinDataStreamer; - procedure OpenButtonClick(Sender: TObject); - procedure ReportButtonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - { Private-Deklarationen } - FService: IDARBService; - public - { Public-Deklarationen } - end; - -var - ReportBuilderClientMainForm: TReportBuilderClientMainForm; - -implementation - -{$R *.dfm} - -procedure TReportBuilderClientMainForm.OpenButtonClick(Sender: TObject); -begin - dtCustomers.active := not dtCustomers.active; -end; - -procedure TReportBuilderClientMainForm.ReportButtonClick(Sender: TObject); -var - rb: TMemoryStream; -begin - rb := FService.DA_GenReport(edtRN.Text, 'Customers'); - if rb = nil then exit; - try - rb.SaveToFile(ExtractFilePath(Application.ExeName) + 'ClientArchive.raf'); - finally - rb.Free; - end; - ArchiveReader.ArchiveFileName := (ExtractFilePath(Application.ExeName) + 'ClientArchive.raf'); - ArchiveReader.DeviceType := 'dtScreen'; - ArchiveReader.Print; - ArchiveReader.ArchiveFileName := ''; //To unlock ClientArchive.raf file -end; - -procedure TReportBuilderClientMainForm.FormCreate(Sender: TObject); -begin - FService := (RemoteService as IDARBService); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.dfm deleted file mode 100644 index f2aee04..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.dfm +++ /dev/null @@ -1,73 +0,0 @@ -object ReportBuilder_ServerMainForm: TReportBuilder_ServerMainForm - Left = 115 - Top = 134 - Width = 235 - Height = 100 - Caption = 'ReportBuilder Server' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Form1' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 14 - object RoPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object ROMessage: TROBinMessage - Left = 56 - Top = 16 - end - object ROServer: TROIndyHTTPServer - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'BIN' - end> - Port = 8099 - Left = 88 - Top = 16 - end - object DADriverManager1: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 120 - Top = 16 - end - object DAConnectionManager1: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DADriverManager1 - PoolingEnabled = True - Left = 152 - Top = 16 - end - object DAADODriver1: TDAADODriver - Left = 184 - Top = 16 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.pas deleted file mode 100644 index dc7ded5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ReportBuilder_ServerMain.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit ReportBuilder_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, uROClient, uROBINMessage, uROClientIntf, uROServer, uROIndyHTTPServer, - uROIndyTCPServer, uROPoweredByRemObjectsButton, - uDAEngine, uDAADODriver, uDAClasses, uDADriverManager; - -type - TReportBuilder_ServerMainForm = class(TForm) - ROMessage: TROBINMessage; - ROServer: TROIndyHTTPServer; - DADriverManager1: TDADriverManager; - DAConnectionManager1: TDAConnectionManager; - DAADODriver1: TDAADODriver; - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - procedure FormCreate(Sender: TObject); - private - fAppPath: string; - public - property AppPath: string read fAppPath write fAppPath; - end; - -var - ReportBuilder_ServerMainForm: TReportBuilder_ServerMainForm; - -implementation - -uses DARBService_Impl; - - -{$R *.dfm} - -procedure TReportBuilder_ServerMainForm.FormCreate(Sender: TObject); -begin - fAppPath := ExtractFilePath(Application.ExeName); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ServerArchive.raf b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ServerArchive.raf deleted file mode 100644 index 8cf3638..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Report Builder/ServerArchive.raf and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.Sample.html deleted file mode 100644 index 18a0ad9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.Sample.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - -

- SQL Access Sample -

- - -

Purpose

- -

-This example treats two different SQL queries as if they are the same one. -One takes data from the SHIPPERS table and the other from the CUSTOMERS table.
The field mappings used when building the where clause isolate the developer from the SQL details and so allow the building of fairly complex where clauses without the need to do string concatenations in code.
-This sample also illustrates the use of various macro processors (TDAMSSQLMacroProcessor, TDAIBMacroProcessor, TDAOracleMacroProcessor, TDADBISAMMacroProcessor). -

- -

Examine the Code

-
    -
  • - See the two SQL statements associated with the Customers dataset for the two connections for more details.. -
  • -
-

Note

- -

-IMPORTANT: Keep in mind that the dataset's SQL property will always contain the statement you define and the dynamic WHERE clause only gets merged into it when opening the dataset. -

- - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.bdsproj deleted file mode 100644 index 12aa3e0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - SQLAccess.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dpr deleted file mode 100644 index 81c2c0c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program SQLAccess; - -uses - Forms, - SQLAccessMain in 'SQLAccessMain.pas' {SQLAccessMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'SQL Access'; - Application.CreateForm(TSQLAccessMainForm, SQLAccessMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dproj deleted file mode 100644 index baebb80..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {f72ad2e5-c6f5-43f9-9fd6-9c34a1ccae26} - SQLAccess.dpr - Debug - AnyCPU - DCC32 - SQLAccess.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - SQLAccess.dpr - - - - - - - MainSource - - -
SQLAccessMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccess.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.dfm deleted file mode 100644 index 894d7c9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.dfm +++ /dev/null @@ -1,558 +0,0 @@ -object SQLAccessMainForm: TSQLAccessMainForm - Left = 319 - Top = 116 - AutoScroll = False - BorderWidth = 5 - Caption = 'SQL Access' - ClientHeight = 444 - ClientWidth = 576 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object PageControl1: TPageControl - Left = 0 - Top = 0 - Width = 576 - Height = 444 - ActivePage = TabSheet1 - Align = alClient - TabIndex = 0 - TabOrder = 0 - object TabSheet1: TTabSheet - BorderWidth = 5 - Caption = 'Where' - object Label1: TLabel - Left = 0 - Top = 76 - Width = 34 - Height = 13 - Caption = 'ID Like' - end - object Label2: TLabel - Left = 0 - Top = 100 - Width = 143 - Height = 13 - Caption = 'CompanyName Different Than' - end - object Label3: TLabel - Left = 0 - Top = 124 - Width = 114 - Height = 13 - Caption = 'PhoneNumber Equal To' - end - object Label4: TLabel - Left = 0 - Top = 148 - Width = 44 - Height = 13 - Caption = 'Order By:' - end - object ExecuteButton: TButton - Left = 410 - Top = 143 - Width = 113 - Height = 22 - Caption = 'E&xecute' - TabOrder = 5 - OnClick = ExecuteButtonClick - end - object Memo: TMemo - Left = 0 - Top = 199 - Width = 558 - Height = 207 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [] - ParentFont = False - TabOrder = 6 - end - object rgConnections: TRadioGroup - Left = 0 - Top = 0 - Width = 558 - Height = 65 - Align = alTop - Caption = 'Connection' - TabOrder = 0 - end - object eID: TEdit - Left = 152 - Top = 72 - Width = 255 - Height = 21 - TabOrder = 1 - Text = 'A%' - end - object eCompanyName: TEdit - Left = 152 - Top = 96 - Width = 255 - Height = 21 - TabOrder = 2 - Text = 'Noname' - end - object ePhoneNumber: TEdit - Left = 152 - Top = 120 - Width = 255 - Height = 21 - TabOrder = 3 - Text = '13456789' - end - object cbOrderBy: TComboBox - Left = 152 - Top = 144 - Width = 255 - Height = 21 - ItemHeight = 13 - TabOrder = 4 - end - end - object TabSheet2: TTabSheet - BorderWidth = 5 - Caption = 'Macros' - ImageIndex = 1 - object ProcessSQLButton: TButton - Left = 325 - Top = 6 - Width = 75 - Height = 22 - Caption = 'ProcessSQL' - TabOrder = 1 - OnClick = ProcessSQLButtonClick - end - object Memo1: TMemo - Left = 0 - Top = 74 - Width = 558 - Height = 141 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - Lines.Strings = ( - 'SELECT * FROM Orders WHERE OrderDate>{DateTime()}' - 'SELECT * FROM Orders WHERE OrderDate>{Date()}' - 'SELECT * FROM Orders WHERE OrderDate>{AddTime(Date(), 2, day)}' - - 'SELECT * FROM Orders WHERE OrderDate>{FormatDateTime('#39'12/22/2003' + - ' 22:10:22.123'#39')}' - 'SELECT * FROM Orders WHERE OrderDate>{FormatDate('#39'12/22/2003'#39')}' - 'SELECT {Length(CustomerID)} FROM Orders' - 'SELECT {TrimLeft(CustomerID)} FROM Orders' - 'SELECT {TrimRight(CustomerID)} FROM Orders' - 'SELECT {UpperCase(CustomerID)} FROM Orders' - 'SELECT {Copy(CustomerID, 2, 3)} FROM Orders') - TabOrder = 2 - end - object Memo2: TMemo - Left = 0 - Top = 219 - Width = 558 - Height = 187 - Align = alBottom - TabOrder = 4 - end - object rgProcessors: TRadioGroup - Left = 0 - Top = 0 - Width = 322 - Height = 71 - Caption = 'Processor' - Columns = 2 - ItemIndex = 0 - Items.Strings = ( - 'TMSSQLMacroProcessor' - 'TIBMacroProcessor' - 'TOracleMacroProcessor' - 'TDBISAMMacroProcessor') - TabOrder = 0 - end - object Panel1: TPanel - Left = 0 - Top = 215 - Width = 558 - Height = 4 - Align = alBottom - BevelOuter = bvNone - TabOrder = 3 - end - end - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 24 - Top = 216 - end - object DAADODriver: TDAADODriver - Left = 54 - Top = 216 - end - object DAConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'NorthwindCustomers' - ConnectionString = - 'ADO?Server=localhost;AuxDriver=SQLOLEDB.1;UserID=sa;Database=Nor' + - 'thwind;password=' - Description = 'Query that point to the Customers table' - Default = True - Tag = 0 - end - item - Name = 'NorthwindShippers' - ConnectionString = - 'ADO?Server=localhost;AuxDriver=SQLOLEDB.1;UserID=sa;Database=Nor' + - 'thwind;password=' - Description = 'Query that point to the Shippers table' - Default = False - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = False - Left = 88 - Top = 216 - end - object DASchema: TDASchema - ConnectionManager = DAConnectionManager - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'NorthwindCustomers' - TargetTable = 'Customers' - SQL = 'SELECT CustomerID,CompanyName,Phone FROM Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'ID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'PhoneNumber' - TableField = 'Phone' - end> - end - item - Connection = 'NorthwindShippers' - TargetTable = 'Shippers' - SQL = 'SELECT ShipperID, CompanyName, Phone FROM Shippers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'ID' - TableField = 'ShipperID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'PhoneNumber' - TableField = 'Phone' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'ID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - Required = True - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PhoneNumber' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = <> - Statements = < - item - Connection = 'NorthwindShippers' - TargetTable = 'Orders' - SQL = - 'SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate,' + - #10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,'#10' ShipCit' + - 'y, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM Orders' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = <> - RelationShips = <> - UpdateRules = <> - Left = 24 - Top = 248 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.pas deleted file mode 100644 index df4b8e4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/SQL Access/SQLAccessMain.pas +++ /dev/null @@ -1,169 +0,0 @@ -unit SQLAccessMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDADriverManager, uDAEngine, uDAADODriver, uDAClasses, StdCtrls, - DB, uDADataTable, uDACDSDataTable, uDAADODataTable, ExtCtrls, - ComCtrls, uDAScriptingProvider; - -type - TSQLAccessMainForm = class(TForm) - DriverManager: TDADriverManager; - DAADODriver: TDAADODriver; - PageControl1: TPageControl; - TabSheet1: TTabSheet; - TabSheet2: TTabSheet; - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - ExecuteButton: TButton; - Memo: TMemo; - rgConnections: TRadioGroup; - eID: TEdit; - eCompanyName: TEdit; - ePhoneNumber: TEdit; - ProcessSQLButton: TButton; - Memo1: TMemo; - Memo2: TMemo; - rgProcessors: TRadioGroup; - cbOrderBy: TComboBox; - Label4: TLabel; - DAConnectionManager: TDAConnectionManager; - Panel1: TPanel; - DASchema: TDASchema; - procedure ExecuteButtonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure ProcessSQLButtonClick(Sender: TObject); - - private - { Private declarations } - public - { Public declarations } - end; - -var - SQLAccessMainForm: TSQLAccessMainForm; - -implementation - -uses uDAInterfaces, uDAMacroProcessors, uDAMacros; - -{$R *.dfm} - -procedure TSQLAccessMainForm.ExecuteButtonClick(Sender: TObject); -var - connname: string; - conn: IDAConnection; - ds: IDADataset; - i: integer; - orderby: integer; -begin - { In this example we are treating two different SQL queries like they were the same one. - One takes data from the SHIPPERS table when the other from the CUSTOMERS one. The field mappings - that are used when building the where clause isolate the developer from the SQL details and allow - you to build fairly complex where clauses without the need to do string concatenations in code. - - Examine the two sql statements associated with the Customers dataset for the two connections for - more details. The code below transparently works for both. - - IMPORTANT: Keep in mind the SQL property of a dataset will always and only reflect the statement you define - in the statement and the dynamic WHERE clause will only be merged to it when opening the dataset. - } - - Memo.Lines.Add('---------------'); - Memo.Lines.Add(''); - try - connname := Trim(Copy(rgConnections.Items[rgConnections.ItemIndex], 1, Pos('-', rgConnections.Items[rgConnections.ItemIndex]) - 1)); - conn := DAConnectionManager.NewConnection(connname, TRUE); - - ds := DASchema.NewDataset(conn, 'Customers'); - - { Note: we could have also created the dataset along with the field mappings and statements manually via code. - In some extremely dynamic situations that might be preferrable. } - - Memo.Lines.Add('Mappings'); - for i := 0 to ds.FieldCount - 1 do - Memo.Lines.Add(ds.fields[i].TableField + ' --> ' + ds.fields[i].Name); - Memo.Lines.Add(''); - - ds.Where.AddCondition('ID', cLike, eID.Text); - - if (eCompanyName.Text <> '') and (ds.Where.Clause <> '') then ds.Where.AddOperator(opAND); - - ds.Where.AddCondition('CompanyName', cDifferent, eCompanyName.Text); - - if (ePhoneNumber.Text <> '') and (ds.Where.Clause <> '') then ds.Where.AddOperator(opOR); - - ds.Where.AddCondition('PhoneNumber', cEqual, ePhoneNumber.Text); - - orderby := POS('order by', lowercase(ds.SQL)); - - if (orderby = 0) then begin - if (cbOrderBy.Text <> '') then ds.SQL := ds.SQL + ' ORDER BY ' + ds.Fieldbyname(cbOrderBy.Text).TableField; - end - else begin - if (cbOrderBy.Text = '') then ds.SQL := copy(ds.sql, 1, orderby - 1) - else - ds.SQL := copy(ds.sql, 1, orderby - 1) + ' ORDER BY ' + ds.Fieldbyname(cbOrderBy.Text).TableField; - end; - ds.Open; - finally - Memo.Lines.Add('SQL >>> ' + ds.SQL); - Memo.Lines.Add('WHERE >>> ' + ds.Where.Clause); - end; -end; - -procedure TSQLAccessMainForm.FormCreate(Sender: TObject); -var - i: integer; - conn: IDAConnection; - ds: IDADataset; -begin - with DAConnectionManager do - for i := 0 to (Connections.Count - 1) do begin - rgConnections.Items.Add(Connections[i].Name + ' - ' + Connections[i].Description); - end; - - rgConnections.ItemIndex := 0; - - conn := DAConnectionManager.NewConnection('NorthwindCustomers'); - ds := DASchema.NewDataset(conn, 'Customers'); - cbOrderBy.Items.Add(''); - for i := 0 to (ds.FieldCount - 1) do begin - cbOrderBy.Items.Add(ds.Fields[i].Name); - end; -end; - -procedure TSQLAccessMainForm.ProcessSQLButtonClick(Sender: TObject); -var - processor: TDASQLMacroProcessor; - savedShortDateFormat: string; - SavedDateSeparator, savedTimeSeparator: Char; -begin - case rgProcessors.ItemIndex of - 0: processor := TDAMSSQLMacroProcessor.Create; - 1: processor := TDAIBMacroProcessor.Create; - 2: processor := TDAOracleMacroProcessor.Create; - 3: processor := TDADBISAMMacroProcessor.Create; - else Exit; - end; - savedShortDateFormat := ShortDateFormat; - savedDateSeparator := DateSeparator; - savedTimeSeparator := TimeSeparator; - try - ShortDateFormat := 'MM/DD/YYYY'; - DateSeparator := '/'; - TimeSeparator := ':'; - Memo2.Lines.Text := processor.Eval(Memo1.Lines.Text) - finally - ShortDateFormat := savedShortDateFormat; - DateSeparator := savedDateSeparator; - TimeSeparator := savedTimeSeparator; - processor.Free; - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Samples.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Samples.html deleted file mode 100644 index 562a2fe..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Samples.html +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - -

- Data Abstract™ Samples for Delphi -

- Please keep the following things in mind when working with the samples: -
    -
  • - ADO / Northwind Database. Most samples work on the Northwind database - that comes with Microsoft SQL Server 7.0 and 2003. For simplicity, the - samples - assume that MSSQL is running on the local machine and using an empty "sa" - password*. -
  • -
  • - If your setup differs, ensure that you adjust the samples accordingly before - trying to run them; locate and double-click the Schema component, select - the - ADO connection in Schema Modeler and change the connection string.
  • -
  • - *an empty "sa" password is NOT recommended on production systems.
  • -
  • - InterBase (or FireBird) / Employee Database. Those samples working with Borland - InterBase - will usually work against the EMPLOYEE.GDB database that is provided with - InterBase. - They will expect this database in the default location (c:\Program Files\Borland\InterBase\Examples). -
  • -
  • - If your setup differs,ensure that you adjust the samples accordingly before - trying to run them; locate and double-click the Schema component, select - the - IBX or DBX connection in Schema Modeler, and change the connection string.
  • - SDAC. Some of the sample applications provide the option to use - an SDAC based connection instead of ADO to talk to MSSQL. Please note that - to use - this option, you will need to drop a SDACDriver on the sample's form manually - and rebuild the sample; you will also need a valid license for SDAC from - Core - Lab for this.
  • - -
  • -

    - Report Builder Sample. This sample will require ReportBuilder 7 - from - Digital Metaphors. -

    -
  • -
-

- - Getting Started

-

- Most of the samples provide a project group containing - server and client projects. The standard procedure for testing these is as follows: - -

-
    -
  • Build or compile both projects.
  • -
  • Ensure that the server is the current project. Note: if there is - only one RemObjects SDK server contained within the project group, this step is - not needed because the next step will still work even if the lient is the current - project. 
  • -
  • Launch the server (IDE menu: RemObjects | Launch Server Executable).
  • -
  • Examine the server window. Some samples require that you activate one or more channels. -
  • -
  • Make the client the current project.
  • -
  • Run the client.
  • -
-

- Having tested the sample, next examine the database schema and the services provided. Do this by examining - the Schema Modeler and Service Builder tools provided: -

-
    -
  • Schema Modeler -
      -
    • locate the server form or datamodule containing the TDASchema component
    • -
    • double click on the TDASchema
    • -
    -
  • -
  • Service Builder -
      -
    • Ensure that the server is the current project.
    • -
    • Open the Service Builder (IDE menu: RemObjects | Edit Service Library).
    • -
    -
  • -
-

- Note: the Schema Modeler item available via the IDE's main menu - (RemObjects | Schema Modeler) will open a fresh instance, not the one already referenced - by the other components.

-

-

-

- - Sample Categories

-
    -
  • Some samples are shown below in more than one category. 
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Category -

-
-

- Samples -

-
- Introduction - First Sample
- Login Sample
- Calculated Fields
- Custom User Logon
- MegaDemo
- Local Schema
- Quick Open
- Intermediate - Briefcase
- Business Processor
- BusinessRulesScripts
- Data Streamers
- Fetch
- Memory Data
- Multi Level Detail
- SQL Access
- Stored Procedures
- Strongly Typed
- Architecture - Connection By User
- Local Schema -
- Service Methods
- Strongly Typed
- Advanced - Connection By User
- Connection Pooling
- Dynamic SQL
- Regular Expressions
- Service Methods
- XSLT
- Third Party - - QuantumGrid 4
- Report Builder
-

- Sample Descriptions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Name - Category - Description
- Briefcase - Intermediate - This example shows how to create a briefcase model using a Data Abstract - Client.
- Business Processor - Intermediate - This is a good example to show the advantages of a multi-tier architecture: systems - can be updated via a server re-deploy without the need to update any client. Also, - the sample shows advanced handling on the client of any errors returned from the - server.
- BusinessRulesScripts - Intermediate -

- This example demonstrates how client side scripts can be modified on the server - and then downloaded to the client via a simple call.
- When you compile and launch the server, it displays a memo containing various client - side rules executed within event handlers such as BeforePost.

-
- Calculated Fields - Introduction - This example shows how to handle calculated fields on the server side and client - side. -
- Connection By User - Architecture
- Advanced
- Shows various methods how a standard application (i.e. not a RemObjects server or - client) can obtain a database connection at runtime. -
- The application uses four Data Abstract components:  TDAADODriver, - TDADriverManager, TDAConnectionManager and - TROInMemorySessionManager.
- Connection Pooling - Advanced - Shows how connections can be managed via a pool (ADO/Northwind & IBX/Employee - connections). -
- Custom User Logon - Introduction -

- A very simple example showing two methods of opening a connection at runtime:

-
    -
  • creates and opens the connection in a single call passing the UserID/Password values - supplied.
  • -
  • creates the connection and opens it afterwards.
  • -
-
- Data Streamers - Intermediate -

- This example shows how a dataset can be written to a stream and read from it using - the TDABinDataStreamer class.
- When you compile and launch this example it displays two grids, the sources for - which are datasets dynamically read using TStream.

-
- Dynamic SQL - Advanced -

- This demo shows how to retrieve schema and/or data via SQL generated at runtime.
- When you compile and run the server, you will see it contains a memo displaying - "SQL details generated for Update will be displayed here". The demo does - not actually attempt to update server data but merely displays the fields that would - be updated by processing the delta.

-
- Fetch - Intermediate - This demo shows how to fetch paged orders and also master/detail via single server - call. -
- First Sample - Introduction - This sample illustrates the basic functionality of Data Abstract. -
- The application, which shows how to receive data from a remote database, was created - using the Data Abstract 4.0 Combo Server wizard.
- Local Schema - Introduction
- Architecture
- A simple demo showing the use of several Data Abstract components to select/update - a range of Customer records.
- Login Sample - Introduction -

- This example shows how to provide a simple Login.
- The login data is held in Northwind's Employees table, with the FirstName - and LastName fields used for UserName and Password respectively. -

-
- MegaDemo - Introduction - The sample shows: -
    -
  • How we can work with several connections to different databases (Northwind - MS - SQL and Employee - Firebird).
  • -
  • How we can implement security and access rights in our application.
  • -
  • Master-detail relations between tables is implemented via a service that provides - a list of orders by user id.
  • -
-
- Memory Data - Intermediate -

- This example shows how to create and populate a virtual dataset dynamically.
- The client displays two grids: -

-
    -
  • Top Grid: this displays the primary keys of one or more datasets from Northwind.  -
  • -
  • Bottom Grid: this displays the names and sizes of files contained in the - specified disk folder.
  • -
-
- Multi Level Detail - Intermediate - This sample shows how to implement master/detail/detail updates as simply as possible.
- QuantumGrid 4 - Third Party - This example demonstrates how to use the QuantumGrid4 (or QuantumGrid5) - product from Developer Express (contact www.devexpress.com. for licensing - information if you do not already have the product). -
- Quick Open - Introduction - This example shows how to load TDACDSDataTable data using the TDABinDataStreamer.
- Regular Expressions - Advanced - This sample illustrates the support provided for regular expressions.
- Report Builder - Third Party - Requires ReportBuilder 7 from Digital Metaphors.
- This example shows how to create the report on the server, stream it to the client - and then display to the client.
- Service Methods - Architecture
- Advanced
-  This example illustrates the methods of the IDataAbstractService base - service. It shows the options available to change the server's operations and also - shows the order in which server methods are invoked. -
- SQL Access - Intermediate - This example treats two different SQL queries as if they are the same one. One takes - data from the SHIPPERS table and the other from the CUSTOMERS - table. -
- The field mappings used when building the where clause isolate the developer from - the SQL details and so allow the building of fairly complex where clauses without - the need to do string concatenations in code.
- This sample also illustrates the use of various macro processors (TMSSQLMacroProcessor, - TIBMacroProcessor, TOracleMacroProcessor, - TDBISAMMacroProcessor). -
- Stored Procedures - Intermediate -  This example shows how to use the IDAConnection's GetStoredProcedureNames - method to retrieve a list of stored procedures for the connection. -
- It also shows how to use IDAConnection's NewCommand to access the IDASQLCommand - interface
- Strongly Typed - Architecture
- Intermediate
-  This example shows usage of business rules. It enforces additional rules that - might change over time. This is a good example to show the advantages of a multi-tier - architecture: systems can be updated via a server re-deploy without the need to - update any client.
- XSLT - Advanced - This example shows how to import dataset data into an .xml file by using the TDAXmlDataStreamer. - Exporting dataset changes to an .xml file is also shown.
-
-

- Support

- -

- If you encounter any problems or have questions regarding the Samples, - please feel - free to ask on our newsgroup at - news://news.remobjects.com/remobjects.public.dataabstract.delphi. -

-

- Thank you very much,
Your RemObjects Team
http://www.remobjects.com -

-

-   -

- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/RODLFILE.res deleted file mode 100644 index dc020ec..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.Sample.html deleted file mode 100644 index 2868c91..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.Sample.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -

Service Methods

-
-

Purpose

- -

This example illustrates the methods of the IDataAbstractService base service. - It shows the options available to change the server's operations and also shows the order in which server methods are invoked.
- In this example, all server methods are called manually. Normally, this is not necessary, as the TDARemoteDataAdapter calls them all for you. -

-

Examine the Code

-

- See how the - IDataAbstractService methods are called manually in - ServiceMethods_ClientMain.pas -

- - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bdsgroup deleted file mode 100644 index 8333b42..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - ServiceMethods_Server.bdsproj - ServiceMethods_Client.bdsproj - ServiceMethods_Server.exe ServiceMethods_Client.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bpg deleted file mode 100644 index fe9fcfa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = ServiceMethods_Server.exe ServiceMethods_Client.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -ServiceMethods_Client.exe: ServiceMethods_Client.dpr - $(DCC) - -ServiceMethods_Server.exe: ServiceMethods_Server.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.groupproj deleted file mode 100644 index 143ef56..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {e6c919e3-5360-42fe-9531-375446f3300f} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary.rodl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary.rodl deleted file mode 100644 index ae93bfa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary.rodl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Intf.pas deleted file mode 100644 index a996dd1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Intf.pas +++ /dev/null @@ -1,76 +0,0 @@ -unit ServiceMethodsLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{4E3F13F7-7BFC-4A77-AAB9-D9A3CF49CEB8}'; - - { Service Interface ID's } - IServiceMethods_Service_IID : TGUID = '{7FD71BB0-07C8-479C-B684-75CD9DEF3917}'; - - { Event ID's } - -type - { Forward declarations } - IServiceMethods_Service = interface; - - - - - { IServiceMethods_Service } - IServiceMethods_Service = interface(IDataAbstractService) - ['{7FD71BB0-07C8-479C-B684-75CD9DEF3917}'] - end; - - { CoServiceMethods_Service } - CoServiceMethods_Service = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IServiceMethods_Service; - end; - - { TServiceMethods_Service_Proxy } - TServiceMethods_Service_Proxy = class(TDataAbstractService_Proxy, IServiceMethods_Service) - protected - function __GetInterfaceName:string; override; - - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ CoServiceMethods_Service } - -class function CoServiceMethods_Service.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IServiceMethods_Service; -begin - result := TServiceMethods_Service_Proxy.Create(aMessage, aTransportChannel); -end; - -function TServiceMethods_Service_Proxy.__GetInterfaceName:string; -begin - result := 'ServiceMethods_Service'; -end; - -initialization - RegisterProxyClass(IServiceMethods_Service_IID, TServiceMethods_Service_Proxy); - - -finalization - UnregisterProxyClass(IServiceMethods_Service_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Invk.pas deleted file mode 100644 index 00ff449..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethodsLibrary_Invk.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit ServiceMethodsLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} ServiceMethodsLibrary_Intf; - -type - TServiceMethods_Service_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.bdsproj deleted file mode 100644 index 6e397d1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ServiceMethods_Client.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dpr deleted file mode 100644 index c73ae67..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program ServiceMethods_Client; - -uses - Forms, - ServiceMethods_ClientMain in 'ServiceMethods_ClientMain.pas' {ServiceMethods_ClientMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TServiceMethods_ClientMainForm, ServiceMethods_ClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dproj deleted file mode 100644 index b9baccc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {f5641855-869a-4e82-b3c8-167372a7b6d0} - ServiceMethods_Client.dpr - Debug - AnyCPU - DCC32 - ServiceMethods_Client.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ServiceMethods_Client.dpr - - - - - - - MainSource - - -
ServiceMethods_ClientMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Client.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.dfm deleted file mode 100644 index 178208e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.dfm +++ /dev/null @@ -1,675 +0,0 @@ -object ServiceMethods_ClientMainForm: TServiceMethods_ClientMainForm - Left = 94 - Top = 60 - AutoScroll = False - Caption = 'ServiceMethods Client' - ClientHeight = 445 - ClientWidth = 806 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - ShowHint = True - OnCreate = FormCreate - OnDestroy = FormDestroy - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object LogMessage: TLabel - Left = 150 - Top = 207 - Width = 649 - Height = 16 - Anchors = [akLeft, akTop, akRight] - AutoSize = False - Caption = 'Please run GetSchema first!' - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object PageControl: TPageControl - Left = 0 - Top = 0 - Width = 806 - Height = 198 - ActivePage = tsGetTableSchema - Align = alTop - TabIndex = 1 - TabOrder = 0 - OnChange = PageControlChange - object tsGetSchema: TTabSheet - Caption = 'GetSchema' - object Label1: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = 'Requires that '#39'AllowSchemaAccess'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - end - object tsGetTableSchema: TTabSheet - Caption = 'GetTableSchema' - ImageIndex = 4 - object Label2: TLabel - Left = 9 - Top = 37 - Width = 40 - Height = 13 - Caption = 'Dataset:' - end - object Label8: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = 'Requires that '#39'AllowSchemaAccess'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object cbGetTableSchema: TComboBox - Left = 126 - Top = 33 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 13 - TabOrder = 0 - end - end - object tsGetData: TTabSheet - Caption = 'GetData' - ImageIndex = 1 - object Label6: TLabel - Left = 9 - Top = 37 - Width = 40 - Height = 13 - Caption = 'Dataset:' - end - object Label7: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'AcquireConnection'#39' and '#39'AllowW' + - 'hereSQL'#39' is enabled on the server. (AllowWhereSQL is needed for ' + - 'UserFilter)' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object Label4: TLabel - Left = 9 - Top = 84 - Width = 58 - Height = 13 - Caption = 'MaxRecord:' - end - object Label19: TLabel - Left = 9 - Top = 108 - Width = 47 - Height = 13 - Caption = 'UserFilter:' - end - object cbGetData: TComboBox - Left = 126 - Top = 33 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - OnChange = cbGetDataChange - end - object cbIncludeSchema: TCheckBox - Left = 9 - Top = 58 - Width = 130 - Height = 17 - Alignment = taLeftJustify - Caption = 'IncludeSchema' - Checked = True - State = cbChecked - TabOrder = 1 - end - object spMaxRecord: TSpinEdit - Left = 126 - Top = 79 - Width = 50 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 2 - Value = 10 - end - object vleGetData: TValueListEditor - Left = 613 - Top = 26 - Width = 185 - Height = 144 - Align = alRight - TabOrder = 3 - TitleCaptions.Strings = ( - 'Parameter' - 'Value') - ColWidths = ( - 86 - 93) - end - object GetDataUserFilter: TEdit - Left = 126 - Top = 103 - Width = 479 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 4 - end - end - object tsUpdateData: TTabSheet - Caption = 'UpdateData' - ImageIndex = 2 - object Label18: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'ProcessDeltasWithoutUpdateRule' + - 's'#39' and '#39'AcquireConnection'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object Panel1: TPanel - Left = 0 - Top = 26 - Width = 613 - Height = 144 - Align = alClient - BevelOuter = bvNone - TabOrder = 0 - object Panel2: TPanel - Left = 0 - Top = 0 - Width = 613 - Height = 26 - Align = alTop - BevelOuter = bvNone - TabOrder = 0 - object Label15: TLabel - Left = 9 - Top = 6 - Width = 40 - Height = 13 - Caption = 'Dataset:' - end - object Label17: TLabel - Left = 360 - Top = 6 - Width = 58 - Height = 13 - Caption = 'MaxRecord:' - end - object RefreshButton: TBitBtn - Left = 208 - Top = 1 - Width = 77 - Height = 22 - Caption = 'Refresh' - TabOrder = 1 - OnClick = RefreshButtonClick - Glyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 2000000000000004000000000000000000000000000000000000FF00FF00A377 - 7400A3777400A3777400A3777400A3777400A3777400A3777400A3777400A377 - 7400A3777400A3777400A377740090605D00FF00FF00FF00FF00FF00FF00A67B - 7500F2E2D300F2E2D300FFE8D100EFDFBB00FFE3C500FFDEBD00FFDDBA00FFD8 - B200FFD6AE00FFD2A500FFD2A30093635F00FF00FF00FF00FF00FF00FF00AB7F - 7700F3E7DA00F3E7DA0000990000AFD8A00070C56F0040AA2F0080BB5D00EFD4 - A600FFD6AE00FFD2A300FFD2A30096666200FF00FF00FF00FF00FF00FF00B083 - 7900F4E9DD00F4E9DD00009900000099000000990000009900000099000040AA - 2E00FFD8B200FFD4A900FFD4A9009A696400FF00FF00FF00FF00FF00FF00B689 - 7C00F5EDE400F5EDE4000099000000990000109E0D00CFD6A300FFE4C80020A2 - 1900FFD8B200FFD7B000FFD7B0009E6C6600FF00FF00FF00FF00FF00FF00BC8E - 7E00F7EFE800F7EFE80000990000009900000099000000990000FFE4C800EFDE - BA00FFD8B200FFD7B000FFD9B400A26F6800FF00FF00FF00FF00FF00FF00C395 - 8100F8F3EF00F8F3EF00F8F3EF00FFF4E800FFF4E800FFF4E800EFE3C400EFE3 - C400FFE4C800FFDEBD00FFDDBB00A5736A00FF00FF00FF00FF00FF00FF00CA9B - 8400F9F5F200FBFBFB00FFF4E800FFF4E800FFF4E80000990000009900000099 - 0000FFE8D100FFE3C500FFE1C200A8766C00FF00FF00FF00FF00FF00FF00D2A1 - 8700F9F9F900FBFBFB00109F0F00AFD8A000FFF4E800AFD8A000009900000099 - 0000FFE8D100FFE4C800FFE3C600AC796E00FF00FF00FF00FF00FF00FF00D9A8 - 8A00FBFBFB00FFFFFF0070C56F00009900000099000000990000009900000099 - 0000FFE8D100FFE8D100FFE6CE00AE7B7100FF00FF00FF00FF00FF00FF00DFAE - 8C00FCFCFC00FFFFFF00FFFFFF0070C56F000099000000990000AFD8A0000099 - 0000FFE8D100FFC8C200FFB0B000B07D7200FF00FF00FF00FF00FF00FF00E5B3 - 8F00FDFDFD00FDFDFD00FFFFFF00FFFFFF00FFFFFE00FFFAF600FFF9F300FFF5 - EA00F4DECE00B27F7300B27F7300B27F7300FF00FF00FF00FF00FF00FF00EAB8 - 9100FEFEFE00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFE00FFFAF600FFF9 - F300F5E1D200B27F7300EDA75400CB987F00FF00FF00FF00FF00FF00FF00EFBC - 9200FFFFFF00FFFFFF00FCFCFC00FAFAFA00F7F7F700F5F5F500F2F1F100F0ED - EA00E9DAD000B27F7300D4A18300D09D8100FF00FF00FF00FF00FF00FF00F2BF - 9400DCA98700DCA98700DCA98700DCA98700DCA98700DCA98700DCA98700DCA9 - 8700DCA98700B27F7300D8A58500FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00} - end - object cbUpdateData: TComboBox - Left = 57 - Top = 2 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - OnChange = cbUpdateDataChange - end - object updateDataMaxRecord: TSpinEdit - Left = 431 - Top = 1 - Width = 50 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 2 - Value = 10 - end - end - object DBGrid1: TDBGrid - Left = 0 - Top = 26 - Width = 613 - Height = 96 - Align = alClient - DataSource = DataSource - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object DBNavigator1: TDBNavigator - Left = 0 - Top = 122 - Width = 613 - Height = 22 - DataSource = DataSource - VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel] - Align = alBottom - TabOrder = 2 - end - end - object ParamPanel: TPanel - Left = 613 - Top = 26 - Width = 185 - Height = 144 - Align = alRight - BevelOuter = bvNone - TabOrder = 1 - object vleUpdateData: TValueListEditor - Left = 0 - Top = 0 - Width = 185 - Height = 144 - Align = alClient - TabOrder = 0 - ColWidths = ( - 93 - 86) - end - end - end - object tsSQLGetData: TTabSheet - Caption = 'SQLGetData' - ImageIndex = 6 - object Label11: TLabel - Left = 9 - Top = 33 - Width = 24 - Height = 13 - Caption = 'SQL:' - end - object Label12: TLabel - Left = 9 - Top = 139 - Width = 58 - Height = 13 - Caption = 'MaxRecord:' - end - object Label13: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'AllowExecuteSQL'#39' and '#39'AcquireC' + - 'onnection'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object sqlIncludeSchema: TCheckBox - Left = 9 - Top = 113 - Width = 130 - Height = 17 - Alignment = taLeftJustify - Caption = 'IncludeSchema' - Checked = True - State = cbChecked - TabOrder = 1 - end - object sqlMaxRecords: TSpinEdit - Left = 126 - Top = 134 - Width = 50 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 2 - Value = 10 - end - object memoDQLGetData: TMemo - Left = 126 - Top = 33 - Width = 600 - Height = 75 - Lines.Strings = ( - 'select * from customers') - ScrollBars = ssVertical - TabOrder = 0 - end - end - object tsGetCommandSchema: TTabSheet - Caption = 'GetCommandSchema' - ImageIndex = 5 - object Label5: TLabel - Left = 9 - Top = 37 - Width = 50 - Height = 13 - Caption = 'Command:' - end - object Label3: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = 'Requires that '#39'AllowSchemaAccess'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object cbGetCommandSchema: TComboBox - Left = 126 - Top = 33 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - end - end - object tsExecuteCommand: TTabSheet - Caption = 'ExecuteCommand' - ImageIndex = 3 - object Label9: TLabel - Left = 9 - Top = 37 - Width = 50 - Height = 13 - Caption = 'Command:' - end - object Label10: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'AllowExecuteCommands'#39' and '#39'Acq' + - 'uireConnection'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object cbExecuteCommand: TComboBox - Left = 126 - Top = 33 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - OnChange = cbExecuteCommandChange - end - object vleExecuteCommand: TValueListEditor - Left = 613 - Top = 26 - Width = 185 - Height = 144 - Align = alRight - KeyOptions = [keyUnique] - TabOrder = 1 - TitleCaptions.Strings = ( - 'Parameter' - 'Value') - ColWidths = ( - 81 - 98) - end - end - object tsExecuteCommandEx: TTabSheet - Caption = 'ExecuteCommandEx' - ImageIndex = 8 - object Label20: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'AllowExecuteCommands'#39' and '#39'Acq' + - 'uireConnection'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object Label21: TLabel - Left = 9 - Top = 37 - Width = 50 - Height = 13 - Caption = 'Command:' - end - object cbExecuteCommandEx: TComboBox - Left = 126 - Top = 33 - Width = 145 - Height = 21 - Style = csDropDownList - ItemHeight = 0 - TabOrder = 0 - OnChange = cbExecuteCommandExChange - end - object vleExecuteCommandEx: TValueListEditor - Left = 613 - Top = 26 - Width = 185 - Height = 144 - Align = alRight - KeyOptions = [keyUnique] - TabOrder = 1 - TitleCaptions.Strings = ( - 'Parameter' - 'Value') - ColWidths = ( - 81 - 98) - end - end - object tsSQLExecuteCommand: TTabSheet - Caption = 'SQLExecuteCommand' - ImageIndex = 7 - object Label14: TLabel - Left = 0 - Top = 0 - Width = 798 - Height = 26 - Align = alTop - AutoSize = False - Caption = - 'Requires that '#39'AllowDataAccess'#39', '#39'AllowExecuteSQL'#39' and '#39'AcquireC' + - 'onnection'#39' is enabled on the server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object Label16: TLabel - Left = 9 - Top = 33 - Width = 24 - Height = 13 - Caption = 'SQL:' - end - object MemoSQLExecuteCommand: TMemo - Left = 126 - Top = 33 - Width = 600 - Height = 75 - Lines.Strings = ( - - 'update orders set CustomerID = '#39'AROUT'#39' where CustomerID = '#39'AROUT' + - #39) - ScrollBars = ssVertical - TabOrder = 0 - end - end - end - object RunButton: TButton - Left = 3 - Top = 204 - Width = 139 - Height = 22 - Caption = 'RunButton' - TabOrder = 1 - OnClick = RunButtonClick - end - object Memo: TMemo - Left = 1 - Top = 232 - Width = 806 - Height = 213 - Align = alCustom - Anchors = [akLeft, akTop, akRight, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [] - ParentFont = False - ScrollBars = ssBoth - TabOrder = 2 - end - object ClearLogButton: TButton - Left = 726 - Top = 204 - Width = 75 - Height = 22 - Anchors = [akTop, akRight] - Caption = 'Clear log' - TabOrder = 3 - OnClick = ClearLogButtonClick - end - object Channel: TROWinInetHTTPChannel - ServerLocators = <> - DispatchOptions = [] - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - Left = 10 - Top = 229 - end - object BinMessage: TROBinMessage - Left = 37 - Top = 229 - end - object Service: TRORemoteService - Message = BinMessage - Channel = Channel - ServiceName = 'ServiceMethods_Service' - Left = 92 - Top = 229 - end - object Streamer: TDABinDataStreamer - Left = 65 - Top = 229 - end - object DataSource: TDADataSource - Left = 120 - Top = 229 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.pas deleted file mode 100644 index 86f5ad4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ClientMain.pas +++ /dev/null @@ -1,688 +0,0 @@ -unit ServiceMethods_ClientMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uRORemoteService, uROClient, uROBinMessage, - uROWinInetHttpChannel, uDAScriptingProvider, uDADataTable, - uDACDSDataTable, uDADataStreamer, uDABinAdapter, uDARemoteDataAdapter, - ComCtrls, StdCtrls, ServiceMethodsLibrary_Intf, uDAClasses, uDAInterfaces, - Spin, Grids, ValEdit, DB, DBCtrls, DBGrids, ExtCtrls, Buttons; - -type - TServiceMethods_ClientMainForm = class(TForm) - Channel: TROWinInetHTTPChannel; - BinMessage: TROBinMessage; - Service: TRORemoteService; - Streamer: TDABinDataStreamer; - PageControl: TPageControl; - tsGetSchema: TTabSheet; - tsGetData: TTabSheet; - tsUpdateData: TTabSheet; - tsExecuteCommand: TTabSheet; - tsGetTableSchema: TTabSheet; - tsGetCommandSchema: TTabSheet; - tsSQLGetData: TTabSheet; - tsSQLExecuteCommand: TTabSheet; - Label1: TLabel; - RunButton: TButton; - Memo: TMemo; - cbGetTableSchema: TComboBox; - Label2: TLabel; - Label5: TLabel; - cbGetCommandSchema: TComboBox; - Label6: TLabel; - cbGetData: TComboBox; - Label7: TLabel; - Label8: TLabel; - Label3: TLabel; - cbIncludeSchema: TCheckBox; - Label4: TLabel; - spMaxRecord: TSpinEdit; - cbExecuteCommand: TComboBox; - Label9: TLabel; - vleGetData: TValueListEditor; - vleExecuteCommand: TValueListEditor; - Label10: TLabel; - Label11: TLabel; - sqlIncludeSchema: TCheckBox; - Label12: TLabel; - sqlMaxRecords: TSpinEdit; - Label13: TLabel; - memoDQLGetData: TMemo; - Label14: TLabel; - MemoSQLExecuteCommand: TMemo; - Label16: TLabel; - LogMessage: TLabel; - Panel1: TPanel; - Panel2: TPanel; - Label15: TLabel; - cbUpdateData: TComboBox; - DBGrid1: TDBGrid; - DBNavigator1: TDBNavigator; - DataSource: TDADataSource; - ParamPanel: TPanel; - vleUpdateData: TValueListEditor; - Label17: TLabel; - updateDataMaxRecord: TSpinEdit; - RefreshButton: TBitBtn; - Label19: TLabel; - GetDataUserFilter: TEdit; - Label18: TLabel; - ClearLogButton: TButton; - tsExecuteCommandEx: TTabSheet; - Label20: TLabel; - Label21: TLabel; - cbExecuteCommandEx: TComboBox; - vleExecuteCommandEx: TValueListEditor; - procedure PageControlChange(Sender: TObject); - procedure RunButtonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure cbGetDataChange(Sender: TObject); - procedure cbExecuteCommandChange(Sender: TObject); - procedure cbUpdateDataChange(Sender: TObject); - procedure RefreshButtonClick(Sender: TObject); - procedure ClearLogButtonClick(Sender: TObject); - procedure cbExecuteCommandExChange(Sender: TObject); - private - { Private declarations } - FService: IServiceMethods_Service; - Schema: TDASchema; - procedure Log(Str: string); - procedure FillCB(ACombobox: Tcombobox; AItems: TDASQLCommandCollection); - function isNeedSchema: boolean; - procedure LogDataset(ADataset: TDACDSDataTable); - procedure FillUpdateDataDataset; - public - { Public declarations } - procedure GetSchema; - procedure GetData; - procedure UpdateData; - procedure ExecuteCommand; - procedure ExecuteCommandEx; - procedure GetTableSchema; - procedure GetCommandSchema; - procedure SQLGetData; - procedure SQLExecuteCommand; - end; - -var - ServiceMethods_ClientMainForm: TServiceMethods_ClientMainForm; - -implementation -uses - DataAbstract4_Intf, uDADelta, uROTypes, uROXMLIntf; -{$R *.dfm} - -procedure TServiceMethods_ClientMainForm.PageControlChange( - Sender: TObject); -begin - RunButton.Caption := PageControl.ActivePage.Caption; - isNeedSchema; - if PageControl.ActivePage = tsGetData then cbGetDataChange(cbGetData) - else if PageControl.ActivePage = tsExecuteCommand then cbExecuteCommandChange(cbExecuteCommand) - else if PageControl.ActivePage = tsExecuteCommandEx then cbExecuteCommandExChange(cbExecuteCommandEx) - else if PageControl.ActivePage = tsUpdateData then cbUpdateDataChange(cbUpdateData); - -end; - -procedure TServiceMethods_ClientMainForm.RunButtonClick(Sender: TObject); -begin - if PageControl.ActivePage = tsGetSchema then GetSchema - else if PageControl.ActivePage = tsGetData then GetData - else if PageControl.ActivePage = tsUpdateData then UpdateData - else if PageControl.ActivePage = tsExecuteCommand then ExecuteCommand - else if PageControl.ActivePage = tsExecuteCommandEx then ExecuteCommandEx - else if PageControl.ActivePage = tsGetTableSchema then GetTableSchema - else if PageControl.ActivePage = tsGetCommandSchema then GetCommandSchema - else if PageControl.ActivePage = tsSQLGetData then SQLGetData - else if PageControl.ActivePage = tsSQLExecuteCommand then SQLExecuteCommand - ; - Log(''); -end; - -procedure TServiceMethods_ClientMainForm.ExecuteCommand; -var - aRowsAffacted: integer; - dataparam: DataParameterArray; - i: integer; -begin - if isNeedSchema then Exit; - Log('***ExecuteCommand***'); - try - dataparam := DataParameterArray.Create; - try - for i := 0 to vleExecuteCommand.Strings.Count - 1 do begin - with dataparam.Add do begin - Name := vleExecuteCommand.Keys[i + 1]; - Value := vleExecuteCommand.Values[Name]; - end; - end; - aRowsAffacted := FService.ExecuteCommand(cbExecuteCommand.Text, dataparam); - finally - dataparam.Free; - end; - log('aRowsAffacted:'#9 + intToStr(aRowsAffacted)); - except - on e: Exception do Log(e.Message); - end; - Log('*******************'); -end; - -procedure TServiceMethods_ClientMainForm.GetCommandSchema; -var - str: string; - strArr: StringArray; - doc: IXMLDocument; - List, FieldList: IXMLNodeList; - j, i: integer; - node, ParamsNode, ParamNode: IXMLNode; -begin - if isNeedSchema then Exit; - - Log('***GetCommandSchema***'); - StrArr := StringArray.Create; - try - strArr.Add(cbGetCommandSchema.Text); - try - str := FService.GetCommandSchema(StrArr); - doc := NewROXmlDocument; - doc.New; - doc.XML := str; - List := doc.DocumentNode.GetNodesByName('SchemaCommand'); - for i := 0 to List.Count - 1 do begin - Node := List.Nodes[i]; - if Node = nil then continue; - Log('Command: ' + Node.GetNodeValue('Name', '')); - ParamsNode := Node.GetNodeByName('Params'); - if ParamsNode = nil then Continue; - for j := 0 to ParamsNode.GetAttributeValue('Count', 0) - 1 do begin - ParamNode := ParamsNode.GetNodeByName('Item' + IntToStr(j)); - if ParamNode = nil then Continue; - Log('Params[' + IntToStr(j) + ']: ' + ParamNode.GetNodeValue('Name', '')); - end; - end; - except - on E: Exception do Log(E.Message); - end; - finally - strArr.Free; - end; - Log('********************'); -end; - -procedure TServiceMethods_ClientMainForm.GetData; -var - Stream: TMemoryStream; - CDSDataTable: TDACDSDataTable; - aTableRequestInfoArray: TableRequestInfoArray; - aTableNameArray: StringArray; - i: integer; - aTableRequestInfo: TableRequestInfo; -begin - if isNeedSchema then exit; - Log('***GetData***'); - - aTableNameArray := StringArray.Create; - aTableRequestInfoArray := TableRequestInfoArray.Create; - try - aTableNameArray.Add(cbGetData.Text); - aTableRequestInfo := aTableRequestInfoArray.Add; - with aTableRequestInfo do begin - IncludeSchema := cbIncludeSchema.checked; - MaxRecords := spMaxRecord.Value; - UserFilter := GetDataUserFilter.Text; - for i := 0 to vleGetData.Strings.Count - 1 do - with Parameters.Add do begin - Name := vleGetData.Keys[i + 1]; - Value := vleGetData.Values[Name]; - end; - end; - try - Stream := FService.GetData(aTableNameArray, aTableRequestInfoArray); - if Stream <> nil then try - CDSDataTable := TDACDSDataTable.Create(nil); - try - CDSDataTable.Name := 'TEST'; - CDSDataTable.LocalDataStreamer := Streamer; - CDSDataTable.RemoteFetchEnabled := False; - Streamer.ReadDataset(Stream, CDSDataTable, True); - log('RecordCount:'#9 + intToStr(CDSDataTable.RecordCount)); - Log('FieldCount:'#9 + intToStr(CDSDataTable.FieldCount)); - if (CDSDataTable.FieldCount <> 0) then LogDataset(CDSDataTable); - finally - CDSDataTable.Free; - end; - finally - Stream.Free; - end; - except - on e: Exception do Log(e.Message); - end; - finally - aTableRequestInfoArray.Free; - aTableNameArray.Free; - end; - Log('*************'); -end; - -procedure TServiceMethods_ClientMainForm.GetSchema; -var - i: integer; -begin - cbGetTableSchema.Clear; - cbGetCommandSchema.Clear; - cbGetData.Clear; - - Log('***GetSchema***'); - try - Schema.LoadFromXml(FService.GetSchema('')); - - Log('Datasets.Count:'#9 + IntToStr(Schema.Datasets.Count)); - for i := 0 to Schema.Datasets.Count - 1 do - Log('Datasets[' + IntTostr(i) + ']:'#9 + Schema.Datasets[i].Name); - FillCB(cbGetTableSchema, Schema.Datasets); - FillCB(cbGetData, Schema.Datasets); - FillCB(cbUpdateData, Schema.Datasets); - - Log('Commands.Count:'#9 + IntToStr(Schema.Commands.Count)); - for i := 0 to Schema.Commands.Count - 1 do - Log('Commands[' + IntTostr(i) + ']:'#9 + Schema.Commands[i].Name); - FillCB(cbGetCommandSchema, Schema.Commands); - FillCB(cbExecuteCommand, Schema.Commands); - FillCB(cbExecuteCommandEx, Schema.Commands); - except - on E: Exception do Log(E.Message); - end; - Log('***************'); -end; - -procedure TServiceMethods_ClientMainForm.GetTableSchema; -var - str: string; - strArr: StringArray; - doc: IXMLDocument; - List, FieldList: IXMLNodeList; - j, i: integer; - node, FieldsNode, FieldNode: IXMLNode; -begin - if isNeedSchema then Exit; - Log('***GetTableSchema***'); - StrArr := StringArray.Create; - try - strArr.Add(cbGetTableSchema.Text); - try - str := FService.GetTableSchema(StrArr); - doc := NewROXmlDocument; - doc.New; - doc.XML := str; - List := doc.DocumentNode.GetNodesByName('SchemaDataTable'); - for i := 0 to List.Count - 1 do begin - Node := List.Nodes[i]; - if Node = nil then continue; - Log('table: ' + Node.GetNodeValue('Name', '')); - FieldsNode := Node.GetNodeByName('Fields'); - if FieldsNode = nil then Continue; - for j := 0 to FieldsNode.GetAttributeValue('Count', 0) - 1 do begin - FieldNode := FieldsNode.GetNodeByName('Item' + IntToStr(j)); - if FieldNode = nil then Continue; - Log('Fields[' + IntToStr(j) + ']: ' + FieldNode.GetNodeValue('Name', '')); - end; - end; - except - on E: Exception do Log(E.Message); - end; - finally - strArr.Free; - end; - Log('********************'); -end; - -procedure TServiceMethods_ClientMainForm.SQLExecuteCommand; -var - aRowsAffacted: integer; -begin - Log('***SQLExecuteCommand***'); - try - aRowsAffacted := FService.SQLExecuteCommand(MemoSQLExecuteCommand.Text); - log('aRowsAffacted:'#9 + intToStr(aRowsAffacted)); - except - on e: Exception do Log(e.Message); - end; - Log('*********************'); -end; - -procedure TServiceMethods_ClientMainForm.SQLGetData; -var - Stream: TMemoryStream; - CDSDataTable: TDACDSDataTable; -begin - Log('***SQLGetData***'); - try - Stream := FService.SQLGetData(memoDQLGetData.Text, sqlIncludeSchema.Checked, sqlMaxRecords.Value); - if Stream <> nil then try - CDSDataTable := TDACDSDataTable.Create(nil); - try - CDSDataTable.Name := 'TEST'; - CDSDataTable.LocalDataStreamer := Streamer; - CDSDataTable.RemoteFetchEnabled := False; - Streamer.ReadDataset(Stream, CDSDataTable, True); - log('RecordCount:'#9 + intToStr(CDSDataTable.RecordCount)); - Log('FieldCount:'#9 + intToStr(CDSDataTable.FieldCount)); - if (CDSDataTable.FieldCount <> 0) then LogDataset(CDSDataTable); - finally - CDSDataTable.Free; - end; - finally - Stream.Free; - end; - except - on e: Exception do Log(e.Message); - end; -end; - -procedure TServiceMethods_ClientMainForm.UpdateData; -var - stream1, stream: Binary; - i, j: integer; - -begin - if isNeedSchema then Exit; - if DataSource.DataTable = nil then begin - ShowMessage('Please select dataset from combobox'); - Exit; - end; - Log('***UpdateData***'); - Log('Delta.Count:'#9 + intToStr(DataSource.DataTable.Delta.Count)); - - with DataSource.DataTable.Delta do - for i := 0 to Count - 1 do begin - Log('----- Delta ' + IntToStr(i) + '-----'); - with Changes[i] do - for j := 0 to (LoggedFieldCount - 1) do - Log(LoggedFieldNames[j] + ':'#9 + VarToStr(OldValueByName[LoggedFieldNames[j]]) + ' -> ' + VarToStr(NewValueByName[LoggedFieldNames[j]])); - end; - - stream := binary.Create; - try - Streamer.Initialize(stream, aiWrite); - DataSource.DataTable.WriteDeltaToStream(Streamer); - Streamer.Finalize; - try - stream1 := FService.UpdateData(Stream); - if Stream1 <> nil then try - DataSource.DataTable.Delta.Clear(); - Streamer.Initialize(stream1, aiRead); - DataSource.DataTable.ReadDeltaFromStream(Streamer); - Streamer.Finalize; - DataSource.DataTable.MergeDelta; - finally - Stream1.Free; - end; - except - on e: Exception do Log(e.Message); - end; - finally - Stream.Free; - end; - Log('***************'); -end; - -procedure TServiceMethods_ClientMainForm.Log(Str: string); -begin - Memo.Lines.Add(Str); -end; - -procedure TServiceMethods_ClientMainForm.FormCreate(Sender: TObject); -begin - FService := Service as IServiceMethods_Service; - Schema := TDASchema.Create(nil); -end; - -procedure TServiceMethods_ClientMainForm.FormDestroy(Sender: TObject); -begin - if DataSource.DataTable <> nil then DataSource.DataTable.Free; - Schema.Free; -end; - -procedure TServiceMethods_ClientMainForm.FormShow(Sender: TObject); -begin - PageControl.ActivePage := tsGetSchema; - PageControlChange(PageControl); -end; - -procedure TServiceMethods_ClientMainForm.FillCB(ACombobox: Tcombobox; AItems: TDASQLCommandCollection); -var - i: integer; -begin - ACombobox.Items.Clear; - for i := 0 to AItems.Count - 1 do - ACombobox.Items.Add(AItems[i].Name); - if ACombobox.Items.Count > 0 then ACombobox.ItemIndex := 0; -end; - -function TServiceMethods_ClientMainForm.isNeedSchema: Boolean; -begin - Result := (Schema.Datasets.Count = 0) or (Schema.Commands.Count = 0); - LogMessage.Visible := Result and - (PageControl.ActivePage <> tsGetSchema) and - (PageControl.ActivePage <> tsSQLGetData) and - (PageControl.ActivePage <> tsSQLExecuteCommand); - RunButton.Enabled := not LogMessage.Visible; -end; - -procedure TServiceMethods_ClientMainForm.LogDataset( - ADataset: TDACDSDataTable); -var - i: integer; - s: string; -begin - log(''); - s := ''; - for i := 0 to ADataset.FieldCount - 1 do - s := s + ADataset.Fields[i].Name + #9; - Log(s); - ADataset.first; - while not ADataset.Eof do begin - s := ''; - for i := 0 to ADataset.FieldCount - 1 do - s := s + ADataset.Fields[i].AsString + #9; - Log(s); - ADataset.next; - end; - Log(''); -end; - -procedure TServiceMethods_ClientMainForm.cbGetDataChange(Sender: TObject); -var - fDataset: TDADataset; - i: integer; -begin - vleGetData.Strings.Clear; - try - if cbGetData.text = '' then Exit; - fDataset := Schema.Datasets.DatasetByName(cbGetData.Text); - if fDataset = nil then Exit; - for i := 0 to fDataset.Params.Count - 1 do - if vleGetData.Strings.IndexOfName(fDataset.Params[i].Name) = -1 then - vleGetData.InsertRow(fDataset.Params[i].Name, '', True); - finally - vleGetData.Visible := vleGetData.Strings.Count > 0; - end; - Log('*************SQL**************'); - if fDataset.Statements.Count > 0 then - Log(fDataset.Statements[0].SQL) - else - Log('SQL statement is not found. Probably this table is ExportedDataTable.'); - Log('******************************'); - -end; - -procedure TServiceMethods_ClientMainForm.cbExecuteCommandChange( - Sender: TObject); -var - fcommand: TDASQLCommand; - i: integer; -begin - vleExecuteCommand.Strings.Clear; - try - if cbExecuteCommand.text = '' then Exit; - fcommand := Schema.Commands.SQLCommandByName(cbExecuteCommand.Text); - if fcommand = nil then Exit; - for i := 0 to fcommand.Params.Count - 1 do - if fcommand.Params[i].ParamType in [daptInput, daptInputOutput] then - if vleExecuteCommand.Strings.IndexOfName(fcommand.Params[i].Name) = -1 then - vleExecuteCommand.InsertRow(fcommand.Params[i].Name, '', True); - finally - vleExecuteCommand.Visible := vleExecuteCommand.Strings.Count > 0; - end; - - Log('*************SQL**************'); - Log(fcommand.Statements[0].SQL); - Log('******************************'); - -end; - -procedure TServiceMethods_ClientMainForm.cbUpdateDataChange(Sender: TObject); -var - CDSDataTable: TDACDSDataTable; -var - i: integer; -begin - vleUpdateData.Strings.Clear; - if cbUpdateData.text = '' then Exit; - if DataSource.DataTable = nil then DataSource.DataTable := TDACDSDataTable.Create(nil); - CDSDataTable := TDACDSDataTable(DataSource.DataTable); - Log('Try to get data (call GetData)'); - CDSDataTable.LogicalName := cbUpdateData.Text; - FillUpdateDataDataset; - try - for i := 0 to CDSDataTable.Params.Count - 1 do - if vleUpdateData.Strings.IndexOfName(CDSDataTable.Params[i].Name) = -1 then - vleUpdateData.InsertRow(CDSDataTable.Params[i].Name, '', True); - finally - ParamPanel.Visible := vleUpdateData.Strings.Count > 0; - end; -end; - -procedure TServiceMethods_ClientMainForm.FillUpdateDataDataset; -var - Stream: TMemoryStream; - aTableRequestInfoArray: TableRequestInfoArray; - aTableNameArray: StringArray; - i: integer; - aTableRequestInfo: TableRequestInfo; - CDSDataTable: TDACDSDataTable; -begin - CDSDataTable := TDACDSDataTable(DataSource.DataTable); - if CDSDataTable = nil then Exit; - CDSDataTable.Close; - aTableNameArray := StringArray.Create; - aTableRequestInfoArray := TableRequestInfoArray.Create; - try - aTableNameArray.Add(CDSDataTable.LogicalName); - aTableRequestInfo := aTableRequestInfoArray.Add; - with aTableRequestInfo do begin - IncludeSchema := true; - MaxRecords := updateDataMaxRecord.Value; - UserFilter := ''; - for i := 0 to vleUpdateData.Strings.Count - 1 do - with Parameters.Add do begin - Name := vleUpdateData.Keys[i + 1]; - Value := vleUpdateData.Values[Name]; - end; - end; - try - Stream := FService.GetData(aTableNameArray, aTableRequestInfoArray); - if Stream <> nil then try - CDSDataTable.Name := 'TEST'; - CDSDataTable.LocalDataStreamer := Streamer; - CDSDataTable.RemoteFetchEnabled := False; - Streamer.ReadDataset(Stream, CDSDataTable, True); - finally - Stream.Free; - end; - except - on e: Exception do Log(e.Message); - end; - finally - aTableRequestInfoArray.Free; - aTableNameArray.Free; - end; - CDSDataTable.Open; -end; - -procedure TServiceMethods_ClientMainForm.RefreshButtonClick( - Sender: TObject); -begin - FillUpdateDataDataset; -end; - -procedure TServiceMethods_ClientMainForm.ClearLogButtonClick( - Sender: TObject); -begin - Memo.Lines.Clear; -end; - -procedure TServiceMethods_ClientMainForm.ExecuteCommandEx; -var - aRowsAffacted: integer; - dataparam, outputdataparam: DataParameterArray; - i: integer; -begin - if isNeedSchema then Exit; - Log('***ExecuteCommandEx***'); - try - dataparam := DataParameterArray.Create; - try - for i := 0 to vleExecuteCommandEx.Strings.Count - 1 do begin - with dataparam.Add do begin - Name := vleExecuteCommandEx.Keys[i + 1]; - Value := vleExecuteCommandEx.Values[Name]; - end; - end; - aRowsAffacted := FService.ExecuteCommandEx(cbExecuteCommandEx.Text, dataparam, outputdataparam); - log('aRowsAffacted:'#9 + intToStr(aRowsAffacted)); - Log('Output parameters count:'#9 + IntToStr(outputdataparam.Count)); - for i := 0 to outputdataparam.Count - 1 do - Log(outputdataparam.Items[i].Name + ':'#9 + VarToStr(outputdataparam.Items[i].Value)); - - finally - outputdataparam.Free; - dataparam.Free; - end; - except - on e: Exception do Log(e.Message); - end; - Log('*******************'); -end; - -procedure TServiceMethods_ClientMainForm.cbExecuteCommandExChange( - Sender: TObject); -var - fcommand: TDASQLCommand; - i: integer; -begin - vleExecuteCommandEx.Strings.Clear; - try - if cbExecuteCommandEx.text = '' then Exit; - fcommand := Schema.Commands.SQLCommandByName(cbExecuteCommandEx.Text); - if fcommand = nil then Exit; - for i := 0 to fcommand.Params.Count - 1 do - if fcommand.Params[i].ParamType in [daptInput, daptInputOutput] then - if vleExecuteCommandEx.Strings.IndexOfName(fcommand.Params[i].Name) = -1 then - vleExecuteCommandEx.InsertRow(fcommand.Params[i].Name, '', True); - finally - vleExecuteCommandEx.Visible := vleExecuteCommandEx.Strings.Count > 0; - end; - - Log('*************SQL**************'); - Log(fcommand.Statements[0].SQL); - Log('******************************'); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.bdsproj deleted file mode 100644 index 6364664..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ServiceMethods_Server.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dpr deleted file mode 100644 index 5fd9d20..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dpr +++ /dev/null @@ -1,20 +0,0 @@ -program ServiceMethods_Server; - -uses - uROCOMInit, - Forms, - ServiceMethods_ServerMain in 'ServiceMethods_ServerMain.pas' {ServiceMethods_ServerMainForm}, - ServiceMethodsLibrary_Intf in 'ServiceMethodsLibrary_Intf.pas', - ServiceMethodsLibrary_Invk in 'ServiceMethodsLibrary_Invk.pas', - ServiceMethods_Service_Impl in 'ServiceMethods_Service_Impl.pas' {ServiceMethods_Service: TDataAbstractService}; - -{#ROGEN:ServiceMethodsLibrary.rodl}// RemObjects: Careful, do not remove! -{$R RODLFILE.res} -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TServiceMethods_ServerMainForm, ServiceMethods_ServerMainForm); - Application.Run; -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dproj deleted file mode 100644 index 9cc8b12..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.dproj +++ /dev/null @@ -1,77 +0,0 @@ - - - {e615b2bf-3d4f-42f0-a57b-40e742fbf754} - ServiceMethods_Server.dpr - Debug - AnyCPU - DCC32 - ServiceMethods_Server.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - ServiceMethods_Server.dpr - - - - - - - MainSource - - - - -
ServiceMethods_ServerMainForm
-
- -
ServiceMethods_Service
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.res deleted file mode 100644 index 2435bfa..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Server.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.dfm deleted file mode 100644 index 57f529b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.dfm +++ /dev/null @@ -1,412 +0,0 @@ -object ServiceMethods_ServerMainForm: TServiceMethods_ServerMainForm - Left = 6 - Top = -5 - AutoScroll = False - Caption = 'ServiceMethods Server' - ClientHeight = 389 - ClientWidth = 717 - Color = clBtnFace - Constraints.MinWidth = 725 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object Memo: TMemo - Left = 0 - Top = 186 - Width = 717 - Height = 144 - Align = alCustom - Anchors = [akLeft, akTop, akRight, akBottom] - ScrollBars = ssVertical - TabOrder = 2 - end - object GroupBox1: TGroupBox - Left = 202 - Top = 2 - Width = 514 - Height = 155 - Caption = 'Log events:' - TabOrder = 1 - object cbAfterReleaseConnection: TCheckBox - Left = 341 - Top = 117 - Width = 170 - Height = 17 - Caption = 'AfterReleaseConnection' - Checked = True - State = cbChecked - TabOrder = 20 - end - object cbAfterProcessDeltas: TCheckBox - Left = 341 - Top = 32 - Width = 170 - Height = 17 - Caption = 'AfterProcessDeltas' - TabOrder = 15 - end - object cbAfterGetDatasetSchema: TCheckBox - Left = 161 - Top = 100 - Width = 177 - Height = 17 - Caption = 'AfterGetDatasetSchema' - Checked = True - State = cbChecked - TabOrder = 12 - end - object cbAfterGetDatasetData: TCheckBox - Left = 161 - Top = 83 - Width = 177 - Height = 17 - Caption = 'AfterGetDatasetData' - TabOrder = 11 - end - object cbAfterExecuteCommand: TCheckBox - Left = 341 - Top = 66 - Width = 170 - Height = 17 - Caption = 'AfterExecuteCommand' - TabOrder = 17 - end - object cbAfterAcquireConnection: TCheckBox - Left = 7 - Top = 66 - Width = 150 - Height = 17 - Caption = 'AfterAcquireConnection' - Checked = True - State = cbChecked - TabOrder = 3 - end - object cbBeforeReleaseConnection: TCheckBox - Left = 341 - Top = 100 - Width = 170 - Height = 17 - Caption = 'BeforeReleaseConnection' - Checked = True - State = cbChecked - TabOrder = 19 - end - object cbBeforeProcessDeltas: TCheckBox - Left = 161 - Top = 117 - Width = 177 - Height = 17 - Caption = 'BeforeProcessDeltas' - TabOrder = 13 - end - object cbBeforeGetDatasetSchema: TCheckBox - Left = 161 - Top = 49 - Width = 177 - Height = 17 - Caption = 'BeforeGetDatasetSchema' - Checked = True - State = cbChecked - TabOrder = 9 - end - object cbBeforeGetDatasetData: TCheckBox - Left = 161 - Top = 66 - Width = 177 - Height = 17 - Caption = 'BeforeGetDatasetData' - TabOrder = 10 - end - object cbBeforeExecuteCommand: TCheckBox - Left = 341 - Top = 49 - Width = 170 - Height = 17 - Caption = 'BeforeExecuteCommand' - TabOrder = 16 - end - object cbBeforeAcquireConnection: TCheckBox - Left = 7 - Top = 32 - Width = 150 - Height = 17 - Caption = 'BeforeAcquireConnection' - Checked = True - State = cbChecked - TabOrder = 1 - end - object cbValidateCommandExecution: TCheckBox - Left = 7 - Top = 100 - Width = 150 - Height = 17 - Caption = 'ValidateCommandExecution' - TabOrder = 5 - end - object cbUpdateDataRollBackTransaction: TCheckBox - Left = 161 - Top = 15 - Width = 177 - Height = 17 - Caption = 'UpdateDataRollBackTransaction' - TabOrder = 7 - end - object cbUpdateDataCommitTransaction: TCheckBox - Left = 341 - Top = 83 - Width = 170 - Height = 17 - Caption = 'UpdateDataCommitTransaction' - Checked = True - State = cbChecked - TabOrder = 18 - end - object cbUpdateDataBeginTransaction: TCheckBox - Left = 161 - Top = 32 - Width = 177 - Height = 17 - Caption = 'UpdateDataBeginTransaction' - Checked = True - State = cbChecked - TabOrder = 8 - end - object cbProcessDeltasError: TCheckBox - Left = 341 - Top = 15 - Width = 170 - Height = 17 - Caption = 'ProcessDeltasError' - TabOrder = 14 - end - object cbGetSchemaAsXMLEvent: TCheckBox - Left = 7 - Top = 15 - Width = 150 - Height = 17 - Caption = 'GetSchemaAsXMLEvent' - TabOrder = 0 - end - object cbValidateDatasetAccess: TCheckBox - Left = 7 - Top = 83 - Width = 150 - Height = 17 - Caption = 'ValidateDatasetAccess' - TabOrder = 4 - end - object cbValidateDirectSQLAccess: TCheckBox - Left = 7 - Top = 117 - Width = 150 - Height = 17 - Caption = 'ValidateDirectSQLAccess' - TabOrder = 6 - end - object cbAcquireConnectionFailure: TCheckBox - Left = 7 - Top = 49 - Width = 150 - Height = 17 - Caption = 'AcquireConnectionFailure' - TabOrder = 2 - end - end - object GroupBox2: TGroupBox - Left = 2 - Top = 2 - Width = 197 - Height = 155 - Caption = 'Server options:' - TabOrder = 0 - object cbProcessDeltasErrorRaise: TCheckBox - Left = 5 - Top = 134 - Width = 190 - Height = 17 - Caption = 'Raise ProcessDeltasError' - TabOrder = 7 - end - object cbProcessDeltasWithoutUpdateRules: TCheckBox - Left = 5 - Top = 117 - Width = 187 - Height = 17 - Caption = 'ProcessDeltasWithoutUpdateRules' - TabOrder = 6 - end - object cbAllowExecuteCommands: TCheckBox - Left = 5 - Top = 83 - Width = 190 - Height = 17 - Caption = 'AllowExecuteCommands' - TabOrder = 4 - end - object cbAllowWhereSQL: TCheckBox - Left = 5 - Top = 66 - Width = 190 - Height = 17 - Caption = 'AllowWhereSQL' - TabOrder = 3 - end - object cbAllowExecuteSQL: TCheckBox - Left = 5 - Top = 100 - Width = 190 - Height = 17 - Caption = 'AllowExecuteSQL' - TabOrder = 5 - end - object cbAllowSchemaAccess: TCheckBox - Left = 5 - Top = 15 - Width = 190 - Height = 17 - Caption = 'AllowSchemaAccess' - Checked = True - State = cbChecked - TabOrder = 0 - end - object cbAllowDataAccess: TCheckBox - Left = 5 - Top = 49 - Width = 190 - Height = 17 - Caption = 'AllowDataAccess' - Checked = True - State = cbChecked - TabOrder = 2 - end - object cbAcquireConnection: TCheckBox - Left = 5 - Top = 32 - Width = 190 - Height = 17 - Caption = 'AcquireConnection' - Checked = True - State = cbChecked - TabOrder = 1 - end - end - object CheckAllOptionsButton: TButton - Left = 21 - Top = 161 - Width = 75 - Height = 22 - Caption = 'Check all' - TabOrder = 3 - OnClick = CheckAllOptionsButtonClick - end - object CheckNoneOptionsButton: TButton - Left = 101 - Top = 161 - Width = 75 - Height = 22 - Caption = 'Check none' - TabOrder = 4 - OnClick = CheckNoneOptionsButtonClick - end - object CheckAllEventsButton: TButton - Left = 376 - Top = 160 - Width = 75 - Height = 22 - Caption = 'Check all' - TabOrder = 5 - OnClick = CheckAllEventsButtonClick - end - object CheckNoneEventsButton: TButton - Left = 456 - Top = 160 - Width = 75 - Height = 22 - Caption = 'Check none' - TabOrder = 6 - OnClick = CheckNoneEventsButtonClick - end - object Panel1: TPanel - Left = 0 - Top = 330 - Width = 717 - Height = 59 - Align = alBottom - BevelOuter = bvNone - TabOrder = 7 - DesignSize = ( - 717 - 59) - object DAPoweredByDataAbstractButton2: TDAPoweredByDataAbstractButton - Left = 252 - Top = 6 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object ClearLogButton: TButton - Left = 636 - Top = 3 - Width = 75 - Height = 22 - Anchors = [akTop, akRight] - Caption = 'Clear log' - TabOrder = 0 - OnClick = ClearLogButtonClick - end - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'Northwind' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 6 - Top = 219 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 33 - Top = 219 - end - object ADODriver: TDAADODriver - Left = 117 - Top = 219 - end - object Server: TROIndyHTTPServer - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 61 - Top = 219 - end - object Message: TROBinMessage - Left = 89 - Top = 219 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.pas deleted file mode 100644 index cd5b9cc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_ServerMain.pas +++ /dev/null @@ -1,176 +0,0 @@ -unit ServiceMethods_ServerMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uROPoweredByRemObjectsButton, uDAPoweredByDataAbstractButton, - StdCtrls, SyncObjs, uDAEngine, uDAADODriver, uDADriverManager, uDAClasses, - uROClient, uROBinMessage, uROServer, uROIndyTCPServer, uROIndyHTTPServer, - ExtCtrls; - -type - TServiceMethods_ServerMainForm = class(TForm) - Memo: TMemo; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - Server: TROIndyHTTPServer; - Message: TROBinMessage; - GroupBox1: TGroupBox; - cbAfterReleaseConnection: TCheckBox; - cbAfterProcessDeltas: TCheckBox; - cbAfterGetDatasetSchema: TCheckBox; - cbAfterGetDatasetData: TCheckBox; - cbAfterExecuteCommand: TCheckBox; - cbAfterAcquireConnection: TCheckBox; - cbBeforeReleaseConnection: TCheckBox; - cbBeforeProcessDeltas: TCheckBox; - cbBeforeGetDatasetSchema: TCheckBox; - cbBeforeGetDatasetData: TCheckBox; - cbBeforeExecuteCommand: TCheckBox; - cbBeforeAcquireConnection: TCheckBox; - cbValidateCommandExecution: TCheckBox; - cbUpdateDataRollBackTransaction: TCheckBox; - cbUpdateDataCommitTransaction: TCheckBox; - cbUpdateDataBeginTransaction: TCheckBox; - cbProcessDeltasError: TCheckBox; - cbGetSchemaAsXMLEvent: TCheckBox; - cbValidateDatasetAccess: TCheckBox; - cbValidateDirectSQLAccess: TCheckBox; - cbAcquireConnectionFailure: TCheckBox; - GroupBox2: TGroupBox; - cbProcessDeltasErrorRaise: TCheckBox; - cbProcessDeltasWithoutUpdateRules: TCheckBox; - cbAllowExecuteCommands: TCheckBox; - cbAllowWhereSQL: TCheckBox; - cbAllowExecuteSQL: TCheckBox; - cbAllowSchemaAccess: TCheckBox; - cbAllowDataAccess: TCheckBox; - cbAcquireConnection: TCheckBox; - CheckAllOptionsButton: TButton; - CheckNoneOptionsButton: TButton; - CheckAllEventsButton: TButton; - CheckNoneEventsButton: TButton; - Panel1: TPanel; - DAPoweredByDataAbstractButton2: TDAPoweredByDataAbstractButton; - ClearLogButton: TButton; - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure ClearLogButtonClick(Sender: TObject); - procedure CheckAllOptionsButtonClick(Sender: TObject); - procedure CheckNoneOptionsButtonClick(Sender: TObject); - procedure CheckAllEventsButtonClick(Sender: TObject); - procedure CheckNoneEventsButtonClick(Sender: TObject); - private - { Private declarations } - FcriticalSection: TCriticalSection; - procedure ChangeOptions(Mode: Boolean); - procedure ChangeEvent(Mode: Boolean); - public - { Public declarations } - procedure Log(Str: string); - end; - -var - ServiceMethods_ServerMainForm: TServiceMethods_ServerMainForm; - -implementation - -{$R *.dfm} - -{ TServiceMethods_ServerMainForm } - -procedure TServiceMethods_ServerMainForm.Log(Str: string); -begin - FcriticalSection.Enter; - try - Memo.Lines.Add(Str); - finally - FcriticalSection.Leave; - end; -end; - -procedure TServiceMethods_ServerMainForm.FormCreate(Sender: TObject); -begin - FcriticalSection := TCriticalSection.Create; - - Server.Active := True; -end; - -procedure TServiceMethods_ServerMainForm.FormDestroy(Sender: TObject); -begin - FcriticalSection.Free; -end; - -procedure TServiceMethods_ServerMainForm.ClearLogButtonClick( - Sender: TObject); -begin - FcriticalSection.Enter; - try - Memo.Lines.Clear; - finally - FcriticalSection.Leave; - end; -end; - -procedure TServiceMethods_ServerMainForm.CheckAllOptionsButtonClick(Sender: TObject); -begin - ChangeOptions(True); -end; - -procedure TServiceMethods_ServerMainForm.ChangeOptions(Mode: Boolean); -begin - cbProcessDeltasErrorRaise.Checked := Mode; - cbProcessDeltasWithoutUpdateRules.Checked := Mode; - cbAllowExecuteCommands.Checked := Mode; - cbAllowWhereSQL.Checked := Mode; - cbAllowExecuteSQL.Checked := Mode; - cbAllowSchemaAccess.Checked := Mode; - cbAllowDataAccess.Checked := Mode; - cbAcquireConnection.Checked := Mode; -end; - -procedure TServiceMethods_ServerMainForm.CheckNoneOptionsButtonClick( - Sender: TObject); -begin - ChangeOptions(False); -end; - -procedure TServiceMethods_ServerMainForm.ChangeEvent(Mode: Boolean); -begin - cbAfterReleaseConnection.Checked := Mode; - cbAfterProcessDeltas.Checked := Mode; - cbAfterGetDatasetSchema.Checked := Mode; - cbAfterGetDatasetData.Checked := Mode; - cbAfterExecuteCommand.Checked := Mode; - cbAfterAcquireConnection.Checked := Mode; - cbBeforeReleaseConnection.Checked := Mode; - cbBeforeProcessDeltas.Checked := Mode; - cbBeforeGetDatasetSchema.Checked := Mode; - cbBeforeGetDatasetData.Checked := Mode; - cbBeforeExecuteCommand.Checked := Mode; - cbBeforeAcquireConnection.Checked := Mode; - cbValidateCommandExecution.Checked := Mode; - cbUpdateDataRollBackTransaction.Checked := Mode; - cbUpdateDataCommitTransaction.Checked := Mode; - cbUpdateDataBeginTransaction.Checked := Mode; - cbProcessDeltasError.Checked := Mode; - cbGetSchemaAsXMLEvent.Checked := Mode; - cbValidateDatasetAccess.Checked := Mode; - cbValidateDirectSQLAccess.Checked := Mode; - cbAcquireConnectionFailure.Checked := Mode; -end; - -procedure TServiceMethods_ServerMainForm.CheckAllEventsButtonClick(Sender: TObject); -begin - ChangeEvent(True); -end; - -procedure TServiceMethods_ServerMainForm.CheckNoneEventsButtonClick(Sender: TObject); -begin - ChangeEvent(False); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.dfm deleted file mode 100644 index 8e2e1d7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.dfm +++ /dev/null @@ -1,533 +0,0 @@ -object ServiceMethods_Service: TServiceMethods_Service - OldCreateOrder = True - OnCreate = DataAbstractServiceCreate - OnDestroy = DataAbstractServiceDestroy - OnActivate = DataAbstractServiceActivate - OnDeactivate = DataAbstractServiceDeactivate - AcquireConnection = False - ServiceSchema = DASchema - ServiceDataStreamer = BinDataStreamer - ExportedDataTables = <> - BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection - AfterAcquireConnection = DataAbstractServiceAfterAcquireConnection - BeforeReleaseConnection = DataAbstractServiceBeforeReleaseConnection - AfterReleaseConnection = DataAbstractServiceAfterReleaseConnection - OnAcquireConnectionFailure = DataAbstractServiceAcquireConnectionFailure - BeforeProcessDeltas = DataAbstractServiceBeforeProcessDeltas - AfterProcessDeltas = DataAbstractServiceAfterProcessDeltas - OnProcessDeltasError = DataAbstractServiceProcessDeltasError - BeforeGetDatasetSchema = DataAbstractServiceBeforeGetDatasetSchema - BeforeGetDatasetData = DataAbstractServiceBeforeGetDatasetData - AfterGetDatasetSchema = DataAbstractServiceAfterGetDatasetSchema - AfterGetDatasetData = DataAbstractServiceAfterGetDatasetData - BeforeExecuteCommand = DataAbstractServiceBeforeExecuteCommand - AfterExecuteCommand = DataAbstractServiceAfterExecuteCommand - OnGetSchemaAsXMLEvent = DataAbstractServiceGetSchemaAsXMLEvent - ValidateDatasetAccess = DataAbstractServiceValidateDatasetAccess - ValidateCommandExecution = DataAbstractServiceValidateCommandExecution - ValidateDirectSQLAccess = DataAbstractServiceValidateDirectSQLAccess - OnUpdateDataBeginTransaction = DataAbstractServiceUpdateDataBeginTransaction - OnUpdateDataCommitTransaction = DataAbstractServiceUpdateDataCommitTransaction - OnUpdateDataRollBackTransaction = DataAbstractServiceUpdateDataRollBackTransaction - Left = 160 - Top = 206 - Height = 300 - Width = 300 - object BinDataStreamer: TDABinDataStreamer - Left = 29 - Top = 10 - end - object DASchema: TDASchema - ConnectionManager = ServiceMethods_ServerMainForm.ConnectionManager - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate,' + - ' ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity,' + - ' ShipRegion, ShipPostalCode, ShipCountry FROM Orders Where Custo' + - 'merID = :CustomerID' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datInteger - BlobType = dabtUnknown - LogChanges = False - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - Commands = < - item - Params = < - item - Name = 'CUSTOMERS_CNT' - DataType = datInteger - BlobType = dabtUnknown - ParamType = daptOutput - end> - Statements = < - item - Connection = 'Northwind' - SQL = 'SELECT :CUSTOMERS_CNT = count(*) from customers'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'CustomersCount' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'Northwind' - TargetTable = 'Orders' - SQL = - 'update orders set CustomerID = :CustomerID where CustomerID = :C' + - 'ustomerID'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'UpdateOrders' - end> - RelationShips = <> - UpdateRules = <> - Left = 29 - Top = 55 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.pas deleted file mode 100644 index 8b4f350..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Service Methods/ServiceMethods_Service_Impl.pas +++ /dev/null @@ -1,475 +0,0 @@ -unit ServiceMethods_Service_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} ServiceMethodsLibrary_Intf, uDADataStreamer, uDABinAdapter, - uDAInterfaces, uDABusinessProcessor, uDAClasses; - -type - { TServiceMethods_Service } - TServiceMethods_Service = class(TDataAbstractService, IServiceMethods_Service) - BinDataStreamer: TDABinDataStreamer; - DASchema: TDASchema; - procedure DataAbstractServiceAfterAcquireConnection(aSender: TObject; - const aConnectionName: string; - const aAcquiredConnection: IDAConnection); - procedure DataAbstractServiceAfterExecuteCommand(aSender: TObject; - const aCommand: IDASQLCommand; aRowsAffacted: Integer); - procedure DataAbstractServiceAfterGetDatasetData(aSender: TObject; - const aDataset: IDADataset; const aIncludeSchema: Boolean; - const aMaxRecords: Integer); - procedure DataAbstractServiceAfterGetDatasetSchema(aSender: TObject; - const aDataset: IDADataset); - procedure DataAbstractServiceAfterProcessDeltas(aSender: TObject; - aDeltaStructs: TDADeltaStructList); - procedure DataAbstractServiceAfterReleaseConnection(aSender: TObject; - const aConnectionName: string); - procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; - var aConnectionName: string); - procedure DataAbstractServiceBeforeExecuteCommand(aSender: TObject; - const aCommand: IDASQLCommand); - procedure DataAbstractServiceBeforeGetDatasetData(aSender: TObject; - const aDataset: IDADataset; const aIncludeSchema: Boolean; - const aMaxRecords: Integer); - procedure DataAbstractServiceBeforeGetDatasetSchema(aSender: TObject; - const aDataset: IDADataset); - procedure DataAbstractServiceBeforeProcessDeltas(aSender: TObject; - aDeltaStructs: TDADeltaStructList); - procedure DataAbstractServiceBeforeReleaseConnection(aSender: TObject; - const aConnectionName: string; - const aAcquiredConnection: IDAConnection); - procedure DataAbstractServiceGetSchemaAsXMLEvent(aSender: TObject; - var aSchemaXML: string); - procedure DataAbstractServiceProcessDeltasError(aSender: TObject; - aDeltaStructs: TDADeltaStructList; aError: Exception; - var aDoRaise: Boolean); - procedure DataAbstractServiceUpdateDataBeginTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); - procedure DataAbstractServiceUpdateDataCommitTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); - procedure DataAbstractServiceUpdateDataRollBackTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); - procedure DataAbstractServiceValidateCommandExecution(Sender: TObject; - const aConnection: IDAConnection; const aDatasetName: string; - const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); - procedure DataAbstractServiceValidateDatasetAccess(Sender: TObject; - const aConnection: IDAConnection; const aDatasetName: string; - const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); - procedure DataAbstractServiceValidateDirectSQLAccess(Sender: TObject; - const aConnection: IDAConnection; const aSQLText: string; - const aParamNames: array of string; - const aParamValues: array of Variant; var Allowed: Boolean); - procedure DataAbstractServiceAcquireConnectionFailure(aSender: TObject; - const aConnectionName: string; aError: Exception); - procedure DataAbstractServiceCreate(Sender: TObject); - procedure DataAbstractServiceDestroy(Sender: TObject); - procedure DataAbstractServiceActivate(const aClientID: TGUID; - aSession: TROSession; const aMessage: IROMessage); - procedure DataAbstractServiceDeactivate(const aClientID: TGUID; - aSession: TROSession); - private - procedure Log(Astr: string); - protected - { IServiceMethods_Service methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} ServiceMethodsLibrary_Invk, - ServiceMethods_ServerMain, Variants; - -procedure Create_ServiceMethods_Service(out anInstance: IUnknown); -begin - anInstance := TServiceMethods_Service.Create(nil); -end; - -{ TServiceMethods_Service } - -procedure TServiceMethods_Service.Log(Astr: string); -begin - ServiceMethods_ServerMainForm.Log(Astr); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterAcquireConnection( - aSender: TObject; const aConnectionName: string; - const aAcquiredConnection: IDAConnection); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterAcquireConnection.Checked then Exit; - Log('***AfterAcquireConnection***'); - Log('ConnectionName:'#9 + aConnectionName); - Log('aAcquiredConnection.Name:'#9 + aAcquiredConnection.Name); - Log('aAcquiredConnection.ConnectionString:'#9 + aAcquiredConnection.ConnectionString); - Log('****************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterExecuteCommand( - aSender: TObject; const aCommand: IDASQLCommand; aRowsAffacted: Integer); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterExecuteCommand.Checked then Exit; - Log('***AfterExecuteCommand***'); - Log('aCommand.Name:'#9 + aCommand.Name); - Log('aCommand.SQL:'#9 + aCommand.SQL); - Log('aRowsAffacted:'#9 + IntToStr(aRowsAffacted)); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterGetDatasetData( - aSender: TObject; const aDataset: IDADataset; - const aIncludeSchema: Boolean; const aMaxRecords: Integer); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterGetDatasetData.Checked then Exit; - Log('***AfterGetDatasetData***'); - Log('aDataset.Name:'#9 + aDataset.Name); - Log('aDataset.SQL:'#9 + aDataset.SQL); - Log('aIncludeSchema:'#9 + BoolStr[aIncludeSchema]); - Log('aMaxRecords:'#9 + IntToStr(aMaxRecords)); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterGetDatasetSchema( - aSender: TObject; const aDataset: IDADataset); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterGetDatasetSchema.Checked then Exit; - Log('***AfterGetDatasetSchema***'); - Log('aDataset.Name:'#9 + aDataset.Name); - Log('aDataset.SQL:'#9 + aDataset.SQL); - Log('***************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterProcessDeltas( - aSender: TObject; aDeltaStructs: TDADeltaStructList); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterProcessDeltas.Checked then Exit; - Log('***AfterProcessDeltas***'); - Log('aDeltaStructs.Count:'#9 + IntToStr(aDeltaStructs.Count)); - Log('************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAfterReleaseConnection( - aSender: TObject; const aConnectionName: string); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAfterReleaseConnection.Checked then Exit; - Log('***AfterReleaseConnection***'); - Log('aConnectionName:'#9 + aConnectionName); - Log('****************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeAcquireConnection( - aSender: TObject; var aConnectionName: string); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeAcquireConnection.Checked then Exit; - - Log('***BeforeAcquireConnection***'); - Log('aConnectionName:'#9 + aConnectionName); - Log('************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeExecuteCommand( - aSender: TObject; const aCommand: IDASQLCommand); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeExecuteCommand.Checked then Exit; - Log('***BeforeExecuteCommand***'); - Log('aCommand.Name:'#9 + aCommand.Name); - Log('aCommand.SQL:'#9 + aCommand.SQL); - Log('************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeGetDatasetData( - aSender: TObject; const aDataset: IDADataset; - const aIncludeSchema: Boolean; const aMaxRecords: Integer); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeGetDatasetData.Checked then Exit; - - Log('***BeforeGetDatasetData***'); - Log('aDataset.Name:'#9 + aDataset.Name); - Log('aDataset.SQL:'#9 + aDataset.SQL); - Log('aIncludeSchema:'#9 + BoolStr[aIncludeSchema]); - Log('aMaxRecords:'#9 + IntToStr(aMaxRecords)); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeGetDatasetSchema( - aSender: TObject; const aDataset: IDADataset); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeGetDatasetSchema.Checked then Exit; - - Log('***BeforeGetDatasetSchema***'); - Log('aDataset.Name:'#9 + aDataset.Name); - Log('aDataset.SQL:'#9 + aDataset.SQL); - Log('****************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeProcessDeltas( - aSender: TObject; aDeltaStructs: TDADeltaStructList); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeProcessDeltas.Checked then Exit; - Log('***BeforeProcessDeltas***'); - Log('aDeltaStructs.Count:'#9 + IntToStr(aDeltaStructs.Count)); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceBeforeReleaseConnection( - aSender: TObject; const aConnectionName: string; - const aAcquiredConnection: IDAConnection); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbBeforeReleaseConnection.Checked then Exit; - - Log('***BeforeReleaseConnection***'); - Log('aConnectionName:'#9 + aConnectionName); - Log('aAcquiredConnection.Name:'#9 + aAcquiredConnection.Name); - Log('aAcquiredConnection.ConnectionString:'#9 + aAcquiredConnection.ConnectionString); - Log('*****************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceGetSchemaAsXMLEvent( - aSender: TObject; var aSchemaXML: string); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbGetSchemaAsXMLEvent.Checked then Exit; - - Log('***GetSchemaAsXMLEvent***'); - Log('Length(aSchemaXML):'#9 + intTostr(Length(aSchemaXML))); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceProcessDeltasError( - aSender: TObject; aDeltaStructs: TDADeltaStructList; aError: Exception; - var aDoRaise: Boolean); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbProcessDeltasError.Checked then Exit; - - aDoRaise := ServiceMethods_ServerMainForm.cbProcessDeltasErrorRaise.Checked; - Log('***ProcessDeltasError***'); - Log('aDeltaStructs.Count:'#9 + IntToStr(aDeltaStructs.Count)); - Log('aError.ClassName:'#9 + aError.ClassName); - Log('aError.Message:'#9 + aError.Message); - Log('aDoRaise:'#9 + BoolStr[aDoRaise]); - Log('*************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceUpdateDataBeginTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbUpdateDataBeginTransaction.Checked then Exit; - - Log('***UpdateDataBeginTransaction***'); - Log('aUseDefaultTransactionLogic:'#9 + BoolStr[aUseDefaultTransactionLogic]); - Log('********************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceUpdateDataCommitTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbUpdateDataCommitTransaction.Checked then Exit; - - Log('***UpdateDataCommitTransaction***'); - Log('aUseDefaultTransactionLogic:'#9 + BoolStr[aUseDefaultTransactionLogic]); - Log('*********************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceUpdateDataRollBackTransaction( - Sender: TObject; var aUseDefaultTransactionLogic: Boolean); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbUpdateDataRollBackTransaction.Checked then Exit; - Log('***UpdateDataRollBackTransaction***'); - Log('aUseDefaultTransactionLogic:'#9 + BoolStr[aUseDefaultTransactionLogic]); - Log('***********************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceValidateCommandExecution( - Sender: TObject; const aConnection: IDAConnection; - const aDatasetName: string; const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); -var - i: integer; - SQLCommand: TDASQLCommand; -begin - inherited; - if not ServiceMethods_ServerMainForm.cbValidateCommandExecution.Checked then Exit; - - Log('***ValidateCommandExecution***'); - Log('aConnection.Name:'#9 + aConnection.Name); - Log('aDatasetName:'#9 + aDatasetName); - SQLCommand := aSchema.Commands.SQLCommandByName(aDatasetName); - if (SQLCommand <> nil) and (SQLCommand.Statements.Count > 0) then - Log('Command SQL:'#9 + SQLCommand.Statements[0].SQL); - Log('ParamCount:'#9 + intToStr(1 + ord(High(aParamNames)) - ord(Low(aParamNames)))); - for i := Low(aParamNames) to High(aParamNames) do - Log(#9 + aParamNames[i] + ' = ' + VarToStr(aParamValues[i])); - Log('aSchema.Name:'#9 + aSchema.Name); - Log('Allowed:'#9 + BoolStr[Allowed]); - Log('******************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceValidateDatasetAccess( - Sender: TObject; const aConnection: IDAConnection; - const aDatasetName: string; const aParamNames: array of string; - const aParamValues: array of Variant; aSchema: TDASchema; - var Allowed: Boolean); -var - i: integer; -begin - inherited; - if not ServiceMethods_ServerMainForm.cbValidateDatasetAccess.Checked then Exit; - - Log('***ValidateDatasetAccess***'); - Log('aConnection.Name:'#9 + aConnection.Name); - Log('aDatasetName:'#9 + aDatasetName); - Log('ParamCount:'#9 + intToStr(1 + ord(High(aParamNames)) - ord(Low(aParamNames)))); - for i := Low(aParamNames) to High(aParamNames) do - Log(#9 + aParamNames[i] + ' = ' + VarToStr(aParamValues[i])); - Log('aSchema.Name:'#9 + aSchema.Name); - Log('Allowed:'#9 + BoolStr[Allowed]); - Log('***************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceValidateDirectSQLAccess( - Sender: TObject; const aConnection: IDAConnection; - const aSQLText: string; const aParamNames: array of string; - const aParamValues: array of Variant; var Allowed: Boolean); -var - i: integer; -begin - inherited; - if not ServiceMethods_ServerMainForm.cbValidateDirectSQLAccess.Checked then Exit; - - Log('***ValidateDirectSQLAccess***'); - Log('aConnection.Name:'#9 + aConnection.Name); - Log('aSQLText:'#9 + aSQLText); - Log('ParamCount:'#9 + intToStr(1 + ord(High(aParamNames)) - ord(Low(aParamNames)))); - for i := Low(aParamNames) to High(aParamNames) do - Log(#9 + aParamNames[i] + ' = ' + VarToStr(aParamValues[i])); - Log('Allowed:'#9 + BoolStr[Allowed]); - Log('***************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceAcquireConnectionFailure( - aSender: TObject; const aConnectionName: string; aError: Exception); -begin - inherited; - if not ServiceMethods_ServerMainForm.cbAcquireConnectionFailure.Checked then Exit; - - Log('***AcquireConnectionFailure***'); - Log('aConnectionName:'#9 + aConnectionName); - Log('aError.ClassName:'#9 + aError.ClassName); - Log('aError.Message:'#9 + aError.Message); - Log('******************************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceCreate( - Sender: TObject); -begin - inherited; - AcquireConnection := ServiceMethods_ServerMainForm.cbAcquireConnection.Checked; - AllowDataAccess := ServiceMethods_ServerMainForm.cbAllowDataAccess.Checked; - AllowSchemaAccess := ServiceMethods_ServerMainForm.cbAllowSchemaAccess.Checked; - AllowExecuteSQL := ServiceMethods_ServerMainForm.cbAllowExecuteSQL.Checked; - AllowWhereSQL := ServiceMethods_ServerMainForm.cbAllowWhereSQL.Checked; - AllowExecuteCommands := ServiceMethods_ServerMainForm.cbAllowExecuteCommands.Checked; - ProcessDeltasWithoutUpdateRules := ServiceMethods_ServerMainForm.cbProcessDeltasWithoutUpdateRules.Checked; - - Exit; - - Log('***Create***'); - Log('************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceDestroy( - Sender: TObject); -begin - Exit; - - Log('***Destroy***'); - Log('*************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceActivate( - const aClientID: TGUID; aSession: TROSession; - const aMessage: IROMessage); -begin - Exit; - - Log('***Activate***'); - Log('aClientID:'#9 + GUIDToString(aClientID)); - // Log('aSession:'#9 + aSession.ClassName); - // Log('aError.Message:'#9 + aError.Message); - Log('**************'); - Log(''); -end; - -procedure TServiceMethods_Service.DataAbstractServiceDeactivate( - const aClientID: TGUID; aSession: TROSession); -begin - Exit; - - Log('***Deactivate***'); - Log('aClientID:'#9 + GUIDToString(aClientID)); - Log('****************'); - Log(''); -end; - -initialization - TROClassFactory.Create('ServiceMethods_Service', Create_ServiceMethods_Service, TServiceMethods_Service_Invoker); - -finalization - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.Sample.html deleted file mode 100644 index 4252b3c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.Sample.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - -

- Stored Procedures Sample -

- - -

Purpose

- -

-This example shows how to use the IDAConnection's GetStoredProcedureNames method to retrieve a list of stored procedures for the connection. -
-It also shows how to use IDAConnection's NewCommand to access the IDASQLCommand interface: -

-
    -
  • RefreshParams receives the parameters of this stored procedure.
  • -
  • Execute the stored procedure.
  • -
- -

Examine the Code

-
    -
  • - See the simple code in StoredProceduresMain.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.bdsproj deleted file mode 100644 index 326beb1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - StoredProcedures.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dpr deleted file mode 100644 index 13269b1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program StoredProcedures; - -uses - Forms, - StoredProceduresMain in 'StoredProceduresMain.pas' {StoredProceduresMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TStoredProceduresMainForm, StoredProceduresMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dproj deleted file mode 100644 index 1c4e47d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {d57caf23-caa8-469d-81c2-3f5757a0f663} - StoredProcedures.dpr - Debug - AnyCPU - DCC32 - StoredProcedures.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - StoredProcedures.dpr - - - - - - - MainSource - - -
StoredProceduresMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProcedures.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.dfm deleted file mode 100644 index 1babfef..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.dfm +++ /dev/null @@ -1,197 +0,0 @@ -object StoredProceduresMainForm: TStoredProceduresMainForm - Left = 43 - Top = 144 - AutoScroll = False - Caption = 'Stored Procedure Demo' - ClientHeight = 340 - ClientWidth = 573 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 40 - Top = 16 - Width = 54 - Height = 13 - Caption = 'Connection' - end - object Label2: TLabel - Left = 8 - Top = 48 - Width = 86 - Height = 13 - Caption = 'Stored Procedure:' - end - object Label3: TLabel - Left = 408 - Top = 318 - Width = 28 - Height = 13 - Caption = 'Times' - end - object ExecuteButton: TButton - Left = 240 - Top = 312 - Width = 75 - Height = 25 - Caption = 'Execute' - TabOrder = 5 - OnClick = ExecuteButtonClick - end - object cbConnName: TComboBox - Left = 104 - Top = 12 - Width = 225 - Height = 21 - Style = csDropDownList - ItemHeight = 13 - TabOrder = 0 - end - object cbSPNames: TComboBox - Left = 104 - Top = 44 - Width = 225 - Height = 21 - Style = csDropDownList - ItemHeight = 13 - TabOrder = 2 - end - object ConnectButton: TButton - Left = 336 - Top = 10 - Width = 75 - Height = 25 - Caption = 'Connect' - TabOrder = 1 - OnClick = ConnectButtonClick - end - object ListParamsButton: TButton - Left = 336 - Top = 42 - Width = 75 - Height = 25 - Caption = 'List Params' - TabOrder = 3 - OnClick = ListParamsButtonClick - end - object StringGrid: TStringGrid - Left = 8 - Top = 80 - Width = 561 - Height = 217 - DefaultRowHeight = 16 - FixedCols = 4 - Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing] - TabOrder = 4 - ColWidths = ( - 129 - 67 - 65 - 65 - 201) - end - object SpinEdit: TSpinEdit - Left = 328 - Top = 313 - Width = 73 - Height = 22 - MaxValue = 0 - MinValue = 0 - TabOrder = 6 - Value = 1 - end - object DAConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?Server=localhost;UserID=sa;AuxDriver=SQLOLEDB.1;Database=Nor' + - 'thwind;password=' - Description = 'Borland ADOExpress Connection' - Default = True - Tag = 0 - end - item - Name = 'IBX' - ConnectionString = - 'IBX?Server=;UserID=sysdba;Password=masterkey;Database=C:\Program' + - ' Files\Borland\InterBase\examples\database\Employee.gdb' - Description = 'Borland IBExpress Connection' - Default = False - Tag = 0 - end> - DriverManager = DADriverManager - PoolingEnabled = True - Left = 416 - Top = 16 - end - object DADriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 384 - Top = 16 - end - object DASchema: TDASchema - ConnectionManager = DAConnectionManager - Datasets = <> - Commands = < - item - Params = <> - Statements = < - item - Connection = 'SDAC' - SQL = 'TestOutputParam' - StatementType = stStoredProcedure - ColumnMappings = <> - end - item - Connection = 'ADO' - SQL = 'TestOutputParam' - StatementType = stStoredProcedure - ColumnMappings = <> - end> - Name = 'Execute2' - end - item - Params = < - item - Name = 'InputText' - BlobType = dabtUnknown - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - SQL = - 'DECLARE @RC int'#10'DECLARE @InputText varchar(30)'#10'DECLARE @InputTex' + - 'tLength int'#10'DECLARE @SomethingElse varchar(200)'#10#10'SET @InputText ' + - '= :InputText'#10#10'EXEC @RC = TestOutputParam @InputText, @InputTextL' + - 'ength OUTPUT , @SomethingElse OUTPUT' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Execute1' - end> - RelationShips = <> - UpdateRules = <> - Left = 448 - Top = 16 - end - object DAADODriver1: TDAADODriver - Left = 480 - Top = 16 - end - object DAIBXDriver1: TDAIBXDriver - Left = 480 - Top = 48 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.pas deleted file mode 100644 index 1690f36..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Stored Procedures/StoredProceduresMain.pas +++ /dev/null @@ -1,137 +0,0 @@ -unit StoredProceduresMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDADriverManager, uDAClasses, StdCtrls, uDAInterfaces, - uDAEngine, uDAADODriver, Grids, uDAIBXDriver, - Spin; - -type - TStoredProceduresMainForm = class(TForm) - DADriverManager: TDADriverManager; - ExecuteButton: TButton; - DAADODriver1: TDAADODriver; - Label1: TLabel; - cbConnName: TComboBox; - Label2: TLabel; - cbSPNames: TComboBox; - ConnectButton: TButton; - ListParamsButton: TButton; - StringGrid: TStringGrid; - DAIBXDriver1: TDAIBXDriver; - SpinEdit: TSpinEdit; - Label3: TLabel; - DAConnectionManager: TDAConnectionManager; - DASchema: TDASchema; - procedure ExecuteButtonClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure ConnectButtonClick(Sender: TObject); - procedure ListParamsButtonClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); - private - fConn : IDAConnection; - - procedure CheckConnection; - public - end; - -var - StoredProceduresMainForm: TStoredProceduresMainForm; - -implementation - -uses uROClasses, TypInfo; - -{$R *.dfm} - -procedure TStoredProceduresMainForm.CheckConnection; -begin - Check(fConn=NIL, 'Connect to a database first!'); -end; - -procedure TStoredProceduresMainForm.ExecuteButtonClick(Sender: TObject); -var cmd : IDASQLCommand; - x, i : integer; -begin - CheckConnection; - cmd := fConn.NewCommand(cbSPNames.Text, stStoredProcedure); - cmd.RefreshParams; - - for x := 1 to SpinEdit.Value do begin - for i := 0 to cmd.Params.Count-1 do - if (StringGrid.Cells[4, i+1]<>'') - then cmd.ParamByName(StringGrid.Cells[0, i+1]).AsString := StringGrid.Cells[4, i+1]; - - cmd.Execute; - - for i := 0 to cmd.Params.Count-1 do - StringGrid.Cells[4, i+1] := cmd.ParamByName(StringGrid.Cells[0, i+1]).AsString; - end; -end; - -procedure TStoredProceduresMainForm.FormCreate(Sender: TObject); -var i : integer; -begin - for i := 0 to DAConnectionManager.Connections.Count-1 do - cbConnName.Items.Add(DAConnectionManager.Connections[i].Name); - cbConnName.ItemIndex := 0; -end; - -procedure TStoredProceduresMainForm.ConnectButtonClick(Sender: TObject); -var i : integer; - names : IROStrings; -begin - fConn := DAConnectionManager.NewConnection(cbConnName.Text); - cbSPNames.Items.Clear; - - names := NewROStrings; - fConn.GetStoredProcedureNames(names); - for i := 0 to (names.Count-1) do - cbSPNames.Items.Add(names[i]); - - cbSPNames.ItemIndex := 0; - cbSPNames.DroppedDown := TRUE; - - ListParamsButton.Enabled := cbSPNames.Items.Count>0 -end; - -procedure TStoredProceduresMainForm.ListParamsButtonClick(Sender: TObject); -var i : integer; - cmd : IDASQLCommand; - par : TDAParam; -begin - CheckConnection; - - cmd := fConn.NewCommand(cbSPNames.Text, stStoredProcedure); - cmd.RefreshParams; - - StringGrid.RowCount := cmd.Params.Count+1; - if (StringGrid.RowCount>1) - then StringGrid.FixedRows := 1; - StringGrid.FixedCols := 4; - - StringGrid.Cells[0, 0] := 'Name'; - StringGrid.Cells[1, 0] := 'Type'; - StringGrid.Cells[2, 0] := 'Size'; - StringGrid.Cells[3, 0] := 'Direction'; - StringGrid.Cells[4, 0] := 'Value'; - - for i := 0 to (cmd.Params.Count-1) do begin - par := cmd.Params[i]; - - StringGrid.Cells[0, i+1] := par.Name; - StringGrid.Cells[1, i+1] := GetEnumName(TypeInfo(TDADataType), Ord(par.DataType)); - StringGrid.Cells[2, i+1] := IntToStr(par.Size); - StringGrid.Cells[3, i+1] := GetEnumName(TypeInfo(TDAParamType), Ord(par.ParamType)); - StringGrid.Cells[4, i+1] := ''; - end; -end; - -procedure TStoredProceduresMainForm.FormDestroy(Sender: TObject); -begin - fConn := nil; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/RODLFILE.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/RODLFILE.res deleted file mode 100644 index 6c379af..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/RODLFILE.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaClient_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaClient_Intf.pas deleted file mode 100644 index 0d84abe..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaClient_Intf.pas +++ /dev/null @@ -1,981 +0,0 @@ -unit SampleSchemaClient_Intf; - -interface - -uses - Classes, DB, SysUtils, uROClasses, uDADataTable; - -const - { Data table rules ids - Feel free to change them to something more human readable - but make sure they are unique in the context of your application } - RID_Customers = '{A97B58B8-3C56-413D-BA55-360BCD6ACBEA}'; - RID_Orders = '{63B9B897-D9BC-430C-9D81-C0466A5CD6AD}'; - - { Data table names } - nme_Customers = 'Customers'; - nme_Orders = 'Orders'; - - { Customers fields } - fld_CustomersCustomerID = 'CustomerID'; - fld_CustomersCompanyName = 'CompanyName'; - fld_CustomersContactName = 'ContactName'; - fld_CustomersContactTitle = 'ContactTitle'; - fld_CustomersAddress = 'Address'; - fld_CustomersCity = 'City'; - fld_CustomersRegion = 'Region'; - fld_CustomersPostalCode = 'PostalCode'; - fld_CustomersCountry = 'Country'; - fld_CustomersPhone = 'Phone'; - fld_CustomersFax = 'Fax'; - - { Customers field indexes } - idx_CustomersCustomerID = 0; - idx_CustomersCompanyName = 1; - idx_CustomersContactName = 2; - idx_CustomersContactTitle = 3; - idx_CustomersAddress = 4; - idx_CustomersCity = 5; - idx_CustomersRegion = 6; - idx_CustomersPostalCode = 7; - idx_CustomersCountry = 8; - idx_CustomersPhone = 9; - idx_CustomersFax = 10; - - { Orders fields } - fld_OrdersOrderID = 'OrderID'; - fld_OrdersCustomerID = 'CustomerID'; - fld_OrdersEmployeeID = 'EmployeeID'; - fld_OrdersOrderDate = 'OrderDate'; - fld_OrdersRequiredDate = 'RequiredDate'; - fld_OrdersShippedDate = 'ShippedDate'; - fld_OrdersShipVia = 'ShipVia'; - fld_OrdersFreight = 'Freight'; - fld_OrdersShipName = 'ShipName'; - fld_OrdersShipAddress = 'ShipAddress'; - fld_OrdersShipCity = 'ShipCity'; - fld_OrdersShipRegion = 'ShipRegion'; - fld_OrdersShipPostalCode = 'ShipPostalCode'; - fld_OrdersShipCountry = 'ShipCountry'; - - { Orders field indexes } - idx_OrdersOrderID = 0; - idx_OrdersCustomerID = 1; - idx_OrdersEmployeeID = 2; - idx_OrdersOrderDate = 3; - idx_OrdersRequiredDate = 4; - idx_OrdersShippedDate = 5; - idx_OrdersShipVia = 6; - idx_OrdersFreight = 7; - idx_OrdersShipName = 8; - idx_OrdersShipAddress = 9; - idx_OrdersShipCity = 10; - idx_OrdersShipRegion = 11; - idx_OrdersShipPostalCode = 12; - idx_OrdersShipCountry = 13; - -type - { ICustomers } - ICustomers = interface(IDAStronglyTypedDataTable) - ['{555F0253-7185-47B4-86D9-0CCCF239EBBE}'] - { Property getters and setters } - function GetCustomerIDValue: String; - procedure SetCustomerIDValue(const aValue: String); - function GetCustomerIDIsNull: Boolean; - procedure SetCustomerIDIsNull(const aValue: Boolean); - function GetCompanyNameValue: String; - procedure SetCompanyNameValue(const aValue: String); - function GetCompanyNameIsNull: Boolean; - procedure SetCompanyNameIsNull(const aValue: Boolean); - function GetContactNameValue: String; - procedure SetContactNameValue(const aValue: String); - function GetContactNameIsNull: Boolean; - procedure SetContactNameIsNull(const aValue: Boolean); - function GetContactTitleValue: String; - procedure SetContactTitleValue(const aValue: String); - function GetContactTitleIsNull: Boolean; - procedure SetContactTitleIsNull(const aValue: Boolean); - function GetAddressValue: String; - procedure SetAddressValue(const aValue: String); - function GetAddressIsNull: Boolean; - procedure SetAddressIsNull(const aValue: Boolean); - function GetCityValue: String; - procedure SetCityValue(const aValue: String); - function GetCityIsNull: Boolean; - procedure SetCityIsNull(const aValue: Boolean); - function GetRegionValue: String; - procedure SetRegionValue(const aValue: String); - function GetRegionIsNull: Boolean; - procedure SetRegionIsNull(const aValue: Boolean); - function GetPostalCodeValue: String; - procedure SetPostalCodeValue(const aValue: String); - function GetPostalCodeIsNull: Boolean; - procedure SetPostalCodeIsNull(const aValue: Boolean); - function GetCountryValue: String; - procedure SetCountryValue(const aValue: String); - function GetCountryIsNull: Boolean; - procedure SetCountryIsNull(const aValue: Boolean); - function GetPhoneValue: String; - procedure SetPhoneValue(const aValue: String); - function GetPhoneIsNull: Boolean; - procedure SetPhoneIsNull(const aValue: Boolean); - function GetFaxValue: String; - procedure SetFaxValue(const aValue: String); - function GetFaxIsNull: Boolean; - procedure SetFaxIsNull(const aValue: Boolean); - - - { Properties } - property CustomerID: String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property CompanyName: String read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull: Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property ContactName: String read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull: Boolean read GetContactNameIsNull write SetContactNameIsNull; - property ContactTitle: String read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull: Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property Address: String read GetAddressValue write SetAddressValue; - property AddressIsNull: Boolean read GetAddressIsNull write SetAddressIsNull; - property City: String read GetCityValue write SetCityValue; - property CityIsNull: Boolean read GetCityIsNull write SetCityIsNull; - property Region: String read GetRegionValue write SetRegionValue; - property RegionIsNull: Boolean read GetRegionIsNull write SetRegionIsNull; - property PostalCode: String read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull: Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property Country: String read GetCountryValue write SetCountryValue; - property CountryIsNull: Boolean read GetCountryIsNull write SetCountryIsNull; - property Phone: String read GetPhoneValue write SetPhoneValue; - property PhoneIsNull: Boolean read GetPhoneIsNull write SetPhoneIsNull; - property Fax: String read GetFaxValue write SetFaxValue; - property FaxIsNull: Boolean read GetFaxIsNull write SetFaxIsNull; - end; - - { TCustomersDataTableRules } - TCustomersDataTableRules = class(TDADataTableRules, ICustomers) - private - protected - { Property getters and setters } - function GetCustomerIDValue: String; virtual; - procedure SetCustomerIDValue(const aValue: String); virtual; - function GetCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetCompanyNameValue: String; virtual; - procedure SetCompanyNameValue(const aValue: String); virtual; - function GetCompanyNameIsNull: Boolean; virtual; - procedure SetCompanyNameIsNull(const aValue: Boolean); virtual; - function GetContactNameValue: String; virtual; - procedure SetContactNameValue(const aValue: String); virtual; - function GetContactNameIsNull: Boolean; virtual; - procedure SetContactNameIsNull(const aValue: Boolean); virtual; - function GetContactTitleValue: String; virtual; - procedure SetContactTitleValue(const aValue: String); virtual; - function GetContactTitleIsNull: Boolean; virtual; - procedure SetContactTitleIsNull(const aValue: Boolean); virtual; - function GetAddressValue: String; virtual; - procedure SetAddressValue(const aValue: String); virtual; - function GetAddressIsNull: Boolean; virtual; - procedure SetAddressIsNull(const aValue: Boolean); virtual; - function GetCityValue: String; virtual; - procedure SetCityValue(const aValue: String); virtual; - function GetCityIsNull: Boolean; virtual; - procedure SetCityIsNull(const aValue: Boolean); virtual; - function GetRegionValue: String; virtual; - procedure SetRegionValue(const aValue: String); virtual; - function GetRegionIsNull: Boolean; virtual; - procedure SetRegionIsNull(const aValue: Boolean); virtual; - function GetPostalCodeValue: String; virtual; - procedure SetPostalCodeValue(const aValue: String); virtual; - function GetPostalCodeIsNull: Boolean; virtual; - procedure SetPostalCodeIsNull(const aValue: Boolean); virtual; - function GetCountryValue: String; virtual; - procedure SetCountryValue(const aValue: String); virtual; - function GetCountryIsNull: Boolean; virtual; - procedure SetCountryIsNull(const aValue: Boolean); virtual; - function GetPhoneValue: String; virtual; - procedure SetPhoneValue(const aValue: String); virtual; - function GetPhoneIsNull: Boolean; virtual; - procedure SetPhoneIsNull(const aValue: Boolean); virtual; - function GetFaxValue: String; virtual; - procedure SetFaxValue(const aValue: String); virtual; - function GetFaxIsNull: Boolean; virtual; - procedure SetFaxIsNull(const aValue: Boolean); virtual; - - { Properties } - property CustomerID: String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property CompanyName: String read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull: Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property ContactName: String read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull: Boolean read GetContactNameIsNull write SetContactNameIsNull; - property ContactTitle: String read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull: Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property Address: String read GetAddressValue write SetAddressValue; - property AddressIsNull: Boolean read GetAddressIsNull write SetAddressIsNull; - property City: String read GetCityValue write SetCityValue; - property CityIsNull: Boolean read GetCityIsNull write SetCityIsNull; - property Region: String read GetRegionValue write SetRegionValue; - property RegionIsNull: Boolean read GetRegionIsNull write SetRegionIsNull; - property PostalCode: String read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull: Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property Country: String read GetCountryValue write SetCountryValue; - property CountryIsNull: Boolean read GetCountryIsNull write SetCountryIsNull; - property Phone: String read GetPhoneValue write SetPhoneValue; - property PhoneIsNull: Boolean read GetPhoneIsNull write SetPhoneIsNull; - property Fax: String read GetFaxValue write SetFaxValue; - property FaxIsNull: Boolean read GetFaxIsNull write SetFaxIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - - { IOrders } - IOrders = interface(IDAStronglyTypedDataTable) - ['{50A479DE-60BA-4066-AAEB-B840FC045BBB}'] - { Property getters and setters } - function GetOrderIDValue: Integer; - procedure SetOrderIDValue(const aValue: Integer); - function GetOrderIDIsNull: Boolean; - procedure SetOrderIDIsNull(const aValue: Boolean); - function GetCustomerIDValue: String; - procedure SetCustomerIDValue(const aValue: String); - function GetCustomerIDIsNull: Boolean; - procedure SetCustomerIDIsNull(const aValue: Boolean); - function GetEmployeeIDValue: Integer; - procedure SetEmployeeIDValue(const aValue: Integer); - function GetEmployeeIDIsNull: Boolean; - procedure SetEmployeeIDIsNull(const aValue: Boolean); - function GetOrderDateValue: DateTime; - procedure SetOrderDateValue(const aValue: DateTime); - function GetOrderDateIsNull: Boolean; - procedure SetOrderDateIsNull(const aValue: Boolean); - function GetRequiredDateValue: DateTime; - procedure SetRequiredDateValue(const aValue: DateTime); - function GetRequiredDateIsNull: Boolean; - procedure SetRequiredDateIsNull(const aValue: Boolean); - function GetShippedDateValue: DateTime; - procedure SetShippedDateValue(const aValue: DateTime); - function GetShippedDateIsNull: Boolean; - procedure SetShippedDateIsNull(const aValue: Boolean); - function GetShipViaValue: Integer; - procedure SetShipViaValue(const aValue: Integer); - function GetShipViaIsNull: Boolean; - procedure SetShipViaIsNull(const aValue: Boolean); - function GetFreightValue: Float; - procedure SetFreightValue(const aValue: Float); - function GetFreightIsNull: Boolean; - procedure SetFreightIsNull(const aValue: Boolean); - function GetShipNameValue: String; - procedure SetShipNameValue(const aValue: String); - function GetShipNameIsNull: Boolean; - procedure SetShipNameIsNull(const aValue: Boolean); - function GetShipAddressValue: String; - procedure SetShipAddressValue(const aValue: String); - function GetShipAddressIsNull: Boolean; - procedure SetShipAddressIsNull(const aValue: Boolean); - function GetShipCityValue: String; - procedure SetShipCityValue(const aValue: String); - function GetShipCityIsNull: Boolean; - procedure SetShipCityIsNull(const aValue: Boolean); - function GetShipRegionValue: String; - procedure SetShipRegionValue(const aValue: String); - function GetShipRegionIsNull: Boolean; - procedure SetShipRegionIsNull(const aValue: Boolean); - function GetShipPostalCodeValue: String; - procedure SetShipPostalCodeValue(const aValue: String); - function GetShipPostalCodeIsNull: Boolean; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); - function GetShipCountryValue: String; - procedure SetShipCountryValue(const aValue: String); - function GetShipCountryIsNull: Boolean; - procedure SetShipCountryIsNull(const aValue: Boolean); - - - { Properties } - property OrderID: Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull: Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property CustomerID: String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property EmployeeID: Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull: Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OrderDate: DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull: Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property RequiredDate: DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull: Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property ShippedDate: DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull: Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property ShipVia: Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull: Boolean read GetShipViaIsNull write SetShipViaIsNull; - property Freight: Float read GetFreightValue write SetFreightValue; - property FreightIsNull: Boolean read GetFreightIsNull write SetFreightIsNull; - property ShipName: String read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull: Boolean read GetShipNameIsNull write SetShipNameIsNull; - property ShipAddress: String read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull: Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property ShipCity: String read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull: Boolean read GetShipCityIsNull write SetShipCityIsNull; - property ShipRegion: String read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull: Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property ShipPostalCode: String read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull: Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property ShipCountry: String read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull: Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - end; - - { TOrdersDataTableRules } - TOrdersDataTableRules = class(TDADataTableRules, IOrders) - private - protected - { Property getters and setters } - function GetOrderIDValue: Integer; virtual; - procedure SetOrderIDValue(const aValue: Integer); virtual; - function GetOrderIDIsNull: Boolean; virtual; - procedure SetOrderIDIsNull(const aValue: Boolean); virtual; - function GetCustomerIDValue: String; virtual; - procedure SetCustomerIDValue(const aValue: String); virtual; - function GetCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetEmployeeIDValue: Integer; virtual; - procedure SetEmployeeIDValue(const aValue: Integer); virtual; - function GetEmployeeIDIsNull: Boolean; virtual; - procedure SetEmployeeIDIsNull(const aValue: Boolean); virtual; - function GetOrderDateValue: DateTime; virtual; - procedure SetOrderDateValue(const aValue: DateTime); virtual; - function GetOrderDateIsNull: Boolean; virtual; - procedure SetOrderDateIsNull(const aValue: Boolean); virtual; - function GetRequiredDateValue: DateTime; virtual; - procedure SetRequiredDateValue(const aValue: DateTime); virtual; - function GetRequiredDateIsNull: Boolean; virtual; - procedure SetRequiredDateIsNull(const aValue: Boolean); virtual; - function GetShippedDateValue: DateTime; virtual; - procedure SetShippedDateValue(const aValue: DateTime); virtual; - function GetShippedDateIsNull: Boolean; virtual; - procedure SetShippedDateIsNull(const aValue: Boolean); virtual; - function GetShipViaValue: Integer; virtual; - procedure SetShipViaValue(const aValue: Integer); virtual; - function GetShipViaIsNull: Boolean; virtual; - procedure SetShipViaIsNull(const aValue: Boolean); virtual; - function GetFreightValue: Float; virtual; - procedure SetFreightValue(const aValue: Float); virtual; - function GetFreightIsNull: Boolean; virtual; - procedure SetFreightIsNull(const aValue: Boolean); virtual; - function GetShipNameValue: String; virtual; - procedure SetShipNameValue(const aValue: String); virtual; - function GetShipNameIsNull: Boolean; virtual; - procedure SetShipNameIsNull(const aValue: Boolean); virtual; - function GetShipAddressValue: String; virtual; - procedure SetShipAddressValue(const aValue: String); virtual; - function GetShipAddressIsNull: Boolean; virtual; - procedure SetShipAddressIsNull(const aValue: Boolean); virtual; - function GetShipCityValue: String; virtual; - procedure SetShipCityValue(const aValue: String); virtual; - function GetShipCityIsNull: Boolean; virtual; - procedure SetShipCityIsNull(const aValue: Boolean); virtual; - function GetShipRegionValue: String; virtual; - procedure SetShipRegionValue(const aValue: String); virtual; - function GetShipRegionIsNull: Boolean; virtual; - procedure SetShipRegionIsNull(const aValue: Boolean); virtual; - function GetShipPostalCodeValue: String; virtual; - procedure SetShipPostalCodeValue(const aValue: String); virtual; - function GetShipPostalCodeIsNull: Boolean; virtual; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); virtual; - function GetShipCountryValue: String; virtual; - procedure SetShipCountryValue(const aValue: String); virtual; - function GetShipCountryIsNull: Boolean; virtual; - procedure SetShipCountryIsNull(const aValue: Boolean); virtual; - - { Properties } - property OrderID: Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull: Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property CustomerID: String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull: Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property EmployeeID: Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull: Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OrderDate: DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull: Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property RequiredDate: DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull: Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property ShippedDate: DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull: Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property ShipVia: Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull: Boolean read GetShipViaIsNull write SetShipViaIsNull; - property Freight: Float read GetFreightValue write SetFreightValue; - property FreightIsNull: Boolean read GetFreightIsNull write SetFreightIsNull; - property ShipName: String read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull: Boolean read GetShipNameIsNull write SetShipNameIsNull; - property ShipAddress: String read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull: Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property ShipCity: String read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull: Boolean read GetShipCityIsNull write SetShipCityIsNull; - property ShipRegion: String read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull: Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property ShipPostalCode: String read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull: Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property ShipCountry: String read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull: Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - -implementation - -uses Variants; - -{ TCustomersDataTableRules } -constructor TCustomersDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TCustomersDataTableRules.Destroy; -begin - inherited; -end; - -function TCustomersDataTableRules.GetCustomerIDValue: String; -begin - result := DataTable.Fields[idx_CustomersCustomerID].AsString; -end; - -procedure TCustomersDataTableRules.SetCustomerIDValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersCustomerID].AsString := aValue; -end; - -function TCustomersDataTableRules.GetCustomerIDIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCustomerID].IsNull; -end; - -procedure TCustomersDataTableRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCustomerID].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCompanyNameValue: String; -begin - result := DataTable.Fields[idx_CustomersCompanyName].AsString; -end; - -procedure TCustomersDataTableRules.SetCompanyNameValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersCompanyName].AsString := aValue; -end; - -function TCustomersDataTableRules.GetCompanyNameIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCompanyName].IsNull; -end; - -procedure TCustomersDataTableRules.SetCompanyNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCompanyName].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetContactNameValue: String; -begin - result := DataTable.Fields[idx_CustomersContactName].AsString; -end; - -procedure TCustomersDataTableRules.SetContactNameValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersContactName].AsString := aValue; -end; - -function TCustomersDataTableRules.GetContactNameIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersContactName].IsNull; -end; - -procedure TCustomersDataTableRules.SetContactNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersContactName].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetContactTitleValue: String; -begin - result := DataTable.Fields[idx_CustomersContactTitle].AsString; -end; - -procedure TCustomersDataTableRules.SetContactTitleValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersContactTitle].AsString := aValue; -end; - -function TCustomersDataTableRules.GetContactTitleIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersContactTitle].IsNull; -end; - -procedure TCustomersDataTableRules.SetContactTitleIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersContactTitle].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetAddressValue: String; -begin - result := DataTable.Fields[idx_CustomersAddress].AsString; -end; - -procedure TCustomersDataTableRules.SetAddressValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersAddress].AsString := aValue; -end; - -function TCustomersDataTableRules.GetAddressIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersAddress].IsNull; -end; - -procedure TCustomersDataTableRules.SetAddressIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersAddress].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCityValue: String; -begin - result := DataTable.Fields[idx_CustomersCity].AsString; -end; - -procedure TCustomersDataTableRules.SetCityValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersCity].AsString := aValue; -end; - -function TCustomersDataTableRules.GetCityIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCity].IsNull; -end; - -procedure TCustomersDataTableRules.SetCityIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCity].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetRegionValue: String; -begin - result := DataTable.Fields[idx_CustomersRegion].AsString; -end; - -procedure TCustomersDataTableRules.SetRegionValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersRegion].AsString := aValue; -end; - -function TCustomersDataTableRules.GetRegionIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersRegion].IsNull; -end; - -procedure TCustomersDataTableRules.SetRegionIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersRegion].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetPostalCodeValue: String; -begin - result := DataTable.Fields[idx_CustomersPostalCode].AsString; -end; - -procedure TCustomersDataTableRules.SetPostalCodeValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersPostalCode].AsString := aValue; -end; - -function TCustomersDataTableRules.GetPostalCodeIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersPostalCode].IsNull; -end; - -procedure TCustomersDataTableRules.SetPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersPostalCode].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetCountryValue: String; -begin - result := DataTable.Fields[idx_CustomersCountry].AsString; -end; - -procedure TCustomersDataTableRules.SetCountryValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersCountry].AsString := aValue; -end; - -function TCustomersDataTableRules.GetCountryIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersCountry].IsNull; -end; - -procedure TCustomersDataTableRules.SetCountryIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersCountry].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetPhoneValue: String; -begin - result := DataTable.Fields[idx_CustomersPhone].AsString; -end; - -procedure TCustomersDataTableRules.SetPhoneValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersPhone].AsString := aValue; -end; - -function TCustomersDataTableRules.GetPhoneIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersPhone].IsNull; -end; - -procedure TCustomersDataTableRules.SetPhoneIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersPhone].AsVariant := Null; -end; - -function TCustomersDataTableRules.GetFaxValue: String; -begin - result := DataTable.Fields[idx_CustomersFax].AsString; -end; - -procedure TCustomersDataTableRules.SetFaxValue(const aValue: String); -begin - DataTable.Fields[idx_CustomersFax].AsString := aValue; -end; - -function TCustomersDataTableRules.GetFaxIsNull: boolean; -begin - result := DataTable.Fields[idx_CustomersFax].IsNull; -end; - -procedure TCustomersDataTableRules.SetFaxIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_CustomersFax].AsVariant := Null; -end; - - -{ TOrdersDataTableRules } -constructor TOrdersDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TOrdersDataTableRules.Destroy; -begin - inherited; -end; - -function TOrdersDataTableRules.GetOrderIDValue: Integer; -begin - result := DataTable.Fields[idx_OrdersOrderID].AsInteger; -end; - -procedure TOrdersDataTableRules.SetOrderIDValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersOrderID].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetOrderIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersOrderID].IsNull; -end; - -procedure TOrdersDataTableRules.SetOrderIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersOrderID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetCustomerIDValue: String; -begin - result := DataTable.Fields[idx_OrdersCustomerID].AsString; -end; - -procedure TOrdersDataTableRules.SetCustomerIDValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersCustomerID].AsString := aValue; -end; - -function TOrdersDataTableRules.GetCustomerIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersCustomerID].IsNull; -end; - -procedure TOrdersDataTableRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersCustomerID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetEmployeeIDValue: Integer; -begin - result := DataTable.Fields[idx_OrdersEmployeeID].AsInteger; -end; - -procedure TOrdersDataTableRules.SetEmployeeIDValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersEmployeeID].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetEmployeeIDIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersEmployeeID].IsNull; -end; - -procedure TOrdersDataTableRules.SetEmployeeIDIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersEmployeeID].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetOrderDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersOrderDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetOrderDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersOrderDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetOrderDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersOrderDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetOrderDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersOrderDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetRequiredDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersRequiredDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetRequiredDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersRequiredDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetRequiredDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersRequiredDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetRequiredDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersRequiredDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShippedDateValue: DateTime; -begin - result := DataTable.Fields[idx_OrdersShippedDate].AsDateTime; -end; - -procedure TOrdersDataTableRules.SetShippedDateValue(const aValue: DateTime); -begin - DataTable.Fields[idx_OrdersShippedDate].AsDateTime := aValue; -end; - -function TOrdersDataTableRules.GetShippedDateIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShippedDate].IsNull; -end; - -procedure TOrdersDataTableRules.SetShippedDateIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShippedDate].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipViaValue: Integer; -begin - result := DataTable.Fields[idx_OrdersShipVia].AsInteger; -end; - -procedure TOrdersDataTableRules.SetShipViaValue(const aValue: Integer); -begin - DataTable.Fields[idx_OrdersShipVia].AsInteger := aValue; -end; - -function TOrdersDataTableRules.GetShipViaIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipVia].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipViaIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipVia].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetFreightValue: Float; -begin - result := DataTable.Fields[idx_OrdersFreight].AsFloat; -end; - -procedure TOrdersDataTableRules.SetFreightValue(const aValue: Float); -begin - DataTable.Fields[idx_OrdersFreight].AsFloat := aValue; -end; - -function TOrdersDataTableRules.GetFreightIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersFreight].IsNull; -end; - -procedure TOrdersDataTableRules.SetFreightIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersFreight].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipNameValue: String; -begin - result := DataTable.Fields[idx_OrdersShipName].AsString; -end; - -procedure TOrdersDataTableRules.SetShipNameValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipName].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipNameIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipName].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipNameIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipName].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipAddressValue: String; -begin - result := DataTable.Fields[idx_OrdersShipAddress].AsString; -end; - -procedure TOrdersDataTableRules.SetShipAddressValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipAddress].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipAddressIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipAddress].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipAddressIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipAddress].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipCityValue: String; -begin - result := DataTable.Fields[idx_OrdersShipCity].AsString; -end; - -procedure TOrdersDataTableRules.SetShipCityValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipCity].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipCityIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipCity].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipCityIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipCity].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipRegionValue: String; -begin - result := DataTable.Fields[idx_OrdersShipRegion].AsString; -end; - -procedure TOrdersDataTableRules.SetShipRegionValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipRegion].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipRegionIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipRegion].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipRegionIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipRegion].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipPostalCodeValue: String; -begin - result := DataTable.Fields[idx_OrdersShipPostalCode].AsString; -end; - -procedure TOrdersDataTableRules.SetShipPostalCodeValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipPostalCode].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipPostalCodeIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipPostalCode].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipPostalCode].AsVariant := Null; -end; - -function TOrdersDataTableRules.GetShipCountryValue: String; -begin - result := DataTable.Fields[idx_OrdersShipCountry].AsString; -end; - -procedure TOrdersDataTableRules.SetShipCountryValue(const aValue: String); -begin - DataTable.Fields[idx_OrdersShipCountry].AsString := aValue; -end; - -function TOrdersDataTableRules.GetShipCountryIsNull: boolean; -begin - result := DataTable.Fields[idx_OrdersShipCountry].IsNull; -end; - -procedure TOrdersDataTableRules.SetShipCountryIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_OrdersShipCountry].AsVariant := Null; -end; - - -initialization - RegisterDataTableRules(RID_Customers, TCustomersDataTableRules); - RegisterDataTableRules(RID_Orders, TOrdersDataTableRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaServer_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaServer_Intf.pas deleted file mode 100644 index b75371d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/SampleSchemaServer_Intf.pas +++ /dev/null @@ -1,1168 +0,0 @@ -unit SampleSchemaServer_Intf; - -interface - -uses - Classes, DB, SysUtils, uROClasses, uDADataTable, uDABusinessProcessor, SampleSchemaClient_Intf; - -const - { Delta rules ids - Feel free to change them to something more human readable - but make sure they are unique in the context of your application } - RID_CustomersDelta = '{79206377-2D23-4B53-84A3-AA445FF02FA8}'; - RID_OrdersDelta = '{AD299B05-275D-495E-8036-3B383CDA5248}'; - -type - { ICustomersDelta } - ICustomersDelta = interface(ICustomers) - ['{79206377-2D23-4B53-84A3-AA445FF02FA8}'] - { Property getters and setters } - function GetOldCustomerIDValue : String; - function GetOldCompanyNameValue : String; - function GetOldContactNameValue : String; - function GetOldContactTitleValue : String; - function GetOldAddressValue : String; - function GetOldCityValue : String; - function GetOldRegionValue : String; - function GetOldPostalCodeValue : String; - function GetOldCountryValue : String; - function GetOldPhoneValue : String; - function GetOldFaxValue : String; - - { Properties } - property OldCustomerID : String read GetOldCustomerIDValue; - property OldCompanyName : String read GetOldCompanyNameValue; - property OldContactName : String read GetOldContactNameValue; - property OldContactTitle : String read GetOldContactTitleValue; - property OldAddress : String read GetOldAddressValue; - property OldCity : String read GetOldCityValue; - property OldRegion : String read GetOldRegionValue; - property OldPostalCode : String read GetOldPostalCodeValue; - property OldCountry : String read GetOldCountryValue; - property OldPhone : String read GetOldPhoneValue; - property OldFax : String read GetOldFaxValue; - end; - - { TCustomersBusinessProcessorRules } - TCustomersBusinessProcessorRules = class(TDABusinessProcessorRules, ICustomers, ICustomersDelta) - private - protected - { Property getters and setters } - function GetCustomerIDValue: String; virtual; - function GetCustomerIDIsNull: Boolean; virtual; - function GetOldCustomerIDValue: String; virtual; - function GetOldCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDValue(const aValue: String); virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetCompanyNameValue: String; virtual; - function GetCompanyNameIsNull: Boolean; virtual; - function GetOldCompanyNameValue: String; virtual; - function GetOldCompanyNameIsNull: Boolean; virtual; - procedure SetCompanyNameValue(const aValue: String); virtual; - procedure SetCompanyNameIsNull(const aValue: Boolean); virtual; - function GetContactNameValue: String; virtual; - function GetContactNameIsNull: Boolean; virtual; - function GetOldContactNameValue: String; virtual; - function GetOldContactNameIsNull: Boolean; virtual; - procedure SetContactNameValue(const aValue: String); virtual; - procedure SetContactNameIsNull(const aValue: Boolean); virtual; - function GetContactTitleValue: String; virtual; - function GetContactTitleIsNull: Boolean; virtual; - function GetOldContactTitleValue: String; virtual; - function GetOldContactTitleIsNull: Boolean; virtual; - procedure SetContactTitleValue(const aValue: String); virtual; - procedure SetContactTitleIsNull(const aValue: Boolean); virtual; - function GetAddressValue: String; virtual; - function GetAddressIsNull: Boolean; virtual; - function GetOldAddressValue: String; virtual; - function GetOldAddressIsNull: Boolean; virtual; - procedure SetAddressValue(const aValue: String); virtual; - procedure SetAddressIsNull(const aValue: Boolean); virtual; - function GetCityValue: String; virtual; - function GetCityIsNull: Boolean; virtual; - function GetOldCityValue: String; virtual; - function GetOldCityIsNull: Boolean; virtual; - procedure SetCityValue(const aValue: String); virtual; - procedure SetCityIsNull(const aValue: Boolean); virtual; - function GetRegionValue: String; virtual; - function GetRegionIsNull: Boolean; virtual; - function GetOldRegionValue: String; virtual; - function GetOldRegionIsNull: Boolean; virtual; - procedure SetRegionValue(const aValue: String); virtual; - procedure SetRegionIsNull(const aValue: Boolean); virtual; - function GetPostalCodeValue: String; virtual; - function GetPostalCodeIsNull: Boolean; virtual; - function GetOldPostalCodeValue: String; virtual; - function GetOldPostalCodeIsNull: Boolean; virtual; - procedure SetPostalCodeValue(const aValue: String); virtual; - procedure SetPostalCodeIsNull(const aValue: Boolean); virtual; - function GetCountryValue: String; virtual; - function GetCountryIsNull: Boolean; virtual; - function GetOldCountryValue: String; virtual; - function GetOldCountryIsNull: Boolean; virtual; - procedure SetCountryValue(const aValue: String); virtual; - procedure SetCountryIsNull(const aValue: Boolean); virtual; - function GetPhoneValue: String; virtual; - function GetPhoneIsNull: Boolean; virtual; - function GetOldPhoneValue: String; virtual; - function GetOldPhoneIsNull: Boolean; virtual; - procedure SetPhoneValue(const aValue: String); virtual; - procedure SetPhoneIsNull(const aValue: Boolean); virtual; - function GetFaxValue: String; virtual; - function GetFaxIsNull: Boolean; virtual; - function GetOldFaxValue: String; virtual; - function GetOldFaxIsNull: Boolean; virtual; - procedure SetFaxValue(const aValue: String); virtual; - procedure SetFaxIsNull(const aValue: Boolean); virtual; - - { Properties } - property CustomerID : String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull : Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property OldCustomerID : String read GetOldCustomerIDValue; - property OldCustomerIDIsNull : Boolean read GetOldCustomerIDIsNull; - property CompanyName : String read GetCompanyNameValue write SetCompanyNameValue; - property CompanyNameIsNull : Boolean read GetCompanyNameIsNull write SetCompanyNameIsNull; - property OldCompanyName : String read GetOldCompanyNameValue; - property OldCompanyNameIsNull : Boolean read GetOldCompanyNameIsNull; - property ContactName : String read GetContactNameValue write SetContactNameValue; - property ContactNameIsNull : Boolean read GetContactNameIsNull write SetContactNameIsNull; - property OldContactName : String read GetOldContactNameValue; - property OldContactNameIsNull : Boolean read GetOldContactNameIsNull; - property ContactTitle : String read GetContactTitleValue write SetContactTitleValue; - property ContactTitleIsNull : Boolean read GetContactTitleIsNull write SetContactTitleIsNull; - property OldContactTitle : String read GetOldContactTitleValue; - property OldContactTitleIsNull : Boolean read GetOldContactTitleIsNull; - property Address : String read GetAddressValue write SetAddressValue; - property AddressIsNull : Boolean read GetAddressIsNull write SetAddressIsNull; - property OldAddress : String read GetOldAddressValue; - property OldAddressIsNull : Boolean read GetOldAddressIsNull; - property City : String read GetCityValue write SetCityValue; - property CityIsNull : Boolean read GetCityIsNull write SetCityIsNull; - property OldCity : String read GetOldCityValue; - property OldCityIsNull : Boolean read GetOldCityIsNull; - property Region : String read GetRegionValue write SetRegionValue; - property RegionIsNull : Boolean read GetRegionIsNull write SetRegionIsNull; - property OldRegion : String read GetOldRegionValue; - property OldRegionIsNull : Boolean read GetOldRegionIsNull; - property PostalCode : String read GetPostalCodeValue write SetPostalCodeValue; - property PostalCodeIsNull : Boolean read GetPostalCodeIsNull write SetPostalCodeIsNull; - property OldPostalCode : String read GetOldPostalCodeValue; - property OldPostalCodeIsNull : Boolean read GetOldPostalCodeIsNull; - property Country : String read GetCountryValue write SetCountryValue; - property CountryIsNull : Boolean read GetCountryIsNull write SetCountryIsNull; - property OldCountry : String read GetOldCountryValue; - property OldCountryIsNull : Boolean read GetOldCountryIsNull; - property Phone : String read GetPhoneValue write SetPhoneValue; - property PhoneIsNull : Boolean read GetPhoneIsNull write SetPhoneIsNull; - property OldPhone : String read GetOldPhoneValue; - property OldPhoneIsNull : Boolean read GetOldPhoneIsNull; - property Fax : String read GetFaxValue write SetFaxValue; - property FaxIsNull : Boolean read GetFaxIsNull write SetFaxIsNull; - property OldFax : String read GetOldFaxValue; - property OldFaxIsNull : Boolean read GetOldFaxIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - - { IOrdersDelta } - IOrdersDelta = interface(IOrders) - ['{AD299B05-275D-495E-8036-3B383CDA5248}'] - { Property getters and setters } - function GetOldOrderIDValue : Integer; - function GetOldCustomerIDValue : String; - function GetOldEmployeeIDValue : Integer; - function GetOldOrderDateValue : DateTime; - function GetOldRequiredDateValue : DateTime; - function GetOldShippedDateValue : DateTime; - function GetOldShipViaValue : Integer; - function GetOldFreightValue : Float; - function GetOldShipNameValue : String; - function GetOldShipAddressValue : String; - function GetOldShipCityValue : String; - function GetOldShipRegionValue : String; - function GetOldShipPostalCodeValue : String; - function GetOldShipCountryValue : String; - - { Properties } - property OldOrderID : Integer read GetOldOrderIDValue; - property OldCustomerID : String read GetOldCustomerIDValue; - property OldEmployeeID : Integer read GetOldEmployeeIDValue; - property OldOrderDate : DateTime read GetOldOrderDateValue; - property OldRequiredDate : DateTime read GetOldRequiredDateValue; - property OldShippedDate : DateTime read GetOldShippedDateValue; - property OldShipVia : Integer read GetOldShipViaValue; - property OldFreight : Float read GetOldFreightValue; - property OldShipName : String read GetOldShipNameValue; - property OldShipAddress : String read GetOldShipAddressValue; - property OldShipCity : String read GetOldShipCityValue; - property OldShipRegion : String read GetOldShipRegionValue; - property OldShipPostalCode : String read GetOldShipPostalCodeValue; - property OldShipCountry : String read GetOldShipCountryValue; - end; - - { TOrdersBusinessProcessorRules } - TOrdersBusinessProcessorRules = class(TDABusinessProcessorRules, IOrders, IOrdersDelta) - private - protected - { Property getters and setters } - function GetOrderIDValue: Integer; virtual; - function GetOrderIDIsNull: Boolean; virtual; - function GetOldOrderIDValue: Integer; virtual; - function GetOldOrderIDIsNull: Boolean; virtual; - procedure SetOrderIDValue(const aValue: Integer); virtual; - procedure SetOrderIDIsNull(const aValue: Boolean); virtual; - function GetCustomerIDValue: String; virtual; - function GetCustomerIDIsNull: Boolean; virtual; - function GetOldCustomerIDValue: String; virtual; - function GetOldCustomerIDIsNull: Boolean; virtual; - procedure SetCustomerIDValue(const aValue: String); virtual; - procedure SetCustomerIDIsNull(const aValue: Boolean); virtual; - function GetEmployeeIDValue: Integer; virtual; - function GetEmployeeIDIsNull: Boolean; virtual; - function GetOldEmployeeIDValue: Integer; virtual; - function GetOldEmployeeIDIsNull: Boolean; virtual; - procedure SetEmployeeIDValue(const aValue: Integer); virtual; - procedure SetEmployeeIDIsNull(const aValue: Boolean); virtual; - function GetOrderDateValue: DateTime; virtual; - function GetOrderDateIsNull: Boolean; virtual; - function GetOldOrderDateValue: DateTime; virtual; - function GetOldOrderDateIsNull: Boolean; virtual; - procedure SetOrderDateValue(const aValue: DateTime); virtual; - procedure SetOrderDateIsNull(const aValue: Boolean); virtual; - function GetRequiredDateValue: DateTime; virtual; - function GetRequiredDateIsNull: Boolean; virtual; - function GetOldRequiredDateValue: DateTime; virtual; - function GetOldRequiredDateIsNull: Boolean; virtual; - procedure SetRequiredDateValue(const aValue: DateTime); virtual; - procedure SetRequiredDateIsNull(const aValue: Boolean); virtual; - function GetShippedDateValue: DateTime; virtual; - function GetShippedDateIsNull: Boolean; virtual; - function GetOldShippedDateValue: DateTime; virtual; - function GetOldShippedDateIsNull: Boolean; virtual; - procedure SetShippedDateValue(const aValue: DateTime); virtual; - procedure SetShippedDateIsNull(const aValue: Boolean); virtual; - function GetShipViaValue: Integer; virtual; - function GetShipViaIsNull: Boolean; virtual; - function GetOldShipViaValue: Integer; virtual; - function GetOldShipViaIsNull: Boolean; virtual; - procedure SetShipViaValue(const aValue: Integer); virtual; - procedure SetShipViaIsNull(const aValue: Boolean); virtual; - function GetFreightValue: Float; virtual; - function GetFreightIsNull: Boolean; virtual; - function GetOldFreightValue: Float; virtual; - function GetOldFreightIsNull: Boolean; virtual; - procedure SetFreightValue(const aValue: Float); virtual; - procedure SetFreightIsNull(const aValue: Boolean); virtual; - function GetShipNameValue: String; virtual; - function GetShipNameIsNull: Boolean; virtual; - function GetOldShipNameValue: String; virtual; - function GetOldShipNameIsNull: Boolean; virtual; - procedure SetShipNameValue(const aValue: String); virtual; - procedure SetShipNameIsNull(const aValue: Boolean); virtual; - function GetShipAddressValue: String; virtual; - function GetShipAddressIsNull: Boolean; virtual; - function GetOldShipAddressValue: String; virtual; - function GetOldShipAddressIsNull: Boolean; virtual; - procedure SetShipAddressValue(const aValue: String); virtual; - procedure SetShipAddressIsNull(const aValue: Boolean); virtual; - function GetShipCityValue: String; virtual; - function GetShipCityIsNull: Boolean; virtual; - function GetOldShipCityValue: String; virtual; - function GetOldShipCityIsNull: Boolean; virtual; - procedure SetShipCityValue(const aValue: String); virtual; - procedure SetShipCityIsNull(const aValue: Boolean); virtual; - function GetShipRegionValue: String; virtual; - function GetShipRegionIsNull: Boolean; virtual; - function GetOldShipRegionValue: String; virtual; - function GetOldShipRegionIsNull: Boolean; virtual; - procedure SetShipRegionValue(const aValue: String); virtual; - procedure SetShipRegionIsNull(const aValue: Boolean); virtual; - function GetShipPostalCodeValue: String; virtual; - function GetShipPostalCodeIsNull: Boolean; virtual; - function GetOldShipPostalCodeValue: String; virtual; - function GetOldShipPostalCodeIsNull: Boolean; virtual; - procedure SetShipPostalCodeValue(const aValue: String); virtual; - procedure SetShipPostalCodeIsNull(const aValue: Boolean); virtual; - function GetShipCountryValue: String; virtual; - function GetShipCountryIsNull: Boolean; virtual; - function GetOldShipCountryValue: String; virtual; - function GetOldShipCountryIsNull: Boolean; virtual; - procedure SetShipCountryValue(const aValue: String); virtual; - procedure SetShipCountryIsNull(const aValue: Boolean); virtual; - - { Properties } - property OrderID : Integer read GetOrderIDValue write SetOrderIDValue; - property OrderIDIsNull : Boolean read GetOrderIDIsNull write SetOrderIDIsNull; - property OldOrderID : Integer read GetOldOrderIDValue; - property OldOrderIDIsNull : Boolean read GetOldOrderIDIsNull; - property CustomerID : String read GetCustomerIDValue write SetCustomerIDValue; - property CustomerIDIsNull : Boolean read GetCustomerIDIsNull write SetCustomerIDIsNull; - property OldCustomerID : String read GetOldCustomerIDValue; - property OldCustomerIDIsNull : Boolean read GetOldCustomerIDIsNull; - property EmployeeID : Integer read GetEmployeeIDValue write SetEmployeeIDValue; - property EmployeeIDIsNull : Boolean read GetEmployeeIDIsNull write SetEmployeeIDIsNull; - property OldEmployeeID : Integer read GetOldEmployeeIDValue; - property OldEmployeeIDIsNull : Boolean read GetOldEmployeeIDIsNull; - property OrderDate : DateTime read GetOrderDateValue write SetOrderDateValue; - property OrderDateIsNull : Boolean read GetOrderDateIsNull write SetOrderDateIsNull; - property OldOrderDate : DateTime read GetOldOrderDateValue; - property OldOrderDateIsNull : Boolean read GetOldOrderDateIsNull; - property RequiredDate : DateTime read GetRequiredDateValue write SetRequiredDateValue; - property RequiredDateIsNull : Boolean read GetRequiredDateIsNull write SetRequiredDateIsNull; - property OldRequiredDate : DateTime read GetOldRequiredDateValue; - property OldRequiredDateIsNull : Boolean read GetOldRequiredDateIsNull; - property ShippedDate : DateTime read GetShippedDateValue write SetShippedDateValue; - property ShippedDateIsNull : Boolean read GetShippedDateIsNull write SetShippedDateIsNull; - property OldShippedDate : DateTime read GetOldShippedDateValue; - property OldShippedDateIsNull : Boolean read GetOldShippedDateIsNull; - property ShipVia : Integer read GetShipViaValue write SetShipViaValue; - property ShipViaIsNull : Boolean read GetShipViaIsNull write SetShipViaIsNull; - property OldShipVia : Integer read GetOldShipViaValue; - property OldShipViaIsNull : Boolean read GetOldShipViaIsNull; - property Freight : Float read GetFreightValue write SetFreightValue; - property FreightIsNull : Boolean read GetFreightIsNull write SetFreightIsNull; - property OldFreight : Float read GetOldFreightValue; - property OldFreightIsNull : Boolean read GetOldFreightIsNull; - property ShipName : String read GetShipNameValue write SetShipNameValue; - property ShipNameIsNull : Boolean read GetShipNameIsNull write SetShipNameIsNull; - property OldShipName : String read GetOldShipNameValue; - property OldShipNameIsNull : Boolean read GetOldShipNameIsNull; - property ShipAddress : String read GetShipAddressValue write SetShipAddressValue; - property ShipAddressIsNull : Boolean read GetShipAddressIsNull write SetShipAddressIsNull; - property OldShipAddress : String read GetOldShipAddressValue; - property OldShipAddressIsNull : Boolean read GetOldShipAddressIsNull; - property ShipCity : String read GetShipCityValue write SetShipCityValue; - property ShipCityIsNull : Boolean read GetShipCityIsNull write SetShipCityIsNull; - property OldShipCity : String read GetOldShipCityValue; - property OldShipCityIsNull : Boolean read GetOldShipCityIsNull; - property ShipRegion : String read GetShipRegionValue write SetShipRegionValue; - property ShipRegionIsNull : Boolean read GetShipRegionIsNull write SetShipRegionIsNull; - property OldShipRegion : String read GetOldShipRegionValue; - property OldShipRegionIsNull : Boolean read GetOldShipRegionIsNull; - property ShipPostalCode : String read GetShipPostalCodeValue write SetShipPostalCodeValue; - property ShipPostalCodeIsNull : Boolean read GetShipPostalCodeIsNull write SetShipPostalCodeIsNull; - property OldShipPostalCode : String read GetOldShipPostalCodeValue; - property OldShipPostalCodeIsNull : Boolean read GetOldShipPostalCodeIsNull; - property ShipCountry : String read GetShipCountryValue write SetShipCountryValue; - property ShipCountryIsNull : Boolean read GetShipCountryIsNull write SetShipCountryIsNull; - property OldShipCountry : String read GetOldShipCountryValue; - property OldShipCountryIsNull : Boolean read GetOldShipCountryIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - -implementation - -uses - Variants, uROBinaryHelpers; - -{ TCustomersBusinessProcessorRules } -constructor TCustomersBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TCustomersBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TCustomersBusinessProcessorRules.GetCustomerIDValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID]; -end; - -function TCustomersBusinessProcessorRules.GetCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID]); -end; - -function TCustomersBusinessProcessorRules.GetOldCustomerIDValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCustomerID]; -end; - -function TCustomersBusinessProcessorRules.GetOldCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCustomerID]); -end; - -procedure TCustomersBusinessProcessorRules.SetCustomerIDValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCustomerID] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCompanyNameValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName]; -end; - -function TCustomersBusinessProcessorRules.GetCompanyNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName]); -end; - -function TCustomersBusinessProcessorRules.GetOldCompanyNameValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCompanyName]; -end; - -function TCustomersBusinessProcessorRules.GetOldCompanyNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCompanyName]); -end; - -procedure TCustomersBusinessProcessorRules.SetCompanyNameValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCompanyNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCompanyName] := Null; -end; - -function TCustomersBusinessProcessorRules.GetContactNameValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName]; -end; - -function TCustomersBusinessProcessorRules.GetContactNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName]); -end; - -function TCustomersBusinessProcessorRules.GetOldContactNameValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactName]; -end; - -function TCustomersBusinessProcessorRules.GetOldContactNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactName]); -end; - -procedure TCustomersBusinessProcessorRules.SetContactNameValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetContactNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactName] := Null; -end; - -function TCustomersBusinessProcessorRules.GetContactTitleValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle]; -end; - -function TCustomersBusinessProcessorRules.GetContactTitleIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle]); -end; - -function TCustomersBusinessProcessorRules.GetOldContactTitleValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactTitle]; -end; - -function TCustomersBusinessProcessorRules.GetOldContactTitleIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersContactTitle]); -end; - -procedure TCustomersBusinessProcessorRules.SetContactTitleValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetContactTitleIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersContactTitle] := Null; -end; - -function TCustomersBusinessProcessorRules.GetAddressValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress]; -end; - -function TCustomersBusinessProcessorRules.GetAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress]); -end; - -function TCustomersBusinessProcessorRules.GetOldAddressValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersAddress]; -end; - -function TCustomersBusinessProcessorRules.GetOldAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersAddress]); -end; - -procedure TCustomersBusinessProcessorRules.SetAddressValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetAddressIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersAddress] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCityValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity]; -end; - -function TCustomersBusinessProcessorRules.GetCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity]); -end; - -function TCustomersBusinessProcessorRules.GetOldCityValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCity]; -end; - -function TCustomersBusinessProcessorRules.GetOldCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCity]); -end; - -procedure TCustomersBusinessProcessorRules.SetCityValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCityIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCity] := Null; -end; - -function TCustomersBusinessProcessorRules.GetRegionValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion]; -end; - -function TCustomersBusinessProcessorRules.GetRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion]); -end; - -function TCustomersBusinessProcessorRules.GetOldRegionValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersRegion]; -end; - -function TCustomersBusinessProcessorRules.GetOldRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersRegion]); -end; - -procedure TCustomersBusinessProcessorRules.SetRegionValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetRegionIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersRegion] := Null; -end; - -function TCustomersBusinessProcessorRules.GetPostalCodeValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode]; -end; - -function TCustomersBusinessProcessorRules.GetPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode]); -end; - -function TCustomersBusinessProcessorRules.GetOldPostalCodeValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPostalCode]; -end; - -function TCustomersBusinessProcessorRules.GetOldPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPostalCode]); -end; - -procedure TCustomersBusinessProcessorRules.SetPostalCodeValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPostalCode] := Null; -end; - -function TCustomersBusinessProcessorRules.GetCountryValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry]; -end; - -function TCustomersBusinessProcessorRules.GetCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry]); -end; - -function TCustomersBusinessProcessorRules.GetOldCountryValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCountry]; -end; - -function TCustomersBusinessProcessorRules.GetOldCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersCountry]); -end; - -procedure TCustomersBusinessProcessorRules.SetCountryValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetCountryIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersCountry] := Null; -end; - -function TCustomersBusinessProcessorRules.GetPhoneValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone]; -end; - -function TCustomersBusinessProcessorRules.GetPhoneIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone]); -end; - -function TCustomersBusinessProcessorRules.GetOldPhoneValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPhone]; -end; - -function TCustomersBusinessProcessorRules.GetOldPhoneIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersPhone]); -end; - -procedure TCustomersBusinessProcessorRules.SetPhoneValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetPhoneIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersPhone] := Null; -end; - -function TCustomersBusinessProcessorRules.GetFaxValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax]; -end; - -function TCustomersBusinessProcessorRules.GetFaxIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax]); -end; - -function TCustomersBusinessProcessorRules.GetOldFaxValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersFax]; -end; - -function TCustomersBusinessProcessorRules.GetOldFaxIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_CustomersFax]); -end; - -procedure TCustomersBusinessProcessorRules.SetFaxValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax] := aValue; -end; - -procedure TCustomersBusinessProcessorRules.SetFaxIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_CustomersFax] := Null; -end; - - -{ TOrdersBusinessProcessorRules } -constructor TOrdersBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TOrdersBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TOrdersBusinessProcessorRules.GetOrderIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID]; -end; - -function TOrdersBusinessProcessorRules.GetOrderIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID]); -end; - -function TOrdersBusinessProcessorRules.GetOldOrderIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderID]; -end; - -function TOrdersBusinessProcessorRules.GetOldOrderIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderID]); -end; - -procedure TOrdersBusinessProcessorRules.SetOrderIDValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetOrderIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetCustomerIDValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID]; -end; - -function TOrdersBusinessProcessorRules.GetCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID]); -end; - -function TOrdersBusinessProcessorRules.GetOldCustomerIDValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersCustomerID]; -end; - -function TOrdersBusinessProcessorRules.GetOldCustomerIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersCustomerID]); -end; - -procedure TOrdersBusinessProcessorRules.SetCustomerIDValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetCustomerIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersCustomerID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetEmployeeIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID]; -end; - -function TOrdersBusinessProcessorRules.GetEmployeeIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID]); -end; - -function TOrdersBusinessProcessorRules.GetOldEmployeeIDValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersEmployeeID]; -end; - -function TOrdersBusinessProcessorRules.GetOldEmployeeIDIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersEmployeeID]); -end; - -procedure TOrdersBusinessProcessorRules.SetEmployeeIDValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetEmployeeIDIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersEmployeeID] := Null; -end; - -function TOrdersBusinessProcessorRules.GetOrderDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate]; -end; - -function TOrdersBusinessProcessorRules.GetOrderDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldOrderDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldOrderDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersOrderDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetOrderDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetOrderDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersOrderDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetRequiredDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate]; -end; - -function TOrdersBusinessProcessorRules.GetRequiredDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldRequiredDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersRequiredDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldRequiredDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersRequiredDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetRequiredDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetRequiredDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersRequiredDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShippedDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate]; -end; - -function TOrdersBusinessProcessorRules.GetShippedDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate]); -end; - -function TOrdersBusinessProcessorRules.GetOldShippedDateValue: DateTime; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShippedDate]; -end; - -function TOrdersBusinessProcessorRules.GetOldShippedDateIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShippedDate]); -end; - -procedure TOrdersBusinessProcessorRules.SetShippedDateValue(const aValue: DateTime); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShippedDateIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShippedDate] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipViaValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia]; -end; - -function TOrdersBusinessProcessorRules.GetShipViaIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipViaValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipVia]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipViaIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipVia]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipViaValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipViaIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipVia] := Null; -end; - -function TOrdersBusinessProcessorRules.GetFreightValue: Float; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight]; -end; - -function TOrdersBusinessProcessorRules.GetFreightIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight]); -end; - -function TOrdersBusinessProcessorRules.GetOldFreightValue: Float; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersFreight]; -end; - -function TOrdersBusinessProcessorRules.GetOldFreightIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersFreight]); -end; - -procedure TOrdersBusinessProcessorRules.SetFreightValue(const aValue: Float); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetFreightIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersFreight] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipNameValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName]; -end; - -function TOrdersBusinessProcessorRules.GetShipNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipNameValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipName]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipNameIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipName]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipNameValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipNameIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipName] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipAddressValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress]; -end; - -function TOrdersBusinessProcessorRules.GetShipAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipAddressValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipAddress]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipAddressIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipAddress]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipAddressValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipAddressIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipAddress] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipCityValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity]; -end; - -function TOrdersBusinessProcessorRules.GetShipCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipCityValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCity]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipCityIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCity]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipCityValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipCityIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCity] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipRegionValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion]; -end; - -function TOrdersBusinessProcessorRules.GetShipRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipRegionValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipRegion]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipRegionIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipRegion]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipRegionValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipRegionIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipRegion] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipPostalCodeValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode]; -end; - -function TOrdersBusinessProcessorRules.GetShipPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipPostalCodeValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipPostalCode]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipPostalCodeIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipPostalCode]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipPostalCodeValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipPostalCodeIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipPostalCode] := Null; -end; - -function TOrdersBusinessProcessorRules.GetShipCountryValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry]; -end; - -function TOrdersBusinessProcessorRules.GetShipCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry]); -end; - -function TOrdersBusinessProcessorRules.GetOldShipCountryValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCountry]; -end; - -function TOrdersBusinessProcessorRules.GetOldShipCountryIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_OrdersShipCountry]); -end; - -procedure TOrdersBusinessProcessorRules.SetShipCountryValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry] := aValue; -end; - -procedure TOrdersBusinessProcessorRules.SetShipCountryIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_OrdersShipCountry] := Null; -end; - - -initialization - RegisterBusinessProcessorRules(RID_CustomersDelta, TCustomersBusinessProcessorRules); - RegisterBusinessProcessorRules(RID_OrdersDelta, TOrdersBusinessProcessorRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.Sample.html deleted file mode 100644 index a223583..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.Sample.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - -

- Strongly Typed Sample -

- - -

Purpose

- -

-This example shows usage of business rules. It enforces additional rules that might change over time. This is a good example to show the advantages of a multi-tier architecture: systems can be updated via a server re-deploy without the need to update any client. -

- -

Examine the Code

-
    -
  • - uBizCustomersServer.pas: -this unit contains the business rules handlers for the server application. -It's important to note however that some business rules are shared among clients and servers. For example, customer validation is done by calling the ValidateCustomers function (uBizCustomersClient.pas). Validation is not a requirement but a highly recommended practice, expecially when your system is accessed by clients that were not developed by you (i.e. Java clients accessing your server through SOAP). -
  • -
  • - uBizCustomersClient.pas: -this unit contains the business rules handlers for the client application.
    - The simplest possible implementation just overrides the methods inherited from TDADataTableRules (i.e. AfterInsert, BeforePost). - More sophisticated implementations may add additional functionality and even make it accessible from outside units (i.e. a form or a data module hosting a TDADataTable).
    - TBizCustomersClientRules shows how to do both by overriding a few event handlers and by adding support for the IAdvancedCustomer interface. -
  • -
- -

Note

-Adding interfaces like IAdvancedCustomer is not required to implement extra functionality that is only accessed in the context of a business rule class/unit. You can obviously add any method you want to classes like TBizCustomersClientRules and reference them from other methods in order to make them more "object oriented".
-However, when you need to access this functionality from the outside world you need to define an "access contract" via an interface. You can then treat TDADataTables as IAdvancedCustomer (or whatever other interface you decide to create) by simply using the Supports VCL function. - The bCheckBalanceClick method in fClientForm.pas is an example of this.

-

TDADataTable allows you to access the instance of TBizCustomersClientRules via the BusinessRules property. You could also type cast that property to TBizCustomersClientRules but, in general, the interface approach is cleaner and more elegant. - -

- - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bdsgroup deleted file mode 100644 index cd41e1a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bdsgroup +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - StronglyTypedServer.bdsproj - StronglyTypedClient.bdsproj - StronglyTypedServer.exe StronglyTypedClient.exe - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bpg deleted file mode 100644 index 9eb9328..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = StronglyTypedServer.exe StronglyTypedClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -StronglyTypedServer.exe: StronglyTypedServer.dpr - $(DCC) - -StronglyTypedClient.exe: StronglyTypedClient.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.groupproj deleted file mode 100644 index ea9e40d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTyped.groupproj +++ /dev/null @@ -1,40 +0,0 @@ - - - {4dcc5f31-7535-40c3-93a7-2ad992327e4b} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.bdsproj deleted file mode 100644 index 0357a18..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - StronglyTypedClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dpr deleted file mode 100644 index 0f2d5e6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dpr +++ /dev/null @@ -1,20 +0,0 @@ -program StronglyTypedClient; - -uses - uROComInit, - Forms, - StronglyTypedClientMain in 'StronglyTypedClientMain.pas' {StronglyTypedClientMainForm}, - uBizCustomersClient in 'uBizCustomersClient.pas', - StronglyTypedClientData in 'StronglyTypedClientData.pas' {StronglyTypedClientDataModule: TDAClientDataModule}, - SampleSchemaClient_Intf in 'SampleSchemaClient_Intf.pas', - SampleSchemaServer_Intf in 'SampleSchemaServer_Intf.pas'; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'StronglyTyped Client'; - Application.CreateForm(TStronglyTypedClientDataModule, StronglyTypedClientDataModule); - Application.CreateForm(TStronglyTypedClientMainForm, StronglyTypedClientMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dproj deleted file mode 100644 index 7ac1801..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.dproj +++ /dev/null @@ -1,78 +0,0 @@ - - - {e2da5b2a-47db-4d24-9a88-5aa94ec3dfca} - StronglyTypedClient.dpr - Debug - AnyCPU - DCC32 - StronglyTypedClient.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - StronglyTypedClient.dpr - - - - - - - MainSource - - - - -
StronglyTypedClientDataModule
-
- -
StronglyTypedClientMainForm
-
- -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.res deleted file mode 100644 index da01de5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.dfm deleted file mode 100644 index a1a69ad..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.dfm +++ /dev/null @@ -1,466 +0,0 @@ -object StronglyTypedClientDataModule: TStronglyTypedClientDataModule - OldCreateOrder = True - Height = 300 - Width = 224 - object ROChannel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/bin' - ServerLocators = <> - DispatchOptions = [] - Left = 40 - Top = 8 - end - object ROMessage: TROBinMessage - Left = 40 - Top = 52 - end - object RORemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = 'StronglyTypedService' - Left = 40 - Top = 96 - end - object dtCustomers: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = <> - MasterMappingMode = mmDataRequest - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - BusinessRulesID = 'ClientRules.Customers' - Left = 112 - Top = 56 - end - object dsCustomers: TDADataSource - DataSet = dtCustomers.Dataset - DataTable = dtCustomers - Left = 128 - Top = 72 - end - object dtOrders: TDAMemDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'CustomerID' - DataType = datString - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptInput - end> - MasterParamsMappings.Strings = ( - 'CustomerID=CustomerID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteDataAdapter = RemoteDataAdapter - ReadOnly = False - MasterSource = dsCustomers - MasterFields = 'CustomerID' - DetailFields = 'CustomerID' - MasterRequestMappings.Strings = ( - 'CustomerID=CustomerID') - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Orders' - BusinessRulesID = 'ClientRules.Orders' - Left = 112 - Top = 128 - end - object dsOrders: TDADataSource - DataSet = dtOrders.Dataset - DataTable = dtOrders - Left = 128 - Top = 144 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RORemoteService - GetDataCall.RemoteService = RORemoteService - UpdateDataCall.RemoteService = RORemoteService - GetScriptsCall.RemoteService = RORemoteService - RemoteService = RORemoteService - DataStreamer = Streamer - FailureBehavior = fbBoth - Left = 40 - Top = 200 - end - object Streamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 40 - Top = 152 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.pas deleted file mode 100644 index 65922c7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientData.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit StronglyTypedClientData; - -interface - -uses {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uDADataTable, uDABINAdapter, - uRORemoteService, uROClient, uROBINMessage, - uROWinInetHttpChannel, uDACDSDataTable, - uDAScriptingProvider, uDARemoteDataAdapter, uDADataStreamer, - uDABin2DataStreamer, uDAMemDataTable; - -type - TStronglyTypedClientDataModule = class(TDataModule) - ROChannel: TROWinInetHTTPChannel; - ROMessage: TROBinMessage; - RORemoteService: TRORemoteService; - dtCustomers: TDAMemDataTable; - dsCustomers: TDADataSource; - dtOrders: TDAMemDataTable; - dsOrders: TDADataSource; - RemoteDataAdapter: TDARemoteDataAdapter; - Streamer: TDABin2DataStreamer; - private - { Private declarations } - public - { Public declarations } - end; - -var - StronglyTypedClientDataModule: TStronglyTypedClientDataModule; - -implementation - -{$R *.DFM} - -initialization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.dfm deleted file mode 100644 index 0e4044e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.dfm +++ /dev/null @@ -1,139 +0,0 @@ -object StronglyTypedClientMainForm: TStronglyTypedClientMainForm - Left = 287 - Top = 235 - BorderWidth = 5 - Caption = 'Strongly Typed Client' - ClientHeight = 299 - ClientWidth = 498 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DBGrid1: TDBGrid - Left = 0 - Top = 21 - Width = 498 - Height = 100 - Align = alBottom - Anchors = [akLeft, akTop, akRight, akBottom] - DataSource = StronglyTypedClientDataModule.dsCustomers - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - OnTitleClick = DBGrid1TitleClick - end - object cbRemoteFetch: TCheckBox - Left = 0 - Top = 0 - Width = 136 - Height = 17 - Caption = 'Remote Fetch Enabled' - Checked = True - State = cbChecked - TabOrder = 0 - end - object DBGrid2: TDBGrid - Left = 0 - Top = 191 - Width = 498 - Height = 108 - Align = alBottom - DataSource = StronglyTypedClientDataModule.dsOrders - TabOrder = 3 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object Panel1: TPanel - Left = 0 - Top = 121 - Width = 498 - Height = 70 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - object bCreateTestCustomer: TButton - Left = 1 - Top = 35 - Width = 145 - Height = 25 - Caption = 'Create Test Customer' - TabOrder = 0 - OnClick = bCreateTestCustomerClick - end - object DBNavigator1: TDBNavigator - Left = 0 - Top = 5 - Width = 240 - Height = 25 - DataSource = StronglyTypedClientDataModule.dsCustomers - TabOrder = 1 - end - object BitBtn1: TBitBtn - Left = 240 - Top = 5 - Width = 75 - Height = 25 - Caption = 'Open/Close' - TabOrder = 2 - OnClick = BitBtn1Click - end - object bCheckBalance: TButton - Left = 146 - Top = 35 - Width = 145 - Height = 25 - Caption = 'Check Customer Balance' - TabOrder = 3 - OnClick = bCheckBalanceClick - end - object Button1: TButton - Left = 291 - Top = 35 - Width = 185 - Height = 25 - Caption = 'Create Test Customer with Orders' - TabOrder = 4 - OnClick = Button1Click - end - object bApplyUpdates: TButton - Left = 315 - Top = 5 - Width = 97 - Height = 25 - Caption = 'Apply Updates' - TabOrder = 5 - OnClick = bApplyUpdatesClick - end - end - object ROMessage: TROBinMessage - Left = 148 - Top = 32 - end - object RORemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = 'StronglyTypedService' - Left = 176 - Top = 32 - end - object ROChannel: TROWinInetHTTPChannel - UserAgent = 'RemObjects SDK' - TargetURL = 'http://localhost:8099/BIN' - ServerLocators = <> - DispatchOptions = [] - Left = 120 - Top = 32 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.pas deleted file mode 100644 index 34839a3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedClientMain.pas +++ /dev/null @@ -1,145 +0,0 @@ -unit StronglyTypedClientMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROIndyHTTPChannel, - uROWinInetHttpChannel, DB, uDADataTable, - uDACDSDataTable, Buttons, ExtCtrls, DBCtrls, Grids, - DBGrids ; - -type - TStronglyTypedClientMainForm = class(TForm) - ROMessage: TROBinMessage; - RORemoteService: TRORemoteService; - ROChannel: TROWinInetHTTPChannel; - DBGrid1: TDBGrid; - cbRemoteFetch: TCheckBox; - DBGrid2: TDBGrid; - Panel1: TPanel; - bCreateTestCustomer: TButton; - DBNavigator1: TDBNavigator; - BitBtn1: TBitBtn; - bCheckBalance: TButton; - Button1: TButton; - bApplyUpdates: TButton; - procedure BitBtn1Click(Sender: TObject); - procedure bCheckBalanceClick(Sender: TObject); - procedure bApplyUpdatesClick(Sender: TObject); - procedure bCreateTestCustomerClick(Sender: TObject); - procedure dtCustomersBeforeOpen(DataTable: TDADataTable); - procedure Button1Click(Sender: TObject); - procedure DBGrid1TitleClick(Column: TColumn); - private - fCustomersCol: string; - fCustomersSort: TDASortDirection; - end; - -var - StronglyTypedClientMainForm: TStronglyTypedClientMainForm; - -implementation - -{ - The unit StronglyTypedLibrary_Intf.pas will be generated by the RemObjects preprocessor the first time you - compile your server application. Make sure to do that before trying to compile the client. - - To invoke your server simply typecast your server to the name of the service interface like this: - - (RORemoteService as IStronglyTypedService).Sum(1,2) -} - -uses StronglyTypedLibrary_Intf, SampleSchemaClient_Intf, uBizCustomersClient, - StronglyTypedClientData; - -{$R *.dfm} - -procedure TStronglyTypedClientMainForm.BitBtn1Click(Sender: TObject); -begin - with StronglyTypedClientDataModule do - dtCustomers.Active := not dtCustomers.Active; -end; - -procedure TStronglyTypedClientMainForm.bCheckBalanceClick(Sender: TObject); -var - balance: currency; -begin - with (StronglyTypedClientDataModule.dtCustomers as IAdvancedCustomer) do begin - balance := CheckBalance; // <-- Custom method! - - ShowMessage(CustomerID + ' has ' + FloatToStr(balance) + '$ in his account'); - end; -end; - -procedure TStronglyTypedClientMainForm.bApplyUpdatesClick(Sender: TObject); -begin - try - StronglyTypedClientDataModule.dtCustomers.ApplyUpdates(TRUE); - except - with StronglyTypedClientDataModule.dtCustomers do begin - Close; - Open; - end; - raise; - end; -end; - -procedure TStronglyTypedClientMainForm.bCreateTestCustomerClick(Sender: TObject); -begin - with (StronglyTypedClientDataModule.dtCustomers as ICustomers) do begin - Insert; - CustomerID := 'ID' + IntToStr(RecordCount); - CompanyName := 'RemObjects Software, Inc.'; - ContactName := 'Alex'; - - Post; - end; -end; - -procedure TStronglyTypedClientMainForm.dtCustomersBeforeOpen(DataTable: TDADataTable); -begin - StronglyTypedClientDataModule.dtCustomers.RemoteFetchEnabled := cbRemoteFetch.Checked; -end; - -procedure TStronglyTypedClientMainForm.Button1Click(Sender: TObject); -var - i: integer; -begin - with (StronglyTypedClientDataModule.dtCustomers as IAdvancedCustomer) do begin - Insert; - CustomerID := 'ID' + IntToStr(RecordCount); - CompanyName := 'RemObjects Software, Inc.'; - ContactName := 'Alex'; - Post; - - for i := 0 to Random(10) + 1 do begin - Orders.Insert; - Orders.EmployeeID := 1; - Orders.OrderDate := Now; - Orders.RequiredDate := Now + Random(4); - Orders.ShipVia := 1; - Orders.Post; - end; - end; -end; - -procedure TStronglyTypedClientMainForm.DBGrid1TitleClick(Column: TColumn); -var - dt: TDADataTable; -begin - dt := TDADataSource(Column.Grid.DataSource).DataTable; - - if not SameText(fCustomersCol, Column.FieldName) then begin - fCustomersCol := Column.FieldName; - fCustomersSort := sdAscending; - end - else begin - fCustomersSort := TDASortDirection(integer(fCustomersSort) xor 1); - end; - - dt.Sort([fCustomersCol], [fCustomersSort]); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary.RODL deleted file mode 100644 index 664a6c4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary.RODL +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Intf.pas deleted file mode 100644 index 43c4d38..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Intf.pas +++ /dev/null @@ -1,121 +0,0 @@ -unit StronglyTypedLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, - {Used RODLs:} DataAbstract4_Intf; - -const - { Library ID } - LibraryUID = '{1BBB15C7-1CF5-4C37-B9C8-323AFAF87EB6}'; - TargetNamespace = ''; - - { Service Interface ID's } - IStronglyTypedService_IID : TGUID = '{E611C0CF-5A17-469F-B906-98AFF41C1D73}'; - - { Event ID's } - -type - { Forward declarations } - IStronglyTypedService = interface; - - - - - - { Enumerateds } - - { IStronglyTypedService } - IStronglyTypedService = interface(IDataAbstractService) - ['{E611C0CF-5A17-469F-B906-98AFF41C1D73}'] - function CheckBalance(const CustomerID: String): Currency; - function GetOrders(const CustomerID: String): Binary; - end; - - { CoStronglyTypedService } - CoStronglyTypedService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IStronglyTypedService; - end; - - { TStronglyTypedService_Proxy } - TStronglyTypedService_Proxy = class(TDataAbstractService_Proxy, IStronglyTypedService) - protected - function __GetInterfaceName:string; override; - - function CheckBalance(const CustomerID: String): Currency; - function GetOrders(const CustomerID: String): Binary; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ CoStronglyTypedService } - -class function CoStronglyTypedService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IStronglyTypedService; -begin - result := TStronglyTypedService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TStronglyTypedService_Proxy } - -function TStronglyTypedService_Proxy.__GetInterfaceName:string; -begin - result := 'StronglyTypedService'; -end; - -function TStronglyTypedService_Proxy.CheckBalance(const CustomerID: String): Currency; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'StronglyTypedLibrary', __InterfaceName, 'CheckBalance'); - __Message.Write('CustomerID', TypeInfo(String), CustomerID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Currency), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TStronglyTypedService_Proxy.GetOrders(const CustomerID: String): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'StronglyTypedLibrary', __InterfaceName, 'GetOrders'); - __Message.Write('CustomerID', TypeInfo(String), CustomerID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -initialization - RegisterProxyClass(IStronglyTypedService_IID, TStronglyTypedService_Proxy); - - -finalization - UnregisterProxyClass(IStronglyTypedService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Invk.pas deleted file mode 100644 index 572b1e7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedLibrary_Invk.pas +++ /dev/null @@ -1,88 +0,0 @@ -unit StronglyTypedLibrary_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Used RODL Intf's:} DataAbstract4_Intf, - {Used RODL Invk's:} DataAbstract4_Invk, - {Generated:} StronglyTypedLibrary_Intf; - -type - {$M+} - TStronglyTypedService_Invoker = class(TDataAbstractService_Invoker) - private - protected - published - procedure Invoke_CheckBalance(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TStronglyTypedService_Invoker } - -procedure TStronglyTypedService_Invoker.Invoke_CheckBalance(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function CheckBalance(const CustomerID: String): Currency; } -var - CustomerID: String; - lResult: Currency; -begin - try - __Message.Read('CustomerID', TypeInfo(String), CustomerID, []); - - lResult := (__Instance as IStronglyTypedService).CheckBalance(CustomerID); - - __Message.InitializeResponseMessage(__Transport, 'StronglyTypedLibrary', 'StronglyTypedService', 'CheckBalanceResponse'); - __Message.Write('Result', TypeInfo(Currency), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -procedure TStronglyTypedService_Invoker.Invoke_GetOrders(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetOrders(const CustomerID: String): Binary; } -var - CustomerID: String; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('CustomerID', TypeInfo(String), CustomerID, []); - - lResult := (__Instance as IStronglyTypedService).GetOrders(CustomerID); - - __Message.InitializeResponseMessage(__Transport, 'StronglyTypedLibrary', 'StronglyTypedService', 'GetOrdersResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.bdsproj deleted file mode 100644 index 220fcb0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - StronglyTypedServer.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dpr deleted file mode 100644 index 5e79582..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dpr +++ /dev/null @@ -1,25 +0,0 @@ -program StronglyTypedServer; - -{#ROGEN:StronglyTypedLibrary.rodl} // RemObjects: Careful, do not remove! - - - -uses - uROComInit, - Forms, - StronglyTypedServerMain in 'StronglyTypedServerMain.pas' {StronglyTypedServerMainFoem}, - StronglyTypedLibrary_Intf in 'StronglyTypedLibrary_Intf.pas', - StronglyTypedLibrary_Invk in 'StronglyTypedLibrary_Invk.pas', - StronglyTypedService_Impl in 'StronglyTypedService_Impl.pas' {StronglyTypedService: TDARemoteService}, - SampleSchemaClient_Intf in 'SampleSchemaClient_Intf.pas', - SampleSchemaServer_Intf in 'SampleSchemaServer_Intf.pas', - uBizCustomersServer in 'uBizCustomersServer.pas'; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TStronglyTypedServerMainFoem, StronglyTypedServerMainFoem); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dproj deleted file mode 100644 index 1772ed3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.dproj +++ /dev/null @@ -1,80 +0,0 @@ - - - {93d81d2c-638f-47b8-a46b-efb92ea95bcc} - StronglyTypedServer.dpr - Debug - AnyCPU - DCC32 - StronglyTypedServer.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - StronglyTypedServer.dpr - - - - - - - MainSource - - - - - - -
StronglyTypedServerMainFoem
-
- -
StronglyTypedService
-
- -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.res deleted file mode 100644 index 7455d6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServer.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.dfm deleted file mode 100644 index 0561162..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.dfm +++ /dev/null @@ -1,70 +0,0 @@ -object StronglyTypedServerMainFoem: TStronglyTypedServerMainFoem - Left = 87 - Top = 224 - BorderStyle = bsDialog - Caption = 'StronglyTyped server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Form1' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 14 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 5 - Top = 5 - Width = 212 - Height = 48 - Cursor = crHandPoint - end - object ROMessage: TROBinMessage - Left = 36 - Top = 8 - end - object ROServer: TROIndyHTTPServer - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - PathInfo = 'Bin' - end> - Port = 8099 - Left = 8 - Top = 8 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 64 - Top = 8 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=' - Description = 'Borland ADOExpress Connection' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 96 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.pas deleted file mode 100644 index 2f1c92f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedServerMain.pas +++ /dev/null @@ -1,39 +0,0 @@ -unit StronglyTypedServerMain; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - uROBinMessage, uROIndyHTTPServer, uROIndyTCPServer, - uDAClasses, uDADriverManager, uDAEngine, uDAADODriver, - uDAPoweredByDataAbstractButton; - -type - TStronglyTypedServerMainFoem = class(TForm) - ROMessage: TROBinMessage; - ROServer: TROIndyHTTPServer; - DriverManager: TDADriverManager; - ConnectionManager: TDAConnectionManager; - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - StronglyTypedServerMainFoem: TStronglyTypedServerMainFoem; - -implementation - - -{$R *.dfm} - -procedure TStronglyTypedServerMainFoem.FormCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.dfm deleted file mode 100644 index 3cf4972..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.dfm +++ /dev/null @@ -1,1092 +0,0 @@ -object StronglyTypedService: TStronglyTypedService - OldCreateOrder = True - ConnectionName = 'ADO' - ServiceSchema = SampleSchema - ServiceDataStreamer = Streamer - ExportedDataTables = <> - Height = 300 - Width = 300 - object SampleSchema: TDASchema - ConnectionManager = StronglyTypedServerMainFoem.ConnectionManager - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders'#10' WHERE CustomerID=:CustomerID' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = < - item - Params = < - item - Name = 'CustomerID' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'CompanyName' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'ContactName' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'ContactTitle' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'Address' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'City' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'Region' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'PostalCode' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'Country' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'Phone' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'Fax' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end - item - Name = 'TestNumeric' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'INSERT'#10' INTO Customers'#10' (CustomerID, CompanyName, ContactNam' + - 'e, ContactTitle, Address, City, Region, PostalCode, Country, Pho' + - 'ne, Fax, TestNumeric)'#10' VALUES'#10' (:CustomerID, :CompanyName, :' + - 'ContactName, :ContactTitle, :Address, :City, :Region, :PostalCod' + - 'e, :Country, :Phone, :Fax, :TestNumeric)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Insert_Customers' - end - item - Params = < - item - Name = 'OLD_CustomerID' - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'DELETE '#10' FROM'#10' Customers'#10' WHERE'#10' (CustomerID = :OLD_Cust' + - 'omerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Delete_Customers' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'CompanyName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ContactName' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ContactTitle' - DataType = datString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Address' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'City' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Region' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'PostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Country' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Phone' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Fax' - DataType = datString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'OLD_CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'UPDATE Customers'#10' SET'#10' CustomerID = :CustomerID,'#10' Company' + - 'Name = :CompanyName,'#10' ContactName = :ContactName,'#10' Contact' + - 'Title = :ContactTitle,'#10' Address = :Address,'#10' City = :City,' + - #10' Region = :Region,'#10' PostalCode = :PostalCode,'#10' Country' + - ' = :Country,'#10' Phone = :Phone,'#10' Fax = :Fax'#10' WHERE'#10' (Cus' + - 'tomerID = :OLD_CustomerID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Update_Customers' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'INSERT'#10' INTO Orders'#10' (CustomerID, EmployeeID, OrderDate, Req' + - 'uiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' ShipCity, ShipRegion, ShipPostalCode, ShipCountry)'#10' VALUES'#10' ' + - ' (:CustomerID, :EmployeeID, :OrderDate, :RequiredDate, :ShippedD' + - 'ate, :ShipVia, :Freight, :ShipName, :ShipAddress, :ShipCity, :Sh' + - 'ipRegion, :ShipPostalCode, :ShipCountry)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Insert_Orders' - end - item - Params = < - item - Name = 'OLD_OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = 'DELETE '#10' FROM'#10' Orders'#10' WHERE'#10' (OrderID = :OLD_OrderID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Delete_Orders' - end - item - Params = < - item - Name = 'CustomerID' - DataType = datString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipName' - DataType = datString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipAddress' - DataType = datString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipCity' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipRegion' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipPostalCode' - DataType = datString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'ShipCountry' - DataType = datString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end - item - Name = 'OLD_OrderID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - ParamType = daptInput - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'UPDATE Orders'#10' SET '#10' CustomerID = :CustomerID,'#10' EmployeeI' + - 'D = :EmployeeID, '#10' OrderDate = :OrderDate, '#10' RequiredDate ' + - '= :RequiredDate, '#10' ShippedDate = :ShippedDate, '#10' ShipVia =' + - ' :ShipVia, '#10' Freight = :Freight, '#10' ShipName = :ShipName, '#10 + - ' ShipAddress = :ShipAddress, '#10' ShipCity = :ShipCity, '#10' ' + - 'ShipRegion = :ShipRegion, '#10' ShipPostalCode = :ShipPostalCode,' + - ' '#10' ShipCountry = :ShipCountry'#10' WHERE'#10' (OrderID = :OLD_Ord' + - 'erID)' - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'Update_Orders' - end> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 128 - Top = 58 - end - object CustomersProcessor: TDABusinessProcessor - Schema = SampleSchema - ReferencedDataset = 'Customers' - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poPrepareCommands] - UpdateMode = updWhereKeyOnly - BusinessRulesID = 'ServerRules.Customers' - Left = 42 - Top = 8 - end - object OrdersProcessor: TDABusinessProcessor - Schema = SampleSchema - ProcessorOptions = [poAutoGenerateInsert, poAutoGenerateUpdate, poAutoGenerateDelete, poPrepareCommands] - UpdateMode = updWhereKeyOnly - Left = 42 - Top = 58 - end - object Streamer: TDABin2DataStreamer - BufferSize = 262144 - SendReducedDelta = False - Left = 128 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.pas deleted file mode 100644 index 2a7fffa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/StronglyTypedService_Impl.pas +++ /dev/null @@ -1,84 +0,0 @@ -unit StronglyTypedService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} StronglyTypedLibrary_Intf, uDAScriptingProvider, - uDABusinessProcessor, uDADataStreamer,uDAClasses,uDAinterfaces,uDADelta, - uDABin2DataStreamer; - - -const - { Dataset names for SampleSchema } - ds_Customers = 'Customers'; - ds_Orders = 'Orders'; - - { Command names for SampleSchema } - cmd_Insert_Customers = 'Insert_Customers'; - cmd_Delete_Customers = 'Delete_Customers'; - cmd_Update_Customers = 'Update_Customers'; - cmd_Insert_Orders = 'Insert_Orders'; - cmd_Delete_Orders = 'Delete_Orders'; - cmd_Update_Orders = 'Update_Orders'; - -type - { TStronglyTypedService } - TStronglyTypedService = class(TDataAbstractService, IStronglyTypedService) - CustomersProcessor: TDABusinessProcessor; - OrdersProcessor: TDABusinessProcessor; - SampleSchema: TDASchema; - Streamer: TDABin2DataStreamer; - private - protected - { IStronglyTypedService methods } - function CheckBalance(const CustomerID: String): Currency; - function GetOrders(const CustomerID: String): Binary; - end; - -implementation - -{$R *.dfm} -uses - {Generated:} StronglyTypedLibrary_Invk,StronglyTypedServerMain; - -procedure Create_StronglyTypedService(out anInstance : IUnknown); -begin - anInstance := TStronglyTypedService.Create(NIL); -end; - -{ TStronglyTypedService } - -function TStronglyTypedService.CheckBalance( - const CustomerID: String): Currency; -begin - if (CustomerID='ALFKI') then result := 100000 else result := 8000; -end; - -function TStronglyTypedService.GetOrders(const CustomerID: String): Binary; -var - orders: IDADataset; -begin - orders := SampleSchema.NewDataset(Connection, ds_Orders, ['CustomerID'], [CustomerID]); - Result:=Binary.Create; - Streamer.Initialize(result, aiWrite); - Streamer.WriteDataset(orders, [woRows], -1); - Streamer.Finalize; -end; - -initialization - TROClassFactory.Create('StronglyTypedService', Create_StronglyTypedService, TStronglyTypedService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersClient.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersClient.pas deleted file mode 100644 index b342af1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersClient.pas +++ /dev/null @@ -1,209 +0,0 @@ -unit uBizCustomersClient; - -{ - This unit contains the business rules handlers for the client application. - - The simplest possible implementation just overrides the methods inherited - from TDADataTableRules (i.e. AfterInsert, BeforePost). - - More sophisticated ones instead add additional behaviour and even make it accessible - from outside units (i.e. a form or a data module hosting a TDADataTable). - - TBizCustomersClientRules shows an example of both possibilities by overriding a few event - handlers and adding support for the interface IAdvancedCustomer. - - Adding interfaces like IAdvancedCustomer is not required to implement extra functionality that is - only accessed in the context of a business rule class/unit. You obviously can add any method you want to - classes like TBizCustomersClientRules and reference them from other methods in order to make them - more "object oriented" (see DummTest below). - But when you need to access this functionality from the outside world you need to define an - "access contract" via an interface. You can then treat TDADataTables as IAdvancedCustomer (or - whatever other interface you decide to create) by simply using the VCL function Supports. - See an example of this in the unit fClientForm.pas, method bCheckBalanceClick - - Note: TDADataTable also allows you to access the instance of TBizCustomersClientRules via the - property BusinessRules. You could also type cast that property to TBizCustomersClientRules but - in general, the interface approach is cleaner and more elegant. -} - -interface - -uses - Classes, SysUtils, - uDADataTable, SampleSchemaClient_Intf, - uDAInterfaces, SampleSchemaServer_Intf, - StronglyTypedLibrary_Intf; // Not really required. Just for the IDefaultROIntfServer example below - -type - { IAdvancedCustomer } - IAdvancedCustomer = interface(ICustomers) - ['{BDB203DC-954B-4D78-A446-B1E2232BEF71}'] - function GetOrders : IOrders; - - function CheckBalance : currency; - procedure DisableAccount; - - property Orders : IOrders read GetOrders; - end; - - { TBizCustomersClientRules } - TBizCustomersClientRules = class(TCustomersDataTableRules, IAdvancedCustomer) - private - - protected - // Business events - procedure AfterInsert(Sender : TDADataTable); override; - procedure BeforeDelete(Sender : TDADataTable); override; - procedure BeforePost(Sender : TDADataTable); override; - - // IAdvancedCustomer - function CheckBalance : currency; - procedure DisableAccount; - function GetOrders : IOrders; - end; - - { TBizOrdersClientRules } - TBizOrdersClientRules = class(TOrdersDataTableRules) - protected - procedure OnNewRecord(Sender: TDADataTable); override; - procedure BeforePost(Sender : TDADataTable); override; - end; - - { TBizCustomerIDRules } - TBizCustomerIDRules = class(TDAFieldRules) - private - protected - procedure OnValidate(Sender: TDACustomField); override; - procedure OnChange(Sender: TDACustomField); override; - - end; - - -{ General validation routine shared by client and server } -procedure ValidateCustomer(const aCustomers : ICustomers); - -implementation -uses uDARemoteDataAdapter; -const - def_CompanyName = 'New Company'; - def_ContactName = ''; - -{ General validation routine shared by client and server } -procedure ValidateCustomer(const aCustomers : ICustomers); -var errors : string; -begin - errors := ''; - with aCustomers do begin - if (Trim(CustomerID)='') then errors := errors+'CustomerID cannot be empty'+#13; - if (Trim(CompanyName)='') then errors := errors+'CompanyName is required'+#13; - - if (errors<>'') - then raise EDABizValidationException.Create(errors); - end; -end; - -procedure ValidateOrder(const aOrder : IOrders); -var errors : string; -begin - errors := ''; - - with aOrder do begin - if (Trim(CustomerID)='') then errors := errors+'An order must have a CustomerID'+#13; - - if (EmployeeID<=0) // 0 also covers NULL in the conversion of AsInteger - then errors := errors+'Invalid or unspecified EmployeeID'+#13; - - if (errors<>'') - then raise EDABizValidationException.Create(errors); - end; -end; - -{ TBizCustomersClientRules } -procedure TBizCustomersClientRules.AfterInsert(Sender : TDADataTable); -begin - inherited; - - CustomerID := IntToStr(DataTable.RecordCount); - CompanyName := def_CompanyName; - ContactName := def_ContactName; -end; - -procedure TBizCustomersClientRules.BeforeDelete(Sender : TDADataTable); -begin - inherited; -end; - -procedure TBizCustomersClientRules.BeforePost(Sender : TDADataTable); -begin - inherited; - - ValidateCustomer(Self); -end; - -function TBizCustomersClientRules.CheckBalance: currency; -begin - { - A simple example of how to invoke remote service using the referenced RemoteService. - Nothing prevents you to add an interface which takes a TRORemoteService as parameter or even - an IxxxService interface. Possibilities are endless! - } - result := (TDARemoteDataAdapter(DataTable.RemoteDataAdapter).RemoteService as IStronglyTypedService).CheckBalance(CustomerID) -end; - -procedure TBizCustomersClientRules.DisableAccount; -begin - // This is just for demonstration purposes and completeness. - Beep; -end; - -function TBizCustomersClientRules.GetOrders: IOrders; -begin - { - Provides access to the detail datatable which points to Orders. - Detail access depends on the client module/form. Not all might support or require - the use of this property. An exception is raised at runtime by DetailByName - if the detail table was never actually linked. - } - - result := DetailByName(nme_Orders) as IOrders; -end; - -{ TBizOrdersClientRules } - -procedure TBizOrdersClientRules.BeforePost(Sender: TDADataTable); -begin - inherited; - ValidateOrder(Self); -end; - -procedure TBizOrdersClientRules.OnNewRecord(Sender: TDADataTable); -begin - with (DataTable.GetMasterDataTable as ICustomers) do begin - if (CustomerID='ALFKI') - then raise EDABizValidationException.Create('You cannot add orders to ALFKI'); - end; -end; - -{ TBizCustomerIDRules } - -procedure TBizCustomerIDRules.OnChange(Sender: TDACustomField); -var i : integer; - lCurrVal : string; -begin - lCurrVal := Sender.AsString; - for i := 1 to Length(lCurrVal) do - if not (lCurrVal[i] in ['a'..'z', 'A'..'Z', '0'..'9']) - then raise EDABizValidationException.Create('Invalid character'); -end; - -procedure TBizCustomerIDRules.OnValidate(Sender: TDACustomField); -begin - beep; -end; - -initialization - RegisterDataTableRules('ClientRules.Customers', TBizCustomersClientRules); - RegisterDataTableRules('ClientRules.Orders', TBizOrdersClientRules); - RegisterFieldRules('CustomerID', TBizCustomerIDRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersServer.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersServer.pas deleted file mode 100644 index 5f22864..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Strongly Typed/uBizCustomersServer.pas +++ /dev/null @@ -1,60 +0,0 @@ -unit uBizCustomersServer; - -{ - This unit contains the business rules handlers for the server application. - - It enforces additional rules that might change over time. This is a good example - to show the advantages of a multi-tier architecture: systems can be updated in a - matter of a server re-deploy without the need to update any client. - - It's important to notice how some business rules are shared among clients and servers. - In particular, Customer validation is done by calling the function ValidateCustomers - (from uBizCustomersClient.pas). This is not a requirement but a highly adviceable - practice, expecially when your system is accessed by clients that were not developed by - you (i.e. Java clients accessing your server through SOAP). - - For additional topics such as how to extend the business functionality adding custom - interfaces, refer to the comments in the unit uBizCustomersClient.pas -} - -interface - -uses - Classes, SysUtils, - uDADataTable,uDADelta, - uBizCustomersClient, uDAInterfaces, - uDABusinessProcessor, SampleSchemaServer_Intf; - -type - { TBizCustomerServerRules } - TBizCustomerServerRules = class(TCustomersBusinessProcessorRules) - protected - // Business events - procedure BeforeProcessChange(Sender : TDABusinessProcessor; aChangeType : TDAChangeType; - aChange : TDADeltaChange; var ProcessChange : boolean); override; - end; - -implementation - -{ TBizCustomerServerRules } - -procedure TBizCustomerServerRules.BeforeProcessChange( - Sender: TDABusinessProcessor; aChangeType: TDAChangeType; - aChange: TDADeltaChange; var ProcessChange: boolean); -begin - inherited; - if (aChangeType<>ctDelete) then ValidateCustomer(Self); - - // Sort of a strong rule but it's just to make a point that server side business - // rules might enforce stronger rules than clients. - - if (aChangeType=ctInsert) and not SameText(ContactName, 'Alex') - then raise Exception.Create('Cannot process an update without Alex as ContactName'); - - ContactTitle := TimeToStr(Now); -end; - -initialization - RegisterBusinessProcessorRules('ServerRules.Customers', TBizCustomerServerRules); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Styles.css b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Styles.css deleted file mode 100644 index c8e0628..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/Styles.css +++ /dev/null @@ -1,103 +0,0 @@ -body -{ - background-color: #f7f7f7; - margin-top: 15px; - margin-bottom: 15px; - margin-left: 15px; - margin-right: 15px; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - font-family: tahoma, verdana, sans-serif; - font-size: 10pt; - width: 700px; - color: #000000; -} -p -{ - padding-top: 0; - padding-bottom: 0; - padding-left: 0; - padding-right: 0.5em; -} -ul -{ - padding-top: 0; - padding-bottom: 0; - list-style-type: disc; -} -li -{ - padding-top: 0; - padding-bottom: 0; -} -img -{ - margin: 5px; - border-width: 0; -} -table -{ - background-color: #f7f7f7; - margin: 15px; - padding: 0px; - font-size: 10pt; -} -tr -{ - background-color: #f7f7f7; - margin: 15px; - padding: 0px; - font-size: 10pt; -} -td, th -{ - background-color: #f7f7f7; - margin: 0; - padding: 5px; - font-size: 10pt; -} -td ul -{ - padding-left: 2em; -} - -img:left { margin-left: 0; } -img:right { margin-right: 0; } -p.h1 -{ - margin-top: 1em; - margin-bottom: 0.5px; - padding-bottom:0px; - font-size:13pt; - font-weight:bold; -} -p.h2 -{ - margin-top: 1em; - margin-bottom: 0.5px; - padding-bottom:0px; - font-size:11pt; - font-weight:bold; -} -p.h3 -{ - margin-top: 1em; - margin-bottom: 0.5px; - padding-bottom:0px; - font-size:10pt; - font-weight:bold; -} -pre -{ - margin-top:0px; - margin-bottom:0px; - margin-left:0px; - margin-right:0px; -} -.spaced -{ - letter-spacing:1px; - color:#000060; -} diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersHTML.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersHTML.html deleted file mode 100644 index cd41181..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersHTML.html and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToHTML.xsl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToHTML.xsl deleted file mode 100644 index 8107a83..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToHTML.xsl +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -

- - - - - - - -
-

- Customer: , - , - , -

-

- Address: , - City: , - , - , -

-

- Phone: - Fax: -

-

- - -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToSimpleXML.xsl b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToSimpleXML.xsl deleted file mode 100644 index 902b170..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/CustomersToSimpleXML.xsl +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - () - , - , - - -
- - , - - - -
-
-
-
-
diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/DALogo.png b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/DALogo.png deleted file mode 100644 index 54892ce..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/DALogo.png and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.Sample.html b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.Sample.html deleted file mode 100644 index 23bffb0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.Sample.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - -

- XSLT Sample -

- - -

Purpose

- -

-This example shows how to import dataset data into an .xml file by using the TDAXmlDataStreamer. -Exporting dataset changes to an .xml file is also shown.
-

- -

Examine the Code

-
    -
  • - See the simple code in XSLTMain.pas. -
  • -
- - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.bdsproj deleted file mode 100644 index 5f2c59c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - XSLT.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dpr deleted file mode 100644 index 672dbce..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program XSLT; - -uses - Forms, - XSLTMain in 'XSLTMain.pas' {XSLTMainForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.Title := 'XSLT Sample'; - Application.CreateForm(TXSLTMainForm, XSLTMainForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dproj deleted file mode 100644 index a22c322..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {eb5321d8-fcb7-4e0d-a61b-0469d08bc4e3} - XSLT.dpr - Debug - AnyCPU - DCC32 - XSLT.exe - - - 7.0 - False - False - 0 - RELEASE - - - 7.0 - DEBUG - - - Delphi.Personality - VCLApplication - - - False - True - False - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1058 - 1251 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - XSLT.dpr - - - - - - - MainSource - - -
XSLTMainForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.res deleted file mode 100644 index b946fbb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLT.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.dfm deleted file mode 100644 index d96bc19..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.dfm +++ /dev/null @@ -1,1115 +0,0 @@ -object XSLTMainForm: TXSLTMainForm - Left = 327 - Top = 205 - AutoScroll = False - BorderWidth = 5 - Caption = 'XSLT Sample' - ClientHeight = 402 - ClientWidth = 456 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object PageControl: TPageControl - Left = 0 - Top = 34 - Width = 456 - Height = 368 - ActivePage = tsXML - Align = alCustom - Anchors = [akLeft, akTop, akRight, akBottom] - TabIndex = 0 - TabOrder = 4 - object tsXML: TTabSheet - Caption = 'XML' - object WebBrowser: TWebBrowser - Left = 0 - Top = 0 - Width = 448 - Height = 340 - Align = alClient - TabOrder = 0 - ControlData = { - 4C0000004D2E0000242300000000000000000000000000000000000000000000 - 000000004C000000000000000000000001000000E0D057007335CF11AE690800 - 2B2E126208000000000000004C0000000114020000000000C000000000000046 - 8000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000100000000000000000000000000000000000000} - end - end - object tsGrid: TTabSheet - Caption = 'Grid' - ImageIndex = 1 - object Splitter2: TSplitter - Left = 0 - Top = 152 - Width = 448 - Height = 3 - Cursor = crVSplit - Align = alBottom - end - object gCustomers: TDBGrid - Left = 0 - Top = 0 - Width = 448 - Height = 152 - Align = alClient - DataSource = dsCustomers - TabOrder = 0 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - object gOrders: TDBGrid - Left = 0 - Top = 155 - Width = 448 - Height = 185 - Align = alBottom - DataSource = dsOrders - Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit] - TabOrder = 1 - TitleFont.Charset = DEFAULT_CHARSET - TitleFont.Color = clWindowText - TitleFont.Height = -11 - TitleFont.Name = 'MS Sans Serif' - TitleFont.Style = [] - end - end - end - object GetDataButton: TButton - Left = 2 - Top = 4 - Width = 75 - Height = 25 - Caption = 'Get Data' - TabOrder = 0 - OnClick = GetDataButtonClick - end - object GenerateDeltaButton: TButton - Left = 80 - Top = 4 - Width = 120 - Height = 25 - Caption = 'Generate Delta XML' - TabOrder = 1 - OnClick = GenerateDeltaButtonClick - end - object XSLTTransformationButton: TButton - Left = 202 - Top = 4 - Width = 131 - Height = 25 - Caption = 'XSLT Transformation' - TabOrder = 2 - OnClick = XSLTTransformationButtonClick - end - object GenerateHTMLButton: TButton - Left = 336 - Top = 4 - Width = 106 - Height = 25 - Caption = 'Generate HTML' - TabOrder = 3 - OnClick = XSLTTransformationButtonClick - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - TraceActive = False - TraceFlags = [] - Left = 274 - Top = 176 - end - object ConnectionManager: TDAConnectionManager - Connections = < - item - Name = 'ADO' - ConnectionString = - 'ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;Use' + - 'rID=sa;Password=;' - Default = True - Tag = 0 - end> - DriverManager = DriverManager - PoolingEnabled = True - Left = 304 - Top = 176 - end - object ADODriver: TDAADODriver - Left = 333 - Top = 176 - end - object Schema: TDASchema - ConnectionManager = ConnectionManager - Datasets = < - item - Params = <> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Customers' - SQL = - 'SELECT '#10' CustomerID, CompanyName, ContactName, ContactTitle, ' + - #10' Address, City, Region, PostalCode, Country, Phone, '#10' Fax' + - #10' FROM'#10' Customers'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'CompanyName' - TableField = 'CompanyName' - end - item - DatasetField = 'ContactName' - TableField = 'ContactName' - end - item - DatasetField = 'ContactTitle' - TableField = 'ContactTitle' - end - item - DatasetField = 'Address' - TableField = 'Address' - end - item - DatasetField = 'City' - TableField = 'City' - end - item - DatasetField = 'Region' - TableField = 'Region' - end - item - DatasetField = 'PostalCode' - TableField = 'PostalCode' - end - item - DatasetField = 'Country' - TableField = 'Country' - end - item - DatasetField = 'Phone' - TableField = 'Phone' - end - item - DatasetField = 'Fax' - TableField = 'Fax' - end> - end> - Name = 'Customers' - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end - item - Params = < - item - Name = 'customerid' - DataType = datWideString - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptUnknown - end> - Statements = < - item - Connection = 'ADO' - TargetTable = 'Orders' - SQL = - 'SELECT '#10' OrderID, CustomerID, EmployeeID, OrderDate, Required' + - 'Date, '#10' ShippedDate, ShipVia, Freight, ShipName, ShipAddress,' + - ' '#10' ShipCity, ShipRegion, ShipPostalCode, ShipCountry'#10' FROM'#10' ' + - ' Orders'#10' where'#10' customerid = :customerid'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'OrderID' - TableField = 'OrderID' - end - item - DatasetField = 'CustomerID' - TableField = 'CustomerID' - end - item - DatasetField = 'EmployeeID' - TableField = 'EmployeeID' - end - item - DatasetField = 'OrderDate' - TableField = 'OrderDate' - end - item - DatasetField = 'RequiredDate' - TableField = 'RequiredDate' - end - item - DatasetField = 'ShippedDate' - TableField = 'ShippedDate' - end - item - DatasetField = 'ShipVia' - TableField = 'ShipVia' - end - item - DatasetField = 'Freight' - TableField = 'Freight' - end - item - DatasetField = 'ShipName' - TableField = 'ShipName' - end - item - DatasetField = 'ShipAddress' - TableField = 'ShipAddress' - end - item - DatasetField = 'ShipCity' - TableField = 'ShipCity' - end - item - DatasetField = 'ShipRegion' - TableField = 'ShipRegion' - end - item - DatasetField = 'ShipPostalCode' - TableField = 'ShipPostalCode' - end - item - DatasetField = 'ShipCountry' - TableField = 'ShipCountry' - end> - end> - Name = 'Orders' - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - BusinessRulesClient.ScriptLanguage = rslPascalScript - BusinessRulesServer.ScriptLanguage = rslPascalScript - end> - JoinDataTables = <> - UnionDataTables = <> - Commands = <> - RelationShips = <> - UpdateRules = <> - Version = 0 - Left = 362 - Top = 177 - end - object XMLAdapter: TDAXmlDataStreamer - SchemaOptions = [soIncludeEmptyAttributes] - RowOptions = [] - Options = [xaoUseDatasetXSLTs, xaoUseDeltaXSLTs] - Left = 245 - Top = 176 - end - object dtCustomers: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CompanyName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactName' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ContactTitle' - DataType = datWideString - Size = 30 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Address' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'City' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Region' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'PostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Country' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Phone' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Fax' - DataType = datWideString - Size = 24 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = <> - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - LocalSchema = Schema - LocalDataStreamer = DAXmlDataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Customers' - IndexDefs = <> - Left = 43 - Top = 115 - end - object dsCustomers: TDADataSource - DataSet = dtCustomers.Dataset - DataTable = dtCustomers - Left = 52 - Top = 128 - end - object dtOrders: TDACDSDataTable - RemoteUpdatesOptions = [] - Fields = < - item - Name = 'OrderID' - DataType = datAutoInc - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = True - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'CustomerID' - DataType = datWideString - Size = 5 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'EmployeeID' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'OrderDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'RequiredDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShippedDate' - DataType = datDateTime - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipVia' - DataType = datInteger - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'Freight' - DataType = datFloat - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipName' - DataType = datWideString - Size = 40 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipAddress' - DataType = datWideString - Size = 60 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCity' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipRegion' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipPostalCode' - DataType = datWideString - Size = 10 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end - item - Name = 'ShipCountry' - DataType = datWideString - Size = 15 - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - DisplayWidth = 0 - Alignment = taLeftJustify - InPrimaryKey = False - Calculated = False - ServerCalculated = False - Lookup = False - LookupCache = False - end> - Params = < - item - Name = 'customerid' - DataType = datWideString - BlobType = dabtUnknown - DecimalPrecision = 0 - DecimalScale = 0 - Value = '' - ParamType = daptUnknown - end> - MasterParamsMappings.Strings = ( - 'customerid=CustomerID') - StreamingOptions = [soDisableEventsWhileStreaming] - RemoteFetchEnabled = False - ReadOnly = False - LocalSchema = Schema - LocalDataStreamer = DAXmlDataStreamer - MasterSource = dsCustomers - MasterFields = 'CustomerID' - DetailFields = 'CustomerID' - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] - LogicalName = 'Orders' - IndexDefs = <> - Left = 98 - Top = 115 - end - object dsOrders: TDADataSource - DataSet = dtOrders.Dataset - DataTable = dtOrders - Left = 106 - Top = 128 - end - object DAXmlDataStreamer: TDAXmlDataStreamer - SchemaOptions = [soIncludeEmptyAttributes] - RowOptions = [] - Options = [xaoUseDatasetXSLTs, xaoUseDeltaXSLTs] - Left = 76 - Top = 162 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.pas deleted file mode 100644 index ce4c8c4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Samples/XSLT/XSLTMain.pas +++ /dev/null @@ -1,187 +0,0 @@ -unit XSLTMain; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, uDADataTable, uDAXMLAdapter, uDAClasses, - uDADriverManager, uDAEngine, uDAADODriver, Spin, Buttons, OleCtrls, - SHDocVw, ExtCtrls, ComCtrls, DB, uDAScriptingProvider, uDACDSDataTable, - Grids, DBGrids, uDABINAdapter, DBCtrls, uDADataStreamer, - uDARemoteDataAdapter, uDAInterfaces; - -type - TXSLTMainForm = class(TForm) - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - PageControl: TPageControl; - tsXML: TTabSheet; - tsGrid: TTabSheet; - WebBrowser: TWebBrowser; - gCustomers: TDBGrid; - ConnectionManager: TDAConnectionManager; - XMLAdapter: TDAXmlDataStreamer; - gOrders: TDBGrid; - Splitter2: TSplitter; - dtCustomers: TDACDSDataTable; - GetDataButton: TButton; - dsCustomers: TDADataSource; - dtOrders: TDACDSDataTable; - dsOrders: TDADataSource; - GenerateDeltaButton: TButton; - XSLTTransformationButton: TButton; - GenerateHTMLButton: TButton; - Schema: TDASchema; - DAXmlDataStreamer: TDAXmlDataStreamer; - procedure GetDataButtonClick(Sender: TObject); - procedure GenerateDeltaButtonClick(Sender: TObject); - procedure XSLTTransformationButtonClick(Sender: TObject); - private - fTempFileName, - fHTMLFileName, - fAppDir: string; - function CreateTestUpdates1: Boolean; - procedure RefreshXMLView(AfileName: string; aDelta: Boolean = False); - public - constructor Create(aOwner: TComponent); override; - property AppDir: string read fAppDir; - property TempFileName: string read fTempFileName; - property HTMLFileName: string read fHTMLFileName; - end; - -var - XSLTMainForm: TXSLTMainForm; - -implementation - -{$R *.dfm} - -uses - uROMSXMLImpl, uROMSXML2_TLB, uROXMLIntf, ShellAPI, uDADelta, StrUtils; - -constructor TXSLTMainForm.Create(aOwner: TComponent); -begin - inherited; - fAppDir := ExtractFilePath(Application.ExeName); - fTempFileName := fAppDir + 'Temp.xml'; - fHTMLFileName := fAppDir + 'CustomersHTML.html'; - PageControl.ActivePageIndex := 0; -end; - -procedure TXSLTMainForm.GetDataButtonClick(Sender: TObject); -begin - dtCustomers.Open; - dtOrders.Open; - if dtCustomers.DeltaInitialized then dtCustomers.CancelUpdates; - if dtOrders.DeltaInitialized then dtOrders.CancelUpdates; - XMLAdapter.WriteXSLT := nil; // In case there's one set - RefreshXMLView(TempFileName); -end; - -procedure TXSLTMainForm.RefreshXMLView(AfileName: string; aDelta: Boolean = False); -var - xmlstream: TMemoryStream; -begin - xmlstream := TMemoryStream.Create; - try - // Writes the data or Delta into the stream by using the XML Adapter - XMLAdapter.Initialize(xmlstream, aiWrite); - if aDelta then begin - XMLAdapter.WriteDelta(dtCustomers); - XMLAdapter.WriteDelta(dtOrders); - end - else begin - XMLAdapter.WriteDataset(dtCustomers, [woSchema, woRows]); - XMLAdapter.WriteDataset(dtOrders, [woSchema, woRows]); - end; - XMLAdapter.Finalize; - - // Saves the XML stream and displays it in the WebBrowser control - xmlstream.SaveToFile(aFileName); - WebBrowser.Navigate(aFileName); - finally - XMLStream.Free; - end; -end; - -procedure TXSLTMainForm.GenerateDeltaButtonClick(Sender: TObject); -begin - // Generates some test updates (ask confirmation first) - dtCustomers.Open; - dtOrders.Open; - if not CreateTestUpdates1 then Exit; - - // Erases the XSLT in case there's one set - XMLAdapter.WriteXSLT := nil; // In case there's one set - RefreshXMLView(TempFileName, True); -end; - -function TXSLTMainForm.CreateTestUpdates1: Boolean; -begin - Result := False; - if (MessageDlg('Do you want to create some updates?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Exit; - - dtCustomers.open; - dtOrders.open; - if dtCustomers.DeltaInitialized then dtCustomers.CancelUpdates; - if dtOrders.DeltaInitialized then dtOrders.CancelUpdates; - dtCustomers.Last; - - try - // Inserts a bunch of new ones - dtCustomers.AddRecord( - ['CustomerID', 'CompanyName', 'ContactName', 'ContactTitle', 'Address', 'City', 'Region', 'PostalCode', 'Country', 'Phone', 'Fax'], - ['JONSM', 'JohnSmith&Co', 'John Smith', 'Owner', '202 North Lake Drive', 'Barrington', 'IL', '60010', 'USA', '847 389 2112', '847 389 2115']); - - dtOrders.AddRecord( - ['OrderID', 'EmployeeID', 'OrderDate', 'RequiredDate', 'ShippedDate', 'ShipVia', 'Freight', 'ShipName', 'ShipAddress', 'ShipCity', 'ShipRegion', 'ShipPostalCode', 'ShipCountry'], - [60000, 5, Date, Date + 30, Date + 15, 1, 73.23, 'QUICK-Stop', 'Taucherstrabe 10', 'Rio de Janeiro', 'RJ', '50739', 'Brazil']); - - dtOrders.AddRecord( - ['OrderID', 'EmployeeID', 'OrderDate', 'RequiredDate', 'ShippedDate', 'ShipVia', 'Freight', 'ShipName', 'ShipAddress', 'ShipCity', 'ShipRegion', 'ShipPostalCode', 'ShipCountry'], - [60001, 2, Date + 15, Date + 30, Date + 25, 1, 22.45, 'LINO-Delicateses', '2743 Bering St.', 'Rio de Janeiro', 'RJ', '50700', 'Brazil']); - - dtCustomers.AddRecord( - ['CustomerID', 'CompanyName', 'ContactName', 'ContactTitle', 'Address', 'City', 'Region', 'PostalCode', 'Country', 'Phone', 'Fax'], - ['JACDO', 'JackDohrn Ltd', 'Jack Dohrn', 'Owner', '32 Manhattan Lane', 'Hoffman Estates', 'IL', '60074', 'USA', '847 221 3221', '842 221 3221']); - - dtOrders.AddRecord( - ['OrderID', 'EmployeeID', 'OrderDate', 'RequiredDate', 'ShippedDate', 'ShipVia', 'Freight', 'ShipName', 'ShipAddress', 'ShipCity', 'ShipRegion', 'ShipPostalCode', 'ShipCountry'], - [60002, 5, Date, Date + 20, Date + 10, 1, 45673.29, 'Save-a-lot Markets', 'Torikatu 38', 'Rio de Janeiro', 'RJ', '50759', 'Brazil']); - - dtOrders.AddRecord( - ['OrderID', 'EmployeeID', 'OrderDate', 'RequiredDate', 'ShippedDate', 'ShipVia', 'Freight', 'ShipName', 'ShipAddress', 'ShipCity', 'ShipRegion', 'ShipPostalCode', 'ShipCountry'], - [60003, 2, Date, Date + 10, Date + 2, 1, 722.23, 'Bottom-Dollar Markets', 'Fauntleroy Circus', 'Rio de Janeiro', 'RJ', '50730', 'Brazil']); - - Result := True; - except - Result := False; - if dtCustomers.Editing then dtCustomers.Cancel; - if dtOrders.Editing then dtOrders.Cancel; - end; -end; - -procedure TXSLTMainForm.XSLTTransformationButtonClick(Sender: TObject); -var - resfilename, xsltname: string; -begin - dtCustomers.open; - dtOrders.open; - - dtCustomers.First; - - // Loads the XSLT document - if (Sender = GenerateHTMLButton) then begin - xsltname := 'CustomersToHTML.xsl'; - resfilename := HTMLFileName; - end - else begin - xsltname := 'CustomersToSimpleXML.xsl'; - resfilename := TempFileName; - end; - XMLAdapter.WriteXSLT.LoadFromFile(xsltname); - RefreshXMLView(resfilename); -end; - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.dfm deleted file mode 100644 index 75ebc6a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.dfm +++ /dev/null @@ -1,5 +0,0 @@ -object BaseLoginService: TBaseLoginService - OldCreateOrder = True - Height = 300 - Width = 300 -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.pas deleted file mode 100644 index d20b514..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BaseLoginService_Impl.pas +++ /dev/null @@ -1,50 +0,0 @@ -unit BaseLoginService_Impl; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library } -{ } -{ compiler: Delphi 6 and up, Kylix 3 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Required:} uRORemoteDataModule, - {Generated:} DataAbstract4_Intf; - -type - { TBaseLoginService } - TBaseLoginService = class (TRORemoteDataModule, IBaseLoginService) - private - fOnLogout: TNotifyEvent; - protected - { IBaseLoginService methods } - procedure Logout; - published - property OnLogout: TNotifyEvent read fOnLogout write fOnLogout; - end; - -implementation - -uses - {Generated:} DataAbstract4_Invk; - -{ BaseLoginService } - -procedure TBaseLoginService.Logout; -begin - if assigned(OnLogout) then - OnLogout(self); -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildDrivers.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildDrivers.bpg deleted file mode 100644 index 623bf1a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildDrivers.bpg +++ /dev/null @@ -1,69 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DAADODrv.dad DABDEDrv.dad DADBISAM3Drv.dad DADBISAM4Drv.dad DADBXDrv.dad DAFIBDrv.dad DAIBDACDrv.dad DAIBODrv.dad DAIBXDrv.dad DAMyDACDrv.dad DAMySQLDACDrv.dad DANexusDBDrv.dad DAODACDrv.dad DAPostgresDACDrv.dad DASDACDrv.dad \ - DASQLiteDrv.dad DAZeosDrv.dad -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DAADODrv.dad: Drivers\DAADODrv.dpr - $(DCC) - -DAIBXDrv.dad: Drivers\DAIBXDrv.dpr - $(DCC) - -DADBXDrv.dad: Drivers\DADBXDrv.dpr - $(DCC) - -DAIBODrv.dad: Drivers\DAIBODrv.dpr - $(DCC) - -DAODACDrv.dad: Drivers\DAODACDrv.dpr - $(DCC) - -DASDACDrv.dad: Drivers\DASDACDrv.dpr - $(DCC) - -DADBISAM3Drv.dad: Drivers\DADBISAM3Drv.dpr - $(DCC) - -DADBISAM4Drv.dad: Drivers\DADBISAM4Drv.dpr - $(DCC) - -DAMyDACDrv.dad: Drivers\DAMyDACDrv.dpr - $(DCC) - -DAIBDACDrv.dad: Drivers\DAIBDACDrv.dpr - $(DCC) - -DAFIBDrv.dad: Drivers\DAFIBDrv.dpr - $(DCC) - -DAPostgresDACDrv.dad: Drivers\DAPostgresDACDrv.dpr - $(DCC) - -DAMySQLDACDrv.dad: Drivers\DAMySQLDACDrv.dpr - $(DCC) - -DABDEDrv.dad: Drivers\DABDEDrv.dpr - $(DCC) - -DANexusDBDrv.dad: Drivers\DANexusDBDrv.dpr - $(DCC) - -DAZeosDrv.dad: Drivers\DAZeosDrv.dpr - $(DCC) - -DASQLiteDrv.dad: Drivers\DASQLiteDrv.dpr - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.bdsgroup b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.bdsgroup deleted file mode 100644 index 0f3352d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.bdsgroup +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - DataAbstract_Core_D10.bdsproj - ..\..\Pascal Script for Delphi\Source\PascalScript_Core_D10.bdsproj - DataAbstract_Scripting_D10.bdsproj - IDE\DataAbstract_IDE_D10.bdsproj - Drivers\DataAbstract_ADODriver_D10.bdsproj - Drivers\DataAbstract_IBXDriver_D10.bdsproj - Drivers\DataAbstract_DBXDriver_D10.bdsproj - Drivers\DataAbstract_DBISAMDriver_D10.bdsproj - Drivers\DataAbstract_IBODriver_D10.bdsproj - Drivers\DataAbstract_MyDACDriver_D10.bdsproj - Drivers\DataAbstract_ODACDriver_D10.bdsproj - Drivers\DataAbstract_SDACDriver_D10.bdsproj - Drivers\DataAbstract_FIBDriver_D10.bdsproj - Drivers\DataAbstract_PostgresDACDriver_D10.bdsproj - Drivers\DataAbstract_IBDACDriver_D10.bdsproj - Drivers\DataAbstract_BDEDriver_D10.bdsproj - Drivers\DataAbstract_SQLiteDriver_D10.bdsproj - Drivers\DataAbstract_NexusDBDriver_D10.bdsproj - Drivers\DataAbstract_MySQLDACDriver_D10.bdsproj - Drivers\DataAbstract_ZeosDriver_D10.bdsproj - DataAbstract_Core_D10.bpl DataAbstract_Scripting_D10.bpl DataAbstract_IDE_D10.bpl DataAbstract_ADODriver_D10.bpl DataAbstract_IBXDriver_D10.bpl DataAbstract_DBXDriver_D10.bpl DataAbstract_SDACDriver_D10.bpl DataAbstract_ODACDriver_D10.bpl DataAbstract_IBODriver_D10.bpl DataAbstract_DBISAMDriver_D10.bpl DataAbstract_MyDACDriver_D10.bpl DataAbstract_FIBDriver_D10.bpl DataAbstract_IBDACDriver_D10.bpl DataAbstract_BDEDriver_D10.bpl DataAbstract_ZeosDriver_D10.bpl DataAbstract_MySQLDACDriver_D10.bpl DataAbstract_NexusDBDriver_D10.bpl DataAbstract_SQLiteDriver_D10.bpl DataAbstract_PostgresDACDriver_D10.bpl - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.groupproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.groupproj deleted file mode 100644 index 1b3c5a9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D10.groupproj +++ /dev/null @@ -1,202 +0,0 @@ - - - {788d1e93-6494-4009-bad7-5d620a616e08} - - - - - Default.Personality - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D6.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D6.bpg deleted file mode 100644 index 1bff92f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D6.bpg +++ /dev/null @@ -1,79 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DataAbstract_Core_D6.bpl DataAbstract_Scripting_D6.bpl DataAbstract_IDE_D6.bpl DataAbstract_ADODriver_D6.bpl DataAbstract_IBXDriver_D6.bpl DataAbstract_DBXDriver_D6.bpl DataAbstract_SDACDriver_D6.bpl DataAbstract_ODACDriver_D6.bpl \ - DataAbstract_IBODriver_D6.bpl DataAbstract_DBISAMDriver_D6.bpl DataAbstract_MyDACDriver_D6.bpl DataAbstract_FIBDriver_D6.bpl DataAbstract_IBDACDriver_D6.bpl DataAbstract_BDEDriver_D6.bpl DataAbstract_ZeosDriver_D6.bpl \ - DataAbstract_MySQLDACDriver_D6.bpl DataAbstract_NexusDBDriver_D6.bpl DataAbstract_SQLiteDriver_D6.bpl DataAbstract_PostgresDACDriver_D6.bpl -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DataAbstract_Core_D6.bpl: DataAbstract_Core_D6.dpk - $(DCC) - -DataAbstract_IDE_D6.bpl: IDE\DataAbstract_IDE_D6.dpk - $(DCC) - -DataAbstract_ADODriver_D6.bpl: Drivers\DataAbstract_ADODriver_D6.dpk - $(DCC) - -DataAbstract_IBXDriver_D6.bpl: Drivers\DataAbstract_IBXDriver_D6.dpk - $(DCC) - -DataAbstract_SDACDriver_D6.bpl: Drivers\DataAbstract_SDACDriver_D6.dpk - $(DCC) - -DataAbstract_DBXDriver_D6.bpl: Drivers\DataAbstract_DBXDriver_D6.dpk - $(DCC) - -DataAbstract_ODACDriver_D6.bpl: Drivers\DataAbstract_ODACDriver_D6.dpk - $(DCC) - -DataAbstract_IBODriver_D6.bpl: Drivers\DataAbstract_IBODriver_D6.dpk - $(DCC) - -DataAbstract_DBISAMDriver_D6.bpl: Drivers\DataAbstract_DBISAMDriver_D6.dpk - $(DCC) - -DataAbstract_MyDACDriver_D6.bpl: Drivers\DataAbstract_MyDACDriver_D6.dpk - $(DCC) - -DataAbstract_Scripting_D6.bpl: DataAbstract_Scripting_D6.dpk - $(DCC) - -PascalScript_Core_D6.bpl: ..\..\Pascal Script for Delphi\Source\PascalScript_Core_D6.dpk - $(DCC) - -DataAbstract_FIBDriver_D6.bpl: Drivers\DataAbstract_FIBDriver_D6.dpk - $(DCC) - -DataAbstract_IBDACDriver_D6.bpl: Drivers\DataAbstract_IBDACDriver_D6.dpk - $(DCC) - -DataAbstract_BDEDriver_D6.bpl: Drivers\DataAbstract_BDEDriver_D6.dpk - $(DCC) - -DataAbstract_ZeosDriver_D6.bpl: Drivers\DataAbstract_ZeosDriver_D6.dpk - $(DCC) - -DataAbstract_MySQLDACDriver_D6.bpl: Drivers\DataAbstract_MySQLDACDriver_D6.dpk - $(DCC) - -DataAbstract_NexusDBDriver_D6.bpl: Drivers\DataAbstract_NexusDBDriver_D6.dpk - $(DCC) - -DataAbstract_SQLiteDriver_D6.bpl: Drivers\DataAbstract_SQLiteDriver_D6.dpk - $(DCC) - -DataAbstract_PostgresDACDriver_D6.bpl: Drivers\DataAbstract_PostgresDACDriver_D6.dpk - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D7.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D7.bpg deleted file mode 100644 index 92cf306..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_D7.bpg +++ /dev/null @@ -1,79 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DataAbstract_Core_D7.bpl DataAbstract_Scripting_D7.bpl DataAbstract_IDE_D7.bpl DataAbstract_ADODriver_D7.bpl DataAbstract_IBXDriver_D7.bpl DataAbstract_DBXDriver_D7.bpl DataAbstract_SDACDriver_D7.bpl DataAbstract_ODACDriver_D7.bpl \ - DataAbstract_IBODriver_D7.bpl DataAbstract_DBISAMDriver_D7.bpl DataAbstract_MyDACDriver_D7.bpl DataAbstract_FIBDriver_D7.bpl DataAbstract_IBDACDriver_D7.bpl DataAbstract_BDEDriver_D7.bpl DataAbstract_ZeosDriver_D7.bpl \ - DataAbstract_MySQLDACDriver_D7.bpl DataAbstract_NexusDBDriver_D7.bpl DataAbstract_SQLiteDriver_D7.bpl DataAbstract_PostgresDACDriver_D7.bpl -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DataAbstract_Core_D7.bpl: DataAbstract_Core_D7.dpk - $(DCC) - -DataAbstract_IDE_D7.bpl: IDE\DataAbstract_IDE_D7.dpk - $(DCC) - -DataAbstract_ADODriver_D7.bpl: Drivers\DataAbstract_ADODriver_D7.dpk - $(DCC) - -DataAbstract_IBXDriver_D7.bpl: Drivers\DataAbstract_IBXDriver_D7.dpk - $(DCC) - -DataAbstract_SDACDriver_D7.bpl: Drivers\DataAbstract_SDACDriver_D7.dpk - $(DCC) - -DataAbstract_DBXDriver_D7.bpl: Drivers\DataAbstract_DBXDriver_D7.dpk - $(DCC) - -DataAbstract_ODACDriver_D7.bpl: Drivers\DataAbstract_ODACDriver_D7.dpk - $(DCC) - -DataAbstract_IBODriver_D7.bpl: Drivers\DataAbstract_IBODriver_D7.dpk - $(DCC) - -DataAbstract_DBISAMDriver_D7.bpl: Drivers\DataAbstract_DBISAMDriver_D7.dpk - $(DCC) - -DataAbstract_MyDACDriver_D7.bpl: Drivers\DataAbstract_MyDACDriver_D7.dpk - $(DCC) - -DataAbstract_Scripting_D7.bpl: DataAbstract_Scripting_D7.dpk - $(DCC) - -PascalScript_Core_D7.bpl: ..\..\Pascal Script for Delphi\Source\PascalScript_Core_D7.dpk - $(DCC) - -DataAbstract_FIBDriver_D7.bpl: Drivers\DataAbstract_FIBDriver_D7.dpk - $(DCC) - -DataAbstract_IBDACDriver_D7.bpl: Drivers\DataAbstract_IBDACDriver_D7.dpk - $(DCC) - -DataAbstract_BDEDriver_D7.bpl: Drivers\DataAbstract_BDEDriver_D7.dpk - $(DCC) - -DataAbstract_ZeosDriver_D7.bpl: Drivers\DataAbstract_ZeosDriver_D7.dpk - $(DCC) - -DataAbstract_MySQLDACDriver_D7.bpl: Drivers\DataAbstract_MySQLDACDriver_D7.dpk - $(DCC) - -DataAbstract_NexusDBDriver_D7.bpl: Drivers\DataAbstract_NexusDBDriver_D7.dpk - $(DCC) - -DataAbstract_SQLiteDriver_D7.bpl: Drivers\DataAbstract_SQLiteDriver_D7.dpk - $(DCC) - -DataAbstract_PostgresDACDriver_D7.bpl: Drivers\DataAbstract_PostgresDACDriver_D7.dpk - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_K3.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_K3.bpg deleted file mode 100644 index 6649fe0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/BuildPackages_K3.bpg +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DataAbstract_Core_K3.bpl bplDataAbstract_IDE_K3.so -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DataAbstract_Core_K3.bpl: DataAbstract_Core_K3.dpk - $(DCC) - -bplDataAbstract_IDE_K3.so: IDE/DataAbstract_IDE_K3.dpk - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DALoginService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DALoginService_Impl.pas deleted file mode 100644 index 9cb0351..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DALoginService_Impl.pas +++ /dev/null @@ -1,199 +0,0 @@ -unit DALoginService_Impl {$IFNDEF FPC}deprecated{$ENDIF}; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROSessions, - {Ancestor Implementation:} DARemoteService_Impl, - {Generated:} DataAbstract3_Intf; - -const - def_UserID = 'UserID'; - def_Password = 'UserPassword'; - def_SessionID = 'SessionID'; - -type - TDALoginService = class; - - TDAOnLoginEvent = procedure(Sender : TDALoginService; var aUserID, aPassword : string) of object; - TDAOnLoginSuccessEvent = procedure(Sender : TDALoginService; aLoginInfo : TDALoginInfo) of object; - TDAOnLoginFailureEvent = procedure(Sender : TDALoginService; const aUserID, aPassword : string) of object; - TDAOnLogoutEvent = procedure(Sender : TDALoginService; const aSessionID : TGUID) of object; - - { TDALoginService } - TDALoginService = class(TDARemoteService, IDALoginService) - private - fLoginDataset: string; - fLogoutCommand: string; - fOnLogin: TDAOnLoginEvent; - fOnLoginFailure: TDAOnLoginFailureEvent; - fOnLoginSuccess: TDAOnLoginSuccessEvent; - fOnLogout: TDAOnLogoutEvent; - fParamNameUserID: string; - fParamNamePassword: string; - fParamNameSessionID: string; - function GetParamNamePasswordStored: Boolean; - function GetParamNameUserIDStored: Boolean; - function GetParamNameSessionIDStored: Boolean; - procedure SetParamNameSessionID(const Value: string); - - protected - procedure SetLoginDataset(const Value: string); virtual; - procedure SetLogoutCommand(const Value: string); virtual; - - procedure SetParamNamePassword(const Value: string); virtual; - procedure SetParamNameUserID(const Value: string); virtual; - - function DoLogin(const UserID, Password: String; out LoginInfo: TDALoginInfo): boolean; virtual; - procedure DoLogout(const SessionID : TGUID); virtual; - - { IDALoginService methods } - function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; - procedure Logout; - - public - constructor Create(aOwner : TComponent); override; - - published - property LoginDataset : string read fLoginDataset write SetLoginDataset; - property LogoutCommand : string read fLogoutCommand write SetLogoutCommand; - - property ParamNameUserID : string read fParamNameUserID write SetParamNameUserID stored GetParamNameUserIDStored; - property ParamNamePassword : string read fParamNamePassword write SetParamNamePassword stored GetParamNamePasswordStored; - property ParamNameSessionID : string read fParamNameSessionID write SetParamNameSessionID stored GetParamNameSessionIDStored; - - property OnLogin: TDAOnLoginEvent read fOnLogin write fOnLogin; - property OnLoginSuccess: TDAOnLoginSuccessEvent read fOnLoginSuccess write fOnLoginSuccess; - property OnLoginFailure: TDAOnLoginFailureEvent read fOnLoginFailure write fOnLoginFailure; - property OnLogout: TDAOnLogoutEvent read fOnLogout write fOnLogout; - end deprecated; - -implementation - -uses - {Generated:} uDAInterfaces; - -{ DALoginService } -constructor TDALoginService.Create(aOwner: TComponent); -begin - fParamNameUserID := def_UserID; - fParamNamePassword := def_Password; - fParamNameSessionID := def_SessionID; - - inherited; -end; - -procedure TDALoginService.SetLoginDataset(const Value: string); -begin - fLoginDataset := Value; -end; - -procedure TDALoginService.SetLogoutCommand(const Value: string); -begin - fLogoutCommand := Value; -end; - -function TDALoginService.Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; -var tempuserid, temppassword : string; -begin - tempuserid := UserID; - temppassword := Password; - - CheckObjects(Connection, ServiceSchema, NIL, TRUE, TRUE, FALSE); - - if Assigned(fOnLogin) then fOnLogin(Self, tempuserid, temppassword); - - result := DoLogin(tempuserid, temppassword, LoginInfo); - - if not result then begin - DestroySession; - if Assigned(fOnLoginFailure) then fOnLoginFailure(Self, tempuserid, temppassword); - end - else begin - if Assigned(fOnLoginSuccess) then fOnLoginSuccess(Self, LoginInfo); - end; -end; - -procedure TDALoginService.Logout; -begin - if (LogoutCommand<>'') - then CheckObjects(Connection, ServiceSchema, NIL, TRUE, TRUE, FALSE); - - if Assigned(fOnLogout) - then fOnLogout(Self, Session.SessionID); - - DoLogout(Session.SessionID); - - DestroySession; -end; - -function TDALoginService.DoLogin(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): boolean; -var ds : IDADataset; - i : integer; -begin - result := FALSE; - LoginInfo := NIL; - - ds := ServiceSchema.NewDataset(Connection, LoginDataset, [ParamNameUserID, ParamNamePassword], [UserID, Password]); - if ds.EOF then Exit; - - LoginInfo := TDALoginInfo.Create; - LoginInfo.UserID := UserID; - LoginInfo.SessionID := GUIDToString(Session.SessionID); - - for i := 0 to (ds.FieldCount-1) do begin - Session[ds.Fields[i].Name] := ds.Fields[i].Value; - LoginInfo.Attributes.Add(ds.Fields[i].Name+'='+ds.Fields[i].AsString); - end; - - result := TRUE; -end; - -procedure TDALoginService.DoLogout(const SessionID: TGUID); -var cmd : IDASQLCommand; -begin - if (LogoutCommand<>'') - then cmd := ServiceSchema.NewCommand(Connection, LogoutCommand, [ParamNameSessionID], [GUIDToString(SessionID)]); -end; - -procedure TDALoginService.SetParamNamePassword(const Value: string); -begin - fParamNamePassword := Value; -end; - -procedure TDALoginService.SetParamNameUserID(const Value: string); -begin - fParamNameUserID := Value; -end; - -function TDALoginService.GetParamNamePasswordStored: Boolean; -begin - result := fParamNamePassword<>def_Password -end; - -function TDALoginService.GetParamNameUserIDStored: Boolean; -begin - result := fParamNameUserID<>def_UserID -end; - -function TDALoginService.GetParamNameSessionIDStored: Boolean; -begin - result := fParamNameSessionID<>def_SessionID -end; - -procedure TDALoginService.SetParamNameSessionID(const Value: string); -begin - fParamNameSessionID := Value; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DARemoteService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DARemoteService_Impl.pas deleted file mode 100644 index d6e7e77..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DARemoteService_Impl.pas +++ /dev/null @@ -1,1087 +0,0 @@ -unit DARemoteService_Impl {$IFNDEF FPC}deprecated{$ENDIF}; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library } -{ } -{ compiler: Delphi 6 and up, Kylix 3 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{----------------------------------------------------------------------------} -{ LEGACY NOTE: } -{ As of v4.0, future development of this unit has been discontinued, and } -{ new featureswill be impleentd in DataAbstractService_Impl.pas, instead. } -{ } -{ When applying fixes to this unit, please propagate them to the new unit } -{ as well, where needed. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - Classes, SysUtils, - {$IFDEF DELPHI5}Forms, {$ENDIF} - uRORemoteDataModule, uROClientIntf, uROSessions, uROClasses, uROTypes, - uDAClasses, uDAInterfaces, uDADataTable, uDABusinessProcessor, uDACache, uDADelta, uDADataStreamer, - uDADataTableReferenceCollection, DataAbstract3_Intf; - -type - { Types } - TDARemoteService = class; - - { Events } - TDAAcquireConnectionEvent = procedure(Sender: TDARemoteService; var ConnectionName: string) of object; - TDAConnectionAcquiredEvent = procedure(Sender: TDARemoteService; const ConnectionName: string; const AcquiredConnection: IDAConnection) of object; - TDAAcquireConnectionFailureEvent = procedure(Sender: TDARemoteService; const ConnectionName: string; Error: Exception) of object; - TDAGetDatasetSchemaEvent = procedure(const Dataset: IDADataset) of object; - TDAGetDatasetDataEvent = procedure(const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer) of object; - TDAOnBusinessProcessorAutoCreated = procedure(Sender : TRORemoteDataModule; BusinessProcessor : TDABusinessProcessor) of object; - TDABeforeExecuteCommandEvent = procedure(Sender : TDARemoteService; const aCommand : IDASQLCommand) of object; - TDAAfterExecuteCommandEvent = procedure(Sender : TDARemoteService; const aCommand : IDASQLCommand; RowsAffacted : integer) of object; - TDAConnectionReleasedEvent = procedure(Sender: TDARemoteService; const ConnectionName: string) of object; - TDAGetSchemaAsXMLEvent = procedure(Sender: TDARemoteService; var SchemaXML : string) of object; - - TDAProcessDeltasEvent = procedure(Sender : TDARemoteService; DeltaStructs : TDADeltaStructList) of object; - TDAProcessDeltasErrorEvent = procedure(Sender : TDARemoteService; DeltaStructs : TDADeltaStructList; Error : Exception; var DoRaise : boolean) of object; - - TDAOnGetCachedDataset = procedure(Sender : TDARemoteService; const aDatasetName : string; aDataStream : TStream) of object; - - TDAGetDatasetDataValidationEvent = procedure(Sender: TDARemoteService; - const aConnection: IDAConnection; - const aDatasetName: string; - const aParamNames: array of string; - const aParamValues : array of variant; - aSchema: TDASchema; - var Allowed : boolean) of object; - - TDAUpdateDataTransactionEvent = procedure(Sender: TDARemoteService; var UseDefaultTransactionLogic: Boolean) of object; - - TDAAfterProcessTransactionAction = (pptaNone, pptaRollback, pptaCommit); - - { TDARemoteService } - TDARemoteServiceOption = (rsoProcessDeltasWithoutUpdateRules); - TDARemoteServiceOptions = set of TDARemoteServiceOption; - - TDARemoteService = class(TRORemoteDataModule, IDARemoteService) - private - fServiceSchema: TDASchema; - - fStreamedAcquireConnection, - fAcquireConnection: boolean; - fConnectionName: string; - fOnBeforeAcquireConnection: TDAAcquireConnectionEvent; - fOnAfterAcquireConnection: TDAConnectionAcquiredEvent; - fOnAfterReleaseConnection: TDAConnectionReleasedEvent; - fOnBeforeReleaseConnection: TDAConnectionAcquiredEvent; - fConnection: IDAConnection; - fServiceAdapter: TDADataStreamer; - fOnAcquireConnectionFailure: TDAAcquireConnectionFailureEvent; - - fOnAfterGetDatasetData: TDAGetDatasetDataEvent; - fOnBeforeGetDatasetData: TDAGetDatasetDataEvent; - fOnAfterGetDatasetSchema: TDAGetDatasetSchemaEvent; - fOnBeforeGetDatasetSchema: TDAGetDatasetSchemaEvent; - fAutoCreateBusinessProcessors: boolean; - fAllowExecuteSQLCommand: boolean; - fAllowWhereSQL: boolean; - fOnBusinessProcessorAutoCreated: TDAOnBusinessProcessorAutoCreated; - fOnBeforeExecuteCommand: TDABeforeExecuteCommandEvent; - fOnAfterExecuteCommand: TDAAfterExecuteCommandEvent; - fOnGetSchemaAsXML: TDAGetSchemaAsXMLEvent; - - fGetDatasetDataValidation: TDAGetDatasetDataValidationEvent; - - fAfterProcessTransactionAction: TDAAfterProcessTransactionAction; - - fOnUpdateDataBeginTransaction : TDAUpdateDataTransactionEvent; - fOnUpdateDataCommitTransaction : TDAUpdateDataTransactionEvent; - fOnUpdateDataRollBackTransaction : TDAUpdateDataTransactionEvent; - - fOnBeforeProcessDeltas : TDAProcessDeltasEvent; - fOnAfterProcessDeltas: TDAProcessDeltasEvent; - fOnProcessDeltasError: TDAProcessDeltasErrorEvent; - fExportedDataTables: TDADataTableReferenceCollection; - fCache: TDACache; - fCacheElements: TDACacheElementCollection; - fOnGetCachedDataset: TDAOnGetCachedDataset; - fOptions: TDARemoteServiceOptions; - - function TriggerTransactionEvent(aEvent: TDAUpdateDataTransactionEvent): Boolean; - procedure SetServiceSchema(const Value: TDASchema); - procedure SetAcquireConnection(const Value: boolean); - procedure SetConnectionName(const Value: string); - procedure SetServiceAdapter(const Value: TDADataAdapter); - function UnpackDeltas(const DeltaStream: Binary; DeltaStructList : TDADeltaStructList): integer; - procedure SetExportedDataTables(const Value: TDADataTableReferenceCollection); - procedure MergeDatatablesToSchema(aList : TList); - procedure SetCache(const Value: TDACache); - procedure SetCacheElements(const Value: TDACacheElementCollection); - procedure SetConnection(const aValue: IDAConnection); - - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure Loaded; override; - - procedure CheckObjects(const aConnection: IDAConnection; - aSchema: TDASchema; anAdapter: TDADataAdapter; - CheckConnection : boolean = TRUE; - CheckSchema : boolean = TRUE; - CheckAdapter : boolean = TRUE); - - { Internal } - procedure DoOnActivate(aClientID: TGUID; const aMessage: IROMessage); override; - procedure DoOnDeactivate(aClientID: TGUID); override; - - function DoGetDatasetData(const Stream: TStream; - const aConnection: IDAConnection; - const aDatasetName: string; - const aParamNames: array of string; - const aParamValues : array of variant; - const UserFilter : string; - aSchema: TDASchema; - anAdapter: TDADataAdapter; - someOptions: TDAWriteOptions; - MaxRecords: integer): integer; virtual; - - function CreateParamString(const ParamNames: array of string; const ParamValues: array of Variant): string; - - function GetDatasetData(const DatasetName: string; - const ParamNames: array of string; - const ParamValues: array of Variant; - const IncludeSchema: Boolean = FALSE; - const MaxRecords: Integer = -1): Binary; overload; - function GetDatasetData(const DatasetName: string; - const IncludeSchema: Boolean = FALSE; - const MaxRecords: Integer = -1): Binary; overload; - - { IDARemoteService } - function GetDatasetSchema(const aDatasetName: string): Binary; virtual; - function GetDatasetData(const DatasetName: string; - const Params: string; - const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; overload; virtual; - function UpdateData(const Delta: Binary): Binary; virtual; - function ExecuteSQLCommand(const SQL: string): Integer; virtual; - function GetSchemaAsXML: String; virtual; - function GetDatasetDataEx(const DatasetName: String; - const Params: TDADatasetParamArray; - const UserFilter: String; - const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; - function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): TROBinaryMemoryStream; - function GetDatasetScripts(const DatasetNames: String): String; - function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - property Connection: IDAConnection read fConnection write SetConnection; - - published - property AcquireConnection: boolean read fAcquireConnection write SetAcquireConnection default false; - property ConnectionName: string read fConnectionName write SetConnectionName; - - property ServiceSchema: TDASchema read fServiceSchema write SetServiceSchema; - property ServiceAdapter: TDADataAdapter read fServiceAdapter write SetServiceAdapter; - - property AutoCreateBusinessProcessors : boolean read fAutoCreateBusinessProcessors write fAutoCreateBusinessProcessors default true; - property AllowExecuteSQLCommand: boolean read fAllowExecuteSQLCommand write fAllowExecuteSQLCommand default false; - property AllowWhereSQL: boolean read fAllowWhereSQL write fAllowWhereSQL default true; - - property OnAfterProcessTransactionAction: TDAAfterProcessTransactionAction read fAfterProcessTransactionAction write fAfterProcessTransactionAction default pptaCommit; - - property OnBeforeAcquireConnection: TDAAcquireConnectionEvent read fOnBeforeAcquireConnection write fOnBeforeAcquireConnection; - property OnAfterAcquireConnection: TDAConnectionAcquiredEvent read fOnAfterAcquireConnection write fOnAfterAcquireConnection; - property OnBeforeReleaseConnection: TDAConnectionAcquiredEvent read fOnBeforeReleaseConnection write fOnBeforeReleaseConnection; - property OnAfterReleaseConnection: TDAConnectionReleasedEvent read fOnAfterReleaseConnection write fOnAfterReleaseConnection; - property OnAcquireConnectionFailure: TDAAcquireConnectionFailureEvent read fOnAcquireConnectionFailure write fOnAcquireConnectionFailure; - - property OnBeforeProcessDeltas : TDAProcessDeltasEvent read fOnBeforeProcessDeltas write fOnBeforeProcessDeltas; - property OnAfterProcessDeltas: TDAProcessDeltasEvent read fOnAfterProcessDeltas write fOnAfterProcessDeltas; - property OnProcessDeltasError: TDAProcessDeltasErrorEvent read fOnProcessDeltasError write fOnProcessDeltasError; - - property OnBeforeGetDatasetSchema: TDAGetDatasetSchemaEvent read fOnBeforeGetDatasetSchema write fOnBeforeGetDatasetSchema; - property OnBeforeGetDatasetData: TDAGetDatasetDataEvent read fOnBeforeGetDatasetData write fOnBeforeGetDatasetData; - property OnAfterGetDatasetSchema: TDAGetDatasetSchemaEvent read fOnAfterGetDatasetSchema write fOnAfterGetDatasetSchema; - property OnAfterGetDatasetData: TDAGetDatasetDataEvent read fOnAfterGetDatasetData write fOnAfterGetDatasetData; - property OnBusinessProcessorAutoCreated: TDAOnBusinessProcessorAutoCreated read fOnBusinessProcessorAutoCreated write fOnBusinessProcessorAutoCreated; - property OnBeforeExecuteCommand: TDABeforeExecuteCommandEvent read fOnBeforeExecuteCommand write fOnBeforeExecuteCommand; - property OnAfterExecuteCommand: TDAAfterExecuteCommandEvent read fOnAfterExecuteCommand write fOnAfterExecuteCommand; - property OnGetSchemaAsXMLEvent: TDAGetSchemaAsXMLEvent read fOnGetSchemaAsXML write fOnGetSchemaAsXML; - property GetDatasetDataValidation: TDAGetDatasetDataValidationEvent read fGetDatasetDataValidation write fGetDatasetDataValidation; - - property OnUpdateDataBeginTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataBeginTransaction write fOnUpdateDataBeginTransaction; - property OnUpdateDataCommitTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataCommitTransaction write fOnUpdateDataCommitTransaction; - property OnUpdateDataRollBackTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataRollBackTransaction write fOnUpdateDataRollBackTransaction; - - property ExportedDataTables : TDADataTableReferenceCollection read fExportedDataTables write SetExportedDataTables; - property Cache : TDACache read fCache write SetCache; - property CacheElements : TDACacheElementCollection read fCacheElements write SetCacheElements; - property OnGetCachedDataset : TDAOnGetCachedDataset read fOnGetCachedDataset write fOnGetCachedDataset; - - property Options : TDARemoteServiceOptions read fOptions write fOptions; - end deprecated; - -implementation - -uses - Contnrs, Variants, TypInfo, - uROClient, - uDARes, uDAExceptions; - -{ TDARemoteService } - -constructor TDARemoteService.Create(aOwner: TComponent); -begin - fExportedDataTables := TDADataTableReferenceCollection.Create(Self); - fCacheElements := TDACacheElementCollection.Create(); - fOptions := [rsoProcessDeltasWithoutUpdateRules]; - fAllowWhereSQL := true; - - inherited; - - fAutoCreateBusinessProcessors := TRUE; -end; - -destructor TDARemoteService.Destroy; -begin - inherited; - - FreeAndNIL(fExportedDataTables); - FreeAndNIL(fCacheElements); -end; - -procedure TDARemoteService.DoOnActivate(aClientID: TGUID; const aMessage: IROMessage); -var - connname: string; -begin - inherited; - - if (csDesigning in ComponentState) then Exit; - - if AcquireConnection then try - // Acquires a DA connection automatically - if (fServiceSchema = nil) or (fServiceSchema.ConnectionManager = nil) then RaiseError(err_DARDMInvalidSchema); - - connname := fConnectionName; - if Assigned(fOnBeforeAcquireConnection) then fOnBeforeAcquireConnection(Self, connname); - - fConnection := ServiceSchema.ConnectionManager.NewConnection(connname); - if Supports(fConnection, IDAHETConnection) then - raise Exception.Create(err_HETConnectionNotSupportedInV3); - - if Assigned(fOnAfterAcquireConnection) then fOnAfterAcquireConnection(Self, connname, fConnection); - except - on E: Exception do begin - if Assigned(fOnAcquireConnectionFailure) then fOnAcquireConnectionFailure(Self, connname, E); - raise; - end; - end; -end; - -procedure TDARemoteService.DoOnDeactivate(aClientID: TGUID); -var connname : string; -begin - inherited; - - if (csDesigning in ComponentState) then Exit; - - if assigned(fConnection) then begin - connname := fConnection.Name; - - if Assigned(fOnBeforeReleaseConnection) - then fOnBeforeReleaseConnection(Self, connname, fConnection); - - fConnection := nil; - - if Assigned(fOnAfterReleaseConnection) - then fOnAfterReleaseConnection(Self, connname); - end; -end; - -procedure TDARemoteService.Loaded; -begin - inherited; - - AcquireConnection := fStreamedAcquireConnection; -end; - -procedure TDARemoteService.CheckObjects(const aConnection: IDAConnection; - aSchema: TDASchema; anAdapter: TDADataAdapter; - CheckConnection : boolean = TRUE; - CheckSchema : boolean = TRUE; - CheckAdapter : boolean = TRUE); -begin - if CheckConnection and not Assigned(aConnection) then RaiseError(err_DARDMConnectionIsNotAssigned); - if CheckSchema and not Assigned(aSchema) then RaiseError(err_DARDMInvalidSchema); - if CheckAdapter and not Assigned(anAdapter) then RaiseError(err_DARDMUnassignedAdapter); -end; - -procedure TDARemoteService.Notification(AComponent: TComponent; - Operation: TOperation); -var ref : TDADataTableReference; -begin - inherited; - - if (Operation = opRemove) then begin - if (aComponent = fServiceSchema) then ServiceSchema := nil - else if (AComponent=fCache) then fCache := NIL - else if (aComponent = fServiceAdapter) then ServiceAdapter := nil - else if (AComponent is TDADataTable) and (fExportedDataTables<>NIL) then begin - ref := fExportedDataTables.FindByDataTable(TDADataTable(aComponent)); - if (ref<>NIL) then ref.DataTable := NIL; - end; - end - - else if (Operation = opInsert) then begin - if not (csLoading in ComponentState) and (AComponent is TDASchema) and (fServiceSchema = nil) and (AComponent.Owner = Self) then ServiceSchema := TDASchema(aComponent); - end; -end; - -procedure TDARemoteService.SetAcquireConnection(const Value: boolean); -begin - if (csLoading in ComponentState) then - fStreamedAcquireConnection := Value - else begin - if Value then begin - if (fServiceSchema = nil) then raise Exception.Create(err_DARDMInvalidSchema); - end; - - fAcquireConnection := Value; - end; -end; - -procedure TDARemoteService.SetConnection(const aValue: IDAConnection); -begin - if assigned(fConnection) and Supports(fConnection, IDAHETConnection) then - raise Exception.Create(err_HETConnectionNotSupportedInV3); - fConnection := aValue; -end; - -procedure TDARemoteService.SetConnectionName(const Value: string); -begin - fConnectionName := Trim(Value); - if (fConnectionName = '') then fAcquireConnection := FALSE; -end; - -procedure TDARemoteService.SetServiceSchema(const Value: TDASchema); -begin - fServiceSchema := Value; - - if (fServiceSchema <> nil) then - fServiceSchema.FreeNotification(Self) - else - fAcquireConnection := FALSE; -end; - -procedure TDARemoteService.SetServiceAdapter(const Value: TDADataAdapter); -begin - fServiceAdapter := Value; - if (fServiceAdapter <> nil) then fServiceAdapter.FreeNotification(Self); -end; - -function TDARemoteService.TriggerTransactionEvent(aEvent: TDAUpdateDataTransactionEvent): Boolean; -begin - result := true; - if assigned(aEvent) then aEvent(self, result); -end; - -function TDARemoteService.DoGetDatasetData( - const Stream: TStream; - const aConnection: IDAConnection; - const aDatasetName: string; - const aParamNames: array of string; - const aParamValues : array of variant; - const UserFilter : string; - aSchema: TDASchema; - anAdapter: TDADataAdapter; - someOptions: TDAWriteOptions; - MaxRecords: integer): integer; - -var - ds: IDADataset; - i, cnt: integer; - paramname: string; - paramvalue: variant; - inclrows, - inclschema: boolean; - allow : boolean; - ref : TDADataTableReference; - cachedentry : IDACacheEntry; - cacheelement : TDACacheElement; -begin - // Misc - cachedentry := NIL; - - inclschema := (woSchema in someOptions); - inclrows := (woRows in someOptions); - ref := NIL; - - if (fCache<>NIL) then begin - // If the service is connected to a cache, then it searches the cache for this dataset - cachedentry := fCache.Get(Self.Name+'.'+aDatasetName); - end; - - if (cachedentry=NIL) then begin - // New: searches for a datatable reference that matches the request, if any are present - // This allows the user to return in memory datasets or other custom data - if (fExportedDataTables.Count>0) then begin - ref := fExportedDataTables.FindByName(aDatasetName); // Already checks the datatable is not NIL - if (ref<>NIL) then begin - ds := ref.Dataset; - end; - end; - end; - - // Checks for connection, schema and adapter to be assigned since it will need to query the DB in this case - if (ref=NIL) and (cachedentry=NIL) - then CheckObjects(aConnection, aSchema, anAdapter); - - // Security check, common to every case - allow := TRUE; - if Assigned(fGetDatasetDataValidation) - then fGetDatasetDataValidation(Self, aConnection, aDatasetName, aParamNames, aParamValues, aSchema, allow); - - if not allow - then raise EDADatasetNotAccessible.CreateFmt(err_DatasetNotAccessible, [aDatasetName]); - - // Returns the actual data. Cached and non-cached data follow two different paths (some events are not triggered in the - // case of cached data, since we don't have an actual IDADataset to reference) - - if (cachedentry<>NIL) then begin - if Assigned(fOnGetCachedDataset) then fOnGetCachedDataset(Self, aDatasetName, cachedentry.Data); - - result := cachedentry.RecordCount; - Stream.CopyFrom(cachedentry.Data, 0); - end - else begin - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - try - - // Gets a reference to the dataset if it couldn't find a datatable to match the request... - if (ref=NIL) then - ds := aSchema.NewDataset(aConnection, aDatasetName); - - // Fills the parameters (if any are specified) - cnt := Length(aParamNames); - if (cnt>0) then begin - for i := 0 to (cnt-1) do begin - paramname := aParamNames[i]; - paramvalue := aParamValues[i]; - - ds.ParamByName(paramname).Value := paramvalue; - end; - end; - - // Applies the UserFilter, if any specified - if (Trim(UserFilter)<>'') then begin - if not AllowWhereSQL then - raise Exception.Create('Passing of clear text WHERE clauses has been disabled (GetData)'); - ds.Where.AddText(UserFilter); - end; - - // ...and writes the data fireing the right events - if inclschema and Assigned(fOnBeforeGetDatasetSchema) then fOnBeforeGetDatasetSchema(ds); - if inclrows and Assigned(fOnBeforeGetDatasetData) then fOnBeforeGetDatasetData(ds, inclschema, MaxRecords); - - result := anAdapter.WriteDataset(stream, ds, someOptions, MaxRecords); - - if inclschema and Assigned(fOnAfterGetDatasetSchema) then fOnAfterGetDatasetSchema(ds); - if inclrows and Assigned(fOnAfterGetDatasetData) then fOnAfterGetDatasetData(ds, inclschema, MaxRecords); - - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; - - // Checks if it needs to stored it in the cache - if (fCache<>NIL) then begin - cacheelement := fCacheElements.FindByDatasetName(aDatasetName); - if (cacheelement=NIL) or not cacheelement.Enabled then Exit; - - fCache.Store(Self.Name+'.'+aDatasetName, stream, TRUE, result, cacheelement.MaxReads, cacheelement.Duration); - end; - - end; -end; - -function TDARemoteService.GetDatasetSchema( - const aDatasetName: string): Binary; -var tempds : IDADataset; - schemads : TDADataset; - dummyrefs : TObjectList; -begin - dummyrefs := NIL; - - CheckObjects(Connection, ServiceSchema, ServiceAdapter); - - result := Binary.Create; - try - try - // New: merges the data tables references by the service - if (fExportedDataTables.Count>0) then begin - dummyrefs := TObjectList.Create; - MergeDatatablesToSchema(dummyrefs); - end; - - // Improved this method: now it is not necessary to have statements associated to a dataset - // thus allowing for the definition of in memory datasets inside a schema - schemads := ServiceSchema.Datasets.DatasetByName(aDatasetName); - tempds := Connection.NewDataset('', aDatasetName); - - // Copies the schema - tempds.Fields.AssignFieldCollection(schemads.Fields); - tempds.Params.AssignParamCollection(schemads.Params); - - ServiceAdapter.WriteDataset(result, tempds, [woSchema], 0); - except - FreeAndNIL(result); - raise; - end; - finally - dummyrefs.Free; - end; -end; - -type - TBizProcessorReference = class(TObject) - private - end; - -function TDARemoteService.UnpackDeltas(const DeltaStream: Binary; - DeltaStructList : TDADeltaStructList): integer; -var x, i: integer; - deltaname: string; - bizproc: TDABusinessProcessor; - details : TDADatasetRelationshipList; - found: boolean; - struct : TDADeltaStruct; -begin - result := 0; - with ServiceAdapter do begin - - // Reads the deltas. - Initialize(DeltaStream, aiReadFromBeginning); - try - if (DeltaCount = 0) then Exit; - - for i := 0 to (DeltaCount - 1) do begin - deltaname := DeltaNames[i]; - found := FALSE; - - { Tries to locate a user-defined business processor } - for x := 0 to (Self.ComponentCount - 1) do - if (Self.Components[x] is TDABusinessProcessor) then begin - bizproc := TDABusinessProcessor(Self.Components[x]); - if SameText(bizproc.ReferencedDataset, deltaname) then begin - struct := DeltaStructList.Add(NewDelta(deltaname), bizproc); - ReadDelta(deltaname, struct.Delta); - - found := TRUE; - Break; - end; - end; - - { Either creates one or aborts raising an exception } - if not found then begin - if not AutoCreateBusinessProcessors then RaiseError(err_DARDMCannotFindProxessorForDelta, [deltaname]); - - bizproc := TDABusinessProcessor.Create(Self); - bizproc.ReferencedDataset := deltaname; - bizproc.Schema := ServiceSchema; - - struct := DeltaStructList.Add(NewDelta(deltaname), bizproc); - ReadDelta(deltaname, struct.Delta); - - if Assigned(fOnBusinessProcessorAutoCreated) - then fOnBusinessProcessorAutoCreated(Self, bizproc); - end; - - Inc(result); - end; - - if (result=0) then Exit; // Cannot process anything! - - { Sets the master/detail relationships } - with ServiceSchema do - if (RelationShips.Count>0) then begin - details := TDADatasetRelationshipList.Create; - try - - for i := 0 to DeltaStructList.Count-1 do begin - RelationShips.GetDetails(DeltaStructList[i].BusinessProcessor.ReferencedDataset, details); - if (details.Count=0) then Continue; - - { Prepares an array with the references to the detail deltas that will be used later on to adjust - autoincs, etc. } - for x := 0 to details.Count-1 do begin - struct := DeltaStructList.FindStruct(details[x].DetailDatasetName); - if (struct<>NIL) then begin - DeltaStructList[i].DetailDeltas.Add(struct.Delta); - DeltaStructList[i].RelationShips.Add(details[x]); - end; - end; - end; - finally - details.Free; - end; - - end; - finally - Finalize; - end; - end; -end; - -function TDARemoteService.UpdateData(const Delta: Binary): Binary; -var - deltastructs : TDADeltaStructList; - struct : TDADeltaStruct; - k, i: integer; - doraise : boolean; - processeddeltas : TStringList; - - function ProceedDefaultTransactionLogic(aEvent: TDAUpdateDataTransactionEvent): Boolean; - begin - Result := True; - if Assigned(aEvent) - then aEvent(Self, Result); - end; - - procedure FlushCache(const aDatasetName : string); - var element : TDACacheElement; - begin - if (fCache=NIL) or (fCacheElements.Count=0) then Exit; - - element := fCacheElements.FindByDatasetName(aDatasetName); - if (element=NIL) then Exit; - - if (ceoFlushOnUpdate in element.Options) - then fCache.Flush(Self.Name+'.'+aDatasetName); - end; - -begin - result := NIL; - processeddeltas := NIL; - - CheckObjects(Connection, ServiceSchema, ServiceAdapter); - - deltastructs := TDADeltaStructList.Create; - - with ServiceAdapter do try - try - // Reads the deltas. The order in which the are put in the stream indicates - // the order in which updates are being made - if not (UnpackDeltas(Delta, deltastructs)>0) then Exit; - - // Applies the updates - if ProceedDefaultTransactionLogic(fOnUpdateDataBeginTransaction) - then Connection.BeginTransaction; - - if Assigned(fOnBeforeProcessDeltas) then fOnBeforeProcessDeltas(Self, deltastructs); - - if (ServiceSchema.UpdateRules.Count=0) and (rsoProcessDeltasWithoutUpdateRules in Options) then begin - // Processes them in order, from first to last delta sent - for i := 0 to deltastructs.Count-1 do begin - // Flushes the cache for the given dataset - FlushCache(deltastructs[i].Delta.LogicalName); - - deltastructs[i].BusinessProcessor.ProcessDelta(Connection, deltastructs[i].Delta, AllChanges); - end; - end - else try - processeddeltas := TStringList.Create; - - for i := 0 to (ServiceSchema.UpdateRules.Count-1) do begin - // Processes them in the order defined in the schema - struct := deltastructs.FindStruct(ServiceSchema.UpdateRules[i].DatasetName); - if (struct<>NIL) then begin - // Adds the dataset name to the list of processed deltas. Those that don't have update rules will be processed later - processeddeltas.Add(struct.Delta.LogicalName); - - // Flushes the cache for the given dataset - FlushCache(struct.Delta.LogicalName); - - // Processes the delta - struct.BusinessProcessor.ProcessDelta(Connection, struct.Delta, ServiceSchema.UpdateRules[i].ChangeTypes); - - - if (ctInsert in ServiceSchema.UpdateRules[i].ChangeTypes) then begin - for k := 0 to (struct.DetailDeltas.Count-1) do - struct.BusinessProcessor.SynchronizeAutoIncs(struct.Delta, struct.DetailDeltas[k], struct.RelationShips[k]); - end; - end; - end; - - // Processes the deltas for which update rules were not defined - if (rsoProcessDeltasWithoutUpdateRules in Options) then begin - for i := 0 to deltastructs.Count-1 do begin - // Skips if already processed - if (processeddeltas.IndexOf(deltastructs[i].Delta.LogicalName)>=0) then Continue; - - // Flushes the cache for the given dataset - FlushCache(deltastructs[i].Delta.LogicalName); - - deltastructs[i].BusinessProcessor.ProcessDelta(Connection, deltastructs[i].Delta, AllChanges); - end; - end; - - finally - processeddeltas.Free; - end; - - if Assigned(fOnAfterProcessDeltas) then fOnAfterProcessDeltas(Self, deltastructs); - - if Connection.InTransaction and ProceedDefaultTransactionLogic(fOnUpdateDataCommitTransaction) - then Connection.CommitTransaction; - - // Prepares the response - result := Binary.Create; - ServiceAdapter.Initialize(result, aiWrite); - - for i := 0 to deltastructs.Count-1 do - WriteDelta(deltastructs[i].Delta); - - ServiceAdapter.Finalize; - - except - on E:Exception do begin - doraise := TRUE; - try - if Assigned(fOnProcessDeltasError) - then fOnProcessDeltasError(Self, deltastructs, E, doraise); - finally - if Connection.InTransaction and ProceedDefaultTransactionLogic(fOnUpdateDataRollBackTransaction) - then Connection.RollbackTransaction; - end; - if doraise then raise; - end; - end; - finally - deltastructs.Free; - end; -end; - -function TDARemoteService.ExecuteSQLCommand(const SQL: string): Integer; -begin - if not AllowExecuteSQLCommand then - RaiseError(err_ExecuteSQLCommandNotAllowed); - - CheckObjects(Connection, ServiceSchema, NIL, TRUE, TRUE, FALSE); - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - try - result := Connection.NewCommand(SQL, stSQL).Execute; - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; -end; - -function TDARemoteService.GetDatasetData(const DatasetName: string; const Params: string; - const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; -var - parnames: array of string; - parvalues: array of Variant; - options: TDAWriteOptions; - pars: TStringList; - i : integer; -begin - pars := TStringList.Create; - result := Binary.Create; - try - try - pars.Text := Params; - SetLength(parnames, pars.Count); - SetLength(parvalues, pars.Count); - for i := 0 to (pars.Count-1) do begin - parnames[i] := pars.Names[i]; - parvalues[i] := pars.Values[pars.Names[i]]; - end; - - if IncludeSchema - then options := [woSchema, woRows] - else options := [woRows]; - - DoGetDatasetData(result, Connection, DatasetName, parnames, parvalues, '', ServiceSchema, ServiceAdapter, options, MaxRecords); - except - FreeAndNIL(result); - raise; - end; - finally - pars.Free; - end; -end; - -function TDARemoteService.CreateParamString( - const ParamNames: array of string; - const ParamValues: array of Variant): string; -var - i: integer; -begin - result := ''; - - for i := 0 to High(ParamNames) do - result := result + ParamNames[i] + '=' + VarToStr(ParamValues[i]) + #13; -end; - -function TDARemoteService.GetDatasetData(const DatasetName: string; - const ParamNames: array of string; const ParamValues: array of Variant; - const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; -var - options: TDAWriteOptions; -begin - {result := GetDatasetData(DatasetName, CreateParamString(ParamNames, ParamValues), IncludeSchema, MaxRecords);} - result := Binary.Create; - try - if IncludeSchema - then options := [woSchema, woRows] - else options := [woRows]; - DoGetDatasetData(result, Connection, DatasetName, ParamNames, ParamValues, '', ServiceSchema, ServiceAdapter, options, MaxRecords); - except - FreeAndNIL(result); - raise; - end; -end; - -function TDARemoteService.GetDatasetData(const DatasetName: string; - const IncludeSchema: Boolean = FALSE; - const MaxRecords: Integer = -1): Binary; -begin - result := GetDatasetData(DatasetName, '', IncludeSchema, MaxRecords); -end; - -procedure TDARemoteService.MergeDatatablesToSchema(aList : TList); -var i : integer; - ref : TDADataset; - dt : IDADataset; -begin - if (fExportedDataTables.Count>0) then begin - for i := 0 to fExportedDataTables.Count-1 do - if fExportedDataTables[i].IsValidReference {and fExportedDataTables[i].ExportAsPartOfSchema} then begin - dt := fExportedDataTables[i].Dataset; - - ref := ServiceSchema.Datasets.Add; - ref.Name := dt.LogicalName; - ref.Fields.AssignFieldCollection(dt.Fields); - ref.Params.AssignParamCollection(dt.Params); - - aList.Add(ref); - end; - end; -end; - -function TDARemoteService.GetSchemaAsXML: String; -var xml : TStringStream; - dummyrefs : TObjectList; -begin - result := ''; - dummyrefs := NIL; - - if not Assigned(ServiceSchema) then Exit; - - try - // New: merges the data tables references by the service - if (fExportedDataTables.Count>0) then begin - dummyrefs := TObjectList.Create; - MergeDatatablesToSchema(dummyrefs); - end; - - // Returns the schema - xml := TStringStream.Create(''); - try - ServiceSchema.SaveToStream(xml); - - result := xml.DataString; - - if Assigned(fOnGetSchemaAsXML) - then fOnGetSchemaAsXML(Self, result); - finally - xml.Free; - end; - - finally - dummyrefs.Free; // automatically removes the datatables from the schema again - end; -end; - -function TDARemoteService.GetDatasetDataEx(const DatasetName: String; - const Params: TDADatasetParamArray; - const UserFilter: String; - const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; -var parnames : array of string; - parvalues : array of variant; - i : integer; - options : TDAWriteOptions; -begin - result := Binary.Create; - try - { Prepares the parameter arrays} - if (Params<>NIL) then begin - SetLength(parnames, Params.Count); - SetLength(parvalues, Params.Count); - for i := 0 to (Params.Count-1) do begin - parnames[i] := Params[i].Name; - parvalues[i] := Params[i].Value; - end; - end - else begin - SetLength(parnames, 0); - SetLength(parvalues, 0); - end; - - { Other options } - if IncludeSchema - then options := [woSchema, woRows] - else options := [woRows]; - - { Reads the data } - DoGetDatasetData(result, Connection, DatasetName, parnames, parvalues, UserFilter, ServiceSchema, ServiceAdapter, options, MaxRecords); - except - FreeAndNIL(result); - raise; - end; -end; - -function TDARemoteService.GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): TROBinaryMemoryStream; -var i : integer; - ds : IDADataset; - parnames : array of string; - parvalues : array of variant; - x : integer; - opt : TDAWriteOptions; - allow : boolean; -begin - result := NIL; - if (DatasetRequestInfoArray=NIL) or (DatasetRequestInfoArray.Count=0) then exit; - - result := Binary.Create; - try - ServiceAdapter.Initialize(result, aiWrite); - try - - for i := 0 to (DatasetRequestInfoArray.Count-1) do begin - with DatasetRequestInfoArray[i] do begin - SetLength(parnames, Params.Count); - SetLength(parvalues, Params.Count); - for x := 0 to (Params.Count-1) do begin - parnames[x] := Params[x].Name; - parvalues[x] := Params[x].Value; - end; - - opt := [woRows]; - if DatasetRequestInfoArray[i].IncludeSchema then opt := opt+[woSchema]; - - // Security check - allow := TRUE; - if Assigned(fGetDatasetDataValidation) - then fGetDatasetDataValidation(Self, Connection, DatasetName, parnames, parvalues, ServiceSchema, allow); - - if not allow - then raise EDADatasetNotAccessible.CreateFmt(err_DatasetNotAccessible, [DatasetName]); - - // Proceeds - ds := ServiceSchema.NewDataset(Connection, DatasetName, parnames, parvalues, TRUE); - - ServiceAdapter.WriteDataset(ds, opt, MaxRecords); - end; - end; - finally - ServiceAdapter.Finalize(); - end; - except - FreeAndNIL(result); - raise - end; -end; - -function TDARemoteService.GetDatasetScripts(const DatasetNames: String): String; -var names : TStringList; - i : integer; - ds : TDADataset; -begin - result := ''; - names := TStringList.Create; - try - CheckObjects(NIL, fServiceSchema, NIL, FALSE, TRUE, FALSE); - names.CommaText := DatasetNames; - - result := ''; - - for i := 0 to (names.Count-1) do begin - ds := fServiceSchema.Datasets.DatasetByName(names[i]); - - result := result+Format('<%s Language="%s">', [ - names[i], - GetEnumName(TypeInfo(TROSEScriptLanguage), Ord(ds.BusinessRulesClient.ScriptLanguage)), - UTF8Encode(ds.BusinessRulesClient.Script), - names[i]]); - end; - - result := result+''; - finally - FreeAndNIL(names); - end; -end; - -function TDARemoteService.ExecuteSQLCommandEx(const CommandName: String; - const Params: TDADatasetParamArray): Integer; -var cmd : IDASQLCommand; - i : integer; -begin - if not AllowExecuteSQLCommand then - RaiseError(err_ExecuteSQLCommandNotAllowed); - - CheckObjects(Connection, ServiceSchema, NIL, TRUE, TRUE, FALSE); - - cmd := ServiceSchema.NewCommand(Connection, CommandName); - for i := 0 to (Params.Count-1) do - cmd.ParamByName(Params[i].Name).Value := Params[i].Value; - - if Assigned(fOnBeforeExecuteCommand) - then fOnBeforeExecuteCommand(Self, cmd); - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - try - result := cmd.Execute; - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; - - if Assigned(fOnAfterExecuteCommand) - then fOnAfterExecuteCommand(Self, cmd, result); -end; - -procedure TDARemoteService.SetExportedDataTables(const Value: TDADataTableReferenceCollection); -begin - fExportedDataTables.Assign(Value); -end; - -procedure TDARemoteService.SetCache(const Value: TDACache); -begin - fCache := Value; - if (fCache<>NIL) - then fCache.FreeNotification(Self); -end; - -procedure TDARemoteService.SetCacheElements( - const Value: TDACacheElementCollection); -begin - fCacheElements.Assign(Value); -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Create Session Table.sql b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Create Session Table.sql deleted file mode 100644 index 54f5e49..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Create Session Table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE [dbo].[Sessions] ( - [SessionID] [char] (38) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , - [Created] [datetime] NULL , - [LastAccessed] [datetime] NULL , - [Data] [image] NULL -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] -GO - -ALTER TABLE [dbo].[Sessions] WITH NOCHECK ADD - CONSTRAINT [PK_Sessions] PRIMARY KEY CLUSTERED - ( - [SessionID] - ) ON [PRIMARY] -GO - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daConnections b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daConnections deleted file mode 100644 index 625165d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daConnections +++ /dev/null @@ -1 +0,0 @@ -ADO?AuxDriver=SQLOLEDB.1;Server=localhost;Database=Northwind;UserID=sa;Password=;TrueMSSQL010pbWaitTrue6001 diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daSchema b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daSchema deleted file mode 100644 index 32f7e13..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DBSessionManager Default Schema.daSchema +++ /dev/null @@ -1,30 +0,0 @@ - -Insert_SessiondabtUnknowndatStringSessionIDdaptInput38dabtUnknowndatDateTimeCreateddaptInput0dabtUnknowndatDateTimeLastAccesseddaptInput0dabtUnknowndatBlobDatadaptInput0MSSQLINSERT - INTO Sessions - (SessionID, Created, LastAccessed, Data) - VALUES - (:SessionID, :Created, :LastAccessed, :Data)stSQLUpdate_SessiondabtUnknowndatDateTimeLastAccesseddaptInput0dabtUnknowndatBlobDatadaptInput0dabtUnknowndatStringSessionIDdaptInput38MSSQLUPDATE - Sessions - SET - LastAccessed = :LastAccessed, - Data = :Data - WHERE - SessionID = :SessionID -stSQLClearSessionsdabtUnknowndatDateTimeLastAccesseddaptInput0MSSQLDELETE - FROM - Sessions - WHERE - LastAccessed < :LastAccessedstSQLDelete_SessiondabtUnknowndatStringSessionIDdaptInput38MSSQLDELETE - FROM - Sessions - WHERE - SessionID = :SessionIDstSQLTrueTruerslPascalScriptrslPascalScripttaLeftJustifydabtUnknownFalsedatStringSessionID0FalseTrueFalseFalseSessionIDFalseFalseFalse38TrueGetAllSessionIDsDatasetSessionIDSessionIDMSSQLSelect SessionID from Sessions -stSQLTrueTruerslPascalScriptrslPascalScripttaLeftJustifydabtUnknownFalsedatIntegerCOLUMN10FalseTrueFalseFalseCOLUMN1FalseFalseFalse0TrueGetSessionCountCOLUMN1COLUMN1MSSQLSELECT - COUNT(*) - FROM - SessionsstSQLTrueTruerslPascalScriptrslPascalScripttaLeftJustifydabtUnknownFalsedatStringSessionID0TrueTrueFalseFalseSessionIDFalseFalseFalse38TruetaLeftJustifydabtUnknownFalsedatDateTimeCreated0FalseTrueFalseFalseCreatedFalseFalseFalse0TruetaLeftJustifydabtUnknownFalsedatDateTimeLastAccessed0FalseTrueFalseFalseLastAccessedFalseFalseFalse0TruetaLeftJustifydabtUnknownFalsedatBlobData0FalseTrueFalseFalseDataFalseFalseFalse0TrueGetSessiondabtUnknowndatStringSessionIDdaptInput38SessionIDSessionIDCreatedCreatedLastAccessedLastAccessedDataDataMSSQLSELECT - SessionID, Created, LastAccessed, Data - FROM - Sessions - WHERE - SessionID = :SessionIDstSQL0 diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract.inc b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract.inc deleted file mode 100644 index 6e8c727..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract.inc +++ /dev/null @@ -1,8 +0,0 @@ -{$INCLUDE 'eDefines.inc'} -{.$DEFINE STORERECID} -{$DEFINE DataAbstract5} - -{$IFDEF FPC} - {$MODE DELPHI} - {$DEFINE FPC_SAFECALL_BUG} -{$ENDIF} diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3.RODL deleted file mode 100644 index d9d82c1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3.RODL +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Async.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Async.pas deleted file mode 100644 index 0ce5106..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Async.pas +++ /dev/null @@ -1,414 +0,0 @@ -unit DataAbstract3_Async; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.Inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROTypes, uROClientIntf, uROAsync, - {Project:} DataAbstract3_Intf; - -type - { IDARemoteService_Async } - IDARemoteService_Async = interface(IROAsyncInterface) - ['{F8299772-C66E-4D77-A4F9-78400662810B}'] - procedure Invoke_GetDatasetSchema(const aDatasetName: String); - procedure Invoke_GetDatasetScripts(const DatasetNames: String); - procedure Invoke_GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer); - procedure Invoke_GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; const MaxRecords: Integer); - procedure Invoke_UpdateData(const Delta: Binary); - procedure Invoke_ExecuteSQLCommand(const SQL: String); - procedure Invoke_GetSchemaAsXML; - procedure Invoke_GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray); - procedure Invoke_ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray); - function Retrieve_GetDatasetSchema: Binary; - function Retrieve_GetDatasetScripts: String; - function Retrieve_GetDatasetData: Binary; - function Retrieve_GetDatasetDataEx: Binary; - function Retrieve_UpdateData: Binary; - function Retrieve_ExecuteSQLCommand: Integer; - function Retrieve_GetSchemaAsXML: String; - function Retrieve_GetMultipleDatasets: Binary; - function Retrieve_ExecuteSQLCommandEx: Integer; - end; - - { CoDARemoteService_Async } - CoDARemoteService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService_Async; - end; - - { TDARemoteService_AsyncProxy } - TDARemoteService_AsyncProxy = class(TROAsyncProxy, IDARemoteService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_GetDatasetSchema(const aDatasetName: String); - procedure Invoke_GetDatasetScripts(const DatasetNames: String); - procedure Invoke_GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer); - procedure Invoke_GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; const MaxRecords: Integer); - procedure Invoke_UpdateData(const Delta: Binary); - procedure Invoke_ExecuteSQLCommand(const SQL: String); - procedure Invoke_GetSchemaAsXML; - procedure Invoke_GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray); - procedure Invoke_ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray); - function Retrieve_GetDatasetSchema: Binary; - function Retrieve_GetDatasetScripts: String; - function Retrieve_GetDatasetData: Binary; - function Retrieve_GetDatasetDataEx: Binary; - function Retrieve_UpdateData: Binary; - function Retrieve_ExecuteSQLCommand: Integer; - function Retrieve_GetSchemaAsXML: String; - function Retrieve_GetMultipleDatasets: Binary; - function Retrieve_ExecuteSQLCommandEx: Integer; - end; - -type - { IDALoginService_Async } - IDALoginService_Async = interface(IDARemoteService_Async) - ['{5A9C9231-1C8D-4436-88E1-07AD23D7BEF3}'] - procedure Invoke_Login(const UserID: String; const Password: String); - procedure Invoke_Logout; - function Retrieve_Login(out LoginInfo: TDALoginInfo): Boolean; - end; - - { CoDALoginService_Async } - CoDALoginService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService_Async; - end; - - { TDALoginService_AsyncProxy } - TDALoginService_AsyncProxy = class(TDARemoteService_AsyncProxy, IDALoginService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_Login(const UserID: String; const Password: String); - procedure Invoke_Logout; - function Retrieve_Login(out LoginInfo: TDALoginInfo): Boolean; - end; - -implementation - -uses - {vcl:} SysUtils; - -{ CoDARemoteService } - -class function CoDARemoteService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService_Async; -begin - result := TDARemoteService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TDARemoteService_AsyncProxy } - -function TDARemoteService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'DARemoteService'; -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetDatasetSchema(const aDatasetName: String); -var __request:TStream; -begin - __AssertProxyNotBusy('GetDatasetSchema'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetSchema'); - __Message.Write('aDatasetName', TypeInfo(String), aDatasetName, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetDatasetSchema',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetDatasetSchema: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetDatasetSchema'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetDatasetScripts(const DatasetNames: String); -var __request:TStream; -begin - __AssertProxyNotBusy('GetDatasetScripts'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetScripts'); - __Message.Write('DatasetNames', TypeInfo(String), DatasetNames, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetDatasetScripts',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetDatasetScripts: String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetDatasetScripts'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(String), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer); -var __request:TStream; -begin - __AssertProxyNotBusy('GetDatasetData'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetData'); - __Message.Write('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Write('Params', TypeInfo(String), Params, []); - __Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetDatasetData',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetDatasetData: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetDatasetData'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; const MaxRecords: Integer); -var __request:TStream; -begin - __AssertProxyNotBusy('GetDatasetDataEx'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetDatasetDataEx'); - __Message.Write('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Write('Params', TypeInfo(TDADatasetParamArray), Params, []); - __Message.Write('UserFilter', TypeInfo(String), UserFilter, []); - __Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetDatasetDataEx',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetDatasetDataEx: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetDatasetDataEx'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_UpdateData(const Delta: Binary); -var __request:TStream; -begin - __AssertProxyNotBusy('UpdateData'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'UpdateData'); - __Message.Write('Delta', TypeInfo(Binary), Delta, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('UpdateData',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_UpdateData: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('UpdateData'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_ExecuteSQLCommand(const SQL: String); -var __request:TStream; -begin - __AssertProxyNotBusy('ExecuteSQLCommand'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'ExecuteSQLCommand'); - __Message.Write('SQL', TypeInfo(String), SQL, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('ExecuteSQLCommand',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_ExecuteSQLCommand: Integer; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('ExecuteSQLCommand'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Integer), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetSchemaAsXML; -var __request:TStream; -begin - __AssertProxyNotBusy('GetSchemaAsXML'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetSchemaAsXML'); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetSchemaAsXML',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetSchemaAsXML: String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetSchemaAsXML'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(String), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray); -var __request:TStream; -begin - __AssertProxyNotBusy('GetMultipleDatasets'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'GetMultipleDatasets'); - __Message.Write('DatasetRequestInfoArray', TypeInfo(TDADatasetRequestInfoArray), DatasetRequestInfoArray, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('GetMultipleDatasets',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_GetMultipleDatasets: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetMultipleDatasets'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDARemoteService_AsyncProxy.Invoke_ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray); -var __request:TStream; -begin - __AssertProxyNotBusy('ExecuteSQLCommandEx'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'ExecuteSQLCommandEx'); - __Message.Write('CommandName', TypeInfo(String), CommandName, []); - __Message.Write('Params', TypeInfo(TDADatasetParamArray), Params, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('ExecuteSQLCommandEx',__request); -end; - -function TDARemoteService_AsyncProxy.Retrieve_ExecuteSQLCommandEx: Integer; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('ExecuteSQLCommandEx'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Integer), Result, []); - - __response.Free(); -end; - - -{ CoDALoginService } - -class function CoDALoginService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService_Async; -begin - result := TDALoginService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TDALoginService_AsyncProxy } - -function TDALoginService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'DALoginService'; -end; - -procedure TDALoginService_AsyncProxy.Invoke_Login(const UserID: String; const Password: String); -var __request:TStream; -begin - __AssertProxyNotBusy('Login'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'Login'); - __Message.Write('UserID', TypeInfo(String), UserID, []); - __Message.Write('Password', TypeInfo(String), Password, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('Login',__request); -end; - -function TDALoginService_AsyncProxy.Retrieve_Login(out LoginInfo: TDALoginInfo): Boolean; -var __response:TStream; -begin - LoginInfo := nil; - __response := __RetrieveAsyncResponse('Login'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Boolean), Result, []); - __Message.Read('LoginInfo', TypeInfo(TDALoginInfo), LoginInfo, []); - - __response.Free(); -end; - -procedure TDALoginService_AsyncProxy.Invoke_Logout; -var __request:TStream; -begin - __AssertProxyNotBusy('Logout'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract3', __InterfaceName, 'Logout'); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('Logout',__request, false); -end; - - -initialization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Intf.pas deleted file mode 100644 index 3b10cda..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Intf.pas +++ /dev/null @@ -1,1044 +0,0 @@ -unit DataAbstract3_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf; - -const - { Library ID } - LibraryUID = '{2966A4BF-569C-45AA-8F34-CF1E155FD77A}'; - - { Service Interface ID's } - IDARemoteService_IID : TGUID = '{C532E842-0AA9-4253-A9BF-AFCF22885B97}'; - IDALoginService_IID : TGUID = '{58550AA0-B64F-495A-B2F8-C981D4C39180}'; - - { Event ID's } - -type - { Forward declarations } - IDARemoteService = interface; - IDALoginService = interface; - - TDADatasetParamArray = class; - TDADatasetRequestInfoArray = class; - TDAStringArray = class; - - TDADatasetParam = class; - TDADatasetRequestInfo = class; - TDALoginInfo = class; - - - { TDADatasetParam } - TDADatasetParam = class(TROComplexType) - private - fName: String; - fValue: Variant; - public - procedure Assign(iSource: TPersistent); override; - published - property Name:String read fName write fName; - property Value:Variant read fValue write fValue; - end; - - { TDADatasetParamCollection } - TDADatasetParamCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TDADatasetParam; - procedure SetItems(Index: integer; const Value: TDADatasetParam); - public - constructor Create; overload; - function Add: TDADatasetParam; reintroduce; - procedure SaveToArray(anArray: TDADatasetParamArray); - procedure LoadFromArray(anArray: TDADatasetParamArray); - property Items[Index: integer]:TDADatasetParam read GetItems write SetItems; default; - end; - - { TDADatasetRequestInfo } - TDADatasetRequestInfo = class(TROComplexType) - private - fDatasetName: String; - fIncludeSchema: Boolean; - fMaxRecords: Integer; - fParams: TDADatasetParamArray; - function GetParams: TDADatasetParamArray; - public - procedure Assign(iSource: TPersistent); override; - published - property DatasetName:String read fDatasetName write fDatasetName; - property IncludeSchema:Boolean read fIncludeSchema write fIncludeSchema; - property MaxRecords:Integer read fMaxRecords write fMaxRecords; - property Params:TDADatasetParamArray read GetParams write fParams; - end; - - { TDADatasetRequestInfoCollection } - TDADatasetRequestInfoCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TDADatasetRequestInfo; - procedure SetItems(Index: integer; const Value: TDADatasetRequestInfo); - public - constructor Create; overload; - function Add: TDADatasetRequestInfo; reintroduce; - procedure SaveToArray(anArray: TDADatasetRequestInfoArray); - procedure LoadFromArray(anArray: TDADatasetRequestInfoArray); - property Items[Index: integer]:TDADatasetRequestInfo read GetItems write SetItems; default; - end; - - { TDALoginInfo } - TDALoginInfo = class(TROComplexType) - private - fSessionID: String; - fUserID: String; - fPrivileges: TDAStringArray; - fAttributes: TDAStringArray; - fData: Binary; - function GetPrivileges: TDAStringArray; - function GetAttributes: TDAStringArray; - function GetData: Binary; - public - procedure Assign(iSource: TPersistent); override; - published - property SessionID:String read fSessionID write fSessionID; - property UserID:String read fUserID write fUserID; - property Privileges:TDAStringArray read GetPrivileges write fPrivileges; - property Attributes:TDAStringArray read GetAttributes write fAttributes; - property Data:Binary read GetData write fData; - end; - - { TDALoginInfoCollection } - TDALoginInfoCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TDALoginInfo; - procedure SetItems(Index: integer; const Value: TDALoginInfo); - public - constructor Create; overload; - function Add: TDALoginInfo; reintroduce; - property Items[Index: integer]:TDALoginInfo read GetItems write SetItems; default; - end; - - { TDADatasetParamArray } - TDADatasetParamArray = class(TROArray) - private - fCount: Integer; - fItems : array of TDADatasetParam; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): TDADatasetParam; - procedure SetItems(aIndex: integer; const Value: TDADatasetParam); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemClass: TClass; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add: TDADatasetParam; overload; - function Add(const Value: TDADatasetParam):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:TDADatasetParam read GetItems write SetItems; default; - end; - - { TDADatasetRequestInfoArray } - TDADatasetRequestInfoArray = class(TROArray) - private - fCount: Integer; - fItems : array of TDADatasetRequestInfo; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): TDADatasetRequestInfo; - procedure SetItems(aIndex: integer; const Value: TDADatasetRequestInfo); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemClass: TClass; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add: TDADatasetRequestInfo; overload; - function Add(const Value: TDADatasetRequestInfo):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:TDADatasetRequestInfo read GetItems write SetItems; default; - end; - - { TDAStringArray } - TDAStringArray = class(TROArray) - private - fCount: Integer; - fItems : array of String; - protected - procedure Grow; virtual; - function GetItems(AIndex: integer): String; - procedure SetItems(AIndex: integer; const Value: String); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemSize: integer; override; - function GetItemRef(AIndex: integer): pointer; override; - procedure Clear; override; - procedure Delete(AIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add(const Value:String): integer; - - property Count : integer read GetCount; - property Items[Index: integer]:String read GetItems write SetItems; default; - end; - - { IDARemoteService } - IDARemoteService = interface - ['{C532E842-0AA9-4253-A9BF-AFCF22885B97}'] - function GetDatasetSchema(const aDatasetName: String): Binary; - function GetDatasetScripts(const DatasetNames: String): String; - function GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; - function GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; - function UpdateData(const Delta: Binary): Binary; - function ExecuteSQLCommand(const SQL: String): Integer; - function GetSchemaAsXML: String; - function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary; - function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer; - end; - - { CoDARemoteService } - CoDARemoteService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService; - end; - - { TDARemoteService_Proxy } - TDARemoteService_Proxy = class(TROProxy, IDARemoteService) - protected - function __GetInterfaceName:string;{.$IFNDEF FPC} override;{.$ENDIF} - - function GetDatasetSchema(const aDatasetName: String): Binary; - function GetDatasetScripts(const DatasetNames: String): String; - function GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; - function GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; - function UpdateData(const Delta: Binary): Binary; - function ExecuteSQLCommand(const SQL: String): Integer; - function GetSchemaAsXML: String; - function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary; - function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer; - end; - - { IDALoginService } - IDALoginService = interface(IDARemoteService) - ['{58550AA0-B64F-495A-B2F8-C981D4C39180}'] - function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; - procedure Logout; - end; - - { CoDALoginService } - CoDALoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService; - end; - - { TDALoginService_Proxy } - TDALoginService_Proxy = class(TDARemoteService_Proxy, IDALoginService) - protected - function __GetInterfaceName:string; override; - - function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; - procedure Logout; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ TDADatasetParamArray } - -procedure TDADatasetParamArray.Assign(iSource: TPersistent); -var lSource:TDADatasetParamArray; - i:integer; -begin - if (iSource is TDADatasetParamArray) then begin - lSource := TDADatasetParamArray(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i] := lSource.Items[i].Clone() as TDADatasetParam; - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TDADatasetParamArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(TDADatasetParam); -end; - -class function TDADatasetParamArray.GetItemClass: TClass; -begin - result := TDADatasetParam; -end; - -class function TDADatasetParamArray.GetItemSize: integer; -begin - result := SizeOf(TDADatasetParam); -end; - -function TDADatasetParamArray.GetItems(aIndex: integer): TDADatasetParam; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function TDADatasetParamArray.GetItemRef(aIndex: integer): pointer; -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - result := fItems[AIndex]; -end; - -procedure TDADatasetParamArray.SetItemRef(AIndex: integer; Ref: pointer); -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - if Ref <> fItems[AIndex] then - fItems[AIndex] := Ref; -end; - -procedure TDADatasetParamArray.Clear; -var i: integer; -begin - for i := 0 to (Count-1) do fItems[i].Free(); - SetLength(fItems, 0); - FCount := 0; -end; - -procedure TDADatasetParamArray.Delete(aIndex: integer); -var i: integer; -begin - if (AIndex>=Count) then RaiseError(err_InvalidIndex, [AIndex]); - - fItems[AIndex].Free(); - - if (AIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - fItems[aIndex] := Value; -end; - -procedure TDADatasetParamArray.Resize(ElementCount: integer); -begin - SetLength(fItems, ElementCount); - FCount := ElementCount; -end; - -function TDADatasetParamArray.GetCount: integer; -begin - result := FCount; -end; - -procedure TDADatasetParamArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function TDADatasetParamArray.Add: TDADatasetParam; -begin - result := TDADatasetParam.Create; - Add(Result); -end; - -function TDADatasetParamArray.Add(const Value:TDADatasetParam): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -{ TDADatasetRequestInfoArray } - -procedure TDADatasetRequestInfoArray.Assign(iSource: TPersistent); -var lSource:TDADatasetRequestInfoArray; - i:integer; -begin - if (iSource is TDADatasetRequestInfoArray) then begin - lSource := TDADatasetRequestInfoArray(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i] := lSource.Items[i].Clone() as TDADatasetRequestInfo; - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TDADatasetRequestInfoArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(TDADatasetRequestInfo); -end; - -class function TDADatasetRequestInfoArray.GetItemClass: TClass; -begin - result := TDADatasetRequestInfo; -end; - -class function TDADatasetRequestInfoArray.GetItemSize: integer; -begin - result := SizeOf(TDADatasetRequestInfo); -end; - -function TDADatasetRequestInfoArray.GetItems(AIndex: integer): TDADatasetRequestInfo; -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - result := fItems[AIndex]; -end; - -function TDADatasetRequestInfoArray.GetItemRef(AIndex: integer): pointer; -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - result := fItems[AIndex]; -end; - -procedure TDADatasetRequestInfoArray.SetItemRef(AIndex: integer; Ref: pointer); -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - if Ref <> fItems[AIndex] then - fItems[AIndex] := Ref; -end; - -procedure TDADatasetRequestInfoArray.Clear; -var i: integer; -begin - for i := 0 to (Count-1) do fItems[i].Free(); - SetLength(fItems, 0); - FCount := 0; -end; - -procedure TDADatasetRequestInfoArray.Delete(AIndex: integer); -var i: integer; -begin - if (AIndex>=Count) then RaiseError(err_InvalidIndex, [AIndex]); - - fItems[AIndex].Free(); - - if (AIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - fItems[AIndex] := Value; -end; - -procedure TDADatasetRequestInfoArray.Resize(ElementCount: integer); -begin - SetLength(fItems, ElementCount); - FCount := ElementCount; -end; - -function TDADatasetRequestInfoArray.GetCount: integer; -begin - result := FCount; -end; - -procedure TDADatasetRequestInfoArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function TDADatasetRequestInfoArray.Add: TDADatasetRequestInfo; -begin - result := TDADatasetRequestInfo.Create; - Add(Result); -end; - -function TDADatasetRequestInfoArray.Add(const Value:TDADatasetRequestInfo): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -{ TDAStringArray } - -procedure TDAStringArray.Assign(iSource: TPersistent); -var lSource:TDAStringArray; - i:integer; -begin - if (iSource is TDAStringArray) then begin - lSource := TDAStringArray(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - Items[i] := lSource.Items[i]; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TDAStringArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(String); -end; - -class function TDAStringArray.GetItemSize: integer; -begin - result := SizeOf(String); -end; - -function TDAStringArray.GetItems(AIndex: integer): String; -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - result := fItems[AIndex]; -end; - -function TDAStringArray.GetItemRef(AIndex: integer): pointer; -begin - if (AIndex < 0) or (AIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - result := @fItems[AIndex]; -end; - -procedure TDAStringArray.Clear; -begin - SetLength(fItems, 0); - FCount := 0; -end; - -procedure TDAStringArray.Delete(AIndex: integer); -var i: integer; -begin - if (AIndex>=Count) then RaiseError(err_InvalidIndex, [AIndex]); - - if (AIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[AIndex]); - fItems[AIndex] := Value; -end; - -procedure TDAStringArray.Resize(ElementCount: integer); -begin - SetLength(fItems, ElementCount); - FCount := ElementCount; -end; - -function TDAStringArray.GetCount: integer; -begin - result := FCount; -end; - -procedure TDAStringArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function TDAStringArray.Add(const Value: String): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -{ TDADatasetParam } - -procedure TDADatasetParam.Assign(iSource: TPersistent); -var lSource:TDADatasetParam; -begin - inherited Assign(iSource); - if (iSource is TDADatasetParam) then begin - lSource := TDADatasetParam(iSource); - Name := lSource.Name; - Value := lSource.Value; - end; -end; - -{ TDADatasetParamCollection } -constructor TDADatasetParamCollection.Create; -begin - inherited Create(TDADatasetParam); -end; - -constructor TDADatasetParamCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TDADatasetParamCollection.Add: TDADatasetParam; -begin - result := TDADatasetParam(inherited Add); -end; - -function TDADatasetParamCollection.GetItems(Index: integer): TDADatasetParam; -begin - result := TDADatasetParam(inherited Items[Index]); -end; - -procedure TDADatasetParamCollection.LoadFromArray(anArray: TDADatasetParamArray); -var i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure TDADatasetParamCollection.SaveToArray(anArray: TDADatasetParamArray); -var i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := TDADatasetParam.Create; - anArray[i].Assign(Items[i]); - end; -end; - -procedure TDADatasetParamCollection.SetItems(Index: integer; const Value: TDADatasetParam); -begin - TDADatasetParam(inherited Items[Index]).Assign(Value); -end; - -{ TDADatasetRequestInfo } - -procedure TDADatasetRequestInfo.Assign(iSource: TPersistent); -var lSource:TDADatasetRequestInfo; -begin - inherited Assign(iSource); - if (iSource is TDADatasetRequestInfo) then begin - lSource := TDADatasetRequestInfo(iSource); - DatasetName := lSource.DatasetName; - IncludeSchema := lSource.IncludeSchema; - MaxRecords := lSource.MaxRecords; - Params.Assign(lSource.Params); - end; -end; - -function TDADatasetRequestInfo.GetParams: TDADatasetParamArray; -begin - if (fParams = nil) then fParams := TDADatasetParamArray.Create(); - result := fParams; -end; - -{ TDADatasetRequestInfoCollection } -constructor TDADatasetRequestInfoCollection.Create; -begin - inherited Create(TDADatasetRequestInfo); -end; - -constructor TDADatasetRequestInfoCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TDADatasetRequestInfoCollection.Add: TDADatasetRequestInfo; -begin - result := TDADatasetRequestInfo(inherited Add); -end; - -function TDADatasetRequestInfoCollection.GetItems(Index: integer): TDADatasetRequestInfo; -begin - result := TDADatasetRequestInfo(inherited Items[Index]); -end; - -procedure TDADatasetRequestInfoCollection.LoadFromArray(anArray: TDADatasetRequestInfoArray); -var i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure TDADatasetRequestInfoCollection.SaveToArray(anArray: TDADatasetRequestInfoArray); -var i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := TDADatasetRequestInfo.Create; - anArray[i].Assign(Items[i]); - end; -end; - -procedure TDADatasetRequestInfoCollection.SetItems(Index: integer; const Value: TDADatasetRequestInfo); -begin - TDADatasetRequestInfo(inherited Items[Index]).Assign(Value); -end; - -{ TDALoginInfo } - -procedure TDALoginInfo.Assign(iSource: TPersistent); -var lSource:TDALoginInfo; -begin - inherited Assign(iSource); - if (iSource is TDALoginInfo) then begin - lSource := TDALoginInfo(iSource); - SessionID := lSource.SessionID; - UserID := lSource.UserID; - Privileges.Assign(lSource.Privileges); - Attributes.Assign(lSource.Attributes); - Data.Assign(lSource.Data); - end; -end; - -function TDALoginInfo.GetPrivileges: TDAStringArray; -begin - if (fPrivileges = nil) then fPrivileges := TDAStringArray.Create(); - result := fPrivileges; -end; - -function TDALoginInfo.GetAttributes: TDAStringArray; -begin - if (fAttributes = nil) then fAttributes := TDAStringArray.Create(); - result := fAttributes; -end; - -function TDALoginInfo.GetData: Binary; -begin - if (fData = nil) then fData := Binary.Create(); - result := fData; -end; - -{ TDALoginInfoCollection } -constructor TDALoginInfoCollection.Create; -begin - inherited Create(TDALoginInfo); -end; - -constructor TDALoginInfoCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TDALoginInfoCollection.Add: TDALoginInfo; -begin - result := TDALoginInfo(inherited Add); -end; - -function TDALoginInfoCollection.GetItems(Index: integer): TDALoginInfo; -begin - result := TDALoginInfo(inherited Items[Index]); -end; - -procedure TDALoginInfoCollection.SetItems(Index: integer; const Value: TDALoginInfo); -begin - TDALoginInfo(inherited Items[Index]).Assign(Value); -end; - -{ CoDARemoteService } - -class function CoDARemoteService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDARemoteService; -begin - result := TDARemoteService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TDARemoteService_Proxy } - -function TDARemoteService_Proxy.__GetInterfaceName:string; -begin - result := 'DARemoteService'; -end; - -function TDARemoteService_Proxy.GetDatasetSchema(const aDatasetName: String): Binary; -begin - result := nil; - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetDatasetSchema'); - __Message.Write('aDatasetName', TypeInfo(String), aDatasetName, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.GetDatasetScripts(const DatasetNames: String): String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetDatasetScripts'); - __Message.Write('DatasetNames', TypeInfo(String), DatasetNames, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(String), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; -begin - result := nil; - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetDatasetData'); - __Message.Write('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Write('Params', TypeInfo(String), Params, []); - __Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; -begin - result := nil; - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetDatasetDataEx'); - __Message.Write('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Write('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []); - __Message.Write('UserFilter', TypeInfo(String), UserFilter, []); - __Message.Write('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Write('MaxRecords', TypeInfo(Integer), MaxRecords, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.UpdateData(const Delta: Binary): Binary; -begin - result := nil; - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'UpdateData'); - __Message.Write('Delta', TypeInfo(Binary), Delta, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.ExecuteSQLCommand(const SQL: String): Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'ExecuteSQLCommand'); - __Message.Write('SQL', TypeInfo(String), SQL, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.GetSchemaAsXML: String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetSchemaAsXML'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(String), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary; -begin - result := nil; - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'GetMultipleDatasets'); - __Message.Write('DatasetRequestInfoArray', TypeInfo(DataAbstract3_Intf.TDADatasetRequestInfoArray), DatasetRequestInfoArray, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.FreeStream; - end -end; - -function TDARemoteService_Proxy.ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'ExecuteSQLCommandEx'); - __Message.Write('CommandName', TypeInfo(String), CommandName, []); - __Message.Write('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.FreeStream; - end -end; - -{ CoDALoginService } - -class function CoDALoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDALoginService; -begin - result := TDALoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TDALoginService_Proxy } - -function TDALoginService_Proxy.__GetInterfaceName:string; -begin - result := 'DALoginService'; -end; - -function TDALoginService_Proxy.Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; -begin - LoginInfo := nil; - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'Login'); - __Message.Write('UserID', TypeInfo(String), UserID, []); - __Message.Write('Password', TypeInfo(String), Password, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - __Message.Read('LoginInfo', TypeInfo(DataAbstract3_Intf.TDALoginInfo), LoginInfo, []); - finally - __Message.FreeStream; - end -end; - -procedure TDALoginService_Proxy.Logout; -begin - - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract', __InterfaceName, 'Logout'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -initialization - RegisterROClass(TDADatasetParam); - RegisterROClass(TDADatasetRequestInfo); - RegisterROClass(TDALoginInfo); - RegisterROClass(TDADatasetParamArray); - RegisterROClass(TDADatasetRequestInfoArray); - RegisterROClass(TDAStringArray); - RegisterProxyClass(IDARemoteService_IID, TDARemoteService_Proxy); - RegisterProxyClass(IDALoginService_IID, TDALoginService_Proxy); - - -finalization - UnregisterROClass(TDADatasetParam); - UnregisterROClass(TDADatasetRequestInfo); - UnregisterROClass(TDALoginInfo); - UnregisterROClass(TDADatasetParamArray); - UnregisterROClass(TDADatasetRequestInfoArray); - UnregisterROClass(TDAStringArray); - UnregisterProxyClass(IDARemoteService_IID); - UnregisterProxyClass(IDALoginService_IID); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Invk.pas deleted file mode 100644 index 48954cb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract3_Invk.pas +++ /dev/null @@ -1,338 +0,0 @@ -unit DataAbstract3_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Generated:} DataAbstract3_Intf; - -type - TDARemoteService_Invoker = class(TROInvoker) - private - protected - published - procedure Invoke_GetDatasetSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetDatasetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetDatasetDataEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_ExecuteSQLCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetSchemaAsXML(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetMultipleDatasets(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_ExecuteSQLCommandEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - - TDALoginService_Invoker = class(TDARemoteService_Invoker) - private - protected - published - procedure Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - -implementation - -uses - {RemObjects:} uROClient; - -{ TDARemoteService_Invoker } - -procedure TDARemoteService_Invoker.Invoke_GetDatasetSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetSchema(const aDatasetName: String): Binary; } -var - aDatasetName: String; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('aDatasetName', TypeInfo(String), aDatasetName, []); - - lResult := (__Instance as IDARemoteService).GetDatasetSchema(aDatasetName); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetDatasetSchemaResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDARemoteService_Invoker.Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetScripts(const DatasetNames: String): String; } -var - DatasetNames: String; - lResult: String; -begin - try - __Message.Read('DatasetNames', TypeInfo(String), DatasetNames, []); - - lResult := (__Instance as IDARemoteService).GetDatasetScripts(DatasetNames); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetDatasetScriptsResponse'); - __Message.Write('Result', TypeInfo(String), lResult, []); - __Message.Finalize; - - finally - end; -end; - -procedure TDARemoteService_Invoker.Invoke_GetDatasetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetData(const DatasetName: String; const Params: String; const IncludeSchema: Boolean; const MaxRecords: Integer): Binary; } -var - DatasetName: String; - Params: String; - IncludeSchema: Boolean; - MaxRecords: Integer; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Read('Params', TypeInfo(String), Params, []); - __Message.Read('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Read('MaxRecords', TypeInfo(Integer), MaxRecords, []); - - lResult := (__Instance as IDARemoteService).GetDatasetData(DatasetName, Params, IncludeSchema, MaxRecords); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetDatasetDataResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDARemoteService_Invoker.Invoke_GetDatasetDataEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetDataEx(const DatasetName: String; const Params: TDADatasetParamArray; const UserFilter: String; const IncludeSchema: Boolean; - const MaxRecords: Integer): Binary; } -var - DatasetName: String; - Params: DataAbstract3_Intf.TDADatasetParamArray; - UserFilter: String; - IncludeSchema: Boolean; - MaxRecords: Integer; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - Params := nil; - lResult := nil; - try - __Message.Read('DatasetName', TypeInfo(String), DatasetName, []); - __Message.Read('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []); - __Message.Read('UserFilter', TypeInfo(String), UserFilter, []); - __Message.Read('IncludeSchema', TypeInfo(Boolean), IncludeSchema, []); - __Message.Read('MaxRecords', TypeInfo(Integer), MaxRecords, []); - - lResult := (__Instance as IDARemoteService).GetDatasetDataEx(DatasetName, Params, UserFilter, IncludeSchema, MaxRecords); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetDatasetDataExResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(Params); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDARemoteService_Invoker.Invoke_UpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function UpdateData(const Delta: Binary): Binary; } -var - Delta: Binary; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - Delta := nil; - lResult := nil; - try - __Message.Read('Delta', TypeInfo(Binary), Delta, []); - - lResult := (__Instance as IDARemoteService).UpdateData(Delta); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'UpdateDataResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(Delta); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDARemoteService_Invoker.Invoke_ExecuteSQLCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function ExecuteSQLCommand(const SQL: String): Integer; } -var - SQL: String; - lResult: Integer; -begin - try - __Message.Read('SQL', TypeInfo(String), SQL, []); - - lResult := (__Instance as IDARemoteService).ExecuteSQLCommand(SQL); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'ExecuteSQLCommandResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Finalize; - - finally - end; -end; - -procedure TDARemoteService_Invoker.Invoke_GetSchemaAsXML(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetSchemaAsXML: String; } -var - lResult: String; -begin - try - lResult := (__Instance as IDARemoteService).GetSchemaAsXML; - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetSchemaAsXMLResponse'); - __Message.Write('Result', TypeInfo(String), lResult, []); - __Message.Finalize; - - finally - end; -end; - -procedure TDARemoteService_Invoker.Invoke_GetMultipleDatasets(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetMultipleDatasets(const DatasetRequestInfoArray: TDADatasetRequestInfoArray): Binary; } -var - DatasetRequestInfoArray: DataAbstract3_Intf.TDADatasetRequestInfoArray; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - DatasetRequestInfoArray := nil; - lResult := nil; - try - __Message.Read('DatasetRequestInfoArray', TypeInfo(DataAbstract3_Intf.TDADatasetRequestInfoArray), DatasetRequestInfoArray, []); - - lResult := (__Instance as IDARemoteService).GetMultipleDatasets(DatasetRequestInfoArray); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'GetMultipleDatasetsResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(DatasetRequestInfoArray); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDARemoteService_Invoker.Invoke_ExecuteSQLCommandEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function ExecuteSQLCommandEx(const CommandName: String; const Params: TDADatasetParamArray): Integer; } -var - CommandName: String; - Params: DataAbstract3_Intf.TDADatasetParamArray; - lResult: Integer; - __lObjectDisposer: TROObjectDisposer; -begin - Params := nil; - try - __Message.Read('CommandName', TypeInfo(String), CommandName, []); - __Message.Read('Params', TypeInfo(DataAbstract3_Intf.TDADatasetParamArray), Params, []); - - lResult := (__Instance as IDARemoteService).ExecuteSQLCommandEx(CommandName, Params); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DARemoteService', 'ExecuteSQLCommandExResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(Params); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -{ TDALoginService_Invoker } - -procedure TDALoginService_Invoker.Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function Login(const UserID: String; const Password: String; out LoginInfo: TDALoginInfo): Boolean; } -var - UserID: String; - Password: String; - LoginInfo: DataAbstract3_Intf.TDALoginInfo; - lResult: Boolean; - __lObjectDisposer: TROObjectDisposer; -begin - LoginInfo := nil; - try - __Message.Read('UserID', TypeInfo(String), UserID, []); - __Message.Read('Password', TypeInfo(String), Password, []); - - lResult := (__Instance as IDALoginService).Login(UserID, Password, LoginInfo); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DALoginService', 'LoginResponse'); - __Message.Write('Result', TypeInfo(Boolean), lResult, []); - __Message.Write('LoginInfo', TypeInfo(DataAbstract3_Intf.TDALoginInfo), LoginInfo, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(LoginInfo); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDALoginService_Invoker.Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure Logout; } -begin - try - (__Instance as IDALoginService).Logout; - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract', 'DALoginService', 'LogoutResponse'); - __Message.Finalize; - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4.RODL b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4.RODL deleted file mode 100644 index b84291b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4.RODL +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Async.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Async.pas deleted file mode 100644 index a4db896..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Async.pas +++ /dev/null @@ -1,590 +0,0 @@ -unit DataAbstract4_Async; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROTypes, uROClientIntf, uROAsync, - {Project:} DataAbstract4_Intf; - -type - { IDataAbstractService_Async } - IDataAbstractService_Async = interface(IROAsyncInterface) - ['{B4C1D84D-1C6F-4E5A-8839-0C9F7EA5431B}'] - procedure Invoke_GetSchema(const aFilter: Utf8String); - procedure Invoke_GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray); - procedure Invoke_UpdateData(const aDelta: Binary); - procedure Invoke_ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray); - procedure Invoke_ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray); - procedure Invoke_GetTableSchema(const aTableNameArray: StringArray); - procedure Invoke_GetCommandSchema(const aCommandNameArray: StringArray); - procedure Invoke_SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer); - procedure Invoke_SQLExecuteCommand(const aSQLText: Utf8String); - procedure Invoke_GetDatasetScripts(const DatasetNames: Utf8String); - procedure Invoke_RegisterForDataChangeNotification(const aTableName: Utf8String); - procedure Invoke_UnregisterForDataChangeNotification(const aTableName: Utf8String); - function Retrieve_GetSchema: Utf8String; - function Retrieve_GetData: Binary; - function Retrieve_UpdateData: Binary; - function Retrieve_ExecuteCommand: Integer; - function Retrieve_ExecuteCommandEx(out aOutputParameters: DataParameterArray): Integer; - function Retrieve_GetTableSchema: Utf8String; - function Retrieve_GetCommandSchema: Utf8String; - function Retrieve_SQLGetData: Binary; - function Retrieve_SQLExecuteCommand: Integer; - function Retrieve_GetDatasetScripts: Utf8String; - end; - - { IBaseLoginService_Async } - IBaseLoginService_Async = interface(IROAsyncInterface) - ['{45A761A3-80E9-43E6-86BC-E96693551453}'] - procedure Invoke_Logout; - end; - - { IMultiDbLoginService_Async } - IMultiDbLoginService_Async = interface(IBaseLoginService_Async) - ['{8EBB1878-ECD9-4F4E-8A87-E26D51FD0ADD}'] - procedure Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String); - function Retrieve_Login(out aUserInfo: UserInfo): Boolean; - end; - - { IMultiDbLoginServiceV5_Async } - IMultiDbLoginServiceV5_Async = interface(IMultiDbLoginService_Async) - ['{292C3E8B-B263-4D95-9EE6-41DA014ACDF3}'] - procedure Invoke_GetConnectionNames; - procedure Invoke_GetDefaultConnectionName; - function Retrieve_GetConnectionNames: StringArray; - function Retrieve_GetDefaultConnectionName: Utf8String; - end; - - { ISimpleLoginService_Async } - ISimpleLoginService_Async = interface(IBaseLoginService_Async) - ['{74BC5406-7AA7-45CD-8012-193C38DF62E9}'] - procedure Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String); - function Retrieve_Login(out aUserInfo: UserInfo): Boolean; - end; - - { CoDataAbstractService_Async } - CoDataAbstractService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDataAbstractService_Async; - end; - - { CoBaseLoginService_Async } - CoBaseLoginService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBaseLoginService_Async; - end; - - { CoMultiDbLoginService_Async } - CoMultiDbLoginService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginService_Async; - end; - - { CoMultiDbLoginServiceV5_Async } - CoMultiDbLoginServiceV5_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginServiceV5_Async; - end; - - { CoSimpleLoginService_Async } - CoSimpleLoginService_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISimpleLoginService_Async; - end; - - { TDataAbstractService_AsyncProxy } - TDataAbstractService_AsyncProxy = class(TROAsyncProxy, IDataAbstractService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_GetSchema(const aFilter: Utf8String); - procedure Invoke_GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray); - procedure Invoke_UpdateData(const aDelta: Binary); - procedure Invoke_ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray); - procedure Invoke_ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray); - procedure Invoke_GetTableSchema(const aTableNameArray: StringArray); - procedure Invoke_GetCommandSchema(const aCommandNameArray: StringArray); - procedure Invoke_SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer); - procedure Invoke_SQLExecuteCommand(const aSQLText: Utf8String); - procedure Invoke_GetDatasetScripts(const DatasetNames: Utf8String); - procedure Invoke_RegisterForDataChangeNotification(const aTableName: Utf8String); - procedure Invoke_UnregisterForDataChangeNotification(const aTableName: Utf8String); - function Retrieve_GetSchema: Utf8String; - function Retrieve_GetData: Binary; - function Retrieve_UpdateData: Binary; - function Retrieve_ExecuteCommand: Integer; - function Retrieve_ExecuteCommandEx(out aOutputParameters: DataParameterArray): Integer; - function Retrieve_GetTableSchema: Utf8String; - function Retrieve_GetCommandSchema: Utf8String; - function Retrieve_SQLGetData: Binary; - function Retrieve_SQLExecuteCommand: Integer; - function Retrieve_GetDatasetScripts: Utf8String; - end; - - { TBaseLoginService_AsyncProxy } - TBaseLoginService_AsyncProxy = class(TROAsyncProxy, IBaseLoginService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_Logout; - end; - - { TMultiDbLoginService_AsyncProxy } - TMultiDbLoginService_AsyncProxy = class(TBaseLoginService_AsyncProxy, IMultiDbLoginService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String); - function Retrieve_Login(out aUserInfo: UserInfo): Boolean; - end; - - { TMultiDbLoginServiceV5_AsyncProxy } - TMultiDbLoginServiceV5_AsyncProxy = class(TMultiDbLoginService_AsyncProxy, IMultiDbLoginServiceV5_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_GetConnectionNames; - procedure Invoke_GetDefaultConnectionName; - function Retrieve_GetConnectionNames: StringArray; - function Retrieve_GetDefaultConnectionName: Utf8String; - end; - - { TSimpleLoginService_AsyncProxy } - TSimpleLoginService_AsyncProxy = class(TBaseLoginService_AsyncProxy, ISimpleLoginService_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String); - function Retrieve_Login(out aUserInfo: UserInfo): Boolean; - end; - -implementation - -uses - {vcl:} SysUtils; - -{ CoDataAbstractService } - -class function CoDataAbstractService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDataAbstractService_Async; -begin - result := TDataAbstractService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TDataAbstractService_AsyncProxy } - -function TDataAbstractService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'DataAbstractService'; -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_GetSchema(const aFilter: Utf8String); -begin - __AssertProxyNotBusy('GetSchema'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetSchema'); - __Message.Write('aFilter', TypeInfo(Utf8String), aFilter, []); - __DispatchAsyncRequest('GetSchema',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_GetSchema: Utf8String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetSchema'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Utf8String), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray); -begin - __AssertProxyNotBusy('GetData'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetData'); - __Message.Write('aTableNameArray', TypeInfo(StringArray), aTableNameArray, []); - __Message.Write('aTableRequestInfoArray', TypeInfo(TableRequestInfoArray), aTableRequestInfoArray, []); - __DispatchAsyncRequest('GetData',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_GetData: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetData'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_UpdateData(const aDelta: Binary); -begin - __AssertProxyNotBusy('UpdateData'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'UpdateData'); - __Message.Write('aDelta', TypeInfo(Binary), aDelta, []); - __DispatchAsyncRequest('UpdateData',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_UpdateData: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('UpdateData'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray); -begin - __AssertProxyNotBusy('ExecuteCommand'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'ExecuteCommand'); - __Message.Write('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Write('aParameterArray', TypeInfo(DataParameterArray), aParameterArray, []); - __DispatchAsyncRequest('ExecuteCommand',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_ExecuteCommand: Integer; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('ExecuteCommand'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Integer), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray); -begin - __AssertProxyNotBusy('ExecuteCommandEx'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'ExecuteCommandEx'); - __Message.Write('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Write('aInputParameters', TypeInfo(DataParameterArray), aInputParameters, []); - __DispatchAsyncRequest('ExecuteCommandEx',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_ExecuteCommandEx(out aOutputParameters: DataParameterArray): Integer; -var __response:TStream; -begin - aOutputParameters := nil; - __response := __RetrieveAsyncResponse('ExecuteCommandEx'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Integer), Result, []); - __Message.Read('aOutputParameters', TypeInfo(DataParameterArray), aOutputParameters, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_GetTableSchema(const aTableNameArray: StringArray); -begin - __AssertProxyNotBusy('GetTableSchema'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetTableSchema'); - __Message.Write('aTableNameArray', TypeInfo(StringArray), aTableNameArray, []); - __DispatchAsyncRequest('GetTableSchema',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_GetTableSchema: Utf8String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetTableSchema'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Utf8String), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_GetCommandSchema(const aCommandNameArray: StringArray); -begin - __AssertProxyNotBusy('GetCommandSchema'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetCommandSchema'); - __Message.Write('aCommandNameArray', TypeInfo(StringArray), aCommandNameArray, []); - __DispatchAsyncRequest('GetCommandSchema',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_GetCommandSchema: Utf8String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetCommandSchema'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Utf8String), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer); -begin - __AssertProxyNotBusy('SQLGetData'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'SQLGetData'); - __Message.Write('aSQLText', TypeInfo(Utf8String), aSQLText, []); - __Message.Write('aIncludeSchema', TypeInfo(Boolean), aIncludeSchema, []); - __Message.Write('aMaxRecords', TypeInfo(Integer), aMaxRecords, []); - __DispatchAsyncRequest('SQLGetData',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_SQLGetData: Binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('SQLGetData'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Binary), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_SQLExecuteCommand(const aSQLText: Utf8String); -begin - __AssertProxyNotBusy('SQLExecuteCommand'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'SQLExecuteCommand'); - __Message.Write('aSQLText', TypeInfo(Utf8String), aSQLText, []); - __DispatchAsyncRequest('SQLExecuteCommand',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_SQLExecuteCommand: Integer; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('SQLExecuteCommand'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Integer), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_GetDatasetScripts(const DatasetNames: Utf8String); -begin - __AssertProxyNotBusy('GetDatasetScripts'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetDatasetScripts'); - __Message.Write('DatasetNames', TypeInfo(Utf8String), DatasetNames, []); - __DispatchAsyncRequest('GetDatasetScripts',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TDataAbstractService_AsyncProxy.Retrieve_GetDatasetScripts: Utf8String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetDatasetScripts'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Utf8String), Result, []); - - __response.Free(); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_RegisterForDataChangeNotification(const aTableName: Utf8String); -begin - __AssertProxyNotBusy('RegisterForDataChangeNotification'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'RegisterForDataChangeNotification'); - __Message.Write('aTableName', TypeInfo(Utf8String), aTableName, []); - __DispatchAsyncRequest('RegisterForDataChangeNotification',__Message, false); - __Message.UnsetAttributes(__TransportChannel); -end; - -procedure TDataAbstractService_AsyncProxy.Invoke_UnregisterForDataChangeNotification(const aTableName: Utf8String); -begin - __AssertProxyNotBusy('UnregisterForDataChangeNotification'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'UnregisterForDataChangeNotification'); - __Message.Write('aTableName', TypeInfo(Utf8String), aTableName, []); - __DispatchAsyncRequest('UnregisterForDataChangeNotification',__Message, false); - __Message.UnsetAttributes(__TransportChannel); -end; - - -{ CoSimpleLoginService } - -class function CoSimpleLoginService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISimpleLoginService_Async; -begin - result := TSimpleLoginService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TSimpleLoginService_AsyncProxy } - -function TSimpleLoginService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'SimpleLoginService'; -end; - -procedure TSimpleLoginService_AsyncProxy.Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String); -begin - __AssertProxyNotBusy('Login'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Login'); - __Message.Write('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Write('aPassword', TypeInfo(Utf8String), aPassword, []); - __DispatchAsyncRequest('Login',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TSimpleLoginService_AsyncProxy.Retrieve_Login(out aUserInfo: UserInfo): Boolean; -var __response:TStream; -begin - aUserInfo := nil; - __response := __RetrieveAsyncResponse('Login'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Boolean), Result, []); - __Message.Read('aUserInfo', TypeInfo(UserInfo), aUserInfo, []); - - __response.Free(); -end; - - -{ CoBaseLoginService } - -class function CoBaseLoginService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBaseLoginService_Async; -begin - result := TBaseLoginService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TBaseLoginService_AsyncProxy } - -function TBaseLoginService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'BaseLoginService'; -end; - -procedure TBaseLoginService_AsyncProxy.Invoke_Logout; -begin - __AssertProxyNotBusy('Logout'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Logout'); - __DispatchAsyncRequest('Logout',__Message, false); -end; - - -{ CoMultiDbLoginService } - -class function CoMultiDbLoginService_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginService_Async; -begin - result := TMultiDbLoginService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TMultiDbLoginService_AsyncProxy } - -function TMultiDbLoginService_AsyncProxy.__GetInterfaceName:string; -begin - result := 'MultiDbLoginService'; -end; - -procedure TMultiDbLoginService_AsyncProxy.Invoke_Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String); -begin - __AssertProxyNotBusy('Login'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Login'); - __Message.Write('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Write('aPassword', TypeInfo(Utf8String), aPassword, []); - __Message.Write('aConnectionName', TypeInfo(Utf8String), aConnectionName, []); - __DispatchAsyncRequest('Login',__Message); - __Message.UnsetAttributes(__TransportChannel); -end; - -function TMultiDbLoginService_AsyncProxy.Retrieve_Login(out aUserInfo: UserInfo): Boolean; -var __response:TStream; -begin - aUserInfo := nil; - __response := __RetrieveAsyncResponse('Login'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Boolean), Result, []); - __Message.Read('aUserInfo', TypeInfo(UserInfo), aUserInfo, []); - - __response.Free(); -end; - - -{ CoMultiDbLoginServiceV5 } - -class function CoMultiDbLoginServiceV5_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginServiceV5_Async; -begin - result := TMultiDbLoginServiceV5_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TMultiDbLoginServiceV5_AsyncProxy } - -function TMultiDbLoginServiceV5_AsyncProxy.__GetInterfaceName:string; -begin - result := 'MultiDbLoginServiceV5'; -end; - -procedure TMultiDbLoginServiceV5_AsyncProxy.Invoke_GetConnectionNames; -begin - __AssertProxyNotBusy('GetConnectionNames'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetConnectionNames'); - __DispatchAsyncRequest('GetConnectionNames',__Message); -end; - -function TMultiDbLoginServiceV5_AsyncProxy.Retrieve_GetConnectionNames: StringArray; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('GetConnectionNames'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(StringArray), Result, []); - - __response.Free(); -end; - -procedure TMultiDbLoginServiceV5_AsyncProxy.Invoke_GetDefaultConnectionName; -begin - __AssertProxyNotBusy('GetDefaultConnectionName'); - - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetDefaultConnectionName'); - __DispatchAsyncRequest('GetDefaultConnectionName',__Message); -end; - -function TMultiDbLoginServiceV5_AsyncProxy.Retrieve_GetDefaultConnectionName: Utf8String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('GetDefaultConnectionName'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(Utf8String), Result, []); - - __response.Free(); -end; - - -initialization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Intf.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Intf.pas deleted file mode 100644 index 91729aa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Intf.pas +++ /dev/null @@ -1,2285 +0,0 @@ -unit DataAbstract4_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf; - -const - { Library ID } - LibraryUID = '{DC8B7BE2-14AF-402D-B1F8-E1008B6FA4F6}'; - TargetNamespace = ''; - - { Service Interface ID's } - IDataAbstractService_IID : TGUID = '{4C2EC238-4FB4-434E-8CFF-ED25EEFF1525}'; - ISimpleLoginService_IID : TGUID = '{B186853B-168B-4E33-B798-467444BFC8C6}'; - IBaseLoginService_IID : TGUID = '{C349DB54-9DFB-454E-AD23-6F2166A624A6}'; - IMultiDbLoginService_IID : TGUID = '{2C6D5764-01CE-447A-8264-27210B2C7371}'; - IMultiDbLoginServiceV5_IID : TGUID = '{5A78AB01-2097-4473-A4D5-78980FFD90E4}'; - - { Event ID's } - EID_DataChangeNotification = 'DataChangeNotification'; - -type - { Forward declarations } - IDataAbstractService = interface; - ISimpleLoginService = interface; - IBaseLoginService = interface; - IMultiDbLoginService = interface; - IMultiDbLoginServiceV5 = interface; - - DataParameterArray = class; - TableRequestInfoArray = class; - StringArray = class; - VariantArray = class; - ColumnSortingArray = class; - - DataParameter = class; - TableRequestInfo = class; - UserInfo = class; - TableRequestInfoV5 = class; - ColumnSorting = class; - - IDataChangeNotification = interface; - - - { Enumerateds } - ColumnSortDirection = (ColumnSortDirection_Ascending,ColumnSortDirection_Descending); - - { DataParameter } - DataParameter = class(TROComplexType) - private - fName: Utf8String; - fValue: Variant; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property Name:Utf8String read fName write fName; - property Value:Variant read fValue write fValue; - end; - - { DataParameterCollection } - DataParameterCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): DataParameter; - procedure SetItems(aIndex: integer; const Value: DataParameter); - public - constructor Create; overload; - function Add: DataParameter; reintroduce; - procedure SaveToArray(anArray: DataParameterArray); - procedure LoadFromArray(anArray: DataParameterArray); - property Items[Index: integer]:DataParameter read GetItems write SetItems; default; - end; - - { TableRequestInfo } - TableRequestInfo = class(TROComplexType) - private - fUserFilter: Utf8String; - fIncludeSchema: Boolean; - fMaxRecords: Integer; - fParameters: DataParameterArray; - function GetParameters: DataParameterArray; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property UserFilter:Utf8String read fUserFilter write fUserFilter; - property IncludeSchema:Boolean read fIncludeSchema write fIncludeSchema; - property MaxRecords:Integer read fMaxRecords write fMaxRecords; - property Parameters:DataParameterArray read GetParameters write fParameters; - end; - - { TableRequestInfoCollection } - TableRequestInfoCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): TableRequestInfo; - procedure SetItems(aIndex: integer; const Value: TableRequestInfo); - public - constructor Create; overload; - function Add: TableRequestInfo; reintroduce; - procedure SaveToArray(anArray: TableRequestInfoArray); - procedure LoadFromArray(anArray: TableRequestInfoArray); - property Items[Index: integer]:TableRequestInfo read GetItems write SetItems; default; - end; - - { TableRequestInfoV5 } - TableRequestInfoV5 = class(TableRequestInfo) - private - fWhereClause: IXmlNode; - fDynamicSelectFieldNames: StringArray; - fSorting: ColumnSorting; - function GetDynamicSelectFieldNames: StringArray; - function GetSorting: ColumnSorting; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property WhereClause:IXmlNode read fWhereClause write fWhereClause; - property DynamicSelectFieldNames:StringArray read GetDynamicSelectFieldNames write fDynamicSelectFieldNames; - property Sorting:ColumnSorting read GetSorting write fSorting; - end; - - { TableRequestInfoV5Collection } - TableRequestInfoV5Collection = class(TableRequestInfoCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): TableRequestInfoV5; - procedure SetItems(aIndex: integer; const Value: TableRequestInfoV5); - public - constructor Create; overload; - function Add: TableRequestInfoV5; reintroduce; - property Items[Index: integer]:TableRequestInfoV5 read GetItems write SetItems; default; - end; - - { UserInfo } - UserInfo = class(TROComplexType) - private - fSessionID: Utf8String; - fUserID: Utf8String; - fPrivileges: StringArray; - fAttributes: VariantArray; - fUserData: Binary; - function GetPrivileges: StringArray; - function GetAttributes: VariantArray; - function GetUserData: Binary; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property SessionID:Utf8String read fSessionID write fSessionID; - property UserID:Utf8String read fUserID write fUserID; - property Privileges:StringArray read GetPrivileges write fPrivileges; - property Attributes:VariantArray read GetAttributes write fAttributes; - property UserData:Binary read GetUserData write fUserData; - end; - - { UserInfoCollection } - UserInfoCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): UserInfo; - procedure SetItems(aIndex: integer; const Value: UserInfo); - public - constructor Create; overload; - function Add: UserInfo; reintroduce; - property Items[Index: integer]:UserInfo read GetItems write SetItems; default; - end; - - { ColumnSorting } - ColumnSorting = class(TROComplexType) - private - fFieldName: Utf8String; - fSortDirection: ColumnSortDirection; - public - procedure Assign(iSource: TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - published - property FieldName:Utf8String read fFieldName write fFieldName; - property SortDirection:ColumnSortDirection read fSortDirection write fSortDirection; - end; - - { ColumnSortingCollection } - ColumnSortingCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): ColumnSorting; - procedure SetItems(aIndex: integer; const Value: ColumnSorting); - public - constructor Create; overload; - function Add: ColumnSorting; reintroduce; - procedure SaveToArray(anArray: ColumnSortingArray); - procedure LoadFromArray(anArray: ColumnSortingArray); - property Items[Index: integer]:ColumnSorting read GetItems write SetItems; default; - end; - - { DataParameterArray } - DataParameterArray_DataParameter = array of DataParameter; - DataParameterArray = class(TROArray) - private - fCount: Integer; - fItems : DataParameterArray_DataParameter; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): DataParameter; - procedure SetItems(aIndex: integer; const Value: DataParameter); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemClass: TClass; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - function Add: DataParameter; overload; - function Add(const Value: DataParameter):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:DataParameter read GetItems write SetItems; default; - property InnerArray: DataParameterArray_DataParameter read fItems; - end; - - { TableRequestInfoArray } - TableRequestInfoArray_TableRequestInfo = array of TableRequestInfo; - TableRequestInfoArray = class(TROArray) - private - fCount: Integer; - fItems : TableRequestInfoArray_TableRequestInfo; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): TableRequestInfo; - procedure SetItems(aIndex: integer; const Value: TableRequestInfo); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemClass: TClass; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - function Add: TableRequestInfo; overload; - function Add(const Value: TableRequestInfo):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:TableRequestInfo read GetItems write SetItems; default; - property InnerArray: TableRequestInfoArray_TableRequestInfo read fItems; - end; - - { StringArray } - StringArray_Utf8String = array of Utf8String; - StringArray = class(TROArray) - private - fCount: Integer; - fItems : StringArray_Utf8String; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): Utf8String; - procedure SetItems(aIndex: integer; const Value: Utf8String); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - function Add(const Value:Utf8String): integer; - - property Count : integer read GetCount; - property Items[Index: integer]:Utf8String read GetItems write SetItems; default; - property InnerArray: StringArray_Utf8String read fItems; - end; - - { VariantArray } - VariantArray_Variant = array of Variant; - VariantArray = class(TROArray) - private - fCount: Integer; - fItems : VariantArray_Variant; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): Variant; - procedure SetItems(aIndex: integer; const Value: Variant); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - function Add(const Value:Variant): integer; - - property Count : integer read GetCount; - property Items[Index: integer]:Variant read GetItems write SetItems; default; - property InnerArray: VariantArray_Variant read fItems; - end; - - { ColumnSortingArray } - ColumnSortingArray_ColumnSorting = array of ColumnSorting; - ColumnSortingArray = class(TROArray) - private - fCount: Integer; - fItems : ColumnSortingArray_ColumnSorting; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): ColumnSorting; - procedure SetItems(aIndex: integer; const Value: ColumnSorting); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - class function GetItemClass: TClass; override; - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - function Add: ColumnSorting; overload; - function Add(const Value: ColumnSorting):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:ColumnSorting read GetItems write SetItems; default; - property InnerArray: ColumnSortingArray_ColumnSorting read fItems; - end; - - { IDataAbstractService } - IDataAbstractService = interface - ['{4C2EC238-4FB4-434E-8CFF-ED25EEFF1525}'] - function GetSchema(const aFilter: Utf8String): Utf8String; - function GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; - function UpdateData(const aDelta: Binary): Binary; - function ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; - function ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray; out aOutputParameters: DataParameterArray): Integer; - function GetTableSchema(const aTableNameArray: StringArray): Utf8String; - function GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; - function SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; - function SQLExecuteCommand(const aSQLText: Utf8String): Integer; - function GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; - procedure RegisterForDataChangeNotification(const aTableName: Utf8String); - procedure UnregisterForDataChangeNotification(const aTableName: Utf8String); - end; - - { CoDataAbstractService } - CoDataAbstractService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDataAbstractService; - end; - - { TDataAbstractService_Proxy } - TDataAbstractService_Proxy = class(TROProxy, IDataAbstractService) - protected - function __GetInterfaceName:string; override; - - function GetSchema(const aFilter: Utf8String): Utf8String; - function GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; - function UpdateData(const aDelta: Binary): Binary; - function ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; - function ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray; out aOutputParameters: DataParameterArray): Integer; - function GetTableSchema(const aTableNameArray: StringArray): Utf8String; - function GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; - function SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; - function SQLExecuteCommand(const aSQLText: Utf8String): Integer; - function GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; - procedure RegisterForDataChangeNotification(const aTableName: Utf8String); - procedure UnregisterForDataChangeNotification(const aTableName: Utf8String); - end; - - { IBaseLoginService } - IBaseLoginService = interface - ['{C349DB54-9DFB-454E-AD23-6F2166A624A6}'] - procedure Logout; - end; - - { CoBaseLoginService } - CoBaseLoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBaseLoginService; - end; - - { TBaseLoginService_Proxy } - TBaseLoginService_Proxy = class(TROProxy, IBaseLoginService) - protected - function __GetInterfaceName:string; override; - - procedure Logout; - end; - - { IMultiDbLoginService } - IMultiDbLoginService = interface(IBaseLoginService) - ['{2C6D5764-01CE-447A-8264-27210B2C7371}'] - function Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String; out aUserInfo: UserInfo): Boolean; - end; - - { CoMultiDbLoginService } - CoMultiDbLoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginService; - end; - - { TMultiDbLoginService_Proxy } - TMultiDbLoginService_Proxy = class(TBaseLoginService_Proxy, IMultiDbLoginService) - protected - function __GetInterfaceName:string; override; - - function Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String; out aUserInfo: UserInfo): Boolean; - end; - - { IMultiDbLoginServiceV5 } - IMultiDbLoginServiceV5 = interface(IMultiDbLoginService) - ['{5A78AB01-2097-4473-A4D5-78980FFD90E4}'] - function GetConnectionNames: StringArray; - function GetDefaultConnectionName: Utf8String; - end; - - { CoMultiDbLoginServiceV5 } - CoMultiDbLoginServiceV5 = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginServiceV5; - end; - - { TMultiDbLoginServiceV5_Proxy } - TMultiDbLoginServiceV5_Proxy = class(TMultiDbLoginService_Proxy, IMultiDbLoginServiceV5) - protected - function __GetInterfaceName:string; override; - - function GetConnectionNames: StringArray; - function GetDefaultConnectionName: Utf8String; - end; - - { ISimpleLoginService } - ISimpleLoginService = interface(IBaseLoginService) - ['{B186853B-168B-4E33-B798-467444BFC8C6}'] - function Login(const aUserID: Utf8String; const aPassword: Utf8String; out aUserInfo: UserInfo): Boolean; - end; - - { CoSimpleLoginService } - CoSimpleLoginService = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISimpleLoginService; - end; - - { TSimpleLoginService_Proxy } - TSimpleLoginService_Proxy = class(TBaseLoginService_Proxy, ISimpleLoginService) - protected - function __GetInterfaceName:string; override; - - function Login(const aUserID: Utf8String; const aPassword: Utf8String; out aUserInfo: UserInfo): Boolean; - end; - - { IDataChangeNotification } - IDataChangeNotification = interface - ['{1309480C-AEF8-48E0-A27F-E6090F441B46}'] - procedure OnDataTableChanged(const aTableName: Utf8String; const aDelta: Binary); - end; - - { IDataChangeNotification_Writer } - IDataChangeNotification_Writer = interface(IROEventWriter) - ['{1309480C-AEF8-48E0-A27F-E6090F441B46}'] - procedure OnDataTableChanged(const __Sender : TGUID; const aTableName: Utf8String; const aDelta: Binary); - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uROSerializer, uRORes; - -{ DataParameterArray } - -procedure DataParameterArray.Assign(iSource: TPersistent); -var lSource:DataParameterArray; - i:integer; -begin - if (iSource is DataParameterArray) then begin - lSource := DataParameterArray(iSource); - Clear(); - Resize(lSource.Count); - - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i].Assign(lSource.Items[i]); - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function DataParameterArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(DataParameter); -end; - -class function DataParameterArray.GetItemClass: TClass; -begin - result := DataParameter; -end; - -class function DataParameterArray.GetItemSize: integer; -begin - result := SizeOf(DataParameter); -end; - -function DataParameterArray.GetItems(aIndex: integer): DataParameter; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function DataParameterArray.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -procedure DataParameterArray.SetItemRef(aIndex: integer; Ref: pointer); -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if Ref <> fItems[aIndex] then begin - if fItems[aIndex] <> nil then fItems[aIndex].Free; - fItems[aIndex] := Ref; - end; -end; - -procedure DataParameterArray.Clear; -var i: integer; -begin - for i := 0 to (Count-1) do fItems[i].Free(); - SetLength(fItems, 0); - FCount := 0; -end; - -procedure DataParameterArray.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - fItems[aIndex].Free(); - - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - fItems[aIndex].Free; - fItems[aIndex] := Value; - end; -end; - -procedure DataParameterArray.Resize(ElementCount: integer); -var i: Integer; -begin - if fCount = ElementCount then Exit; - for i := FCount -1 downto ElementCount do - FItems[i].Free; - SetLength(fItems, ElementCount); - for i := FCount to ElementCount -1 do - FItems[i] := DataParameter.Create; - FCount := ElementCount; -end; - -function DataParameterArray.GetCount: integer; -begin - result := FCount; -end; - -procedure DataParameterArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function DataParameterArray.Add: DataParameter; -begin - result := DataParameter.Create; - Add(Result); -end; - -function DataParameterArray.Add(const Value:DataParameter): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure DataParameterArray.ReadComplex(ASerializer: TObject); -var - lval: DataParameter; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), DataParameter, lval, i); - Items[i] := lval; - end; -end; - -procedure DataParameterArray.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); -end; - -{ TableRequestInfoArray } - -procedure TableRequestInfoArray.Assign(iSource: TPersistent); -var lSource:TableRequestInfoArray; - i:integer; -begin - if (iSource is TableRequestInfoArray) then begin - lSource := TableRequestInfoArray(iSource); - Clear(); - Resize(lSource.Count); - - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i].Assign(lSource.Items[i]); - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TableRequestInfoArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(TableRequestInfo); -end; - -class function TableRequestInfoArray.GetItemClass: TClass; -begin - result := TableRequestInfo; -end; - -class function TableRequestInfoArray.GetItemSize: integer; -begin - result := SizeOf(TableRequestInfo); -end; - -function TableRequestInfoArray.GetItems(aIndex: integer): TableRequestInfo; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function TableRequestInfoArray.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -procedure TableRequestInfoArray.SetItemRef(aIndex: integer; Ref: pointer); -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if Ref <> fItems[aIndex] then begin - if fItems[aIndex] <> nil then fItems[aIndex].Free; - fItems[aIndex] := Ref; - end; -end; - -procedure TableRequestInfoArray.Clear; -var i: integer; -begin - for i := 0 to (Count-1) do fItems[i].Free(); - SetLength(fItems, 0); - FCount := 0; -end; - -procedure TableRequestInfoArray.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - fItems[aIndex].Free(); - - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - fItems[aIndex].Free; - fItems[aIndex] := Value; - end; -end; - -procedure TableRequestInfoArray.Resize(ElementCount: integer); -var i: Integer; -begin - if fCount = ElementCount then Exit; - for i := FCount -1 downto ElementCount do - FItems[i].Free; - SetLength(fItems, ElementCount); - for i := FCount to ElementCount -1 do - FItems[i] := TableRequestInfo.Create; - FCount := ElementCount; -end; - -function TableRequestInfoArray.GetCount: integer; -begin - result := FCount; -end; - -procedure TableRequestInfoArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function TableRequestInfoArray.Add: TableRequestInfo; -begin - result := TableRequestInfo.Create; - Add(Result); -end; - -function TableRequestInfoArray.Add(const Value:TableRequestInfo): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure TableRequestInfoArray.ReadComplex(ASerializer: TObject); -var - lval: TableRequestInfo; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), TableRequestInfo, lval, i); - Items[i] := lval; - end; -end; - -procedure TableRequestInfoArray.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); -end; - -{ StringArray } - -procedure StringArray.Assign(iSource: TPersistent); -var lSource:StringArray; - i:integer; -begin - if (iSource is StringArray) then begin - lSource := StringArray(iSource); - Clear(); - Resize(lSource.Count); - - for i := 0 to Count-1 do begin - Items[i] := lSource.Items[i]; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function StringArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(Utf8String); -end; - -class function StringArray.GetItemSize: integer; -begin - result := SizeOf(Utf8String); -end; - -function StringArray.GetItems(aIndex: integer): Utf8String; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function StringArray.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := @fItems[aIndex]; -end; - -procedure StringArray.Clear; -begin - SetLength(fItems, 0); - FCount := 0; -end; - -procedure StringArray.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - fItems[aIndex] := Value; - end; -end; - -procedure StringArray.Resize(ElementCount: integer); -begin - if fCount = ElementCount then Exit; - SetLength(fItems, ElementCount); - FCount := ElementCount; -end; - -function StringArray.GetCount: integer; -begin - result := FCount; -end; - -procedure StringArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function StringArray.Add(const Value: Utf8String): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure StringArray.ReadComplex(ASerializer: TObject); -var - lval: Utf8String; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - ReadUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - Items[i] := lval; - end; -end; - -procedure StringArray.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - WriteUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); -end; - -{ VariantArray } - -procedure VariantArray.Assign(iSource: TPersistent); -var lSource:VariantArray; - i:integer; -begin - if (iSource is VariantArray) then begin - lSource := VariantArray(iSource); - Clear(); - Resize(lSource.Count); - - for i := 0 to Count-1 do begin - Items[i] := lSource.Items[i]; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function VariantArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(Variant); -end; - -class function VariantArray.GetItemSize: integer; -begin - result := SizeOf(Variant); -end; - -function VariantArray.GetItems(aIndex: integer): Variant; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function VariantArray.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := @fItems[aIndex]; -end; - -procedure VariantArray.Clear; -begin - SetLength(fItems, 0); - FCount := 0; -end; - -procedure VariantArray.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - fItems[aIndex] := Value; - end; -end; - -procedure VariantArray.Resize(ElementCount: integer); -begin - if fCount = ElementCount then Exit; - SetLength(fItems, ElementCount); - FCount := ElementCount; -end; - -function VariantArray.GetCount: integer; -begin - result := FCount; -end; - -procedure VariantArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function VariantArray.Add(const Value: Variant): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure VariantArray.ReadComplex(ASerializer: TObject); -var - lval: Variant; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - ReadVariant(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - Items[i] := lval; - end; -end; - -procedure VariantArray.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - WriteVariant(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); -end; - -{ ColumnSortingArray } - -procedure ColumnSortingArray.Assign(iSource: TPersistent); -var lSource:ColumnSortingArray; - i:integer; -begin - if (iSource is ColumnSortingArray) then begin - lSource := ColumnSortingArray(iSource); - Clear(); - Resize(lSource.Count); - - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i].Assign(lSource.Items[i]); - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function ColumnSortingArray.GetItemType: PTypeInfo; -begin - result := TypeInfo(ColumnSorting); -end; - -class function ColumnSortingArray.GetItemClass: TClass; -begin - result := ColumnSorting; -end; - -class function ColumnSortingArray.GetItemSize: integer; -begin - result := SizeOf(ColumnSorting); -end; - -function ColumnSortingArray.GetItems(aIndex: integer): ColumnSorting; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function ColumnSortingArray.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -procedure ColumnSortingArray.SetItemRef(aIndex: integer; Ref: pointer); -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if Ref <> fItems[aIndex] then begin - if fItems[aIndex] <> nil then fItems[aIndex].Free; - fItems[aIndex] := Ref; - end; -end; - -procedure ColumnSortingArray.Clear; -var i: integer; -begin - for i := 0 to (Count-1) do fItems[i].Free(); - SetLength(fItems, 0); - FCount := 0; -end; - -procedure ColumnSortingArray.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - fItems[aIndex].Free(); - - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - fItems[aIndex].Free; - fItems[aIndex] := Value; - end; -end; - -procedure ColumnSortingArray.Resize(ElementCount: integer); -var i: Integer; -begin - if fCount = ElementCount then Exit; - for i := FCount -1 downto ElementCount do - FItems[i].Free; - SetLength(fItems, ElementCount); - for i := FCount to ElementCount -1 do - FItems[i] := ColumnSorting.Create; - FCount := ElementCount; -end; - -function ColumnSortingArray.GetCount: integer; -begin - result := FCount; -end; - -procedure ColumnSortingArray.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -function ColumnSortingArray.Add: ColumnSorting; -begin - result := ColumnSorting.Create; - Add(Result); -end; - -function ColumnSortingArray.Add(const Value:ColumnSorting): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure ColumnSortingArray.ReadComplex(ASerializer: TObject); -var - lval: ColumnSorting; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), ColumnSorting, lval, i); - Items[i] := lval; - end; -end; - -procedure ColumnSortingArray.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); -end; - -{ DataParameter } - -procedure DataParameter.Assign(iSource: TPersistent); -var lSource: DataAbstract4_Intf.DataParameter; -begin - inherited Assign(iSource); - if (iSource is DataAbstract4_Intf.DataParameter) then begin - lSource := DataAbstract4_Intf.DataParameter(iSource); - Name := lSource.Name; - Value := lSource.Value; - end; -end; - -procedure DataParameter.ReadComplex(ASerializer: TObject); -var - l_Name: Utf8String; - l_Value: Variant; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_Name := Name; - TROSerializer(ASerializer).ReadUTF8String('Name', l_Name); - Name := l_Name; - l_Value := Value; - TROSerializer(ASerializer).ReadVariant('Value', l_Value); - Value := l_Value; - end else begin - l_Name := Name; - TROSerializer(ASerializer).ReadUTF8String('Name', l_Name); - Name := l_Name; - l_Value := Value; - TROSerializer(ASerializer).ReadVariant('Value', l_Value); - Value := l_Value; - end; -end; - -procedure DataParameter.WriteComplex(ASerializer: TObject); -var - l_Name: Utf8String; - l_Value: Variant; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_Name := Name; - TROSerializer(ASerializer).WriteUTF8String('Name', l_Name); - l_Value := Value; - TROSerializer(ASerializer).WriteVariant('Value', l_Value); - end else begin - l_Name := Name; - TROSerializer(ASerializer).WriteUTF8String('Name', l_Name); - l_Value := Value; - TROSerializer(ASerializer).WriteVariant('Value', l_Value); - end; -end; - -{ DataParameterCollection } -constructor DataParameterCollection.Create; -begin - inherited Create(DataParameter); -end; - -constructor DataParameterCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function DataParameterCollection.Add: DataParameter; -begin - result := DataParameter(inherited Add); -end; - -function DataParameterCollection.GetItems(aIndex: integer): DataParameter; -begin - result := DataParameter(inherited Items[aIndex]); -end; - -procedure DataParameterCollection.LoadFromArray(anArray: DataParameterArray); -var i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure DataParameterCollection.SaveToArray(anArray: DataParameterArray); -var i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := DataParameter.Create; - anArray[i].Assign(Items[i]); - end; -end; - -procedure DataParameterCollection.SetItems(aIndex: integer; const Value: DataParameter); -begin - DataParameter(inherited Items[aIndex]).Assign(Value); -end; - -{ TableRequestInfo } - -procedure TableRequestInfo.Assign(iSource: TPersistent); -var lSource: DataAbstract4_Intf.TableRequestInfo; -begin - inherited Assign(iSource); - if (iSource is DataAbstract4_Intf.TableRequestInfo) then begin - lSource := DataAbstract4_Intf.TableRequestInfo(iSource); - UserFilter := lSource.UserFilter; - IncludeSchema := lSource.IncludeSchema; - MaxRecords := lSource.MaxRecords; - Parameters.Assign(lSource.Parameters); - end; -end; - -function TableRequestInfo.GetParameters: DataParameterArray; -begin - if (fParameters = nil) then fParameters := DataParameterArray.Create(); - result := fParameters; -end; - -procedure TableRequestInfo.ReadComplex(ASerializer: TObject); -var - l_IncludeSchema: Boolean; - l_MaxRecords: Integer; - l_Parameters: DataParameterArray; - l_UserFilter: Utf8String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_UserFilter := UserFilter; - TROSerializer(ASerializer).ReadUTF8String('UserFilter', l_UserFilter); - UserFilter := l_UserFilter; - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).ReadEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - IncludeSchema := l_IncludeSchema; - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).ReadInteger('MaxRecords', otSLong, l_MaxRecords); - MaxRecords := l_MaxRecords; - l_Parameters := Parameters; - TROSerializer(ASerializer).ReadArray('Parameters', DataParameterArray, l_Parameters); - if Parameters <> l_Parameters then Parameters.Free; - Parameters := l_Parameters; - end else begin - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).ReadEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - IncludeSchema := l_IncludeSchema; - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).ReadInteger('MaxRecords', otSLong, l_MaxRecords); - MaxRecords := l_MaxRecords; - l_Parameters := Parameters; - TROSerializer(ASerializer).ReadArray('Parameters', DataParameterArray, l_Parameters); - if Parameters <> l_Parameters then Parameters.Free; - Parameters := l_Parameters; - l_UserFilter := UserFilter; - TROSerializer(ASerializer).ReadUTF8String('UserFilter', l_UserFilter); - UserFilter := l_UserFilter; - end; -end; - -procedure TableRequestInfo.WriteComplex(ASerializer: TObject); -var - l_IncludeSchema: Boolean; - l_MaxRecords: Integer; - l_Parameters: DataParameterArray; - l_UserFilter: Utf8String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_UserFilter := UserFilter; - TROSerializer(ASerializer).WriteUTF8String('UserFilter', l_UserFilter); - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).WriteEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).WriteInteger('MaxRecords', otSLong, l_MaxRecords); - l_Parameters := Parameters; - TROSerializer(ASerializer).WriteArray('Parameters', l_Parameters); - end else begin - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).WriteEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).WriteInteger('MaxRecords', otSLong, l_MaxRecords); - l_Parameters := Parameters; - TROSerializer(ASerializer).WriteArray('Parameters', l_Parameters); - l_UserFilter := UserFilter; - TROSerializer(ASerializer).WriteUTF8String('UserFilter', l_UserFilter); - end; -end; - -{ TableRequestInfoCollection } -constructor TableRequestInfoCollection.Create; -begin - inherited Create(TableRequestInfo); -end; - -constructor TableRequestInfoCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TableRequestInfoCollection.Add: TableRequestInfo; -begin - result := TableRequestInfo(inherited Add); -end; - -function TableRequestInfoCollection.GetItems(aIndex: integer): TableRequestInfo; -begin - result := TableRequestInfo(inherited Items[aIndex]); -end; - -procedure TableRequestInfoCollection.LoadFromArray(anArray: TableRequestInfoArray); -var i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure TableRequestInfoCollection.SaveToArray(anArray: TableRequestInfoArray); -var i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := TableRequestInfo.Create; - anArray[i].Assign(Items[i]); - end; -end; - -procedure TableRequestInfoCollection.SetItems(aIndex: integer; const Value: TableRequestInfo); -begin - TableRequestInfo(inherited Items[aIndex]).Assign(Value); -end; - -{ UserInfo } - -procedure UserInfo.Assign(iSource: TPersistent); -var lSource: DataAbstract4_Intf.UserInfo; -begin - inherited Assign(iSource); - if (iSource is DataAbstract4_Intf.UserInfo) then begin - lSource := DataAbstract4_Intf.UserInfo(iSource); - SessionID := lSource.SessionID; - UserID := lSource.UserID; - Privileges.Assign(lSource.Privileges); - Attributes.Assign(lSource.Attributes); - UserData.Assign(lSource.UserData); - end; -end; - -function UserInfo.GetPrivileges: StringArray; -begin - if (fPrivileges = nil) then fPrivileges := StringArray.Create(); - result := fPrivileges; -end; - -function UserInfo.GetAttributes: VariantArray; -begin - if (fAttributes = nil) then fAttributes := VariantArray.Create(); - result := fAttributes; -end; - -function UserInfo.GetUserData: Binary; -begin - if (fUserData = nil) then fUserData := Binary.Create(); - result := fUserData; -end; - -procedure UserInfo.ReadComplex(ASerializer: TObject); -var - l_Attributes: VariantArray; - l_Privileges: StringArray; - l_SessionID: Utf8String; - l_UserData: Binary; - l_UserID: Utf8String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_SessionID := SessionID; - TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - l_UserID := UserID; - TROSerializer(ASerializer).ReadUTF8String('UserID', l_UserID); - UserID := l_UserID; - l_Privileges := Privileges; - TROSerializer(ASerializer).ReadArray('Privileges', StringArray, l_Privileges); - if Privileges <> l_Privileges then Privileges.Free; - Privileges := l_Privileges; - l_Attributes := Attributes; - TROSerializer(ASerializer).ReadArray('Attributes', VariantArray, l_Attributes); - if Attributes <> l_Attributes then Attributes.Free; - Attributes := l_Attributes; - l_UserData := UserData; - TROSerializer(ASerializer).ReadBinary('UserData', l_UserData); - if UserData <> l_UserData then UserData.Free; - UserData := l_UserData; - end else begin - l_Attributes := Attributes; - TROSerializer(ASerializer).ReadArray('Attributes', VariantArray, l_Attributes); - if Attributes <> l_Attributes then Attributes.Free; - Attributes := l_Attributes; - l_Privileges := Privileges; - TROSerializer(ASerializer).ReadArray('Privileges', StringArray, l_Privileges); - if Privileges <> l_Privileges then Privileges.Free; - Privileges := l_Privileges; - l_SessionID := SessionID; - TROSerializer(ASerializer).ReadUTF8String('SessionID', l_SessionID); - SessionID := l_SessionID; - l_UserData := UserData; - TROSerializer(ASerializer).ReadBinary('UserData', l_UserData); - if UserData <> l_UserData then UserData.Free; - UserData := l_UserData; - l_UserID := UserID; - TROSerializer(ASerializer).ReadUTF8String('UserID', l_UserID); - UserID := l_UserID; - end; -end; - -procedure UserInfo.WriteComplex(ASerializer: TObject); -var - l_Attributes: VariantArray; - l_Privileges: StringArray; - l_SessionID: Utf8String; - l_UserData: Binary; - l_UserID: Utf8String; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_SessionID := SessionID; - TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID); - l_UserID := UserID; - TROSerializer(ASerializer).WriteUTF8String('UserID', l_UserID); - l_Privileges := Privileges; - TROSerializer(ASerializer).WriteArray('Privileges', l_Privileges); - l_Attributes := Attributes; - TROSerializer(ASerializer).WriteArray('Attributes', l_Attributes); - l_UserData := UserData; - TROSerializer(ASerializer).WriteBinary('UserData', l_UserData); - end else begin - l_Attributes := Attributes; - TROSerializer(ASerializer).WriteArray('Attributes', l_Attributes); - l_Privileges := Privileges; - TROSerializer(ASerializer).WriteArray('Privileges', l_Privileges); - l_SessionID := SessionID; - TROSerializer(ASerializer).WriteUTF8String('SessionID', l_SessionID); - l_UserData := UserData; - TROSerializer(ASerializer).WriteBinary('UserData', l_UserData); - l_UserID := UserID; - TROSerializer(ASerializer).WriteUTF8String('UserID', l_UserID); - end; -end; - -{ UserInfoCollection } -constructor UserInfoCollection.Create; -begin - inherited Create(UserInfo); -end; - -constructor UserInfoCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function UserInfoCollection.Add: UserInfo; -begin - result := UserInfo(inherited Add); -end; - -function UserInfoCollection.GetItems(aIndex: integer): UserInfo; -begin - result := UserInfo(inherited Items[aIndex]); -end; - -procedure UserInfoCollection.SetItems(aIndex: integer; const Value: UserInfo); -begin - UserInfo(inherited Items[aIndex]).Assign(Value); -end; - -{ TableRequestInfoV5 } - -procedure TableRequestInfoV5.Assign(iSource: TPersistent); -var lSource: DataAbstract4_Intf.TableRequestInfoV5; -begin - inherited Assign(iSource); - if (iSource is DataAbstract4_Intf.TableRequestInfoV5) then begin - lSource := DataAbstract4_Intf.TableRequestInfoV5(iSource); - WhereClause := lSource.WhereClause; - DynamicSelectFieldNames.Assign(lSource.DynamicSelectFieldNames); - Sorting.Assign(lSource.Sorting); - end; -end; - -function TableRequestInfoV5.GetDynamicSelectFieldNames: StringArray; -begin - if (fDynamicSelectFieldNames = nil) then fDynamicSelectFieldNames := StringArray.Create(); - result := fDynamicSelectFieldNames; -end; - -function TableRequestInfoV5.GetSorting: ColumnSorting; -begin - if (fSorting = nil) then fSorting := ColumnSorting.Create(); - result := fSorting; -end; - -procedure TableRequestInfoV5.ReadComplex(ASerializer: TObject); -var - l_DynamicSelectFieldNames: StringArray; - l_IncludeSchema: Boolean; - l_MaxRecords: Integer; - l_Parameters: DataParameterArray; - l_Sorting: ColumnSorting; - l_UserFilter: Utf8String; - l_WhereClause: IXmlNode; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - inherited; - l_WhereClause := WhereClause; - TROSerializer(ASerializer).ReadXML('WhereClause', l_WhereClause); - WhereClause := l_WhereClause; - l_DynamicSelectFieldNames := DynamicSelectFieldNames; - TROSerializer(ASerializer).ReadArray('DynamicSelectFieldNames', StringArray, l_DynamicSelectFieldNames); - if DynamicSelectFieldNames <> l_DynamicSelectFieldNames then DynamicSelectFieldNames.Free; - DynamicSelectFieldNames := l_DynamicSelectFieldNames; - l_Sorting := Sorting; - TROSerializer(ASerializer).ReadStruct('Sorting', ColumnSorting, l_Sorting); - if Sorting <> l_Sorting then Sorting.Free; - Sorting := l_Sorting; - end else begin - l_DynamicSelectFieldNames := DynamicSelectFieldNames; - TROSerializer(ASerializer).ReadArray('DynamicSelectFieldNames', StringArray, l_DynamicSelectFieldNames); - if DynamicSelectFieldNames <> l_DynamicSelectFieldNames then DynamicSelectFieldNames.Free; - DynamicSelectFieldNames := l_DynamicSelectFieldNames; - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).ReadEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - IncludeSchema := l_IncludeSchema; - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).ReadInteger('MaxRecords', otSLong, l_MaxRecords); - MaxRecords := l_MaxRecords; - l_Parameters := Parameters; - TROSerializer(ASerializer).ReadArray('Parameters', DataParameterArray, l_Parameters); - if Parameters <> l_Parameters then Parameters.Free; - Parameters := l_Parameters; - l_Sorting := Sorting; - TROSerializer(ASerializer).ReadStruct('Sorting', ColumnSorting, l_Sorting); - if Sorting <> l_Sorting then Sorting.Free; - Sorting := l_Sorting; - l_UserFilter := UserFilter; - TROSerializer(ASerializer).ReadUTF8String('UserFilter', l_UserFilter); - UserFilter := l_UserFilter; - l_WhereClause := WhereClause; - TROSerializer(ASerializer).ReadXML('WhereClause', l_WhereClause); - WhereClause := l_WhereClause; - end; -end; - -procedure TableRequestInfoV5.WriteComplex(ASerializer: TObject); -var - l_DynamicSelectFieldNames: StringArray; - l_IncludeSchema: Boolean; - l_MaxRecords: Integer; - l_Parameters: DataParameterArray; - l_Sorting: ColumnSorting; - l_UserFilter: Utf8String; - l_WhereClause: IXmlNode; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - inherited; - l_WhereClause := WhereClause; - TROSerializer(ASerializer).WriteXML('WhereClause', l_WhereClause); - l_DynamicSelectFieldNames := DynamicSelectFieldNames; - TROSerializer(ASerializer).WriteArray('DynamicSelectFieldNames', l_DynamicSelectFieldNames); - l_Sorting := Sorting; - TROSerializer(ASerializer).WriteStruct('Sorting', l_Sorting); - end else begin - l_DynamicSelectFieldNames := DynamicSelectFieldNames; - TROSerializer(ASerializer).WriteArray('DynamicSelectFieldNames', l_DynamicSelectFieldNames); - l_IncludeSchema := IncludeSchema; - TROSerializer(ASerializer).WriteEnumerated('IncludeSchema',TypeInfo(boolean), l_IncludeSchema); - l_MaxRecords := MaxRecords; - TROSerializer(ASerializer).WriteInteger('MaxRecords', otSLong, l_MaxRecords); - l_Parameters := Parameters; - TROSerializer(ASerializer).WriteArray('Parameters', l_Parameters); - l_Sorting := Sorting; - TROSerializer(ASerializer).WriteStruct('Sorting', l_Sorting); - l_UserFilter := UserFilter; - TROSerializer(ASerializer).WriteUTF8String('UserFilter', l_UserFilter); - l_WhereClause := WhereClause; - TROSerializer(ASerializer).WriteXML('WhereClause', l_WhereClause); - end; -end; - -{ TableRequestInfoV5Collection } -constructor TableRequestInfoV5Collection.Create; -begin - inherited Create(TableRequestInfoV5); -end; - -constructor TableRequestInfoV5Collection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TableRequestInfoV5Collection.Add: TableRequestInfoV5; -begin - result := TableRequestInfoV5(inherited Add); -end; - -function TableRequestInfoV5Collection.GetItems(aIndex: integer): TableRequestInfoV5; -begin - result := TableRequestInfoV5(inherited Items[aIndex]); -end; - -procedure TableRequestInfoV5Collection.SetItems(aIndex: integer; const Value: TableRequestInfoV5); -begin - TableRequestInfoV5(inherited Items[aIndex]).Assign(Value); -end; - -{ ColumnSorting } - -procedure ColumnSorting.Assign(iSource: TPersistent); -var lSource: DataAbstract4_Intf.ColumnSorting; -begin - inherited Assign(iSource); - if (iSource is DataAbstract4_Intf.ColumnSorting) then begin - lSource := DataAbstract4_Intf.ColumnSorting(iSource); - FieldName := lSource.FieldName; - SortDirection := lSource.SortDirection; - end; -end; - -procedure ColumnSorting.ReadComplex(ASerializer: TObject); -var - l_FieldName: Utf8String; - l_SortDirection: ColumnSortDirection; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_FieldName := FieldName; - TROSerializer(ASerializer).ReadUTF8String('FieldName', l_FieldName); - FieldName := l_FieldName; - l_SortDirection := SortDirection; - TROSerializer(ASerializer).ReadEnumerated('SortDirection',TypeInfo(ColumnSortDirection), l_SortDirection); - SortDirection := l_SortDirection; - end else begin - l_FieldName := FieldName; - TROSerializer(ASerializer).ReadUTF8String('FieldName', l_FieldName); - FieldName := l_FieldName; - l_SortDirection := SortDirection; - TROSerializer(ASerializer).ReadEnumerated('SortDirection',TypeInfo(ColumnSortDirection), l_SortDirection); - SortDirection := l_SortDirection; - end; -end; - -procedure ColumnSorting.WriteComplex(ASerializer: TObject); -var - l_FieldName: Utf8String; - l_SortDirection: ColumnSortDirection; -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - l_FieldName := FieldName; - TROSerializer(ASerializer).WriteUTF8String('FieldName', l_FieldName); - l_SortDirection := SortDirection; - TROSerializer(ASerializer).WriteEnumerated('SortDirection',TypeInfo(ColumnSortDirection), l_SortDirection); - end else begin - l_FieldName := FieldName; - TROSerializer(ASerializer).WriteUTF8String('FieldName', l_FieldName); - l_SortDirection := SortDirection; - TROSerializer(ASerializer).WriteEnumerated('SortDirection',TypeInfo(ColumnSortDirection), l_SortDirection); - end; -end; - -{ ColumnSortingCollection } -constructor ColumnSortingCollection.Create; -begin - inherited Create(ColumnSorting); -end; - -constructor ColumnSortingCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function ColumnSortingCollection.Add: ColumnSorting; -begin - result := ColumnSorting(inherited Add); -end; - -function ColumnSortingCollection.GetItems(aIndex: integer): ColumnSorting; -begin - result := ColumnSorting(inherited Items[aIndex]); -end; - -procedure ColumnSortingCollection.LoadFromArray(anArray: ColumnSortingArray); -var i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure ColumnSortingCollection.SaveToArray(anArray: ColumnSortingArray); -var i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := ColumnSorting.Create; - anArray[i].Assign(Items[i]); - end; -end; - -procedure ColumnSortingCollection.SetItems(aIndex: integer; const Value: ColumnSorting); -begin - ColumnSorting(inherited Items[aIndex]).Assign(Value); -end; - -{ CoDataAbstractService } - -class function CoDataAbstractService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IDataAbstractService; -begin - result := TDataAbstractService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TDataAbstractService_Proxy } - -function TDataAbstractService_Proxy.__GetInterfaceName:string; -begin - result := 'DataAbstractService'; -end; - -function TDataAbstractService_Proxy.GetSchema(const aFilter: Utf8String): Utf8String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetSchema'); - __Message.Write('aFilter', TypeInfo(Utf8String), aFilter, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Utf8String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetData'); - __Message.Write('aTableNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aTableNameArray, []); - __Message.Write('aTableRequestInfoArray', TypeInfo(DataAbstract4_Intf.TableRequestInfoArray), aTableRequestInfoArray, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.UpdateData(const aDelta: Binary): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'UpdateData'); - __Message.Write('aDelta', TypeInfo(Binary), aDelta, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'ExecuteCommand'); - __Message.Write('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Write('aParameterArray', TypeInfo(DataAbstract4_Intf.DataParameterArray), aParameterArray, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray; out aOutputParameters: DataParameterArray): Integer; -begin - try - aOutputParameters := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'ExecuteCommandEx'); - __Message.Write('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Write('aInputParameters', TypeInfo(DataAbstract4_Intf.DataParameterArray), aInputParameters, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - __Message.Read('aOutputParameters', TypeInfo(DataAbstract4_Intf.DataParameterArray), aOutputParameters, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.GetTableSchema(const aTableNameArray: StringArray): Utf8String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetTableSchema'); - __Message.Write('aTableNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aTableNameArray, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Utf8String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetCommandSchema'); - __Message.Write('aCommandNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aCommandNameArray, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Utf8String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'SQLGetData'); - __Message.Write('aSQLText', TypeInfo(Utf8String), aSQLText, []); - __Message.Write('aIncludeSchema', TypeInfo(Boolean), aIncludeSchema, []); - __Message.Write('aMaxRecords', TypeInfo(Integer), aMaxRecords, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Binary), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.SQLExecuteCommand(const aSQLText: Utf8String): Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'SQLExecuteCommand'); - __Message.Write('aSQLText', TypeInfo(Utf8String), aSQLText, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TDataAbstractService_Proxy.GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetDatasetScripts'); - __Message.Write('DatasetNames', TypeInfo(Utf8String), DatasetNames, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Utf8String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -procedure TDataAbstractService_Proxy.RegisterForDataChangeNotification(const aTableName: Utf8String); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'RegisterForDataChangeNotification'); - __Message.Write('aTableName', TypeInfo(Utf8String), aTableName, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -procedure TDataAbstractService_Proxy.UnregisterForDataChangeNotification(const aTableName: Utf8String); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'UnregisterForDataChangeNotification'); - __Message.Write('aTableName', TypeInfo(Utf8String), aTableName, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -{ CoSimpleLoginService } - -class function CoSimpleLoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISimpleLoginService; -begin - result := TSimpleLoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TSimpleLoginService_Proxy } - -function TSimpleLoginService_Proxy.__GetInterfaceName:string; -begin - result := 'SimpleLoginService'; -end; - -function TSimpleLoginService_Proxy.Login(const aUserID: Utf8String; const aPassword: Utf8String; out aUserInfo: UserInfo): Boolean; -begin - try - aUserInfo := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Login'); - __Message.Write('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Write('aPassword', TypeInfo(Utf8String), aPassword, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - __Message.Read('aUserInfo', TypeInfo(DataAbstract4_Intf.UserInfo), aUserInfo, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -{ CoBaseLoginService } - -class function CoBaseLoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IBaseLoginService; -begin - result := TBaseLoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TBaseLoginService_Proxy } - -function TBaseLoginService_Proxy.__GetInterfaceName:string; -begin - result := 'BaseLoginService'; -end; - -procedure TBaseLoginService_Proxy.Logout; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Logout'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -{ CoMultiDbLoginService } - -class function CoMultiDbLoginService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginService; -begin - result := TMultiDbLoginService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TMultiDbLoginService_Proxy } - -function TMultiDbLoginService_Proxy.__GetInterfaceName:string; -begin - result := 'MultiDbLoginService'; -end; - -function TMultiDbLoginService_Proxy.Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String; out aUserInfo: UserInfo): Boolean; -begin - try - aUserInfo := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'Login'); - __Message.Write('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Write('aPassword', TypeInfo(Utf8String), aPassword, []); - __Message.Write('aConnectionName', TypeInfo(Utf8String), aConnectionName, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - __Message.Read('aUserInfo', TypeInfo(DataAbstract4_Intf.UserInfo), aUserInfo, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -{ CoMultiDbLoginServiceV5 } - -class function CoMultiDbLoginServiceV5.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IMultiDbLoginServiceV5; -begin - result := TMultiDbLoginServiceV5_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TMultiDbLoginServiceV5_Proxy } - -function TMultiDbLoginServiceV5_Proxy.__GetInterfaceName:string; -begin - result := 'MultiDbLoginServiceV5'; -end; - -function TMultiDbLoginServiceV5_Proxy.GetConnectionNames: StringArray; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetConnectionNames'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(DataAbstract4_Intf.StringArray), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -function TMultiDbLoginServiceV5_Proxy.GetDefaultConnectionName: Utf8String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'DataAbstract4', __InterfaceName, 'GetDefaultConnectionName'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Utf8String), result, []); - finally - __Message.UnsetAttributes(__TransportChannel); - __Message.FreeStream; - end -end; - -type - { TDataChangeNotification_Writer } - TDataChangeNotification_Writer = class(TROEventWriter, IDataChangeNotification_Writer) - protected - procedure OnDataTableChanged(const __Sender : TGUID; const aTableName: Utf8String; const aDelta: Binary); - end; - -procedure TDataChangeNotification_Writer.OnDataTableChanged(const __Sender : TGUID; const aTableName: Utf8String; const aDelta: Binary); -var __eventdata : Binary; -begin - __eventdata := Binary.Create; - try - __Message.InitializeEventMessage(NIL, 'DataAbstract4', EID_DataChangeNotification, 'OnDataTableChanged'); - __Message.Write('aTableName', TypeInfo(Utf8String), aTableName, []); - __Message.Write('aDelta', TypeInfo(Binary), aDelta, []); - __Message.Finalize; - - __Message.WriteToStream(__eventdata); - - Repository.StoreEventData(__Sender, __eventdata, ExcludeSender, ExcludeSessionList, SessionList.CommaText); - finally - __eventdata.Free; - end; -end; - -type - {$M+} - { TDataChangeNotification_Invoker } - TDataChangeNotification_Invoker = class(TROEventInvoker) - published - procedure Invoke_OnDataTableChanged(__EventReceiver : TROEventReceiver; const __Message : IROMessage; const __Target : IUnknown); - end; - {$M-} - -procedure TDataChangeNotification_Invoker.Invoke_OnDataTableChanged(__EventReceiver : TROEventReceiver; const __Message : IROMessage; const __Target : IUnknown); -var -__lObjectDisposer: TROObjectDisposer; - aTableName: Utf8String; - aDelta: Binary; -begin - aDelta := NIL; - - try - __Message.Read('aTableName', TypeInfo(Utf8String), aTableName, []); - __Message.Read('aDelta', TypeInfo(Binary), aDelta, []); - - (__Target as IDataChangeNotification).OnDataTableChanged(aTableName, aDelta); - - finally - __lObjectDisposer:= TROObjectDisposer.Create(__EventReceiver); - try - __lObjectDisposer.Add(aDelta); - finally - __lObjectDisposer.Free(); - end - end -end; - -initialization - RegisterROClass(DataParameter); - RegisterROClass(TableRequestInfo); - RegisterROClass(UserInfo); - RegisterROClass(TableRequestInfoV5); - RegisterROClass(ColumnSorting); - RegisterROClass(DataParameterArray); - RegisterROClass(TableRequestInfoArray); - RegisterROClass(StringArray); - RegisterROClass(VariantArray); - RegisterROClass(ColumnSortingArray); - RegisterProxyClass(IDataAbstractService_IID, TDataAbstractService_Proxy); - RegisterProxyClass(ISimpleLoginService_IID, TSimpleLoginService_Proxy); - RegisterProxyClass(IBaseLoginService_IID, TBaseLoginService_Proxy); - RegisterProxyClass(IMultiDbLoginService_IID, TMultiDbLoginService_Proxy); - RegisterProxyClass(IMultiDbLoginServiceV5_IID, TMultiDbLoginServiceV5_Proxy); - - RegisterEventWriterClass(IDataChangeNotification_Writer, TDataChangeNotification_Writer); - RegisterEventInvokerClass(EID_DataChangeNotification, TDataChangeNotification_Invoker); - -finalization - UnregisterROClass(DataParameter); - UnregisterROClass(TableRequestInfo); - UnregisterROClass(UserInfo); - UnregisterROClass(TableRequestInfoV5); - UnregisterROClass(ColumnSorting); - UnregisterROClass(DataParameterArray); - UnregisterROClass(TableRequestInfoArray); - UnregisterROClass(StringArray); - UnregisterROClass(VariantArray); - UnregisterROClass(ColumnSortingArray); - UnregisterProxyClass(IDataAbstractService_IID); - UnregisterProxyClass(ISimpleLoginService_IID); - UnregisterProxyClass(IBaseLoginService_IID); - UnregisterProxyClass(IMultiDbLoginService_IID); - UnregisterProxyClass(IMultiDbLoginServiceV5_IID); - - UnregisterEventWriterClass(IDataChangeNotification_Writer); - UnregisterEventInvokerClass(EID_DataChangeNotification); -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Invk.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Invk.pas deleted file mode 100644 index c50a52c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract4_Invk.pas +++ /dev/null @@ -1,532 +0,0 @@ -unit DataAbstract4_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Generated:} DataAbstract4_Intf; - -type - {$M+} - TDataAbstractService_Invoker = class(TROInvoker) - private - protected - published - procedure Invoke_GetSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_ExecuteCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_ExecuteCommandEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetTableSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetCommandSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_SQLGetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_SQLExecuteCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_RegisterForDataChangeNotification(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UnregisterForDataChangeNotification(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - {$M+} - TBaseLoginService_Invoker = class(TROInvoker) - private - protected - published - procedure Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - {$M+} - TMultiDbLoginService_Invoker = class(TBaseLoginService_Invoker) - private - protected - published - procedure Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - {$M+} - TMultiDbLoginServiceV5_Invoker = class(TMultiDbLoginService_Invoker) - private - protected - published - procedure Invoke_GetConnectionNames(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetDefaultConnectionName(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - {$M+} - TSimpleLoginService_Invoker = class(TBaseLoginService_Invoker) - private - protected - published - procedure Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TDataAbstractService_Invoker } - -procedure TDataAbstractService_Invoker.Invoke_GetSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetSchema(const aFilter: Utf8String): Utf8String; } -var - aFilter: Utf8String; - lResult: Utf8String; -begin - try - __Message.Read('aFilter', TypeInfo(Utf8String), aFilter, []); - - lResult := (__Instance as IDataAbstractService).GetSchema(aFilter); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'GetSchemaResponse'); - __Message.Write('Result', TypeInfo(Utf8String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_GetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; } -var - aTableNameArray: DataAbstract4_Intf.StringArray; - aTableRequestInfoArray: DataAbstract4_Intf.TableRequestInfoArray; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - aTableNameArray := nil; - aTableRequestInfoArray := nil; - lResult := nil; - try - __Message.Read('aTableNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aTableNameArray, []); - __Message.Read('aTableRequestInfoArray', TypeInfo(DataAbstract4_Intf.TableRequestInfoArray), aTableRequestInfoArray, []); - - lResult := (__Instance as IDataAbstractService).GetData(aTableNameArray, aTableRequestInfoArray); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'GetDataResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aTableNameArray); - __lObjectDisposer.Add(aTableRequestInfoArray); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_UpdateData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function UpdateData(const aDelta: Binary): Binary; } -var - aDelta: Binary; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - aDelta := nil; - lResult := nil; - try - __Message.Read('aDelta', TypeInfo(Binary), aDelta, []); - - lResult := (__Instance as IDataAbstractService).UpdateData(aDelta); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'UpdateDataResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aDelta); - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_ExecuteCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; } -var - aCommandName: Utf8String; - aParameterArray: DataAbstract4_Intf.DataParameterArray; - lResult: Integer; - __lObjectDisposer: TROObjectDisposer; -begin - aParameterArray := nil; - try - __Message.Read('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Read('aParameterArray', TypeInfo(DataAbstract4_Intf.DataParameterArray), aParameterArray, []); - - lResult := (__Instance as IDataAbstractService).ExecuteCommand(aCommandName, aParameterArray); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'ExecuteCommandResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aParameterArray); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_ExecuteCommandEx(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function ExecuteCommandEx(const aCommandName: Utf8String; const aInputParameters: DataParameterArray; out aOutputParameters: DataParameterArray): Integer; } -var - aCommandName: Utf8String; - aInputParameters: DataAbstract4_Intf.DataParameterArray; - aOutputParameters: DataAbstract4_Intf.DataParameterArray; - lResult: Integer; - __lObjectDisposer: TROObjectDisposer; -begin - aInputParameters := nil; - aOutputParameters := nil; - try - __Message.Read('aCommandName', TypeInfo(Utf8String), aCommandName, []); - __Message.Read('aInputParameters', TypeInfo(DataAbstract4_Intf.DataParameterArray), aInputParameters, []); - - lResult := (__Instance as IDataAbstractService).ExecuteCommandEx(aCommandName, aInputParameters, aOutputParameters); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'ExecuteCommandExResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Write('aOutputParameters', TypeInfo(DataAbstract4_Intf.DataParameterArray), aOutputParameters, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aInputParameters); - __lObjectDisposer.Add(aOutputParameters); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_GetTableSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetTableSchema(const aTableNameArray: StringArray): Utf8String; } -var - aTableNameArray: DataAbstract4_Intf.StringArray; - lResult: Utf8String; - __lObjectDisposer: TROObjectDisposer; -begin - aTableNameArray := nil; - try - __Message.Read('aTableNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aTableNameArray, []); - - lResult := (__Instance as IDataAbstractService).GetTableSchema(aTableNameArray); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'GetTableSchemaResponse'); - __Message.Write('Result', TypeInfo(Utf8String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aTableNameArray); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_GetCommandSchema(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; } -var - aCommandNameArray: DataAbstract4_Intf.StringArray; - lResult: Utf8String; - __lObjectDisposer: TROObjectDisposer; -begin - aCommandNameArray := nil; - try - __Message.Read('aCommandNameArray', TypeInfo(DataAbstract4_Intf.StringArray), aCommandNameArray, []); - - lResult := (__Instance as IDataAbstractService).GetCommandSchema(aCommandNameArray); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'GetCommandSchemaResponse'); - __Message.Write('Result', TypeInfo(Utf8String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aCommandNameArray); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_SQLGetData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; } -var - aSQLText: Utf8String; - aIncludeSchema: Boolean; - aMaxRecords: Integer; - lResult: Binary; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - __Message.Read('aSQLText', TypeInfo(Utf8String), aSQLText, []); - __Message.Read('aIncludeSchema', TypeInfo(Boolean), aIncludeSchema, []); - __Message.Read('aMaxRecords', TypeInfo(Integer), aMaxRecords, []); - - lResult := (__Instance as IDataAbstractService).SQLGetData(aSQLText, aIncludeSchema, aMaxRecords); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'SQLGetDataResponse'); - __Message.Write('Result', TypeInfo(Binary), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_SQLExecuteCommand(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function SQLExecuteCommand(const aSQLText: Utf8String): Integer; } -var - aSQLText: Utf8String; - lResult: Integer; -begin - try - __Message.Read('aSQLText', TypeInfo(Utf8String), aSQLText, []); - - lResult := (__Instance as IDataAbstractService).SQLExecuteCommand(aSQLText); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'SQLExecuteCommandResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_GetDatasetScripts(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; } -var - DatasetNames: Utf8String; - lResult: Utf8String; -begin - try - __Message.Read('DatasetNames', TypeInfo(Utf8String), DatasetNames, []); - - lResult := (__Instance as IDataAbstractService).GetDatasetScripts(DatasetNames); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'GetDatasetScriptsResponse'); - __Message.Write('Result', TypeInfo(Utf8String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_RegisterForDataChangeNotification(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure RegisterForDataChangeNotification(const aTableName: Utf8String); } -var - aTableName: Utf8String; -begin - try - __Message.Read('aTableName', TypeInfo(Utf8String), aTableName, []); - - (__Instance as IDataAbstractService).RegisterForDataChangeNotification(aTableName); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'RegisterForDataChangeNotificationResponse'); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -procedure TDataAbstractService_Invoker.Invoke_UnregisterForDataChangeNotification(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure UnregisterForDataChangeNotification(const aTableName: Utf8String); } -var - aTableName: Utf8String; -begin - try - __Message.Read('aTableName', TypeInfo(Utf8String), aTableName, []); - - (__Instance as IDataAbstractService).UnregisterForDataChangeNotification(aTableName); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'DataAbstractService', 'UnregisterForDataChangeNotificationResponse'); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -{ TSimpleLoginService_Invoker } - -procedure TSimpleLoginService_Invoker.Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function Login(const aUserID: Utf8String; const aPassword: Utf8String; out aUserInfo: UserInfo): Boolean; } -var - aUserID: Utf8String; - aPassword: Utf8String; - aUserInfo: DataAbstract4_Intf.UserInfo; - lResult: Boolean; - __lObjectDisposer: TROObjectDisposer; -begin - aUserInfo := nil; - try - __Message.Read('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Read('aPassword', TypeInfo(Utf8String), aPassword, []); - - lResult := (__Instance as ISimpleLoginService).Login(aUserID, aPassword, aUserInfo); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'SimpleLoginService', 'LoginResponse'); - __Message.Write('Result', TypeInfo(Boolean), lResult, []); - __Message.Write('aUserInfo', TypeInfo(DataAbstract4_Intf.UserInfo), aUserInfo, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aUserInfo); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -{ TBaseLoginService_Invoker } - -procedure TBaseLoginService_Invoker.Invoke_Logout(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure Logout; } -begin - try - (__Instance as IBaseLoginService).Logout; - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'BaseLoginService', 'LogoutResponse'); - __Message.Finalize; - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -{ TMultiDbLoginService_Invoker } - -procedure TMultiDbLoginService_Invoker.Invoke_Login(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function Login(const aUserID: Utf8String; const aPassword: Utf8String; const aConnectionName: Utf8String; out aUserInfo: UserInfo): Boolean; } -var - aUserID: Utf8String; - aPassword: Utf8String; - aConnectionName: Utf8String; - aUserInfo: DataAbstract4_Intf.UserInfo; - lResult: Boolean; - __lObjectDisposer: TROObjectDisposer; -begin - aUserInfo := nil; - try - __Message.Read('aUserID', TypeInfo(Utf8String), aUserID, []); - __Message.Read('aPassword', TypeInfo(Utf8String), aPassword, []); - __Message.Read('aConnectionName', TypeInfo(Utf8String), aConnectionName, []); - - lResult := (__Instance as IMultiDbLoginService).Login(aUserID, aPassword, aConnectionName, aUserInfo); - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'MultiDbLoginService', 'LoginResponse'); - __Message.Write('Result', TypeInfo(Boolean), lResult, []); - __Message.Write('aUserInfo', TypeInfo(DataAbstract4_Intf.UserInfo), aUserInfo, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(aUserInfo); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -{ TMultiDbLoginServiceV5_Invoker } - -procedure TMultiDbLoginServiceV5_Invoker.Invoke_GetConnectionNames(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetConnectionNames: StringArray; } -var - lResult: DataAbstract4_Intf.StringArray; - __lObjectDisposer: TROObjectDisposer; -begin - lResult := nil; - try - lResult := (__Instance as IMultiDbLoginServiceV5).GetConnectionNames; - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'MultiDbLoginServiceV5', 'GetConnectionNamesResponse'); - __Message.Write('Result', TypeInfo(DataAbstract4_Intf.StringArray), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(lResult); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -procedure TMultiDbLoginServiceV5_Invoker.Invoke_GetDefaultConnectionName(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetDefaultConnectionName: Utf8String; } -var - lResult: Utf8String; -begin - try - lResult := (__Instance as IMultiDbLoginServiceV5).GetDefaultConnectionName; - - __Message.InitializeResponseMessage(__Transport, 'DataAbstract4', 'MultiDbLoginServiceV5', 'GetDefaultConnectionNameResponse'); - __Message.Write('Result', TypeInfo(Utf8String), lResult, []); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - end; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.dfm deleted file mode 100644 index 65deb18..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.dfm +++ /dev/null @@ -1,5 +0,0 @@ -object DataAbstractService: TDataAbstractService - OldCreateOrder = True - Height = 437 - Width = 546 -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.pas deleted file mode 100644 index 48ccf7e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstractService_Impl.pas +++ /dev/null @@ -1,1350 +0,0 @@ -unit DataAbstractService_Impl; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library } -{ } -{ compiler: Delphi 6 and up, Kylix 3 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{----------------------------------------------------------------------------} -{ When applying fixes to this unit, please see if the need to be propagates } -{ to the duplicate dlogic in legacy DARemoteService_Impl.pas, too. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -uses - {vcl:} Classes, SysUtils, DB, - {Generated:} DataAbstract4_Intf, - uROClientIntf, uROTypes, uROServer, uROSessions, uRORemoteDataModule, uROClasses, - uDAInterfaces, uDAClasses, uDADataTable, uDADataStreamer, uDABusinessProcessor, - uDADataTableReferenceCollection, uDADelta; - -type - { Events } - TDAAcquireConnectionEvent = procedure(aSender: TObject; var aConnectionName: string) of object; - TDAConnectionAcquiredEvent = procedure(aSender: TObject; const aConnectionName: string; const aAcquiredConnection: IDAConnection) of object; - TDAAcquireConnectionFailureEvent = procedure(aSender: TObject; const aConnectionName: string; aError: Exception) of object; - TDAGetDatasetSchemaEvent = procedure(aSender: TObject; const aDataset: IDADataset) of object; - TDAGetDatasetDataEvent = procedure(aSender: TObject; const aDataset: IDADataset; const aIncludeSchema: Boolean; const aMaxRecords: Integer) of object; - TDABusinessProcessorAutoCreatedEvent = procedure(aSender: TRORemoteDataModule; BusinessProcessor : TDABusinessProcessor) of object; - TDABeforeExecuteCommandEvent = procedure(aSender: TObject; const aCommand: IDASQLCommand) of object; - TDAAfterExecuteCommandEvent = procedure(aSender: TObject; const aCommand: IDASQLCommand; aRowsAffacted : integer) of object; - TDAConnectionReleasedEvent = procedure(aSender: TObject; const aConnectionName: string) of object; - TDAGetSchemaAsXMLEvent = procedure(aSender: TObject; var aSchemaXML: Utf8string) of object; - TDAProcessDeltasEvent = procedure(aSender: TObject; aDeltaStructs: TDADeltaStructList) of object; - TDAProcessDeltasErrorEvent = procedure(aSender: TObject; aDeltaStructs: TDADeltaStructList; aError: Exception; var aDoRaise: boolean) of object; - TDASchemaElementAccessValidationEvent = procedure(Sender: TObject; const aConnection: IDAConnection; const aDatasetName: string; - const aParamNames: array of string; const aParamValues : array of variant; - aSchema: TDASchema; var Allowed : boolean) of object; - TDASQLValidationEvent = procedure(Sender: TObject; const aConnection: IDAConnection; const aSQLText: string; - const aParamNames: array of string; const aParamValues : array of variant; - var Allowed : boolean) of object; - TDAUpdateDataTransactionEvent = procedure(Sender: TObject; var aUseDefaultTransactionLogic: Boolean) of object; - - TDADeltasMode = (dumExported, dumStandard); - TDADeltasModes = set of TDADeltasMode; - { TDataAbstractService } - TDataAbstractService = class(TRORemoteDataModule, IDataAbstractService) - private - { Properties } - fAllowExecuteCommands: boolean; - fAllowExecuteSQL: boolean; - fAllowDataAccess: boolean; - fAllowSchemaAccess: boolean; - fAllowWhereSQL: boolean; - fConnectionName: string; - fAcquireConnection: boolean; - fServiceSchema: TDASchema; - fAutoCreateBusinessProcessors: boolean; - fServiceDataStreamer: TDADataStreamer; - fProcessDeltasWithoutUpdateRules: boolean; - - fConnection: IDAConnection; - fHETConnection: IDAHETConnection; - fExportedDataTables: TDADataTableReferenceCollection; - - { Events } - fBeforeGetDatasetSchema: TDAGetDatasetSchemaEvent; - fBeforeProcessDeltas: TDAProcessDeltasEvent; - fOnAcquireConnectionFailure: TDAAcquireConnectionFailureEvent; - fOnUpdateDataCommitTransaction: TDAUpdateDataTransactionEvent; - fGetDatasetDataValidation: TDASchemaElementAccessValidationEvent; - fExecuteCommandValidation: TDASchemaElementAccessValidationEvent; - fSQLValidation: TDASQLValidationEvent; - fAfterExecuteCommand: TDAAfterExecuteCommandEvent; - fBeforeAcquireConnection: TDAAcquireConnectionEvent; - fOnUpdateDataRollBackTransaction: TDAUpdateDataTransactionEvent; - fAfterGetDatasetData: TDAGetDatasetDataEvent; - fAfterReleaseConnection: TDAConnectionReleasedEvent; - fAfterGetDatasetSchema: TDAGetDatasetSchemaEvent; - fAfterProcessDeltas: TDAProcessDeltasEvent; - fOnGetSchemaAsXML: TDAGetSchemaAsXMLEvent; - fOnBusinessProcessorAutoCreated: TDABusinessProcessorAutoCreatedEvent; - fOnUpdateDataBeginTransaction: TDAUpdateDataTransactionEvent; - fAfterAcquireConnection: TDAConnectionAcquiredEvent; - fOnProcessDeltasError: TDAProcessDeltasErrorEvent; - fBeforeExecuteCommand: TDABeforeExecuteCommandEvent; - fBeforeGetDatasetData: TDAGetDatasetDataEvent; - fBeforeReleaseConnection: TDAConnectionAcquiredEvent; - fAllowDynamicSelect: boolean; - fAllowDynamicWhere: boolean; - fAllowUpdates: boolean; - fHasReducedDelta: Boolean; - - procedure SetServiceDataStreamer(const Value: TDADataStreamer); - procedure SetServiceSchema(const Value: TDASchema); - procedure SetExportedDataTables(const Value: TDADataTableReferenceCollection); - procedure Check(CheckOnlyDataStreamer:Boolean = false); - private - function GetConnection: IDAConnection; - function UnpackDeltas(const DeltaStream: Binary; DeltaStructList: TDADeltaStructList): TDADeltasModes; - function TriggerTransactionEvent(aEvent: TDAUpdateDataTransactionEvent): boolean; - procedure ExportedDataTables_MergeDelta(ADelta: IDADelta); - protected - { IDataAbstractService methods } - function GetSchema(const aFilter: Utf8String): Utf8String; - function GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; - function UpdateData(const aDelta: Binary): Binary; - function ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; - function GetTableSchema(const aTableNameArray: StringArray): Utf8String; - function GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; - function SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; - function SQLExecuteCommand(const aSQLText: Utf8String): Integer; - function ExecuteCommandEx(const aCommandName: Utf8String; - const aInputParameters: DataParameterArray; - out aOutputParameters: DataParameterArray): Integer; - function GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; - procedure RegisterForDataChangeNotification(const aTableName: Utf8String); - procedure UnregisterForDataChangeNotification(const aTableName: Utf8String); - - { TRORemoteDataModule } - procedure DoOnDeactivate(aClientID: TGUID); override; - - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - - function GetConnectionForObject(const aName: string): IDAConnection; virtual; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure SetConnection(aConnection: IDAConnection); deprecated; - {$WARN SYMBOL_DEPRECATED OFF} - property Connection: IDAConnection read GetConnection write SetConnection; - {$WARN SYMBOL_DEPRECATED ON} - - procedure ReleaseConnection; - published - property AcquireConnection: boolean read fAcquireConnection write fAcquireConnection default true; - property ConnectionName: string read fConnectionName write fConnectionName; - property AutoCreateBusinessProcessors : boolean read fAutoCreateBusinessProcessors write fAutoCreateBusinessProcessors default true; - property ServiceSchema: TDASchema read fServiceSchema write SetServiceSchema; - property ServiceDataStreamer: TDADataStreamer read fServiceDataStreamer write SetServiceDataStreamer; - - property AllowDataAccess: boolean read fAllowDataAccess write fAllowDataAccess default true; - property AllowSchemaAccess: boolean read fAllowSchemaAccess write fAllowSchemaAccess default true; - property AllowUpdates: boolean read fAllowUpdates write fAllowUpdates default true; - property AllowExecuteSQL: boolean read fAllowExecuteSQL write fAllowExecuteSQL default false; - property AllowWhereSQL: boolean read fAllowWhereSQL write fAllowWhereSQL default false; - property AllowExecuteCommands: boolean read fAllowExecuteCommands write fAllowExecuteCommands default false; - property AllowDynamicSelect: boolean read fAllowDynamicSelect write fAllowDynamicSelect default true; - property AllowDynamicWhere: boolean read fAllowDynamicWhere write fAllowDynamicWhere default true; - - property ProcessDeltasWithoutUpdateRules: boolean read fProcessDeltasWithoutUpdateRules write fProcessDeltasWithoutUpdateRules default true; - property ExportedDataTables: TDADataTableReferenceCollection read fExportedDataTables write SetExportedDataTables; - - { Events } - property BeforeAcquireConnection: TDAAcquireConnectionEvent read fBeforeAcquireConnection write fBeforeAcquireConnection; - property AfterAcquireConnection: TDAConnectionAcquiredEvent read fAfterAcquireConnection write fAfterAcquireConnection; - property BeforeReleaseConnection: TDAConnectionAcquiredEvent read fBeforeReleaseConnection write fBeforeReleaseConnection; - property AfterReleaseConnection: TDAConnectionReleasedEvent read fAfterReleaseConnection write fAfterReleaseConnection; - property OnAcquireConnectionFailure: TDAAcquireConnectionFailureEvent read fOnAcquireConnectionFailure write fOnAcquireConnectionFailure; - - property BeforeProcessDeltas : TDAProcessDeltasEvent read fBeforeProcessDeltas write fBeforeProcessDeltas; - property AfterProcessDeltas: TDAProcessDeltasEvent read fAfterProcessDeltas write fAfterProcessDeltas; - property OnProcessDeltasError: TDAProcessDeltasErrorEvent read fOnProcessDeltasError write fOnProcessDeltasError; - - property BeforeGetDatasetSchema: TDAGetDatasetSchemaEvent read fBeforeGetDatasetSchema write fBeforeGetDatasetSchema; - property BeforeGetDatasetData: TDAGetDatasetDataEvent read fBeforeGetDatasetData write fBeforeGetDatasetData; - property AfterGetDatasetSchema: TDAGetDatasetSchemaEvent read fAfterGetDatasetSchema write fAfterGetDatasetSchema; - property AfterGetDatasetData: TDAGetDatasetDataEvent read fAfterGetDatasetData write fAfterGetDatasetData; - property OnBusinessProcessorAutoCreated: TDABusinessProcessorAutoCreatedEvent read fOnBusinessProcessorAutoCreated write fOnBusinessProcessorAutoCreated; - property BeforeExecuteCommand: TDABeforeExecuteCommandEvent read fBeforeExecuteCommand write fBeforeExecuteCommand; - property AfterExecuteCommand: TDAAfterExecuteCommandEvent read fAfterExecuteCommand write fAfterExecuteCommand; - property OnGetSchemaAsXMLEvent: TDAGetSchemaAsXMLEvent read fOnGetSchemaAsXML write fOnGetSchemaAsXML; - property ValidateDatasetAccess: TDASchemaElementAccessValidationEvent read fGetDatasetDataValidation write fGetDatasetDataValidation; - property ValidateCommandExecution: TDASchemaElementAccessValidationEvent read fExecuteCommandValidation write fExecuteCommandValidation; - property ValidateDirectSQLAccess: TDASQLValidationEvent read fSQLValidation write fSQLValidation; - - property OnUpdateDataBeginTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataBeginTransaction write fOnUpdateDataBeginTransaction; - property OnUpdateDataCommitTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataCommitTransaction write fOnUpdateDataCommitTransaction; - property OnUpdateDataRollBackTransaction : TDAUpdateDataTransactionEvent read fOnUpdateDataRollBackTransaction write fOnUpdateDataRollBackTransaction; - end; - -implementation - -uses - Contnrs, Variants, - uDARes, uDAExceptions, uDAXMLUtils, uROXMLIntf, - TypInfo, uDAEngine, uDAWhere; - -{ DataAbstractService } - -constructor TDataAbstractService.Create(aOwner : TComponent); -begin - fAllowDataAccess := true; - fAllowSchemaAccess := true; - fAllowDynamicSelect := true; - fAllowDynamicWhere := true; - fAllowUpdates := true; - fAutoCreateBusinessProcessors := true; - fProcessDeltasWithoutUpdateRules := true; - fAcquireConnection := true; - fExportedDataTables := TDADataTableReferenceCollection.Create(Self); - inherited; -end; - -destructor TDataAbstractService.Destroy; -begin - inherited; - FreeAndNIL(fExportedDataTables); -end; - -procedure TDataAbstractService.Notification(AComponent: TComponent; Operation: TOperation); -var - lRef: TDADataTableReference; -begin - inherited; - - if (Operation = opRemove) then begin - - if ((AComponent is TDADataTable) or (AComponent is TDataSet)) and (fExportedDataTables.Count > 0) then begin - lRef := fExportedDataTables.FindByDataTable(TDADataTable(aComponent)); - if (lRef<>NIL) then lRef.DataTable := NIL; - end else if (AComponent = ServiceSchema) then - ServiceSchema := nil - else if (AComponent = ServiceDataStreamer) then - ServiceDataStreamer := nil; - end - -end; - -function TDataAbstractService.TriggerTransactionEvent(aEvent: TDAUpdateDataTransactionEvent): boolean; -begin - result := true; - if assigned(aEvent) then aEvent(self, result); -end; - -{ IDataAbstractService: Schema Access } - -function TDataAbstractService.GetSchema(const aFilter: Utf8String): Utf8String; -var - xml: TStringStream; - dummyrefs: TObjectList; - tempSchema: TDASchema; - - procedure MergeDatatablesToSchema(aList: TObjectList); - var i : integer; - ref : TDADataset; - dt : IDADataset; - begin - for i := 0 to fExportedDataTables.Count-1 do - if fExportedDataTables[i].IsValidReference then begin - dt := fExportedDataTables[i].Dataset; - - ref := tempSchema.Datasets.Add; - ref.Name := dt.LogicalName; - ref.Fields.AssignFieldCollection(dt.Fields); - ref.Params.AssignParamCollection(dt.Params); - - aList.Add(ref); - end; - end; - -begin - if not AllowSchemaAccess then - raise Exception.Create('Schema access has been disabled (GetSchema)'); - - tempSchema := ServiceSchema; - if not Assigned(tempSchema) and (fExportedDataTables.Count<>0) then - tempSchema := TDASchema.Create(nil); - - if not Assigned(tempSchema) then - raise Exception.Create('ServiceSchema property is not assigned and no data tables are exported.'); - - dummyrefs := nil; - try - // New: merges the data tables references by the service - if (fExportedDataTables.Count>0) then begin - dummyrefs := TObjectList.Create(true);; - MergeDatatablesToSchema(dummyrefs); - end; - - // Returns the schema - xml := TStringStream.Create(''); - try - tempSchema.SaveToStream(xml); - - result := AnsiToUtf8(xml.DataString); - - if Assigned(fOnGetSchemaAsXML) then fOnGetSchemaAsXML(Self, result); - finally - xml.Free; - end; - - finally - FreeAndNil(dummyrefs); // automatically removes the datatables from the schema again - if tempSchema <> ServiceSchema then tempSchema.Free; - end; -end; - -function TDataAbstractService.GetTableSchema(const aTableNameArray: StringArray): Utf8String; - - function CreateDatasetFromIDADataset(aRef: IDADataset): TDADataset; - begin - Result := TDADataset.Create(nil); - Result.Name := aRef.LogicalName; - Result.Fields.AssignFieldCollection(aRef.Fields); - Result.Params.AssignParamCollection(aRef.Params); - end; - -var - lxml: IXMLDocument; - i: integer; - lDataSet: TDADataset; - lDataTableRef: TDADataTableReference; - lNeedDeleteDataset: Boolean; - lTableName: string; -begin - if not AllowSchemaAccess then - raise Exception.Create('Schema access has been disabled (GetTableSchema)'); - - if not Assigned(ServiceSchema) and (fExportedDataTables.Count=0) then - raise Exception.Create('ServiceSchema property is not assigned and no data tables are exported.'); - - // Returns the schema - lxml := NewROXmlDocument; - lxml.New('DataTables'); - try - for i := 0 to aTableNameArray.Count - 1 do begin - lTableName := Utf8ToAnsi(aTableNameArray[i]); - lDataSet := nil; - if (fExportedDataTables.Count > 0) then begin - lDataTableRef := fExportedDataTables.FindByName(lTableName); - if lDataTableRef <> nil then lDataSet := CreateDatasetFromIDADataset(lDataTableRef.Dataset); - end; - lNeedDeleteDataset := lDataSet <> nil; - if not lNeedDeleteDataset and (ServiceSchema <> nil) then - lDataSet := ServiceSchema.Datasets.DatasetByName(lTableName); - try - if lDataSet <> nil then begin - // if Assigned(fBeforeGetDatasetSchema) then fBeforeGetDatasetSchema(Self, lDataset as IDADataset); - SaveObjectToXMLNode(lDataSet, lxml.DocumentNode.Add('SchemaDataTable'), [], [], False); - //if Assigned(FAfterGetDatasetSchema) then FAfterGetDatasetSchema(Self, lDataset as IDADataset); - if not (lDataSet.IsPublic) then - raise EDAException.Create(lDataset.Name +' is not accessible'); - end; - finally - if lNeedDeleteDataset then lDataSet.Free; - end; - end; - Result := UTF8Encode(lxml.DocumentNode.XML); - finally - lxml := nil; - end; -end; - -function TDataAbstractService.GetCommandSchema(const aCommandNameArray: StringArray): Utf8String; -var - lxml: IXMLDocument; - i: integer; - lSQLCommand: TDASQLCommand; -begin - if not AllowSchemaAccess then - raise Exception.Create('Schema access has been disabled (GetCommandSchema)'); - - if not Assigned(ServiceSchema) then - raise Exception.Create('ServiceSchema property is not assigned.'); - - // Returns the schema - lxml := NewROXmlDocument; - lxml.New('Commands'); - try - for i := 0 to aCommandNameArray.Count - 1 do begin - lSQLCommand:=ServiceSchema.Commands.SQLCommandByName(Utf8ToAnsi(aCommandNameArray[i])); - if lSQLCommand <> nil then begin - if not lSQLCommand.IsPublic then - raise EDAException.Create(lSqlCommand.Name +' is not accessible'); - SaveObjectToXMLNode(lSQLCommand, lxml.DocumentNode.Add('SchemaCommand'), [], [], False); - end; - end; - result := UTF8Encode(lxml.DocumentNode.XML); - finally - lxml := nil; - end; -end; - -{ IDataAbstractService: Data Access } - -function TDataAbstractService.GetData(const aTableNameArray: StringArray; const aTableRequestInfoArray: TableRequestInfoArray): Binary; -var - i, j, x, n: integer; - lParamNames: array of string; - lParamValues: array of Variant; - lOptions: TDAWriteOptions; - lAllow: boolean; - lDataSet: IDADataSet; - lEditableDataset: IDAEditableDataset; - lHasTransaction: boolean; - lMaxRecords: integer; - lDataTableRef: TDADataTableReference; - lDynSelectFields: array of string; - lDynSelectFields2: array of string; - lWhereClause, lRemappedWhereClause: WideString; - lConnection: IDAConnection; - lTableName: String; - lDataTable: TDADataset; - lUnionTable: TDAUnionDataTable; - lAppendData: TDADataForAppend; - lMapping: TDAColumnMappingCollection; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (GetData)'); - - result := nil; - if not assigned(aTableNameArray) or (aTableNameArray.Count = 0) then exit; - - if assigned(aTableRequestInfoArray) and (aTableNameArray.Count <> aTableRequestInfoArray.Count) then - raise Exception.Create('Number of items passed to aTableNameArray and aTableRequestInfoArray do not match.'); - - Check(True); - - result := Binary.Create; - Result.CapacityIncrement := ServiceDataStreamer.BufferSize; - try - lHasTransaction := false; - try - - ServiceDataStreamer.Initialize(result, aiWrite); - try - for i := 0 to (aTableNameArray.Count-1) do begin - - lTableName := Utf8ToAnsi(aTableNameArray[i]); - lDataTable := ServiceSchema.FindDataset(lTableName); - lOptions := [woRows]; - lMaxRecords := -1; - SetLength(lDynSelectFields,0); - lWhereClause := ''; - - if assigned(aTableRequestInfoArray) and assigned(aTableRequestInfoArray[i]) then with aTableRequestInfoArray[i] do begin - SetLength(lParamNames, Parameters.Count); - SetLength(lParamValues, Parameters.Count); - for j := 0 to (Parameters.Count-1) do begin - lParamNames[j] := Utf8ToAnsi(Parameters[j].Name); - lParamValues[j] := Parameters[j].Value; - end; - - if IncludeSchema then lOptions := lOptions+[woSchema]; - lMaxRecords := MaxRecords; - - // v5 TableRequestInfo - if aTableRequestInfoArray[i] is TableRequestInfoV5 then - with TableRequestInfoV5(aTableRequestInfoArray[i]) do begin - if assigned(DynamicSelectFieldNames) then begin - if AllowDynamicSelect then begin - SetLength(lDynSelectFields,DynamicSelectFieldNames.Count); - for j := 0 to DynamicSelectFieldNames.Count-1 do - lDynSelectFields[j] := Trim(Utf8ToAnsi(DynamicSelectFieldNames[j])); - if DynamicSelectFieldNames.Count > 0 then lOptions := lOptions+[woSchema]; - end else begin - raise EDAException.Create('DynamicSelect support has been disabled (GetData)'); - end; - end; - if assigned(TableRequestInfoV5(aTableRequestInfoArray[i]).WhereClause) then begin - if AllowDynamicWhere then - lWhereClause := WhereClause.XML - else - raise EDAException.Create('DynamicWhere support has been disabled (GetData)'); - end; - end; - end; - - if (fExportedDataTables.Count > 0) and Assigned(fExportedDataTables.FindByName(lTableName)) then begin - lConnection := nil; - end - else begin - Check(); - //lConnection := GetConnectionForObject(aTableNameArray[i]); - end; - - lAllow := true; - if assigned(fGetDatasetDataValidation) then fGetDatasetDataValidation(self, {l}Connection, lTableName, lParamNames, lParamValues, ServiceSchema, lAllow); - if not lAllow then raise EDADatasetNotAccessible.CreateFmt(err_DatasetNotAccessible, [lTableName]); - - lDataSet := nil; - if (fExportedDataTables.Count > 0) then begin - lDataTableRef := fExportedDataTables.FindByName(lTableName); - if assigned(lDataTableRef) then lDataSet := lDataTableRef.Dataset; - end; - - if not assigned(lDataSet) then begin - - // Create transaction, if needed - if not lHasTransaction then begin - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then begin - Connection.BeginTransaction; - lHasTransaction := true; - end; - end; - - lDataTable := ServiceSchema.FindDataset(lTableName); - - { Unions } - if lDataTable is TDAUnionDataTable then begin - - if (aTableRequestInfoArray <> nil) and (Trim(Utf8ToAnsi(aTableRequestInfoArray[i].UserFilter))<>'') then - raise EDAException.Create('Passing of clear text WHERE clauses is not supported for UNIONS (GetData)'); - - lUnionTable := lDataTable as TDAUnionDataTable; - lAppendData := ServiceDataStreamer.BeginWriteDataset({Source}nil, {Schema}lDataTable, lOptions, lMaxRecords, lDynSelectFields); - if not (woRows in lOptions) then Continue; - - for x := 0 to lUnionTable.SourceTables.Count - 1 do begin - lTableName := lUnionTable.SourceTables[x].Name; - - // Check is source table exists in schema. - if (not Assigned(ServiceSchema.FindDataset(lTableName))) then - raise EDAException.CreateFmt('Source table %s doesn''t exist in schema.', [lTableName]); - - // Do column remapping for DynFields names - lMapping := lUnionTable.SourceTables[x].ColumnMappings; - SetLength(lDynSelectFields2, Length(lDynSelectFields)); - for n := Low(lDynSelectFields) to High(lDynSelectFields) do begin - if (lDynSelectFields[n]) = def_SourceTableFieldName then - lDynSelectFields2[n] := lDynSelectFields[n] - else - lDynSelectFields2[n] := lMapping.MappingByDatasetField(lDynSelectFields[n]).TableField; - end; - - lRemappedWhereClause := Where_RemapFieldNames(lWhereClause, lMapping); - - lDataSet := ServiceSchema.NewDataset(GetConnectionForObject(lTableName), lTableName, lParamNames, lParamValues, lDynSelectFields2, lRemappedWhereClause, false); - ServiceDataStreamer.WriteDatasetData(lDataSet, lAppendData, x); - // Keeping track of maxrecords - if ((lMaxRecords <> -1) and (lAppendData.RecordCount >= lMaxRecords)) then Break; - end; - ServiceDataStreamer.EndWriteDataset(lAppendData); - end - { Joins } - else if lDataTable is TDAJoinDataTable then begin - raise EDAException.Create('TODO: Joined Data Tables are not implemented in this release, yet.'); - end - { Plain Data Tables } - else begin - - lDataSet := ServiceSchema.NewDataset(GetConnectionForObject(lTableName), lTableName, lParamNames, lParamValues, lDynSelectFields, lWhereClause, False); - - if (woSchema in lOptions) and Assigned(fBeforeGetDatasetSchema) then fBeforeGetDatasetSchema(self, lDataset); - if (woRows in lOptions) and Assigned(fBeforeGetDatasetData) then fBeforeGetDatasetData(self, lDataset, (woSchema in lOptions), lMaxRecords); - - if (aTableRequestInfoArray <> nil) and (Trim(Utf8ToAnsi(aTableRequestInfoArray[i].UserFilter))<>'') then begin - if not AllowWhereSQL then - raise Exception.Create('Passing of clear text WHERE clauses has been disabled (GetData)'); - lDataSet.Where.AddText(Utf8ToAnsi(aTableRequestInfoArray[i].UserFilter)); - end; - lDataSet.Open; - - ServiceDataStreamer.WriteDataset(lDataset, lOptions, lMaxRecords,lDynSelectFields); - - if (woRows in lOptions) and Assigned(fAfterGetDatasetData) then fAfterGetDatasetData(self, lDataset, (woSchema in lOptions), lMaxRecords); - if (woSchema in lOptions) and Assigned(fAfterGetDatasetSchema) then fAfterGetDatasetSchema(self, lDataset); - - end; - - end - { ExportedDataTables } - else begin - if (Trim(Utf8ToAnsi(aTableRequestInfoArray[i].UserFilter))<>'') then - raise EDAException.Create('WHERE clauses are not supported on data from ExportedDataTables.'); - - if (woSchema in lOptions) and Assigned(fBeforeGetDatasetSchema) then fBeforeGetDatasetSchema(self, lDataset); - if (woRows in lOptions) and Assigned(fBeforeGetDatasetData) then fBeforeGetDatasetData(self, lDataset, (woSchema in lOptions), lMaxRecords); - - lDataSet.Open; - ServiceDataStreamer.WriteDataset(lDataset, lOptions, lMaxRecords,lDynSelectFields); - - if (woRows in lOptions) and Assigned(fAfterGetDatasetData) then fAfterGetDatasetData(self, lDataset, (woSchema in lOptions), lMaxRecords); - if (woSchema in lOptions) and Assigned(fAfterGetDatasetSchema) then fAfterGetDatasetSchema(self, lDataset); - end; - - if assigned(lDataTable) and not (lDataTable.IsPublic) then - raise EDAException.Create(lDataTable.Name +' is not accessible'); - - if lMaxRecords = -1 then begin - if lDataSet.QueryInterface(IDAEditableDataset,lEditableDataset) = s_ok then - lEditableDataset.First - else - lDataSet.Close; - end; - - lDataSet := nil; - end; { for } - - finally - ServiceDataStreamer.Finalize(); - end; - - if lHasTransaction and Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if lHasTransaction and Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; - - except - FreeAndNIL(result); - raise; - end; - -end; - -//TODO: needs cleaning! -function TDataAbstractService.UnpackDeltas(const DeltaStream: Binary; DeltaStructList: TDADeltaStructList): TDADeltasModes; -var - i, j: integer; - lDeltaName: string; - lBizProc: TDABusinessProcessor; - lDetails : TDADatasetRelationshipList; - lFound: boolean; - lStruct : TDADeltaStruct; - ltabRef: TDADataTableReference; -begin - result := []; - Check(True); - // Reads the deltas. - ServiceDataStreamer.Initialize(DeltaStream, aiReadFromBeginning); - try - if (ServiceDataStreamer.DeltaCount = 0) then Exit; - for i := 0 to (ServiceDataStreamer.DeltaCount - 1) do begin - lDeltaName := ServiceDataStreamer.DeltaNames[i]; - if (ExportedDataTables.Count >0) then begin - ltabRef := ExportedDataTables.FindByName(lDeltaName); - if Assigned(ltabRef) then begin - // for ExportedDataTables , BP=nil - lStruct := DeltaStructList.Add(NewDelta(lDeltaName), nil); - ServiceDataStreamer.ReadDelta(lDeltaName, lStruct.Delta); - Result:=Result+[dumExported]; - if ServiceDataStreamer.HasReducedDelta then begin - raise Exception.Create('Reduced Delta is not supported for ExportedDataTables'); - end; - Continue; - end; - end; - lFound := false; - { Tries to locate a user-defined business processor } - for j := 0 to (Self.ComponentCount - 1) do begin - if (Self.Components[j] is TDABusinessProcessor) then begin - lBizProc := TDABusinessProcessor(Self.Components[j]); - if SameText(lBizProc.ReferencedDataset, lDeltaName) then begin - lStruct := DeltaStructList.Add(NewDelta(lDeltaName), lBizProc); - ServiceDataStreamer.ReadDelta(lDeltaName, lStruct.Delta); - if ServiceDataStreamer.HasReducedDelta then begin - if (lBizProc.InsertCommandName <> '') or - (lBizProc.DeleteCommandName <> '') or - (lBizProc.UpdateCommandName <> '') or - ([poAutoGenerateInsert,poAutoGenerateUpdate,poAutoGenerateDelete]*lBizProc.ProcessorOptions <>[poAutoGenerateInsert,poAutoGenerateUpdate,poAutoGenerateDelete]) then - raise Exception.Create('SendReducedDelta option is uncompatible with '+lBizProc.Name+' settings'); - end; - lFound := true; - Break; - end; - end; - end; - - { Either creates one or aborts raising an exception } - if not lFound then begin - if not AutoCreateBusinessProcessors then - raise Exception.CreateFmt(err_DARDMCannotFindProxessorForDelta, [lDeltaName]); - - //ToDo: this will never get freed, until the DM frees? - lBizProc := TDABusinessProcessor.Create(self); - lBizProc.ReferencedDataset := lDeltaName; - lBizProc.Schema := ServiceSchema; - if Assigned(fOnBusinessProcessorAutoCreated) then fOnBusinessProcessorAutoCreated(Self, lBizProc); - - lStruct := DeltaStructList.Add(NewDelta(lDeltaName), lBizProc); - ServiceDataStreamer.ReadDelta(lDeltaName, lStruct.Delta); - - end; - - Result:=Result+[dumStandard]; - end; - fHasReducedDelta := ServiceDataStreamer.HasReducedDelta; - if not (dumStandard in Result) then exit; // nothing to process - Check; - { Sets the master/detail relationships } - if (ServiceSchema.RelationShips.Count>0) then begin - - lDetails := TDADatasetRelationshipList.Create; - try - for i := 0 to DeltaStructList.Count-1 do begin - ServiceSchema.RelationShips.GetDetails(DeltaStructList[i].BusinessProcessor.ReferencedDataset, lDetails); - if (lDetails.Count=0) then Continue; - - { Prepares an array with the references to the detail deltas that will be used later on to adjust - autoincs, etc. } - for j := 0 to lDetails.Count-1 do begin - lStruct := DeltaStructList.FindStruct(lDetails[j].DetailDatasetName); - if assigned(lStruct) then begin - DeltaStructList[i].DetailDeltas.Add(lStruct.Delta); - DeltaStructList[i].RelationShips.Add(lDetails[j]); - end; - end; - end; - finally - lDetails.Free; - end; - - end; - finally - ServiceDataStreamer.Finalize; - end; -end; - -function TDataAbstractService.UpdateData(const aDelta: Binary): Binary; -var - lProcessedDeltas: TStringList; - lDeltaStructs: TDADeltaStructList; - lStruct: TDADeltaStruct; - lDs: TDADataset; - lDoRaise: boolean; - i,j: integer; - modes: TDADeltasModes; - oldDeltaMode: Boolean; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (UpdateData)'); - - if not AllowUpdates then - raise Exception.Create('Data updates have been disabled (UpdateData)'); - - result := nil; - fHasReducedDelta := False; - - lDeltaStructs := TDADeltaStructList.Create; - try - - try - modes:= UnpackDeltas(aDelta, lDeltaStructs); - if modes = [] then exit; - - if dumStandard in modes then begin - Check; - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - end; - if Assigned(fBeforeProcessDeltas) then fBeforeProcessDeltas(Self, lDeltaStructs); - - for i := 0 to lDeltaStructs.Count-1 do begin - lDs := ServiceSchema.FindDataset(lDeltaStructs[i].Delta.LogicalName); - if lDs <> nil then begin - if not lDs.IsPublic then - raise EDAException.Create(lDs.Name+' is not accessible'); - if lDs.ReadOnly then - raise EDAException.Create(lDs.Name+' is read-only'); - end; - end; - if dumExported in modes then - // Processes the delta for exported tables (BP=nil) - for i := 0 to lDeltaStructs.Count-1 do begin - if lDeltaStructs[i].BusinessProcessor = nil then - ExportedDataTables_MergeDelta(lDeltaStructs[i].Delta); - end; - if dumStandard in modes then begin - if (ServiceSchema.UpdateRules.Count = 0) and ProcessDeltasWithoutUpdateRules then begin - - // Processes them in order, from first to last delta sent - for i := 0 to lDeltaStructs.Count-1 do - if lDeltaStructs[i].BusinessProcessor <> nil then begin - oldDeltaMode:=lDeltaStructs[i].BusinessProcessor.HasReducedDelta; - try - lDeltaStructs[i].BusinessProcessor.HasReducedDelta:=fHasReducedDelta; - // TODO: Handle GetConnectionForObject() for 'Rosetta', UNIONS and JOINS - lDeltaStructs[i].BusinessProcessor.ProcessDelta(GetConnectionForObject(lDeltaStructs[i].BusinessProcessor.ReferencedDataset), lDeltaStructs[i].Delta, AllChanges); - finally - lDeltaStructs[i].BusinessProcessor.HasReducedDelta:=oldDeltaMode; - end; - - with lDeltaStructs[i] do - for j := 0 to (DetailDeltas.Count-1) do - BusinessProcessor.SynchronizeAutoIncs(Delta, DetailDeltas[j], RelationShips[j]); - end; - end - else begin - lProcessedDeltas := TStringList.Create; - try - - for i := 0 to (ServiceSchema.UpdateRules.Count-1) do begin - // Processes them in the order defined in the schema - lStruct := lDeltaStructs.FindStruct(ServiceSchema.UpdateRules[i].DatasetName); - if assigned(lStruct) then begin - if lStruct.BusinessProcessor = nil then Continue; - // Adds the dataset name to the list of processed deltas. Those that don't have update rules will be processed later - lProcessedDeltas.Add(lStruct.Delta.LogicalName); - - // Processes the delta - oldDeltaMode:=lStruct.BusinessProcessor.HasReducedDelta; - try - lStruct.BusinessProcessor.HasReducedDelta:=fHasReducedDelta; - // TODO: Handle GetConnectionForObject() for 'Rosetta', UNIONS and JOINS - lStruct.BusinessProcessor.ProcessDelta(GetConnectionForObject(lStruct.BusinessProcessor.ReferencedDataset), lStruct.Delta, ServiceSchema.UpdateRules[i].ChangeTypes); - finally - lStruct.BusinessProcessor.HasReducedDelta:=oldDeltaMode; - end; - - if (ctInsert in ServiceSchema.UpdateRules[i].ChangeTypes) then begin - for j := 0 to (lStruct.DetailDeltas.Count-1) do - lStruct.BusinessProcessor.SynchronizeAutoIncs(lStruct.Delta, lStruct.DetailDeltas[j], lStruct.RelationShips[j]); - end; - end; - end; - - // Processes the deltas for which update rules were not defined - if (ProcessDeltasWithoutUpdateRules) then begin - for i := 0 to lDeltaStructs.Count-1 do begin - // Skips if already processed - if (lProcessedDeltas.IndexOf(lDeltaStructs[i].Delta.LogicalName)>=0) then Continue; - - if lDeltaStructs[i].BusinessProcessor <> nil then begin - oldDeltaMode:=lDeltaStructs[i].BusinessProcessor.HasReducedDelta; - try - lDeltaStructs[i].BusinessProcessor.HasReducedDelta:=fHasReducedDelta; - lDeltaStructs[i].BusinessProcessor.ProcessDelta(GetConnectionForObject(lDeltaStructs[i].BusinessProcessor.ReferencedDataset), lDeltaStructs[i].Delta, AllChanges); - finally - lDeltaStructs[i].BusinessProcessor.HasReducedDelta:=oldDeltaMode; - end; - - with lDeltaStructs[i] do - for j := 0 to (DetailDeltas.Count-1) do - BusinessProcessor.SynchronizeAutoIncs(Delta, DetailDeltas[j], RelationShips[j]); - end; - end; - end; - - finally - lProcessedDeltas.Free; - end; - end; - end; - - if Assigned(fAfterProcessDeltas) then fAfterProcessDeltas(Self, lDeltaStructs); - - if dumStandard in modes then - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - - result := Binary.Create; - oldDeltaMode:=ServiceDataStreamer.SendReducedDelta; - ServiceDataStreamer.Initialize(result, aiWrite); - try - if fHasReducedDelta then ServiceDataStreamer.SendReducedDelta:=True; - for i := 0 to lDeltaStructs.Count-1 do - ServiceDataStreamer.WriteDelta(lDeltaStructs[i].Delta); - finally - ServiceDataStreamer.Finalize; - ServiceDataStreamer.SendReducedDelta:=oldDeltaMode; - end; - - except - on E:Exception do begin - lDoRaise := true; - try - if Assigned(fOnProcessDeltasError) then fOnProcessDeltasError(Self, lDeltaStructs, E, lDoRaise); - finally - if dumStandard in modes then - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - end; - if lDoRaise then raise; - end; - end; - finally - lDeltaStructs.Free; - end; -end; - -function TDataAbstractService.ExecuteCommand(const aCommandName: Utf8String; const aParameterArray: DataParameterArray): Integer; -var - j: integer; - lParamNames: array of string; - lParamValues: array of Variant; - lAllow: boolean; - lCommand: IDASQLCommand; - lCommandSchema: TDASQLCommand; - lConnection: IDAConnection; - lCommandName: string; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (ExecuteCommand)'); - - if not AllowExecuteCommands then - raise Exception.Create('Execution of commands has been disabled (ExecuteCommand)'); - - SetLength(lParamNames, aParameterArray.Count); - SetLength(lParamValues, aParameterArray.Count); - for j := 0 to (aParameterArray.Count-1) do begin - lParamNames[j] := Utf8ToAnsi(aParameterArray[j].Name); - lParamValues[j] := aParameterArray[j].Value; - end; - - lCommandName:=Utf8ToAnsi(aCommandName); - lCommandSchema := ServiceSchema.Commands.SQLCommandByName(lCommandName); - if assigned(lCommandSchema) and not (lCommandSchema.IsPublic) then - raise EDAException.Create(lCommandSchema.Name +' is not accessible'); - - - lAllow := true; - lConnection := GetConnectionForObject(lCommandName); - if assigned(fExecuteCommandValidation) then fExecuteCommandValidation(self, lConnection, lCommandName, lParamNames, lParamValues, ServiceSchema, lAllow); - if not lAllow then raise EDADatasetNotAccessible.CreateFmt(err_CommandNotAccessible, [lCommandName]); - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then lConnection.BeginTransaction; - try - - lCommand := ServiceSchema.NewCommand(lConnection, lCommandName, lParamNames, lParamValues, false); - if Assigned(fBeforeExecutecommand) then fBeforeExecuteCommand(self, lCommand); - result := lCommand.Execute; - if assigned(fAfterExecutecommand) then fAfterExecuteCommand(self, lCommand, Result); - - if lConnection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then lConnection.CommitTransaction; - except - if lConnection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then lConnection.RollbackTransaction; - raise; - end; -end; - -{ IDataAbstractService: Direct SQL Access } - -function TDataAbstractService.SQLGetData(const aSQLText: Utf8String; const aIncludeSchema: Boolean; const aMaxRecords: Integer): Binary; -var - lOptions: TDAWriteOptions; - lDataSet: IDADataSet; - lAllow: boolean; - lSQLText: string; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (SQLGetData)'); - - if not AllowExecuteSQL then - raise Exception.Create('Execution of SQL has been disabled (SQLGetData)'); - - if assigned(fHETConnection) then - raise Exception.Create('Execution of SQL isnot supported for HET Connections'); - - result := nil; - lSQLText := Utf8ToAnsi(aSQLText); - if lSQLText = '' then exit; - - Check(); - - lAllow := true; - if assigned(fSQLValidation) then fSQLValidation(self, Connection, lSQLText, [], [], lAllow); - if not lAllow then raise EDADatasetNotAccessible.Create(err_SQLNotPermitted); - - result := Binary.Create; - Result.CapacityIncrement := ServiceDataStreamer.BufferSize; - try - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - try - ServiceDataStreamer.Initialize(result, aiWrite); - try - - lOptions := [woRows]; - if aIncludeSchema then lOptions := lOptions+[woSchema]; - - lDataSet := Connection.NewDataset(lSQLText,'SQLResult'); - try - if (woSchema in lOptions) and Assigned(fBeforeGetDatasetSchema) then fBeforeGetDatasetSchema(self, lDataset); - if (woRows in lOptions) and Assigned(fBeforeGetDatasetData) then fBeforeGetDatasetData(self, lDataset, (woSchema in lOptions), aMaxRecords); - - lDataSet.Open(); - - ServiceDataStreamer.WriteDataset(lDataset, lOptions, aMaxRecords); - - if (woRows in lOptions) and Assigned(fAfterGetDatasetData) then fAfterGetDatasetData(self, lDataset, (woSchema in lOptions), aMaxRecords); - if (woSchema in lOptions) and Assigned(fAfterGetDatasetSchema) then fAfterGetDatasetSchema(self, lDataset); - - finally - lDataSet := nil; - end; - - finally - ServiceDataStreamer.Finalize(); - end; - - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; - - except - FreeAndNIL(result); - raise; - end; - -end; - -function TDataAbstractService.SQLExecuteCommand(const aSQLText: Utf8String): Integer; -var - lAllow: boolean; - lSQLText: string; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (SQLExecuteCommand)'); - - if not AllowExecuteSQL then - raise Exception.Create('Execution of SQL has been disabled (SQLExecuteCommand)'); - - if assigned(fHETConnection) then - raise Exception.Create('Execution of SQL isnot supported for HET Connections'); - - Check(); - lSQLText := Utf8ToAnsi(aSQLText); - lAllow := true; - if assigned(fSQLValidation) then fSQLValidation(self, Connection, lSQLText, [], [], lAllow); - if not lAllow then raise EDADatasetNotAccessible.CreateFmt(err_SQLNotPermitted, []); - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then Connection.BeginTransaction; - try - - result := Connection.NewCommand(lSQLText, stSQL).Execute; - - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then Connection.CommitTransaction; - except - if Connection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then Connection.RollbackTransaction; - raise; - end; -end; - -{ Properties } - -procedure TDataAbstractService.SetExportedDataTables(const Value: TDADataTableReferenceCollection); -begin - fExportedDataTables.Assign(Value); -end; - -procedure TDataAbstractService.SetServiceDataStreamer(const Value: TDADataStreamer); -begin - fServiceDataStreamer := Value; - if (fServiceDataStreamer <> nil) then - fServiceDataStreamer.FreeNotification(Self); -end; - -procedure TDataAbstractService.SetServiceSchema(const Value: TDASchema); -begin - fServiceSchema := Value; - - if assigned(fServiceSchema) then - fServiceSchema.FreeNotification(self); -end; - -{ Connections } - -function TDataAbstractService.GetConnection: IDAConnection; -var - lConnectionName: string; -begin - inherited; - result := fConnection; - if assigned(fConnection) then exit; - if (csDesigning in ComponentState) then exit; - - if AcquireConnection then try - - if (fServiceSchema = nil) or (fServiceSchema.ConnectionManager = nil) then raise Exception.Create(err_DARDMInvalidSchema); - - lConnectionName := ConnectionName; - if Assigned(fBeforeAcquireConnection) then fBeforeAcquireConnection(Self, lConnectionName); - - result := ServiceSchema.ConnectionManager.NewConnection(lConnectionName); - Connection := result; - if Assigned(fAfterAcquireConnection) then fAfterAcquireConnection(Self, lConnectionName, result); - - except - on E: Exception do begin - if Assigned(fOnAcquireConnectionFailure) then fOnAcquireConnectionFailure(Self, lConnectionName, E); - raise; - end; - end; -end; - -{$WARN SYMBOL_DEPRECATED OFF} -procedure TDataAbstractService.SetConnection(aConnection: IDAConnection); -begin - if fConnection <> aConnection then begin - fConnection := aConnection; - if not Supports(fConnection, IDAHETConnection, fHETConnection) then fHETConnection := nil; - end; -end; -{$WARN SYMBOL_DEPRECATED ON} - -function TDataAbstractService.GetConnectionForObject(const aName: string): IDAConnection; -begin - result := Connection; // forces acquisition of Connection - if assigned(fHETConnection) then - result := fHETConnection.GetConnectionForObject(aName) -end; - -procedure TDataAbstractService.DoOnDeactivate(aClientID: TGUID); -begin - inherited; - if (csDesigning in ComponentState) then Exit; - - ReleaseConnection(); -end; - -procedure TDataAbstractService.ReleaseConnection; -var - lConnectionName: string; -begin - if assigned(fConnection) then begin - lConnectionName := fConnection.Name; - if Assigned(fBeforeReleaseConnection) then fBeforeReleaseConnection(Self, lConnectionName, fConnection); - Connection := nil; - if Assigned(fAfterReleaseConnection) then fAfterReleaseConnection(Self, lConnectionName); - end; -end; - -procedure TDataAbstractService.Check(CheckOnlyDataStreamer:Boolean = false); -begin - if not CheckOnlyDataStreamer then begin - if not (Assigned(Connection) or AcquireConnection) then - raise EROException.Create('AcquireConnection is not set and there is no connection available'); - if not Assigned(ServiceSchema) then - raise Exception.Create('ServiceSchema property is not assigned.'); - end; - if not Assigned(ServiceDataStreamer) then - raise EROException.Create('DataStreamer must be assigned.'); -end; - -function TDataAbstractService.ExecuteCommandEx(const aCommandName: Utf8String; - const aInputParameters: DataParameterArray; - out aOutputParameters: DataParameterArray): Integer; -var - j: integer; - lParamNames: array of string; - lParamValues: array of Variant; - lAllow: boolean; - lCommand: IDASQLCommand; - lCommandSchema: TDASQLCommand; - lConnection: IDAConnection; - lCommandName: string; -begin - if not AllowDataAccess then - raise Exception.Create('Data access has been disabled (ExecuteCommand)'); - - if not AllowExecuteCommands then - raise Exception.Create('Execution of commands has been disabled (ExecuteCommand)'); - - lCommandName:= Utf8ToAnsi(aCommandName); - SetLength(lParamNames, aInputParameters.Count); - SetLength(lParamValues, aInputParameters.Count); - for j := 0 to (aInputParameters.Count-1) do begin - lParamNames[j] := Utf8ToAnsi(aInputParameters[j].Name); - lParamValues[j] := aInputParameters[j].Value; - end; - - lCommandSchema := ServiceSchema.Commands.SQLCommandByName(lCommandName); - if assigned(lCommandSchema) and not (lCommandSchema.IsPublic) then - raise EDAException.Create(lCommandSchema.Name +' is not accessible'); - - - lAllow := true; - lConnection := GetConnectionForObject(lCommandName); - if assigned(fExecuteCommandValidation) then fExecuteCommandValidation(self, lConnection, lCommandName, lParamNames, lParamValues, ServiceSchema, lAllow); - if not lAllow then raise EDADatasetNotAccessible.CreateFmt(err_CommandNotAccessible, [lCommandName]); - - if TriggerTransactionEvent(fOnUpdateDataBeginTransaction) then lConnection.BeginTransaction; - try - - lCommand := ServiceSchema.NewCommand(lConnection, lCommandName, lParamNames, lParamValues, false); - if Assigned(fBeforeExecutecommand) then fBeforeExecuteCommand(self, lCommand); - result := lCommand.Execute; - if assigned(fAfterExecutecommand) then fAfterExecuteCommand(self, lCommand, Result); - - aOutputParameters := DataParameterArray.Create; - for j := 0 to lCommand.Params.Count -1 do begin - if (lCommand.Params[j].ParamType <> daptUnknown) and (lCommand.Params[j].ParamType <> daptInput) then begin - with aOutputParameters.Add do begin - Name := AnsiToUtf8(lCommand.Params[j].Name); - Value := lCommand.Params[j].Value; - end; - end; - end; - if lConnection.InTransaction and TriggerTransactionEvent(fOnUpdateDataCommitTransaction) then lConnection.CommitTransaction; - except - if lConnection.InTransaction and TriggerTransactionEvent(fOnUpdateDataRollBackTransaction) then lConnection.RollbackTransaction; - raise; - end; -end; - -function TDataAbstractService.GetDatasetScripts(const DatasetNames: Utf8String): Utf8String; -var names : TStringList; - i : integer; - ds : TDADataset; - lResult: WideString; -begin - lresult := ''; - names := TStringList.Create; - try - names.CommaText :=Utf8ToAnsi(DatasetNames); - for i := 0 to (names.Count-1) do begin - // scripts for externaltables is not allowed - if fExportedDataTables.FindByName(names[i]) <> nil then continue; - ds := ServiceSchema.Datasets.DatasetByName(names[i]); - - lresult := lresult+Format('<%s Language="%s">', [ - names[i], - GetEnumName(TypeInfo(TROSEScriptLanguage), Ord(ds.BusinessRulesClient.ScriptLanguage)), - ds.BusinessRulesClient.Script, - names[i]]); - end; - - result := UTF8Encode(''+lresult+''); - finally - FreeAndNIL(names); - end; -end; - -procedure TDataAbstractService.ExportedDataTables_MergeDelta(ADelta: IDADelta); -var - i, k, x: integer; - oldval, newval, val : Variant; - fld : TDAField; - pkfields : string; - pkfields1: array of string; - insertfields: array of string; - keyvals, insertvals : array of variant; - LDAEditableDataset:IDAEditableDataset; - ADataset: IDADataset; - pk_array: array of boolean; -begin - // validated in UnpackDeltas - ADataset:=ExportedDataTables.FindByName(ADelta.LogicalName).Dataset; - SetLength(pk_array, ADelta.LoggedFieldCount); - for i := 0 to ADelta.LoggedFieldCount - 1 do - pk_array[i]:=False; - - for i := 0 to ADelta.KeyFieldCount - 1 do begin - x := ADelta.IndexOfLoggedField(ADelta.KeyFieldNames[i]); - if x <> -1 then pk_array[x]:=True; - end; - - SetLength(pkfields1, ADelta.KeyFieldCount); - for i := 0 to (ADelta.KeyFieldCount-1) do - pkfields1[i]:=ADelta.KeyFieldNames[i]; - if ADelta.KeyFieldCount = 0 then - begin - SetLength(pkfields1, ADelta.LoggedFieldCount); - k:=-1; - for i := 0 to (ADelta.LoggedFieldCount-1) do begin - if ADelta.LoggedFieldTypes[i] in [datUnknown, datMemo, datBlob,datWideMemo] then Continue; - inc(k); - pkfields1[k]:=ADelta.LoggedFieldNames[i]; - end; - SetLength(pkfields1,k+1); - end; - SetLength(keyvals, Length(pkfields1)); - pkfields := ''; - For i:=0 to Length(pkfields1) - 1 do - pkfields:=pkfields+pkfields1[i]+';'; - pkfields := Copy(pkfields, 1, Length(pkfields)-1); - - if (ADelta.Count>0) then begin - for i := (ADelta.Count-1) downto 0 do begin - for k := 0 to Length(pkfields1)-1 do begin - val := ADelta[i].OldValueByName[pkfields1[k]]; - keyvals[k] := val; - end; - if fHasReducedDelta and (ADelta.KeyFieldCount = 0) then begin - SetLength(pkfields1, ADelta.LoggedFieldCount); - k:=-1; - for x := 0 to (ADelta.LoggedFieldCount-1) do begin - if ADelta.LoggedFieldTypes[x] in [datUnknown, datMemo, datBlob,datWideMemo] then Continue; - pkfields:=ADelta.LoggedFieldNames[x]; - if ROVariantsEqual(ADelta[i].OldValueByName[pkfields],ADelta[i].NewValueByName[pkfields]) then Continue; - inc(k); - pkfields1[k]:=ADelta.LoggedFieldNames[x]; - end; - SetLength(pkfields1,k+1); - for k := 0 to Length(pkfields1)-1 do begin - val := ADelta[i].OldValueByName[pkfields1[k]]; - keyvals[k] := val; - end; - pkfields := ''; - For x:=0 to Length(pkfields1) - 1 do - pkfields:=pkfields+pkfields1[x]+';'; - pkfields := Copy(pkfields, 1, Length(pkfields)-1); - end; - if ADataset.QueryInterface(StringToGUID('{D3E2147F-65B3-4D9D-8614-7270011FA7D5}'),LDAEditableDataset) <> 0 then exit; - LDAEditableDataset.First; - case ADelta[i].ChangeType of - ctDelete: begin - // Locates the original record - if not Adataset.Locate(pkfields, keyvals, []) then Continue; - LDAEditableDataset.Delete; - end; - ctInsert: begin - // fHasReducedDelta don't work in this case - // old values = Unassigned - // new Values = Null - SetLength(insertFields, ADelta.LoggedFieldCount); - SetLength(insertvals, ADelta.LoggedFieldCount); - for x := 0 to (ADelta.LoggedFieldCount-1) do begin - insertfields[x] := ADelta.LoggedFieldNames[x]; - insertvals[x] := ADelta[i].NewValueByName[ADelta.LoggedFieldNames[x]]; - end; - LDAEditableDataset.AddRecord(insertfields,insertvals); - end; - ctUpdate: begin - // Locates the original record - if not Adataset.Locate(pkfields, keyvals, []) then Continue; - LDAEditableDataset.Edit; - for x := 0 to (ADelta.LoggedFieldCount-1) do begin - fld := Adataset.FieldByName(ADelta.LoggedFieldNames[x]); - newval := ADelta[i].NewValueByName[fld.Name]; - oldval := ADelta[i].OldValueByName[fld.Name]; - if fHasReducedDelta and (ROVariantsEqual(newval, oldval)) then Continue; - fld.Value:=newval; -{ if fld.ServerAutoRefresh or (not VarIsArray(newVal) and (newval<>oldval)) then begin - VariantToFieldValue(newval, fld); - end; -} - end; - LDAEditableDataset.Post; - end; - end; - // Removes this merged change - ADelta.Delete(i); - end; - end -end; - -procedure TDataAbstractService.RegisterForDataChangeNotification( - const aTableName: Utf8String); -begin -{ TODO : todo } -end; - -procedure TDataAbstractService.UnregisterForDataChangeNotification( - const aTableName: Utf8String); -begin -{ TODO : todo } -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.bdsproj deleted file mode 100644 index 4c974b2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.bdsproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - DataAbstract_Core_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - Core Library - False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - - - DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - - $00000000 - - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.cfg deleted file mode 100644 index 11c667c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.cfg +++ /dev/null @@ -1,48 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dpk deleted file mode 100644 index f2f9e89..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dpk +++ /dev/null @@ -1,104 +0,0 @@ -package DataAbstract_Core_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Core Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - RemObjects_Core_D10, - rtl, - vcl, - adortl, - dbrtl, - dsnap, - vcldb; - -contains - uDAInterfaces in 'uDAInterfaces.pas', - uDAInterfacesEx in 'uDAInterfacesEx.pas', - uDAClasses in 'uDAClasses.pas', - uDAHelpers in 'uDAHelpers.pas', - uDAEngine in 'uDAEngine.pas', - uDAUtils in 'uDAUtils.pas', - uDARes in 'uDARes.pas', - DataAbstract_Core_Reg in 'DataAbstract_Core_Reg.pas', - uDABinAdapter in 'uDABinAdapter.pas', - uDAXMLAdapter in 'uDAXMLAdapter.pas', - uDADriverManager in 'uDADriverManager.pas', - uDASupportClasses in 'uDASupportClasses.pas', - uDADataTable in 'uDADataTable.pas', - uDACDSDataTable in 'uDACDSDataTable.pas', - uDAADODataTable in 'uDAADODataTable.pas', - uDABusinessProcessor in 'uDABusinessProcessor.pas', - uDAIBInterfaces in 'uDAIBInterfaces.pas', - uDAOracleInterfaces in 'uDAOracleInterfaces.pas', - uDAADOInterfaces in 'uDAADOInterfaces.pas', - uDAMacroProcessors in 'uDAMacroProcessors.pas', - uDADBSessionManager in 'uDADBSessionManager.pas', - uDAMacros in 'uDAMacros.pas', - DALoginService_Impl in 'DALoginService_Impl.pas', - DARemoteService_Impl in 'DARemoteService_Impl.pas', - uDAXMLUtils in 'uDAXMLUtils.pas', - uDARegExpr in 'uDARegExpr.pas', - uDADriverInfo in 'uDADriverInfo.pas', - uDAPleaseWaitForm in 'uDAPleaseWaitForm.pas', - uDAClientDataModule in 'uDAClientDataModule.pas', - uDAScriptingProvider in 'uDAScriptingProvider.pas', - uDAServerLog in 'uDAServerLog.pas', - uDADatasetProvider in 'uDADatasetProvider.pas', - uDAPoweredByDataAbstractButton in 'uDAPoweredByDataAbstractButton.pas', - SimpleLoginService_Impl in 'SimpleLoginService_Impl.pas', - DataAbstract3_Intf in 'DataAbstract3_Intf.pas', - DataAbstract3_Invk in 'DataAbstract3_Invk.pas', - DataAbstract3_Async in 'DataAbstract3_Async.pas', - DataAbstractService_Impl in 'DataAbstractService_Impl.pas' {DataAbstractService: TRORemoteDataModule}, - MultiDbLoginService_Impl in 'MultiDbLoginService_Impl.pas', - BaseLoginService_Impl in 'BaseLoginService_Impl.pas' {BaseLoginService: TRORemoteDataModule}, - DataAbstract4_Invk in 'DataAbstract4_Invk.pas', - DataAbstract4_Intf in 'DataAbstract4_Intf.pas', - DataAbstract4_Async in 'DataAbstract4_Async.pas', - uDARemoteDataAdapter in 'uDARemoteDataAdapter.pas', - uDACache in 'uDACache.pas', - uDARemoteDataAdapterRequests in 'uDARemoteDataAdapterRequests.pas', - uDADataStreamer in 'uDADataStreamer.pas', - uDADelta in 'uDADelta.pas', - uDADesigntimeCall in 'uDADesigntimeCall.pas', - uDAExceptions in 'uDAExceptions.pas', - uDASQL92Interfaces in 'uDASQL92Interfaces.pas', - uDABin2DataStreamer in 'uDABin2DataStreamer.pas', - uDAMemDataset in 'uDAMemDataset.pas', - uDAMemDataTable in 'uDAMemDataTable.pas', - uDAReconcileDialog in 'uDAReconcileDialog.pas' {ReconcileDialogForm}, - uDAReconcileDialogDetails in 'uDAReconcileDialogDetails.pas', - uDADatasetWrapper in 'uDADatasetWrapper.pas', - uDADataTableReferenceCollection in 'uDADataTableReferenceCollection.pas', - uDAMySQLInterfaces in 'uDAMySQLInterfaces.pas', - uDASQLiteInterfaces in 'uDASQLiteInterfaces.pas', - uDAExpressionEvaluator in 'uDAExpressionEvaluator.pas', - uDASQL92QueryBuilder in 'uDASQL92QueryBuilder.pas', - uDAWhere in 'uDAWhere.pas', - uDARemoteCommand in 'uDARemoteCommand.pas', - uDAPostgresInterfaces in 'uDAPostgresInterfaces.pas'; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dproj deleted file mode 100644 index eced124..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.dproj +++ /dev/null @@ -1,176 +0,0 @@ - - - {f3a56007-69a7-443a-8fdf-56da71a8440c} - DataAbstract_Core_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\DataAbstract_Core_D10.bpl - - - 7.0 - False - False - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - Core Library - False - False - False - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_Core_D10.dpk - - - - - - - MainSource - - - -
BaseLoginService
-
- - - - - - - - - -
DataAbstractService
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ReconcileDialogForm
-
- - - - - - - - - - - - - - - - - -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.cfg deleted file mode 100644 index 3d4736d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.cfg +++ /dev/null @@ -1,42 +0,0 @@ --$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 --N"..\Dcu\D6" --LE"..\Dcu\D6" --LN"..\Dcu\D6" --U"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --O"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --I"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --R"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --DDESIGNTIME --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dof deleted file mode 100644 index ff6f0ce..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Core Library - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.280 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dpk deleted file mode 100644 index d34cae5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.dpk +++ /dev/null @@ -1,104 +0,0 @@ -package DataAbstract_Core_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Core Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - RemObjects_Core_D6, - rtl, - vcl, - adortl, - dbrtl, - dsnap, - vcldb; - -contains - uDAInterfaces in 'uDAInterfaces.pas', - uDAInterfacesEx in 'uDAInterfacesEx.pas', - uDAClasses in 'uDAClasses.pas', - uDAHelpers in 'uDAHelpers.pas', - uDAEngine in 'uDAEngine.pas', - uDAUtils in 'uDAUtils.pas', - uDARes in 'uDARes.pas', - DataAbstract_Core_Reg in 'DataAbstract_Core_Reg.pas', - uDABinAdapter in 'uDABinAdapter.pas', - uDAXMLAdapter in 'uDAXMLAdapter.pas', - uDADriverManager in 'uDADriverManager.pas', - uDASupportClasses in 'uDASupportClasses.pas', - uDADataTable in 'uDADataTable.pas', - uDACDSDataTable in 'uDACDSDataTable.pas', - uDAADODataTable in 'uDAADODataTable.pas', - uDABusinessProcessor in 'uDABusinessProcessor.pas', - uDAIBInterfaces in 'uDAIBInterfaces.pas', - uDAOracleInterfaces in 'uDAOracleInterfaces.pas', - uDAADOInterfaces in 'uDAADOInterfaces.pas', - uDAMacroProcessors in 'uDAMacroProcessors.pas', - uDADBSessionManager in 'uDADBSessionManager.pas', - uDAMacros in 'uDAMacros.pas', - DALoginService_Impl in 'DALoginService_Impl.pas', - DARemoteService_Impl in 'DARemoteService_Impl.pas', - uDAXMLUtils in 'uDAXMLUtils.pas', - uDARegExpr in 'uDARegExpr.pas', - uDADriverInfo in 'uDADriverInfo.pas', - uDAPleaseWaitForm in 'uDAPleaseWaitForm.pas', - uDAClientDataModule in 'uDAClientDataModule.pas', - uDAScriptingProvider in 'uDAScriptingProvider.pas', - uDAServerLog in 'uDAServerLog.pas', - uDADatasetProvider in 'uDADatasetProvider.pas', - uDAPoweredByDataAbstractButton in 'uDAPoweredByDataAbstractButton.pas', - SimpleLoginService_Impl in 'SimpleLoginService_Impl.pas', - DataAbstract3_Intf in 'DataAbstract3_Intf.pas', - DataAbstract3_Invk in 'DataAbstract3_Invk.pas', - DataAbstract3_Async in 'DataAbstract3_Async.pas', - DataAbstractService_Impl in 'DataAbstractService_Impl.pas' {DataAbstractService: TRORemoteDataModule}, - MultiDbLoginService_Impl in 'MultiDbLoginService_Impl.pas', - BaseLoginService_Impl in 'BaseLoginService_Impl.pas' {BaseLoginService: TRORemoteDataModule}, - DataAbstract4_Invk in 'DataAbstract4_Invk.pas', - DataAbstract4_Intf in 'DataAbstract4_Intf.pas', - DataAbstract4_Async in 'DataAbstract4_Async.pas', - uDARemoteDataAdapter in 'uDARemoteDataAdapter.pas', - uDACache in 'uDACache.pas', - uDARemoteDataAdapterRequests in 'uDARemoteDataAdapterRequests.pas', - uDADataStreamer in 'uDADataStreamer.pas', - uDADelta in 'uDADelta.pas', - uDADesigntimeCall in 'uDADesigntimeCall.pas', - uDAExceptions in 'uDAExceptions.pas', - uDASQL92Interfaces in 'uDASQL92Interfaces.pas', - uDABin2DataStreamer in 'uDABin2DataStreamer.pas', - uDAMemDataset in 'uDAMemDataset.pas', - uDAMemDataTable in 'uDAMemDataTable.pas', - uDAReconcileDialog in 'uDAReconcileDialog.pas' {ReconcileDialogForm}, - uDAReconcileDialogDetails in 'uDAReconcileDialogDetails.pas', - uDADatasetWrapper in 'uDADatasetWrapper.pas', - uDADataTableReferenceCollection in 'uDADataTableReferenceCollection.pas', - uDAMySQLInterfaces in 'uDAMySQLInterfaces.pas', - uDASQLiteInterfaces in 'uDASQLiteInterfaces.pas', - uDAExpressionEvaluator in 'uDAExpressionEvaluator.pas', - uDASQL92QueryBuilder in 'uDASQL92QueryBuilder.pas', - uDAWhere in 'uDAWhere.pas', - uDARemoteCommand in 'uDARemoteCommand.pas', - uDAPostgresInterfaces in 'uDAPostgresInterfaces.pas'; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.cfg deleted file mode 100644 index d9c7e92..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.cfg +++ /dev/null @@ -1,51 +0,0 @@ --$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 --N"..\Dcu\D7" --LE"..\Dcu\D7" --LN"..\Dcu\D7" --U"..\Dcu\D7;..\Dcu\DevEx;..\..\RemObjects SDK for Delphi\Dcu\D7;..\..\Pascal Script\Dcu\D7" --O"..\Dcu\D7;..\Dcu\DevEx;..\..\RemObjects SDK for Delphi\Dcu\D7;..\..\Pascal Script\Dcu\D7" --I"..\Dcu\D7;..\Dcu\DevEx;..\..\RemObjects SDK for Delphi\Dcu\D7;..\..\Pascal Script\Dcu\D7" --R"..\Dcu\D7;..\Dcu\DevEx;..\..\RemObjects SDK for Delphi\Dcu\D7;..\..\Pascal Script\Dcu\D7" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dof deleted file mode 100644 index 19785e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Core Library - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=..\Dcu\D7;..\Dcu\DevEx;..\..\RemObjects SDK for Delphi\Dcu\D7;..\..\Pascal Script\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.286 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dpk deleted file mode 100644 index 4c57e56..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.dpk +++ /dev/null @@ -1,104 +0,0 @@ -package DataAbstract_Core_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Core Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - RemObjects_Core_D7, - rtl, - vcl, - adortl, - dbrtl, - dsnap, - vcldb; - -contains - uDAInterfaces in 'uDAInterfaces.pas', - uDAInterfacesEx in 'uDAInterfacesEx.pas', - uDAClasses in 'uDAClasses.pas', - uDAHelpers in 'uDAHelpers.pas', - uDAEngine in 'uDAEngine.pas', - uDAUtils in 'uDAUtils.pas', - uDARes in 'uDARes.pas', - DataAbstract_Core_Reg in 'DataAbstract_Core_Reg.pas', - uDABinAdapter in 'uDABinAdapter.pas', - uDAXMLAdapter in 'uDAXMLAdapter.pas', - uDADriverManager in 'uDADriverManager.pas', - uDASupportClasses in 'uDASupportClasses.pas', - uDADataTable in 'uDADataTable.pas', - uDACDSDataTable in 'uDACDSDataTable.pas', - uDAADODataTable in 'uDAADODataTable.pas', - uDABusinessProcessor in 'uDABusinessProcessor.pas', - uDAIBInterfaces in 'uDAIBInterfaces.pas', - uDAOracleInterfaces in 'uDAOracleInterfaces.pas', - uDAADOInterfaces in 'uDAADOInterfaces.pas', - uDAMacroProcessors in 'uDAMacroProcessors.pas', - uDADBSessionManager in 'uDADBSessionManager.pas', - uDAMacros in 'uDAMacros.pas', - DALoginService_Impl in 'DALoginService_Impl.pas', - DARemoteService_Impl in 'DARemoteService_Impl.pas', - uDAXMLUtils in 'uDAXMLUtils.pas', - uDARegExpr in 'uDARegExpr.pas', - uDADriverInfo in 'uDADriverInfo.pas', - uDAPleaseWaitForm in 'uDAPleaseWaitForm.pas', - uDAClientDataModule in 'uDAClientDataModule.pas', - uDAScriptingProvider in 'uDAScriptingProvider.pas', - uDAServerLog in 'uDAServerLog.pas', - uDADatasetProvider in 'uDADatasetProvider.pas', - uDAPoweredByDataAbstractButton in 'uDAPoweredByDataAbstractButton.pas', - SimpleLoginService_Impl in 'SimpleLoginService_Impl.pas', - DataAbstract3_Intf in 'DataAbstract3_Intf.pas', - DataAbstract3_Invk in 'DataAbstract3_Invk.pas', - DataAbstract3_Async in 'DataAbstract3_Async.pas', - DataAbstractService_Impl in 'DataAbstractService_Impl.pas' {DataAbstractService: TRORemoteDataModule}, - MultiDbLoginService_Impl in 'MultiDbLoginService_Impl.pas', - BaseLoginService_Impl in 'BaseLoginService_Impl.pas' {BaseLoginService: TRORemoteDataModule}, - DataAbstract4_Invk in 'DataAbstract4_Invk.pas', - DataAbstract4_Intf in 'DataAbstract4_Intf.pas', - DataAbstract4_Async in 'DataAbstract4_Async.pas', - uDARemoteDataAdapter in 'uDARemoteDataAdapter.pas', - uDACache in 'uDACache.pas', - uDARemoteDataAdapterRequests in 'uDARemoteDataAdapterRequests.pas', - uDADataStreamer in 'uDADataStreamer.pas', - uDADelta in 'uDADelta.pas', - uDADesigntimeCall in 'uDADesigntimeCall.pas', - uDAExceptions in 'uDAExceptions.pas', - uDASQL92Interfaces in 'uDASQL92Interfaces.pas', - uDABin2DataStreamer in 'uDABin2DataStreamer.pas', - uDAMemDataset in 'uDAMemDataset.pas', - uDAMemDataTable in 'uDAMemDataTable.pas', - uDAReconcileDialog in 'uDAReconcileDialog.pas' {ReconcileDialogForm}, - uDAReconcileDialogDetails in 'uDAReconcileDialogDetails.pas', - uDADatasetWrapper in 'uDADatasetWrapper.pas', - uDADataTableReferenceCollection in 'uDADataTableReferenceCollection.pas', - uDAMySQLInterfaces in 'uDAMySQLInterfaces.pas', - uDASQLiteInterfaces in 'uDASQLiteInterfaces.pas', - uDAExpressionEvaluator in 'uDAExpressionEvaluator.pas', - uDASQL92QueryBuilder in 'uDASQL92QueryBuilder.pas', - uDAWhere in 'uDAWhere.pas', - uDARemoteCommand in 'uDARemoteCommand.pas', - uDAPostgresInterfaces in 'uDAPostgresInterfaces.pas'; -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Glyphs.res deleted file mode 100644 index ab2c23f..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.conf b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.conf deleted file mode 100644 index def0238..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.conf +++ /dev/null @@ -1,40 +0,0 @@ --$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 --H+ --W+ --M --$M1048576 --K$00400000 --N"../Dcu/K3" --LE"../Dcu/K3" --LN"../Dcu/K3" --U"../../RemObjects SDK/Dcu/K3" --O"../../RemObjects SDK/Dcu/K3" --I"../../RemObjects SDK/Dcu/K3" --R"../../RemObjects SDK/Dcu/K3" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.dpk deleted file mode 100644 index 2571d8b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.dpk +++ /dev/null @@ -1,89 +0,0 @@ -package DataAbstract_Core_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Core Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - RemObjects_Core_K3, - rtl, - dataclx; - -contains - uDAInterfaces in 'uDAInterfaces.pas', - uDAClasses in 'uDAClasses.pas', - uDAEngine in 'uDAEngine.pas', - uDAUtils in 'uDAUtils.pas', - uDARes in 'uDARes.pas', - DataAbstract_Core_Reg in 'DataAbstract_Core_Reg.pas', - uDABinAdapter in 'uDABinAdapter.pas', - uDAXMLAdapter in 'uDAXMLAdapter.pas', - uDADriverManager in 'uDADriverManager.pas', - uDASupportClasses in 'uDASupportClasses.pas', - uDADataTable in 'uDADataTable.pas', - uDACDSDataTable in 'uDACDSDataTable.pas', - uDABusinessProcessor in 'uDABusinessProcessor.pas', - uDAIBInterfaces in 'uDAIBInterfaces.pas', - uDAOracleInterfaces in 'uDAOracleInterfaces.pas', - uDAMacroProcessors in 'uDAMacroProcessors.pas', - uDADBSessionManager in 'uDADBSessionManager.pas', - uDAMacros in 'uDAMacros.pas', - DALoginService_Impl in 'DALoginService_Impl.pas', - DARemoteService_Impl in 'DARemoteService_Impl.pas', - uDAXMLUtils in 'uDAXMLUtils.pas', - uDARegExpr in 'uDARegExpr.pas', - uDADriverInfo in 'uDADriverInfo.pas', - uDAClientDataModule in 'uDAClientDataModule.pas', - uDAScriptingProvider in 'uDAScriptingProvider.pas', - uDAServerLog in 'uDAServerLog.pas', - uDADatasetProvider in 'uDADatasetProvider.pas', - uDAPoweredByDataAbstractButton in 'uDAPoweredByDataAbstractButton.pas', - SimpleLoginService_Impl in 'SimpleLoginService_Impl.pas', - DataAbstract3_Intf in 'DataAbstract3_Intf.pas', - DataAbstract3_Invk in 'DataAbstract3_Invk.pas', - DataAbstract3_Async in 'DataAbstract3_Async.pas', - DataAbstractService_Impl in 'DataAbstractService_Impl.pas' {DataAbstractService: TRORemoteDataModule}, - MultiDbLoginService_Impl in 'MultiDbLoginService_Impl.pas', - BaseLoginService_Impl in 'BaseLoginService_Impl.pas' {BaseLoginService: TRORemoteDataModule}, - DataAbstract4_Invk in 'DataAbstract4_Invk.pas', - DataAbstract4_Intf in 'DataAbstract4_Intf.pas', - DataAbstract4_Async in 'DataAbstract4_Async.pas', - uDARemoteDataAdapter in 'uDARemoteDataAdapter.pas', - uDACache in 'uDACache.pas', - uDARemoteDataAdapterRequests in 'uDARemoteDataAdapterRequests.pas', - uDADataStreamer in 'uDADataStreamer.pas', - uDADelta in 'uDADelta.pas', - uDADesigntimeCall in 'uDADesigntimeCall.pas', - uDAExceptions in 'uDAExceptions.pas', - uDASQL92Interfaces in 'uDASQL92Interfaces.pas', - uDABin2DataStreamer in 'uDABin2DataStreamer.pas', - uDAMemDataset in 'uDAMemDataset.pas', - uDAMemDataTable in 'uDAMemDataTable.pas', - uDAReconcileDialog in 'uDAReconcileDialog.pas' {ReconcileDialogForm}, - uDAReconcileDialogDetails in 'uDAReconcileDialogDetails.pas', - uDADatasetWrapper in 'uDADatasetWrapper.pas', - uDADataTableReferenceCollection in 'uDADataTableReferenceCollection.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.kof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.kof deleted file mode 100644 index 0ffe928..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_K3.kof +++ /dev/null @@ -1,71 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - Core Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../../RemObjects SDK/Dcu/K3 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[Excluded Packages] -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_Indy_K3.so=RemObjects SDK - Indy Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_RODX_K3.so=RemObjects - RODXSock Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_BPDX_K3.so=RemObjects SDK - BPDX Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_IDE_K3.so=RemObjects SDK - IDE Integration -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_DataSnap_K3.so=RemObjects - DataSnap Package -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_Enterprise_K3.so=RemObjects SDK - Enterprise Edition - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Reg.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Reg.pas deleted file mode 100644 index 62fb96a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Core_Reg.pas +++ /dev/null @@ -1,81 +0,0 @@ -unit DataAbstract_Core_Reg; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library } -{ } -{ compiler: Delphi 6 and up, Kylix 3 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -procedure Register; - -implementation - -uses - {$IFDEF FPC}LResources,{$ENDIF} - Classes, - uDARes, uDAInterfaces, uDAClasses, uDADriverManager, - uDABinAdapter, uDAXMLAdapter, uDADataTable, uDADesigntimeCall,uDABin2DataStreamer, - {$IFNDEF FPC}uDACDSDataTable,uDADatasetProvider,uDACache,{$ENDIF FPC} - uDARemoteDataAdapter, - {$IFDEF MSWINDOWS} - {$IFNDEF FPC} - uDAADODataTable, - {$ENDIF} - {$ENDIF MSWINDOWS} - uDABusinessProcessor, - uDADBSessionManager, - uDAServerLog, - uDAMemDataTable, - uDARemoteCommand, - uDAPoweredByDataAbstractButton; - -{$IFNDEF FPC} - {$R DataAbstract_Core_Glyphs.res} -{$ENDIF} - -procedure Register; -begin - RegisterComponents(DAPalettePageName, - [TDAPoweredByDataAbstractButton, - TDADriverManager, - TDAConnectionManager, - TDASchema, - TDADiagrams, - TDADataDictionary, - TDABin2DataStreamer, - TDAXMLDataStreamer, - TDARemoteDataAdapter, - {$IFNDEF FPC} - TDADatasetProvider, - {$ENDIF FPC} - TDAMemDataTable, - TDABusinessProcessor, - TDADesigntimeCall, - TDADataSource, - TDARemoteCommand, - TDAServerLog]); -{$IFNDEF FPC} -{$WARN SYMBOL_DEPRECATED OFF} - RegisterComponents('RemObjects Data Abstract (Legacy)', [TDABinAdapter, - TDACDSDataTable, TDAADODataTable, - TDABinDataStreamer, TDAXMLAdapter,TDACache]); -{$WARN SYMBOL_DEPRECATED ON} -{$ENDIF} - RegisterComponents('RemObjects SDK', [TDADBSessionManager]); -end; - -{$IFDEF FPC} -initialization - {$I DataAbstract_Core_Glyphs.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.bdsproj deleted file mode 100644 index 81d84c2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_Scripting_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - Scripting Integration Library False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.cfg deleted file mode 100644 index 6d65c2e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.cfg +++ /dev/null @@ -1,52 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10;..\..\Pascal Script\Dcu\D10" --O"..\Dcu\D10;..\..\Pascal Script\Dcu\D10" --I"..\Dcu\D10;..\..\Pascal Script\Dcu\D10" --R"..\Dcu\D10;..\..\Pascal Script\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dpk deleted file mode 100644 index 14457eb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_Scripting_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Scripting Integration Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - dbrtl, - vcl, - RemObjects_Core_D10, - DataAbstract_Core_D10, - PascalScript_Core_D10; - -contains - uDAPascalScript in 'uDAPascalScript.pas', - uDAPSScriptingProvider in 'uDAPSScriptingProvider.pas', - DataAbstract_Scripting_Reg in 'DataAbstract_Scripting_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dproj deleted file mode 100644 index 78175d1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.dproj +++ /dev/null @@ -1,119 +0,0 @@ - - - {3fb27763-9440-44c3-bb51-17969172e8fe} - DataAbstract_Scripting_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\DataAbstract_Scripting_D10.bpl - - - 7.0 - False - False - True - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - ..\Dcu\D10;..\..\Pascal Script\Dcu\D10 - DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - Scripting Integration Library - False - False - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_Scripting_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.cfg deleted file mode 100644 index d94514b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\Dcu\D6" --LE"..\Dcu\D6" --LN"..\Dcu\D6" --U"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --O"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --I"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --R"..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dof deleted file mode 100644 index 75f52a1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Scripting Integration Library - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6;..\..\RemObjects SDK for Delphi\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.280 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dpk deleted file mode 100644 index 4c39879..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_Scripting_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Scripting Integration Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - dbrtl, - vcl, - RemObjects_Core_D6, - DataAbstract_Core_D6, - PascalScript_Core_D6; - -contains - uDAPascalScript in 'uDAPascalScript.pas', - uDAPSScriptingProvider in 'uDAPSScriptingProvider.pas', - DataAbstract_Scripting_Reg in 'DataAbstract_Scripting_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.cfg deleted file mode 100644 index b26eab1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.cfg +++ /dev/null @@ -1,46 +0,0 @@ --$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 --N"..\Dcu\D7" --LE"..\Dcu\D7" --LN"..\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dof deleted file mode 100644 index 97dc0fb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Scripting Integration Library - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dpk deleted file mode 100644 index 34f8513..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.dpk +++ /dev/null @@ -1,43 +0,0 @@ -package DataAbstract_Scripting_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Scripting Integration Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - dbrtl, - vcl, - RemObjects_Core_D7, - DataAbstract_Core_D7, - PascalScript_Core_D7, - dsnap, - adortl; - -contains - uDAPascalScript in 'uDAPascalScript.pas', - uDAPSScriptingProvider in 'uDAPSScriptingProvider.pas', - DataAbstract_Scripting_Reg in 'DataAbstract_Scripting_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Glyphs.res deleted file mode 100644 index fa5cad1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Reg.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Reg.pas deleted file mode 100644 index f71baf2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_Scripting_Reg.pas +++ /dev/null @@ -1,40 +0,0 @@ -unit DataAbstract_Scripting_Reg; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library } -{ } -{ compiler: Delphi 6 and up, Kylix 3 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -interface - -procedure Register; - -implementation - -uses - {$IFDEF FPC}LResources,{$ENDIF} - Classes, uDAPSScriptingProvider, uDARes; - -{$IFNDEF FPC} - {$R DataAbstract_Scripting_Glyphs.res} -{$ENDIF FPC} - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAPSScriptingProvider]); -end; - -{$IFDEF FPC} -initialization - {$I DataAbstract_Scripting_Glyphs.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.bdsproj deleted file mode 100644 index ddab013..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.bdsproj +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - DataAbstract_SimpleQuery_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - Korzh SimpleQuery Integration Library False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.cfg deleted file mode 100644 index c44bc25..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.cfg +++ /dev/null @@ -1,44 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10" --O"..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10" --I"..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10" --R"..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10" --Z --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dpk deleted file mode 100644 index 9f33f70..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dpk +++ /dev/null @@ -1,42 +0,0 @@ -package DataAbstract_SimpleQuery_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Korzh SimpleQuery Integration Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - RemObjects_Core_D10, - dbrtl, - vcl, - DataAbstract_Core_D10, - PascalScript_Core_D10, - sq7, - kprocs7; - -contains - uDAKDBInfo in 'uDAKDBInfo.pas', - DataAbstract_SimpleQuery_Reg in 'DataAbstract_SimpleQuery_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dproj deleted file mode 100644 index 6b78676..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.dproj +++ /dev/null @@ -1,104 +0,0 @@ - - - {12feb998-13fa-45f9-8ee6-f5ab6077ef8e} - DataAbstract_SimpleQuery_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\DataAbstract_SimpleQuery_D10.bpl - - - 7.0 - False - False - True - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - RELEASE - - - 7.0 - True - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - ..\Dcu\D10;..\..\RemObjects SDK for Dephi\Dcu\D10 - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - Korzh SimpleQuery Integration Library - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - DataAbstract_SimpleQuery_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.res deleted file mode 100644 index c73b102..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.cfg deleted file mode 100644 index e2a8294..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.cfg +++ /dev/null @@ -1,47 +0,0 @@ --$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 --E"s:\exe" --N"..\Dcu\D6" --LE"..\Dcu\D6" --LN"..\Dcu\D6" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dof deleted file mode 100644 index 29abd6f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dof +++ /dev/null @@ -1,114 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Korzh SimpleQuery Integration Library - -[Directories] -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dpk deleted file mode 100644 index b8c2834..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.dpk +++ /dev/null @@ -1,42 +0,0 @@ -package DataAbstract_SimpleQuery_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Korzh SimpleQuery Integration Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - RemObjects_Core_D6, - dbrtl, - vcl, - DataAbstract_Core_D6, - PascalScript_Core_D6, - sq6, - kprocs6; - -contains - uDAKDBInfo in 'uDAKDBInfo.pas', - DataAbstract_SimpleQuery_Reg in 'DataAbstract_SimpleQuery_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.res deleted file mode 100644 index fff68a1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.cfg deleted file mode 100644 index b26eab1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.cfg +++ /dev/null @@ -1,46 +0,0 @@ --$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 --N"..\Dcu\D7" --LE"..\Dcu\D7" --LN"..\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dof deleted file mode 100644 index 7e2dfdc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Korzh SimpleQuery Integration Library - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dpk deleted file mode 100644 index 63ff17e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.dpk +++ /dev/null @@ -1,42 +0,0 @@ -package DataAbstract_SimpleQuery_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Korzh SimpleQuery Integration Library'} -{$IMPLICITBUILD ON} - -requires - rtl, - RemObjects_Core_D7, - dbrtl, - vcl, - DataAbstract_Core_D7, - PascalScript_Core_D7, - sq7, - kprocs7; - -contains - uDAKDBInfo in 'uDAKDBInfo.pas', - DataAbstract_SimpleQuery_Reg in 'DataAbstract_SimpleQuery_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.res deleted file mode 100644 index fff68a1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Glyphs.res deleted file mode 100644 index 4a5d497..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Reg.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Reg.pas deleted file mode 100644 index 5a9be83..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/DataAbstract_SimpleQuery_Reg.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit DataAbstract_SimpleQuery_Reg; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Core Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I DataAbstract.inc} - -{$R DataAbstract_SimpleQuery_Glyphs.res} - -interface - -procedure Register; - -implementation - -uses - Classes, uDAKDBInfo; - -procedure Register; -begin - RegisterComponents('Data Abstract', [TDAKDBConnectionInfo, TDAKDBSchemaInfo]); -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/ASGRout3.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/ASGRout3.pas deleted file mode 100644 index 6382a1b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/ASGRout3.pas +++ /dev/null @@ -1,424 +0,0 @@ -{*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -Author: Albert Drent -Description: ASGRout parser routines -Creation: Januari 1998 -Version: 1.2.B -EMail: a.drent@aducom.com (www.aducom.com) -Support: support@aducom.com (www.aducom.com) -Legal issues: Copyright (C) 2003 by Aducom Software - - Aducom Software - Eckhartstr 61 - 9746 BN Groningen - Netherlands - - This software is provided 'as-is', without any express or - implied warranty. In no event will the author be held liable - for any damages arising from the use of this software. - - Permission is granted to anyone to use this software for any - purpose, including commercial applications, and to alter it - and redistribute it freely, subject to the following - restrictions: - - 1. The origin of this software must not be misrepresented, - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but is - not required. - - 2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - - 3. If you make changes which improves the component you must - mail these to aducom as the moderator of the components - complete with documentation for the benefits of the community. - - 4. You are not allowed to create commercial available components - using this software. If you use this source in any way to create - your own components, your source should be free of charge, - available to anyone. It's a far better idea to distribute your - changes through Aducom Software. - - 5. This notice may not be removed or altered from any source - distribution. - - 6. You must register this software by entering the support forum. - I like to keep track about where the components are used, so - sending a picture postcard to the author would be appreciated. - Use a nice stamp and mention your name, street - address, EMail address and any comment you like to say. - -Modifications - 26/5/2004 Function YYYYMMDDParser by JPierce, necessary for - locale independent datehandling in SQLite components. - 1/9/2005 Changes to the StrToFloatX routine, now depending on - decimalseparator. - -*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * } - -unit ASGRout3; - -interface - -uses SysUtils; - -const - vtcIdentifier = 1; - vtcNumber = 2; - vtcAssignment = 3; - vtcQString = 4; - vtcDString = 5; - vtcRelOp = 6; - vtcFloat = 7; - vtcDelimiter = 8; - vtcEof = 9; - -procedure FindErrorPos(InString: string; ErrPos: integer; - var TheLine, TheCol: integer); -function GetWord(var InString: string; var StartPos: integer; - var VarType: integer): string; -function GetWordByDelim(var InString: string; var StartPos: integer; - var Delim: string): string; -function PeekWord(var InString: string; StartPos: integer; - var VarType: integer): string; -function Recover(var InString: string; var StartPos: integer): boolean; -function StrToIntX(StrIn: string): integer; -function StrToFloatX(StrIn : string) : extended; -function StrToDateX(TheDate: string): TDateTime; -function StrToDateTimeX(const S: string): TDateTime; -function YYYYMMDDParser(Str: PChar): TDateTime; -function FloatParser(Str: string): string;// jordi march - -implementation - -function FloatParser(Str: string): string;// jordi march -var - Point: Byte; -begin - if DecimalSeparator <> '.' then begin - Point := Pos ('.', Str); - if Point <> 0 - then Str[Point] := DecimalSeparator; - end; - Result := Str; -end; - - //============================================================================== - // Convert dates to a correct datetime notation. Try several notations, - // starting with the system defaults - //============================================================================== - -function StrToDateTimeX(const S: string): TDateTime; -begin - if S = '' then - StrToDateTimeX := 0 - else begin - try - StrToDateTimeX := StrToDateTime(S); - except - StrToDateTimeX := StrToDateX(s); - end; - end; -end; - -function StrToDateX(TheDate: string): TDateTime; -var - DateFormat: string; - DateSep: char; -begin - DateFormat := ShortDateFormat; // save current settings - DateSep := DateSeparator; - try - try - StrToDateX := StrToDate(TheDate) - except - DateSeparator := '-'; - ShortDateFormat := 'dd-mm-yyyy'; - try - StrToDateX := StrToDate(TheDate) - except - ShortDateFormat := 'yyyy-mm-dd'; - try - StrToDateX := StrToDate(TheDate) - except - StrToDateX := StrToDateX('01-01-1900'); - raise; - end; - end; - end; - finally - ShortDateFormat := DateFormat; - DateSeparator := DateSep; - end; -end; - -// Routine submitted by jpierce, modified to accept more types -// It requires that the date be in strict yyyy-mm-dd [hh:nn:[ss[:mmm]]] - -function YYYYMMDDParser(Str: PChar): TDateTime; -var - Year, Month, Day, Hour, Min, Sec, MSec: Word; -begin - Result := 0; - - try - if Length(Str) >= 10 then // 10 = Length of YYYY-MM-DD - begin - Year := StrToInt(Copy(Str, 1, 4)); - Month := StrToInt(Copy(Str, 6, 2)); - Day := StrToInt(Copy(Str, 9, 2)); - - Result := EncodeDate(Year, Month, Day); - end; - - if Length(Str) > 10 then // it has a time - begin - Hour := StrToInt(Copy(Str, 12, 2)); - Min := StrToInt(Copy(Str, 15, 2)); - Sec := 0; - MSec := 0; - if Length(Str) > 16 then Sec := StrToInt(Copy(Str, 18, 2)); - if Length(Str) > 19 then Msec := StrToInt(Copy(Str, 21, 3)); - Result := Result + EncodeTime(Hour, Min, Sec, MSec); - end; - except - Result := 0; - end; -end; - -function StrToIntX(StrIn: string): integer; -var -E: Integer; -begin - Val(StrIn, Result, E); - if E <> 0 then Result := 0; -end; - -function StrToFloatX(StrIn : string) : extended; -begin - if not TextToFloat(PChar(StrIn), Result, fvExtended) then - Result := 0; -end; - -procedure FindErrorPos(InString: string; ErrPos: integer; - var TheLine, TheCol: integer); -var - i: integer; -begin - TheLine := 1; - TheCol := 1; - i := 1; - while i < ErrPos do - begin - if InString[i] in [ #10, #13] then - begin - Inc(TheLine); - TheCol := 1; - Inc(i); - Inc(i); - end - else - begin - Inc(TheCol); - Inc(i); - end; - end; -end; - -function Recover(var InString: string; - var StartPos: integer): boolean; -begin - if (StartPos > Length(InString)) then - begin - Recover := false; - exit; - end; - - while (Startpos < Length(InString)) and - ( not (InString[StartPos] in [ #10, #13])) do - Inc(StartPos); - Recover := true; -end; - -function PeekWord(var InString: string; StartPos: integer; - var VarType: integer): string; -begin - PeekWord := GetWord(InString, StartPos, VarType); -end; - -function GetWordByDelim(var InString: string; - var StartPos: integer; - var Delim: string): string; -var - Ret: string; -begin - Ret := ''; - while (StartPos <= Length(InString)) and (InString[StartPos] = ' ') do - Inc(StartPos); - while (StartPos <= Length(InString)) and (Pos(InString[StartPos], Delim) = 0) do - begin - Ret := Ret + InString[StartPos]; - Inc(StartPos); - end; - GetWordByDelim := Trim(Ret); -end; - -function GetWord(var InString: string; var StartPos: integer; - var VarType: integer): string; -var - TheChar: char; - Rv: string; -begin - if (StartPos > Length(InString)) then - begin - GetWord := ''; - VarType := vtcEof; - exit; - end; - - while (StartPos <= Length(InString)) and (InString[StartPos] <= #32) do - Inc(StartPos); - - TheChar := InString[StartPos]; - Rv := ''; - - if TheChar in ['a'..'z', 'A'..'Z'] then - VarType := vtcIdentifier - else if TheChar in ['0'..'9', '-'] then - VarType := vtcNumber - else if TheChar = ':' then - VarType := vtcAssignment - else if TheChar = '"' then - VarType := vtcDString - else if TheChar = '''' then - VarType := vtcQString - else if TheChar in ['>', '=', '<'] then - VarType := vtcRelOp - else - begin - Inc(StartPos); - if TheChar = '!' then - begin - Recover(InString, StartPos); - Rv := GetWord(InString, StartPos, VarType); - GetWord := Rv; - end - else - begin - GetWord := TheChar; - end; - exit; - end; - - case VarType of - vtcIdentifier: - begin - while InString[StartPos] in ['a'..'z', 'A'..'Z', '_','0'..'9'] do - begin - Rv := Rv + InString[StartPos]; - Inc(StartPos); - end; - end; - vtcNumber: - begin - while InString[StartPos] in ['-', '0'..'9', '.'] do - begin - if InString[StartPos] = '.' then - VarType := vtcFloat; - Rv := Rv + InString[StartPos]; - Inc(StartPos); - end; - if VarType = vtcFloat then - Rv := FloatToStr(StrToFloat(Rv)) - else - Rv := IntToStr(StrToInt(Rv)); - end; - vtcAssignment: - begin - Rv := InString[StartPos]; - Inc(StartPos); - if InString[StartPos] = '=' then - begin - Inc(StartPos); - Rv := ':='; - end - else - begin - VarType := vtcDelimiter; - Rv := ':'; - end; - end; - vtcQString: - begin - Inc(StartPos); - while InString[StartPos] <> '''' do - begin - Rv := Rv + InString[StartPos]; - Inc(StartPos); - end; - Inc(StartPos); - end; - vtcDString: - begin - Inc(StartPos); - while InString[StartPos] <> '"' do - begin - Rv := Rv + InString[StartPos]; - Inc(StartPos); - end; - Inc(StartPos); - end; - vtcRelOp: - begin - Rv := InString[StartPos]; - if Rv = '<' then - begin - if InString[StartPos + 1] in ['=', '>'] then - begin - Rv := Rv + InString[StartPos + 1]; - StartPos := StartPos + 2; - end - else - begin - Inc(StartPos); - end; - end - else if Rv = '>' then - begin - if InString[StartPos + 1] in ['=', '<'] then - begin - Rv := Rv + InString[StartPos + 1]; - StartPos := StartPos + 2; - end - else - begin - Inc(StartPos); - end; - end - else - begin - Inc(StartPos); - end; - end; - end; - GetWord := Rv; -end; - -{$IFDEF SQLite_Static} -Var - TZInfo :_TIME_ZONE_INFORMATION; - TZRes :Integer; - -initialization - PInteger(@__timezone)^:=0; - PInteger(@__daylight)^:=0; - TZRes:=GetTimezoneInformation(TZInfo); - if TZRes>=0 Then - PInteger(@__timezone)^:=TZInfo.Bias*60; - if TZRes=TIME_ZONE_ID_DAYLIGHT Then - PInteger(@__daylight)^:=1; -{$ENDIF} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODriverHtml.res deleted file mode 100644 index 98b7c6e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.cfg deleted file mode 100644 index fbc8cdc..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.cfg +++ /dev/null @@ -1,46 +0,0 @@ --$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 --GD --cg --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; --H+ --W+ --M --$M16384,1048576 --K$00400000 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dof deleted file mode 100644 index 1a2d3d6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=3 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsD7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.287 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dpr deleted file mode 100644 index 7d130a8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DAADODrv; - -uses - ShareMem, - uDAADODriver in 'uDAADODriver.pas', - uDAADOInterfaces in '..\uDAADOInterfaces.pas'; - -{$E dad} - -{$R *.res} -{$R DAADODriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAADODrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDriverHtml.res deleted file mode 100644 index 57e2373..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.bdsproj deleted file mode 100644 index 720c571..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.bdsproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - DABDEDrv.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 3 - 0 - False - 1 - True - False - False - 16384 - 1048576 - 4194304 - - - - ..\..\bin - - - - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10 - - - False - - - - D:\Program Files\RemObjects Software\Data Abstract\DASchemaModeler.exe - - False - - - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 0 - 290 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.0.290 - - - - - Data Abstract - 2.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.cfg deleted file mode 100644 index 695c614..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.cfg +++ /dev/null @@ -1,39 +0,0 @@ --$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 --GD --cg --vn --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; --H+ --W+ --M --$M16384,1048576 --K$00400000 --E"..\..\bin" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dof deleted file mode 100644 index 593b787..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dpr deleted file mode 100644 index f00c885..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DABDEDrv; - -uses - ShareMem, - uDABDEDriver in 'uDABDEDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DABDEDriverHtml.res} -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DABDEDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.cfg deleted file mode 100644 index 4a853d2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_PLATFORM --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dof deleted file mode 100644 index af7d0f6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.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=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Purposesoft HtmlEdit 2.0 - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;CDKSmp;EaglWk;ESGraphUtils;ESBase;CDKDesignTimeSupport;ESVsCp;ESSampleCompositeEditors7;ESSampleComposites70;SynEdit_D7;dxsbD7;dxComnD7;dxExELD7;dxGrEdD7;ECQDBCD7;EQTLD7;dxEdtrD7;EQDBTLD7;EQGridD7;dxMasterViewD7;dxmdsd7;dxObjInsD7;dxPSCoreD7;Rz252N70;Rz252D70;madBasic_;madHelp_;madDisAsm_;madExcept_;EzSpecials_D7;sq7;kprocs7;dxDockingD7;dxLayoutControlD7;dxPageControlD7;cxEditorsVCLD7;cxLibraryVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;Phoenix_Core_D7;cxPageControlVCLD7;dxELibD7;dxExRwD7;dxDBEdD7;dxInsD7;dxNavBarD7;Phoenix_IDE_D7;DataAbstract_Core_D7;DataAbstract_DBXDriver_D7;cxWebD7;cxWebPascalScriptD7;cxWebTeeChartD7;cxWebSnapD7;SchemaModelerUtils_d7;Ani95_D7;DataAbstract_IDE_D7;DataAbstract_DiskDriver_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=3.0.0.50 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dpr deleted file mode 100644 index 8efca9c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.dpr +++ /dev/null @@ -1,18 +0,0 @@ -library DADBISAM3Drv; - -uses - ShareMem, - uDADBISAMDriver in 'uDADBISAMDriver.pas'; - -{$E dad} - -{$I dbisamvr.inc} -{$IFDEF DBISAM_V4} -Please only build this driver dpr with DBISAM3 -{$ENDIF DBISAM_V4} - -{$R *.res} -{$R DADBISAMDriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM3Drv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.cfg deleted file mode 100644 index 4a853d2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_PLATFORM --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dof deleted file mode 100644 index af7d0f6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.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=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Purposesoft HtmlEdit 2.0 - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;CDKSmp;EaglWk;ESGraphUtils;ESBase;CDKDesignTimeSupport;ESVsCp;ESSampleCompositeEditors7;ESSampleComposites70;SynEdit_D7;dxsbD7;dxComnD7;dxExELD7;dxGrEdD7;ECQDBCD7;EQTLD7;dxEdtrD7;EQDBTLD7;EQGridD7;dxMasterViewD7;dxmdsd7;dxObjInsD7;dxPSCoreD7;Rz252N70;Rz252D70;madBasic_;madHelp_;madDisAsm_;madExcept_;EzSpecials_D7;sq7;kprocs7;dxDockingD7;dxLayoutControlD7;dxPageControlD7;cxEditorsVCLD7;cxLibraryVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;Phoenix_Core_D7;cxPageControlVCLD7;dxELibD7;dxExRwD7;dxDBEdD7;dxInsD7;dxNavBarD7;Phoenix_IDE_D7;DataAbstract_Core_D7;DataAbstract_DBXDriver_D7;cxWebD7;cxWebPascalScriptD7;cxWebTeeChartD7;cxWebSnapD7;SchemaModelerUtils_d7;Ani95_D7;DataAbstract_IDE_D7;DataAbstract_DiskDriver_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=3.0.0.50 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dpr deleted file mode 100644 index c81ef35..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.dpr +++ /dev/null @@ -1,18 +0,0 @@ -library DADBISAM4Drv; - -uses - ShareMem, - uDADBISAMDriver in 'uDADBISAMDriver.pas'; - -{$E dad} - -{$I dbisamvr.inc} -{$IFNDEF DBISAM_V4} -Please only build this driver dpr with DBISAM4 -{$ENDIF DBISAM_V4} - -{$R *.res} -{$R DADBISAMDriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAM4Drv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAMDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAMDriverHtml.res deleted file mode 100644 index 449e052..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBISAMDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDriverHtml.res deleted file mode 100644 index d7774e2..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.cfg deleted file mode 100644 index b0ec5d7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.cfg +++ /dev/null @@ -1,45 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dof deleted file mode 100644 index daabfcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dpr deleted file mode 100644 index 4c68283..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DADBXDrv; - -uses - ShareMem, - uDADBXDriver in 'uDADBXDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DADBXDriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DADBXDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDriverHtml.res deleted file mode 100644 index d12ca9d..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.cfg deleted file mode 100644 index a17abb2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.cfg +++ /dev/null @@ -1,46 +0,0 @@ --$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 --GD --cg --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; --H+ --W+ --M --$M16384,1048576 --K$00400000 --E"..\..\Bin" --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dof deleted file mode 100644 index 1a2d3d6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=3 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsD7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.287 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dpr deleted file mode 100644 index 1373b9a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAFIBDrv; - -uses - ShareMem, - uDAFIBDriver in 'uDAFIBDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAFIBDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAFIBDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDriverHtml.res deleted file mode 100644 index 4732a47..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.dpr deleted file mode 100644 index 5c46278..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAIBDACDrv; - -uses - ShareMem, - uDAIBDACDriver in 'uDAIBDACDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAIBDACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.res deleted file mode 100644 index dce715e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBDACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODriverHtml.res deleted file mode 100644 index 32c06f3..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.cfg deleted file mode 100644 index 301d58f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.cfg +++ /dev/null @@ -1,39 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dof deleted file mode 100644 index daabfcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dpr deleted file mode 100644 index 152fbe5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DAIBODrv; - -uses - ShareMem, - uDAIBODriver in 'uDAIBODriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAIBODriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBODrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDriverHtml.res deleted file mode 100644 index 790cda2..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.cfg deleted file mode 100644 index b0ec5d7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.cfg +++ /dev/null @@ -1,45 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dof deleted file mode 100644 index daabfcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dpr deleted file mode 100644 index 39dde39..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DAIBXDrv; - -uses - ShareMem, - uDAIBXDriver in 'uDAIBXDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAIBXDriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAIBXDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDriverHtml.res deleted file mode 100644 index e1fa180..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.cfg deleted file mode 100644 index 301d58f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.cfg +++ /dev/null @@ -1,39 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dof deleted file mode 100644 index dd86d8f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dof +++ /dev/null @@ -1,115 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.178 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dpr deleted file mode 100644 index 971e17b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAMyDACDrv; - -uses - ShareMem, - uDAMyDACDriver in 'uDAMyDACDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAMyDACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMyDACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDriverHtml.res deleted file mode 100644 index c7f7a82..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.cfg deleted file mode 100644 index 40c80d0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.cfg +++ /dev/null @@ -1,45 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dof deleted file mode 100644 index dd86d8f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dof +++ /dev/null @@ -1,115 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.178 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dpr deleted file mode 100644 index 3a48d91..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAMySQLDACDrv; - -uses - ShareMem, - uDAMySQLDACDriver in 'uDAMySQLDACDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAMySQLDACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAMySQLDACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDriverHtml.res deleted file mode 100644 index 46b9c33..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.cfg deleted file mode 100644 index 7caebcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.cfg +++ /dev/null @@ -1,45 +0,0 @@ --$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 --E"..\..\Data Abstract\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.dpr deleted file mode 100644 index 5d47e04..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DANexusDBDrv; - -uses - ShareMem, - uDANexusDBDriver in 'uDANexusDBDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DANexusDBDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DANexusDBDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDriverHtml.res deleted file mode 100644 index a096da3..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.cfg deleted file mode 100644 index 301d58f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.cfg +++ /dev/null @@ -1,39 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dof deleted file mode 100644 index daabfcd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dpr deleted file mode 100644 index b2aa1e2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DAODACDrv; - -uses - ShareMem, - uDAODACDriver in 'uDAODACDriver.pas', - uDAOracleInterfaces in '..\uDAOracleInterfaces.pas'; - -{$E dad} - -{$R *.res} -{$R DAODACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAODACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDriverHtml.res deleted file mode 100644 index c7f7a82..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.cfg deleted file mode 100644 index 40c80d0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.cfg +++ /dev/null @@ -1,45 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dof deleted file mode 100644 index dd86d8f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dof +++ /dev/null @@ -1,115 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.178 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dpr deleted file mode 100644 index 700c0aa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAPostgresDACDrv; - -uses - ShareMem, - uDAPostgresDACDriver in 'uDAPostgresDACDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAPostgresDACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAPostgresDACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDriverHtml.res deleted file mode 100644 index 2ca3ed1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.cfg deleted file mode 100644 index 301d58f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.cfg +++ /dev/null @@ -1,39 +0,0 @@ --$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 --E"..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dof deleted file mode 100644 index 8c8eb5f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= - -[Directories] -OutputDir=..\..\Bin -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.1.196 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=Data Abstract -ProductVersion=2.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dpr deleted file mode 100644 index 615439d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DASDACDrv; - -uses - ShareMem, - uDASDACDriver in 'uDASDACDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DASDACDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASDACDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDriverHtml.res deleted file mode 100644 index 316f711..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.bdsproj deleted file mode 100644 index 584582a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.bdsproj +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - DASQLiteDrv.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 3 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - D:\Program Files\RemObjects Software\Data Abstract - - - - $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;$(DELPHI)\Lib\Debug - vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 - - - False - - - - D:\Program Files\RemObjects Software\Data Abstract\DASchemaModeler.exe - - False - - - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 0 - 290 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.0.290 - - - - - Data Abstract - 2.0.0.0 - - RemObjects Data Abstract - FIBPlus Driver - RemObjects Hydra - Core Library - RemObjects Hydra - IDE Integration - RemObjects Hydra - RemObjects SDK Integration Library - RemObjects Hydra - RemObjects SDK IDE Integration - RemObjects NexusDB Pack - Library - RemObjects NexusDB Pack - IDE Integration - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.cfg deleted file mode 100644 index 8549342..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.cfg +++ /dev/null @@ -1,34 +0,0 @@ --$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 --E"..\..\Bin" \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.dpr deleted file mode 100644 index dafaf13..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.dpr +++ /dev/null @@ -1,13 +0,0 @@ -library DASQLiteDrv; - -uses - ShareMem, - uDASQLiteDriver in 'uDASQLiteDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DASQLiteDriverHtml.res} - -begin -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DASQLiteDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDriverHtml.res deleted file mode 100644 index f3000f5..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.cfg deleted file mode 100644 index 96a1b9a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --E"D:\Program Files\RemObjects Software\Data Abstract" --U"d:\program files.all\borland\delphi7\Lib\Debug;J:\Products\ACAT\Source" --O"d:\program files.all\borland\delphi7\Lib\Debug;J:\Products\ACAT\Source" --I"d:\program files.all\borland\delphi7\Lib\Debug;J:\Products\ACAT\Source" --R"d:\program files.all\borland\delphi7\Lib\Debug;J:\Products\ACAT\Source" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.dpr deleted file mode 100644 index a566487..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.dpr +++ /dev/null @@ -1,12 +0,0 @@ -library DAZeosDrv; - -uses - ShareMem, - uDAZeosDriver in 'uDAZeosDriver.pas'; - -{$E dad} - -{$R *.res} -{$R DAZeosDriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.res deleted file mode 100644 index de5d31e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DAZeosDrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.bdsproj deleted file mode 100644 index 1e97716..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_ADODriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - ADOExpress/dbGo Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dpk deleted file mode 100644 index 501b019..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ADODriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - ADOExpress/dbGo Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - adortl; - -contains - uDAADODriver in 'uDAADODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dproj deleted file mode 100644 index f59a6c3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.dproj +++ /dev/null @@ -1,110 +0,0 @@ - - - {6843d8de-6ab6-4222-a3c5-282e7cc611df} - DataAbstract_ADODriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_ADODriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - ADOExpress/dbGo Driver - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_ADODriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dof deleted file mode 100644 index e0035fa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dpk deleted file mode 100644 index 9a608cd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ADODriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - ADOExpress/dbGo Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - adortl; - -contains - uDAADODriver in 'uDAADODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dof deleted file mode 100644 index f2d0c96..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dpk deleted file mode 100644 index a1427e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ADODriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - ADOExpress/dbGo Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - adortl; - -contains - uDAADODriver in 'uDAADODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_Glyphs.res deleted file mode 100644 index 067c6a6..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ADODriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.bdsproj deleted file mode 100644 index f5afeb9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.bdsproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - DataAbstract_BDEDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - BDE Driver - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dpk deleted file mode 100644 index de3b837..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_BDEDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - BDE Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - DataAbstract_Core_D10; - -contains - uDABDEDriver in 'uDABDEDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dproj deleted file mode 100644 index 99fb687..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.dproj +++ /dev/null @@ -1,110 +0,0 @@ - - - {3cd4ddcd-76f8-4583-8117-c00562cb6a62} - DataAbstract_BDEDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_BDEDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - BDE Driver - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_BDEDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.cfg deleted file mode 100644 index c2c069b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.dpk deleted file mode 100644 index aceb56d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_BDEDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - BDE Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - bdertl; - -contains - uDABDEDriver in 'uDABDEDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.cfg deleted file mode 100644 index 8e0bad7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.dpk deleted file mode 100644 index a5b4538..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_BDEDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - BDE Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - DataAbstract_Core_D7; - -contains - uDABDEDriver in 'uDABDEDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_Glyphs.res deleted file mode 100644 index a2a5a20..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_BDEDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.bdsproj deleted file mode 100644 index 096f1d8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_DBISAMDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - DBISAM Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dpk deleted file mode 100644 index b21161d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package DataAbstract_DBISAMDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - DBISAM Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - vcldb, - RemObjects_Core_D10, - DataAbstract_Core_D10, - db324d9r; - -contains - uDADBISAMDriver in 'uDADBISAMDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dproj deleted file mode 100644 index a1ae711..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.dproj +++ /dev/null @@ -1,112 +0,0 @@ - - - {18f879f9-5865-46a9-8515-d3b4503d16ff} - DataAbstract_DBISAMDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_DBISAMDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - DBISAM Driver - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - DataAbstract_DBISAMDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dof deleted file mode 100644 index 1e36acf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dof +++ /dev/null @@ -1,77 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - DBISAM Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;ibxpress;dsnap;cds;bdecds;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;webdsnap;websnap;soaprtl;dbexpress;dbxcds;indy;tb2kComplete;CRControls60;dac60;dacvcl60;sdacvcl60;sdac60;oraprov60;odac60;odacvcl60;DataAbstract_Core_D6;DataAbstract_DBXDriver_D6;DataAbstract_DiskDriver_D6 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dpk deleted file mode 100644 index f1b37bf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package DataAbstract_DBISAMDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - DBISAM Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - vcldb, - RemObjects_Core_D6, - DataAbstract_Core_D6, - db324d6r; - -contains - uDADBISAMDriver in 'uDADBISAMDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.res deleted file mode 100644 index 84eaa11..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.cfg deleted file mode 100644 index 02179cd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7" --O"..\..\Dcu\D7" --I"..\..\Dcu\D7" --R"..\..\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dof deleted file mode 100644 index 2d15714..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - DBISAM Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dpk deleted file mode 100644 index 6a2ee23..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package DataAbstract_DBISAMDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - DBISAM Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - vcldb, - RemObjects_Core_D7, - DataAbstract_Core_D7, - db324d7r; - -contains - uDADBISAMDriver in 'uDADBISAMDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.res deleted file mode 100644 index 84eaa11..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_Glyphs.res deleted file mode 100644 index 3163762..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBISAMDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.bdsproj deleted file mode 100644 index 214c011..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_DBXDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - dbExpress Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dpk deleted file mode 100644 index ce917fe..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_DBXDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - dbExpress Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - dbexpress, - DataAbstract_Core_D10; - -contains - uDADBXDriver in 'uDADBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dproj deleted file mode 100644 index c86bf6d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.dproj +++ /dev/null @@ -1,114 +0,0 @@ - - - {1751c8c6-1385-4d36-8ac4-4e324ff1548e} - DataAbstract_DBXDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_DBXDriver_D10.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - dbExpress Driver - False - False - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_DBXDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dpk deleted file mode 100644 index 9b134cf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_DBXDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - dbExpress Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - dbexpress, - DataAbstract_Core_D10; - -contains - uDADBXDriver in 'uDADBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dproj deleted file mode 100644 index ff93693..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.dproj +++ /dev/null @@ -1,113 +0,0 @@ - - - {f8cd0c64-f9cd-46d4-8a1b-03d6a3efbdb3} - DataAbstract_DBXDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_DBXDriver_D10B.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - dbExpress Driver - False - False - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_DBXDriver_D10B.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.cfg deleted file mode 100644 index 0aa2cb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dof deleted file mode 100644 index d2de85f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - dbExpress Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dpk deleted file mode 100644 index d9265ff..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_DBXDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - dbExpress Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - dbexpress, - RemObjects_Core_D6, - DataAbstract_Core_D6; - -contains - uDADBXDriver in 'uDADBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.cfg deleted file mode 100644 index a290ad9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dof deleted file mode 100644 index 7f90f99..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - dbExpress Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dpk deleted file mode 100644 index a20bd62..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_DBXDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - dbExpress Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - dbexpress, - RemObjects_Core_D7, - DataAbstract_Core_D7; - -contains - uDADBXDriver in 'uDADBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_Glyphs.res deleted file mode 100644 index 3ac39af..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_DBXDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_Drivers_D6.bpg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_Drivers_D6.bpg deleted file mode 100644 index 4e931fa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_Drivers_D6.bpg +++ /dev/null @@ -1,61 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = DataAbstract_ADODriver_D7.bpl DataAbstract_DBXDriver_D7.bpl \ - DataAbstract_IBXDriver_D7.bpl DataAbstract_DiskDriver_D7.bpl DAADODrv.dad \ - DADBXDrv.dad DADiskDrv.dad DAIBXDrv.dad DataAbstract_IBODriver_D7.bpl \ - DataAbstract_SDACDriver_D7.bpl DataAbstract_ODACDriver_D7.bpl DAIBODrv.dad \ - DASDACDrv.dad -DataAbstract_SDACDriver_D6.bpl DataAbstract_ODACDriver_D6.bpl -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -DataAbstract_DiskDriver_D7.bpl: DataAbstract_DiskDriver_D7.dpk - $(DCC) - -DataAbstract_DBXDriver_D7.bpl: DataAbstract_DBXDriver_D7.dpk - $(DCC) - -DAADODrv.dad: DAADODrv.dpr - $(DCC) - -DADBXDrv.dad: DADBXDrv.dpr - $(DCC) - -DADiskDrv.dad: DADiskDrv.dpr - $(DCC) - -DAIBXDrv.dad: DAIBXDrv.dpr - $(DCC) - -DAIBODrv.dad: DAIBODrv.dpr - $(DCC) - -DASDACDrv.dad: DASDACDrv.dpr - $(DCC) - -DataAbstract_SDACDriver_D7.bpl: DataAbstract_SDACDriver_D7.dpk - $(DCC) - -DataAbstract_ODACDriver_D7.bpl: DataAbstract_ODACDriver_D7.dpk - $(DCC) - -DataAbstract_ADODriver_D7.bpl: DataAbstract_ADODriver_D7.dpk - $(DCC) - -DataAbstract_IBXDriver_D7.bpl: DataAbstract_IBXDriver_D7.dpk - $(DCC) - -DataAbstract_IBODriver_D7.bpl: DataAbstract_IBODriver_D7.dpk - $(DCC) - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.bdsproj deleted file mode 100644 index 239dc3d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_FIBDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - FIBPlus Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dpk deleted file mode 100644 index 6b4fd10..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_FIBDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - FIBPlus Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - FIBPlus2006; - -contains - uDAFIBDriver in 'uDAFIBDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dproj deleted file mode 100644 index 65b8356..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.dproj +++ /dev/null @@ -1,110 +0,0 @@ - - - {4aa60252-6f77-44b7-a171-e158f29374ca} - DataAbstract_FIBDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_FIBDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - FIBPlus Driver - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_FIBDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.res deleted file mode 100644 index 7b3c163..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dof deleted file mode 100644 index c96c6c8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - FIBPlus Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.289 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dpk deleted file mode 100644 index 0447c56..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_FIBDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - FIBPlus Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - FIBPlus6; - -contains - uDAFIBDriver in 'uDAFIBDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.res deleted file mode 100644 index f5602d3..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dof deleted file mode 100644 index ccdfd7b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - FIBPlus Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dpk deleted file mode 100644 index 8ecc150..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_FIBDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - FIBPlus Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - FIBPlus7; - -contains - uDAFIBDriver in 'uDAFIBDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.res deleted file mode 100644 index 892aed8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_Glyphs.res deleted file mode 100644 index d0e3d08..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_FIBDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.bdsproj deleted file mode 100644 index 8d350cb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.bdsproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - DataAbstract_IBDACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - CoreLabs IBDAC Driver - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.dpk deleted file mode 100644 index 032d677..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_MyDACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs IBDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - IBdac100, - RemObjects_Core_D10, - DataAbstract_Core_D10; - -contains - uDAIBDACDriver in 'uDAIBDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dpk deleted file mode 100644 index 632e6ac..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_IBDACDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs IBDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - IBdac105, - RemObjects_Core_D10, - DataAbstract_Core_D10; - -contains - uDAIBDACDriver in 'uDAIBDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dproj deleted file mode 100644 index 2d41a8e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.dproj +++ /dev/null @@ -1,72 +0,0 @@ - - - {0d0e2131-7a05-4241-9ca1-f98aea2eb9d9} - DataAbstract_IBDACDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_IBDACDriver_D10B.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - -FalseTrueFalseRemObjects Data Abstract - CoreLabs IBDAC DriverFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse10331252RemObjects Software1.0.0.0RemObjects SoftwareRemObjects SoftwareRemObjects Data Abstract1.0.0.0DataAbstract_IBDACDriver_D10B.dpk - - - - - MainSource - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.cfg deleted file mode 100644 index 51b688e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6" --O"..\..\Dcu\D6" --I"..\..\Dcu\D6" --R"..\..\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dof deleted file mode 100644 index 0cbf2a3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - CoreLabs IBDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dpk deleted file mode 100644 index 6975ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_IBDACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs IBDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - ibdac60, - RemObjects_Core_D6, - DataAbstract_Core_D6; - -contains - uDAIBDACDriver in 'uDAIBDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.res deleted file mode 100644 index 371f8db..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.cfg deleted file mode 100644 index 4c8862b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7" --O"..\..\Dcu\D7" --I"..\..\Dcu\D7" --R"..\..\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dof deleted file mode 100644 index f69663d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - CoreLabs IBDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dpk deleted file mode 100644 index 3fd2f36..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package DataAbstract_MyDACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs IBDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - ibdac70, - RemObjects_Core_D7, - DataAbstract_Core_D7; - -contains - uDAIBDACDriver in 'uDAIBDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.res deleted file mode 100644 index 371f8db..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_Glyphs.res deleted file mode 100644 index 3497984..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBDACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.bdsproj deleted file mode 100644 index 00d9b79..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_IBODriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - InterBase Objects Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dpk deleted file mode 100644 index 9ca1861..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_IBODriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Objects Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - ibxpress, - IBO40CRT_D10, - IBO40XRT_D10; - -contains - uDAIBODriver in 'uDAIBODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dproj deleted file mode 100644 index 0c1432b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.dproj +++ /dev/null @@ -1,112 +0,0 @@ - - - {8dcafd0d-ab98-4b7e-8b86-36dbc593e504} - DataAbstract_IBODriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_IBODriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - InterBase Objects Driver - False - True - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - DataAbstract_IBODriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dof deleted file mode 100644 index 533614b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dof +++ /dev/null @@ -1,77 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - InterBase Objects Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dpk deleted file mode 100644 index 64b89d7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_IBODriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Objects Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - ibxpress, - IBO40CRT_D6, - IBO40XRT_D6; - -contains - uDAIBODriver in 'uDAIBODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dof deleted file mode 100644 index d6dad20..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - InterBase Objects Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dpk deleted file mode 100644 index 1cb4d4d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_IBODriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Objects Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - ibxpress, - IBO40CRT_D7, - IBO40XRT_D7; - -contains - uDAIBODriver in 'uDAIBODriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_Glyphs.res deleted file mode 100644 index e4c8f7b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBODriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.bdsproj deleted file mode 100644 index ba3a5e6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_IBXDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - InterBase Express Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dpk deleted file mode 100644 index 33c10ef..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_IBXDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Express Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - ibxpress; - -contains - uDAIBXDriver in 'uDAIBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dproj deleted file mode 100644 index 73fec77..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.dproj +++ /dev/null @@ -1,110 +0,0 @@ - - - {c31471d9-f8e2-4e45-94a7-1264d8011587} - DataAbstract_IBXDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_IBXDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - InterBase Express Driver - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_IBXDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dof deleted file mode 100644 index 220d444..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - InterBase Express Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dpk deleted file mode 100644 index 98c5ffa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_IBXDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Express Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - ibxpress; - -contains - uDAIBXDriver in 'uDAIBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dof deleted file mode 100644 index 933b8c1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - InterBase Express Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dpk deleted file mode 100644 index 7c15b6b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_IBXDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - InterBase Express Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - ibxpress; - -contains - uDAIBXDriver in 'uDAIBXDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_Glyphs.res deleted file mode 100644 index 5d3bf7b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_IBXDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.bdsproj deleted file mode 100644 index f023fd3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_MyDACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - CoreLabs MyDAC Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.dpk deleted file mode 100644 index 7d302e2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_MyDACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs MyDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac100, - mydac100, - RemObjects_Core_D10, - DataAbstract_Core_D10; - -contains - uDAMyDACDriver in 'uDAMyDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dpk deleted file mode 100644 index 72b48fd..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_MyDACDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs MyDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac105, - mydac105, - RemObjects_Core_D10, - DataAbstract_Core_D10; - -contains - uDAMyDACDriver in 'uDAMyDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dproj deleted file mode 100644 index e3d788d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.dproj +++ /dev/null @@ -1,77 +0,0 @@ - - - {c13e3848-8048-4b6e-a5c5-b14de1a683a5} - DataAbstract_MyDACDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_MyDACDriver_D10B.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - -FalseTrueFalseRemObjects Data Abstract - CoreLabs MyDAC DriverFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse10331252RemObjects Software1.0.0.0RemObjects SoftwareRemObjects SoftwareRemObjects Data Abstract1.0.0.0DataAbstract_MyDACDriver_D10B.dpk - - - - - MainSource - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.cfg deleted file mode 100644 index 481e4c1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.cfg +++ /dev/null @@ -1,42 +0,0 @@ --$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 --N"..\..\dcu\d6" --LE"..\..\dcu\d6" --LN"..\..\dcu\d6" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_PLATFORM --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dof deleted file mode 100644 index 468bfc4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - CoreLabs MyDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dpk deleted file mode 100644 index 3886fc7..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_MYDACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs MyDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac60, - mydac60, - RemObjects_Core_D6, - DataAbstract_Core_D6; - -contains - uDAMyDACDriver in 'uDAMyDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.res deleted file mode 100644 index 371f8db..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dof deleted file mode 100644 index d99f972..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - CoreLabs MyDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dpk deleted file mode 100644 index a90f1f3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_MyDACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs MyDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac70, - mydac70, - RemObjects_Core_D7, - DataAbstract_Core_D7; - -contains - uDAMyDACDriver in 'uDAMyDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.res deleted file mode 100644 index 371f8db..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_Glyphs.res deleted file mode 100644 index 7e28db9..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MyDACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.bdsproj deleted file mode 100644 index 98d0a00..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_MySQLDACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - MicroOlap mySQL Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dpk deleted file mode 100644 index 835b724..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_MySQLDACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap mySQLDac Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - mySQLDAC10; - -contains - uDAMySQLDACDriver in 'uDAMySQLDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dproj deleted file mode 100644 index cc342ed..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.dproj +++ /dev/null @@ -1,110 +0,0 @@ - - - {8ba781c7-bf1c-49bf-a87d-d21f3a68fd91} - DataAbstract_MySQLDACDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_MySQLDACDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - MicroOlap mySQLDac Driver - False - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_MySQLDACDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.res deleted file mode 100644 index 7b3c163..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dof deleted file mode 100644 index e0035fa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dpk deleted file mode 100644 index 66a1e6c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_MySQLDACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap mySQLDac Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - mySQLDAC6; - -contains - uDAMySQLDACDriver in 'uDAMySQLDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.res deleted file mode 100644 index 892aed8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dof deleted file mode 100644 index f2d0c96..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dpk deleted file mode 100644 index 994ed6b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_MySQLDACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap mySQLDac Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - mySQLDAC7; - -contains - uDAMySQLDACDriver in 'uDAMySQLDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.res deleted file mode 100644 index 892aed8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_Glyphs.res deleted file mode 100644 index cd846aa..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_MySQLDACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.bdsproj deleted file mode 100644 index 05fd89b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.bdsproj +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - DataAbstract_NexusDBDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - Data Abstract - NexusDB Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\ - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - RemObjects Data Abstract - Core Library - RemObjects Data Abstract - IDE Package - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.cfg deleted file mode 100644 index ab68ed8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\" --O"..\" --I"..\" --R"..\" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dpk deleted file mode 100644 index dc81a99..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dpk +++ /dev/null @@ -1,48 +0,0 @@ -package DataAbstract_NexusDBDriver_D10; - -{$R *.res} -{$R 'uDANexusDBDriver.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'Data Abstract - NexusDB Driver'} -{$IMPLICITBUILD OFF} - -requires - RemObjects_Core_D10, - DataAbstract_Core_D10, - NexusDB107ll90, - NexusDB107sr90, - NexusDB107sd90, - NexusDB107sq90, - NexusDB107re90, - NexusDB107st90, - NexusDB107tn90, - NexusDB107pt90, - NexusDB107tw90, - NexusDB107db90, - NexusDB1071x90; - -contains - uDANexusDBDriver in 'uDANexusDBDriver.pas', - uDANexusDBDataTable in 'uDANexusDBDataTable.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dproj deleted file mode 100644 index 80b46ab..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.dproj +++ /dev/null @@ -1,129 +0,0 @@ - - - {f5368522-8742-4b69-a8b3-668ec242cc52} - DataAbstract_NexusDBDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_NexusDBDriver_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\ - ..\ - ..\ - ..\ - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\ - ..\ - ..\ - ..\ - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - Data Abstract - NexusDB Driver - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - - - - RemObjects Data Abstract - Core Library - RemObjects Data Abstract - IDE Package - - - DataAbstract_NexusDBDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.res deleted file mode 100644 index 941b7a7..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.cfg deleted file mode 100644 index c7cbecf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.cfg +++ /dev/null @@ -1,42 +0,0 @@ --$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 --N"..\Dcu\D6" --LE"..\Dcu\D6" --LN"..\Dcu\D6" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_PLATFORM --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dof deleted file mode 100644 index dcd6c63..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - NexusDB Driver - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dpk deleted file mode 100644 index c9d8f10..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.dpk +++ /dev/null @@ -1,45 +0,0 @@ -package DataAbstract_NexusDBDriver_D6; - -{$R *.res} -{$R 'uDANexusDBDriver.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'Data Abstract - NexusDB Driver'} -{$IMPLICITBUILD OFF} - -requires - RemObjects_Core_D6, - DataAbstract_Core_D6, - NexusDB107st60, - NexusDB107pt60, - NexusDB107tw60, - NexusDB107tn60, - NexusDB107re60, - NexusDB1071x60, - NexusDB107sq60, - NexusDB107db60; - -contains - uDANexusDBDriver in 'uDANexusDBDriver.pas', - uDANexusDBDataTable in 'uDANexusDBDataTable.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.res deleted file mode 100644 index 22eb4e7..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.cfg deleted file mode 100644 index d772b58..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.cfg +++ /dev/null @@ -1,46 +0,0 @@ --$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 --N"..\Dcu\D7" --LE"..\Dcu\D7" --LN"..\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dof deleted file mode 100644 index 3a86bcb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - NexusDB Driver - -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dpk deleted file mode 100644 index 42037f9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.dpk +++ /dev/null @@ -1,48 +0,0 @@ -package DataAbstract_NexusDBDriver_D7; - -{$R *.res} -{$R 'uDANexusDBDriver.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'Data Abstract - NexusDB Driver'} -{$IMPLICITBUILD OFF} - -requires - RemObjects_Core_D7, - DataAbstract_Core_D7, - NexusDB107ll70, - NexusDB107sr70, - NexusDB107sd70, - NexusDB107sq70, - NexusDB107re70, - NexusDB107st70, - NexusDB107tn70, - NexusDB107pt70, - NexusDB107tw70, - NexusDB107db70, - NexusDB1071x70; - -contains - uDANexusDBDriver in 'uDANexusDBDriver.pas', - uDANexusDBDataTable in 'uDANexusDBDataTable.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.res deleted file mode 100644 index 20e9bca..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_NexusDBDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.bdsproj deleted file mode 100644 index 01bb3ad..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_ODACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - CoreLabs ODAC Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.dpk deleted file mode 100644 index 78921ea..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_ODACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs ODAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac100, - RemObjects_Core_D10, - DataAbstract_Core_D10, - odac100; - -contains - uDAODACDriver in 'uDAODACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dpk deleted file mode 100644 index 985d92c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_ODACDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs ODAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac105, - RemObjects_Core_D10, - DataAbstract_Core_D10, - odac105; - -contains - uDAODACDriver in 'uDAODACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dproj deleted file mode 100644 index 3a77017..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.dproj +++ /dev/null @@ -1,87 +0,0 @@ - - - {4ed86b4c-3296-4ab5-b711-e264774d76b0} - DataAbstract_ODACDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_ODACDriver_D10B.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - -FalseTrueFalseRemObjects Data Abstract - CoreLabs ODAC DriverFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse10331252RemObjects Software1.0.0.0RemObjects SoftwareRemObjects SoftwareRemObjects Data Abstract1.0.0.0DataAbstract_ODACDriver_D10B.dpk - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.cfg deleted file mode 100644 index 0aa2cb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dof deleted file mode 100644 index e6a8cb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dof +++ /dev/null @@ -1,77 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - CoreLabs ODAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dpk deleted file mode 100644 index debd426..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_ODACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs ODAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac60, - RemObjects_Core_D6, - DataAbstract_Core_D6, - odac60; - -contains - uDAODACDriver in 'uDAODACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.cfg deleted file mode 100644 index a290ad9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dof deleted file mode 100644 index b6566eb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - CoreLabs ODAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dpk deleted file mode 100644 index 06e9940..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_ODACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs ODAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac70, - RemObjects_Core_D7, - DataAbstract_Core_D7, - odac70; - -contains - uDAODACDriver in 'uDAODACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_Glyphs.res deleted file mode 100644 index 5948a0e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ODACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.bdsproj deleted file mode 100644 index d3a6db6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_PostgresDACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - MicroOlap PostgresDAC Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.cfg deleted file mode 100644 index 9037d9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.dpk deleted file mode 100644 index 424def4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_PostgresDACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap PostgresDAC Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - PostgresDAC10; - -contains - uDAPostgresDACDriver in 'uDAPostgresDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.res deleted file mode 100644 index 7b3c163..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dpk deleted file mode 100644 index 2e80d04..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_PostgresDACDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap PostgresDAC Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10, - PostgresDAC11; - -contains - uDAPostgresDACDriver in 'uDAPostgresDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dproj deleted file mode 100644 index 8cb5674..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.dproj +++ /dev/null @@ -1,69 +0,0 @@ - - - - {777e54de-8166-497d-912a-60af105eb626} - DataAbstract_PostgresDACDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_PostgresDACDriver_D10B.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - -FalseTrueFalseRemObjects Data Abstract - MicroOlap PostgresDAC DriverFalseTrueFalseTrueFalse301361FalseFalseFalseFalseFalse10331252RemObjects Software3.0.1.361RemObjects SDK1.0.0.0DataAbstract_PostgresDACDriver_D10B.dpk - - - - - MainSource - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.res deleted file mode 100644 index 7b3c163..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.cfg deleted file mode 100644 index 05f9ec3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dof deleted file mode 100644 index e0035fa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dpk deleted file mode 100644 index b7803fe..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_PostgresDACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap PostgresDAC Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6, - PostgresDAC6; - -contains - uDAPostgresDACDriver in 'uDAPostgresDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.res deleted file mode 100644 index 892aed8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.cfg deleted file mode 100644 index 6784156..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dof deleted file mode 100644 index f2d0c96..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - ADOExpress/dbGo Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dpk deleted file mode 100644 index 37c6d74..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_PostgresDACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - MicroOlap PostgresDAC Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - PostgresDAC7; - -contains - uDAPostgresDACDriver in 'uDAPostgresDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.res deleted file mode 100644 index 892aed8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_Glyphs.res deleted file mode 100644 index fb43550..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_PostgresDACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.bdsproj deleted file mode 100644 index d05f343..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_SDACDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - CoreLabs SDAC Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.dpk deleted file mode 100644 index a7067e9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_SDACDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs SDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac100, - RemObjects_Core_D10, - sdac100, - DataAbstract_Core_D10; - -contains - uDASDACDriver in 'uDASDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dpk deleted file mode 100644 index 152eb67..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_SDACDriver_D10B; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs SDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac105, - RemObjects_Core_D10, - sdac105, - DataAbstract_Core_D10; - -contains - uDASDACDriver in 'uDASDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dproj deleted file mode 100644 index 88fb464..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.dproj +++ /dev/null @@ -1,78 +0,0 @@ - - - {bcb5ceeb-712c-4f85-83e3-6f57bb934c9f} - DataAbstract_SDACDriver_D10B.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_SDACDriver_D10B.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - False - False - False - False - False - False - - - Delphi.Personality - Package - -FalseTrueFalseRemObjects Data Abstract - CoreLabs SDAC DriverFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse10331252RemObjects Software1.0.0.0RemObjects SoftwareRemObjects SoftwareRemObjects Data Abstract1.0.0.0DataAbstract_SDACDriver_D10B.dpk - - - - - MainSource - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D10B.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.cfg deleted file mode 100644 index 0aa2cb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dof deleted file mode 100644 index a6cb4e4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dof +++ /dev/null @@ -1,77 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - CoreLabs SDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dpk deleted file mode 100644 index 6f3c3e6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_SDACDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs SDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - RemObjects_Core_D6, - DataAbstract_Core_D6, - dac60, - sdac60; - -contains - uDASDACDriver in 'uDASDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.cfg deleted file mode 100644 index a290ad9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dof deleted file mode 100644 index 42ca991..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - CoreLabs SDAC Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dpk deleted file mode 100644 index ca1d337..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package DataAbstract_SDACDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - CoreLabs SDAC Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - bdertl, - dac70, - RemObjects_Core_D7, - sdac70, - DataAbstract_Core_D7; - -contains - uDASDACDriver in 'uDASDACDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.res deleted file mode 100644 index ac3b612..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_Glyphs.res deleted file mode 100644 index d14c81c..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SDACDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.bdsproj deleted file mode 100644 index 4acf23e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_SQLiteDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - SQLite Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dpk deleted file mode 100644 index e678ec2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dpk +++ /dev/null @@ -1,37 +0,0 @@ -package DataAbstract_SQLiteDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - SQLite Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D10; - -contains - uDASQLiteDriver in 'uDASQLiteDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dproj deleted file mode 100644 index a3d8a1f..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.dproj +++ /dev/null @@ -1,113 +0,0 @@ - - - {17f81962-5ed1-4c36-bee9-ce79aab46e95} - DataAbstract_SQLiteDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_SQLiteDriver_D10.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - SQLite Driver - False - False - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_SQLiteDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.cfg deleted file mode 100644 index 4730510..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dof deleted file mode 100644 index 1fb3129..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dof +++ /dev/null @@ -1,76 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - SQLite Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dpk deleted file mode 100644 index 81be681..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.dpk +++ /dev/null @@ -1,37 +0,0 @@ -package DataAbstract_SQLiteDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - SQLite Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D6; - -contains - uDASQLiteDriver in 'uDASQLiteDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.cfg deleted file mode 100644 index 5cf57a8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dof deleted file mode 100644 index 94c4d85..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - SQLite Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.142 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dpk deleted file mode 100644 index 0265195..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.dpk +++ /dev/null @@ -1,37 +0,0 @@ -package DataAbstract_SQLiteDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - SQLite Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7; - -contains - uDASQLiteDriver in 'uDASQLiteDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_Glyphs.res deleted file mode 100644 index 9f2e224..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_SQLiteDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.bdsproj deleted file mode 100644 index 267567e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.bdsproj +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - DataAbstract_ZeosDriver_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - 1 - True - True - - - False - - False - False - False - True - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - Zeos Driver False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - - - - False - - - - - - False - - - - - - False - True - False - - - - $00000000 - - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.cfg deleted file mode 100644 index 207b254..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.cfg +++ /dev/null @@ -1,49 +0,0 @@ --$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 --H+ --W+ --M --$M16384,1048576 --K$00400000 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --O"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --I"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --R"..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dpk deleted file mode 100644 index fa6c962..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ZeosDriver_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Zeos Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - ZComponentDesign, - RemObjects_Core_D10, - DataAbstract_Core_D10; - -contains - uDAZeosDriver in 'uDAZeosDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dproj deleted file mode 100644 index 46b31cf..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.dproj +++ /dev/null @@ -1,115 +0,0 @@ - - - {a14f79c2-acbc-46d8-a339-5d13e7ddad81} - DataAbstract_ZeosDriver_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_ZeosDriver_D10.bpl - - - 7.0 - False - False - True - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - RELEASE - False - False - False - False - False - False - - - 7.0 - True - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - ..\..\Dcu\D10;..\..\..\RemObjects SDK for Delphi\Dcu\D10 - DEBUG - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - Zeos Driver - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 1.0.0.0 - - RemObjects Software - RemObjects Software - - RemObjects Data Abstract - 1.0.0.0 - - - DataAbstract_ZeosDriver_D10.dpk - - - - - - - MainSource - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.res deleted file mode 100644 index 6ef0ba1..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.cfg deleted file mode 100644 index 0aa2cb6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --O"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --I"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --R"..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dof deleted file mode 100644 index 1972ae0..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dof +++ /dev/null @@ -1,77 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitDeprecated=0 -UnitLibrary=0 -UnitPlatform=0 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - Zeos Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dpk deleted file mode 100644 index 95dba7c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ZeosDriver_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Zeos Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - ZComponentDesign, - RemObjects_Core_D6, - DataAbstract_Core_D6; - -contains - uDAZeosDriver in 'uDAZeosDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.cfg deleted file mode 100644 index a290ad9..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dof deleted file mode 100644 index cb208b6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=1 -V=1 -W=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - Zeos Driver - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software, Inc. -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright=RemObjects Software, Inc. -LegalTrademarks=RemObjects Software, Inc. -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments=http://www.remobjects.com - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dpk deleted file mode 100644 index 9cac616..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package DataAbstract_ZeosDriver_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE ON} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - Zeos Driver'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - RemObjects_Core_D7, - DataAbstract_Core_D7, - ZComponentDesign; - -contains - uDAZeosDriver in 'uDAZeosDriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.res deleted file mode 100644 index b26b84e..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_Glyphs.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_Glyphs.res deleted file mode 100644 index 92bfe89..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/DataAbstract_ZeosDriver_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADriverHtml.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADriverHtml.res deleted file mode 100644 index 8497330..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADriverHtml.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.cfg deleted file mode 100644 index 2d0f732..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --E"..\..\..\Bin" --LE"c:\program files\borland\delphi7\Projects\Bpl" --LN"c:\program files\borland\delphi7\Projects\Bpl" --w-SYMBOL_DEPRECATED --w-SYMBOL_PLATFORM --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.dpr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.dpr deleted file mode 100644 index 6282793..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.dpr +++ /dev/null @@ -1,15 +0,0 @@ -library DADOADrv; - -uses - ShareMem, - Forms, - SysUtils, - Classes, - uDADOADriver in 'uDADOADriver.pas'; - -{$E dad} - -{$R *.res} -{$R DADOADriverHtml.res} - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.res deleted file mode 100644 index 94795e8..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DADOADrv.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DOA.INC b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DOA.INC deleted file mode 100644 index dbb6770..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DOA.INC +++ /dev/null @@ -1,8 +0,0 @@ -{ ****************************************************************************** - - Contains defines for different DOA versions - - **************************************************************************** } - -// if using DOA 4.0 or higher activate this define -{$DEFINE DOA4} \ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.cfg deleted file mode 100644 index 9e5fc23..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.cfg +++ /dev/null @@ -1,40 +0,0 @@ --$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 --N"..\..\..\Dcu\D7" --LE"..\..\..\Dcu\D7" --LN"..\..\..\Dcu\D7" --Z --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dof deleted file mode 100644 index 8d7f5df..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dof +++ /dev/null @@ -1,117 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - Direct Oracle Access Driver - -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dpk deleted file mode 100644 index 959b541..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package DataAbstract_DOADriver_D7; - -{$R *.res} -{$R 'uDADOADriver.dcr'} -{$ALIGN 8} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS ON} -{$RANGECHECKS ON} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE ON} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'Data Abstract - Direct Oracle Access Driver'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - dbrtl, - DataAbstract_Core_D7, - doa40d7; - -contains - uDADOADriver in 'uDADOADriver.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.res deleted file mode 100644 index c467631..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/DataAbstract_DOADriver_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.dcr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.dcr deleted file mode 100644 index 3e5d914..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.dcr and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.pas deleted file mode 100644 index a12271a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/Unsupported/uDADOADriver.pas +++ /dev/null @@ -1,1174 +0,0 @@ -unit uDADOADriver; - -interface - -uses - DB, - Classes, - uROClasses, - uDAEngine, - uDAInterfaces, - uDAOracleInterfaces, - uDAUtils, - Oracle, - OracleData; - -type - - TDADOADriver = class(TDADriverReference) - end; - - TDAEDOADriver = class(TDAEDriver) - private - fTraceCallBack: TDALogTraceEvent; // UKO 26.09.2003 - protected - procedure DoSetTraceOptions(TraceActive: Boolean; TraceOptions: - TDATraceOptions; Callback: TDALogTraceEvent); override; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetConnectionClass: TDAEConnectionClass; override; - function GetDefaultCustomParameters: string; override; - function GetDescription: string; override; - function GetDriverID: string; override; - function GetMajVersion: byte; override; - function GetMinVersion: byte; override; - - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - end; - - TDAEDOAConnection = class(TDAECOnnection, IOracleConnection) - private - fSysObjects: Boolean; - fSchema: string; - fUsername: string; - function GetObjects(Schema, WhereClause: string): IROStrings; - function GetEncodedObjects(WhereClause: string): IROStrings; - function GetOracleSession: TOracleSession; - function GetStoredProcsInPackages(Schema: string): IROStrings; - function EncodeSchema(const Username, Schema: string; Contents: IROStrings): IROStrings; - function GetPrimaryKeys(const Schema, TableName: string): IROStrings; - function GetConstraintColumnsAsString(const AOwner, AConstraintName: string; out AColumns: string): string; - protected - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: Integer; override; - procedure DoCommitTransaction; override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetStoredProcedureParams(const aStoredProcedureName: string; - out Params: TDAParamCollection); override; - procedure DoGetTableFields(const aTableName: string; out Fields: - TDAFieldCollection); override; - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetViewFields(const aViewName: string; out Fields: - TDAFieldCollection); override; - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - procedure DoRollbackTransaction; override; - function GetDataSetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - property OracleSession: TOracleSession read GetOracleSession; - - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; - end; - - TDAEDOAQuery = class(TDAEDataSet, IDAMustSetParams, IOracleDataSet) - private - function LockModeDaToDoa(LockMode: TOracleLockMode): TLockingModeOptions; - function LockModeDoaToDa(LockMode: TLockingModeOptions): TOracleLockMode; - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function DoExecute: Integer; override; - function DoGetSQL: string; override; - procedure DoPrepare(Value: Boolean); override; - procedure DoSetSQL(const Value: string); override; - function GetLockMode: TOracleLockMode; - function GetOptions: TOracleOptions; - procedure SetLockMode(Value: TOracleLockMode); - procedure SetOptions(Value: TOracleOptions); - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - - TDAEDOAStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - private - fProcedureName: string; - procedure DoGetParams; - function DoGetParamsResult: TDAParam; - procedure DoSetSource; - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function Execute: Integer; override; - function GetStoredProcedureName: string; override; - procedure RefreshParams; override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure SetStoredProcedureName(const Name: string); override; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -{$INCLUDE DOA.INC} - -uses - SysUtils, - uDADriverManager, - uDARes, - {$IFDEF DOA4} - OracleMonitor, - {$ENDIF} - uDAMacroProcessors; - -const - NL = #13#10; - -type - TDADOAInternalConnection = class(TCustomConnection) - private - fOracleSession: TOracleSession; - protected - procedure DoConnect; override; - procedure DoDisconnect; override; - function GetConnected: Boolean; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property Session: TOracleSession read fOracleSession; - end; - - TOraPath = record - aScheme: string; - aPackage: string; - aObject: string; - end; - -var - _Driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDADOADriver]); -end; - -function GetDriverObject: IDADriver; -begin - if (_Driver = nil) then - _Driver := TDAEDOADriver.Create(nil); - Result := _Driver; -end; - -{ HELPERS ******************************************************************** } - -function CaseStringOf(const Value: string; const Args: array of string): - Integer; -begin - for Result := High(Args) downto 0 do - if AnsiSameStr(Value, Args[Result]) then - Break; -end; - -function ParamTypeOraToDa(const AName, AType: string): TDAParamType; -begin - Result := daptUnknown; - if AnsiSameStr(AType, 'IN') then - Result := daptInput; - if AnsiSameStr(AType, 'OUT') then - begin - if Length(AName) = 0 then - Result := daptResult - else - Result := daptOutput; - end; - if AnsiSameStr(AType, 'IN/OUT') then - Result := daptInputOutput; -end; - -function DataTypeOraToVcl(const AName: string; AScale: Integer): TFieldType; -begin - Result := ftUnknown; - case CaseStringOf(AName, ['BINARY_INTEGER', 'NUMBER', 'CHAR', 'NCHAR', - 'VARCHAR2', 'NVARCHAR2', 'DATE', 'BLOB', 'CLOB', 'NCLOB', 'PL/SQL BOOLEAN', - 'FLOAT']) of - 0, 1: - if AScale = 0 then - Result := ftInteger - else - Result := ftFloat; - 2, 3, 4, 5: Result := ftString; - 6: Result := ftDate; - 7: Result := ftBlob; - 8, 9: Result := ftMemo; - 10: Result := ftBoolean; - 11: Result := ftFloat; - end; -end; - -// 1) extended with DefaultScheme -// 2) if Scheme is not the Default and not SYS or SYSTEM then handle it as Packagename -// UKO 25.09.2003 - -function ExtractOraPath(AOraPath: string; ADefaultScheme: string): TOraPath; -var - PathList: TStringList; - Count: Integer; -begin - Result.aScheme := ''; - Result.aPackage := ''; - Result.aObject := ''; - PathList := TStringList.Create; - try - Count := ExtractStrings(['.'], [' '], PAnsiChar(AOraPath), PathList); - case Count of - 0: ; - 1: - begin - Result.aObject := AOraPath; - Result.aScheme := ADefaultScheme; - end; - 2: - begin - Result.aObject := PathList[1]; - Result.aScheme := PathList[0]; - - // The case of packages must be handled seperatly : - // UKO 25.09.2003 - if (AnsiCompareText(Result.aScheme, ADefaultScheme) <> 0) and - (AnsiCompareText(Result.aScheme, 'SYS') <> 0) and - (AnsiCompareText(Result.aScheme, 'SYSTEM') <> 0) then - begin - Result.aScheme := ADefaultScheme; - Result.aPackage := PathList[0]; - Result.aObject := PathList[1]; - end; - end; - else - begin - Result.aObject := PathList[PathList.Count - 1]; - Result.aPackage := PathList[PathList.Count - 2]; - Result.aScheme := PathList[PathList.Count - 3]; - end; - end; - UpperCase(Result.aScheme); - UpperCase(Result.aPackage); - UpperCase(Result.aObject); - finally - PathList.Free; - end; -end; - -function ProcessWhereExp(AName, AValue: string): string; -begin - Result := Format('%s =''%s''', [AName, AValue]); - if AValue = '' then - Result := Format('%s is null', [AName]); -end; - -function HandleSqlName(AParamName: string; AParamType: TDAParamType): string; -begin - Result := AParamName; - if AParamType = daptResult then - Result := 'result'; -end; - -function DataTypeDaToOra(AType: TDADataType): Integer; -const - Error = 'INTERNAL: not supported by DOA'; -begin - Result := otString; - case AType of - datUnknown: raise Exception.Create(Error); - datString: Result := otString; - datDateTime: Result := otDate; - datFloat: Result := otFloat; - datCurrency: Result := otFloat; - datAutoInc: raise Exception.Create(Error); - datInteger: Result := otInteger; - datLargeInt: Result := otInteger; - datBoolean: Result := otInteger; // needs a special handling - datMemo: Result := otClob; - datBlob: Result := otBlob; - end; -end; - -procedure SetDataSetParams(Params: TDAParamCollection; DataSet: TDataSet); -var - I: Integer; - Ds: TOracleDataSet; - ParamIndex, OraType: Integer; - Name: string; -begin - Ds := TOracleDataSet(DataSet); - if Ds.Variables.Count > Params.Count then - for I := Ds.VariableCount - 1 downto 0 do - if Params.ParamByName(Ds.VariableName(I)) = nil then - Ds.DeleteVariable(Ds.VariableName(I)); - - for I := 0 to Params.Count - 1 do - begin - ParamIndex := Ds.VariableIndex(Params[I].Name); - Name := HandleSqlName(Params[I].Name, Params[I].ParamType); - OraType := DataTypeDaToOra(Params[I].DataType); - // New Param - if ParamIndex = -1 then - Ds.DeclareVariable(Name, OraType); - // Changed Param - if (ParamIndex > -1) and (Ds.VariableType(ParamIndex) <> DataTypeDaToOra( - Params[I].DataType)) then - begin - Ds.DeleteVariable(Params[I].Name); - Ds.DeclareVariable(Name, OraType); - end; - // Set value - if Params[I].DataType = datBoolean then - Ds.SetVariable(Name, Integer(Params[I].Value)) - else - Ds.SetVariable(Name, Params[I].Value); - end; -end; - -procedure GetStoredProcParams( - OracleSession: TOracleSession; - const aStoredProcedureName: string; - out Params: TDAParamCollection); -var - Query: TOracleQuery; - OraPath: TOraPath; -const - SQL = 'select ' + NL + - ' argument_name, data_type, in_out, data_length, data_precision, data_scale ' + NL + - 'from all_arguments' + NL + - 'where' + NL + - ' ((in_out = ''IN'' and argument_name IS NOT NULL) or in_out = ''OUT'' or in_out = ''IN/OUT'') ' + NL + - ' and %s' + NL + - ' and %s' + NL + - ' and %s'; -begin - Params := TDAParamCollection.Create(nil); - Query := TOracleQuery.Create(nil); - try - OraPath := ExtractOraPath(aStoredProcedureName, OracleSession.LogonUsername); - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [ProcessWhereExp('owner', OraPath.aScheme), - ProcessWhereExp('package_name', OraPath.aPackage), - ProcessWhereExp('object_name', OraPath.aObject)]); - Query.Execute; - while not (Query.Eof) do - begin - with Params.Add() do - begin - ParamType := ParamTypeOraToDa(Query.Field(0), Query.Field(2)); - Name := HandleSqlName(Query.Field(0), ParamType); - DataType := VCLTypeToDAType(DataTypeOraToVcl(Query.Field(1), - Query.Field(5))); - Size := Query.Field(4); - end; - Query.Next; - end; - finally - Query.Close; - Query.Free; - end; -end; - -procedure AddStrings(Base, Addition: IROStrings); -var - I: Integer; -begin - for I := 0 to Addition.Count - 1 do - Base.Add(Addition[I]); -end; - -{ INTERNAL CLASSES *********************************************************** } -{ -*************************** TDADOAInternalConnection *************************** -} - -constructor TDADOAInternalConnection.Create(AOwner: TComponent); -begin - inherited; - fOracleSession := TOracleSession.Create(nil); -end; - -destructor TDADOAInternalConnection.Destroy; -begin - fOracleSession.Free; - inherited; -end; - -procedure TDADOAInternalConnection.DoConnect; -begin - fOracleSession.LogOn; -end; - -procedure TDADOAInternalConnection.DoDisconnect; -begin - fOracleSession.LogOff; -end; - -function TDADOAInternalConnection.GetConnected: Boolean; -begin - Result := fOracleSession.Connected; -end; - -{ PUBLIC CLASSES ************************************************************* } -{ -******************************** TDAEDOADriver ********************************* -} - -// ----------------------------------------------------------------------------- -// TDAEDOADriver.DoSetTraceOptions -// -// Tracing can only be enabled when DOA Version 4.0 or higher is used. -// UKO 26.09.2003 21:14:47 -// - -procedure TDAEDOADriver.DoSetTraceOptions(TraceActive: Boolean; TraceOptions: - TDATraceOptions; Callback: TDALogTraceEvent); -begin - inherited; - - if TraceActive then - begin - fTraceCallBack := Callback; - - {$IFDEF DOA4} - EnableMonitor; - {$ENDIF} - end - else - begin - fTraceCallBack := nil; - - {$IFDEF DOA4} - DisableMonitor; - {$ENDIF} - end; - -end; - -procedure TDAEDOADriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - List.Add('SysObjects=0,1'); -end; - -// ----------------------------------------------------------------------------- -// TDAEDOADriver.GetAvailableDriverOptions -// -// Only Database, Login and Custom needed. doServerName is not needed ! -// -// UKO 25.09.2003 17:51:31 -// - -function TDAEDOADriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - Result := [doDatabaseName, doLogin, doCustom]; -end; - -function TDAEDOADriver.GetConnectionClass: TDAEConnectionClass; -begin - Result := TDAEDOAConnection; -end; - -function TDAEDOADriver.GetDefaultCustomParameters: string; -begin - Result := 'SysObjects=0'; -end; - -function TDAEDOADriver.GetDescription: string; -begin - Result := 'Direct Oracle Access Driver'; -end; - -function TDAEDOADriver.GetDriverID: string; -begin - Result := 'DOA'; -end; - -// ----------------------------------------------------------------------------- -// TDAEDOADriver.GetMajVersion -// -// UKO 25.09.2003 17:45:47 -// - -function TDAEDOADriver.GetMajVersion: byte; -begin - Result := 1; -end; - -// ----------------------------------------------------------------------------- -// TDAEDOADriver.GetMinVersion -// -// UKO 25.09.2003 17:45:49 -// - -function TDAEDOADriver.GetMinVersion: byte; -begin - Result := 1; -end; - -{ -****************************** TDAEDOAConnection ******************************* -} - -function TDAEDOAConnection.CreateCustomConnection: TCustomConnection; -begin - Result := TDADOAInternalConnection.Create(nil); -end; - -// ----------------------------------------------------------------------------- -// TDAEDOAConnection.CreateMacroProcessor -// -// UKO 25.09.2003 18:43:06 -// - -function TDAEDOAConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - result := TOracleMacroProcessor.Create; -end; - -// ----------------------------------------------------------------------------- -// TDAEDOAConnection.DoApplyConnectionString -// -// Use Database instead of Server. Server has no meaning in Oracle -// UKO 25.09.2003 17:54:25 -// - -procedure TDAEDOAConnection.DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - - with aConnStrParser do begin - fUserName := UpperCase(UserID); - OracleSession.LogonDatabase := Database; - OracleSession.LogonUsername := fUserName; - OracleSession.LogonPassword := Password; - - fSchema := fUserName; - fSysObjects := AuxParams['SysObjects'] = '1'; - end; -end; - -function TDAEDOAConnection.DoBeginTransaction: Integer; -begin - // DOA doesn't have any special transaction starting routines - Result := 0; -end; - -procedure TDAEDOAConnection.DoCommitTransaction; -begin - OracleSession.Commit; -end; - -procedure TDAEDOAConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -type - TFKRec = - record - TableName: string; - ConstraintName: string; - ReferenzContraintName: string; - ReferenzOwner: string; - end; -var - lReferenzTable: string; - lQuery: TOracleQuery; - lColumns: string; - lFKArray: array of TFKRec; - lIndex: integer; - lfv: integer; -const - SQL = - 'SELECT constraint_name, table_name, r_owner, r_constraint_name FROM all_constraints' + #13#10 + - 'WHERE owner = ''%s''' + #13#10 + - 'AND constraint_type = ''R'''; -begin - inherited; // creates an empty collection - - OracleSession.LogOn; - lQuery := TOracleQuery.Create(nil); - try - lQuery.Session := OracleSession; - lQuery.SQL.Text := Format(SQL, [Uppercase(OracleSession.LogonUsername)]); - lQuery.Execute; - lIndex := 0; - - while not (lQuery.Eof) do - begin - SetLength(lFKArray, lIndex+1); - lFKArray[lIndex].ConstraintName := lQuery.FieldAsString('CONSTRAINT_NAME'); - lFKArray[lIndex].TableName := lQuery.FieldAsString('TABLE_NAME'); - lFKArray[lIndex].ReferenzOwner := lQuery.FieldAsString('R_OWNER'); - lFKArray[lIndex].ReferenzContraintName := lQuery.FieldAsString('R_CONSTRAINT_NAME'); - inc(lIndex); - lQuery.Next; - end; - finally - lQuery.Free; - end; - - if lIndex > 0 then - begin - for lfv := 0 to Length(lFKArray)-1 do - begin - with ForeignKeys.Add() do - begin - GetConstraintColumnsAsString(Uppercase(OracleSession.LogonUsername), lFKArray[lfv].ConstraintName, lColumns); - FKTable := lFKArray[lfv].TableName; - FKField := lColumns; - - lReferenzTable := GetConstraintColumnsAsString(lFKArray[lfv].ReferenzOwner, lFKArray[lfv].ReferenzContraintName, lColumns); - PKTable := lReferenzTable; - PKField := lColumns; - end; - end; - end; -end; - -procedure TDAEDOAConnection.DoGetStoredProcedureNames(out List: IROStrings); -begin - List := EncodeSchema(fUserName, fSchema, GetStoredProcsInPackages(fSchema)); - if fSysObjects then - begin - AddStrings(List, EncodeSchema(fUserName, 'SYS', GetStoredProcsInPackages('SYS'))); - AddStrings(List, EncodeSchema(fUserName, 'SYSTEM', GetStoredProcsInPackages('SYSTEM'))); - end; - AddStrings(List, GetEncodedObjects(' (object_type = ''FUNCTION'' or object_type = ''PROCEDURE'')')); -end; - -procedure TDAEDOAConnection.DoGetStoredProcedureParams(const - aStoredProcedureName: string; out Params: TDAParamCollection); -begin - OracleSession.LogOn; - GetStoredProcParams(OracleSession, aStoredProcedureName, Params); -end; - -procedure TDAEDOAConnection.DoGetTableFields(const aTableName: string; out - Fields: TDAFieldCollection); -var - Query: TOracleQuery; - OraPath: TOraPath; - PrimaryKey: IROStrings; -const - SQL = 'SELECT atc.column_name, atc.data_type, atc.data_length, atc.data_scale, atc.nullable, acc.comments' + #13#10 + - 'FROM all_tab_columns atc, all_col_comments acc' + #13#10 + - 'WHERE atc.owner = ''%s''' + #13#10 + - 'AND atc.table_name = ''%s''' + #13#10 + - 'AND acc.owner= atc.OWNER' + #13#10 + - 'AND acc.table_name=atc.TABLE_NAME' + #13#10 + - 'AND acc.column_name=atc.COLUMN_NAME'; - -begin - OracleSession.LogOn; - Fields := TDAFieldCollection.Create(nil); - Query := TOracleQuery.Create(nil); - try - OraPath := ExtractOraPath(aTableName, OracleSession.LogonUsername); - PrimaryKey := GetPrimaryKeys(OraPath.aScheme, OraPath.aObject); - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [OraPath.aScheme, OraPath.aObject]); - Query.Execute; - // if Query.Eof then ????? UKO 10.09.2003 - while not Query.Eof do - begin - with Fields.Add() do - begin - Name := Query.Field(0); - InPrimaryKey := (PrimaryKey.IndexOf(Name) > -1); - DataType := VCLTypeToDAType(DataTypeOraToVcl(Query.Field(1), - Query.Field(3))); - Size := Query.Field(2); - - // UKO 17.09.2004 get additional information - Required := (Query.FieldAsString(4) = 'N'); - Description := Query.FieldAsString(5); - // TODO: Defaultvalue - end; - Query.Next; - end; - Query.Close; - finally - Query.Free; - end; -end; - -procedure TDAEDOAConnection.DoGetTableNames(out List: IROStrings); -begin - List := GetEncodedObjects(' (object_type = ''TABLE'')'); -end; - -procedure TDAEDOAConnection.DoGetViewFields(const aViewName: string; out - Fields: TDAFieldCollection); -begin - DoGetTableFields(aViewName, Fields); -end; - -procedure TDAEDOAConnection.DoGetViewNames(out List: IROStrings); -begin - List := GetEncodedObjects(' (object_type = ''VIEW'')'); -end; - -procedure TDAEDOAConnection.DoRollbackTransaction; -begin - TOracleSession(inherited ConnectionObject).Rollback; -end; - -function TDAEDOAConnection.EncodeSchema(const Username, Schema: string; - Contents: IROStrings): IROStrings; -var - I: Integer; -begin - Result := Contents; - if Username <> Schema then // scheme only when different then user UKO 25.09.2003 - for I := 0 to Result.Count - 1 do - Result[I] := Schema + '.' + Result[I]; -end; - -function TDAEDOAConnection.GetConstraintColumnsAsString(const AOwner, - AConstraintName: string; out AColumns: string): string; -var - Query: TOracleQuery; -const - SQL = - 'SELECT Table_name, Column_Name FROM All_Cons_Columns' + #13#10 + - 'WHERE owner = ''%s''' + #13#10 + - 'AND constraint_name = ''%s''' + #13#10 + - 'ORDER BY position'; -begin - Result := ''; - AColumns := ''; - OracleSession.LogOn; - Query := TOracleQuery.Create(nil); - try - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [AOwner, AConstraintName]); - Query.Execute; - - while not (Query.Eof) do - begin - Result := Query.FieldAsString('TABLE_NAME'); - AColumns := AColumns + Query.FieldAsString('COLUMN_NAME'); - Query.Next; - if not Query.Eof then - AColumns := AColumns + ','; - end; - Query.Close; - finally - Query.Free; - end; -end; - -function TDAEDOAConnection.GetDataSetClass: TDAEDatasetClass; -begin - Result := TDAEDOAQuery; -end; - -function TDAEDOAConnection.GetEncodedObjects( - WhereClause: string): IROStrings; -begin - Result := TROStrings.Create; - AddStrings(Result, EncodeSchema(fUserName, fSchema, GetObjects(fSchema, WhereClause))); - if fSysObjects then - begin - AddStrings(Result, EncodeSchema(fUserName, 'SYS', GetObjects('SYS', WhereClause))); - AddStrings(Result, EncodeSchema(fUserName, 'SYSTEM', GetObjects('SYSTEM', WhereClause))); - end; -end; - -function TDAEDOAConnection.GetObjects(Schema, WhereClause: string): IROStrings; -var - Query: TOracleQuery; -const - SQL = 'select object_name as object' + NL + - 'from all_objects where owner = ''%s'' and %s'; - -begin - Result := TROStrings.Create; - OracleSession.LogOn; - Query := TOracleQuery.Create(nil); - try - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [Schema, WhereClause]); - Query.Execute; - - while not (Query.Eof) do - begin - Result.Add(Query.Field(0)); - Query.Next; - end; - Query.Close; - finally - Query.Free; - end; -end; - -function TDAEDOAConnection.GetOracleSession: TOracleSession; -begin - Result := TDADOAInternalConnection(inherited ConnectionObject).Session; -end; - -function TDAEDOAConnection.GetPrimaryKeys(const Schema, - TableName: string): IROStrings; -var - Query: TOracleQuery; -const - // this statement doesn´t work properly if the table is in more then one - // database users available (e.g. two different versions of the database user) - // In this case duplicated results are generated and performance decreases cause - // of a full table scan on obj$ - // Solution: link also owner and tablename ! - // UKO 23.09.2003 - - // - // SQL = 'select' + NL + - // ' a.column_name' + NL + - // 'from' + NL + - // ' all_cons_columns a, all_constraints b' + NL + - // 'where a.constraint_name = b.constraint_name' + NL + - // ' and b.constraint_type = ''P''' + NL + - // ' and b.owner = ''%s''' + NL + - // ' and b.table_name = ''%s'''; - - SQL = 'select' + NL + - ' a.column_name' + NL + - 'from' + NL + - ' all_cons_columns a, all_constraints b' + NL + - 'where a.owner = b.owner' + NL + - ' and a.table_name = b.table_name' + NL + - ' and a.constraint_name = b.constraint_name' + NL + - ' and b.constraint_type = ''P''' + NL + - ' and b.owner = ''%s''' + NL + - ' and b.table_name = ''%s'''; -begin - Result := TROStrings.Create; - Query := TOracleQuery.Create(nil); - try - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [UpperCase(Schema), UpperCase(TableName)]); - Query.Execute; - while not (Query.Eof) do - begin - Result.Add(Query.Field(0)); - Query.Next; - end; - finally - Query.Free; - end; -end; - -function TDAEDOAConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - Result := TDAEDOAStoredProcedure; -end; - -// ----------------------------------------------------------------------------- -// TDAEDOAConnection.GetStoredProcsInPackages -// -// UKO 25.09.2003 11:48:08 -// - -function TDAEDOAConnection.GetStoredProcsInPackages(Schema: string): IROStrings; -var - Query: TOracleQuery; -const - SQL = 'select distinct package_name || ''.'' || object_name as proc ' + NL + - 'from all_arguments' + NL + - 'where package_name is not null and owner = ''%s'''; - -begin - Result := TROStrings.Create; - OracleSession.LogOn; - Query := TOracleQuery.Create(nil); - try - Query.Session := OracleSession; - Query.SQL.Text := Format(SQL, [Schema]); - Query.Execute; - while not (Query.Eof) do - begin - Result.Add(Query.Field(0)); - Query.Next; - end; - finally - Query.Close; - Query.Free; - end; -end; - -// ----------------------------------------------------------------------------- -// TDAEDOAConnection.IdentifierNeedsQuoting -// -// Default behavior not enough, as '$' and '.' are also a valid character which doesn´t need quoting -// -// UKO 25.09.2003 11:48:13 -// - -function TDAEDOAConnection.IdentifierNeedsQuoting(const iIdentifier: string): boolean; -var - i: integer; -begin - result := false; - if IdentifierIsQuoted(iIdentifier) then - exit; - for i := 1 to Length(iIdentifier) do - begin - if not (iIdentifier[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '$', '.']) then - begin - result := true; - exit; - end; - end; -end; - -{ -********************************* TDAEDOAQuery ********************************* -} - -function TDAEDOAQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - Result := TOracleDataSet.Create(nil); - TOracleDataSet(Result).ReadOnly := True; - TOracleDataSet(Result).Session := TDAEDOAConnection( - aConnection).OracleSession; -end; - -function TDAEDOAQuery.DoExecute: Integer; -begin - TOracleDataSet(DataSet).ExecSQL; - Result := -1; -end; - -function TDAEDOAQuery.DoGetSQL: string; -begin - Result := TOracleDataSet(Dataset).SQL.Text; -end; - -procedure TDAEDOAQuery.DoPrepare(Value: Boolean); -begin - TOracleDataSet(DataSet).Optimize := Value; -end; - -procedure TDAEDOAQuery.DoSetSQL(const Value: string); -begin - TOracleDataSet(Dataset).SQL.Text := Value; -end; - -function TDAEDOAQuery.GetLockMode: TOracleLockMode; -begin - Result := LockModeDoaToDa(TOracleDataSet(Dataset).LockingMode) -end; - -function TDAEDOAQuery.GetOptions: TOracleOptions; -begin - // Can't be implemented -end; - -procedure TDAEDOAQuery.GetParamValues(Params: TDAParamCollection); -begin - // -end; - -function TDAEDOAQuery.LockModeDaToDoa(LockMode: TOracleLockMode): - TLockingModeOptions; -begin - Result := lmNone; - case LockMode of - olmLockImmediate: Result := lmLockImmediate; - olmLockDelayed: Result := lmLockDelayed; - end; -end; - -function TDAEDOAQuery.LockModeDoaToDa(LockMode: TLockingModeOptions): - TOracleLockMode; -begin - Result := olmNone; - case LockMode of - lmLockImmediate: Result := olmLockImmediate; - lmLockDelayed: Result := olmLockDelayed; - end; -end; - -procedure TDAEDOAQuery.SetLockMode(Value: TOracleLockMode); -begin - TOracleDataSet(Dataset).LockingMode := LockModeDaToDoa(Value); -end; - -procedure TDAEDOAQuery.SetOptions(Value: TOracleOptions); -begin - // Can't be implemented -end; - -procedure TDAEDOAQuery.SetParamValues(Params: TDAParamCollection); -begin - SetDataSetParams(Params, DataSet); -end; - -{ -**************************** TDAEDOAStoredProcedure **************************** -} - -function TDAEDOAStoredProcedure.CreateDataset(aConnection: TDAEConnection): - TDataset; -begin - Result := TOracleDataSet.Create(nil); - TOracleDataSet(Result).Session := TDAEDOAConnection( - aConnection).OracleSession; -end; - -procedure TDAEDOAStoredProcedure.DoGetParams; -var - Ds: TOracleDataSet; - I: Integer; - Params: TDAParamCollection; -begin - Params := GetParams; - Ds := TOracleDataSet(DataSet); - for I := 0 to Params.Count - 1 do - if Params[I].ParamType in [daptOutput, daptInputOutput, daptResult] then - Params[I].Value := Ds.GetVariable(HandleSqlName(Params[I].Name, - Params[I].ParamType)); -end; - -function TDAEDOAStoredProcedure.DoGetParamsResult: TDAParam; -var - I: Integer; - Params: TDAParamCollection; -begin - Result := nil; - Params := GetParams; - for I := 0 to Params.Count - 1 do - if Params[I].ParamType = daptResult then - begin - Result := Params[I]; - Exit; - end; -end; - -procedure TDAEDOAStoredProcedure.DoSetSource; -var - Ds: TOracleDataSet; - I: Integer; - Params: TDaParamCollection; - ParamResult: TDAParam; - ParamsExist: Boolean; - -const - SQLHeader = 'declare' + NL + - ' result boolean;' + NL + - 'begin' + NL; - SQLHandleBoolean = ':result := sys.diutil.bool_to_int(function_result);'; - SQLFooter = 'end;'; - - function CaseOfParam(const AParamResult: TDAParam): Integer; - begin - Result := 0; - if AParamResult <> nil then - if AParamResult.DataType = datBoolean then - Result := 1 - else - Result := 2; - end; - - function ConvertParam(const AName: string; const ADataType: TDADataType): - string; - begin - if ADataType = datBoolean then - begin - Result := Format('%s => sys.diutil.int_to_bool(:%s), ', [AName, AName]); - Exit; - end; - Result := Format('%s => :%s, ', [AName, AName]); - end; - - function TrimSqlParams(const SQL: string): string; - var - S: string; - begin - S := SQL; - Delete(S, Length(S) - 3, 4); - Result := S; - end; - -begin - Ds := TOracleDataSet(DataSet); - Params := GetParams; - ParamResult := DoGetParamsResult; - // PL/SQL Block - header + stored proc name - Ds.SQL.Text := SQLHeader; - case CaseOfParam(ParamResult) of // 0 = no result, 1 = boolean, 2 = misc - 0: Ds.SQL.Add(Format(' %s(', [fProcedureName])); - 1: Ds.SQL.Add(Format(' result := %s(', [fProcedureName])); - 2: Ds.SQL.Add(Format(' :result := %s(', [fProcedureName])); - end; - // PL/SQL Block - params if any; - ParamsExist := False; - for I := 0 to Params.Count - 1 do - if (Params.Items[I] <> ParamResult) then - begin - ParamsExist := True; - Ds.SQL.Add(ConvertParam(Params[I].Name, Params[I].DataType)); - end; - // PL/SQL Block - params - remove the last half-stop - if ParamsExist then - Ds.SQL.Text := TrimSQLParams(Ds.SQL.Text); - Ds.SQL.Add(');'); - // PL/SQL Block - special treatment for functions with boolean results - if ParamResult.DataType = datBoolean then - Ds.SQL.Add(SQLHandleBoolean); - Ds.SQL.Add(SQLFooter); -end; - -function TDAEDOAStoredProcedure.Execute: Integer; -var - Params: TDAParamCollection; -begin - Params := GetParams; - SetDataSetParams(Params, DataSet); - DoSetSource; - TOracleDataSet(DataSet).ExecSQL; - DoGetParams; - Result := -1; -end; - -function TDAEDOAStoredProcedure.GetStoredProcedureName: string; -begin - Result := fProcedureName; -end; - -procedure TDAEDOAStoredProcedure.RefreshParams; -var - OraParams, DaParams: TDAParamCollection; -begin - GetStoredProcParams(TOracleDataSet(DataSet).Session, fProcedureName, - OraParams); - DaParams := GetParams; - DaParams.AssignParamCollection(OraParams); -end; - -procedure TDAEDOAStoredProcedure.SetParamValues(Params: TDAParamCollection); -begin - SetDataSetParams(Params, DataSet); -end; - -procedure TDAEDOAStoredProcedure.SetStoredProcedureName(const Name: string); -begin - fProcedureName := Name; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _Driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNil(_Driver); - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asgsqlite3.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asgsqlite3.pas deleted file mode 100644 index 6220b65..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asgsqlite3.pas +++ /dev/null @@ -1,5560 +0,0 @@ -// To enable debugging remove the dot. Do NOT forget to re-insert before -// deploying to production since this feature will slow down this component -// significantly -{.$DEFINE DEBUG_ENABLED } // Enables Debug information - {.$DEFINE DEBUG_VERY_LOUD} - {.$DEFINE DEBUG_LOUD} - -// Disable this for ignoring IProvider interface (for D4) -{$DEFINE IPROVIDER} - -// enable this if you want to link the SQLite library statically. (No need for dll) -{.$DEFINE SQLite_Static} - -{$I asqlite_def.inc} - -unit ASGSQLite3; -{*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -Author: Albert Drent -Description: SQLite 3 DataSet class (encapsulates the Delphi DataSet Class) - based upon the asqlite version for sqlite 2 -Target: Delphi 4, 5, 6 and 7; Delphi 2005; Borland C++ 5 and 6 -Creation: November 2003 -Version: 2006.03.D Stable -EMail: a.drent@aducom.com (www.aducom.com/sqlite, sqlite.aducom.com) -Support: support@aducom.com (supportforum on www.aducom.com) - Please post any questions, remarks etc. to the support forum. We - useually answer questions within days. - Unsollicited mail to support will be intercepted by our spamfilters - and probabely never be heard of. -Legal issues: Copyright (C) 2003..2006 by Aducom Software - - Aducom Software - Eckhartstr 61 - 9746 BN Groningen - Netherlands - - Open Source licence (BSD: http://www.opensource.org/licenses/bsd-license.php) - - Copyright (c) 2006, Aducom Software - All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - Neither the name of Aducom Software nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - -Acknowledgement - These components were written for our own needs. Since SQLite is - a freeware component we like to donate this one to the community - too. Parts of the code is adapted from several sources, but mainly - from a sample and the vcl sources of Borland itself. And, of - course, we did a lot and still are... -To Do - A lot... - We are very busy, but will develop on our needs. If anyone can - contribute, please feel welcome. Alter the source with lots of comment - and mail it to me. If it works right I will add it to the official - source and add your credit here below. Before you start, please - put a request on the forum. It would be a shame and a waste of your - time if you develop something which already is... and I need to set - the spamfilter right to let you pass through. -History: - Nov 8, 2003 First alpha release 1.0.A Albert Drent (c) 2003 Aducom Software - Nov 11, Release alpha 1.0.B Albert Drent (c) 2003 Aducom Software - - added 'param' support - - fixed null pointer assignment - - added support for partial select (limit / offset) - Nov 12, Release alpha 1.0.C Albert Drent (c) 2003 Aducom Software - - fixed bug in update - - support for events - - added 'RowsAffected' - Nov 16, Release beta 1.0.D Albert Drent (c) 2003 Aducom Software - - fixed 0 resultlist after any ExecSQL usage - - added Transaction support - Nov 24, Release beta 1.0.E Albert Drent (c) 2003 Aducom Software - - StartTransaction will open database if it is'nt already open - - Changed resultset method - - Added property editor for table names - - Added GetTableNames function to TASQLite3Database - - Added GetIndexNames function to TASQLite3Database - - Added Open and Close function to TASQLite3Database - - Added AutoCommit property to TDataSet descendants - - Split of source in designtime and runtime package - Dec 15, Release beta 1.0.F Albert Drent (c) 2003 Aducom Software - - Optimized code for speed - - Added support for quering databases - - Added property for base directory (default dir) TDatabase - - Preparations for mastersets and TUpdateSQL (not functional yet) - - Solved GPF on stringfields - - Solved hangup of Delphi when developing - - Solved invalid pointer operation bug while developing - Jan 11 2004, Release beta 1.0.G Albert Drent (c) 2003, 2004 Aducom Software - - Fixed GetTableNames Bug as reported on forum - - Solved some minor bugs, several code optimizations - - Added 'getfieldnames' procedure to asqlitedb - - Added component asqlitepragma for adjustments to sqlite behaviour - - Added several property editors to smooth things up - - Added component asqliteupdatesql - - Added master-detail support for TASQLite3table (not fully tested yet) - - Added master-detail support for TASQLite3query (not fully tested yet) - - Added filter property to TASQLite3Query - Jan 18, 2004, Release beta 1.0.H Albert Drent (c) 2003, 2004 Aducom Software - - Added TASQLite3Log component - - Support for autoincrement (index primary key) - Jan 22, 2004, Release beta 1.0.I Albert Drent (c) 2003, 2004 Aducom Software - - Solved bug, causing the user to open database first (where - it should be opened automatically after open query or table. - - datatype text is now treated as a string of max 255 chars. - - added samples - - added preparations for import and export component - Jan 26, 2004, Release beta 1.1.A Albert Drent (c) 2003, 2004 Aducom Software - - Support for master-detail - - Support for TUpdateSQL - Feb 05, 2004, Release beta 1.1.B Albert Drent (c) 2003, 2004 Aducom Software - - Solved small bug: basequery is closed on querychanged event - - Solved small bug: basequery is closed on filter change event - - Solved bug in design package, by Marc Wetzel(forum) - - Notification of BaseQuery removed and added to SQLiteTable - Feb 24, 2004 Release alpha 1.2.A Albert Drent (c) 2003, 2004 Aducom Software - - Locate implemented, working on resultset! - - Some small bugfixes - Feb 25, 2004 Release alpha 1.2.B Albert Drent (c) 2003, 2004 Aducom Software - - Reformat of source (Marc Wetzel) - - All the debug directives (Marc Wetzel) - The debug stuff is added to be able to do more debugging on the - components. At this stage there are still some isues which are - hard to be find. - - Some small bugfixes (Marc Wetzel) - - Solved bug with dblookupcombobox, lookup is now shown (variant error) - - Derived more classes from TDataset to solve compatibility isues with - 3rd party software (DevExpress) - - Start of port to lower Delphi versions (designintf vs dsgnintf) - March 25, 2004 Release alpha 1.2.C Albert Drent (c) 2003, 2004 Aducom Software - - Added property editor for database directory - - Added property editor for sqlitedll directory - - Bugix needed for release 13 of SQLite.dll (is compatible to lower - dll versions) - - More changes to solve compatibility problem with DevExpress (Plato of DevExpress) - - Solved some compatibility isues with TDataSet - - Solved some compatibility isues with the newest SQLite version (2.8.12) - - Added/modified, GetFieldNames, GetPrimaryKeys - - Added GetTableInfo - - Added StartTransaction and Commit and RollBack to TTable and TQuery - This will create a more readable source: - db.starttranaction; - q.somesql - db.commit - becomes now - with q do begin - starttransaction; - somesql; - try - commit; - except - rollback; - end; - end; - - Changed cleanup of components in notification (TheSneak) - - Fixed potential AV (so far not reported) - - Changed escape of string characters (TheSneak) - (might cause incompatibility of older components if you use single - quote in data) - - Fixed question mark problem in data (TheSneak) - April 7, 2004 - - Fixed bug GetxxxxNames, moved pragma (reported by Martini) - - Improved some performance isues (TheSneak) - - Added GetTableIndexNames(by Martini) - - Added support for 'small text blobs', it isn't the real stuff but - limited to 20000 characters. - - Fixed another compatibility isue with DevExpress - April 8, 2004 - - Fixed EnableControls (TheSneak) - - Fixed memoryleak ASQLiteQuery.InternalPost (TheSneak) - - Downgraded some stuff for support Delphi 4/5 - - Updated Locate function (by Joel hottcha@juno.com) - April 14, 2004 Release beta 1.2.C Albert Drent (c) 2003, 2004 Aducom Software - - RawSQL property implemented (supresses parsing of sql data) - - published csv release as 1.2.C beta - April 15, 2004 Release alpha 2.0.A Albert Drent (c) 2003, 2004 Aducom Software - - support for real clobs - - added fieldtype numeric(x.y) - - Implement RawSQL property in TASQLite3Query - May 26, 2004 Release beta 2.0.B Albert Drent (c) 2003, 2004 Aducom Software - - new procedure: GetGetLastInsertRow - - new component: TASQLite3InlineSQL, to be used to contain all - kinds of pre-stored sql statements. I.e. for creation of tables in case - of an in-memory database, or a local storage for sql statements to - simplify sourcecode. In this release it is bound to the ASQLiteDB component. - - new component TASQLite3Output, to be used to generate csv files, - xml and html documents. It is NOT bound to ASQLite components but - to a datasource (containing any database connection) - - implemented bound as described by minhl on the forum - - implemented IsNull as described by Kazooie64 on the forum - - implemented a uniform datetime implementation by jpierce - May, 26, 2004 Release beta 2.0.B Albert Drent (c) 2003, 2004 Aducom Software - - A few bugfixes - June, 15, 2004 Release beta 2.0.C Albert Drent (c) 2003, 2004 Aducom Software - - A few bugfixes, thanks to Tzvetan - July 2004, Release 1.0 based upon source sqlite version 2 components - Okt 11, 2004 Release beta 1.0.B Albert Drent (c) 2003, 2004 Aducom Software - - Callback routine for retieving data replaced by new - by sqlite prefered way. - - Some bugfixes - - Support for calculated fields - - Support for real blobs - okt 14, 2004 Release beta 1.0.C Albert Drent (c) 2003, 2004 Aducom Software - - support for locate lo-partial key (thanks to Bob Mitchel) - - some bugfixes (thanks to Oleg Lembievskiy marked by OL) - - some other bugfixes and code cleanup - okt 18, 2004 - - re-introduced sqlite_version - - added transactiontype property(SQLite3 feature) - - added transaction procedures to db and basequery - StartDeferredTransaction; - StartImmediateTransaction; - StartExclusiveTransaction; - nov 1, 2004 - - bugfix (thanx to James) for null pointer assignment on null values - nov 8, 2004 - - fixed introduced bug in result preventing new records to appear - right in dbgrids. - nov 17, 2004 - - fixed small bug showing rubish on empty tables - Nov 17, 2004 by Mike Dijkema - - filter bug FPrepared := FPrepared + ' and ' + Filter adds ' and filterexpr' to the end of the sql statement - this created errors with 'order by' 'limit' 'union' 'having' etc.. - filtering changed to that it works like the ADO components and union and other statements - now 'select a from b union select c from d' and 'select a from b order by c' works with a filter - - filter bug 'select a_where from b' removed - jan 11, 2005 Release 2005.01.A Albert Drent (c) 2003 .. 2005 Aducom Software - - fixed bug causing fielddescription to be deleted incorrectly - - fixed bug causing errormessage on null values in integer fields - - added sqlcursor property - - modifications to support Delphi 2005 - - implemented all transactiontypes - - changed all showmessages to raise event types - - added readonly property - feb 21, 2005 Release 2005.02.A Albert Drent (c) 2003 .. 2005 Aducom Software - - some bugfixes, code optimization - - first implementation of IProvider support (thanks to - Rocco Barbaresco) - - changed default SDB extension to SQB - - support for multi sql statements in one string - - added master-detail functionality on insert of - new child record (key-data is copied) - - added compatibility with SQLite3.dll version 3.1.2 - feb 28, 2005 Release 2005.02.B Albert Drent (c) 2003 .. 2005 Aducom Software - - bugfix for filter on master-detail. Setting filtered will - not automatical open table any more. Causes error on closed - tables in master-detail otherwise. - mar 7, 2005 Release 2005.03.A Albert Drent (c) 2003 .. 2005 Aducom Software - - bugfix for memofields causing crlf to be handled wrongly - - added TableExists function ('// DI Ralf http://www.yunqa.de/delphi/) - - some code optimizations ('// DI Ralf http://www.yunqa.de/delphi/) - - solved decimalpoint bug ('// DI Ralf http://www.yunqa.de/delphi/) - mar 10, 2005 Release 2005.03.B Albert Drent (c) 2003 .. 2005 Aducom Software - - more code optimizations - - removed Forms from uses list to decrease codesize of console app's - - changed cursorstyle handling - - changed exception handling - mar 29, 2005 Release 2005.03.C Albert Drent (c) 2003 .. 2005 Aducom Software - - removed default pragma's for tables - - implemented another solution for tableheader duplicates (mirko) - - implemented user version - - solved minor bug in GetTableInfo - april 5, 2005 Release 2005.04.A Albert Drent (c) 2003 .. 2005 Aducom Software - - fixed bug conceirning in-memory database (Bert Verhees) - - fixed precompiler settings for Delhpi 7 (Dak) - mai 31, 2005 Release 2005.05.A Albert Drent (c) 2003 .. 2005 Aducom Software - - UTF8 support (thanks to Bilgehan KUYUCU) - - Statical linking (thanks to Gianpaolo Avallone (GPA) - - Some bugfixes and enhancements by Albert, Gianpaolo and others. - august 1, 2005 Release 2005.08.A - - UTF8 support to be set by property, solving a 'locale' problem. - - Bugfix for null strings - - Fix for static linking - - Solved bug in updatesql, fieldlist is now setup correctly - - solved bug in updatesql, inserting null values and constants. - august 2, 2005 Release 2005.08.B - - first steps towards support utf16 (by Kevin Zhang) - - implemented another locate routine (by jbannon) - - changed treatment of datatype text. It is considered 'longtext' now. - added 'shorttext' datatype which replaces the original 'text' datatype. - The datatype text is now compatible with sqlite3, mysql and perhaps - others. - sept 1, 2005 Release 2005.09.A - - code optimizations by Kevin Lu, Aducom - sept 1, 2005 Release 2005.09.B - - candidate fix for decimal point problem by Jordi March - sept 20, 2005 Release 2005.09.C - - implementation of unidirectional dataset. This improves - performance on large resultsets to the optimum. However - the dataset is readonly by default, using inserts/deletes and - updates will result in a 'database table is locked' error. - sept 21, 2005 Release 2005.09.D - - bugfix for decimal point routine by Kevin Lu - sept 29, 2005 Release 2005.09.E - - bugfix for unidirectional dataset. - - bugfix for split of prepare and execute. Data was not updated - correctly - nov 1, 2005 Release 2005.11.A - - Code improvements - - First (alpha) implementation of Lookup field (By John Lito) - dec 14, 2005 Release 2005.12.A - - Check for null values - jan 5, 2006 Release 2006.01.A - - fixed unidirectional bug (I) - jan 9, 2006 Release 2006.01.B - - fixed unidirectional bug (II) - - automatically will close table if tablename property is changed - while a table is still open. - - automatically close query if sql property is changed while a table - is still open. - - fixes for compilation under D4 - - changes for installation under Delphi 2005 and 2006 - - changes of copyright notice, the components are now under - open-source bsd licence. - feb 22, 2006 Release 2006.02.A - - Changed status to stable - mar 2, 2006 Release 2006.03.A - - Modifications for D4/D5 - - Added order by property. Enter fieldnames separated by ',' - - Added GetIndexFieldNames (thanks to zavu10n) - - Database will be reopened if necessary on filter change - - Fixes by Donnie - - New routine for dates and floates by Donnie - mar 8, 2006 Release 2006.03.B - - Fixed small bug causing text treated as char 255, is now memo. - mar 15, 2006 Release 2006.03.C - - Added switch for compilation under D4/D5 (Art Register) - - DBOpen change for utf8 by John Lito - - SQLCursor fix - - GetFieldValue fix by Velis - mar 23, 2006 Release 2006.03.D - - Compatibility fixes for D45 (Art Register) - - changed D45 directive to $IFDEF ASQLITE_D6PLUS so - compilation should work automatically now - - changed cr cr/lf pairs for compatibilty with D4/D5 - - added CompareBookmarks to support multiple selection - in DBGrid (Michael S) - - added support for char *nothing* datatype (was char(1) now char is allowed) - - - -*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * } - - -interface - -uses - DB, - DBCommon, - Dialogs, - Classes, - Windows, - SysUtils, -{$IFDEF ASQLITE_D6PLUS} - Variants, -{$ENDIF} - ASGRout3; -const - SQLiteVersion = 'ASGSQLite V2006.03.D stable'; - - MaxBuf = 30000; // max stringbuffer for record (length) (excluding blob's) - SQLITE_OK = 0; // Successful result */ - SQLITE_ERROR = 1; // SQL error or missing database */ - SQLITE_INTERNAL = 2; // An internal logic error in SQLite */ - SQLITE_PERM = 3; // Access permission denied */ - SQLITE_ABORT = 4; // Callback routine requested an abort */ - SQLITE_BUSY = 5; // The database file is locked */ - SQLITE_LOCKED = 6; // A table in the database is locked */ - SQLITE_NOMEM = 7; // A malloc() failed */ - SQLITE_READONLY = 8; // Attempt to write a readonly database */ - SQLITE_INTERRUPT = 9; // Operation terminated by sqlite_interrupt() */ - SQLITE_IOERR = 10; // Some kind of disk I/O error occurred */ - SQLITE_CORRUPT = 11; // The database disk image is malformed */ - SQLITE_NOTFOUND = 12; // (Internal Only) Table or record not found */ - SQLITE_FULL = 13; // Insertion failed because database is full */ - SQLITE_CANTOPEN = 14; // Unable to open the database file */ - SQLITE_PROTOCOL = 15; // Database lock protocol error */ - SQLITE_EMPTY = 16; // (Internal Only) Database table is empty */ - SQLITE_SCHEMA = 17; // The database schema changed */ - SQLITE_TOOBIG = 18; // Too much data for one row of a table */ - SQLITE_CONSTRAINT = 19; // Abort due to contraint violation */ - SQLITE_MISMATCH = 20; // Data type mismatch */ - SQLITE_MISUSE = 21; // Library used incorrectly */ - SQLITE_NOLFS = 22; // Uses OS features not supported on host */ - SQLITE_AUTH = 23; // Authorization denied */ - SQLITE_ROW = 100; // sqlite_step() has another row ready */ - SQLITE_DONE = 101; // sqlite_step() has finished executing */ - - SQLITE_CREATE_INDEX = 1; // Index Name Table Name */ - SQLITE_CREATE_TABLE = 2; // Table Name NULL */ - SQLITE_CREATE_TEMP_INDEX = 3; // Index Name Table Name */ - SQLITE_CREATE_TEMP_TABLE = 4; // Table Name NULL */ - SQLITE_CREATE_TEMP_TRIGGER = 5; // Trigger Name Table Name */ - SQLITE_CREATE_TEMP_VIEW = 6; // View Name NULL */ - SQLITE_CREATE_TRIGGER = 7; // Trigger Name Table Name */ - SQLITE_CREATE_VIEW = 8; // View Name NULL */ - SQLITE_DELETE = 9; // Table Name NULL */ - SQLITE_DROP_INDEX = 10; // Index Name Table Name */ - SQLITE_DROP_TABLE = 11; // Table Name NULL */ - SQLITE_DROP_TEMP_INDEX = 12; // Index Name Table Name */ - SQLITE_DROP_TEMP_TABLE = 13; // Table Name NULL */ - SQLITE_DROP_TEMP_TRIGGER = 14; // Trigger Name Table Name */ - SQLITE_DROP_TEMP_VIEW = 15; // View Name NULL */ - SQLITE_DROP_TRIGGER = 16; // Trigger Name Table Name */ - SQLITE_DROP_VIEW = 17; // View Name NULL */ - SQLITE_INSERT = 18; // Table Name NULL */ - SQLITE_PRAGMA = 19; // Pragma Name 1st arg or NULL */ - SQLITE_READ = 20; // Table Name Column Name */ - SQLITE_SELECT = 21; // NULL NULL */ - SQLITE_TRANSACTION = 22; // NULL NULL */ - SQLITE_UPDATE = 23; // Table Name Column Name */ - SQLITE_ATTACH = 24; // Filename NULL */ - SQLITE_DETACH = 25; // Database Name NULL */ - - SQLITE_DENY = 1; // Abort the SQL statement with an error */ - SQLITE_IGNORE = 2; // Don't allow access, but don't generate an error */ - - Crlf : string = #13#10; - Q = ''''; - -type - pInteger = ^integer; - pPointer = ^Pointer; - pSmallInt = ^smallint; - pFloat = ^extended; - pBoolean = ^boolean; - - - TConvertBuffer = array[1..255] of char; - - TSQLite3_Callback = function(UserData: Pointer; ColumnCount: Integer; ColumnValues, ColumnNames: PPointer): Integer; cdecl; -// TSQLiteExecCallback = function(Sender: TObject; Columns: integer; ColumnValues: Pointer; ColumnNames: Pointer): integer of object; cdecl; - TSQLiteBusyCallback = function(Sender: TObject; ObjectName: PAnsiChar; BusyCount: integer): integer of object; cdecl; - TOnData = procedure(Sender: TObject; Columns: integer; ColumnNames, ColumnValues: string) of object; - TOnBusy = procedure(Sender: TObject; ObjectName: string; BusyCount: integer; var Cancel: boolean) of object; - TOnQueryComplete = procedure(Sender: TObject) of object; - TASQLite3NotifyEvent = procedure(Sender: TObject) of object; - - // structure for holding field information. It is used by GetTableInfo - - TASQLite3Field = class - public - FieldNumber: integer; - FieldName: string; - FieldType: string; - FieldNN: integer; // 1 if notnull - FieldDefault: string; - FieldPK: integer; // 1 if primary key - end; - - // object to 'play' with SQLite's default settings - - TASQLite3Pragma = class(TComponent) - private - FTempCacheSize: integer; - FDefaultCacheSize: integer; - FDefaultSynchronous: string; - FDefaultTempStore: string; - FTempStore: string; - FSynchronous: string; - protected - function GetTempCacheSize: string; - function GetDefaultCacheSize: string; - function GetDefaultSynchronous: string; - function GetDefaultTempStore: string; - function GetTempStore: string; - function GetSynchronous: string; - published - { Published declarations } - property TempCacheSize: integer read FTempCacheSize write FTempCacheSize; - property DefaultCacheSize: integer read FDefaultCacheSize write FDefaultCacheSize; - property DefaultSynchronous: string read FDefaultSynchronous - write FDefaultSynchronous; - property DefaultTempStore: string read FDefaultTempStore write FDefaultTempStore; - property TempStore: string read FTempStore write FTempStore; - property Synchronous: string read FSynchronous write FSynchronous; - end; - - // component to log messages - // it's for debugging purpose and may be obsolete due - // to the event implementation. not sure yet... - - TASQLite3Log = class(TComponent) - private - FLogFile: string; - FLogDebugOut: boolean; - FAppend: boolean; - FLogSQL: boolean; - FLogInt: boolean; - protected - public - procedure Display(Msg: string); - published - { Published declarations } - property LogFile: string read FLogFile write FLogFile; - property LogDebugOut: boolean read FLogDebugOut write FLogDebugOut; // 20040225 - property Append: boolean read FAppend write FAppend; - property LogSQL: boolean read FLogSQL write FLogSQL; - property LogInternals: boolean read FLogInt write FLogInt; - end; - -// This component can be used to store sql outside the pascal source. -// It is useful for automatically creating tables on open of a temporary database -// (i.e. in-memory database) - - TASQLite3InlineSQL = class(TComponent) - private - FSQL: TStrings; - procedure SetSQL(const Value: TStrings); - function GetSQL: TStrings; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property SQL: TStrings read GetSQL write SetSQL; - end; - - { Basic Database component } - - TASQLite3DB = class(TComponent) - private - { Private declarations } - FAfterConnect: TASQLite3NotifyEvent; - FBeforeConnect: TASQLite3NotifyEvent; - FAfterDisconnect: TASQLite3NotifyEvent; - FBeforeDisconnect: TASQLite3NotifyEvent; - function FGetDefaultExt: string; - function FGetDriverDLL: string; - protected - { Protected declarations } - FInlineSQL: TASQLite3InlineSQL; - FExecuteInlineSQL: boolean; - FDatabase: string; - FTransactionType: string; - FSQLiteVersion: string; - FDefaultExt: string; - FDefaultDir: string; - FDriverDll: string; - FConnected: boolean; - FMustExist: boolean; - FVersion: string; - FCharEnc: string; - FUtf8: boolean; - DBHandle: Pointer; - FASQLitePragma: TASQLite3Pragma; - FASQLiteLog: TASQLite3Log; - FLastError: string; - SQLite3_Open: function(dbname: PAnsiChar; var db: pointer): integer; cdecl; - SQLite3_Close: function(db: pointer): integer; cdecl; - SQLite3_Exec: function(DB: Pointer; SQLStatement: PAnsiChar; Callback: TSQLite3_Callback; - UserDate: Pointer; var ErrMsg: PAnsiChar): Integer; cdecl; - SQLite3_LibVersion: function(): PAnsiChar; cdecl; - SQLite3_ErrorString: function(db: pointer): PAnsiChar; cdecl; - SQLite3_GetTable: function(db: Pointer; SQLStatement: PAnsiChar; var ResultPtr: Pointer; - var RowCount: cardinal; var ColCount: cardinal; var ErrMsg: PAnsiChar): integer; cdecl; - SQLite3_FreeTable: procedure(Table: PAnsiChar); cdecl; - SQLite3_FreeMem: procedure(P: PAnsiChar); cdecl; - SQLite3_Complete: function(P: PAnsiChar): boolean; cdecl; - SQLite3_LastInsertRow: function(db: Pointer): integer; cdecl; - SQLite3_Cancel: procedure(db: Pointer); cdecl; - SQLite3_BusyHandler: procedure(db: Pointer; CallbackPtr: Pointer; Sender: TObject); cdecl; - SQLite3_BusyTimeout: procedure(db: Pointer; TimeOut: integer); cdecl; - SQLite3_Changes: function(db: Pointer): integer; cdecl; - SQLite3_Prepare: function(db: Pointer; SQLStatement: PAnsiChar; nBytes: integer; - var hstatement: pointer; var Tail: PAnsiChar): integer; cdecl; - SQLite3_Finalize: function(hstatement: pointer): integer; cdecl; - SQLite3_Reset: function(hstatement: pointer): integer; cdecl; - SQLite3_Step: function(hstatement: pointer): integer; cdecl; - SQLite3_Column_blob: function(hstatement: pointer; iCol: integer): pointer; cdecl; - SQLite3_Column_bytes: function(hstatement: pointer; iCol: integer): integer; cdecl; - SQLite3_Column_count: function(hstatement: pointer): integer; cdecl; - SQLite3_Column_decltype: function(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; - SQLite3_Column_double: function(hstatement: pointer; iCol: integer): double; cdecl; - SQLite3_Column_int: function(hstatement: pointer; iCol: integer): integer; cdecl; - SQLite3_Column_int64: function(hstatement: pointer; iCol: integer): int64; cdecl; - SQLite3_Column_name: function(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; - SQLite3_Column_text: function(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; - SQLite3_Column_text16: function(hstatement: pointer; iCol: integer): PWideChar; cdecl; - SQLite3_Column_type: function(hstatement: pointer; iCol: integer): integer; cdecl; - SQLite3_Bind_Blob: function(hstatement: pointer; iCol: integer; buf: PAnsiChar; n: integer; DestroyPtr: Pointer): integer; cdecl; - SQLite3_Bind_Text16: function(hstatement: pointer; iCol: integer; buf: pointer; n: integer; DestroyPtr: Pointer): integer; cdecl;//\\\ - SQLite3_Bind_Parameter_Count: function(hstatement: pointer): integer; cdecl;//\\\ - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure DBConnect(Connected: boolean); - function SQLite3_PrepareResult(DB: Pointer; TheStatement: string; FParams: TParams; Sender: TObject) : pointer; - function SQLite3_GetNextResult(DB: Pointer; TheStatement: pointer; FParams: TParams; Sender: TObject) : pointer; - procedure SQLite3_CloseResult(TheStatement : pointer); - public - DLLHandle: THandle; - { Public declarations } - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - function LoadLibs: boolean; - procedure FSetDatabase(Database: string); - function RowsAffected: integer; - function TableExists(const ATableName: AnsiString): Boolean; - procedure ExecStartTransaction(TransType: string); - procedure StartTransaction; - procedure StartDeferredTransaction; - procedure StartImmediateTransaction; - procedure StartExclusiveTransaction; - procedure Open; - procedure Close; - procedure Commit; - procedure RollBack; - procedure ShowDatabases(List: TStrings); - procedure GetTableNames(List: TStrings; SystemTables: boolean = false); - procedure GetTableInfo(TableName: string; List: TList); - procedure GetIndexNames(List: TStrings; SystemTables: boolean = false); - procedure GetIndexFieldNames(IndexName: string; List: TStrings); - procedure GetFieldNames(TableName: string; List: TStrings); - procedure GetPrimaryKeys(TableName: string; List: TStrings); - procedure GetTableIndexNames(TableName: string; List: TStrings); - procedure ExecPragma; -// function SQLite_XExec(db: Pointer; SQLStatement: PAnsiChar; -// CallbackPtr: Pointer; Sender: TObject; var ErrMsg: PAnsiChar): integer; cdecl; - function SQLite3_Execute(db: Pointer; TheStatement: string; FParams: TParams; Sender: TObject): integer; - function SQLite3_ExecSQL(TheStatement: string; Blobs: TList=nil): integer; - procedure ShowError; - function GetUserVersion(database : string=''): integer; - procedure SetUserVersion(Version : integer; Database : string=''); - published - { Published declarations } - property CharacterEncoding: string read FCharEnc write FCharEnc; - property TransactionType: string read FTransactionType write FTransactionType; - property Database: string read FDatabase write FSetDatabase; - property ASQLitePragma: TASQLite3Pragma read FASQLitePragma write FASQLitePragma; - property ASQLiteLog: TASQLite3Log read FASQLiteLog write FASQLiteLog; - property DefaultExt: string read FGetDefaultExt write FDefaultExt; - property DefaultDir: string read FDefaultDir write FDefaultDir; - property Version: string read FVersion write FVersion; -// property CharacterEncoding: string Read FCharEncoding Write FCharEncoding; - property DriverDLL: string read FGetDriverDLL write FDriverDLL; - property Connected: boolean read FConnected write DBConnect; - property MustExist: boolean read FMustExist write FMustExist; - property ASQLiteInlineSQL: TASQLite3InlineSQL read FInlineSQL write FInlineSQL; - property ExecuteInlineSQL: boolean read FExecuteInlineSQL write FExecuteInlineSQL; - property AfterConnect: TASQLite3NotifyEvent read FAfterConnect write FAfterConnect; - property BeforeConnect: TASQLite3NotifyEvent read FBeforeConnect write FBeforeConnect; - property AfterDisconnect: TASQLite3NotifyEvent - read FAfterDisconnect write FAfterDisconnect; - property BeforeDisconnect: TASQLite3NotifyEvent - read FBeforeDisconnect write FBeforeDisconnect; - end; - - AsgError = class(Exception); - -{ TRecInfo } - -{ This structure is used to access additional information stored in - each record buffer which follows the actual record data. - - Buffer: PAnsiChar; - || - \/ - -------------------------------------------- - | Record Data | Bookmark | Bookmark Flag | - -------------------------------------------- - ^-- PRecInfo = Buffer + FRecInfoOfs - - Keep in mind that this is just an example of how the record buffer - can be used to store additional information besides the actual record - data. There is no requirement that TDataSet implementations do it this - way. - - For the purposes of this demo, the bookmark format used is just an integer - value. For an actual implementation the bookmark would most likely be - a native bookmark type (as with BDE), or a fabricated bookmark for - data providers which do not natively support bookmarks (this might be - a variant array of key values for instance). - - The BookmarkFlag is used to determine if the record buffer contains a - valid bookmark and has special values for when the dataset is positioned - on the "cracks" at BOF and EOF. } - - PRecInfo = ^TRecInfo; - - TRecInfo = packed record - Bookmark : integer; - BookmarkFlag : TBookmarkFlag; -// Nulls : - end; - - //============================================================================== TFResult - // The TFResult class is used to maintain the resultlist in memory. This - // will only be the case for 'normal' data. Blobs and Clobs will be treated - // differently, but they are not supported yet. - //============================================================================== - TASQLite3BaseQuery = class; - - TFResult = class - protected - Data: TList; - BookMark: TList; - RowId: TList; - FLastBookmark: integer; - FBufSize: integer; - FDataSet: TASQLite3BaseQuery; - public - constructor Create(TheDataSet: TASQLite3BaseQuery); - destructor Destroy; override; - procedure FreeBlobs; - procedure SetBufSize(TheSize: integer); - procedure Add(TheBuffer: PAnsiChar; TheRowId: integer); - procedure Insert(Index: integer; TheBuffer: Pointer; TheRowId: integer); - procedure Delete(Index: integer); - function GetData(Index: integer): Pointer; - function Count: integer; - function IndexOf(TheBookMark: pointer): integer; - function GetBookmark(Index: integer): integer; - function GetRowId(Index: integer): integer; - end; - -//============================================================================== TASQLite3UpdateSQL - TASQLite3UpdateSQL = class(TComponent) - private - FInsertSQL: TStrings; - FUpdateSQL: TStrings; - FDeleteSQL: TStrings; - procedure SetInsertSQL(const Value: TStrings); - procedure SetUpdateSQL(const Value: TStrings); - procedure SetDeleteSQL(const Value: TStrings); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property InsertSQL: TStrings read FInsertSQL write SetInsertSQL; - property UpdateSQL: TStrings read FUpdateSQL write SetUpdateSQL; - property DeleteSQL: TStrings read FDeleteSQL write SetDeleteSQL; - end; - -//============================================================================== TASQLite3Output - - TASQLite3Output = class(TComponent) - private - FActive: boolean; - FOutputType: string; - FTableClass: string; - FHeaderClass: string; - FCellClass: string; - FOutput: TStrings; - FSeparator: string; - FDataSource: TDataSource; - procedure SetOutput(const Value: TStrings); - procedure SetFActive(Active: boolean); - function GetOutput: TStrings; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Execute(MyDataSet: TDataSet); - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - published - property Active: boolean read FActive write SetFActive; - property DataSource: TDataSource read FDataSource write FDataSource; - property OutputType: string read FOutputType write FOutputType; - property TableClass: string read FTableClass write FTableClass; - property HeaderClass: string read FHeaderClass write FHeaderClass; - property CellClass: string read FCellClass write FCellClass; - property Output: TStrings read GetOutput write SetOutput; - property FieldSeparator: string read FSeparator write FSeparator; - end; - -//============================================================================== TASQLite3BaseQuery - TASQLite3BaseQuery = class(TDataSet) - private - FParams: TParams; - FTypeLess: boolean; - FNoResults: boolean; // suppresses the creation of a result list - FAutoCommit: boolean; - FTransactionType: string; - FTableDateFormat: string; - FSQLiteDateFormat: boolean; - FResult: TFResult; - FSQL: TStrings; - FSQLCursor: boolean; - FPrepared: string; - FRecBufSize: integer; - FRecInfoOfs: integer; - FCurRec: integer; - FMasterFields: string; - FMasterSource: TDataSource; - FSaveChanges: boolean; - MaxStrLen: integer; - FConnection: TASQLite3DB; - FReadOnly: boolean; - FMaxResults: integer; - FStartResult: integer; - FUniDir : boolean; - FStatement : pointer; - CurrentRowId: integer; - SQLStr: string; - ResultStr: PAnsiChar; - RowId : integer; - RowIdCol : integer; - DetailList: TList; - procedure SetSQL(const Value: TStrings); - function UnpackBuffer(Buffer: PAnsiChar; FieldType: TFieldType): TConvertBuffer; - procedure SetDataSource(Value: TDataSource); - protected - function SetQueryParams(InStr: string): string; //*** - procedure SetParamsList(Value: TParams); - function GetParamsCount: word; - procedure RegisterDetailDataset(DetailDataSet: TASQLite3BaseQuery); - procedure LoadQueryData; - function GetActiveBuffer(var Buffer: PAnsiChar): boolean; - function GetDataSource: TDataSource; override; - procedure NotifySQLiteMasterChanged; - function GetFieldValue(const AField: TField; const Blobs: TList = nil): string; // added by Donnie - - { Overriden abstract methods (required) } - function AllocRecordBuffer: PAnsiChar; override; - procedure FreeRecordBuffer(var Buffer: PAnsiChar); override; - procedure GetBookmarkData(Buffer: PAnsiChar; Data: Pointer); override; - function GetBookmarkFlag(Buffer: PAnsiChar): TBookmarkFlag; override; - function GetRecord(Buffer: PAnsiChar; GetMode: TGetMode; - DoCheck: boolean): TGetResult; override; - function GetRecordSize: word; override; - procedure InternalAddRecord(Buffer: Pointer; Append: boolean); override; - procedure InternalClose; override; - procedure InternalDelete; override; - procedure InternalFirst; override; - procedure InternalGotoBookmark(Bookmark: Pointer); override; - procedure InternalHandleException; override; - procedure InternalInitFieldDefs; override; - procedure InternalInitRecord(Buffer: PAnsiChar); override; - procedure InternalLast; override; - procedure InternalOpen; override; - procedure InternalPost; override; - procedure InternalSetToRecord(Buffer: PAnsiChar); override; - procedure OpenCursor(InfoQuery: Boolean); override; // GPA - function IsCursorOpen: boolean; override; - procedure SetBookmarkFlag(Buffer: PAnsiChar; Value: TBookmarkFlag); override; - procedure SetBookmarkData(Buffer: PAnsiChar; Data: Pointer); override; - procedure SetFieldData(Field: TField; Buffer: Pointer); override; - function GetFieldSize(FieldNo: integer): integer; overload; - function GetFieldSize(Field: TField): integer; overload; - function GetNativeFieldSize(FieldNo: integer): integer; - function GetFieldOffset(FieldNo: integer): integer; - function GetCalcFieldOffset(Field: TField): integer; - function GetMasterFields: string; - procedure SetMasterFields(const Value: string); - { Additional overrides (optional) } - function GetRecordCount: integer; override; - function GetRecNo: integer; override; - procedure SetRecNo(Value: integer); override; - property BaseSQL: TStrings read FSQL write SetSQL; - procedure SetSQLiteDateFormat(const Value: boolean); - procedure SetFilterText(const Value: string); override; - procedure DataConvert(Field: TField; Source, Dest: Pointer; ToNative: Boolean); override;//\\\ - function CalcFieldInList(const List: string): Boolean; // John Lito - - {$IFDEF IPROVIDER} - {***** IProviderSupport - Begin *****} - //-----| These are not necessary until the moment! - // procedure PSGetAttributes(List: TList); virtual; - // function PSGetDefaultOrder: TIndexDef; virtual; - // function PSGetIndexDefs(IndexTypes: TIndexOptions): TIndexDefs; virtual; - //-----| These are necessary to support IProvider - procedure PSEndTransaction(Commit: Boolean); override; - procedure PSExecute; override; - function PSExecuteStatement(const ASQL: string; AParams: TParams; ResultSet: Pointer = nil): Integer; override; - function PSGetParams: TParams; override; - function PSGetTableName: string; override; - function PSGetUpdateException(E: Exception; Prev: EUpdateError): EUpdateError; override; - function PSInTransaction: Boolean; override; - function PSIsSQLBased: Boolean; override; - function PSIsSQLSupported: Boolean; override; - procedure PSReset; override; - procedure PSSetCommandText(const CommandText: string); override; - procedure PSSetParams(AParams: TParams); override; - procedure PSStartTransaction; override; - function PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; override; - function PSGetQuoteChar: string; override; - function PSGetKeyFields: string; override; - {***** IProviderSupport - End *****} - {$ENDIF} - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure ExecSQL; - procedure StartTransaction; - procedure StartDeferredTransaction; - procedure StartImmediateTransaction; - procedure StartExclusiveTransaction; - procedure Commit; - procedure RollBack; - procedure SetFiltered(Value: Boolean); override; - procedure SQLiteMasterChanged; virtual; - function GetFieldData(Field: TField; Buffer: Pointer): boolean; override; - function GetFieldData(FieldNo: integer; Buffer: Pointer): boolean; override; // 20040225 - function GetLastInsertRow: integer; -{$IFDEF ASQLITE_D6PLUS} -// function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: boolean): boolean; override; -{$ENDIF} - - function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; override; //MS - function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override; - function Locate(const KeyFields: string; const KeyValues: variant; Options: TLocateOptions): boolean; override; - function BookmarkValid(Bookmark: Pointer): boolean; override; -// function LocateNearest(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; - property Params: TParams read FParams write SetParamsList stored false; - function Lookup(const KeyFields: string; const KeyValues: Variant; // John Lito - const ResultFields: string): Variant; override; // John Lito - published - property AutoCommit: boolean read FAutoCommit write FAutoCommit default true; - property TransactionType: string read FTransactionType write FTransactionType; - property SQLiteDateFormat: boolean read FSQLiteDateFormat write SetSQLiteDateFormat; - property TableDateFormat: string read FTableDateFormat write FTableDateFormat; - property Connection: TASQLite3DB read FConnection write FConnection; - property MaxResults: integer read FMaxResults write FMaxResults; - property StartResult: integer read FStartResult write FStartResult; - property TypeLess: boolean read FTypeLess write FTypeLess; - property MasterFields: string read GetMasterFields write SetMasterFields; - property MasterSource: TDataSource read GetDataSource write SetDataSource; - property SQLCursor: boolean read FSQLCursor write FSQLCursor; - property ReadOnly: boolean read FreadOnly write FReadOnly; - property UniDirectional : boolean read FUniDir write FUniDir; - property AutoCalcFields; - property Filter; - property Filtered; - property Active; - property BeforeOpen; - property AfterOpen; - property BeforeClose; - property AfterClose; - property BeforeInsert; - property AfterInsert; - property BeforeEdit; - property AfterEdit; - property BeforePost; - property AfterPost; - property BeforeCancel; - property AfterCancel; - property BeforeDelete; - property AfterDelete; - property BeforeScroll; - property AfterScroll; -{$IFDEF ASQLITE_D6PLUS} - property BeforeRefresh; - property AfterRefresh; -{$ENDIF} - property OnCalcFields; - property OnDeleteError; - property OnEditError; - property OnNewRecord; - property OnPostError; - end; -//============================================================================== TASQLite3Query - - TASQLite3Query = class(TASQLite3BaseQuery) - private - FUpdateSQL: TASQLite3UpdateSQL; - FRawSQL: boolean; - procedure SetSQL(const Value: TStrings); - function GetSQL: TStrings; - procedure QueryChanged(Sender: TObject); - protected - procedure InternalOpen; override; - procedure InternalPost; override; - procedure InternalDelete; override; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure InternalClose; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; -// property Params: TParams Read FParams Write SetParamsList Stored false; - procedure SQLiteMasterChanged; override; - published - property RawSQL: boolean read FRawSQL write FRawSQL; - property SQL: TStrings read GetSQL write SetSQL; - property UpdateSQL: TASQLite3UpdateSQL read FUpdateSQL write FUpdateSQL; - end; - -//============================================================================== TASQLite3Table - - TASQLite3Table = class(TASQLite3BaseQuery) - private - FTableName: string; - FOrderBy : string; - FPrimaryAutoInc: boolean; - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure InternalOpen; override; - procedure InternalPost; override; - procedure InternalDelete; override; - procedure SetFTableName(TableName : string); - procedure SetFOrderBy(OrderBy : string); - public - procedure SQLiteMasterChanged; override; - published - property TableName: string read FTableName write SetFTableName; - property PrimaryAutoInc: boolean read FPrimaryAutoInc write FPrimaryAutoInc; - property OrderBy : string read FOrderBy write SetFOrderBy; - end; - - //============================================================================== TASQLite3BlobStream - - TASQLite3BlobStream = class(TMemoryStream) - private - FField: TBlobField; - FDataSet: TASQLite3BaseQuery; - FMode: TBlobStreamMode; - FModified: Boolean; - FOpened: Boolean; - procedure LoadBlobData; - procedure SaveBlobData; - public - constructor Create(Field: TBlobField; Mode: TBlobStreamMode); - destructor Destroy; override; - function Read(var Buffer; Count: Longint): Longint; override; - function Write(const Buffer; Count: Longint): Longint; override; - end; - - -implementation - -uses - Math -{$IFDEF ASQLITE_D6PLUS} - , StrUtils -{$endif} - ; - -// GPA - Static Link Start -{$IFDEF SQLite_Static} -Var - __HandlerPtr:Pointer; - - {$L 'OBJ\sqlite3.obj'} - {$L 'OBJ\files.obj'} - {$L 'OBJ\strlen.obj'} - {$L 'OBJ\assert.obj'} - {$L 'OBJ\memcmp.obj'} - {$L 'OBJ\memcpy.obj'} - {$L 'OBJ\memset.obj'} - {$L 'OBJ\strcmp.obj'} - {$L 'OBJ\strcpy.obj'} - {$L 'OBJ\strcat.obj'} - {$L 'OBJ\strncmp.obj'} - {$L 'OBJ\strncpy.obj'} - {$L 'OBJ\strncat.obj'} - {$L 'OBJ\sprintf.obj'} - {$L 'OBJ\fprintf.obj'} - {$L 'OBJ\_ll.obj'} - {$L 'OBJ\ltoupper.obj'} - {$L 'OBJ\ltolower.obj'} - {$L 'OBJ\atol.obj'} - {$L 'OBJ\ftol.obj'} - {$L 'OBJ\longtoa.obj'} - {$L 'OBJ\hrdir_r.obj'} - {$L 'OBJ\gmtime.obj'} - {$L 'OBJ\tzdata.obj'} - {$L 'OBJ\initcvt.obj'} - {$L 'OBJ\streams.obj'} - {$L 'OBJ\scantod.obj'} - {$L 'OBJ\scanwtod.obj'} - {$L 'OBJ\allocbuf.obj'} - {$L 'OBJ\bigctype.obj'} - {$L 'OBJ\clocale.obj'} - {$L 'OBJ\clower.obj'} - {$L 'OBJ\cupper.obj'} - {$L 'OBJ\fflush.obj'} - {$L 'OBJ\fputn.obj'} - {$L 'OBJ\hrdir_s.obj'} - {$L 'OBJ\mbisspc.obj'} - {$L 'OBJ\mbsrchr.obj'} - {$L 'OBJ\realcvt.obj'} - {$L 'OBJ\realcvtw.obj'} - {$L 'OBJ\timefunc.obj'} - {$L 'OBJ\vprinter.obj'} - {$L 'OBJ\hugeval.obj'} - {$L 'OBJ\cvtfak.obj'} - {$L 'OBJ\getinfo.obj'} - {$L 'OBJ\qmul10.obj'} - {$L 'OBJ\fuildq.obj'} - {$L 'OBJ\_pow10.obj'} - {$L 'OBJ\ldtrunc.obj'} - {$L 'OBJ\cvtfakw.obj'} - {$L 'OBJ\wis.obj'} - {$L 'OBJ\xfflush.obj'} - {$L 'OBJ\flushout.obj'} - {$L 'OBJ\lputc.obj'} - {$L 'OBJ\hrdir_b.obj'} - {$L 'OBJ\realloc.obj'} - {$L 'OBJ\mbctype.obj'} - {$L 'OBJ\xcvt.obj'} - {$L 'OBJ\xcvtw.obj'} - {$L 'OBJ\wcscpy.obj'} - {$L 'OBJ\errno.obj'} - {$L 'OBJ\ctrl87.obj'} - {$L 'OBJ\timedata.obj'} - {$L 'OBJ\int64toa.obj'} - {$L 'OBJ\cvtentry.obj'} - {$L 'OBJ\mbyte1.obj'} - {$L 'OBJ\errormsg.obj'} - {$L 'OBJ\exit.obj'} - {$L 'OBJ\iswctype.obj'} - {$L 'OBJ\heap.obj'} - {$L 'OBJ\memmove.obj'} - {$L 'OBJ\fxam.obj'} - {$L 'OBJ\fuistq.obj'} - {$L 'OBJ\qdiv10.obj'} - {$L 'OBJ\wmemset.obj'} - {$L 'OBJ\wcslen.obj'} - {$L 'OBJ\_tzset.obj'} - {$L 'OBJ\deflt87.obj'} - {$L 'OBJ\mbschr.obj'} - {$L 'OBJ\mbsrchr.obj'} - {$L 'OBJ\ermsghlp.obj'} - {$L 'OBJ\patexit.obj'} - {$L 'OBJ\initexit.obj'} - {$L 'OBJ\virtmem.obj'} - {$L 'OBJ\tzset.obj'} - {$L 'OBJ\mbisdgt.obj'} - {$L 'OBJ\mbsnbcpy.obj'} - {$L 'OBJ\platform.obj'} - {$L 'OBJ\getenv.obj'} - {$L 'OBJ\mbisalp.obj'} - {$L 'OBJ\abort.obj'} - {$L 'OBJ\signal.obj'} - {$L 'OBJ\clear87.obj'} - {$L 'OBJ\abort.obj'} - {$L 'OBJ\handles.obj'} - {$L 'OBJ\_cfinfo.obj'} - {$L 'OBJ\__isatty.obj'} - {$L 'OBJ\perror.obj'} - {$L 'OBJ\fputs.obj'} - {$L 'OBJ\files2.obj'} - {$L 'OBJ\ioerror.obj'} - {$L 'OBJ\__write.obj'} - {$L 'OBJ\_write.obj'} - {$L 'OBJ\__lseek.obj'} - {$L 'OBJ\ioerror.obj'} - {$L 'OBJ\setenvp.obj'} - {$L 'OBJ\calloc.obj'} - {$L 'OBJ\mbsnbcmp.obj'} - {$L 'OBJ\mbsnbicm.obj'} - {$L 'OBJ\is.obj'} - {$L 'OBJ\isctype.obj'} - {$L 'OBJ\bigctype.obj'} - {$L 'OBJ\globals.obj'} - {$L 'OBJ\hrdir_mf.obj'} - {$L 'OBJ\fpreset.obj'} - {$L 'OBJ\ta.obj'} - {$L 'OBJ\setexc.obj'} - {$L 'OBJ\defhandl.obj'} - - function _wsprintfA:integer; external 'user32.dll' name 'wsprintfA'; - procedure RtlUnwind; external 'NtDll.dll' name 'RtlUnwind'; - - function _sqlite3_open(dbname: PAnsiChar; var db: pointer): integer; cdecl; external; - function _sqlite3_close(db: pointer): integer; cdecl; external; - function _sqlite3_exec(DB: Pointer; SQLStatement: PAnsiChar; Callback: TSQLite3_Callback; - UserDate: Pointer; var ErrMsg: PAnsiChar): Integer; cdecl; external; - function _sqlite3_libversion: PAnsiChar; cdecl; external; - function _sqlite3_errmsg(db: pointer): PAnsiChar; cdecl; external; - function _sqlite3_get_table(db: Pointer; SQLStatement: PAnsiChar; var ResultPtr: Pointer; - var RowCount: cardinal; var ColCount: cardinal; var ErrMsg: PAnsiChar): integer; cdecl; external; - procedure _sqlite3_free_table(Table: PAnsiChar); cdecl; external; - procedure _sqlite3_free(P: PAnsiChar); cdecl; external; - function _sqlite3_complete(P: PAnsiChar): boolean; cdecl; external; - function _sqlite3_last_insert_rowid(db: Pointer): integer; cdecl; external; - procedure _sqlite3_interrupt(db: Pointer); cdecl; external; - procedure _sqlite3_busy_handler(db: Pointer; CallbackPtr: Pointer; Sender: TObject); cdecl; external; - procedure _sqlite3_busy_timeout(db: Pointer; TimeOut: integer); cdecl; external; - function _sqlite3_changes(db: Pointer): integer; cdecl; external; - function _sqlite3_prepare(db: Pointer; SQLStatement: PAnsiChar; nBytes: integer; - var hstatement: pointer; var Tail: PAnsiChar): integer; cdecl; external; - function _sqlite3_finalize(hstatement: pointer): integer; cdecl; external; - function _sqlite3_reset(hstatement: pointer): integer; cdecl; external; - function _sqlite3_step(hstatement: pointer): integer; cdecl; external; - function _sqlite3_column_blob(hstatement: pointer; iCol: integer): pointer; cdecl; external; - function _sqlite3_column_bytes(hstatement: pointer; iCol: integer): integer; cdecl; external; - function _sqlite3_column_count(hstatement: pointer): integer; cdecl; external; - function _sqlite3_column_decltype(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external; - function _sqlite3_column_double(hstatement: pointer; iCol: integer): double; cdecl; external; - function _sqlite3_column_int(hstatement: pointer; iCol: integer): integer; cdecl; external; - function _sqlite3_column_int64(hstatement: pointer; iCol: integer): int64; cdecl; external; - function _sqlite3_column_name(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external; - function _sqlite3_column_text(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external; - function _sqlite3_column_type(hstatement: pointer; iCol: integer): integer; cdecl; external; - function _sqlite3_bind_blob(hstatement: pointer; iCol: integer; buf: PAnsiChar; n: integer; DestroyPtr: Pointer): integer; cdecl; external; - -{$ENDIF} -// GPA - Static Link End - - -{$IFDEF DEBUG_ENABLED} -var - DebugSpaces : Integer = 0; -{$ENDIF} - -{$IFNDEF ASQLITE_D6PLUS} //Art Register - Function sign not provided in Delphi 5 -function Sign(I: Integer) : Integer ; -begin - if (I > 0) then - Result := 1 - else - begin - if (I < 0) then - Result := -1 - else - Result := 0; - end; -end; -{$ENDIF} - -procedure Debug(const S: string); -begin -{$IFDEF DEBUG_ENABLED} - OutputDebugString(PAnsiChar(StringOfChar(' ', DebugSpaces) + S)); -{$ENDIF} -end; - -procedure DebugEnter(const S: string); -begin -{$IFDEF DEBUG_ENABLED} - OutputDebugString(PAnsiChar(StringOfChar(' ', DebugSpaces) + 'Enter ' + S)); - inc(DebugSpaces); -{$ENDIF} -end; - -procedure DebugLeave(const S: string); -begin -{$IFDEF DEBUG_ENABLED} - dec(DebugSpaces); - OutputDebugString(PAnsiChar(StringOfChar(' ', DebugSpaces) + 'Leave ' + S)); -{$ENDIF} -end; - -//============================================================================== -// SyntaxCheck. This routine is used to check if words match the sql syntax -// It is called where sql statements are parsed and generated -//============================================================================== - -function SyntaxCheck(LWord, RWord: string): boolean; -begin - DebugEnter('SyntaxCheck'); - try - if CompareText(LWord, RWord) <> 0 then begin - SyntaxCheck := false; - raise AsgError.Create('SQL macro syntax error on sql, expected ' + RWord) - end else - SyntaxCheck := true; - finally - DebugLeave('SyntaxCheck'); - end; -end; - -//============================================================================== -// Parse the SQL fielddescription and return the Delphi Field types, length etc. -//============================================================================== - -procedure GetFieldInfo(FieldInfo: string; var FieldType: TFieldType; - var FieldLen, FieldDec: integer); -var - p1, p2, pn : integer; - vt : string; -begin - DebugEnter('GetFieldInfo'); - FieldType := ftString; // just a default; - FieldLen := 255; - FieldDec := 0; - - p1 := pos('(', FieldInfo); - if p1 <> 0 then - begin - p2 := pos(')', FieldInfo); - if p2 <> 0 then - begin - vt := LowerCase(Copy(FieldInfo, 1, p1 - 1)); - if (vt = 'varchar') or (vt = 'char') or (vt = 'varchar2') then begin - FieldType := ftString; - FieldLen := StrToInt(Copy(FieldInfo, p1 + 1, p2 - p1 - 1)); - end else if (vt = 'nvarchar') or (vt = 'nchar') or (vt = 'nvarchar2') then begin - FieldType := ftWideString; - FieldLen := StrToInt(Copy(FieldInfo, p1 + 1, p2 - p1 - 1)) * 2; - end else if (vt = 'numeric') then begin - vt := Copy(FieldInfo, p1 + 1, p2 - p1 - 1); - pn := pos('.', vt); if pn = 0 then pn := pos(',', vt); - FieldType := ftFloat; - if pn = 0 then begin - FieldLen := StrToInt(vt); - FieldDec := 0; - end else begin - FieldLen := StrToInt(Copy(vt, 1, pn - 1)); - FieldDec := StrToInt(Copy(vt, pn + 1, 2)); - end; - end; - end - else - FieldLen := 256; - end - else - begin - vt := LowerCase(FieldInfo); - if vt = 'date' then - begin - FieldType := ftDate; - FieldLen := 10; - end - else if vt = 'datetime' then - begin - FieldType := ftDateTime; // fpierce original ftDate - FieldLen := 24; // aducom - end - else if vt = 'time' then - begin - FieldType := ftTime; - FieldLen := 12; - end -{$IFDEF ASQLITE_D6PLUS} - else if vt = 'timestamp' then - begin - FieldType := ftTimeStamp; - FieldLen := 12; - end -{$ENDIF} - else if (vt = 'integer') or (vt = 'int') then - begin - FieldType := ftInteger; - FieldLen := 12; - end - else if (vt = 'float') or (vt = 'real') then - begin - FieldType := ftFloat; - FieldLen := 12; - end - else if (vt = 'boolean') or (vt = 'logical') then - begin - FieldType := ftBoolean; - FieldLen := 2; - end - else if (vt = 'char') or (vt = 'byte') then - begin - FieldType := ftString; - FieldLen := 1; - end - else if (vt = 'shorttext') or (vt = 'string') then - begin - FieldType := ftString; - FieldLen := 255; - end - else if (vt = 'widetext') or (vt = 'widestring') then - begin - FieldType := ftWideString; - FieldLen := 512; - end - else if (vt = 'currency') or (vt = 'financial') or (vt = 'money') then - begin - FieldType := ftCurrency; - FieldLen := 10; - end - else if (vt = 'blob') then - begin - FieldType := ftBlob; - FieldLen := SizeOf(Pointer); - end - else if (vt = 'graphic') then - begin - FieldType := ftGraphic; - FieldLen := SizeOf(Pointer); - end - else if (vt = 'clob') or (vt = 'memo') or (vt = 'text') or (vt = 'longtext') then - begin - FieldType := ftMemo; - FieldLen := SizeOf(Pointer); - end; - end; - DebugLeave('GetFieldInfo: ' + vt); -end; - - //============================================================================== - // Convert TDateTime to TDateTimeRec - //============================================================================== - -function DateTimeToNative(DataType: TFieldType; Data: TDateTime): TDateTimeRec; -var - TimeStamp : TTimeStamp; -begin - DebugEnter('DateTimeToNative'); - TimeStamp := DateTimeToTimeStamp(Data); - case DataType of - ftDate: Result.Date := TimeStamp.Date; - ftTime: Result.Time := TimeStamp.Time; - else - Result.DateTime := TimeStampToMSecs(TimeStamp); - end; - DebugLeave('DateTimeToNative'); -end; - -procedure ApplicationHandleException(Sender: TObject); -begin -{$IFDEF ASQLITE_D6PLUS} - if Assigned(Classes.ApplicationHandleException) then - Classes.ApplicationHandleException(Sender); -{$ENDIF} -end; - -//============================================================================== TASQLite3LOG - -procedure TASQLite3Log.Display(Msg: string); -var - fn : Textfile; -begin - DebugEnter('TASQLite3Log.Display'); - if FileExists(FLogFile) then - begin - if FAppend then - begin - AssignFile(fn, FLogFile); - System.Append(fn); - end - else - begin - SysUtils.DeleteFile(FLogFile); - AssignFile(fn, FLogFile); - Rewrite(fn); - end; - end - else - begin - AssignFile(fn, FLogFile); - Rewrite(fn); - end; - Writeln(fn, FormatDateTime('yyyy mmm dd (hh:nn:ss) ', now) + Msg); - CloseFile(fn); - DebugLeave('TASQLite3Log.Display'); -end; - -//============================================================================== TASQLite3PRAGMA - -function TASQLite3Pragma.GetTempCacheSize: string; -begin - DebugEnter('TASQLite3Pragma.GetTempCacheSize'); - GetTempCacheSize := 'pragma cache_size=' + IntToStr(FTempCacheSize); - DebugLeave('TASQLite3Pragma.GetTempCacheSize'); -end; - -function TASQLite3Pragma.GetDefaultCacheSize: string; -begin - DebugEnter('TASQLite3Pragma.GetDefaultCacheSize'); - GetDefaultCacheSize := 'pragma default_cache_size=' + IntToStr(FDefaultCacheSize); - DebugLeave('TASQLite3Pragma.GetDefaultCacheSize'); -end; - -function TASQLite3Pragma.GetDefaultSynchronous: string; -begin - DebugEnter('TASQLite3Pragma.GetDefaultSynchronous'); - GetDefaultSynchronous := 'pragma default_synchronous=' + FDefaultSynchronous; - DebugLeave('TASQLite3Pragma.GetDefaultSynchronous'); -end; - -function TASQLite3Pragma.GetDefaultTempStore: string; -begin - DebugEnter('TASQLite3Pragma.GetDefaultTempStore'); - GetDefaultTempStore := 'pragma default_temp_store=' + FDefaultTempStore; - DebugLeave('TASQLite3Pragma.GetDefaultTempStore'); -end; - -function TASQLite3Pragma.GetTempStore: string; -begin - DebugEnter('TASQLite3Pragma.GetTempStore'); - GetTempStore := 'pragma temp_store=' + FTempStore; - DebugLeave('TASQLite3Pragma.GetTempStore'); -end; - -function TASQLite3Pragma.GetSynchronous: string; -begin - DebugEnter('TASQLite3Pragma.GetSynchronous'); - GetSynchronous := 'pragma synchronous=' + FSynchronous; - DebugLeave('TASQLite3Pragma.GetSynchronous'); -end; - - //============================================================================== TFRESULT - // TResult is a representation of an internal pointerlist of results. - // Only 'normal' results will be stored internally within a fixed memory block - // depending on calculated length internally. This is not the case - // for blobs and clobs. In this case only the handle is stored in the fixed - // structure and a separate memory handle is retrieved to store the blob and - // clob data. This is because the blobs are stored as null terminated 'strings' - // and thus have different lengths. No more memory is allocated this way than - // strictly necessary. - // KEEP IN MIND: ... - // This resultset is NOT used for unidirectional search results. You can - // however, open a dbgrid containing griddata. You cannot update your data - // if you use the unidirectional the result is read-only by default and cannot - // be changed. - // The unidirectional dataset improves performance on large resultsets and - // is to be considered for query-only components... - //============================================================================== - -constructor TFResult.Create(TheDataSet: TASQLite3BaseQuery); -begin - DebugEnter('TFResult.Create'); - Data := TList.Create; - Bookmark := TList.Create; - RowId := TList.Create; - FDataSet := TheDataset; - FLastBookmark := -1; // 2004-14-09 (rps) 0 -> -1 (otherwise insert in an empty table gives index out of range) - DebugLeave('TFResult.Create'); -end; - -destructor TFResult.Destroy; -var - ptr : Pointer; - i : integer; -begin - DebugEnter('TFResult.Destroy'); - FreeBlobs; - if Assigned(Data) then begin - for i := 0 to Data.Count - 1 do begin - ptr := Data.Items[i]; - if Assigned(ptr) then FreeMem(ptr, FBufSize); - end; - Data.Free; // D4 compatibility, otherwise FreeAndNil could be used - Data := nil; - end; - - if Assigned(Bookmark) then begin - Bookmark.Free; - Bookmark := nil; - end; - - if Assigned(RowId) then begin - RowId.Free; - RowId := nil; - end; - - DebugLeave('TFResult.Destroy'); -end; - -procedure TFResult.FreeBlobs; -var i, j : integer; - offset : integer; - ptr : PAnsiChar; - stream : TMemoryStream; -begin - if not Assigned(FDataSet) then exit; - if not Assigned(FDataSet.FieldList) then exit; - for j := 0 to Data.Count - 1 do begin - ptr := GetData(j); - for i := 0 to FDataSet.FieldList.Count - 1 do begin - if FDataSet.FieldList[i].DataType in [ftMemo, ftFmtMemo, ftGraphic, ftBlob] then begin - Offset := FDataset.GetFieldOffset(FDataSet.FieldList[i].FieldNo); - Move((ptr + Offset)^, Pointer(Stream), sizeof(Pointer)); - Stream.Free; - end; - end; - end; -end; - -procedure TFResult.SetBufSize(TheSize: integer); -begin - DebugEnter('TFResult.SetBufSize'); - FBufSize := TheSize; - DebugLeave('TFResult.SetBufSize'); -end; - -//============================================================================== -// Adds a row of data to the resultset. -//============================================================================== - -procedure TFResult.Add(TheBuffer: PAnsiChar; TheRowId: integer); -var - ptr : PAnsiChar; -// i: integer; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TFResult.Add'); -{$ENDIF} - Inc(FLastBookmark); - GetMem(Ptr, FBufSize); - move(TheBuffer^, ptr^, FBufSize); - Data.Add(Ptr); - Bookmark.Add(Pointer(FLastBookMark)); - if TheRowId >= 0 then - RowId.Add(Pointer(TheRowId)) - else - RowId.Add(Pointer(RowId.Count)); -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TFResult.Add'); -{$ENDIF} -end; - -//============================================================================== -// Inserts a row of date into the resultset -//============================================================================== - -procedure TFResult.Insert(Index: integer; TheBuffer: pointer; TheRowId: integer); -var - ptr : Pointer; -begin - DebugEnter('TFResult.Insert'); - Inc(FLastBookmark); - GetMem(Ptr, FBufSize); - move(TheBuffer^, ptr^, FBufSize); - if Data.Count < Index then begin - Data.Add(Ptr); - Bookmark.Add(Pointer(FLastBookMark)); - RowId.Add(Pointer(TheRowId)); - end else begin - Data.Insert(Index, Ptr); - Bookmark.Insert(Index, Pointer(FLastBookMark)); - RowId.Insert(Index, Pointer(TheRowId)); - end; - DebugLeave('TFResult.Insert'); -end; - -//============================================================================== -// Deletes a row of data from the resultset -//============================================================================== - -procedure TFResult.Delete(Index: integer); -var - ptr : pointer; -begin - DebugEnter('TFResult.Delete'); - if not ((Index < 0) or (Index >= Data.Count)) then - begin - ptr := Data.Items[Index]; - if ptr <> nil then - FreeMem(ptr, FBufSize); - Data.Delete(Index); - Bookmark.Delete(Index); - Rowid.Delete(Index); - end; - DebugLeave('TFResult.Delete'); -end; - -//============================================================================== -// Returns a row from the resultset -//============================================================================== - -function TFResult.GetData(Index: integer): Pointer; -begin - DebugEnter('TFResult.GetData'); - if (Index < 0) or (Index >= Data.Count) then - GetData := nil - else - GetData := Data.Items[Index]; - DebugLeave('TFResult.GetData'); -end; - -function TFResult.GetBookmark(Index: integer): integer; -begin - DebugEnter('TFResult.GetBookmark'); - if (Index < 0) or (Index >= Data.Count) then - GetBookmark := -1 - else - GetBookmark := integer(Bookmark.Items[Index]); - DebugLeave('TFResult.GetBookmark'); -end; - -function TFResult.GetRowId(Index: integer): integer; -begin - DebugEnter('TFResult.GetRowId'); - if (Index < 0) or (Index >= RowId.Count) then - GetRowId := -1 - else - GetRowId := integer(RowId.Items[Index]); - DebugLeave('TFResult.GetRowId'); -end; - -function TFResult.Count: integer; -begin - Count := Data.Count; -end; - -function TFResult.IndexOf(TheBookMark: pointer): integer; -begin - Result := BookMark.IndexOf(TheBookmark); -end; - -//============================================================================== ASQLITEDB - -procedure TASQLite3DB.Notification(AComponent: TComponent; Operation: TOperation); -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3DB.Notification'); -{$ENDIF} -// Application.ProcessMessages; - if Assigned(AComponent) then - begin - if (Operation = opRemove) then - begin - if (AComponent is TASQLite3Pragma) then begin - if Assigned(FASQLitePragma) then begin - if TASQLite3Pragma(AComponent) = FASQLitePragma then - FASQLitePragma := nil; - end; - end - else if (AComponent is TASQLite3Log) then - begin - if Assigned(FASQLiteLog) then begin - if TASQLite3Log(AComponent) = FASQLiteLog then - FASQLiteLog := nil; - end; - end - else if (AComponent is TASQLite3InlineSQL) then - begin - if Assigned(FInlineSQL) then begin - if TASQLite3InlineSQL(AComponent) = FInlineSQL then - FInlineSQL := nil; - end; - end; - end; - end; - inherited; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3DB.Notification'); -{$ENDIF} -end; - -function TASQLite3DB.LoadLibs: boolean; -begin - try - DebugEnter('TASQLite3DB.LoadLibs'); - if not(DecimalSeparator in ['.',',']) then - DecimalSeparator := '.'; - - Debug('loading sqlite lib'); -{$IFNDEF SQLite_Static} - Debug(PAnsiChar(DriverDLL)); - Result := false; - DLLHandle := LoadLibrary(PAnsiChar(DriverDLL)); //JohnLito - if DLLHandle <> 0 then - begin - @SQLite3_Open := GetProcAddress(DLLHandle, 'sqlite3_open'); - if not Assigned(@SQLite3_Open) then exit; - @SQLite3_Close := GetProcAddress(DLLHandle, 'sqlite3_close'); - if not Assigned(@SQLite3_Close) then exit; - @SQLite3_Exec := GetProcAddress(DLLHandle, 'sqlite3_exec'); - if not Assigned(@SQLite3_Exec) then exit; - @SQLite3_LibVersion := GetProcAddress(DLLHandle, 'sqlite3_libversion'); - if not Assigned(@SQLite3_LibVersion) then exit; - @SQLite3_ErrorString := GetProcAddress(DLLHandle, 'sqlite3_errmsg'); - if not Assigned(@SQLite3_ErrorString) then exit; - @SQLite3_GetTable := GetProcAddress(DLLHandle, 'sqlite3_get_table'); - if not Assigned(@SQLite3_GetTable) then exit; - @SQLite3_FreeTable := GetProcAddress(DLLHandle, 'sqlite3_free_table'); - if not Assigned(@SQLite3_FreeTable) then exit; - @SQLite3_FreeMem := GetProcAddress(DLLHandle, 'sqlite3_free'); - if not Assigned(@SQLite3_FreeMem) then exit; - @SQLite3_Complete := GetProcAddress(DLLHandle, 'sqlite3_complete'); - if not Assigned(@SQLite3_Complete) then exit; - @SQLite3_LastInsertRow := GetProcAddress(DLLHandle, 'sqlite3_last_insert_rowid'); - if not Assigned(@SQLite3_LastInsertRow) then exit; - @SQLite3_Cancel := GetProcAddress(DLLHandle, 'sqlite3_interrupt'); - if not Assigned(@SQLite3_Cancel) then exit; - @SQLite3_BusyTimeout := GetProcAddress(DLLHandle, 'sqlite3_busy_timeout'); - if not Assigned(@SQLite3_BusyTimeout) then exit; - @SQLite3_BusyHandler := GetProcAddress(DLLHandle, 'sqlite3_busy_handler'); - if not Assigned(@SQLite3_BusyHandler) then exit; - @SQLite3_Changes := GetProcAddress(DLLHandle, 'sqlite3_changes'); - if not Assigned(@SQLite3_Changes) then exit; - @SQLite3_Prepare := GetProcAddress(DLLHandle, 'sqlite3_prepare'); - if not Assigned(@SQLite3_Prepare) then exit; - @SQLite3_Finalize := GetProcAddress(DLLHandle, 'sqlite3_finalize'); - if not Assigned(@SQLite3_Finalize) then exit; - @SQLite3_Reset := GetProcAddress(DLLHandle, 'sqlite3_reset'); - if not Assigned(@SQLite3_Reset) then exit; - @SQLite3_Step := GetProcAddress(DLLHandle, 'sqlite3_step'); - if not Assigned(@SQLite3_Step) then exit; - @SQLite3_Column_blob := GetProcAddress(DLLHandle, 'sqlite3_column_blob'); - if not Assigned(@SQLite3_Column_blob) then exit; - @SQLite3_Column_bytes := GetProcAddress(DLLHandle, 'sqlite3_column_bytes'); - if not Assigned(@SQLite3_Column_bytes) then exit; - @SQLite3_Column_count := GetProcAddress(DLLHandle, 'sqlite3_column_count'); - if not Assigned(@SQLite3_Column_Count) then exit; - @SQLite3_Column_decltype := GetProcAddress(DLLHandle, 'sqlite3_column_decltype'); - if not Assigned(@SQLite3_Column_decltype) then exit; - @SQLite3_Column_double := GetProcAddress(DLLHandle, 'sqlite3_column_double'); - if not Assigned(@SQLite3_Column_double) then exit; - @SQLite3_Column_int := GetProcAddress(DLLHandle, 'sqlite3_column_int'); - if not Assigned(@SQLite3_Column_int) then exit; - @SQLite3_Column_int64 := GetProcAddress(DLLHandle, 'sqlite3_column_int64'); - if not Assigned(@SQLite3_Column_int64) then exit; - @SQLite3_Column_name := GetProcAddress(DLLHandle, 'sqlite3_column_name'); - if not Assigned(@SQLite3_Column_name) then exit; - @SQLite3_Column_text := GetProcAddress(DLLHandle, 'sqlite3_column_text'); - if not Assigned(@SQLite3_Column_text) then exit; - @SQLite3_Column_text16 := GetProcAddress(DLLHandle, 'sqlite3_column_text16'); - if not Assigned(@SQLite3_Column_text16) then exit; - @SQLite3_Column_type := GetProcAddress(DLLHandle, 'sqlite3_column_type'); - if not Assigned(@SQLite3_Column_type) then exit; - @SQLite3_Bind_Blob := GetProcAddress(DLLHandle, 'sqlite3_bind_blob'); - if not Assigned(@SQLite3_Bind_blob) then exit; - @SQLite3_Bind_Text16 := GetProcAddress(DLLHandle, 'sqlite3_bind_text16'); - if not Assigned(@SQLite3_Bind_Text16) then exit; - @SQLite3_Bind_Parameter_Count := GetProcAddress(DLLHandle, 'sqlite3_bind_parameter_count'); - if not Assigned(@SQLite3_Bind_Parameter_Count) then exit; - - Result := true; - end; - {$ELSE} - DllHandle := 1; - @SQLite3_Open := @_sqlite3_open; - @SQLite3_Close := @_sqlite3_close; - @SQLite3_Exec := @_sqlite3_exec; - @SQLite3_LibVersion := @_sqlite3_libversion; - @SQLite3_ErrorString := @_sqlite3_errmsg; - @SQLite3_GetTable := @_sqlite3_get_table; - @SQLite3_FreeTable := @_sqlite3_free_table; - @SQLite3_FreeMem := @_sqlite3_free; - @SQLite3_Complete := @_sqlite3_complete; - @SQLite3_LastInsertRow := @_sqlite3_last_insert_rowid; - @SQLite3_Cancel := @_sqlite3_interrupt; - @SQLite3_BusyTimeout := @_sqlite3_busy_timeout; - @SQLite3_BusyHandler := @_sqlite3_busy_handler; - @SQLite3_Changes := @_sqlite3_changes; - @SQLite3_Prepare := @_sqlite3_prepare; - @SQLite3_Finalize := @_sqlite3_finalize; - @SQLite3_Reset := @_sqlite3_reset; - @SQLite3_Step := @_sqlite3_step; - @SQLite3_Column_blob := @_sqlite3_column_blob; - @SQLite3_Column_bytes := @_sqlite3_column_bytes; - @SQLite3_Column_count := @_sqlite3_column_count; - @SQLite3_Column_decltype := @_sqlite3_column_decltype; - @SQLite3_Column_double := @_sqlite3_column_double; - @SQLite3_Column_int := @_sqlite3_column_int; - @SQLite3_Column_int64 := @_sqlite3_column_int64; - @SQLite3_Column_name := @_sqlite3_column_name; - @SQLite3_Column_text := @_sqlite3_column_text; - @SQLite3_Column_type := @_sqlite3_column_type; - @SQLite3_Bind_Blob := @_sqlite3_bind_blob; - Result := true; - {$ENDIF} - finally - DebugLeave('TASQLite3DB.LoadLibs'); - end; -end; - -procedure TASQLite3DB.ShowError; -var msg : PAnsiChar; -begin - msg := SQLite3_ErrorString(DBHandle); - raise EDatabaseError.Create(msg); -end; - -function TASQLite3DB.SQLite3_ExecSQL(TheStatement: string; Blobs: TList=nil): integer; -var - PF: PAnsiChar; - p: Pointer; - i: Integer; - b: Integer; - m: TMemoryStream; -begin - TheStatement := StringReplace(TheStatement, #2, '?', [rfReplaceAll, rfIgnoreCase]); - PF := PAnsiChar(TheStatement); - repeat - Result := SQLite3_Prepare(DBHandle, PF, -1, p, PF); - if Result = SQLITE_OK then - begin - if Assigned(Blobs) then begin - for i := 0 to Blobs.Count - 1 do Begin - b := i+1; - m := TMemoryStream(Blobs.Items[i]); - SQLite3_Bind_Blob(p, b, PChar(m.Memory), m.Size, nil); - End; - end; - repeat - until SQLite3_Step(p) in [SQLITE_DONE, SQLITE_ERROR, SQLITE_MISUSE]; - Result := SQLite3_Finalize(p); - if Result <> SQLITE_OK then ShowError; - end - else - ShowError; - until PF^ = #0; -end; - -function TASQLite3DB.SQLite3_PrepareResult(DB: Pointer; TheStatement: string; FParams: TParams; Sender: TObject): Pointer; -var - i,tmpi: Integer; - t: PAnsiChar; - RV: Integer; -// RowIdCol: Integer; // column containing rowid -// RowId: Integer; // current record row id (to be stored in resultset) - colname, coltype: PChar; - tmpcolname:string; - FieldType: TFieldType; - FieldLen: Integer; - FieldDec: Integer; - bFirst: Boolean; - wildcard: Integer; -begin - if not (Sender is TASQLite3BaseQuery) then Exit; - - with (Sender as TASQLite3BaseQuery) do begin - // if there are blob fields then we need to bind the blob variable - RowId := -1; - RowIdCol := -1; - TheStatement := StringReplace(TheStatement, #2, '?', [rfReplaceAll, rfIgnoreCase]); - - bFirst := True; -{$IFDEF ASQLITE_D6PLUS} - if FUtf8 then - RV := SQLite3_Prepare(DBHandle, PAnsiChar(AnsiToUtf8(TheStatement)), -1, result, t) - else -{$endif} - RV := SQLite3_Prepare(DBHandle, PAnsiChar(TheStatement), -1, result, t); - - wildcard := 1; - if Assigned(FParams) then begin - for i := 0 to FParams.Count - 1 do begin - if FParams[i].DataType in [ftBlob, ftGraphic] then begin - SQLite3_Bind_Blob(result, wildcard, PChar(FParams[i].AsBlob), FParams[i].GetDataSize, nil); - Inc(wildcard); - end; - end; - end; - - if RV <> 0 then ShowError else begin - if bFirst then begin // retrieve metadata on first row - bFirst := False; - if SQLite3_Column_count(result) > 0 then FieldDefs.Clear; - for i := 0 to SQLite3_Column_count(result) - 1 do begin - colname := SQLite3_Column_name(result, i); - - // the second field named "ID", change in "ID_1" (like InterBase) - if (FieldDefs.IndexOf(colname) >= 0) then begin // Mirko - tmpColName := colname; // Mirko - tmpI := 0; // Mirko - while (FieldDefs.IndexOf(tmpcolname) >= 0) do begin // Mirko - inc(tmpI); // Mirko - tmpColName := colname + '_' + inttostr(tmpI); // Mirko - end; // Mirko - colName := PChar(tmpColName); // Mirko - end; // Mirko - - if CompareText(colname, 'rowid') = 0 then begin - RowIdCol := i; - end else begin - coltype := SQLite3_Column_decltype(result, i); - //SQl: select max(CurID) from Items, sqlite3_column_decltype returns null.. it's probably SQLite bug - // better is to use max(CurID) as something from .... Aducom - if coltype = nil then - GetFieldInfo('string', FieldType, FieldLen, FieldDec) //OL - else - GetFieldInfo(coltype, FieldType, FieldLen, FieldDec); - if TypeLess then begin - FieldType := ftString; - with FieldDefs.AddFieldDef do begin - Name := colname; - DataType := FieldType; - Size := FieldLen; - end; - end else begin - with FieldDefs.AddFieldDef do begin - if FieldType <> ftString then begin - Name := colname; - DataType := FieldType; - if FieldType = ftFloat then - Precision := FieldDec; - end else begin - Name := colname; - DataType := FieldType; - Size := FieldLen; - end; - end; - end; - MaxStrLen := MaxStrLen + GetNativeFieldSize(i + 1); // compensate for terminating zero - FResult.SetBufSize(MaxStrLen + 1 + SizeOf(TBookMark)); - end; - end; - end; - end; - end; -end; - -function TASQLite3DB.SQLite3_GetNextResult(DB: Pointer; TheStatement: pointer; FParams: TParams; Sender: TObject) : pointer; -var - i : integer; - minmin : integer; - RV: Integer; - mv: Integer; -// RowIdCol: Integer; // column containing rowid - convertbuf: TConvertBuffer; - pData: PAnsiChar; - BlobStream: TMemoryStream; -begin - result := nil; - with (Sender as TASQLite3BaseQuery) do begin - - FillChar(ResultStr^, MaxBuf, 0); - RV := SQLite3_Step(theStatement); - if RV = SQLITE_ROW then begin - - // retrieve data - if (Sender is TASQLite3Query) then - MinMin := 1 - else - MinMin := 1; // compensate for 'rowid' - for i := 0 to SQLite3_Column_count(theStatement) - MinMin do begin - if i = RowIdCol then begin // just save rowid - RowId := SQLite3_Column_int(theStatement, i); - end else begin - -// ok, i can find-out that the fiels is null but.... eh.... -// if SQLite3_column_type(theStatement, i) = 5 then begin -// end; - - pData := SQLite3_Column_text(theStatement, i); - if pData = nil then pData := ''; // james - if FTypeLess then begin - mv := GetNativeFieldSize(i + 1); - if StrLen(pData) < Cardinal(mv) then - mv := StrLen(pData); - Move(pData^, (ResultStr + GetFieldOffset(i + 1))^, mv); - end else begin - case FieldDefs[i].DataType of // DI - ftString: // DI - begin // DI - mv := GetNativeFieldSize(i + 1); - if pData <> nil then //OL - begin - if StrLen(pData) < Cardinal(mv) then - mv := StrLen(pData)+1; // plus onennnnnnnnnnnnnnnn - Move(pData^, (ResultStr + GetFieldOffset(i + 1))^, mv); - end; - end; // DI - ftMemo, ftGraphic, ftFmtMemo, ftBlob: // DI - begin // DI - // create memory stream to save blob; - pData := SQLite3_Column_blob(theStatement, i); - BlobStream := TMemoryStream.Create; - if pData <> nil then - BlobStream.Write(pData^, SQLite3_Column_bytes(theStatement, i)) - else begin - pData := ''; - BlobStream.Write(pData^, 0); - end; - Move(BlobStream, (ResultStr + GetFieldOffset(i + 1))^, SizeOf(BlobStream)); - end; // DI - else // DI - begin // DI - convertbuf := UnpackBuffer(pData, FieldDefs[i].DataType); - Move(convertbuf, (ResultStr + GetFieldOffset(i + 1))^, GetFieldSize(i + 1)); - end; - end; - end; - end - end; - Result := ResultStr; - end; - if RV in [SQLITE_DONE] then result := nil; - if RV in [SQLITE_ERROR, SQLITE_MISUSE] then //f.e. inserting NULL in field declared as NOT NULL - ShowError; - end; -end; - -procedure TASQLite3DB.SQLite3_CloseResult(TheStatement : pointer); -var RV : integer; -begin - if TheStatement <> nil then begin - SQLite3_Reset(TheStatement); - RV := SQLite3_Finalize(TheStatement); - if RV <> 0 then raise AsgError.Create('SQLiteExecute error: ' + IntToStr(RV)); - end; -end; - -function TASQLite3DB.SQLite3_Execute(DB: Pointer; TheStatement: string; FParams: TParams; Sender: TObject): Integer; -var - p: Pointer; - RowIdCol: Integer; // column containing rowid -{$IFDEF ASQLITE_D6PLUS} - Cursor: TDBScreenCursor; -{$endif} -begin - SQLite3_Execute := 0; - RowIdCol := -1; - if not (Sender is TASQLite3BaseQuery) then Exit; - try - with (Sender as TASQLite3BaseQuery) do begin -{$IFDEF ASQLITE_D6PLUS} - if Assigned(DBScreen) and (FSQLCursor) then begin - Cursor := DBScreen.Cursor; - DBScreen.Cursor := dcrSQLWait; - end; -{$endif} - RowId := -1; - - FStatement := Connection.SQLite3_PrepareResult(Connection.DBHandle, PAnsiChar(TheStatement),FParams, Sender); - - repeat - p := Connection.SQLite3_GetNextResult(Connection.DBHandle, FStatement, FParams, Sender); - if p <> nil then - FResult.Add(ResultStr, RowId); - until p = nil; - - Connection.SQLite3_CloseResult(FStatement); - FStatement := nil; - end; - finally -{$IFDEF ASQLITE_D6PLUS} - if Assigned(DBScreen) and ((Sender as TASQLite3BaseQuery).FSQLCursor) then begin - DBScreen.Cursor := Cursor; - if DBScreen.Cursor = dcrSQLWait then - DBScreen.Cursor := dcrDefault; - end; -{$endif} - - end; -end; - -function TASQLite3DB.FGetDriverDLL: string; -begin - DebugEnter('TASQLite3DB.FGetDriverDLL'); - if FDriverDLL = '' then - FDriverDLL := 'SQLite3.dll'; - FGetDriverDLL := FDriverDLL; - DebugLeave('TASQLite3DB.FGetDriverDLL'); -end; - -function TASQLite3DB.FGetDefaultExt: string; -begin - DebugEnter('TASQLite3DB.FGetDefaultExt'); - if FDefaultExt = '' then - FDefaultExt := '.sqb'; - FGetDefaultExt := FDefaultExt; - DebugLeave('TASQLite3DB.FGetDefaultExt'); -end; - -procedure TASQLite3DB.FSetDatabase(Database: string); -begin - DebugEnter('TASQLite3DB.FSetDatabase ' + Database); - FDatabase := Trim(Database); - if ExtractFileExt(FDataBase)='' Then // GPA - FDatabase:=FDataBase+FDefaultExt; // GPA - DebugLeave('TASQLite3DB.FSetDatabase'); -end; - -procedure TASQLite3DB.ShowDatabases(List: TStrings); -var - sr : TSearchRec; -begin - DebugEnter('TASQLite3DB.ShowDatabases'); - if DefaultExt = '' then - DefaultExt := '.sqb'; - if DefaultExt[1] <> '.' then - DefaultExt := '.' + DefaultExt; - if DefaultDir <> '' then - if DefaultDir[Length(DefaultDir)] <> '\' then - DefaultDir := DefaultDir + '\'; - if FindFirst(FDefaultDir + '*' + DefaultExt, faAnyFile, sr) = 0 then - begin - repeat - List.Add(sr.Name); - until FindNext(sr) <> 0; - SysUtils.FindClose(sr); - end; - DebugLeave('TASQLite3DB.ShowDatabases'); -end; - -procedure TASQLite3DB.GetTableNames(List: TStrings; SystemTables: boolean = false); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - i : integer; -begin - DebugEnter('TASQLite3DB.GetTableNames'); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar( - 'SELECT name FROM sqlite_master WHERE type="table" ORDER BY name'), - ResultPtr, RowCount, ColCount, ErrMsg); - - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr); // ignore header - for i := 1 to RowCount do - begin - if (CompareText('name', PAnsiChar(ResultStr^)) <> 0) then - List.Add(PAnsiChar(ResultStr^)); - Inc(ResultStr); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetTableNames'); -end; - -procedure TASQLite3DB.GetIndexFieldNames(IndexName: string; List: TStrings); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - i : integer; -begin - DebugEnter('TASQLite3DB.GetIndexFieldNames'); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar( - 'PRAGMA index_info("' + IndexName + '");'), - ResultPtr, RowCount, ColCount, ErrMsg); - - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr, 5); - for i := 1 to RowCount do - begin - List.Insert(0, PAnsiChar(ResultStr^)); - Inc(ResultStr, 3); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetIndexFieldNames'); -end; - -procedure TASQLite3DB.GetIndexNames(List: TStrings; SystemTables: boolean = false); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - i : integer; -begin - DebugEnter('TASQLite3DB.GetIndexNames'); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar( - 'SELECT name FROM sqlite_master WHERE type="index" ORDER BY name'), - ResultPtr, RowCount, ColCount, ErrMsg); - - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr); // ignore header - for i := 1 to RowCount do - begin - List.Add(PAnsiChar(ResultStr^)); - Inc(ResultStr); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetIndexNames'); -end; - -procedure TASQLite3DB.GetFieldNames(TableName: string; List: TStrings); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - i : integer; -begin - DebugEnter('TASQLite3DB.GetFieldNames ' + Tablename); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar('PRAGMA table_info("' + TableName + '");'), - ResultPtr, RowCount, ColCount, ErrMsg); - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr, 6); // headers can be ignored - for i := 1 to RowCount do - begin - Inc(ResultStr); - List.Add(PAnsiChar(ResultStr^)); // the second field contains the fieldname - Inc(ResultStr, 5); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetFieldNames'); -end; - -procedure TASQLite3DB.GetPrimaryKeys(TableName: string; List: TStrings); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; -// PK: ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - Temp : string; - i : integer; -begin - DebugEnter('TASQLite3DB.GetPrimaryKeys ' + Tablename); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar('PRAGMA table_info("' + TableName + '");'), - ResultPtr, RowCount, ColCount, ErrMsg); - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr, 6); // headers can be ignored - for i := 1 to RowCount do - begin - Inc(ResultStr); - Temp := PAnsiChar(ResultStr^); // the second field contains the fieldname - Inc(ResultStr, 4); - // the last field reveils a indicator for primary key - if PAnsiChar(ResultStr^) = '1' then - List.Add(Temp); - Inc(ResultStr); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetPrimaryKeys'); -end; - -procedure TASQLite3DB.GetTableInfo(TableName: string; List: TList); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - Field : TASQLite3Field; - i : integer; -begin - DebugEnter('TASQLite3DB.GetTableInfo ' + Tablename); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar('PRAGMA table_info("' + TableName + '");'), - ResultPtr, RowCount, ColCount, ErrMsg); - ResultStr := ResultPtr; - while List.Count > 0 do - begin - TASQLite3Field(List[0]).Free; - List.Delete(0); - end; - List.Clear; - - Inc(ResultStr,6); - for i := 1 to RowCount do - begin - Field := TASQLite3Field.Create; - with Field do - begin - FieldNumber := StrToIntX(PAnsiChar(ResultStr^)); - Inc(ResultStr); - FieldName := PAnsiChar(ResultStr^); - Inc(ResultStr); - FieldType := PAnsiChar(ResultStr^); - Inc(ResultStr); - FieldNN := StrToIntX(PAnsiChar(ResultStr^)); - Inc(ResultStr); - FieldDefault := PAnsiChar(ResultStr^); - Inc(ResultStr); - FieldPK := StrToIntX(PAnsiChar(ResultStr^)); - Inc(ResultStr); - end; - List.Add(Field); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetTableInfo'); -end; - -// retrieves the user version -function TASQLite3DB.GetUserVersion(database : string=''): integer; -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; -begin - DebugEnter('TASQLite3DB.GetTableIndexNames'); - GetUserVersion := -1; - if not FConnected then - Connected := true; - if FConnected then - begin - if database <> '' then database := database +'.'; - SQLite3_GetTable(DBHandle, PAnsiChar( - 'PRAGMA '+Database+'user_version'), - ResultPtr, RowCount, ColCount, ErrMsg); - ResultStr := ResultPtr; - Inc(ResultStr); - GetUserVersion := StrToIntX(PAnsiChar(ResultStr^)); - end; -end; - -// sets user version. -procedure TASQLite3DB.SetUserVersion(Version : integer; Database : string=''); -begin - if Database <> '' then Database := Database +'.'; - SQLite3_ExecSQL('PRAGMA '+Database+'user_version='+IntToStr(Version)); -end; - -procedure TASQLite3DB.GetTableIndexNames(TableName: string; List: TStrings); -var - ResultPtr : Pointer; - ResultStr : ^Pointer; - RowCount : cardinal; - ColCount : cardinal; - ErrMsg : PAnsiChar; - i : integer; -begin - DebugEnter('TASQLite3DB.GetTableIndexNames'); - if not FConnected then - Connected := true; - if FConnected then - begin - SQLite3_GetTable(DBHandle, PAnsiChar( - 'PRAGMA index_list("' + TableName + '");'), - ResultPtr, RowCount, ColCount, ErrMsg); - - ResultStr := ResultPtr; - List.Clear; - Inc(ResultStr, 4); // Skip header + 1st col. - for i := 1 to RowCount do - begin - List.Insert(0, PAnsiChar(ResultStr^)); - Inc(ResultStr, 3); - end; - if Assigned(ResultPtr) then SQLite3_FreeTable(ResultPtr); - end; - DebugLeave('TASQLite3DB.GetTableIndexNames'); -end; - -procedure TASQLite3DB.DBConnect(Connected: boolean); -var - ErrMsg : PAnsiChar; - DBMS : string; - rv : integer; - i : integer; // GPA -begin - DebugEnter('TASQLite3DB.DBConnect'); - -// ShowMessage(FCharEnc); - if (CompareText(FCharEnc,'utf8')=0) or (FCharEnc='') then - FUtf8 := true - else - FUtf8 := false; - - if (Connected) and (FDatabase = '') then - begin - DebugLeave('TASQLite3DB.DBConnect Exit'); - raise AsgError.Create('Missing database property'); - SQLite3_FreeMem(ErrMsg); - FConnected := false; - exit; - end; - - if not Connected then - begin - if FConnected then - begin - if DLLHandle <> 0 then - begin - Debug('freeing sqlite dll'); - if Assigned(FBeforeDisconnect) then - FBeforeDisconnect(self); - // if closed then all Datasets must be closed (GPA) - if Assigned(Owner) Then - For I:=0 to Owner.ComponentCount-1 do - if Owner.Components[I] is TASQLite3BaseQuery Then - TASQLite3BaseQuery(Owner.Components[I]).Active:=False; - - if Assigned(@SQLite3_Close) then - SQLite3_Close(DBHandle); - - {$IFNDEF SQLite_Static} - FreeLibrary(DLLHandle); - {$ENDIF} - - DLLHandle := 0; - if Assigned(FAfterDisconnect) then - FAfterDisconnect(self); - end; - FConnected := false; - DebugLeave('TASQLite3DB.DBConnect'); - exit; - end - end - else - begin - if CompareText(':memory:', Database) <> 0 then begin - if DefaultDir <> '' then begin - if DefaultDir[Length(DefaultDir)] <> '\' then - DefaultDir := DefaultDir + '\'; - DBMS := DefaultDir + Database; - end else begin - if Pos('\', Database) = 0 then - DBMS := GetCurrentDir + '\' + DataBase - else - DBMS := Database; - end; - - if FMustExist then begin - if not FileExists(DBMS) then begin - DebugLeave('TASQLite3DB.DBConnect ' + 'Database ' + DBMS + ' does not exist'); - raise EDatabaseError.Create('Database ' + DBMS + ' does not exist'); - end; - end; - end else DBMS := Database; // in memory database - - if DLLHandle = 0 then - begin - if not LoadLibs then - begin - FConnected := false; - DebugLeave('TASQLite3DB.DBConnect ' + 'Could Not load SQLite Library'); - raise AsgError.Create('Could not load SQLite library'); - end; - end; - - FConnected := true; - FVersion := SQLite3_LibVersion; - - DBHandle := nil; - ErrMsg := nil; - if Assigned(FBeforeConnect) then - FBeforeConnect(self); - -{$IFDEF ASQLITE_D6PLUS} - if Assigned(@SQLite3_Open) then - if FVersion > '3.2.5' then - rv := SQLite3_Open(PAnsiChar(AnsiToUTF8(DBMS)), DBHandle) - else -{$endif} - rv := SQLite3_Open(PAnsiChar(DBMS), DBHandle); - - if Assigned(FAfterConnect) then - FAfterConnect(self); - - if DBHandle = nil then - FConnected := false; - - if Assigned(FASQLitePragma) then - ExecPragma; - - FLastError := ErrMsg; - if ErrMsg <> nil then - SQLite3_FreeMem(ErrMsg); - // GPA Added to execute InlineSQL in case of use Connected:=True instead of Open - if ExecuteInlineSQL and Assigned(FInlineSQL) then Try // GPA - ExecStartTransaction(''); // GPA - SQLite3_ExecSQL(FInlineSQL.FSQL.Text); // GPA - Commit; // GPA - finally // GPA - ExecuteInlineSQL:=False; //GPA Assure just one execution in case of reopen - end; // GPA - end; - DebugLeave('TASQLite3DB.DBConnect'); -end; - -function TASQLite3DB.RowsAffected: integer; -begin - DebugEnter('TASQLite3DB.RowsAffected'); - if not FConnected then - Result := -1 - else - Result := SQLite3_Changes(DBHandle); - DebugLeave('TASQLite3DB.RowsAffected'); -end; - -//------------------------------------------------------------------------------ -// By Ralf, The Delphi Inspiration -//------------------------------------------------------------------------------ - -function TableExistsCallback(UserData: Pointer; ColumnCount: Integer; ColumnValues, ColumnNames: PPointer): Integer; cdecl; -begin - if AnsiStrIComp(UserData, ColumnValues^) <> 0 then - Result := 0 - else - Result := 1; // Abort -end; - -//------------------------------------------------------------------------------ - -function TASQLite3DB.TableExists(const ATableName: AnsiString): Boolean; -var - ErrMsg: PAnsiChar; -begin - try - { No WHERE clause is used in the SQL statement below. - Instead, the callback function compares without case sensitivity. } - Result := SQLite3_Exec(DBHandle, 'SELECT name FROM sqlite_master', - TableExistsCallback,Pointer(ATableName), ErrMsg) = SQLITE_ABORT; - finally - if ErrMsg <> nil then - begin - SQLite3_FreeMem(ErrMsg); - ShowError; - end; - end; -end; - -//------------------------------------------------------------------------------ -procedure TASQLite3DB.ExecStartTransaction(TransType: string); -begin -// if no transaction type available then use default from asqlitedb - if (TransType = '') then TransType := FTransactionType; - - if ((TransType = '') or (CompareText(TransType, 'DEFAULT') = 0)) then StartTransaction - else if (CompareText(TransType, 'DEFERRED') = 0) then StartDeferredTransaction - else if (CompareText(TransType, 'IMMEDIATE') = 0) then StartImmediateTransaction - else if (CompareText(TransType, 'EXCLUSIVE') = 0) then StartExclusiveTransaction - else StartTransaction; -end; - -procedure TASQLite3DB.StartTransaction; -begin - DebugEnter('TASQLite3DB.StartTransaction'); - if not FConnected then // open database if necessary - Connected := true; // trigger the 'dbconnect' event - if FConnected then SQLite3_ExecSQL('begin transaction'); - DebugLeave('TASQLite3DB.StartTransaction'); -end; - -procedure TASQLite3DB.StartDeferredTransaction; -begin - if not FConnected then // open database if necessary - Connected := true; // trigger the 'dbconnect' event - if FConnected then SQLite3_ExecSQL('begin deferred transaction'); -end; - -procedure TASQLite3DB.StartImmediateTransaction; -begin - if not FConnected then // open database if necessary - Connected := true; // trigger the 'dbconnect' event - if FConnected then SQLite3_ExecSQL('begin immediate transaction'); -end; - -procedure TASQLite3DB.StartExclusiveTransaction; -begin - if not FConnected then // open database if necessary - Connected := true; // trigger the 'dbconnect' event - if FConnected then SQLite3_ExecSQL('begin exclusive transaction'); -end; - -procedure TASQLite3DB.Open; -begin - DebugEnter('TASQLite3DB.Open'); - Connected := true; - - if DLLHandle = 0 then - Connected := false; - - DebugLeave('TASQLite3DB.Open'); -end; - -procedure TASQLite3DB.Close; -begin - DebugEnter('TASQLite3DB.Close'); - Connected := false; - DebugLeave('TASQLite3DB.Close'); -end; - -procedure TASQLite3DB.ExecPragma; -var - Cmd : string; -begin - DebugEnter('TASQLite3DB.ExecPragma'); - if not FConnected then - Connected := true; - if FConnected then - begin - if FASQLitePragma.FTempCacheSize <> 0 then - begin - cmd := FASQLitePragma.GetTempCacheSize; - SQLite3_ExecSQL(cmd); - end; - if FASQLitePragma.FDefaultCacheSize <> 0 then - begin - cmd := FASQLitePragma.GetDefaultCacheSize; - SQLite3_ExecSQL(cmd); - end; - - if FASQLitePragma.FDefaultSynchronous <> '' then - begin - cmd := FASQLitePragma.GetDefaultSynchronous; - SQLite3_ExecSQL(cmd); - end; - - if FASQLitePragma.FDefaultTempStore <> '' then - begin - cmd := FASQLitePragma.GetDefaultTempStore; - SQLite3_ExecSQL(cmd); - end; - - if FASQLitePragma.FTempStore <> '' then - begin - cmd := FASQLitePragma.GetTempStore; - SQLite3_ExecSQL(cmd); - end; - - if FASQLitePragma.FSynchronous <> '' then - begin - cmd := FASQLitePragma.GetSynchronous; - SQLite3_ExecSQL(cmd); - end; - end; - DebugLeave('TASQLite3DB.ExecPragma'); -end; - -procedure TASQLite3DB.Commit; -begin - DebugEnter('TASQLite3DB.Commit'); - if not FConnected then - Connected := true; - if FConnected then SQLite3_ExecSQL('commit transaction'); - DebugLeave('TASQLite3DB.Commit'); -end; - -procedure TASQLite3DB.RollBack; -begin - DebugEnter('TASQLite3DB.RollBack'); - if not FConnected then - Connected := true; - if FConnected then - SQLite3_ExecSQL('rollback transaction'); - DebugLeave('TASQLite3DB.RollBack'); -end; - -constructor TASQLite3DB.Create(AOwner: TComponent); -//var fn : TextFile; -begin - DebugEnter('TASQLite3DB.Create'); - Connected := false; - ASQLiteLog := nil; - ASQLitePragma := nil; - inherited Create(AOwner); - DebugLeave('TASQLite3DB.Create'); -end; - -destructor TASQLite3DB.Destroy; -//var fn : TextFile; -begin - DebugEnter('TASQLite3DB.Destroy'); - FConnected := false; - ASQLiteLog := nil; - ASQLitePragma := nil; - inherited Destroy; - DebugLeave('TASQLite3DB.Destroy'); -end; - -//============================================================================== TASQLite3BaseQuery - -function TASQLite3BaseQuery.CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; //MS -begin - result := sign(integer(Bookmark1^)-integer(Bookmark2^)); -end; - -// Is one or more fields a calculated field? (John Lito) -function TASQLite3BaseQuery.CalcFieldInList(const List: string): Boolean; -var i: Integer; - Fields: TList; -begin - if Pos(';', List) <> 0 then - begin - Result := False; - Fields := TList.Create; - try - GetFieldList(Fields, List); - for i := 0 to Fields.Count - 1 do - if TField(Fields[I]).FieldKind in [fkCalculated, fkLookup] then Result := True; - finally - Fields.Free; - end; - end else - Result := (FieldByName(List).FieldKind in [fkCalculated, fkLookup]); -end; - -function TASQLite3BaseQuery.Lookup(const KeyFields: string; const KeyValues: Variant; - const ResultFields: string): Variant; -var OldState: TDataSetState; -begin - Result := ''; - if Locate(KeyFields, KeyValues, []) then - begin - if CalcFieldInList(ResultFields) then GetCalcFields(PChar(FResult.GetData(FCurRec))); - OldState := SetTempState(dsFilter); - try - Result := FieldValues[ResultFields]; - finally - RestoreState(OldState); - end; - end; -end; - -{ - support routine for UTF16 -} - -procedure TASQlite3BaseQuery.DataConvert(Field: TField; Source, Dest: Pointer; - ToNative: Boolean); -const x: Word = 0; -var L: Integer; -begin - try - case Field.DataType of - ftWideString: - begin - if ToNative then - begin - L := Length(PWideChar(Source^)); - if (L <= 0) then - Move(x,Dest^,2) - else - begin - if (L <= Field.Size) then - Move(PWideChar(Source^)^, Dest^, (L+1)*2) - else - begin - Move(PWideChar(Source^)^, Dest^, Field.Size*2); - //Move(x,(PChar(Dest)+Field.Size-(Field.Size mod 2))^,2+(Field.Size mod 2)); - Move(x, (PChar(Dest)+Field.Size*2 - 2)^, 2); - end; - end; - end - else - begin - WideString(Dest^) := WideString(PWideChar(Source)); - end; - end;//ftWideString - else - begin - inherited DataConvert(Field, Source, Dest, ToNative); - end - end;//case - finally - end; -end;//DataConvert - - -{ - Register detail dataset for a master-detail relationship -} -procedure TASQLite3BaseQuery.RegisterDetailDataset(DetailDataSet: TASQLite3BaseQuery); -var - i : integer; -begin - DebugEnter('TASQLite3BaseQuery.RegisterDetailDataset'); - try - for i := 0 to DetailList.Count - 1 do - if DetailList[i] = DetailDataset then exit; - DetailList.Add(DetailDataSet); - finally - DebugLeave('TASQLite3BaseQuery.RegisterDetailDataset'); - end; -end; - -{ compatibility isue } -procedure TASQLite3BaseQuery.SQLiteMasterChanged; -begin - DebugEnter('TASQLite3BaseQuery.SQLiteMasterChanged'); - DebugLeave('TASQLite3BaseQuery.SQLiteMasterChanged'); -end; - -{ - notify that the master has changed and a requery on the detail has - to be done -} - -procedure TASQLite3BaseQuery.NotifySQLiteMasterChanged; -var - i : integer; -begin - DebugEnter('TASQLite3BaseQuery.NotifySQLiteMasterChanged'); - for i := 0 to DetailList.Count - 1 do - begin - TASQLite3BaseQuery(DetailList[i]).SQLiteMasterChanged; - end; - DebugLeave('TASQLite3BaseQuery.NotifySQLiteMasterChanged'); -end; - -{ - This function returns a string representing the value of the specified field - in SQLite format. Floating point values always use '.' as a decimal separator. - Date values use 'yyyy-mm-dd' format, unless SQLiteDateFormat is set to false, - which results in using TableDateFormat, or system dependent ShortDateFormat - if TableDateFormat is not set. Same goes for DateTime and Time values, for - which default formats are 'yyyy-mm-ss hh:nn:ss' and 'hh:nn:ss.zzz', respectively. - Setting SQLiteDateFormat to false is discouraged. - Result is quoted when necessary. -} -// added by Donnie - -function TASQLite3BaseQuery.GetFieldValue(const AField: TField; const Blobs: TList = nil): string; -var - MS: TMemoryStream; - DateTimeFormat: string; -begin - if (AField.DataSet <> Self) then - raise EInvalidArgument.Create('Only own fields are accepted'); - case AField.DataType of - ftString: -{$IFDEF ASQLITE_D6PLUS} - if Connection.FUtf8 then - Result := QuotedStr(UTF8Encode(VarToWideStr(AField.Value))) - else -{$endif} - Result := QuotedStr(AField.AsString); - ftSmallint, ftInteger, ftWord: - Result := AField.AsString; - ftFloat: - if DecimalSeparator <> '.' then -{$IFDEF ASQLITE_D6PLUS} - Result := AnsiReplaceStr(AField.AsString, DecimalSeparator, '.') -{$else} - Result := StringReplace(AField.AsString, DecimalSeparator, '.', [rfReplaceAll]) -{$endif} - else - Result := AField.AsString; - ftDate: begin - if FSQLiteDateFormat then - DateTimeFormat := 'yyyy"-"mm"-"dd' - else if TableDateFormat <> '' then - DateTimeFormat := TableDateFormat - else - DateTimeFormat := ShortDateFormat; - Result := QuotedStr(FormatDateTime(DateTimeFormat, AField.AsDateTime)); - end; - ftDateTime: begin - if FSQLiteDateFormat then - DateTimeFormat := 'yyyy"-"mm"-"dd" "hh":"nn":"ss"."zzz' - else if TableDateFormat <> '' then - DateTimeFormat := TableDateFormat - else - DateTimeFormat := ShortDateFormat + '" "' + LongTimeFormat; - Result := QuotedStr(FormatDateTime(DateTimeFormat, AField.AsDateTime)); - end; - ftTime: begin - if FSQLiteDateFormat then - DateTimeFormat := 'hh":"nn":"ss"."zzz' - else if TableDateFormat <> '' then - DateTimeFormat := TableDateFormat - else - DateTimeFormat := LongTimeFormat; - Result := QuotedStr(FormatDateTime(DateTimeFormat, AField.AsDateTime)); - end; - ftBlob, ftGraphic, ftMemo, ftFmtMemo: begin - if Blobs = nil then - raise EInvalidArgument.Create('No place to store a blob field'); - MS := TMemoryStream.Create; - TBlobField(AField).SaveToStream(MS); - Result := #2 + IntToStr(1 + Blobs.Add(MS)); - end - else - Result := QuotedStr(AField.AsString); - end; -end; // GetFieldValue - -{ - Unpack the buffer (if necessary) and convert it to a valid representation - this is necessary for sqlite since it it typeless. If typed has been - defined then the fields have to be converted to the appropiate datatype -} - -function TASQLite3BaseQuery.UnpackBuffer(Buffer: PAnsiChar; FieldType: TFieldType): TConvertBuffer; -var - TempInt : integer; - TempDouble : double; - TempBool : wordbool; - TempT : TDateTimeRec; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3BaseQuery.UnpackBuffer: ' + Buffer); -{$ENDIF} - case FieldType of - ftString: - begin -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.UnpackBuffer'); -{$ENDIF} - exit; - end; - ftInteger, ftSmallInt: - begin - TempInt := StrToIntX(Buffer); - Move(TempInt, result, sizeof(TempInt)); - end; - ftTime: - begin - TempT := DateTimeToNative(FieldType, StrToDateTimeX(Buffer)); - Move(TempT, result, sizeof(TDateTime)); - end; - ftDate: - begin - TempT := DateTimeToNative(FieldType, StrToDateTimeX(Buffer)); - Move(TempT, result, sizeof(TDateTime)); - end; - ftDateTime: - begin - if FSQLiteDateFormat then // aducom - TempT := DateTimeToNative(FieldType, YYYYMMDDParser(Buffer)) // jpierce - else - TempT := DateTimeToNative(FieldType, StrToDateTimeX(Buffer)); - Move(TempT, result, sizeof(TDateTime)); - end; - ftFloat, ftBCD, ftCurrency: - begin - TempDouble := StrToFloatX(FloatParser(Buffer)); - Move(TempDouble, result, sizeof(TempDouble)); - end; - -{$IFDEF ASQLITE_D6PLUS} - ftBoolean: - begin - TempBool := StrToBool(Buffer); - Move(TempBool, result, sizeof(TempBool)); - end; -{$ENDIF} - ftMemo, ftGraphic, ftBlob, ftFMTMemo: // pointer to stream - begin - TempInt := StrToInt(Buffer); - Move(TempInt, result, sizeof(TempInt)); - end; - end; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.UnpackBuffer'); -{$ENDIF} -end; - -{ This method is called by TDataSet.Open and also when FieldDefs need to - be updated (usually by the DataSet designer). Everything which is - allocated or initialized in this method should also be freed or - uninitialized in the InternalClose method. } - -constructor TASQLite3BaseQuery.Create(AOwner: TComponent); -begin - DebugEnter('TASQLite3BaseQuery.Create'); - MaxStrLen := 0; - FSQL := TStringList.Create; - FParams := TParams.Create(Self); - DetailList := TList.Create; - FConnection := nil; - FResult := nil; - GetMem(ResultStr, MaxBuf); - SQLCursor := true; - SQLiteDateFormat := true; - TypeLess := false; - ReadOnly := false; - inherited; - DebugLeave('TASQLite3BaseQuery.Create'); -end; - -function TASQLite3BaseQuery.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; -begin - Result := TASQLite3BlobStream.Create(Field as TBlobField, Mode); -end; - -destructor TASQLite3BaseQuery.Destroy; -begin - DebugEnter('TASQLite3BaseQuery.Destroy'); -// Close; -// inherited Destroy; - - if Assigned(FSQL) then begin - TStringList(FSQL).OnChange := nil; - FSQL.Free; - end; - FSQL := nil; - - if Assigned(FParams) then - begin - FParams.Free; - FParams := nil; - end; - - if Assigned(DetailList) then - DetailList.Free; - DetailList := nil; - - if Assigned(FConnection) then - FConnection := nil; - - if Assigned(ResultStr) then - FreeMem(ResultStr); - ResultStr := nil; - - if Assigned(FResult) then - FResult.Free; - FResult := nil; - - inherited; - DebugLeave('TASQLite3BaseQuery.Destroy'); -end; - -procedure TASQLite3BaseQuery.StartTransaction; -begin - if Assigned(FConnection) then - FConnection.ExecStartTransaction(FTransActionType); -end; - -procedure TASQLite3BaseQuery.StartDeferredTransaction; -begin - if Assigned(FConnection) then - FConnection.StartDeferredTransaction; -end; - -procedure TASQLite3BaseQuery.StartImmediateTransaction; -begin - if Assigned(FConnection) then - FConnection.StartImmediateTransaction; -end; - -procedure TASQLite3BaseQuery.StartExclusiveTransaction; -begin - if Assigned(FConnection) then - FConnection.StartExclusiveTransaction; -end; - -procedure TASQLite3BaseQuery.Commit; -begin - if Assigned(FConnection) then - FConnection.Commit; -end; - -procedure TASQLite3BaseQuery.RollBack; -begin - if Assigned(FConnection) then - FConnection.RollBack; -end; - -//function TASQLite3BaseQuery.LocateNearest(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; - //begin - //end; - -// implementation by J Bannon, implementing partial key too. -function TASQLite3BaseQuery.Locate(const KeyFields: string; - const KeyValues: variant; Options: TLocateOptions): boolean; -//loCaseInsensitive, loPartialKey -var - bOk : boolean; - i, j, p : integer; - Fields, SearchValue: string; //Variable SearchValue added by bobmitch - FieldList : TStringList; - DebugStr : string; - DoEnableControls : boolean; -begin - DebugEnter('TASQLite3BaseQuery.Locate ' + Keyfields); - DoEnableControls := not ControlsDisabled; {used to determine whether to EnableControls at end of function} - DisableControls; - FieldList := TStringList.Create; - bOk := false; - try - Fields := KeyFields; - p := pos(';', Fields); - while p > 0 do - begin - FieldList.Add(Copy(Fields, 1, p - 1)); - System.Delete(Fields, 1, p); - p := pos(';', Fields); - end; - if Fields <> '' then - FieldList.Add(Fields); - - First; - for i := 1 to FResult.Data.Count do - begin - SetRecNo(i); - bOk := true; - for j := 0 to FieldList.Count - 1 do - begin - if loCaseInsensitive in Options then - begin - if FieldList.Count = 1 then - begin //Lines 2303 - 2338 by bobmitch, replaces original lines 2303 - 2336 - SearchValue := VarToStr(KeyValues); - if (loPartialKey in Options) and (Length(SearchValue) <= Length(FieldByName(FieldList[j]).AsString)) then - bOk := CompareText(Copy(FieldByName(FieldList[j]).AsString, 1, Length(SearchValue)), SearchValue) = 0 - else - bOk := CompareText(FieldByName(FieldList[j]).AsString, SearchValue) = 0 - end {end loCaseInsensitive in Options AND FieldList.Count = 1} - else - begin - SearchValue := VarToStr(KeyValues[j]); - if (loPartialKey in Options) and (Length(SearchValue) <= Length(FieldByName(FieldList[j]).AsString)) then - bOk := CompareText(Copy(FieldByName(FieldList[j]).AsString, 1, Length(SearchValue)), SearchValue) = 0 - else - bOk := CompareText(FieldByName(FieldList[j]).AsString, SearchValue) = 0 - end {end loCaseInsensitive in Options AND FieldList.Count greater than 1} - end {end loCaseInsensitive in Options} - else - begin {begin loCaseInsensitive NOT in Options} - if FieldList.Count = 1 then - begin - SearchValue := VarToStr(KeyValues); - if (loPartialKey in Options) and (Length(SearchValue) <= Length(FieldByName(FieldList[j]).AsString)) then - bOk := Copy(FieldByName(FieldList[j]).AsString, 1, Length(SearchValue)) = SearchValue - else - bOk := FieldByName(FieldList[j]).AsString = SearchValue - end {end loCaseInsensitive NOT in Options AND FieldList.Count = 1} - else - begin - SearchValue := VarToStr(KeyValues[j]); - if (loPartialKey in Options) and (Length(SearchValue) <= Length(FieldByName(FieldList[j]).AsString)) then - bOk := Copy(FieldByName(FieldList[j]).AsString, 1, Length(SearchValue)) = SearchValue - else - bOk := FieldByName(FieldList[j]).AsString = SearchValue - end; {end loCaseInsensitive NOT in Options AND FieldList.Count greater than 1} - end; {end loCaseInsensitive NOT in Options} - if bOk = false then - break; - end; {end for j := 0 to FieldList.Count - 1} - if bOk then - begin - break; - end; - end; {end for i := 1 to FResult.Data.Count} - if bOk then - begin - Locate := true; - DebugStr := 'TASQLite3BaseQuery.Locate true'; - end - else - begin - Locate := false; - DebugStr := 'TASQLite3BaseQuery.Locate false'; - end; - finally - FieldList.Free; - if DoEnableControls then {restore original state of the controls} - EnableControls; - DebugLeave(DebugStr); - end; -end; - - -function TASQLite3BaseQuery.GetDataSource: TDataSource; - -begin - DebugEnter('TASQLite3BaseQuery.GetDataSource'); - Result := FMasterSource; - DebugLeave('TASQLite3BaseQuery.GetDataSource'); -end; - -procedure TASQLite3BaseQuery.SetSQLiteDateFormat(const Value: boolean); -begin - FSQLiteDateFormat := Value; -end; - -procedure TASQLite3BaseQuery.SetDataSource(Value: TDataSource); -begin - DebugEnter('TASQLite3BaseQuery.SetDataSource'); - if IsLinkedTo(Value) then - DatabaseError('circular references are not allowed', Self); - FMasterSource := Value; - DebugLeave('TASQLite3BaseQuery.SetDataSource'); -end; - -function TASQLite3BaseQuery.GetMasterFields: string; -begin - DebugEnter('TASQLite3BaseQuery.GetMasterFields'); - Result := FMasterFields; //FMasterLink.FieldNames; - DebugLeave('TASQLite3BaseQuery.GetMasterFields'); -end; - -procedure TASQLite3BaseQuery.SetMasterFields(const Value: string); -begin - DebugEnter('TASQLite3BaseQuery.SetMasterFields ' + Value); - FMasterFields := Value; // FMasterLink.FieldNames := Value; - DebugLeave('TASQLite3BaseQuery.SetMasterFields'); -end; - //Checks the State and Results a defined Buffer; - -function TASQLite3BaseQuery.GetActiveBuffer(var Buffer: PAnsiChar): boolean; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3BaseQuery.GetActiveBuffer'); -{$ENDIF} - case State of - dsBrowse: if IsEmpty then - Buffer := nil - else - Buffer := ActiveBuffer; - - dsEdit: Buffer := ActiveBuffer; - dsInsert: Buffer := ActiveBuffer; - dsFilter: Buffer := ActiveBuffer; //FFilterBuffer; - dsCalcFields: Buffer := CalcBuffer; - else - Buffer := nil; - end; - Result := Buffer <> nil; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.GetActiveBuffer ' + PAnsiChar(Buffer)); -{$ENDIF} -end; - -function TASQLite3BaseQuery.GetNativeFieldSize(FieldNo: integer): integer; -begin - DebugEnter('TASQLite3BaseQuery.GetNativeFieldSize'); - Result := 0; - case FieldDefs.Items[FieldNo - 1].Datatype of - ftString: Result := FieldDefs.Items[FieldNo - 1].Size + 1; - ftWideString: Result := FieldDefs.Items[FieldNo - 1].Size + 1; - ftInteger, ftSmallInt, ftDate, ftTime: Result := 12; - ftDateTime: Result := 20; - ftFloat, ftBCD, ftCurrency: Result := 12; - ftBoolean: Result := 12; - ftGraphic, ftMemo, ftBlob, ftFmtMemo: Result := 12; // space for memory handles - else - raise AsgError.Create('Fieldtype of Field "' + FieldDefs.Items[FieldNo - 1].Name + - '" not supported!'); - end; - DebugLeave('TASQLite3BaseQuery.GetNativeFieldSize'); -end; - -function TASQLite3BaseQuery.GetFieldSize(FieldNo: integer): integer; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3BaseQuery.GetFieldSize'); -{$ENDIF} - // try - Result := 0; - case FieldDefs.Items[FieldNo - 1].Datatype of - ftString: Result := FieldDefs.Items[FieldNo - 1].Size+ 1 ; // GPA - Warning UTF-8 length can be potentially > Ansi length - ftWideString: Result := FieldDefs.Items[FieldNo - 1].Size+ 1 ; - ftInteger, ftSmallInt, ftDate, ftTime: Inc(Result, sizeof(integer)); - ftDateTime: Inc(Result, sizeof(TDateTime)); - ftFloat, ftBCD, ftCurrency: Inc(Result, sizeof(double)); - ftBoolean: Inc(Result, sizeof(wordbool)); - ftGraphic, ftMemo, ftBlob, ftFmtMemo: Inc(Result, sizeof(pointer)); - else - raise AsgError.Create('Fieldtype of Field "' + FieldDefs.Items[FieldNo - 1].Name + - '" not supported!'); - end; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.GetFieldSize'); -{$ENDIF} -end; - -function TASQLite3BaseQuery.GetFieldSize(Field: TField): integer; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLiteBaseQuery.GetFieldSize'); -{$ENDIF} - // try - Result := 0; - case Field.DataType of - ftString: Result := Field.Size + 1; - ftWideString: Result := Field.Size + 1; - ftInteger, ftSmallInt, ftDate, ftTime: Inc(Result, sizeof(integer)); - ftDateTime: Inc(Result, sizeof(TDateTime)); - ftFloat, ftBCD, ftCurrency: Inc(Result, sizeof(double)); - ftBoolean: Inc(Result, sizeof(wordbool)); - ftGraphic, ftMemo, ftBlob, ftFmtMemo: Inc(Result, sizeof(pointer)); - else - raise AsgError.Create('Fieldtype of Field "' + Field.FieldName + - '" not supported!'); - end; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLiteBaseQuery.GetFieldSize'); -{$ENDIF} -end; - -function TASQLite3BaseQuery.GetFieldOffset(FieldNo: integer): integer; -var - i : integer; - Offset : integer; -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3BaseQuery.GetFieldOffset'); -{$ENDIF} - Offset := 0; - if FieldNo > 1 then - begin - for i := 1 to FieldNo - 1 do - OffSet := OffSet + GetFieldSize(i); - end; - GetFieldOffset := Offset; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.GetFieldOffset'); -{$ENDIF} -end; - -function TASQLite3BaseQuery.GetCalcFieldOffset(Field: TField): integer; -var - i : integer; - Offset : integer; -begin - -// calcfieldoffset is appended to record (after bookmarkinfo) - -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLiteBaseQuery.GetCalcFieldOffset'); -{$ENDIF} - Offset := FRecBufSize + sizeof(TRecInfo); // startlocation of offsetbuffer - for i := 0 to FieldList.Count - 1 do begin - if CompareText(FieldList[i].FieldName, Field.FieldName) = 0 then begin - GetCalcFieldOffset := Offset; - exit; - end; - if FieldList[i].Calculated then - OffSet := OffSet + GetFieldSize(Field); - end; - GetCalcFieldOffset := Offset; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLiteBaseQuery.GetCalcFieldOffset'); -{$ENDIF} -end; - -procedure TASQLite3BaseQuery.SetSQL(const Value: TStrings); -begin - DebugEnter('TASQLite3BaseQuery.SetSQL'); - Close; - if Assigned(FSQL) then - FSQL.Assign(Value) - else - FSQL := Value; - DebugLeave('TASQLite3BaseQuery.SetSQL'); -end; - -procedure TASQLite3BaseQuery.LoadQueryData; -begin - DebugEnter('TASQLite3BaseQuery.LoadQueryData'); - if Connection.FConnected then begin - Connection.SQLite3_execute(Connection.DBHandle, PAnsiChar(FPrepared), FParams, self); - end; - DebugLeave('TASQLite3BaseQuery.LoadQueryData'); -end; - -procedure TASQLite3BaseQuery.InternalOpen; -begin - DebugEnter('TASQLite3BaseQuery.InternalOpen'); -{$IFDEF ASQLITE_D6PLUS} - if UniDirectional then - SetUnidirectional(true) - else - SetUniDirectional(false); -{$endif} - MaxStrLen := 0; - if (Connection = nil) then - begin // check to see if a valid database - raise AsgError.Create('no database connection'); - end - else - begin - - if Connection.Connected = false then // open database if necessary - Connection.Connected := true; // trigger the 'dbconnect' event - - if (Connection.Connected) and (Connection.DLLHandle <> 0) then - if Assigned(MasterSource) then - begin // notify master about existance! - if (MasterSource.DataSet <> nil) then - begin - if CompareText(Copy(MasterSource.DataSet.ClassName, 1, 9), 'TASQLite3') = 0 then - begin - TASQLite3BaseQuery(MasterSource.DataSet).RegisterDetailDataset( - TASQLite3BaseQuery(Self)); - end - else - begin - raise AsgError.Create('master dataset ' + MasterSource.DataSet.ClassName + - ' is not of TSQLiteBaseQuery type'); - DebugLeave('TASQLite3BaseQuery.InternalOpen'); - exit; - end; - end - else - begin - raise AsgError.Create('master dataset undefined'); - DebugLeave('TASQLite3BaseQuery.InternalOpen'); - exit; - end; - end; - - if not FUniDir then begin - { Load the result into a resultlist } - FResult := TFResult.Create(Self); - LoadQueryData; - end else begin - FResult := TFResult.Create(Self); - FStatement := Connection.SQLite3_PrepareResult(Connection.DBHandle, PAnsiChar(FPrepared),FParams, self); -// ptr := Connection.SQLite3_GetNextResult(Connection.DBHandle, FStatement, FParams,self); - end; - - { Initialize our internal position. - We use -1 to indicate the "crack" before the first record. } - FCurRec := -1; - - { Initialize an offset value to find the TRecInfo in each buffer } - FRecInfoOfs := MaxStrLen; - - { Calculate the size of the record buffers. - Note: This is NOT the same as the RecordSize property which - only gets the size of the data in the record buffer } - FRecBufSize := FRecInfoOfs + SizeOf(TRecInfo); - - { Tell TDataSet how big our Bookmarks are (REQUIRED) } - BookmarkSize := SizeOf(integer); - - { Initialize the FieldDefs } - InternalInitFieldDefs; - - { Create TField components when no persistent fields have been created } - if DefaultFields then - CreateFields; - - { Bind the TField components to the physical fields } - BindFields(true); - - end; - DebugLeave('TASQLite3BaseQuery.InternalOpen'); -end; - -procedure TASQLite3BaseQuery.InternalClose; -begin - DebugEnter('TASQLite3BaseQuery.InternalClose'); - - if (FUniDir) and (FStatement <> nil) and (active) then begin - Connection.SQLite3_CloseResult(FStatement); - FStatement := nil; - end; - - if Assigned(FResult) then - begin - FResult.Free; - FResult := nil; - end; - - { Destroy the TField components if no persistent fields } - if DefaultFields then - DestroyFields; - - { Reset these internal flags } - // FLastBookmark := 0; - FCurRec := -1; - DebugLeave('TASQLite3BaseQuery.InternalClose'); -end; - -{ This property is used while opening the dataset. - It indicates if data is available even though the - current state is still dsInActive. } - -function TASQLite3BaseQuery.IsCursorOpen: boolean; -begin - Result := Assigned(FResult); -end; - -procedure TASQLite3BaseQuery.OpenCursor(InfoQuery: Boolean); -begin - if InfoQuery then - Begin - if Assigned(FConnection) Then Begin - InternalOpen; - InternalClose; - End; - End - else if State <> dsOpening then - inherited OpenCursor(InfoQuery); -end; - -procedure TASQLite3BaseQuery.InternalInitFieldDefs; -begin -// Just here for compatibility -end; - -{ This is the exception handler which is called if an exception is raised - while the component is being stream in or streamed out. In most cases this - should be implemented useing the application exception handler as follows. } - -procedure TASQLite3BaseQuery.InternalHandleException; -begin - DebugEnter('TASQLite3BaseQuery.InternalHandleException'); - ApplicationHandleException(Self); - DebugLeave('TASQLite3BaseQuery.InternalHandleException'); -end; - - { Bookmarks } - { ========= } - -{ In this sample the bookmarks are stored in the Object property of the - TStringList holding the data. Positioning to a bookmark just requires - finding the offset of the bookmark in the TStrings.Objects and using that - value as the new current record pointer. } - -procedure TASQLite3BaseQuery.InternalGotoBookmark(Bookmark: Pointer); -var - Index : integer; -begin - DebugEnter('TASQLite3BaseQuery.InternalGotoBookmark'); -// inherited; - Index := FResult.IndexOf(TObject(PInteger(Bookmark)^)); - if Index <> -1 then - FCurRec := Index - else - if not FUniDir then DatabaseError('Bookmark not found'); - DebugLeave('TASQLite3BaseQuery.InternalGotoBookmark'); -end; - -function TASQLite3BaseQuery.BookmarkValid(Bookmark: Pointer): boolean; -var - Index : integer; -begin - DebugEnter('TASQLite3BaseQuery.BookmarkValid'); - Index := FResult.IndexOf(TObject(PInteger(Bookmark)^)); - if Index <> -1 then - BookmarkValid := true - else - BookmarkValid := false; - DebugLeave('TASQLite3BaseQuery.BookmarkValid'); -end; - -{ This function does the same thing as InternalGotoBookmark, but it takes - a record buffer as a parameter instead } - -procedure TASQLite3BaseQuery.InternalSetToRecord(Buffer: PAnsiChar); -begin - DebugEnter('TASQLite3BaseQuery.InternalSetToRecord'); - InternalGotoBookmark(@PRecInfo(Buffer + FRecInfoOfs).Bookmark); -// NotifySQLiteMasterChanged; - DebugLeave('TASQLite3BaseQuery.InternalSetToRecord'); -end; - -{ Bookmark flags are used to indicate if a particular record is the first - or last record in the dataset. This is necessary for "crack" handling. - If the bookmark flag is bfBOF or bfEOF then the bookmark is not actually - used; InternalFirst, or InternalLast are called instead by TDataSet. } - -function TASQLite3BaseQuery.GetBookmarkFlag(Buffer: PAnsiChar): TBookmarkFlag; -begin - DebugEnter('TASQLite3BaseQuery.GetBookmarkFlag'); - Result := PRecInfo(Buffer + FRecInfoOfs).BookmarkFlag; - DebugLeave('TASQLite3BaseQuery.GetBookmarkFlag'); -end; - -procedure TASQLite3BaseQuery.SetBookmarkFlag(Buffer: PAnsiChar; Value: TBookmarkFlag); -begin - DebugEnter('TASQLite3BaseQuery.SetBookmarkFlag'); - PRecInfo(Buffer + FRecInfoOfs).BookmarkFlag := Value; - DebugLeave('TASQLite3BaseQuery.SetBookmarkFlag'); -end; - -{ These methods provide a way to read and write bookmark data into the - record buffer without actually repositioning the current record } - -procedure TASQLite3BaseQuery.GetBookmarkData(Buffer: PAnsiChar; Data: Pointer); -begin - DebugEnter('TASQLite3BaseQuery.GetBookmarkData'); - PInteger(Data)^ := PRecInfo(Buffer + FRecInfoOfs).Bookmark; - DebugLeave('TASQLite3BaseQuery.GetBookmarkData'); -end; - -procedure TASQLite3BaseQuery.SetBookmarkData(Buffer: PAnsiChar; Data: Pointer); -begin - DebugEnter('TASQLite3BaseQuery.SetBookmarkData'); - PRecInfo(Buffer + FRecInfoOfs).Bookmark := PInteger(Data)^; - DebugLeave('TASQLite3BaseQuery.SetBookmarkData'); -end; - - { Record / Field Access } - { ===================== } - -{ This method returns the size of just the data in the record buffer. - Do not confuse this with RecBufSize which also includes any additonal - structures stored in the record buffer (such as TRecInfo). } - -function TASQLite3BaseQuery.GetRecordSize: word; -begin - DebugEnter('TASQLite3BaseQuery.GetRecordSize'); - Result := MaxStrLen; - DebugLeave('TASQLite3BaseQuery.GetRecordSize'); -end; - -{ TDataSet calls this method to allocate the record buffer. Here we use - FRecBufSize which is equal to the size of the data plus the size of the - TRecInfo structure. } - -function TASQLite3BaseQuery.AllocRecordBuffer: PAnsiChar; -begin - DebugEnter('TASQLiteBaseQuery.AllocRecordBuffer'); - GetMem(Result, FRecBufSize + CalcFieldsSize + sizeof(TRecinfo) + 5); - FillChar(Result^, FRecBufSize + CalcFieldsSize + sizeof(TRecinfo) + 5, 0); -// FillChar(Result^, GetRecordSize+CalcFieldsSize+10, 0); - DebugLeave('TASQLiteBaseQuery.AllocRecordBuffer'); -end; - -{ Again, TDataSet calls this method to free the record buffer. - Note: Make sure the value of FRecBufSize does not change before all - allocated buffers are freed. } - -procedure TASQLite3BaseQuery.FreeRecordBuffer(var Buffer: PAnsiChar); -begin - DebugEnter('TASQLiteBaseQuery.FreeRecordBuffer'); - try FreeMem(Buffer); //, FRecBufSize+CalcFieldsSize+sizeof(TRecinfo)); - except end; -// Buffer := nil; - DebugLeave('TASQLiteBaseQuery.FreeRecordBuffer'); -end; - -{ This multi-purpose function does 3 jobs. It retrieves data for either - the current, the prior, or the next record. It must return the status - (TGetResult), and raise an exception if DoCheck is True. } - -function TASQLite3BaseQuery.GetRecord(Buffer: PAnsiChar; GetMode: TGetMode; - DoCheck: boolean): TGetResult; -var - ptr : pointer; -begin - DebugEnter('TASQLite3BaseQuery.GetRecord'); -// if Active then CheckBrowseMode; - if (not (FUniDir)) and (FResult.Count < 1) then - Result := grEOF - else - begin - Result := grOK; - case GetMode of - gmNext: - if FUniDir then begin -// ptr := Connection.SQLite3_GetNextResult(Connection.DBHandle, FStatement, FParams,self); -// if ptr <> nil then -// Move(ptr^, Buffer^, MaxStrLen) -// else -// Result := grEOF; - end else begin - if FCurRec >= RecordCount - 1 then - Result := grEOF - else - Inc(FCurRec); - end; - gmPrior: begin - if FUniDir then -// Result := grOK - raise AsgError.Create('operation PRIOR not allowed on unidirectional dataset') - else begin - if FCurRec <= 0 then - Result := grBOF - else - Dec(FCurRec); - end; - end; - gmCurrent: - begin - if (FCurRec < 0) or (FCurRec >= RecordCount) then - Result := grError; - end; - end; - if Result = grOK then - begin - if FUniDir then begin - ptr := Connection.SQLite3_GetNextResult(Connection.DBHandle, FStatement, FParams,self); - if ptr <> nil then begin - Move(ptr^, ActiveBuffer^, MaxStrLen); - end else Result := grEOF; - end else begin - ptr := FResult.GetData(FCurRec); - if FResult.Count = 0 then - InternalInitRecord(Buffer) - else - if ptr <> nil then Move(ptr^, Buffer^, MaxStrLen); // albert 17/11/2004 - end; - - with PRecInfo(Buffer + FRecInfoOfs)^ do - begin - BookmarkFlag := bfCurrent; - Bookmark := FResult.GetBookMark(FCurRec); - end; - - if CalcFieldsSize > 0 then - GetCalcFields(Buffer) - - end - else if (Result = grError) and DoCheck then - DatabaseError('No Records'); - end; - DebugLeave('TASQLite3BaseQuery.GetRecord: ' + Buffer); -end; - -{ This routine is called to initialize a record buffer. } - -procedure TASQLite3BaseQuery.InternalInitRecord(Buffer: PAnsiChar); -var - i : integer; - TempT : TDateTimeRec; - Stream : TMemoryStream; -begin - DebugEnter('TASQLite3BaseQuery.InternalInitRecord'); - - for i := 0 to FieldDefs.Count - 1 do - begin - if not (Fields[i].Calculated) then begin - case FieldDefs.Items[i].Datatype of - ftMemo, ftGraphic, ftBlob, ftFmtMemo: begin - Stream := TMemoryStream.Create; - Move(Pointer(Stream), (Buffer + GetFieldOffset(i + 1))^, sizeof(Pointer)); - end; - ftString: PAnsiChar(Buffer + GetFieldOffset(i + 1))^ := #0; - ftBoolean: pBoolean(Buffer + GetFieldOffset(i + 1))^ := false; - ftFloat: pFloat(Buffer + GetFieldOffset(i + 1))^ := 0; - ftSmallInt: pSmallInt(Buffer + GetFieldOffset(i + 1))^ := 0; - ftInteger: pInteger(Buffer + GetFieldOffset(i + 1))^ := integer(nil); - ftCurrency: pFloat(Buffer + GetFieldOffset(i + 1))^ := 0; - ftDate: - begin - TempT := DateTimeToNative(ftDate, now); - Move(TempT, (Buffer + GetFieldOffset(i + 1))^, sizeof(TDateTime)); - end; - ftTime: - begin - TempT := DateTimeToNative(ftTime, now); - Move(TempT, (Buffer + GetFieldOffset(i + 1))^, sizeof(TDateTime)); - end; - ftDateTime: - begin - TempT := DateTimeToNative(ftDateTime, now); - Move(TempT, (Buffer + GetFieldOffset(i + 1))^, sizeof(TDateTime)); - end; - end; - end; - end; - -// if FMasterSource <> nil then begin -// FMasterSource.DataSet.FieldByName() -// end; - - - DebugLeave('TASQLite3BaseQuery.InternalInitRecord'); -end; - -{ Here we copy the data from the record buffer into a field's buffer. - This function, and SetFieldData, are more complex when supporting - calculated fields, filters, and other more advanced features. - See TBDEDataSet for a more complete example. } - -function TASQLite3BaseQuery.GetFieldData(Field: TField; Buffer: Pointer): boolean; -var -// SrcBuffer : PAnsiChar; - MyBuf : string; - - SrcBuffer : PAnsiChar; -// MasterField : TField; -// EqualPos : Integer; -/// MasterFieldName, DetailFieldName : string; - -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3BaseQuery.GetFieldData'); -{$ENDIF} - if Field.FieldNo > 0 then begin - // load masterfield data if there's a master-detail relationship - // key-data should not be NULL!! - if pos(UpperCase(Field.FieldName), UpperCase(FMasterFields)) > 0 then begin - MasterSource.DataSet.GetFieldData(Field, Buffer); - Result := true; - exit; - end; - -// if FMasterFields <> '' then begin -// EqualPos := Pos('=',FMasterFields); -// DetailFieldName := Copy(FMasterFields,1, EqualPos - 1); -// MasterFieldName := Copy(FMasterFields,EqualPos + 1, Length(FMasterFields) - EqualPos -1); -// if UpperCase(Field.FieldName) = UpperCase(DetailFieldName) then begin -// // locate and get master field by name -// MasterField := MasterSource.DataSet.FieldByName(MasterFieldName); -// MasterSource.DataSet.GetFieldData(MasterField, Buffer); -// Result := true; -// exit; -// end; -// end; - - Result := true; // indicates NotNull - if GetActiveBuffer(SrcBuffer) then begin - if (Assigned(Buffer)) and (Assigned(SrcBuffer)) then begin - Move((SrcBuffer + GetFieldOffset(Field.FieldNo))^, Buffer^, GetFieldSize(Field.FieldNo)); - if Field.DataType = ftString then begin // GPA - MyBuf := PChar(Buffer); -{$IFDEF ASQLITE_D6PLUS} - if Connection.FUtf8 then - Move(Utf8ToAnsi(MyBuf)[1], Buffer^, Length(MyBuf)) // GPA - Warning UTF-8 length can be potentially > Ansi length - else -{$endif} - Move(MyBuf[1], Buffer^, Length(MyBuf)); // GPA - Warning UTF-8 length can be potentially > Ansi length - PAnsiChar(PAnsiChar(Buffer) + GetFieldSize(Field.FieldNo))^ := #0; // dev - end; - Result := true; - exit; - end; - if Assigned(SrcBuffer) then - if (Field.DataType <> ftDateTime) and ((SrcBuffer + GetFieldOffset(Field.FieldNo))^ = #0) then - Result := false - end else begin - if assigned(Buffer) then PAnsiChar(Buffer)^ := #0; - Result := false; - end; - end else begin {calcfields} - Result := GetActiveBuffer(SrcBuffer); - if Result and (State in [dsBrowse, dsEdit, dsInsert, dsCalcFields, dsBlockRead]) then begin - if (Assigned(Buffer)) then - Move((SrcBuffer + GetCalcFieldOffset(Field))^, Buffer^, GetFieldSize(Field)); - end; - end; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3BaseQuery.GetFieldData: ' + PAnsiChar(Buffer)); -{$ENDIF} -end; - -// The next two functions are added to increase compatibility with -// components that require it (like DevExpress) - -function TASQLite3BaseQuery.GetFieldData(FieldNo: integer; Buffer: Pointer): boolean; -begin - Result := GetFieldData(FieldByNumber(FieldNo), Buffer); -end; - -{$IFDEF ASQLITE_D6PLUS} -//function TASQLite3BaseQuery.GetFieldData(Field: TField; Buffer: Pointer; -// NativeFormat: boolean): boolean; -//begin -// Result := GetFieldData(Field, Buffer); -//end; -{$ENDIF} - -{ returns the field data back to callee } - -procedure TASQLite3BaseQuery.SetFieldData(Field: TField; Buffer: Pointer); -var - DestBuffer : PAnsiChar; - MyBuf : string; -begin - DebugEnter('TASQLite3BaseQuery.SetFieldData'); - GetActiveBuffer(DestBuffer); - if (Field.FieldNo > 0) and (Assigned(Buffer)) and (Assigned(DestBuffer)) then - begin - if Field.DataType = ftString then - Begin // GPA - MyBuf := PChar(Buffer); -{$IFDEF ASQLITE_D6PLUS} - if Connection.FUtf8 then - MyBuf := AnsiToUTF8(MyBuf); -{$endif} - if Length(MyBuf)>0 then - Move(MyBuf[1], (DestBuffer + GetFieldOffset(Field.FieldNo))^, Length(MyBuf)+1) // GPA - Warning UTF-8 length can be potentially > Ansi length - else begin - MyBuf := #0; - Move(MyBuf[1], (DestBuffer + GetFieldOffset(Field.FieldNo))^, Length(MyBuf)); // GPA - Warning UTF-8 length can be potentially > Ansi length - end; - End - else - Move(Buffer^, (DestBuffer + GetFieldOffset(Field.FieldNo))^, GetFieldSize(Field.FieldNo)); - end else {fkCalculated, fkLookup} begin - if (State in [dsBrowse, dsEdit, dsInsert, dsCalcFields, dsBlockRead]) then begin - if (Field.FieldNo < 0) and (Assigned(Buffer)) and (Assigned(DestBuffer)) then begin - Move(Buffer^, (CalcBuffer + GetCalcFieldOffset(Field))^, GetFieldSize(Field)); - end; - end; - end; - - if not (State in [dsCalcFields, dsFilter, dsNewValue]) then - DataEvent(deFieldChange, Longint(Field)); - DebugLeave('TASQLite3BaseQuery.SetFieldData'); -end; - -{ Record Navigation / Editing } -{ =========================== } - -{ This method is called by TDataSet.First. Crack behavior is required. - That is we must position to a special place *before* the first record. - Otherwise, we will actually end up on the second record after Resync - is called. } - -procedure TASQLite3BaseQuery.InternalFirst; -begin - DebugEnter('TASQLite3BaseQuery.InternalFirst'); - FCurRec := -1; - DebugLeave('TASQLite3BaseQuery.InternalFirst'); -end; - -{ Again, we position to the crack *after* the last record here. } - -procedure TASQLite3BaseQuery.InternalLast; -begin - DebugEnter('TASQLite3BaseQuery.InternalLast'); - FCurRec := FResult.Count; - DebugLeave('TASQLite3BaseQuery.InternalLast'); -end; - -function TASQLite3BaseQuery.GetLastInsertRow: integer; -begin - if Assigned(Connection) then - result := Connection.SQLite3_LastInsertRow(Connection.DBHandle) - else - result := -1; -end; - -{ This method is called by TDataSet.Post. } - -procedure TASQLite3BaseQuery.InternalPost; -var - ptr : Pointer; -begin - DebugEnter('TASQLite3BaseQuery.InternalPost'); - FSaveChanges := true; - { For inserts, just update the data in the string list } - if State = dsEdit then - begin - if FUniDir then - Connection.SQLite3_GetNextResult(Connection.DBHandle, FStatement, FParams,self) - else begin - ptr := FResult.GetData(FCurrec); - if ptr <> nil then - move(ActiveBuffer^, ptr^, FRecBufSize); // albert 17/11/2004 - end;//2006 - end - else - begin - { If inserting (or appending), increment the bookmark counter and - store the data } - FResult.Insert(FCurRec, ActiveBuffer, - Connection.SQLite3_LastInsertRow(Connection.DBHandle)); - end; - DebugLeave('TASQLite3BaseQuery.InternalPost'); -end; - -{ This method is similar to InternalPost above, but the operation is always - an insert or append and takes a pointer to a record buffer as well. } - -procedure TASQLite3BaseQuery.InternalAddRecord(Buffer: Pointer; Append: boolean); -begin - DebugEnter('TASQLite3BaseQuery.InternalAddRecord'); - if FReadOnly then - raise AsgError.Create('Cannot write to a read-only dataset'); - - FSaveChanges := true; - if Append then - InternalLast; - Post; - DebugLeave('TASQLite3BaseQuery.InternalAddRecord'); -end; - -{ This method is called by TDataSet.Delete to delete the current record } - -procedure TASQLite3BaseQuery.InternalDelete; -begin - DebugEnter('TASQLite3BaseQuery.InternalDelete'); - FSaveChanges := true; - FResult.Delete(FCurRec); - if FCurRec >= FResult.Count then - Dec(FCurRec); - DebugLeave('TASQLite3BaseQuery.InternalDelete'); -end; - - { Optional Methods } - { ================ } - -{ The following methods are optional. When provided they will allow the - DBGrid and other data aware controls to track the current cursor postion - relative to the number of records in the dataset. Because we are dealing - with a small, static data store (a stringlist), these are very easy to - implement. However, for many data sources (SQL servers), the concept of - record numbers and record counts do not really apply. } - -function TASQLite3BaseQuery.GetRecordCount: longint; -begin - DebugEnter('TASQLite3BaseQuery.GetRecordCount'); - Result := FResult.Count; - DebugLeave('TASQLite3BaseQuery.GetRecordCount ' + IntToStr(Result)); -end; - -function TASQLite3BaseQuery.GetRecNo: longint; -begin - DebugEnter('TASQLite3BaseQuery.GetRecNo'); - UpdateCursorPos; - if (FCurRec = -1) and (RecordCount > 0) then - Result := 1 - else - Result := FCurRec + 1; - NotifySQLiteMasterChanged; //20040819 - DebugLeave('TASQLite3BaseQuery.GetRecNo'); -end; - -procedure TASQLite3BaseQuery.SetRecNo(Value: integer); -begin - DebugEnter('TASQLite3BaseQuery.SetRecNo'); - if (Value >= 0) and (Value < FResult.Count + 2) then // value < resultetc - begin - FCurRec := Value - 1; - Resync([]); - end; - DebugLeave('TASQLite3BaseQuery.SetRecNo'); -end; - -procedure TASQLite3BaseQuery.SetFiltered(Value: Boolean); -begin - inherited; -end; - -procedure TASQLite3BaseQuery.SetFilterText(const Value: string); -begin - DebugEnter('TASQLite3BaseQuery.SetFilterText ' + Value); - if Active then begin - Close; - inherited; - Open; - end else Inherited; - DebugLeave('TASQLite3BaseQuery.SetFilterText'); -end; - -function TASQLite3BaseQuery.SetQueryParams(InStr: string): string; -var - i : integer; - TempParam : string; - ThisDateFormat : string; - OldDateFormat : string; -begin - if FSQLiteDateFormat then - ThisDateFormat := 'yyyy-mm-dd hh:nn:ss.zzz' - else if (FTableDateFormat <> '') then - ThisDateFormat := FTableDateFormat - else - ThisDateFormat := ShortDateFormat; - - for i := 0 to FParams.Count - 1 do begin - if (FParams.Items[i].DataType <> ftBlob) and - (FParams.Items[i].DataType <> ftGraphic) then begin - TempParam := Fparams.Items[i].AsString; - if (TempParam = '') and (FParams.Items[i].bound) then begin - InStr := StringReplace(Instr, '?', 'NULL', []); - end else begin - //Here we'll replace legitimate '?' characters with an unprintable character - TempParam := StringReplace(TempParam, '?', #1, [rfReplaceAll]); - - //Okay, we need to check string dates and times - if FParams[i].DataType = ftDate then begin - end else if FParams[i].DataType = ftTime then begin - end else if FParams[i].DataType = ftDateTime then begin - OldDateFormat := ShortDateFormat; - ShortDateFormat := ThisDateFormat; - TempParam := DateToStr(FParams[i].AsDateTime); - ShortDateFormat := OldDateFormat; - end; - - InStr := StringReplace(Instr, '?', QuotedStr(TempParam), [rfIgnoreCase]); - end; - end else begin // BLOB !! - //Here we'll replace legitimate '?' characters with an unprintable character - InStr := StringReplace(Instr, '?', #2, [rfIgnoreCase]); - end; - end; - //Here we'll restore legitimate '?' characters - InStr := StringReplace(Instr, #1, '?', [rfReplaceAll]); - SetQueryParams := InStr; -end; - -// ============================================================================= TASQLite3 UPDATE SQL - -constructor TASQLite3UpdateSQL.Create(AOWner: TComponent); -begin - DebugEnter('TASQLite3UpdateSQL.Create'); - inherited Create(AOwner); - FInsertSQL := TStringList.Create; - FUpdateSQL := TStringList.Create; - FDeleteSQL := TStringList.Create; - DebugLeave('TASQLite3UpdateSQL.Create'); -end; - -destructor TASQLite3UpdateSQL.Destroy; -begin - DebugEnter('TASQLite3UpdateSQL.Destroy'); - inherited; - if Assigned(FInsertSQL) then - FInsertSQL.Free; - if Assigned(FUpdateSQL) then - FUpdateSQL.Free; - if Assigned(FDeleteSQL) then - FDeleteSQL.Free; - DebugLeave('TASQLite3UpdateSQL.Destroy'); -end; - -procedure TASQLite3UpdateSQL.SetInsertSQL(const Value: TStrings); -begin - DebugEnter('TASQLite3UpdateSQL.SetInsertSQL'); - if Assigned(FInsertSQL) then - FInsertSQL.Assign(Value) - else - FInsertSQL := Value; - DebugLeave('TASQLite3UpdateSQL.SetInsertSQL'); -end; - -procedure TASQLite3UpdateSQL.SetUpdateSQL(const Value: TStrings); -begin - DebugEnter('TASQLite3UpdateSQL.SetUpdateSQL'); - if Assigned(FUpdateSQL) then - FUpdateSQL.Assign(Value) - else - FUpdateSQL := Value; - DebugLeave('TASQLite3UpdateSQL.SetUpdateSQL'); -end; - -procedure TASQLite3UpdateSQL.SetDeleteSQL(const Value: TStrings); -begin - DebugEnter('TASQLite3UpdateSQL.SetDeleteSQL'); - if Assigned(FDeleteSQL) then - FDeleteSQL.Assign(Value) - else - FDeleteSQL := Value; - DebugLeave('TASQLite3UpdateSQL.SetDeleteSQL'); -end; -// ============================================================================= TASQLite3 QUERY - -constructor TASQLite3Query.Create(AOwner: TComponent); -begin - DebugEnter('TASQLite3Query.Create'); - inherited Create(AOwner); -// FParams := TParams.Create(Self); - TStringList(FSQL).OnChange := QueryChanged; - DebugLeave('TASQLite3Query.Create'); -end; - -destructor TASQLite3Query.Destroy; -begin - DebugEnter('TASQLite3Query.Destroy'); - - if Assigned(FSQL) then - TStringList(FSQL).OnChange := nil; - - inherited Destroy; - DebugLeave('TASQLite3Query.Destroy'); -end; - -procedure TASQLite3Query.Notification(AComponent: TComponent; Operation: TOperation); -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3Query.Notification'); -{$ENDIF} -// Application.ProcessMessages; - if Assigned(AComponent) then - begin - if (Operation = opRemove) then begin - if Assigned(FUpdateSQL) and (AComponent is TASQLite3UpdateSQL) then begin - if TASQLite3UpdateSQL(AComponent) = FUpdateSQL then - FUpdateSQL := nil; - end else - - if Assigned(FConnection) then begin - if (AComponent is TASQLite3DB) and - (TASQLite3Db(AComponent) = FConnection) then begin - Close; - Connection := nil; - end; - end else - - end; - end; - inherited; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3Query.Notification'); -{$ENDIF} -end; - -procedure TASQLite3Query.QueryChanged(Sender: TObject); -begin - DebugEnter('TASQLite3Query.QueryChanged'); - FNoResults := false; - Close; - if not FRawSQL then begin - if assigned(FParams) then FParams.Clear; // new - SQLStr := FParams.ParseSQL(SQL.Text, true) - end else SQLStr := SQL.Text; - DebugLeave('TASQLite3Query.QueryChanged'); -end; - -procedure TASQLite3Query.SetSQL(const Value: TStrings); -begin - DebugEnter('TASQLite3Query.SetSQL'); - FNoResults := false; - Close; - if Assigned(FSQL) then - FSQL.Assign(Value) - else - FSQL := Value; -// FText := FParams.ParseSQL(SQL.Text, False); - DebugLeave('TASQLite3Query.SetSQL'); -end; - -function TASQLite3Query.GetSQL: TStrings; -begin - DebugEnter('TASQLite3Query.GetSQL'); - GetSQL := FSQL; - DebugLeave('TASQLite3Query.GetSQL'); -end; - -procedure TASQLite3Query.InternalDelete; -var - MySQL : string; - TempSQL : string; - SQLStr : string; // added by Donnie - TheWord : string; - TableId : string; - FieldId : string; - startpos : integer; - vartype : integer; - p : integer; - Blobs : TList; // added by Donnie -label - Ende; -begin - DebugEnter('TASQLite3Query.InternalDelete'); - if FReadOnly then - raise AsgError.Create('Cannot delete from a read-only dataset'); - - if Connection.FConnected then - begin - if FAutoCommit then - Connection.ExecStartTransaction(FTransactionType); - - if not Assigned(FUpdateSQL) then - begin - raise AsgError.Create('Missing TASQLite3UpdateSQL component'); - goto ende; - end; - // MyFieldList := TStringList.Create; - // MyFieldValues := TStringList.Create; - Blobs := TList.Create; - MySQL := FUpdateSQL.FDeleteSQL.Text; - startpos := 1; - - TheWord := GetWord(MySQL, startpos, vartype); // delete - if not SyntaxCheck(TheWord, 'delete') then - goto ende; - - TheWord := GetWord(MySQL, startpos, vartype); // from - if not SyntaxCheck(TheWord, 'from') then - goto ende; - - Tableid := GetWord(MySQL, startpos, vartype); // tablename - - TheWord := GetWord(MySQL, startpos, vartype); // where - if not SyntaxCheck(TheWord, 'where') then - goto ende; - - SQLStr := 'delete from ' + TableId + ' where '; - TempSQL := Copy(MySQL, startpos, 999); - - p := pos(':', TempSQL); - while p > 0 do - begin - SQLStr := SQLStr + Copy(TempSQL, 1, p - 1); - System.Delete(TempSQL, 1, p); - startpos := 1; - FieldId := GetWord(TempSQL, startpos, vartype); // variable - System.Delete(TempSQL, 1, startpos); // Tzvetan - // SQLStr := SQLStr + QuotedStr(FieldByName(FieldId).AsString); - // edited by Donnie - SQLStr := SQLStr + GetFieldValue(FieldByName(FieldId), Blobs); - p := pos(':', TempSQL); - end; - SQLStr := SQLStr + Copy(TempSQL, StartPos, 999); - try - Connection.SQLite3_execute(Connection.DBHandle, PAnsiChar(SQLStr), FParams, self); - if FAutoCommit then - Connection.Commit; - except - if FAutoCommit then begin - Connection.RollBack; - raise; - end; - end; - if Assigned(Blobs) then begin - for p := 0 to Blobs.Count - 1 do - TMemoryStream(Blobs.Items[p]).Free; - Blobs.Free; - end; - inherited InternalDelete; - end; - Ende: - DebugLeave('TASQLite3Query.InternalDelete'); -end; - - //============================================================================== - // This is probabely the most difficult thing about these components. - // To be able to have a live resultset a tupdatequery must be used to - // supply the correct sql on the events. In the internalpost the insert and - // update are handled. The routine will take the given sql and remodel it - // to a workable sql which is executed. Keep in mind that this routine - // is far more difficult then the TASQLite3Table, since the last one is depending - // on a unique rownumber, available in the resultset, which might not be - // available to user queries - // There are several syntaxes allowed: - // - // insert into table * - // this will generate an insert statement for each field and values - // i.e. insert into table a,b,c values :a, :b, :c; - // - // insert into table (a, b, c) values * - // this will generate an insert statement like - // insert into table (a, b, c) values (:a, :b, :c); - // - // insert into table (a, b, c) values (:a, :b, :c); - // insert into table (a, b, c) values (:a, "bvalue", :c) etc. - // - // update table set * where - // this will generate a update for all fields like - // update a=:a, b=:b, c=:c where - // - //============================================================================== - -procedure TASQLite3Query.InternalPost; -var - i : integer; - p : integer; - startpos : integer; - MyFieldList : TStringList; - MyFieldValues : TStringList; - MySQL : string; - TheWord : string; - TempSQL : string; - SQLStr : string; // added by Donnie - TableId : string; - FieldId : string; - varType : integer; - Blobs : TList; // added by Donnie -begin - DebugEnter('TASQLite3Query.InternalPost'); - if FReadOnly then - raise AsgError.Create('Cannot post into a read-only dataset'); - MyFieldList := nil; - MyFieldValues := nil; - try - if not Connection.FConnected then - begin - DebugLeave('TASQLite3Query.InternalPost'); - exit; - end; - if FAutoCommit then - Connection.ExecStartTransaction(FTransactionType); - if not Assigned(FUpdateSQL) then - begin - DebugLeave('TASQLite3Query.InternalPost Exception'); - raise AsgError.Create('Missing TASQLite3UpdateSQL component'); - end; - - Blobs := TList.Create; - if (State = dsEdit) and (FResult.Count > 0) then - begin - MyFieldList := TStringList.Create; - MyFieldValues := TStringList.Create; - MySQL := FUpdateSQL.FUpdateSQL.Text; - startpos := 1; - TheWord := GetWord(MySQL, startpos, vartype); // update - if not SyntaxCheck(TheWord, 'update') then - exit; - - Tableid := GetWord(MySQL, startpos, vartype); // tablename - - TheWord := GetWord(MySQL, startpos, vartype); // set or '*' - if TheWord = '*' then - begin - for i := 0 to FieldList.Count - 1 do - begin - MyFieldList.Add(FieldList[i].FieldName); - MyFieldValues.Add(':' + FieldList[i].FieldName); - end; - TheWord := GetWord(MySQL, startpos, vartype); // where - end - else - begin - if not SyntaxCheck(TheWord, 'set') then - begin - DebugLeave('TASQLite3Query.InternalPost'); - exit; - end; - - repeat - TheWord := GetWord(MySQL, startpos, vartype); // fieldname - MyFieldList.Add(TheWord); - - TheWord := GetWord(MySQL, startpos, vartype); // '=' - if not SyntaxCheck(TheWord, '=') then - begin - DebugLeave('TASQLite3Query.InternalPost'); - exit; - end; - TheWord := GetWord(MySQL, startpos, vartype); // 2004-14-09 (rps) ':' or 'where' ---> - if vartype = vtcDelimiter then // <--- - TheWord := GetWord(MySQL, startpos, vartype); // fieldvalue - if TheWord = '*' then - MyFieldValues.Add(':' + MyFieldList[MyFieldList.Count - 1]) - else - MyFieldValues.Add(':' + TheWord); - - TheWord := GetWord(MySQL, startpos, vartype); // , or 'where' - until CompareText(TheWord, 'where') = 0; - end; - - if not SyntaxCheck(TheWord, 'where') then - exit; - - SQLStr := 'update ' + TableId + ' set '; - // for i := 0 to FieldList.Count - 1 do - // typo corrected by Donnie - for i := 0 to MyFieldList.Count - 1 do - begin - // SQLStr := SQLStr + FieldList[i].FieldName + '='; - // typo corrected by Donnie - SQLStr := SQLStr + MyFieldList.Strings[i] + '='; - FieldId := MyFieldValues[i]; - if FieldId[1] = ':' then - begin - System.Delete(FieldId, 1, 1); - // SQLStr := SQLStr + QuotedStr(FieldByName(FieldId).AsString) + ',' - // edited by Donnie - SQLStr := SQLStr + GetFieldValue(FieldByName(FieldId), Blobs) + ',' - end - else - SQLStr := SQLStr + QuotedStr(FieldId) + ',' - end; - System.Delete(SQLStr, Length(SQLStr), 1); // get rid of ',' - TempSQL := ' where ' + Copy(MySQL, startpos, 999); - - p := pos(':', TempSQL); - while p > 0 do - begin - SQLStr := SQLStr + Copy(TempSQL, 1, p - 1); - System.Delete(TempSQL, 1, p); - startpos := 1; - FieldId := GetWord(TempSQL, startpos, vartype); // variable - System.Delete(TempSQL, 1, startpos); // Tzvetan - // SQLStr := SQLStr + QuotedStr(FieldToStr(FieldByName(FieldId))); - // edited by Donnie - SQLStr := SQLStr + GetFieldValue(FieldByName(FieldId), Blobs); - p := pos(':', TempSQL); - end; - SQLStr := SQLStr + Copy(TempSQL, StartPos, 999); - - // Connection.SQLite3_ExecSQL(SQLStr); - // edited by Donnie - Connection.SQLite3_ExecSQL(SQLStr, Blobs); - inherited InternalPost; // rework internals - end - else - begin - { If inserting (or appending), increment the bookmark counter and - store the data. Sytax should be: insert into * or - insert into
(field, field) values (field, field) | * - The sql is parsed and a new (valid) sql generated - } - MyFieldList := TStringList.Create; - MyFieldValues := TStringList.Create; - MySQL := FUpdateSQL.FInsertSQL.Text; - startpos := 1; - TheWord := GetWord(MySQL, startpos, vartype); // insert - if not SyntaxCheck(TheWord, 'insert') then - exit; - - TheWord := GetWord(MySQL, startpos, vartype); // into - if not SyntaxCheck(TheWord, 'into') then - exit; - - Tableid := GetWord(MySQL, startpos, vartype); // tablename - - TheWord := GetWord(MySQL, startpos, vartype); // ( or * - if TheWord = '*' then - begin - for i := 0 to FieldList.Count - 1 do - begin - MyFieldList.Add(FieldList[i].FieldName); - MyFieldValues.Add(':' + FieldList[i].FieldName); - end; - end - else if TheWord = '(' then - begin - repeat - TheWord := GetWord(MySQL, startpos, vartype); // fieldname - MyFieldList.Add(TheWord); - TheWord := GetWord(MySQL, startpos, vartype); // ',' or ')' - until theword = ')'; - TheWord := GetWord(MySQL, startpos, vartype); // values - TheWord := GetWord(MySQL, startpos, vartype); // '(' or '*' - if TheWord = '*' then - begin - for i := 0 to MyFieldList.Count - 1 do - MyFieldValues.Add(':' + MyFieldList[i]); - end - else - begin -// 2004-14-09 (rps) original - does not work - repeat - TheWord := GetWord(MySQL, startpos, vartype); // ':' or fieldname - if vartype = vtcDelimiter then begin - TheWord := GetWord(MySQL, startpos, vartype); // fieldname !! - MyFieldValues.Add(':' + TheWord); - end else - MyFieldValues.Add(TheWord); - TheWord := GetWord(MySQL, startpos, vartype); // ',' or ')' - until theword = ')'; - end; - end - else - begin - raise AsgError.Create('SQL macro syntax error on insertsql, expected ( or *'); - end; - - SQLStr := 'insert into ' + TableId + ' ('; - for i := 0 to MyFieldList.Count - 1 do - SQLStr := SQLStr + MyFieldList[i] + ','; - SQLStr[Length(SQLStr)] := ')'; - SQLStr := SQLStr + ' values ('; - for i := 0 to MyFieldList.Count - 1 do - begin - FieldId := MyFieldValues[i]; - if FieldId[1] = ':' then begin - System.Delete(FieldId, 1, 1); - // SQLStr := SQLStr + QuotedStr(FieldByName(FieldId).AsString) + ',' - // edited by Donnie - SQLStr := SQLStr + GetFieldValue(FieldByName(FieldId), Blobs) + ',' - end else begin - if CompareText(FieldId,'null')=0 then - SQLStr := SQLStr + FieldId+',' - else - SQLStr := SQLStr + QuotedStr(FieldId) + ',' - end; - end; - SQLStr[Length(SQLStr)] := ')'; - // Connection.SQLite3_ExecSQL(SQLStr); - // edited by Donnie - Connection.SQLite3_ExecSQL(SQLStr, Blobs); - if FResult.Count = 0 then - Inc(FCurrec); - inherited InternalPost; // rework internals - end; - if FAutoCommit then - begin - try - Connection.Commit; - except - Connection.RollBack; - raise; - end; - end; - finally - if Assigned(MyFieldList) then MyFieldList.Free; - if Assigned(MyFieldValues) then MyFieldValues.Free; - if Assigned(Blobs) then begin - for i := 0 to Blobs.Count - 1 do - try - TMemoryStream(Blobs.Items[i]).Free; - except - end; - Blobs.Free; - end; - end; - DebugLeave('TASQLite3Query.InternalPost'); -end; - -procedure TASQLite3Query.InternalClose; -begin - DebugEnter('TASQLite3Query.InternalClose'); - FPrepared := ''; - inherited; - DebugLeave('TASQLite3Query.InternalClose'); -end; - -procedure TASQLite3Query.InternalOpen; -//var -// p : integer; -begin - DebugEnter('TASQLite3Query.InternalOpen'); - if Trim(FSQL.Text) = '' then - begin - raise AsgError.Create('no query specified'); - abort; - end; - - if (FMaxResults = 0) and (FStartResult <> 0) then - FMaxResults := -1; - - // SQLStr contains the 'raw' interpreted SQL, with ? as parameterlist - // This string has to be preserved, since it was parsed on entering the sql. - // On close and open (i.e. in case of master-detail) the parsed data still - // must be available - - // We'll prepare the SQL statement into FPrepared. This is also the var - // containing the SQL statement to be executed. - FPrepared := SQLStr; - -// FPrepared := FSql.Text; // 2004-14-09 (rps) changed SqlStr (current) -> FSql.Text (property), - // to bring Close; Open; to work. (Full refresh.) - // this will block parameterized queries to function right (Aducom) - - if (Filtered) and (Filter <> '') then - begin - //in order to let a filter work we use a little trick: - //select * from (my select statement) - FPrepared := 'select * from (' + FPrepared + ') where ' + Filter; - end; - - if FParams.Count > 0 then - FPrepared := SetQueryParams(FPrepared); - - if FMaxResults <> 0 then - FPrepared := FPrepared + ' limit ' + IntToStr(FMaxResults); - if FStartResult <> 0 then - FPrepared := FPrepared + ' offset ' + IntToStr(FStartResult); - inherited; - DebugLeave('TASQLite3Query.InternalOpen'); -end; - - // ============================================================================= - // The master-detail is implemented through the filter object - // in the future perhaps a separate filter object will be used allowing - // to add your own criteria too, but for the time being.. - //============================================================================== - -procedure TASQLite3Query.SQLiteMasterChanged; -var - r, s : string; - m, d : string; - p : integer; - cAnd : string; -begin - DebugEnter('TASQLite3Query.SQLiteMasterChanged'); - Close; - cAnd := ''; - r := FMasterFields; - Filter := ''; - Filtered := false; - while r <> '' do - begin // build the filter sql syntax - p := pos(';', r); - if p = 0 then - begin - if Trim(r) <> '' then - s := r; - r := ''; - end - else - begin - s := Trim(Copy(r, 1, p - 1)); - System.Delete(r, 1, p); - end; - - p := pos('=', s); - if p = 0 then - begin - raise AsgError.Create('Syntax error: Masterfields not build of a=b;... pairs'); - end - else - begin - d := copy(s, 1, p - 1); - m := copy(s, p + 1, 99); - end; -// Filter := Filter + cAnd + d + '=' + FMasterSource.DataSet.FieldByName(m).AsString; - Filter := Filter + cAnd + d + '=' + QuotedStr(FMasterSource.DataSet.FieldByName(m).AsString) ; - cAnd := ' and '; - end; - if (Filter <> '') and (Active) then begin - filtered := true; - Open; - end; - DebugLeave('TASQLite3Query.SQLiteMasterChanged'); -end; - - //============================================================================== - // execsql is used for sql statements which do not require cursors. For this - // reason the fnoresults is set, to prevent building a result set - //============================================================================== - -procedure TASQLite3BaseQuery.ExecSQL; -begin - DebugEnter('TASQLite3BaseQuery.ExecSQL'); - FNoResults := true; - Close; - if FAutoCommit then - begin - Connection.ExecStartTransaction(FTransactionType); - Open; - try - Connection.Commit - except - Connection.RollBack; - raise; - end; - end - else - Open; - DebugLeave('TASQLite3BaseQuery.ExecSQL'); -end; - -procedure TASQLite3BaseQuery.SetParamsList(Value: TParams); -begin - DebugEnter('TASQLite3BaseQuery.SetParamsList'); - FParams.AssignValues(Value); - DebugLeave('TASQLite3BaseQuery.SetParamsList'); -end; - -function TASQLite3BaseQuery.GetParamsCount: word; -begin - DebugEnter('TASQLite3BaseQuery.GetParamsCount'); - Result := FParams.Count; - DebugLeave('TASQLite3BaseQuery.GetParamsCount'); -end; - -procedure TASQLite3Table.SetFOrderBy(OrderBy : string); -begin - if FOrderBy <> OrderBy then begin - Close; - FOrderBy := OrderBy; - end; -end; - -procedure TASQLite3Table.SetFTableName(TableName : string); -begin - Close; - FTableName := TableName; -end; - -procedure TASQLite3Table.Notification(AComponent: TComponent; Operation: TOperation); -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3Table.Notification'); -{$ENDIF} -// Application.ProcessMessages; - if Assigned(AComponent) then - begin - if (Operation = opRemove) then - begin - if (AComponent is TASQLite3DB) and Assigned(FConnection) then - begin - if TASQLite3DB(AComponent) = FConnection then begin - Close; - FConnection := nil; - end; - end else - - end; - end; - inherited; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3Table.Notification'); -{$ENDIF} -end; - -procedure TASQLite3Table.InternalOpen; -begin - DebugEnter('TASQLite3Table.InternalOpen'); - - if FTableName = '' then - begin - raise AsgError.Create('no table specified'); - exit; - end; - FSQL.Clear; - FSQL.Add('select *, rowid as rowid from ' + TableName); - if Filtered then - if Filter <> '' then - FSQL.Add(' where ' + Filter); - if (FMaxResults = 0) and (FStartResult <> 0) then - FMaxResults := -1; - if FMaxResults <> 0 then - FSQL.Add(' limit ' + IntToStr(FMaxResults)); - if FStartResult <> 0 then - FSQL.Add(' offset ' + IntToStr(FStartResult)); - if FOrderBy <> '' then - FSQL.Add(' order by ('+FOrderBy+')'); - SQLStr := FSQL.Text; - FPrepared := SQLStr; - inherited; - DebugLeave('TASQLite3Table.InternalOpen'); -end; - -procedure TASQLite3Table.SQLiteMasterChanged; -var - r, s : string; - m, d : string; - p : integer; - cAnd : string; -begin - DebugEnter('TASQLite3Table.SQLiteMasterChanged'); - Close; - cAnd := ''; - r := FMasterFields; - Filter := ''; - while r <> '' do - begin - p := pos(';', r); - if p = 0 then - begin - if Trim(r) <> '' then - s := r; - r := ''; - end - else - begin - s := Trim(Copy(r, 1, p - 1)); - System.Delete(r, 1, p); - end; - - p := pos('=', s); - if p = 0 then - begin - raise AsgError.Create('Syntax error: Masterfields not build of a=b;... pairs'); - end - else - begin - d := copy(s, 1, p - 1); - m := copy(s, p + 1, 99); - end; -// Filter := Filter + cAnd + d + '=' + FMasterSource.DataSet.FieldByName(m).AsString; - Filter := Filter + cAnd + d + '=' + QuotedStr(FMasterSource.DataSet.FieldByName(m).AsString) ; - cAnd := ' and '; - end; - if Filter <> '' then - filtered := true; - Open; - DebugLeave('TASQLite3Table.SQLiteMasterChanged'); -end; - -procedure TASQLite3Table.InternalDelete; -begin - DebugEnter('TASQLite3Table.InternalDelete'); - if FReadOnly then - raise AsgError.Create('Cannot delete from a read-only dataset'); - - if not Connection.FConnected then - exit; - if FAutoCommit then - Connection.ExecStartTransaction(FTransactionType); - - SQLStr := ''; - CurrentRowId := FResult.GetRowId(FCurRec); - FSQL.Clear; - FSQL.Add('delete from ' + Tablename + ' where rowid=' + QuotedStr(IntToStr(CurrentRowId))); -// SQLStr := StringReplace(FSQL.Text, crlf, #10, [rfReplaceAll, rfIgnoreCase]); // albert - SQLStr := FSQL.Text; - Connection.SQLite3_execute(Connection.DBHandle, PAnsiChar(SQLStr), FParams, self); - - inherited InternalDelete; - - if FAutoCommit then - begin - try - Connection.Commit; - except - Connection.RollBack; - raise; - end; - end; - DebugLeave('TASQLite3Table.InternalDelete'); -end; - -procedure TASQLite3Table.InternalPost; -var - i : integer; - n: Integer; - ThisDateFormat, - tmpMasterDetail, MasterField, chDelim: string; - slDetail, slValues: TStringList; - lsBlobs: TList; //GPA - M:TMemoryStream; //GPA - - // this function will return the fielvalue of an indicated fieldbyordinalnumber - // if the fieldtype is tdatetime it is transfered to the right date notation as - // indicated by jpierce. - - function GetFieldValue(const AField: TField): string; // DI - begin // DI - if AField.DataType = ftDateTime then // DI - GetFieldValue := QuotedStr(FormatDateTime(ThisDateFormat, FieldByName(AField.FieldName).AsDateTime)) // DI - else if (AField.DataType = ftBlob) or (AField.DataType = ftMemo) or (AField.DataType = ftFmtMemo) or (AField.DataType = ftGraphic) then //GPA - begin //GPA - M:=TMemoryStream.Create; //GPA - TBlobField(FieldByName(AField.FieldName)).SaveToStream(M); - GetFieldValue := #2+IntToStr(1+lsBlobs.Add(Pointer(M))) //GPA - end - else - GetFieldValue := QuotedStr(FieldByName(AField.FieldName).AsString); // DI - end; // DI - -var - f: TField; // DI - OldDecimalSeparator: ansiChar; // DI -begin - DebugEnter('TASQLite3Table.InternalPost'); - - if FReadOnly then - raise AsgError.Create('Cannot post into a read-only dataset'); - - // determine datetime style of dataset (if any) - - if FSQLiteDateFormat then - ThisDateFormat := 'yyyy-mm-dd hh:nn:ss.zzz' - else if (FTableDateFormat <> '') then - ThisDateFormat := FTableDateFormat - else - ThisDateFormat := ShortDateFormat; - - if not Connection.FConnected then Exit; - if FAutoCommit then Connection.StartTransaction; - - lsBlobs := TList.Create; //GPA - OldDecimalSeparator := DecimalSeparator; // DI - try // DI - DecimalSeparator := '.'; // DI: Force Delphi's DecimalSeparator to SQL style syntax. - - if (State = dsEdit) and (FResult.Count > 0) then - begin - CurrentRowId := FResult.GetRowId(FCurRec); - FSQL.Clear; - FSQL.Add('update ' + TableName + ' set '); - SQLStr := ''; - for i := 0 to FieldList.Count - 1 do begin - f := FieldList[i]; // DI - if not (f.Calculated or f.Lookup) then // DI - SQLStr := SQLStr + f.FieldName + '=' + GetFieldValue(f) + ','; // DI - end; - SQLStr[Length(SQLStr)] := ' '; - FSQL.Add(SQLStr); - FSQL.Add(' where rowid=' + QuotedStr(IntToStr(CurrentRowId))); - - SQLStr := FSQL.Text; // DI - // DI SQLStr := StringReplace(FSQL.Text, CRLF, #10, [rfReplaceAll, rfIgnoreCase]); - - Connection.SQLite3_ExecSQL(SQLStr,lsBlobs); - inherited InternalPost; // rework internals - end - else - begin - { If inserting (or appending), increment the bookmark counter and - store the data } - FSQL.Clear; - FSQL.Add('insert into ' + TableName + ' ('); - SQLStr := ''; - - for i := 0 to FieldList.Count - 1 do begin - if not (FieldList[i].Calculated or FieldList[i].Lookup) then // aducom - SQLStr := SQLStr + FieldList[i].FieldName + ','; - end; - - SQLStr[Length(SQLStr)] := ')'; - SQLStr := SQLStr + ' values ('; - FSQL.Add(SQLStr); - SQLStr := ''; - - slDetail := TStringList.Create; - slValues := TStringList.Create; - i := 0; chDelim := ';'; - if FMasterSource <> nil then - begin - while i < Length(FMasterFields) do - begin - tmpMasterDetail := GetWordByDelim(FMasterFields, i, chDelim); - n := Pos('=', tmpMasterDetail); - if n <> 0 then - begin - slDetail.Add(Copy(tmpMasterDetail, 1, n - 1)); - MasterField := Copy(tmpMasterDetail, n + 1, Length(tmpMasterDetail) - n); - slValues.Add(FMasterSource.DataSet.FieldByName(MasterField).AsString); - end; - end; - end; - - if (FPrimaryAutoInc) and (FieldDefs[0].DataType = ftInteger) then begin - SQLStr := SQLStr + 'null,'; - n := 1; // aducom - end else begin // aducom - n := 0; // aducom - end; // aducom - - for i := n to FieldList.Count - 1 do // aducom - begin // DI - f := FieldList[i]; - if not (f.Calculated or f.Lookup) then // DI - if slDetail.Find(f.FieldName, n) then // DI - SQLStr := SQLStr + QuotedStr(slValues.Strings[n]) + ',' - else - SQLStr := SQLStr + GetFieldValue(f) + ','; // DI - end; // DI - - slDetail.Free; - slValues.Free; - - SQLStr[Length(SQLStr)] := ')'; - FSQL.Add(SQLStr); - - SQLStr := FSQL.Text; // DI - // DI SQLStr := StringReplace(FSQL.Text, CRLF, #10, [rfReplaceAll, rfIgnoreCase]); - - Connection.SQLite3_ExecSQL(SQLStr, lsBlobs); - if FPrimaryAutoInc then - if FieldDefs[0].DataType = ftInteger then - FieldByName(FieldList[0].FieldName).AsInteger := - Connection.SQLite3_LastInsertRow(Connection.DBHandle); - if FResult.Count = 0 then - Inc(FCurRec); - inherited InternalPost; // rework internals - end; - - finally // DI - DecimalSeparator := OldDecimalSeparator; // DI - For I:=0 to lsBlobs.Count-1 do begin // GPA - M:=TMemoryStream(lsBlobs.Items[I]); // GPA - M.Free; // GPA - end; // GPA - lsBlobs.Free; // GPA - - end; // DI - - if FAutoCommit then - begin - try - Connection.Commit; - except - Connection.RollBack; - raise; - end; - end; - DebugLeave('TASQLite3Table.InternalPost'); -end; - -// Blobfields in SQLite are in fact CLOB fields. However, since it is a large -// chunk of data for all types the ftBlob is used. Keep in mind that blobs are -// stored separately of TResult. Within the result structure only the memory -// handle of the blob is stored. - -constructor TASQLite3BlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode); -begin -// inherited Create; - FField := Field; - FMode := Mode; - FDataSet := FField.DataSet as TASQLite3BaseQuery; - if Mode <> bmWrite then - LoadBlobData; -end; - -destructor TASQLite3BlobStream.Destroy; -begin - DebugEnter('TASQLite3BlobStream.Destroy'); - if FModified then - SaveBlobData; - inherited Destroy; -end; - -function TASQLite3BlobStream.Read(var Buffer; Count: Longint): Longint; -begin - DebugEnter('ASQLiteBlobStream.Read'); - Result := inherited Read(Buffer, Count); - FOpened := True; -end; - -function TASQLite3BlobStream.Write(const Buffer; Count: Longint): Longint; -begin - DebugEnter('ASQLiteBlobStream.Write'); - Result := inherited Write(Buffer, Count); - FModified := True; - FDataSet.SetModified(true); -end; - -procedure TASQLite3BlobStream.LoadBlobData; -var - Stream : TMemoryStream; - Offset : Integer; - RecBuffer : PAnsiChar; -begin - DebugEnter('ASQLiteBlobStream.LoadBlobData'); - Self.Size := 0; - FDataset.GetActiveBuffer(RecBuffer); - -// recbuffer := nil; - - if RecBuffer <> nil then - begin - Offset := FDataset.GetFieldOffset(FField.FieldNo); - Move((RecBuffer + Offset)^, Pointer(Stream), sizeof(Pointer)); - Self.CopyFrom(Stream, 0); - end; - Position := 0; -end; - -procedure TASQLite3BlobStream.SaveBlobData; -var - Stream : TMemoryStream; - Offset : Integer; - RecBuffer : PAnsiChar; -begin - DebugEnter('ASQLiteBlobStream.SaveBlobData'); - FDataset.GetActiveBuffer(RecBuffer); - if RecBuffer <> nil then - begin - Offset := FDataset.GetFieldOffset(FField.FieldNo); - Move((RecBuffer + Offset)^, Pointer(Stream), sizeof(Pointer)); - Stream.Size := 0; - Stream.CopyFrom(Self, 0); - Stream.Position := 0; - end; -end; - -// Inline sql can be used to store sqlstatements outside of the pascal source. -// it prevents large 'sql.add' rows. Also it can be used to generate an in-memory -// database structure if needed - -constructor TASQLite3InlineSQL.Create; -begin - inherited; - FSQL := TStringList.Create; -end; - -destructor TASQLite3InlineSQL.Destroy; -begin - if Assigned(FSQL) then FSQL.Free; - inherited; -end; - -procedure TASQLite3InlineSQL.SetSQL(const Value: TStrings); -begin - if Assigned(FSQL) then - FSQL.Assign(Value) - else - FSQL := Value; -end; - -function TASQLite3InlineSQL.GetSQL: TStrings; -begin - GetSQL := FSQL; -end; - -// save resultset as text, html or xml. Depending on type the following -// will happen: -// -// text: all rows will be output, separated by the given separation symbol -// xml: all rows will be output, tags are the fieldnames -// -// -// fieldvalue -// .... -// -// html: a table will be generated with the given classnames (if available) - -constructor TASQLite3Output.Create; -begin - inherited; - FOutput := TStringList.Create; -end; - -destructor TASQLite3Output.Destroy; -begin - if Assigned(FOutput) then FOutput.Free; - inherited; -end; - -procedure TASQLite3Output.SetFActive(Active: boolean); -begin - FActive := Active; - if FActive = false then begin - end else begin - if Assigned(FDataSource) then begin - if Assigned(FDataSource.DataSet) then begin - Execute(FDataSource.DataSet); - end else raise AsgError.Create('Missing Datasource.Dataset'); - end else raise AsgError.Create('Missing Datasource'); - end; -end; - -procedure TASQLite3Output.SetOutput(const Value: TStrings); -begin - if Assigned(FOutput) then - FOutput.Assign(Value) - else - FOutput := Value; -end; - -function TASQLite3Output.GetOutput: TStrings; -begin - GetOutput := FOutput; -end; - -procedure TASQLite3Output.Notification(AComponent: TComponent; Operation: TOperation); -begin -{$IFDEF DEBUG_VERY_LOUD} - DebugEnter('TASQLite3Output.Notification'); -{$ENDIF} - if Assigned(AComponent) then begin - if (Operation = opRemove) then begin - if (AComponent is TDataSource) then begin - if Assigned(FDataSource) then begin - if TDataSource(AComponent) = FDataSource then - FDataSource := nil; - end; - end - end; - end; - inherited; -{$IFDEF DEBUG_VERY_LOUD} - DebugLeave('TASQLite3DB.Notification'); -{$ENDIF} -end; - -procedure TASQLite3Output.Execute(MyDataSet: TDataSet); -const eXML = 0; - eHTML = 1; - eTXT = 2; -var FType : integer; - i : integer; - Line : string; - Sep : string; -// Indent : integer; -begin - if Assigned(MyDataset) then begin - if MyDataSet.Active = false then MyDataSet.Open; - Output.Clear; - FType := ETxt; - Line := ''; - - if CompareText(FOutputType[1], 'X') = 0 then begin - FType := eXML; - Line := Line + '
' + #10; - end else if CompareText(FOutputType[1], 'H') = 0 then begin - FType := eHTML; - Line := Line + '' + #10 + '' + #10 + - 'Table ' + MyDataSet.Name + '' + #10 + - '' + #10 + - '
' + #10 + - '' + #10; - end else if CompareText(FOutputType[1], 'T') = 0 then begin - FType := eTXT; - end; - - Sep := ''; - - for i := 0 to MyDataSet.FieldDefs.Count - 1 do begin - case FType of - eXML: begin - end; - eHTML: begin - Line := Line + ''; - end; - eTXT: begin - Line := Line + Sep + MyDataSet.FieldDefs[i].Name; - end; - end; - Sep := FSeparator; - end; - - Output.Add(Line); Line := ''; Sep := ''; - MyDataSet.First; - -// Indent := 0; - while not MyDataSet.Eof do begin - - case FType of - eXML: Line := Line + ' ' + #10; - eHTML: Line := Line + '' + #10; - end; - - for i := 0 to MyDataSet.FieldDefs.Count - 1 do begin - case FType of - eXML: begin - Line := Line + ' <' + MyDataSet.FieldDefs[i].Name + '>' + - MyDataSet.FieldByName(MyDataSet.FieldDefs[i].Name).AsString + - '' + #10; - end; - eHTML: begin - Line := Line + ''; - end; - eTXT: begin - Line := Line + Sep + MyDataSet.FieldByName(MyDataSet.FieldDefs[i].Name).AsString; - end; - end; - Sep := FSeparator; - end; - - case FType of - eXML: Line := Line + ' ' + #10; - eHTML: Line := Line + '' + #10; - end; - - Output.Add(Line); Line := ''; Sep := ''; - MyDataSet.Next; - end; - - case FType of - eXML: Line := Line + '
' + MyDataSet.FieldDefs[i].Name + '
' + MyDataSet.FieldByName(MyDataSet.FieldDefs[i].Name).AsString + '
' + #10; - eHTML: Line := Line + '' + #10 + '' + #10 + '' + #10; - end; - Output.Add(Line); - end; -end; - -{$IFDEF IPROVIDER} -procedure TASQLite3BaseQuery.PSEndTransaction(Commit: Boolean); -begin - // qui non sono molto sicuro... - if Assigned(Connection) then - if Commit then - Connection.Commit - else - Connection.RollBack; -end; - -procedure TASQLite3BaseQuery.PSExecute; -begin - UniDirectional := true; - ExecSQL; -end; - -function TASQLite3BaseQuery.PSExecuteStatement(const ASQL: string; - AParams: TParams; ResultSet: Pointer): Integer; -var - AsqlQry : TASQLite3BaseQuery; -begin - if Assigned(ResultSet) then - begin - TDataSet(ResultSet^) := TASQLite3Query.Create(nil); -{$IFDEF ASQLITE_D6PLUS} - TASQlite3Query(ResultSet^).SetUniDirectional(true);// := true; // just store data in provider. -{$endif} - with TASQLite3BaseQuery(ResultSet^) do begin - Connection := self.Connection; - Params.Assign(AParams); - FPrepared := ASql; - if FParams.Count > 0 then - FPrepared := SetQueryParams(FPrepared); - Open; - Result := Connection.RowsAffected; - end; - end - else - begin - AsqlQry := TASQLite3BaseQuery.Create(nil); - try - with AsqlQry do begin - Connection := self.Connection; - FPrepared := ASql; - FParams.Assign(AParams); - if FParams.Count > 0 then - FPrepared := SetQueryParams(AsqlQry.FPrepared); - ExecSQL; - Result := Connection.RowsAffected; - end; - finally - AsqlQry.Free; - end; - end; -end; - -function TASQLite3BaseQuery.PSGetParams: TParams; -begin - Result := Params; -end; - -function TASQLite3BaseQuery.PSGetQuoteChar: string; -begin - Result := '"'; -end; - -function TASQLite3BaseQuery.PSGetTableName: string; -begin - Result := GetTableNameFromSQL(FSQL.Text); -end; - -function TASQLite3BaseQuery.PSInTransaction: Boolean; -begin - Result := Assigned(Connection); -end; - -function TASQLite3BaseQuery.PSIsSQLBased: Boolean; -begin - Result := True; -end; - -function TASQLite3BaseQuery.PSIsSQLSupported: Boolean; -begin - Result := True; -end; - -procedure TASQLite3BaseQuery.PSSetCommandText(const CommandText: string); -begin - if CommandText <> '' then begin - FSQL.Text := CommandText; - FPrepared := CommandText; - end; -end; - -procedure TASQLite3BaseQuery.PSSetParams(AParams: TParams); -begin - if AParams.Count <> 0 then - Params.Assign(AParams); - Close; -end; - -procedure TASQLite3BaseQuery.PSStartTransaction; -begin - StartTransaction; -end; - -procedure TASQLite3BaseQuery.PSReset; -begin - if Active then - begin - Close; - Open; - end; -end; - -function TASQLite3BaseQuery.PSGetUpdateException(e: Exception; Prev: EUpdateError): EUpdateError; -var - PrevErr : Integer; -begin - // Generates an EUpdateError object based on another exception object. - if e is ASGError then begin - if Prev = nil then - PrevErr := Prev.errorCode - else - PrevErr := 0; - with ASGError(e) do - Result := EUpdateError.Create(e.Message, '', -1, PrevErr, e); - end else - Result := EUpdateError.Create(e.Message, '', -1, -1, e); -end; - -function TASQLite3BaseQuery.PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; -begin - // OnUpdateRecord is not supported - Result := False; -end; - -function TASQlite3BaseQuery.PSGetKeyFields: string; -var - i : integer; -begin - Result := ''; - for i := 0 to (Fields.Count - 1) do begin - if pfInKey in Fields[i].ProviderFlags then begin - if Result <> '' then - Result := Result + ';'; - Result := Result + Fields[i].FieldName; - end; - end; -end; - -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asqlite_def.inc b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asqlite_def.inc deleted file mode 100644 index bbd5e3b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/asqlite_def.inc +++ /dev/null @@ -1,99 +0,0 @@ -{ - -Aducom Software SQLite components -Copyright (C) 2003-2006 by Aducom Software -Albert Drent -a.drent@aducom.com -for questions please register on the forum on www.aducom.com/sqlite -} - -{$IFDEF VER125}{C4}{$B-}{$X+}{$T-}{$H+}{$ENDIF} -{$IFDEF VER110}{C3}{$B-}{$X+}{$T-}{$H+}{$ENDIF} -{$IFDEF VER93}{C1}{$B-}{$X+}{$T-}{$H+}{$ENDIF} -{$IFDEF VER180} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {$DEFINE ASQLite_D5PLUS} - {$DEFINE ASQLite_D6PLUS} - {$DEFINE ASQLite_D7PLUS} - {$DEFINE ASQLite_D2005PLUS} - {$DEFINE ASQLite_D2006PLUS} - {DELPHI10} - {$B-}{$X+}{$T-}{$H+} - {$DEFINE ASQLite_DYNARRAY} -{$ENDIF} -{$IFDEF VER170} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {$DEFINE ASQLite_D5PLUS} - {$DEFINE ASQLite_D6PLUS} - {$DEFINE ASQLite_D7PLUS} - {$DEFINE ASQLite_D2005PLUS} - {DELPHI9} - {$B-}{$X+}{$T-}{$H+} - {$DEFINE ASQLite_DYNARRAY} -{$ENDIF} -{$IFDEF VER150} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {$DEFINE ASQLite_D5PLUS} - {$DEFINE ASQLite_D6PLUS} - {$DEFINE ASQLite_D7PLUS} - {DELPHI7} - {$B-}{$X+}{$T-}{$H+} - {$DEFINE ASQLite_DYNARRAY} -{$ENDIF} -{$IFDEF VER140} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {$DEFINE ASQLite_D5PLUS} - {$DEFINE ASQLite_D6PLUS} - {DELPHI6} - {$B-}{$X+}{$T-}{$H+} - {$DEFINE ASQLite_DYNARRAY} -{$ENDIF} -{$IFDEF VER130} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {$DEFINE ASQLite_D5PLUS} - {DELPHI5} - {$DEFINE ASQLite_DYNARRAY} - {$B-}{$X+}{$T-}{$H+} -{$ENDIF} -{$IFDEF VER120} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_D4PLUS} - {DELPHI4} - {$DEFINE ASQLite_DYNARRAY} - {$B-}{$X+}{$T-}{$H+} -{$ENDIF} -{$IFDEF VER100} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_D3PLUS} - {$DEFINE ASQLite_NOINT64} - {DELPHI3} - {$B-}{$X+}{$T-}{$H+} -{$ENDIF} -{$IFDEF VER90} - {$DEFINE ASQLite_D2PLUS} - {$DEFINE ASQLite_NOINT64} - {$DEFINE ASQLite_NOWIDESTRING} - {DELPHI2} - {$B-}{$X+}{$T-}{$H+} -{$ENDIF} - -{$IFDEF LINUX}{KYLIX}{$DEFINE CLX}{$ENDIF} -{$IFDEF FPC}{$H+}{$MODE DELPHI}{$ENDIF} -{$IFDEF ASQLite_D4PLUS}{$DEFINE ASQLite_HAVEVARIANT}{$ENDIF} -{$R-}{$Q-} - -{$IFDEF CLX} -{$DEFINE ASQLite_NOIDISPATCH} // not implemented -{$ENDIF} - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAADODriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAADODriver.pas deleted file mode 100644 index 0d5aeb4..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAADODriver.pas +++ /dev/null @@ -1,1253 +0,0 @@ -unit uDAADODriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_ADODriver_Glyphs.res} - -interface - -uses DB, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, ADODB, - uDAInterfacesEx, uDAUtils; - -type { TDAADODriver } - TDAADODriver = class(TDADriverReference) - end; - - { TDAEADODriver } - TDAEADODriver = class(TDAEDriver, IDADriver40) - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - procedure GetAuxDrivers(out List: IROStrings); override; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetProviderDefaultCustomParameters(Provider: string): string; safecall; - function GetDefaultConnectionType(const AuxDriver: string): string;override; safecall; - public - end; - - { TDAEADOConnection } - TDAEADOConnection = class(TDAEConnection, IDAADOConnection, IDAConnectionModelling, IDACanQueryDatabaseNames,IDAFileBasedDatabase,IDAUseGenerators) - private - fProviderName: string; - fSchemaEnabled: Boolean; - fProviderType: TDAOleDBProviderType; - fADOConnection: TADOConnection; - fQuery_CursorType: TCursorType; - fQuery_CursorLocation: TCursorLocation; - fQuery_ADOLockType: TADOLockType; - procedure GetViewOrTableNames(const aType: string; const aSystemTables: boolean; List: IROStrings); - - protected - function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - - function GetQuoteChars: TDAQuoteCharArray; override; - function isAlive: Boolean; override; safecall; - - // IADOConnection - function GetProviderName: string; safecall; - function GetProviderType: TDAOleDBProviderType; safecall; - function GetCommandTimeout: Integer; safecall; - procedure SetCommandTimeout(const Value: Integer); safecall; - - // IDAConnectionModelling - function BuildCreateTableSQL(aDataSet: TDADataSet; const aOverrideName: string = ''): string; safecall; - procedure CreateTable(aDataSet: TDADataSet; const aOverrideName: string = ''); safecall; - function FieldToDeclaration(aField: TDAField): string; safecall; - - // IDACanQueryDatabaseNames - function GetDatabaseNames: IROStrings; - function GetSPSelectSyntax(HasArguments: Boolean): String; override; safecall; - // IDAFileBasedDatabase - function GetFileExtensions: IROStrings; - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; - { IDAUseGenerators } - function GetNextAutoinc(const GeneratorName: string): integer; safecall; - public - constructor Create(aDriver: TDAEDriver; aName: string = ''); override; - property SchemaEnabled: Boolean read fSchemaEnabled write fSchemaEnabled; - end; - - { TDAEADOQuery } - TDAEADOQuery = class(TDAEDataset, IDAMustSetParams) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure RefreshParams; override; safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - - public - end; - - { TDAEADOStoredProcedure } - TDAEADOStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - procedure RefreshParams; override; - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses Classes, SysUtils, uDADriverManager, uDARes, Variants, ADOInt, uDAMacroProcessors, - Math, uDAHelpers, uROBinaryHelpers, Windows, uDAOracleInterfaces,uDAPostgresInterfaces; - -const - Default_CursorType = ctOpenForwardOnly; - Default_CursorLocation = clUseServer; - Default_ADOLockType = ltReadOnly; - - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAADODriver]); -end; - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAEADODriver.Create(nil); - result := _driver; -end; - -type - TDecimalVariant = packed record - VarType: TVarType; - scale: Byte; - sign: Byte; - Hi32: Cardinal; - Lo32: Cardinal; - Mid32: Cardinal; - Dummy: Cardinal; - end; - -function DecimalToInt64(const V: Variant): Int64; -var - vData: TDecimalVariant absolute V; -begin - if (vData.VarType = 14) and (vData.scale = 0) and (vData.Hi32 = 0) then begin - Result := Int64(vData.Lo32) or (Int64(vData.Mid32) shl 32); - if vData.sign <> 0 then result := -Result; - end else result := v; -end; - -function Int64ToDecimal(Data: Int64): Variant; -var - vd: TDecimalVariant absolute Result; -begin - VarClear(Result); - vd.scale := 0; - if data < 0 then begin - vd.Sign := 128; - data := -data; - end else - vd.sign := 0; - vd.Hi32 := 0; - vd.Mid32 := int64(data shr 32); - vd.Lo32 := data; - vd.VarType := 14; -end; - - -{ TDAEADOConnection } - -procedure TDAEADOConnection.DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - lConnectionString: string; - i: Integer; - sName,sValue: string; -begin - inherited; - - with aConnStrParser do begin - lConnectionString := ''; - if AuxDriver <> '' then lConnectionString := lConnectionString + 'Provider=' + AuxDriver + ';' else - raise EDADriverException.Create('No aux driver specified for ADO connection'); - - fProviderName := AuxDriver; - fProviderType := OleDBDriverIdToOleDBProviderType(fProviderName); - - if (Self.UserID <> '') then - lConnectionString := lConnectionString + 'User ID=' + Self.UserID + ';' - else if (UserID <> '') then - lConnectionString := lConnectionString + 'User ID=' + UserID + ';'; - - if (Self.Password <> '') then - lConnectionString := lConnectionString + 'Password=' + Self.Password + ';' - else if (Password <> '') then - lConnectionString := lConnectionString + 'Password=' + Password + ';'; - - if fProviderType = oledb_Jet then begin - lConnectionString := lConnectionString + 'Data Source=' + Database+';'; - end else begin - if Database <> '' then begin - if fProviderType = oledb_Postgresql then - lConnectionString := lConnectionString + 'Location=' + Database + ';' - else - lConnectionString := lConnectionString + 'Initial Catalog=' + Database + ';'; - end; - if Server <> '' then lConnectionString := lConnectionString + 'Data Source=' + Server + ';'; - - if fProviderType <> oledb_Postgresql then - lConnectionString := lConnectionString + 'OLE DB SERVICES=-2;'; - end; - fSchemaEnabled := false; - for i := 0 to AuxParamsCount -1 do - begin - sName := AuxParamNames[i]; - if sName = '' then Continue; - sValue := AuxParams[AuxParamNames[i]]; - if AnsiSameText('SCHEMAS',sName) then - fSchemaEnabled := sValue = '1' - else if AnsiSameText(sName, 'CursorLocation') then begin - if AnsiSameText('clUseServer',sValue) then - fQuery_CursorLocation:= clUseServer - else if AnsiSameText('clUseClient',sValue) then - fQuery_CursorLocation:= clUseClient; - end else if AnsiSameText(sName,'CursorType') then begin - if AnsiSameText('ctUnspecified',sValue) then - fQuery_CursorType:=ctUnspecified - else if AnsiSameText('ctOpenForwardOnly',sValue) then - fQuery_CursorType:=ctOpenForwardOnly - else if AnsiSameText('ctKeyset',sValue) then - fQuery_CursorType:=ctKeyset - else if AnsiSameText('ctDynamic',sValue) then - fQuery_CursorType:=ctDynamic - else if AnsiSameText('ctStatic',sValue) then - fQuery_CursorType:=ctStatic; - end else if AnsiSameText(sName, 'LockType') then begin - if AnsiSameText('ltUnspecified',sValue) then - fQuery_ADOLockType:= ltUnspecified - else if AnsiSameText('ltReadOnly',sValue) then - fQuery_ADOLockType:= ltReadOnly - else if AnsiSameText('ltPessimistic',sValue) then - fQuery_ADOLockType:= ltPessimistic - else if AnsiSameText('ltOptimistic',sValue) then - fQuery_ADOLockType:= ltOptimistic - else if AnsiSameText('ltBatchOptimistic',sValue) then - fQuery_ADOLockType:= ltBatchOptimistic; - end else begin - if sName[1] = '@' then sName:= Pchar(sName)+1; - lConnectionString := lConnectionString + sName + '=' + sValue +';'; - end; - end; - fADOConnection.ConnectionString := lConnectionString; - end; - SchemaEnabled := fSchemaEnabled or ((UpperCase(GetProviderName) = 'SQLNCLI') or (UpperCase(GetProviderName) ='SQLNCLI.1')); -end; - -function TDAEADOConnection.DoBeginTransaction: integer; -begin - result := fADOConnection.BeginTrans -end; - -procedure TDAEADOConnection.DoCommitTransaction; -begin - fADOConnection.CommitTrans -end; - -function TDAEADOConnection.CreateCustomConnection: TCustomConnection; -begin - fSchemaEnabled := true; - fADOConnection := TADOConnection.Create(nil); - fADOConnection.LoginPrompt := FALSE; - - result := fADOConnection; -end; - -function TDAEADOConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEADOQuery; -end; - -function TDAEADOConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEADOStoredProcedure; -end; - -procedure TDAEADOConnection.DoGetStoredProcedureNames(out List: IROStrings); -var - Schema, NameField: TField; - DataSet: TADODataSet; - lName: string; - p: integer; -begin - inherited; - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: MSSQL_DoGetNames(GetDatasetClass.Create(Self),List,dotProcedure,SchemaEnabled); - else - fADOConnection.Open(); - DataSet := TADODataSet.Create(nil); - try - fADOConnection.OpenSchema(siProcedures, EmptyParam, EmptyParam, DataSet); - NameField := DataSet.FieldByName('PROCEDURE_NAME'); - Schema := DataSet.Findfield('PROCEDURE_SCHEMA'); - while not DataSet.EOF do begin - lName := NameField.AsString; - if (Schema <> nil) and (Schema.Value = 'sys') then begin dataset.Next; continue; end; - p := Pos(';', lName); - if p > 1 then begin - if P+1 >= length(lName) then begin - if lName[p+1] = '0' then // function - begin - Dataset.Next; - continue; - end; - end; - SetLength(lName, p-1); - end; - if fSchemaEnabled and (Schema <> nil) and not (VarIsNull(Schema.Value)) then - List.Add(Schema.AsString + '.' + lName) - else - List.Add(lName); - DataSet.Next; - end; - finally - DataSet.Free; - end; - end; -end; - -function ADOTypeToFieldType(const ADOType: DataTypeEnum; EnableBCD: Boolean = False): TFieldType; -begin - case ADOType of - adEmpty: Result := ftUnknown; - adTinyInt, adSmallInt: Result := ftSmallint; - adError, adInteger, adUnsignedInt: Result := ftInteger; - adBigInt, adUnsignedBigInt: Result := ftLargeInt; - adUnsignedTinyInt, adUnsignedSmallInt: Result := ftWord; - adSingle, adDouble: Result := ftFloat; - adCurrency: Result := ftCurrency; - adBoolean: Result := ftBoolean; - adDBDate: Result := ftDate; - adDBTime: Result := ftTime; - adDate, adDBTimeStamp, adFileTime, adDBFileTime: Result := ftDateTime; - adChar: Result := ftFixedChar; - adVarChar: Result := ftString; - adBSTR, adWChar, adVarWChar: Result := ftWideString; - adLongVarChar, adLongVarWChar: Result := ftMemo; - adLongVarBinary: Result := ftBlob; - adBinary: Result := ftBytes; - adVarBinary: Result := ftVarBytes; - adChapter: Result := ftDataSet; - adPropVariant, adVariant: Result := ftVariant; - adIUnknown: Result := ftInterface; - adIDispatch: Result := ftIDispatch; - adGUID: Result := ftGUID; - adDecimal, adNumeric, adVarNumeric: - if EnableBCD then - Result := ftBCD - else - Result := ftFloat; - else - Result := ftUnknown; - end; -end; - -(*procedure TDAEADOConnection.DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); -var - DataSet: TADODataSet; -begin - fADOConnection.Open(); - DataSet := TADODataSet.Create(nil); - try - fADOConnection.OpenSchema(siProcedureParameters, VarArrayOf([Null, Null, aStoredProcedureName]), EmptyParam, DataSet); - //NameField := DataSet.FieldByName('PROCEDURE_NAME'); { do not localize } - Params := TDAParamCollection.Create(NIL); - while not DataSet.EOF do begin - with Params.Add() do begin - Name := DataSet.FieldByName('PARAMETER_NAME').AsString; - ParamType := TDAParamType(DataSet.FieldByName('PARAMETER_TYPE').AsInteger); - //DataType := TDADataType(DataSet.FieldByName('DATA_TYPE').AsInteger); - DataType := VCLTypeToDAType(ADOTypeToFieldType(DataSet.FieldByName('DATA_TYPE').AsInteger)); - Size := DataSet.FieldByName('CHARACTER_MAXIMUM_LENGTH').AsInteger - //more info available: - //'PARAMETER_HASDEFAULT' - //'PARAMETER_DEFAULT' - //'IS_NULLABLE' - //'DATA_TYPE' - //'CHARACTER_MAXIMUM_LENGTH' - //'CHARACTER_OCTET_LENGTH' - //'DESCRIPTION' - //'TYPE_NAME' - //'LOCAL_TYPE_NAME' - end; - //List.Add(NameField.AsString); - DataSet.Next; - end; - finally - DataSet.Free; - end; -end;*) - -procedure TDAEADOConnection.DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); -var - lField: TDAField; - //i: Integer; - DataSet: TADODataSet; -begin - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: MSSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName),GetDatasetClass.Create(Self),Fields); - else - fADOConnection.Open(); - DataSet := TADODataSet.Create(nil); - try - if (pos('.', aTableName) > 0) and (SchemaEnabled) then - fADOConnection.OpenSchema(siColumns, VarArrayOf([Unassigned, Copy(aTableName, 1, Pos('.', aTableName)-1), Copy(aTableName, Pos('.', aTableName)+1, MaxInt)]), EmptyParam, DataSet) - else - fADOConnection.OpenSchema(siColumns, VarArrayOf([Unassigned, Unassigned, aTableName]), EmptyParam, DataSet); - //NameField := DataSet.FieldByName('PROCEDURE_NAME'); { do not localize } - if DataSet.EOF then begin - inherited DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), Fields); - exit ; - end; - - Fields := TDAFieldCollection.Create(nil); - - {for i := 0 to DataSet.FieldCount-1 do begin - DebugServer.Wre(DataSet.Fields[i].FieldName); - end; { for } - - while not DataSet.EOF do begin - with Fields.Add() do begin - Name := DataSet.FieldByName('COLUMN_NAME').AsString; - DataType := VCLTypeToDAType(ADOTypeToFieldType(DataSet.FieldByName('DATA_TYPE').AsInteger)); - Size := DataSet.FieldByName('CHARACTER_MAXIMUM_LENGTH').AsInteger; - Description := DataSet.FieldByName('DESCRIPTION').AsString; - // NotNull := DataSet.FieldByName('IS_NULLABLE').AsBoolean; - Required := not DataSet.FieldByName('IS_NULLABLE').AsBoolean; - - { Hack: for Memo fields ADO seems to return datString, with a lenght of $7fffffff } - //if (DataType = datString) and (Size = $7FFFFFFF) then - if (DataType = datString) and (Size > $100000) then - DataType := datMemo; - if (DAtaType = datWideString) and (Size > $100000) then - DataType := datWideMemo; - - if DataSet.FieldByName('COLUMN_HASDEFAULT').AsBoolean then - begin - DefaultValue := DataSet.FieldByName('COLUMN_DEFAULT').AsString; - if not TestDefaultValue(DefaultValue, DataType) then - DefaultValue := ''; - end; - - if ADOTypeToFieldType(DataSet.FieldByName('DATA_TYPE').AsInteger) = ftGUID then begin - Size := 38; { Quickhack, until we have proper GUID support in 3.0 } - if DefaultValue = 'newid()' then DefaultValue := Unassigned; - end; - - - //more info available: - //'COLUMN_HASDEFAULT' - //'COLUMN_DEFAULT' - //'IS_NULLABLE' - //'DATA_TYPE' - //'CHARACTER_MAXIMUM_LENGTH' - end; - //List.Add(NameField.AsString); - DataSet.Next; - end; - - if (pos('.', aTableName) > 0) and (SchemaEnabled) then - fADOConnection.OpenSchema(siPrimaryKeys, VarArrayOf([Unassigned, Copy(aTableName, 1, Pos('.', aTableName)-1), Copy(aTableName, Pos('.', aTableName)+1, MaxInt)]), EmptyParam, DataSet) - else - fADOConnection.OpenSchema(siPrimaryKeys, VarArrayOf([Unassigned, Unassigned, aTableName]), EmptyParam, DataSet); - {for i := 0 to DataSet.FieldCount-1 do begin - DebugServer.Write(DataSet.Fields[i].FieldName); - end; { for } - while not DataSet.EOF do begin - lField := Fields.FieldByName(DataSet.FieldByName('COLUMN_NAME').AsString); - if Assigned(lField) then - lField.InPrimaryKey := true; - - DataSet.Next(); - end; - finally - DataSet.Free; - end; - end; -end; - -procedure TDAEADOConnection.DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); -var - //i: Integer; - DataSet: TADODataSet; - s: string; - PKSchema,FKSchema: TField; -begin - inherited; - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: - MSSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, SchemaEnabled); - else - s := UpperCase(GetProviderName); - fADOConnection.Open(); - DataSet := TADODataSet.Create(nil); - try - fADOConnection.OpenSchema(siForeignKeys, EmptyParam, EmptyParam, DataSet); - {for i := 0 to DataSet.FieldCount-1 do begin - DebugServer.Write(DataSet.Fields[i].FieldName); - end; { for } - PKSchema := DataSet.FindField('PK_TABLE_SCHEMA'); - FKSchema := DataSet.FindField('FK_TABLE_SCHEMA'); - while not DataSet.EOF do begin - {lField := Fields.FieldByName(DataSet.FieldByName('COLUMN_NAME').AsString); - if Assigned(lField) then - lField.InPrimaryKey := true;} - with ForeignKeys.Add() do begin - FKField := DataSet.FieldByName('FK_COLUMN_NAME').AsString; - PKField := DataSet.FieldByName('PK_COLUMN_NAME').AsString; - //FKTable := DataSet.FieldByName('FK_TABLE_NAME').AsString; - //PKTable := DataSet.FieldByName('PK_TABLE_NAME').AsString; - if fSchemaEnabled and (PKSchema <> nil) and not (VarIsNull(PKSchema.Value)) then - PKTable := PKSchema.AsString + '.' + DataSet.FieldByName('PK_TABLE_NAME').AsString - else - PKTable := DataSet.FieldByName('PK_TABLE_NAME').AsString; - if fSchemaEnabled and (FKSchema <> nil) and not (VarIsNull(FKSchema.Value)) then - FKTable := FKSchema.AsString + '.' + DataSet.FieldByName('FK_TABLE_NAME').AsString - else - FKTable := DataSet.FieldByName('FK_TABLE_NAME').AsString; - - end; - {DebugServer.Write(DataSet.FieldByName('FK_TABLE_NAME').AsString+'.'+DataSet.FieldByName('FK_COLUMN_NAME').AsString+' => '+ - DataSet.FieldByName('PK_COLUMN_NAME').AsString);} - - DataSet.Next(); - end; - - - finally - DataSet.Free; - end; - end; -end; - -procedure TDAEADOConnection.GetViewOrTableNames(const aType: string; const aSystemTables: boolean; List: IROStrings); -var - SchemaField, - TypeField, - NameField: TField; - TableType: string; - DataSet: TADODataSet; -begin - fADOConnection.Open(); - - DataSet := TADODataSet.Create(nil); - try - fADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, DataSet); - - TypeField := DataSet.FieldByName('TABLE_TYPE'); { do not localize } - NameField := DataSet.FieldByName('TABLE_NAME'); { do not localize } - SchemaField := DataSet.FindField('TABLE_SCHEMA'); - while not DataSet.EOF do begin - TableType := TypeField.AsString; - if (TableType = aType) or ((aType = 'TABLE') and (TableType ='ACCESS TABLE')) or (aSystemTables and (TableType = 'SYSTEM TABLE')) then - begin - if fSchemaEnabled and (SchemaField <> nil) and not (VarIsNull(SchemaField.Value)) then - List.Add(SchemaField.AsString + '.' + NameField.AsString) - else - List.Add(NameField.AsString); - end; - DataSet.Next; - end; - finally - DataSet.Free; - end; -end; - -procedure TDAEADOConnection.DoGetViewNames(out List: IROStrings); -var - Schema,NameField: TField; - DataSet: TADODataSet; - lName: string; - p: integer; -begin - inherited; - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: MSSQL_DoGetNames(GetDatasetClass.Create(Self),List,dotView,SchemaEnabled); - else - GetViewOrTableNames('VIEW', false, List); - fADOConnection.Open(); - DataSet := TADODataSet.Create(nil); - try - fADOConnection.OpenSchema(siProcedures, EmptyParam, EmptyParam, DataSet); - NameField := DataSet.FieldByName('PROCEDURE_NAME'); { do not localize } - Schema := DataSet.Findfield('PROCEDURE_SCHEMA'); - if List = nil then - List := NewROStrings(); - while not DataSet.EOF do begin - lName := NameField.AsString; - if (Schema <> nil) and (Schema.Value = 'sys') then begin dataset.Next; continue; end; - p := Pos(';', lName); - if p > 1 then begin - if P+1 >= length(lName) then begin - if lName[p+1] = '1' then // procedure - begin - Dataset.Next; - continue; - end; - end; - SetLength(lName, p-1); - end; - if fSchemaEnabled and (Schema <> nil) and not (VarIsNull(Schema.Value)) then - List.Add(Schema.AsString + '.' + lName) - else - List.Add(lName); - DataSet.Next; - end; - finally - DataSet.Free; - end; - end; -end; - -procedure TDAEADOConnection.DoGetTableNames(out List: IROStrings); -begin - inherited; - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: MSSQL_DoGetNames(GetDatasetClass.Create(Self),List,dotTable,SchemaEnabled); - else - GetViewOrTableNames('TABLE', false, List); - end; -end; - -procedure TDAEADOConnection.DoRollbackTransaction; -begin - fADOConnection.RollbackTrans -end; - -function TDAEADOConnection.GetQuoteChars: TDAQuoteCharArray; -begin - result:=MSSQL_GetQuoteChars; -end; - -function TDAEADOConnection.DoGetInTransaction: boolean; -begin - result := fADOConnection.InTransaction -end; - -function TDAEADOConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -var - ds: IDADataset; -begin - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: begin - Result := MSSQL_DoGetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - end; - oledb_Jet: begin - ds := NewDataset('SELECT @@Identity', ''); // Returns 0 by default - ds.Open; - result := ds.Fields[0].Value; - end; - oledb_Postgresql: Result := Postgres_GetNextAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - oledb_Oracle: Result := Oracle_DoGetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - else - result := inherited DoGetLastAutoInc(GeneratorName); - end; -end; - -function TDAEADOConnection.GetProviderName: string; -begin - result := fProviderName; -end; - -function TDAEADOConnection.GetProviderType: TDAOleDBProviderType; -begin - result := fProviderType; -end; - -function TDAEADOConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: Result := MSSQL_CreateMacroProcessor; - oledb_Jet: result := MSSQL_CreateMacroProcessor; - oledb_Oracle: Result := Oracle_CreateMacroProcessor; - else - Result:= inherited CreateMacroProcessor; - end; -end; - -procedure TDAEADOConnection.CreateTable(aDataSet: TDADataSet; const aOverrideName: string); -var - lSQL: string; -begin - lSQL := BuildCreateTableSQL(aDataSet, aOverrideName); - with NewCommand(lSQL, stSQL) do begin - Execute(); - end; { with } -end; - -function TDAEADOConnection.BuildCreateTableSQL(aDataSet: TDADataSet; const aOverrideName: string): string; -var - lName: string; -begin - lName := aOverrideName; - if lName = '' then lName := aDataSet.Name; - result := uDAHelpers.BuildCreateStatementForTable(aDataSet, lName, self); -end; - -function TDAEADOConnection.FieldToDeclaration(aField: TDAField): string; -begin - case aField.DataType of - datUnknown: result := 'unknown'; - datString: result := Format('varchar(%d)', [aField.Size]); - datDateTime: result := 'datetime'; - datFloat: result := 'float'; - datCurrency: result := 'money'; - datAutoInc: result := 'int IDENTITY(1,1)'; - datInteger: result := 'int'; - datLargeInt: result := 'largeint'; - datBoolean: result := 'bit'; - datMemo: result := 'text'; - datBlob: result := 'image'; - //datGuid:result := 'uniqueidentifier'; - end; { case } -end; - -function TDAEADOConnection.GetDatabaseNames: IROStrings; -begin - case fProviderType of - oledb_Jet: Result := NewROStrings; - else - Result := MSSQL_GetDatabaseNames(Self); - end; -end; - -function TDAEADOConnection.GetSPSelectSyntax( - HasArguments: Boolean): String; -begin - case fProviderType of - oledb_MSSQL, oledb_MSSQL2005: Result := MSSQL_GetSPSelectSyntax(HasArguments); - oledb_Oracle: Result := Oracle_GetSPSelectSyntax(HasArguments); - oledb_Postgresql: if HasArguments then Result := 'SELECT * FROM {0}({1})' else result := 'SELECT * FROM {0}'; - else - Result := inherited GetSPSelectSyntax(HasArguments); - end; -end; - -function TDAEADOConnection.GetCommandTimeout: Integer; -begin - if fADOConnection <> nil then - Result:= fADOConnection.CommandTimeout - else - Result:=0; -end; - -procedure TDAEADOConnection.SetCommandTimeout(const Value: Integer); -begin - if fADOConnection <> nil then - fADOConnection.CommandTimeout:= Value; -end; - -function TDAEADOConnection.IdentifierNeedsQuoting( - const iIdentifier: string): boolean; -begin - Result := inherited IdentifierNeedsQuoting(iIdentifier) or MSSQL_IdentifierNeedsQuoting(iIdentifier); -end; - -function TDAEADOConnection.GetFileExtensions: IROStrings; -begin - result := NewROStrings; - case fProviderType of - oledb_Jet: begin - result.Add('*.mdb;MSAccess files (*.mdb)'); - result.Add('*.*;All files (*.*)'); - end; - else - end; -end; - -function TDAEADOConnection.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - Result := E_NOINTERFACE; - if IsEqualGUID(IID, IDAFileBasedDatabase) then begin - if not (fProviderType in [oledb_Jet]) then Exit; - end else if IsEqualGUID(IID, IDACanQueryDatabaseNames) then begin - if (fProviderType in [oledb_Jet]) then Exit; - end else if IsEqualGUID(IID, IDAUseGenerators) then begin - if not (fProviderType in [oledb_Oracle]) then Exit; - end; - Result := inherited QueryInterface(IID, Obj); -end; - -function TDAEADOConnection.isAlive: Boolean; -begin - Result:=(ConnectionObject <> nil) and not (stClosed in fADOConnection.State); -end; - -constructor TDAEADOConnection.Create(aDriver: TDAEDriver; aName: string); -begin - inherited Create(aDriver, aName); - fQuery_CursorType := Default_CursorType; - fQuery_CursorLocation := Default_CursorLocation; - fQuery_ADOLockType := Default_ADOLockType; -end; - -function TDAEADOConnection.GetNextAutoinc(const GeneratorName: string): integer; -begin - case fProviderType of - oledb_Oracle: Result:=Oracle_GetNextAutoinc(GeneratorName,GetDatasetClass.Create(Self)); - else - Result:=-1; - end; -end; - -{ TDAEADODriver } - -function TDAEADODriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doAuxDriver, doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAEADODriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEADOConnection; -end; - -function TDAEADODriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - case OleDBDriverIdToOleDBProviderType(AuxDriver) of - oledb_MSSQL, - oledb_MSSQL2005 :Result:=MSSQL_DriverType; - oledb_Jet: Result := Access_DriverType; - oledb_Oracle: Result := Oracle_DriverType; - oledb_ODBC: Result := ODBC_DriverType; - oledb_Postgresql : Result := PostgreSQL_DriverType; - oleDb_VisualFoxPro: Result := FoxPro_DriverType; - else - Result:= inherited GetDefaultConnectionType(AuxDriver); - end; -end; - -function TDAEADODriver.GetDescription: string; -begin - result := 'Borland ADOExpress Driver'; -end; - -function TDAEADODriver.GetDriverID: string; -begin - result := 'ADO'; -end; - -procedure TDAEADODriver.GetAuxDrivers(out List: IROStrings); -var - i: TDAOleDBProviderType; -begin - inherited; - for i := Low(TDAOleDBProviderType) to High(TDAOleDBProviderType) do - if (i <> oledb_Unknown) {// Redundant but safe if I change the enum later...} then List.Add(OleDBProviders[i]); -end; - -function TDAEADODriver.GetProviderDefaultCustomParameters( - Provider: string): string; -begin - if Sametext(Trim(Provider), oledb_MSSQL2005id) then Result := 'Schemas=1;Integrated Security=SSPI;' else - if SameText(Trim(Provider), oledb_MSSQLId) then Result := 'Integrated Security=SSPI;'; -end; - -procedure TDAEADODriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - if Sametext(Trim(AuxDriver), oledb_MSSQL2005id) or SameText(Trim(AuxDriver), oledb_MSSQLId) then - MSSQL_GetAuxParams(List); - List.Add('CursorLocation=(clUseServer,clUseClient)'); - List.Add('CursorType=(ctUnspecified,ctOpenForwardOnly,ctKeyset,ctDynamic,ctStatic)'); - List.Add('LockType=(ltUnspecified,ltReadOnly,ltPessimistic,ltOptimistic,ltBatchOptimistic)'); - List.Add(''); - List.Add('You can pass any parameters directly to driver. Use the prefix ''@'' for this, e.g.:'); - List.Add('CursorLocation=clUseServer;@Mode=Read'); -end; - -{ TDAEADOQuery } - -function TDAEADOQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TADOQuery.Create(nil); - - TADOQuery(result).LockType := TDAEADOConnection(aConnection).fQuery_ADOLockType;// ltReadOnly; - TADOQuery(result).CursorLocation :=TDAEADOConnection(aConnection).fQuery_CursorLocation; // clUseClient; - TADOQuery(result).CursorType := TDAEADOConnection(aConnection).fQuery_CursorType; //ctOpenForwardOnly; - TADOQuery(result).Connection := TDAEADOConnection(aConnection).fADOConnection; - TADOQuery(result).CacheSize := 25; -// TADOQuery(result).Prepared := TRUE; - if TADOQuery(result).Connection <> nil then - TADOQuery(result).CommandTimeout := TADOQuery(result).Connection.CommandTimeout; -end; - -function TDAEADOQuery.DoExecute: integer; -begin - result := TADOQuery(Dataset).ExecSQL; - if TADOQuery(Dataset).Connection.Errors.Count>0 - then raise Exception.Create(TADOQuery(Dataset).Connection.Errors.Item[0].Description); -end; - -function TDAEADOQuery.DoGetSQL: string; -begin - result := TADOQuery(Dataset).SQL.Text; -end; - -procedure TDAEADOQuery.DoSetSQL(const Value: string); -begin - TADOQuery(Dataset).SQL.Text := Value; -end; - -procedure TDAEADOQuery.GetParamValues(Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - inpar: TParameter; - ds: TADOQuery; -begin - ds := TADOQuery(Dataset); - if not Assigned(ds.Parameters) then - Exit; - - for i := 0 to (ds.Parameters.Count - 1) do begin - inpar := ds.Parameters[i]; - - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then begin - if inpar.DataType = ftLargeint then - par.Value := DecimalToInt64(inpar.Value) - else - par.Value := inpar.Value; - end; - end; -end; - -procedure TDAEADOQuery.RefreshParams; -var - i: Integer; - par: TDAParam; - outpar: TParameter; - ds: TADOQuery; -begin - inherited; - ds := TADOQuery(Dataset); - if not Assigned(ds.Parameters) then - Exit; - for i := 0 to ds.Parameters.Count -1 do begin - outpar := ds.Parameters[i]; - - par := self.ParamByName(outpar.Name); - - if outpar.DataType <> ftUnknown then begin - par.DataType := VCLTypeToDAType(outpar.DataType); - par.Size := outpar.Size; - par.DecimalPrecision := outpar.Precision; - par.DecimalScale := outpar.NumericScale; - case outpar.Direction of - pdInput: par.ParamType := daptInput; - pdOutput: par.ParamType := daptOutput; - pdInputOutput: par.ParamType := daptInputOutput; - pdReturnValue: par.ParamType := daptResult; - end; - end; - end; -end; - -procedure TDAEADOQuery.SetParamValues(Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - outpar: TParameter; - ds: TADOQuery; - ft: TFieldType; -begin - ds := TADOQuery(Dataset); - if not Assigned(ds.Parameters) then - Exit; - - for i := 0 to (ds.Parameters.Count - 1) do begin - outpar := ds.Parameters[i]; - - par := Params.ParamByName(outpar.Name); - ft := DATypeToVCLType(par.DataType); - case par.ParamType of - daptInput: outpar.Direction := pdInput; - daptOutput: outpar.Direction := pdOutput; - daptInputOutput: outpar.Direction := pdInputOutput; - daptResult: outpar.Direction := pdReturnValue; - end; - - if par.DataType = datBlob then begin - outpar.DataType := ftBlob; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if VarIsEmpty(par.Value) or VarIsNull(par.Value) - then outpar.Value := NULL - else outpar.Value := VariantBinaryToString(par.Value); - end; - end - else begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if outpar.DataType = ftLargeint then - Outpar.Value := Int64ToDecimal(par.Value) - else - outpar.Value := par.Value; - end; - end; - if (VarIsEmpty(par.Value) or VarIsNull(par.Value)) and - (par.DataType <> datUnknown) then begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - end; - end; -end; - -{ TDAEADOStoredProcedure } - -function TDAEADOStoredProcedure.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TADOStoredProc.Create(nil); - TADOStoredProc(result).Connection := TDAEADOConnection(aConnection).fADOConnection; - if TADOStoredProc(result).Connection <> nil then - TADOStoredProc(result).CommandTimeout := TADOStoredProc(result).Connection.CommandTimeout; -end; - -procedure TDAEADOStoredProcedure.SetParamValues(Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - outpar: TParameter; - ds: TADOStoredProc; - ft: TFieldType; -begin - ds := TADOStoredProc(Dataset); - if not Assigned(ds.Parameters) then - Exit; - - for i := 0 to (ds.Parameters.Count - 1) do begin - outpar := ds.Parameters[i]; - - par := Params.ParamByName(outpar.Name); - ft := DATypeToVCLType(par.DataType); - case par.ParamType of - daptInput: outpar.Direction := pdInput; - daptOutput: outpar.Direction := pdOutput; - daptInputOutput: outpar.Direction := pdInputOutput; - daptResult: outpar.Direction := pdReturnValue; - end; - - if par.DataType = datBlob then begin - outpar.DataType := ftBlob; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if VarIsEmpty(par.Value) or VarIsNull(par.Value) - then outpar.Value := NULL - else outpar.Value := VariantBinaryToString(par.Value); - end; - end - else begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if outpar.DataType = ftLargeint then - Outpar.Value := Int64ToDecimal(par.Value) - else - outpar.Value := par.Value; - end; - end; - if (VarIsEmpty(par.Value) or VarIsNull(par.Value)) and - (par.DataType <> datUnknown) then begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - end; - end; -end; - -procedure TDAEADOStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - inpar: TParameter; - ds: TADOQuery; -begin - ds := TADOQuery(Dataset); - if not Assigned(ds.Parameters) then - Exit; - - for i := 0 to (ds.Parameters.Count - 1) do begin - inpar := ds.Parameters[i]; - - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then begin - if inpar.DataType = ftLargeint then - par.Value := DecimalToInt64(inpar.Value) - else - par.Value := inpar.Value; - end; - end; -end; - - -type - TADOStoredProcHack = class(TADOStoredProc); - -function TDAEADOStoredProcedure.Execute: integer; -var - i: integer; - pstr: string; - params: TDAParamCollection; - ds: TADOStoredProc; -begin - params := GetParams; - if (Connection as TDAEADOConnection).fProviderType = oledb_Oracle then pstr := '' else pstr := '@'; - - ds := TADOStoredProc(Dataset); - - for i := ds.Parameters.Count -1 downto 0 do - begin - if (ds.Parameters[i].DataType = ftInterface) and (ds.Parameters[i].Direction in [pdOutput, pdInputOutput, pdReturnValue]) then - ds.Parameters.Delete(i); - end; - - if (ds.Parameters.Count<>Params.Count) then begin - ds.Parameters.Refresh; - end; - - {for i := 0 to (Parameters.Count - 1) do - if (Parameters[i].Direction in [pdInput, pdInputOutput]) - then Parameters.ParamByName('@'+params[i].Name) [i].Value := params[i].Value;} - - for i := 0 to (params.Count-1) do - begin - if (params[i].ParamType = daptOutput) and (ds.Parameters[i].Direction <> pdOutput) then - ds.Parameters[i].Direction := pdOutput // ado sometimes doesn't set the direction properly - else - if (params[i].ParamType in [daptInput, daptInputOutput]) - then ds.Parameters.ParamByName(pstr+params[i].Name).Value := params[i].Value; - end; - - TADOStoredProcHack(ds).Command.Execute(result, EmptyParam); - - if ds.Connection.Errors.Count>0 - then raise Exception.Create(ds.Connection.Errors.Item[0].Description); - - {TADOStoredProcHack(Dataset).InitializeMasterFields(Self); - Command.Execute;} - - {for i := 0 to (Parameters.Count - 1) do - if (Parameters[i].Direction in [pdOutput, pdInputOutput, pdReturnValue]) - then params[i].Value := Parameters[i].Value;} - - for i := 0 to (params.Count-1) do - if (params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) - then params[i].Value := ds.Parameters.ParamByName(pstr+params[i].Name).Value; -end; - -function TDAEADOStoredProcedure.GetStoredProcedureName: string; -begin - result := TADOStoredProc(Dataset).ProcedureName; -end; - -procedure TDAEADOStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TADOStoredProc(Dataset).ProcedureName := Name; -end; - -procedure TDAEADOStoredProcedure.RefreshParams; -var - dsparams: TParameters; - i: integer; - par: TDAParam; - params: TDAParamCollection; - nme: string; -begin - // Must override completely because the parameters' size is not reflected correctly via IProviderSupport!! - dsparams := TADOStoredProc(Dataset).Parameters; - - dsparams.Refresh; - params := GetParams; - params.Clear; - - for i := 0 to (dsparams.Count - 1) do begin - par := params.Add; - - if (dsparams[i].DataType = ftInterface) and (dsParams[I].Direction in [pdOutput, pdInputOutput, pdReturnValue]) then - Continue; - nme := dsparams[i].Name; - if Pos('@', nme) > 0 then - System.Delete(nme, Pos('@', nme), 1); - par.Name := nme; - - par.DataType := VCLTypeToDAType(dsparams[i].DataType); - par.ParamType := TDAParamType(dsparams[i].Direction); - par.Size := dsparams[i].Size; - end; -end; - -exports - GetDriverObject name func_GetDriverObject; - - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDABDEDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDABDEDriver.pas deleted file mode 100644 index 218fce6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDABDEDriver.pas +++ /dev/null @@ -1,1286 +0,0 @@ -unit uDABDEDriver; -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_BDEDriver_Glyphs.res} -{$DEFINE MAX_SUPPORT} -interface - -uses DB, uDAEngine, uDAInterfaces, uROClasses, uDAInterfacesEx, uDAUtils, DBTables, uDAIBInterfaces, uDAADOInterfaces, uDAOracleInterfaces; - -type - TDABDEProviderType = ( - bdeSTANDARD, - bdeDB2, - bdeINFORMIX, - bdeINTRBASE, - bdeMSACCESS, - bdeMSSQL, - bdeORACLE, - bdeSYBASE, - bdeODBC); - - { TDABDEDriver } - TDABDEDriver = class(TDADriverReference) - end; - - { TDAEADODriver } - TDAEBDEDriver = class(TDAEDriver, IDADriver40) - protected - function GetConnectionClass: TDAEConnectionClass; override; - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - procedure GetAuxDrivers(out List: IROStrings); override; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetProviderDefaultCustomParameters(Provider: string): string; safecall; - function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall; - public - end; - - { TDAEADOConnection } - TDAEBDEConnection = class(TDAEConnection, IDACanQueryDatabaseNames, IDAFileBasedDatabase, - IDADirectoryBasedDatabase, IDAUseGenerators, {IDAADOConnection,} - IDAInterbaseConnection, IDAOracleConnection, IDACanQueryGeneratorsNames) - private - fProviderName: string; - fProviderType: TDABDEProviderType; - fDatabase: TDataBase; - FSession: TSession; - protected - function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - function GetQuoteChars: TDAQuoteCharArray; override; - function GetSPSelectSyntax(HasArguments: Boolean): string; override; safecall; - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; - function QuoteFieldName(const aTableName, aFieldName: string): string; override; safecall; - // IDACanQueryDatabaseNames - function GetDatabaseNames: IROStrings; - // IDAFileBasedDatabase - function GetFileExtensions: IROStrings; - // IDAUseGenerators - function GetNextAutoinc(const GeneratorName: string): integer; safecall; - // IDACanQueryGeneratorsNames - function GetGeneratorNames: IROStrings; - public - destructor Destroy; override; - end; - - { TDAEADOQuery } - TDAEBDEQuery = class(TDAEDataset, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure RefreshParams; override; safecall; - procedure DoPrepare(Value: boolean); override; safecall; - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - public - end; - - { TDAEADOStoredProcedure } - TDAEBDEStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure RefreshParams; override; - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - procedure DoPrepare(Value: boolean); override; safecall; - end; - -procedure Register; -function GetDriverObject: IDADriver; stdcall; - -function ProviderToProviderType(AProvider: string): TDABDEProviderType; - -implementation - -uses - Windows, SysUtils, Variants, Classes, uDARes, - uROBinaryHelpers, uDADriverManager, uDAMacroProcessors, uDASQL92Interfaces; - -var - _driver : TDAEDriver = nil; - -const - BDE_LANGDRIVER = - '(Access General,Access Greece,Access Japanese,Access Nord/Danish,Access Swed/Finnish,''ascii'' ANSI,' + - 'Borland ANSI Arabic,Borland DAN Latin-1,Borland DEU Latin-1,Borland ENG Latin-1,Borland ENU Latin-1,Borland ESP Latin-1,' + - 'Borland FIN Latin-1,Borland FRA Latin-1,Borland FRC Latin-1,Borland ISL Latin-1,Borland ITA Latin-1,Borland NLD Latin-1,' + - 'Borland NOR Latin-1,Borland PTG Latin-1,Borland SVE Latin-1,DB2 SQL ANSI DEU,dBASE BUL 868,dBASE CHS cp936,dBASE CHT cp950,' + - 'dBASE CSY cp852,dBASE CSY cp867,dBASE DAN cp865,dBASE DEU cp437,dBASE DEU cp850,dBASE ELL GR437,dBASE ENG cp437,dBASE ENG cp850,' + - 'dBASE ENU cp437,dBASE ENU cp850,dBASE ESP cp437,dBASE ESP cp850,dBASE FIN cp437,dBASE FRA cp437,dBASE FRA cp850,dBASE FRC cp850,' + - 'dBASE FRC cp863,dBASE HUN cp852,dBASE ITA cp437,dBASE ITA cp850,dBASE JPN cp932,dBASE JPN Dic932,dBASE KOR cp949,dBASE NLD cp437,' + - 'dBASE NLD cp850,dBASE NOR cp865,dBASE PLK cp852,dBASE PTB cp850,dBASE PTG cp860,dBASE RUS cp866,dBASE SLO cp852,dBASE SVE cp437,' + - 'dBASE SVE cp850,dBASE THA cp874,dBASE TRK cp857,FoxPro Czech 1250,FoxPro Czech DOS895,FoxPro German 1252,FoxPro German 437,FoxPro Nordic 1252,' + - 'FoxPro Nordic 437,FoxPro Nordic 850,Hebrew dBASE,MSSQL ANSI Greek,Oracle SQL WE850,Paradox ANSI HEBREW,Paradox ''ascii'',Paradox BUL 868,' + - 'Paradox China 936,Paradox Cyrr 866,Paradox Czech 852,Paradox Czech 867,Paradox ESP 437,Paradox Greek GR437,Paradox ''hebrew'',' + - 'Paradox Hun 852 DC,Paradox ''intl'',Paradox ''intl'' 850,Paradox ISL 861,Paradox ''japan'',Paradox Korea 949,Paradox ''nordan'',' + - 'Paradox ''nordan40'',Paradox Polish 852,Paradox Slovene 852,Paradox ''swedfin'',Paradox Taiwan 950,Paradox Thai 874,Paradox ''turk'',' + - 'Pdox ANSI Bulgaria,Pdox ANSI Cyrillic,Pdox ANSI Czech,Pdox ANSI Greek,Pdox ANSI Hun. DC,Pdox ANSI Intl,Pdox ANSI Intl850,Pdox ANSI Nordan4,' + - 'Pdox ANSI Polish,Pdox ANSI Slovene,Pdox ANSI Spanish,Pdox ANSI Swedfin,Pdox ANSI Swedfin,Pdox ANSI Turkish,Paradox ''ascii'' Japan,' + - 'pdx ANSI Czech ''CH'',pdx ANSI ISO L_2 CZ,pdx Czech 852 ''CH'',pdx Czech 867 ''CH'',pdx ISO L_2 Czech,''Spanish'' ANSI,' + - 'SQL Link ROMAN8,Sybase SQL Dic437,Sybase SQL Dic850,''WEurope'' ANSI)'; - -function ProviderToProviderType2(AProvider: string): TDABDEProviderType; -begin - if AnsiCompareText(AProvider, 'STANDARD') = 0 then Result := bdeSTANDARD else - if AnsiCompareText(AProvider, 'DB2') = 0 then Result := bdeDB2 else - if AnsiCompareText(AProvider, 'INFORMIX') = 0 then Result := bdeINFORMIX else - if AnsiCompareText(AProvider, 'INTRBASE') = 0 then Result := bdeINTRBASE else - if AnsiCompareText(AProvider, 'MSACCESS') = 0 then Result := bdeMSACCESS else - if AnsiCompareText(AProvider, 'MSSQL') = 0 then Result := bdeMSSQL else - if AnsiCompareText(AProvider, 'ORACLE') = 0 then Result := bdeORACLE else - if AnsiCompareText(AProvider, 'SYBASE') = 0 then Result := bdeSYBASE else - Result := bdeODBC; -end; - -function ProviderToProviderType(AProvider: string): TDABDEProviderType; -begin - if Session.IsAlias(AProvider) then - Result := ProviderToProviderType2(Session.GetAliasDriverName(AProvider)) - else - Result := ProviderToProviderType2(AProvider); -end; - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAEBDEDriver.Create(nil); - result := _driver; -end; - -type - TDecimalVariant = packed record - VarType: TVarType; - scale: Byte; - sign: Byte; - Hi32: Cardinal; - Lo32: Cardinal; - Mid32: Cardinal; - Dummy: Cardinal; - end; - -function DecimalToInt64(const V: Variant): Int64; -var - vData : TDecimalVariant absolute V; -begin - if (vData.VarType = 14) and (vData.scale = 0) and (vData.Hi32 = 0) then begin - Result := Int64(vData.Lo32) or (Int64(vData.Mid32) shl 32); - if vData.sign <> 0 then result := -Result; - end else result := v; -end; - -function Int64ToDecimal(Data: Int64): Variant; -var - vd : TDecimalVariant absolute Result; -begin - VarClear(Result); - vd.scale := 0; - if data < 0 then begin - vd.Sign := 128; - data := -data; - end else - vd.sign := 0; - vd.Hi32 := 0; - vd.Mid32 := int64(data shr 32); - vd.Lo32 := data; - vd.VarType := 14; -end; - -{ TDAEBDEDriver } - -procedure TDAEBDEDriver.GetAuxDrivers(out List: IROStrings); -var - FList : TStringList; -begin - inherited GetAuxDrivers(List); - FList := TStringList.Create; - try - try - Session.GetAliasNames(FList); - List.AddStrings(FList); - except - end; - try - Session.GetDriverNames(FList); - List.AddStrings(FList); - except - end; - finally - FList.Free; - end; - List.Sorted := True; - List.Sorted := False; -end; - -procedure TDAEBDEDriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited GetAuxParams(AuxDriver, List); - case ProviderToProviderType(AuxDriver) of - bdeSTANDARD: begin - List.Add('DEFAULT DRIVER=(PARADOX, DBASE, FOXPRO, ASCIIDRV)'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - end; - bdeDB2: begin - List.Add('BATCH COUNT=200'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - //List.Add('DB2 DSN'); { = 'DB2_SERVER'} - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('ROWSET SIZE=20'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - end; - bdeINFORMIX: begin - List.Add('BATCH COUNT=200'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - List.Add('COLLCHAR=(0,1,2)'); - List.Add('DATE MODE=0'); - List.Add('DATE SEPARATOR=/'); - List.Add('DBNLS=(0,1,2)'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('LIST SYNONYMS=(NONE,ALL,PRIVATE)'); - List.Add('LOCK MODE=5'); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - end; - bdeINTRBASE: begin - List.Add('BATCH COUNT=200'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - List.Add('COMMIT RETAIN=(FALSE)'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('ROLE NAME='); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - List.Add('WAIT ON LOCKS=(FALSE)'); - end; - bdeMSACCESS: begin - //List.Add('DATABASE NAME'); { DRIVE:/PATH/DATABASE.MDB} - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('SYSTEM DATABASE=(.MDW)'); - end; - bdeMSSQL: begin - List.Add('APPLICATION MODE'); { } - List.Add('BATCH COUNT=200'); - List.Add('BLOB EDIT LOGGING=(TRUE, FALSE)'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - //List.Add('DATABASE NAME'); { } - List.Add('DATE MODE=0'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - //List.Add('HOST NAME'); { } - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('MAX QUERY TIME=300'); - List.Add('NATIONAL LANG NAME='); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - List.Add('TDS PACKET SIZE=4096'); - end; - bdeORACLE: begin - List.Add('BATCH COUNT=200'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE INTEGERS=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('LIST SYNONYMS=(NONE,ALL,PRIVATE)'); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('NET PROTOCOL=(TNS,TCP/IP,SPX/IPX,NETBIOS,NAMED PIPES,DECNET,3270,VINES,APPC,ASYNC)'); - List.Add('OBJECT MODE=(TRUE, FALSE)'); - List.Add('ROWSET SIZE=20'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - end; - bdeSYBASE: begin - List.Add('APPLICATION MODE='); - List.Add('BATCH COUNT=200'); - List.Add('BLOB EDIT LOGGING=(TRUE, FALSE)'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - List.Add('CS CURSOR ROWS=1'); - //List.Add('DATABASE NAME'); { } - List.Add('DATE MODE=0'); - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('HOST NAME='); { } - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('MAX QUERY TIME=300'); - List.Add('NATIONAL LANG NAME='); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - List.Add('TDS PACKET SIZE=512'); - end; - bdeODBC: begin - List.Add('BATCH COUNT=200'); - List.Add('BLOB SIZE=32'); - List.Add('BLOBS TO CACHE=64'); - //List.Add('DATABASE NAME='); { } - List.Add('ENABLE BCD=(TRUE, FALSE)'); - List.Add('ENABLE SCHEMA CACHE=(TRUE, FALSE)'); - List.Add('LANGDRIVER=' + BDE_LANGDRIVER); - List.Add('MAX ROWS=-1'); - List.Add('OPEN MODE=(READ/WRITE,READ ONLY)'); - List.Add('ODBC DSN='); - List.Add('ROWSET SIZE=20'); - List.Add('SCHEMA CACHE DIR='); - List.Add('SCHEMA CACHE SIZE=8'); - List.Add('SCHEMA CACHE TIME=-1'); - List.Add('SQLPASSTHRU MODE=(SHARED AUTOCOMMIT,SHARED NOAUTOCOMMIT,NOT SHARED)'); - List.Add('SQLQRYMODE=(LOCAL,SERVER)'); - end; - end; - List.Add('TransIsolation=(tiDirtyRead,tiReadCommitted,tiRepeatableRead)'); -end; - -function TDAEBDEDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doAuxDriver, doServerName, doDatabaseName, doLogin, doCustom]; - { TODO -c???: GetAuxParams } -end; - -function TDAEBDEDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEBDEConnection; -end; - -function TDAEBDEDriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - case ProviderToProviderType(AuxDriver) of - bdeSTANDARD : Result := Paradox_DriverType; - bdeDB2 : Result := DB2_DriverType; - bdeINFORMIX: Result := Informix_DriverType; - bdeINTRBASE : Result := IB_DriverType; - bdeMSACCESS : Result := Access_DriverType; - bdeMSSQL: Result:=MSSQL_DriverType; - bdeORACLE: Result:=Oracle_DriverType; - bdeSYBASE: Result:=Sybase_DriverType; - bdeODBC: Result:=ODBC_DriverType; - else - Result := inherited GetDefaultConnectionType(AuxDriver); - end; -end; - -function TDAEBDEDriver.GetDescription: string; -begin - result := 'Borland BDE Driver'; -end; - -function TDAEBDEDriver.GetDriverID: string; -begin - result := 'BDE'; -end; - -function Need_ODBC_DSN(Provider: string): boolean; -var - List : TStringList; -begin - List := TStringList.Create; - try - try - if Session.IsAlias(Provider) then - Session.GetAliasParams(Provider, List) - else - Session.GetDriverParams(Provider, List); - Result := List.Values['ODBC DSN'] = ''; - except - // in case is invalid Provider, error is raised - Result := False; - end; - finally - List.Free; - end; -end; - -function TDAEBDEDriver.GetProviderDefaultCustomParameters( - Provider: string): string; -begin - Result := ''; - if Provider = '' then Exit; - case ProviderToProviderType(Provider) of - bdeODBC: if Need_ODBC_DSN(Provider) then Result := 'ODBC DSN='; - bdeSTANDARD, bdeDB2, bdeMSACCESS: Result := 'TransIsolation=tiDirtyRead;'; - end; -end; - -{ TDAEBDEQuery } - -function TDAEBDEQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TQuery.Create(nil); - TQuery(Result).DatabaseName := TDAEBDEConnection(aConnection).fDatabase.DatabaseName; - TQuery(Result).SessionName := TDAEBDEConnection(aConnection).fDatabase.SessionName; -end; - -function TDAEBDEQuery.DoExecute: integer; -begin - TQuery(Dataset).ExecSQL; - result := TQuery(Dataset).RowsAffected; -end; - -function TDAEBDEQuery.DoGetSQL: string; -begin - result := TQuery(Dataset).SQL.Text; -end; - -procedure TDAEBDEQuery.DoPrepare(Value: boolean); -begin - if Value then - TQuery(Dataset).Prepare - else - TQuery(Dataset).UnPrepare -end; - -procedure TDAEBDEQuery.DoSetSQL(const Value: string); -begin - TQuery(Dataset).SQL.Text := Value; -end; - -procedure TDAEBDEQuery.GetParamValues(Params: TDAParamCollection); -var - i : integer; - par : TDAParam; - inpar : TParam; - ds : TQuery; -begin - ds := TQuery(Dataset); - if not Assigned(ds.Params) then Exit; - - for i := 0 to (ds.Params.Count - 1) do begin - inpar := ds.Params[i]; - - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then begin - if inpar.DataType = ftLargeint then - par.Value := DecimalToInt64(inpar.Value) - else - par.Value := inpar.Value; - end; - end; -end; - -procedure TDAEBDEQuery.RefreshParams; -var - i : Integer; - par : TDAParam; - outpar : TParam; - ds : TQuery; -begin - inherited; - ds := TQuery(Dataset); - if not Assigned(ds.Params) then Exit; - for i := 0 to ds.Params.Count - 1 do begin - outpar := ds.Params[i]; - - par := self.ParamByName(outpar.Name); - - if outpar.DataType <> ftUnknown then - par.DataType := VCLTypeToDAType(outpar.DataType); - end; -end; - -procedure TDAEBDEQuery.SetParamValues(Params: TDAParamCollection); -var - i : integer; - par : TDAParam; - outpar : TParam; - ds : TQuery; - ft : TFieldType; -begin - ds := TQuery(Dataset); - if not Assigned(ds.Params) then Exit; - - for i := 0 to (ds.Params.Count - 1) do begin - outpar := ds.Params[i]; - - par := Params.ParamByName(outpar.Name); - ft := DATypeToVCLType(par.DataType); - case par.ParamType of - daptInput: outpar.ParamType := ptInput; - daptOutput: outpar.ParamType := ptOutput; - daptInputOutput: outpar.ParamType := ptInputOutput; - daptResult: outpar.ParamType := ptResult; - end; - - if par.DataType = datBlob then begin - outpar.DataType := ftBlob; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if VarIsEmpty(par.Value) or VarIsNull(par.Value) then outpar.Value := NULL - else outpar.Value := VariantBinaryToString(par.Value); - end; - end - else begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if outpar.DataType = ftLargeint then - Outpar.Value := Int64ToDecimal(par.Value) - else - outpar.Value := par.Value; - end; - end; - if (VarIsEmpty(par.Value) or VarIsNull(par.Value)) and - (par.DataType <> datUnknown) then begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - end; - end; -end; - -{ TDAEBDEStoredProcedure } - -function TDAEBDEStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TStoredProc.Create(nil); - TStoredProc(result).DatabaseName := TDAEBDEConnection(aConnection).fDatabase.DatabaseName; - TStoredProc(result).SessionName := TDAEBDEConnection(aConnection).fDatabase.SessionName; -end; - -procedure TDAEBDEStoredProcedure.DoPrepare(Value: boolean); -begin - if value then - TStoredProc(Dataset).Prepare - else - TStoredProc(Dataset).UnPrepare -end; - -function TDAEBDEStoredProcedure.Execute: integer; -var - i : integer; - pstr : string; - params : TDAParamCollection; - ds : TStoredProc; -begin - params := GetParams; - ds := TStoredProc(Dataset); - - for i := ds.Params.Count - 1 downto 0 do begin - if (ds.Params[i].DataType = ftInterface) and - (ds.Params[i].ParamType in [ptOutput, ptInputOutput, ptReSult]) then - ds.Params.Delete(i); - end; - - for i := 0 to (params.Count - 1) do begin - if (params[i].ParamType = daptOutput) and (ds.Params[i].ParamType <> ptOutput) then - ds.Params[i].ParamType := ptOutput - else - if (params[i].ParamType in [daptInput, daptInputOutput]) then ds.Params.ParamByName(pstr + params[i].Name).Value := params[i].Value; - end; - Result := -1; - ds.ExecProc; - ds.GetResults; - - for i := 0 to (params.Count - 1) do - if (params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) then params[i].Value := ds.Params.ParamByName(pstr + params[i].Name).Value; - -end; - -procedure TDAEBDEStoredProcedure.GetParamValues( - Params: TDAParamCollection); -var - i : integer; - par : TDAParam; - inpar : TParam; - ds : TQuery; -begin - ds := TQuery(Dataset); - if not Assigned(ds.Params) then Exit; - - for i := 0 to (ds.Params.Count - 1) do begin - inpar := ds.Params[i]; - - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then begin - if inpar.DataType = ftLargeint then - par.Value := DecimalToInt64(inpar.Value) - else - par.Value := inpar.Value; - end; - end; -end; - -function TDAEBDEStoredProcedure.GetStoredProcedureName: string; -begin - result := TStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEBDEStoredProcedure.RefreshParams; -var - dsparams : TParams; - i : integer; - par : TDAParam; - params : TDAParamCollection; - nme : string; -begin - dsparams := TStoredProc(Dataset).Params; - - params := GetParams; - params.Clear; - - for i := 0 to (dsparams.Count - 1) do begin - par := params.Add; - - if (dsparams[i].DataType = ftInterface) and (dsParams[I].ParamType in [ptOutput, ptInputOutput, ptResult]) then Continue; - nme := dsparams[i].Name; - par.Name := nme; - - par.DataType := VCLTypeToDAType(dsparams[i].DataType); - par.ParamType := TDAParamType(dsparams[i].ParamType); - par.Size := dsparams[i].Size; - end; -end; - -procedure TDAEBDEStoredProcedure.SetParamValues( - Params: TDAParamCollection); -var - i : integer; - par : TDAParam; - outpar : TParam; - ds : TStoredProc; - ft : TFieldType; -begin - ds := TStoredProc(Dataset); - if not Assigned(ds.Params) then Exit; - - for i := 0 to (ds.ParamCount - 1) do begin - outpar := ds.Params[i]; - - par := Params.ParamByName(outpar.Name); - ft := DATypeToVCLType(par.DataType); - case par.ParamType of - daptInput: outpar.ParamType := ptInput; - daptOutput: outpar.ParamType := ptOutput; - daptInputOutput: outpar.ParamType := ptInputOutput; - daptResult: outpar.ParamType := ptResult; - end; - - if par.DataType = datBlob then begin - outpar.DataType := ftBlob; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if VarIsEmpty(par.Value) or VarIsNull(par.Value) then outpar.Value := NULL - else outpar.Value := VariantBinaryToString(par.Value); - end; - end - else begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - if not (par.ParamType in [daptOutput, daptResult]) then begin - if outpar.DataType = ftLargeint then - Outpar.Value := Int64ToDecimal(par.Value) - else - outpar.Value := par.Value; - end; - end; - if (VarIsEmpty(par.Value) or VarIsNull(par.Value)) and (par.DataType <> datUnknown) then begin - if (outpar.DataType <> ft) and (ft <> ftUnknown) then - outpar.DataType := ft; - end; - end; -end; - -procedure TDAEBDEStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TStoredProc(Dataset).StoredProcName := Name; -end; - -{ TDAEBDEConnection } - -function TDAEBDEConnection.CreateCustomConnection: TCustomConnection; -begin - FDatabase := TDatabase.Create(nil); - FSession := TSession.Create(nil); - FSession.AutoSessionName := True; - fDatabase.SessionName := FSession.SessionName; - Result := fDatabase; - fDatabase.LoginPrompt := False; - fDatabase.DatabaseName := copy(NewStrippedGuidAsString, 1, 30); -end; - -function TDAEBDEConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: Result := IB_CreateMacroProcessor; - bdeMSSQL: Result := MSSQL_CreateMacroProcessor; - bdeORACLE: Result := TOracleMacroProcessor.Create; - else - Result:=inherited CreateMacroProcessor; - end; - {$ELSE} - Result:=inherited CreateMacroProcessor; - {$ENDIF} -end; - -destructor TDAEBDEConnection.Destroy; -begin - FreeAndNil(FSession); - inherited; -end; - -procedure TDAEBDEConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); - - procedure SetUserNamePassword; - begin - with aConnStrParser do begin - if (Self.UserID <> '') then - fDatabase.Params.Values['USER NAME'] := Self.UserID - else if (UserID <> '') then - fDatabase.Params.Values['USER NAME'] := UserID; - - if (Self.Password <> '') then - fDatabase.Params.Values['PASSWORD'] := Self.Password - else if (Password <> '') then - fDatabase.Params.Values['PASSWORD'] := Password; - end; - end; - -var - i : Integer; -begin - inherited; - with aConnStrParser do begin - if AuxDriver <> '' then begin - fDatabase.Params.Clear; - fDatabase.AliasName := ''; - fDatabase.DriverName := ''; - fProviderType := ProviderToProviderType(AuxDriver); - if fDatabase.Session.IsAlias(AuxDriver) then - fDatabase.AliasName := AuxDriver - else - fDatabase.DriverName := AuxDriver; - end - else - raise EDADriverException.Create('No aux driver specified for BDE connection'); - - fProviderName := AuxDriver; - - case fProviderType of - bdeSTANDARD: begin - //fDatabase.Params.Values['DEFAULT DRIVER'] := ; {PARADOX, DBASE, FOXPRO, ASCIIDRV} - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - if Database <> '' then fDatabase.Params.Values['PATH'] := Database; - end; - bdeDB2: begin - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - if Server <> '' then fDatabase.Params.Values['DB2 DSN'] := Server; { = 'DB2_SERVER'} - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['ROWSET SIZE'] := { = 20} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - SetUserNamePassword; - end; - bdeINFORMIX: begin - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - //fDatabase.Params.Values['COLLCHAR'] := { = 0,1,2} - if Database <> '' then fDatabase.Params.Values['DATABASE NAME'] := Database; - //fDatabase.Params.Values['DATE MODE'] := { = 0}; - //fDatabase.Params.Values['DATE SEPARATOR'] := { = '/'}; - //fDatabase.Params.Values['DBNLS'] := { = '',0,1,2}; - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['LIST SYNONYMS'] := { NONE, ALL, PRIVATE} - //fDatabase.Params.Values['LOCK MODE'] := { = 5} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - if Server <> '' then fDatabase.Params.Values['SERVER NAME'] := Server; - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - SetUserNamePassword; - end; - bdeINTRBASE: begin - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - //fDatabase.Params.Values['COMMIT RETAIN'] := { = FALSE} - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['ROLE NAME'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - if Database <> '' then fDatabase.Params.Values['SERVER NAME'] := StringReplace(Database, '\', '/', [rfReplaceAll]); { = IB_SERVER:/PATH/DATABASE.GDB} - if Server <> '' then fDatabase.Params.Values['SERVER NAME'] := Server + ':' + fDatabase.Params.Values['SERVER NAME']; { = IB_SERVER:/PATH/DATABASE.GDB} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - SetUserNamePassword; - //fDatabase.Params.Values['WAIT ON LOCKS'] := {FALSE}; - end; - bdeMSACCESS: begin - if Database <> '' then fDatabase.Params.Values['DATABASE NAME'] := StringReplace(Database, '\', '/', [rfReplaceAll]); { DRIVE:/PATH/DATABASE.MDB} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['SYSTEM DATABASE'] := { *.MDW} - SetUserNamePassword; - end; - bdeMSSQL: begin - //fDatabase.Params.Values['APPLICATION MODE'] := { } - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB EDIT LOGGING'] := { '',TRUE,FALSE} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - if Database <> '' then fDatabase.Params.Values['DATABASE NAME'] := Database; - //fDatabase.Params.Values['DATE MODE'] := { = 0}; - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['HOST NAME'] := { }; - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['MAX QUERY TIME'] := { 300} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['NATIONAL LANG NAME'] := { } - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - if Server <> '' then fDatabase.Params.Values['SERVER NAME'] := Server; { = MSS_SERVER} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - //fDatabase.Params.Values['TDS PACKET SIZE'] := { = 4096} - SetUserNamePassword; - end; - bdeORACLE: begin - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE INTEGERS'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['LIST SYNONYMS'] := { NONE, ALL, PRIVATE} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['NET PROTOCOL'] := { = TNS, TCP/IP,SPX/IPX,NETBIOS,NAMED PIPES,DECNET,3270,VINES,APPC,ASYNC} - //fDatabase.Params.Values['OBJECT MODE'] := { = TRUE/FALSE} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['ROWSET SIZE'] := { = 20} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - if Server <> '' then fDatabase.Params.Values['SERVER NAME'] := Server; { = ORA_SERVER} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - SetUserNamePassword; - end; - bdeSYBASE: begin - //fDatabase.Params.Values['APPLICATION MODE'] := { } - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB EDIT LOGGING'] := { '',TRUE,FALSE} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - //fDatabase.Params.Values['CS CURSOR ROWS'] := { = 1} - if Database <> '' then fDatabase.Params.Values['DATABASE NAME'] := Database; - //fDatabase.Params.Values['DATE MODE'] := { = 0}; - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['HOST NAME'] := { }; - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['MAX QUERY TIME'] := { 300} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['NATIONAL LANG NAME'] := { } - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - if Server <> '' then fDatabase.Params.Values['SERVER NAME'] := Server; { = SYB_SERVER} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - //fDatabase.Params.Values['TDS PACKET SIZE'] := { = 512} - SetUserNamePassword; - end; - bdeODBC: begin - //fDatabase.Params.Values['BATCH COUNT'] := { = 200} - //fDatabase.Params.Values['BLOB SIZE'] := { = 32} - //fDatabase.Params.Values['BLOBS TO CACHE'] := { = 64} - if Database <> '' then fDatabase.Params.Values['DATABASE NAME'] := Database; - //fDatabase.Params.Values['ENABLE BCD'] := { TRUE / FALSE} - //fDatabase.Params.Values['ENABLE SCHEMA CACHE'] := { TRUE / FALSE} - //fDatabase.Params.Values['LANGDRIVER'] := { ...} - //fDatabase.Params.Values['MAX ROWS'] := { = -1} - //fDatabase.Params.Values['ODBC DSN'] := {} - //fDatabase.Params.Values['OPEN MODE'] := { READ/WRITE, READ ONLY} - //fDatabase.Params.Values['ROWSET SIZE'] := { = 20} - //fDatabase.Params.Values['SCHEMA CACHE DIR'] := { = ''} - //fDatabase.Params.Values['SCHEMA CACHE SIZE'] := { = 8} - //fDatabase.Params.Values['SCHEMA CACHE TIME'] := { = -1} - //fDatabase.Params.Values['SQLPASSTHRU MODE'] := { SHARED AUTOCOMMIT, SHARED NOAUTOCOMMIT, NOT SHARED} - //fDatabase.Params.Values['SQLQRYMODE'] := { = '',LOCAL,SERVER} - SetUserNamePassword; - end; - end; - for i := 0 to AuxParamsCount - 1 do begin - if AnsiSameText(AuxParamNames[i], 'TransIsolation') then begin - if AnsiSameText(AuxParams[AuxParamNames[i]], 'tiDirtyRead') then fDatabase.TransIsolation := tiDirtyRead else - if AnsiSameText(AuxParams[AuxParamNames[i]], 'tiReadCommitted') then fDatabase.TransIsolation := tiReadCommitted else - if AnsiSameText(AuxParams[AuxParamNames[i]], 'tiRepeatableRead') then fDatabase.TransIsolation := tiRepeatableRead; - end - else - fDatabase.Params.Values[AuxParamNames[i]] := AuxParams[AuxParamNames[i]]; - end; - end; -end; - -function TDAEBDEConnection.DoBeginTransaction: integer; -begin - result := -1; - fDatabase.StartTransaction; -end; - -procedure TDAEBDEConnection.DoCommitTransaction; -begin - fDatabase.Commit; -end; - -procedure TDAEBDEConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -begin - inherited DoGetForeignKeys(ForeignKeys); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: IB_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys); - bdeMSSQL: MSSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, True); - end; - {$ENDIF} -end; - -function TDAEBDEConnection.DoGetInTransaction: boolean; -begin - Result := fDatabase.InTransaction; -end; - -function TDAEBDEConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -begin - Result := inherited DoGetLastAutoInc(GeneratorName); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: Result := IB_GetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - bdeMSSQL: Result := MSSQL_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - bdeOracle: Result := Oracle_DoGetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - end; - {$ENDIF} -end; - -procedure TDAEBDEConnection.DoGetStoredProcedureNames( - out List: IROStrings); -begin - inherited DoGetStoredProcedureNames(List); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotProcedure); - bdeMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure, True); - else - fDatabase.Session.GetStoredProcNames(fDatabase.DatabaseName, List.Strings); - end; - {$ELSE} - fDatabase.Session.GetStoredProcNames(fDatabase.DatabaseName, List.Strings); - {$ENDIF} -end; - -procedure TDAEBDEConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -begin - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: IB_GetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - bdeMSSQL: MSSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - else - inherited DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), Fields); - end; - {$ELSE} - inherited DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), Fields); - {$ENDIF} -end; - -procedure TDAEBDEConnection.DoGetTableNames(out List: IROStrings); -begin - inherited DoGetTableNames(List); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotTable); - bdeMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable, True); - else - fDatabase.GetTableNames(List.Strings); - end; - {$ELSE} - fDatabase.GetTableNames(List.Strings); - {$ENDIF} -end; - -procedure TDAEBDEConnection.DoGetViewNames(out List: IROStrings); -begin - inherited DoGetViewNames(List); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotView); - bdeMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView, True); - end; - {$ENDIF} -end; - -procedure TDAEBDEConnection.DoRollbackTransaction; -begin - fDatabase.Rollback; -end; - -function TDAEBDEConnection.GetDatabaseNames: IROStrings; -begin - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeMSSQL: Result := MSSQL_GetDatabaseNames(Self); - else - Result := NewROStrings; - fDatabase.Session.GetDatabaseNames(Result.Strings); - end; - {$ELSE} - Result := NewROStrings; - fDatabase.Session.GetDatabaseNames(Result.Strings); - {$ENDIF} -end; - -function TDAEBDEConnection.GetDatasetClass: TDAEDatasetClass; -begin - Result := TDAEBDEQuery; -end; - -function TDAEBDEConnection.GetFileExtensions: IROStrings; -begin - case fProviderType of - bdeINTRBASE: Result := IB_GetFileExtensions; - bdeMSACCESS: begin - Result := NewROStrings; - result.Add('*.mdb;MSAccess files (*.mdb)'); - result.Add('*.*;All files (*.*)'); - end; - else - Result := NewROStrings; - end; -end; - -function TDAEBDEConnection.GetGeneratorNames: IROStrings; -begin - case fProviderType of - bdeINTRBASE: Result:= IB_GetGeneratorNames(GetDatasetClass.Create(Self)); - else - Result := NewROStrings; - end; -end; - -function TDAEBDEConnection.GetNextAutoinc( - const GeneratorName: string): integer; -begin - result := -1; - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: Result := IB_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - bdeOracle: Result := Oracle_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - end; - {$ENDIF} -end; - -function TDAEBDEConnection.GetQuoteChars: TDAQuoteCharArray; -begin - case fProviderType of - bdeMSSQL: result:=MSSQL_GetQuoteChars; - else - Result[0] := '"'; - Result[1] := '"'; - end; -end; - -function TDAEBDEConnection.GetSPSelectSyntax( - HasArguments: Boolean): string; -begin - Result := inherited GetSPSelectSyntax(HasArguments); - {$IFDEF MAX_SUPPORT} - case fProviderType of - bdeINTRBASE: Result := IB_GetSPSelectSyntax(HasArguments); - bdeMSSQL: Result := MSSQL_GetSPSelectSyntax(HasArguments); - bdeOracle: Result := Oracle_GetSPSelectSyntax(HasArguments); - end; - {$ENDIF} -end; - -function TDAEBDEConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - Result := TDAEBDEStoredProcedure; -end; - -function TDAEBDEConnection.IdentifierNeedsQuoting( - const iIdentifier: string): boolean; -begin - Result := inherited IdentifierNeedsQuoting(iIdentifier); - if not Result then - case fProviderType of - bdeMSSQL: Result := MSSQL_IdentifierNeedsQuoting(iIdentifier); - bdeINTRBASE: Result := IB_IdentifierNeedsQuoting(iIdentifier); - else - Result := SQL92_IdentifierNeedsQuoting(iIdentifier); - end; -end; - -function TDAEBDEConnection.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - Result := E_NOINTERFACE; - - if IsEqualGUID(IID, IDAInterbaseConnection) then begin - if not (fProviderType in [bdeINTRBASE]) then Exit; - end; - - if IsEqualGUID(IID, IDAADOConnection) then begin - if not (fProviderType in [bdeMSSQL]) then Exit; - end; - - if IsEqualGUID(IID, IDAOracleConnection) then begin - if not (fProviderType in [bdeOracle]) then Exit; - end; - - if IsEqualGUID(IID, IDAUseGenerators) then begin - if not (fProviderType in [bdeINTRBASE, bdeOracle]) then Exit; - end; - - if IsEqualGUID(IID, IDACanQueryGeneratorsNames) then begin - if not (fProviderType in [bdeINTRBASE]) then Exit; - end; - - if IsEqualGUID(IID, IDAFileBasedDatabase) then begin - if not (fProviderType in [bdeINTRBASE, bdeMSACCESS]) then Exit; - end; - - if IsEqualGUID(IID, IDACanQueryDatabaseNames) then begin - if not (fProviderType in [bdeINFORMIX, bdeMSSQL, bdeORACLE, bdeSYBASE]) then Exit; - end; - - if IsEqualGUID(IID, IDADirectoryBasedDatabase) then begin - if not (fProviderType in [bdeSTANDARD]) then Exit; - end; - - Result := inherited QueryInterface(IID, Obj); -end; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDABDEDriver]); -end; - -exports - GetDriverObject name func_GetDriverObject; - -function TDAEBDEConnection.QuoteFieldName(const aTableName, - aFieldName: string): string; -begin - Result := inherited QuoteFieldName(aTableName, aFieldName); - case fProviderType of - bdeSTANDARD: - if (aTableName <> '') and (aFieldName <> Result) then - Result := QuoteIdentifierIfNeeded(aTableName) + '.' + Result; - end; -end; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDACRLabsUtils.inc b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDACRLabsUtils.inc deleted file mode 100644 index 5cf9450..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDACRLabsUtils.inc +++ /dev/null @@ -1,60 +0,0 @@ -{ - !!! DO NOT REMOVE THIS FILE !!! - - It's included with an $I directive in the SDAC and ODAC driver units and it's used in - their implementation of the IDAMustSetParams - -} -procedure WriteCrLabsParamValues(InputParams : TDAParamCollection; OutputParams: TDAParams; IgnoreBlobType : boolean = false); -var i : integer; - par : uDAInterfaces.TDAParam; - outpar : DBAccess.TDAParam; - blobtype : TFieldType; -begin - for i := 0 to (InputParams.Count-1) do begin - par := InputParams[i]; - outpar := OutputParams.ParamByName(par.Name); - - // If no blob type is specified, then gets the default field type. - // BlobType is only meaningful to Oracle. MSSQL works fine just setting the DataType - blobtype := BlobTypeMappings[par.BlobType]; - if (blobtype=ftUnknown) - then blobtype := DADataTypesMappings[par.DataType]; - - case par.DataType of - datBlob : begin - outpar.ParamType := TParamType(par.ParamType); - outpar.DataType := DADataTypesMappings[par.DataType]; - if VarIsNull(par.Value) then - outpar.Clear - else begin - if VarIsArray(par.Value) then - outpar.Value := VariantBinaryToString(par.Value) - else - outpar.Value := par.Value; - end; - end; - datMemo : begin - outpar.ParamType := TParamType(par.ParamType); - outpar.DataType := ftMemo; - - // Only happens with Oracle - if not IgnoreBlobType and (blobtype<>ftUnknown) then - outpar.DataType := blobtype; - - if VarIsNull(par.Value) then - outpar.Clear - else - outpar.Value := par.Value; - end; - else begin - outpar.ParamType := TParamType(par.ParamType); - outpar.DataType := DADataTypesMappings[par.DataType]; - if VarIsNull(par.Value) - then outpar.Clear - else outpar.Value := par.Value; - end; - end; { case } - end; { for } -end; - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBISAMDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBISAMDriver.pas deleted file mode 100644 index 8373a80..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBISAMDriver.pas +++ /dev/null @@ -1,799 +0,0 @@ -unit uDADBISAMDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -{$R DataAbstract_DBISAMDriver_Glyphs.res} - -{$I dbisamvr.inc} -{$IFNDEF DBISAM_V4} -{$DEFINE DBISAM_V3} -{$ENDIF} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, uROClasses, DBISAMTb, uDAUtils; - -type - { TDADBISAMDriver } - TDADBISAMDriver = class(TDADriverReference) - end; - - { IDBISAMConnection } - IDBISAMConnection = interface - ['{C6222EF8-FBAE-42AE-B034-8FFAE8FF2578}'] - end; - - { IDBISAMConnectionProperties - Provides access to common properties of DBISAM connections } - - IDBISAMConnectionProperties = interface - ['{41BAFCD6-D6EA-477E-B489-7EA6E05FFCC0}'] - function GetForceBufferFlush: Boolean; - procedure SetForceBufferFlush(Value: Boolean); - function GetKeepConnections: Boolean; - procedure SetKeepConnections(Value: Boolean); - function GetLockProtocol: TLockProtocol; - procedure SetLockProtocol(Value: TLockProtocol); - function GetLockRetryCount: Byte; - procedure SetLockRetryCount(Value: Byte); - function GetLockWaitTime: Word; - procedure SetLockWaitTime(Value: Word); - function GetPrivateDir: string; - procedure SetPrivateDir(const Value: string); - function GetRemotePort: Integer; - procedure SetRemotePort(Value: Integer); - function GetRemoteService: string; - procedure SetRemoteService(const Value: string); - function GetRemoteTrace: Boolean; - procedure SetRemoteTrace(Value: Boolean); - {$IFDEF DBISAM_V3} - function GetRemoteType: TRemoteType; - procedure SetRemoteType(Value: TRemoteType); - {$ENDIF} - {$IFDEF DBISAM_V4} - function GetRemoteCompression: Byte; - procedure SetRemoteCompression(Value: Byte); - function GetRemoteEncryption: Boolean; - procedure SetRemoteEncryption(Value: Boolean); - function GetRemoteEncryptionPassword: string; - procedure SetRemoteEncryptionPassword(const Value: string); - function GetRemoteTimeout: Integer; - procedure SetRemoteTimeout(Value: Integer); - {$ENDIF} - - procedure AddPassword( const aPassword: string); - procedure RemovePassword(const aPassword: string); - procedure RemoveAllPasswords; - - property ForceBufferFlush: Boolean read GetForceBufferFlush write SetForceBufferFlush; - property KeepConnections: Boolean read GetKeepConnections write SetKeepConnections; - property LockProtocol: TLockProtocol read GetLockProtocol write SetLockProtocol; - property LockRetryCount: Byte read GetLockRetryCount write SetLockRetryCount; - property LockWaitTime: Word read GetLockWaitTime write SetLockWaitTime; - property PrivateDir: string read GetPrivateDir write SetPrivateDir; - property RemotePort: Integer read GetRemotePort write SetRemotePort; - property RemoteService: string read GetRemoteService write SetRemoteService; - property RemoteTrace: Boolean read GetRemoteTrace write SetRemoteTrace; - {$IFDEF DBISAM_V3} - property RemoteType: TRemoteType read GetRemoteType write SetRemoteType; - {$ENDIF} - {$IFDEF DBISAM_V4} - property RemoteCompression: Byte read GetRemoteCompression write SetRemoteCompression; - property RemoteEncryption: Boolean read GetRemoteEncryption write SetRemoteEncryption; - property RemoteEncryptionPassword: string read GetRemoteEncryptionPassword write SetRemoteEncryptionPassword; - property RemoteTimeout: Integer read GetRemoteTimeout write SetRemoteTimeout; - {$ENDIF} - end; - - { TDBISAMConnection } - TDBISAMConnection = class(TDAConnectionWrapper) - private - fDatabase: TDBISAMDatabase; - fSession: TDBISAMSession; - - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: Boolean); override; - - public - constructor Create(AOwner: TComponent); override; - - property Database: TDBISAMDatabase read fDatabase; - property Session: TDBISAMSession read fSession; - end; - - { TDAEDBISAMDriver } - TDAEDBISAMDriver = class(TDAEDriver) - private - - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall; - public - end; - - { TDAEDBISAMConnection } - TDAEDBISAMConnection = class(TDAEConnection, IDBISAMConnection, IDBISAMConnectionProperties) - private - fConnection: TDBISAMConnection; - - protected - // IDBISAMConnectionProperties - function GetForceBufferFlush: Boolean; - procedure SetForceBufferFlush(Value: Boolean); - function GetKeepConnections: Boolean; - procedure SetKeepConnections(Value: Boolean); - function GetLockProtocol: TLockProtocol; - procedure SetLockProtocol(Value: TLockProtocol); - function GetLockRetryCount: Byte; - procedure SetLockRetryCount(Value: Byte); - function GetLockWaitTime: Word; - procedure SetLockWaitTime(Value: Word); - function GetPrivateDir: string; - procedure SetPrivateDir(const Value: string); - function GetRemotePort: Integer; - procedure SetRemotePort(Value: Integer); - function GetRemoteService: string; - procedure SetRemoteService(const Value: string); - function GetRemoteTrace: Boolean; - procedure SetRemoteTrace(Value: Boolean); - {$IFDEF DBISAM_V3} - function GetRemoteType: TRemoteType; - procedure SetRemoteType(Value: TRemoteType); - {$ENDIF} - {$IFDEF DBISAM_V4} - function GetRemoteCompression: Byte; - procedure SetRemoteCompression(Value: Byte); - function GetRemoteEncryption: Boolean; - procedure SetRemoteEncryption(Value: Boolean); - function GetRemoteEncryptionPassword: string; - procedure SetRemoteEncryptionPassword(const Value: string); - function GetRemoteTimeout: Integer; - procedure SetRemoteTimeout(Value: Integer); - {$ENDIF} - procedure AddPassword( const aPassword: string); - procedure RemovePassword(const aPassword: string); - procedure RemoveAllPasswords; - - // IDAConnection - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - function DoBeginTransaction: Integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: Boolean; override; - procedure DoGetTableNames(out List: IROStrings); override; - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection);override; - public - end; - - { TDAEDBISAMQuery } - TDAEDBISAMQuery = class(TDAEDataset, IDAMustSetParams) - private - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: Integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: Boolean); override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - {$IFDEF DBISAM_V4} - procedure RefreshParams; override; - {$ENDIF} - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -const - DBISAM_DriverType = 'DBISAM'; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, uDADriverManager, uDARes, uDAMacroProcessors, Variants, - uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDADBISAMDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEDBISAMDriver.Create(nil); - result := _driver; -end; - -{ TDBISAMConnection } - -constructor TDBISAMConnection.Create(AOwner: TComponent); -begin - inherited; - - fSession := TDBISAMSession.Create(Self); - fSession.AutoSessionName := TRUE; - - fDatabase := TDBISAMDatabase.Create(Self); - fDatabase.SessionName := fSession.SessionName; - fDatabase.DatabaseName := 'DBISAMDB'; -end; - -function TDBISAMConnection.GetConnected: Boolean; -begin - result := fDatabase.Connected; -end; - -procedure TDBISAMConnection.SetConnected(Value: Boolean); -begin - if not(csDestroying in fDatabase.ComponentState) then begin - try - fSession.Active := Value; - fDatabase.Connected := Value; - except - fSession.Active := FALSE; - fDatabase.Connected := FALSE; - raise; - end; - end; -end; - -{ TDAEDBISAMConnection } - -procedure TDAEDBISAMConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - with aConnStrParser do begin - if (Self.UserID <> '') then - fConnection.Session.RemoteUser := Self.UserID - else - fConnection.Session.RemoteUser := UserID; - if (Self.Password <> '') then - fConnection.Session.RemotePassword := Self.Password - else - fConnection.Session.RemotePassword := Password; - - if (Server <> '') then begin - // Remote connection - fConnection.Session.SessionType := stRemote; - fConnection.Session.RemoteHost := Server; - fConnection.Database.RemoteDatabase := Database; - if (AuxParams['RemotePort'] <> '') then - fConnection.Session.RemotePort := StrToInt(AuxParams['RemotePort']); - if (AuxParams['RemoteService'] <> '') then - fConnection.Session.RemoteService := AuxParams['RemoteService']; - if (AuxParams['RemoteTrace'] = 'False') then - fConnection.Session.RemoteTrace := False - else if (AuxParams['RemoteTrace'] = 'True') then - fConnection.Session.RemoteTrace := True; - {$IFDEF DBISAM_V3} - if (AuxParams['RemoteType'] = 'rtLAN') then - fConnection.Session.RemoteType := rtLAN - else if (AuxParams['RemoteType'] = 'rtInternet') then - fConnection.Session.RemoteType := rtInternet; - {$ENDIF} - {$IFDEF DBISAM_V4} - if (AuxParams['RemoteCompression'] <> '') then - if (StrToInt(AuxParams['RemoteCompression']) in [0..9]) then - fConnection.Session.RemoteCompression := StrToInt(AuxParams['RemoteCompression']); - if (AuxParams['RemoteEncryption'] = 'False') then - fConnection.Session.RemoteEncryption := False - else if (AuxParams['RemoteEncryption'] = 'True') then - fConnection.Session.RemoteEncryption := True; - if (AuxParams['RemoteEncryptionPassword'] <> '') then - fConnection.Session.RemoteEncryptionPassword := AuxParams['RemoteEncryptionPassword']; - if (AuxParams['RemoteTimeout'] <> '') then - fConnection.Session.RemoteTimeout := StrToInt(AuxParams['RemoteTimeout']); - {$ENDIF} - end - else begin - // Local connection - fConnection.Session.SessionType := stLocal; - fConnection.Database.Directory := Database; - end; - - if (AuxParams['ForceBufferFlush'] = 'False') then - fConnection.Session.ForceBufferFlush := False - else if (AuxParams['ForceBufferFlush'] = 'True') then - fConnection.Session.ForceBufferFlush := True; - if (AuxParams['KeepConnections'] = 'False') then - begin - fConnection.Session.KeepConnections := False; - fConnection.Database.KeepConnection := False; - end - else if (AuxParams['KeepConnections'] = 'True') then - begin - fConnection.Session.KeepConnections := True; - fConnection.Database.KeepConnection := True; - end; - if (AuxParams['LockProtocol'] = 'lpOptimistic') then - fConnection.Session.LockProtocol := lpOptimistic - else if (AuxParams['LockProtocol'] = 'lpPessimistic') then - fConnection.Session.LockProtocol := lpPessimistic; - if (AuxParams['LockRetryCount'] <> '') then - fConnection.Session.LockRetryCount := StrToInt(AuxParams['LockRetryCount']); - if (AuxParams['LockWaitTime'] <> '') then - fConnection.Session.LockWaitTime := StrToInt(AuxParams['LockWaitTime']); - if (AuxParams['PrivateDir'] <> '') then - fConnection.Session.PrivateDir := AuxParams['PrivateDir']; - if (AuxParams['TablePassword'] <> '') then - begin - fConnection.Session.Active := True; - fConnection.Session.AddPassword(AuxParams['TablePassword']); - end; - end; -end; - -function TDAEDBISAMConnection.DoBeginTransaction: integer; -begin - result := -1; - fConnection.Database.StartTransaction; -end; - -procedure TDAEDBISAMConnection.DoCommitTransaction; -begin - with fConnection do - Database.Commit(Session.ForceBufferFlush); -end; - -function TDAEDBISAMConnection.CreateCustomConnection: TCustomConnection; -begin - result := TDBISAMConnection.Create(nil); - fConnection := TDBISAMConnection(result); -end; - -function TDAEDBISAMConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEDBISAMQuery -end; - -procedure TDAEDBISAMConnection.DoGetTableNames(out List: IROStrings); -var - _database: string; -begin - List := TROStrings.Create; - if (fConnection.Session.SessionType = stLocal) then - _database := fConnection.Database.Directory - else - _database := fConnection.Database.RemoteDatabase; - - fConnection.Session.GetTableNames(_database, List.Strings); -end; - -procedure TDAEDBISAMConnection.DoRollbackTransaction; -begin - fConnection.Database.Rollback; -end; - -function TDAEDBISAMConnection.DoGetInTransaction: Boolean; -begin - result := fConnection.Database.InTransaction; -end; - -function TDAEDBISAMConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - result := TDADBISAMMacroProcessor.Create; -end; - -function TDAEDBISAMConnection.GetForceBufferFlush: Boolean; -begin - result := fConnection.Session.ForceBufferFlush; -end; - -procedure TDAEDBISAMConnection.SetForceBufferFlush(Value: Boolean); -begin - fConnection.Session.ForceBufferFlush := Value; -end; - -function TDAEDBISAMConnection.GetKeepConnections: Boolean; -begin - result := fConnection.Session.KeepConnections; -end; - -procedure TDAEDBISAMConnection.SetKeepConnections(Value: Boolean); -begin - fConnection.Session.KeepConnections := Value; - fConnection.Database.KeepConnection := Value; -end; - -function TDAEDBISAMConnection.GetLockProtocol: TLockProtocol; -begin - result := fConnection.Session.LockProtocol; -end; - -procedure TDAEDBISAMConnection.SetLockProtocol(Value: TLockProtocol); -begin - fConnection.Session.LockProtocol := Value; -end; - -function TDAEDBISAMConnection.GetLockRetryCount: Byte; -begin - result := fConnection.Session.LockRetryCount; -end; - -procedure TDAEDBISAMConnection.SetLockRetryCount(Value: Byte); -begin - fConnection.Session.LockRetryCount := Value; -end; - -function TDAEDBISAMConnection.GetLockWaitTime: Word; -begin - result := fConnection.Session.LockWaitTime; -end; - -procedure TDAEDBISAMConnection.SetLockWaitTime(Value: Word); -begin - fConnection.Session.LockWaitTime := Value; -end; - -function TDAEDBISAMConnection.GetPrivateDir: string; -begin - result := fConnection.Session.PrivateDir; -end; - -procedure TDAEDBISAMConnection.SetPrivateDir(const Value: string); -begin - fConnection.Session.PrivateDir := Value; -end; - -function TDAEDBISAMConnection.GetRemotePort: Integer; -begin - result := fConnection.Session.RemotePort; -end; - -procedure TDAEDBISAMConnection.SetRemotePort(Value: Integer); -begin - fConnection.Session.RemotePort := Value; -end; - -function TDAEDBISAMConnection.GetRemoteService: string; -begin - result := fConnection.Session.RemoteService; -end; - -procedure TDAEDBISAMConnection.SetRemoteService(const Value: string); -begin - fConnection.Session.RemoteService := Value; -end; - -function TDAEDBISAMConnection.GetRemoteTrace: Boolean; -begin - result := fConnection.Session.RemoteTrace; -end; - -procedure TDAEDBISAMConnection.SetRemoteTrace(Value: Boolean); -begin - fConnection.Session.RemoteTrace := Value; -end; - -{$IFDEF DBISAM_V3} - -function TDAEDBISAMConnection.GetRemoteType: TRemoteType; -begin - result := fConnection.Session.RemoteType; -end; - -procedure TDAEDBISAMConnection.SetRemoteType(Value: TRemoteType); -begin - fConnection.Session.RemoteType := Value; -end; -{$ENDIF} - -{$IFDEF DBISAM_V4} - -function TDAEDBISAMConnection.GetRemoteCompression: Byte; -begin - result := fConnection.Session.RemoteCompression; -end; - -procedure TDAEDBISAMConnection.SetRemoteCompression(Value: Byte); -begin - fConnection.Session.RemoteCompression := Value; -end; - -function TDAEDBISAMConnection.GetRemoteEncryption: Boolean; -begin - result := fConnection.Session.RemoteEncryption; -end; - -procedure TDAEDBISAMConnection.SetRemoteEncryption(Value: Boolean); -begin - fConnection.Session.RemoteEncryption := Value; -end; - -function TDAEDBISAMConnection.GetRemoteEncryptionPassword: string; -begin - result := fConnection.Session.RemoteEncryptionPassword; -end; - -procedure TDAEDBISAMConnection.SetRemoteEncryptionPassword(const Value: string); -begin - fConnection.Session.RemoteEncryptionPassword := Value; -end; - -function TDAEDBISAMConnection.GetRemoteTimeout: Integer; -begin - result := fConnection.Session.RemoteTimeout; -end; - -procedure TDAEDBISAMConnection.SetRemoteTimeout(Value: Integer); -begin - fConnection.Session.RemoteTimeout := Value; -end; -{$ENDIF} - -procedure TDAEDBISAMConnection.AddPassword( const aPassword: string); -begin - fConnection.Session.AddPassword(aPassword); -end; - -procedure TDAEDBISAMConnection.RemovePassword( const aPassword: string); -begin - fConnection.Session.RemovePassword(aPassword); -end; - -procedure TDAEDBISAMConnection.RemoveAllPasswords; -begin - fConnection.Session.RemoveAllPasswords; -end; - -function TDAEDBISAMConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -var - lQuery: IDADataset; -begin - lQuery:=GetDatasetClass.Create(Self); - try - lQuery.SQL := 'SELECT LASTAUTOINC('''+GeneratorName+''') from '+QuoteIdentifierIfNeeded(GeneratorName); - lQuery.Open; - Result := lQuery.Fields[0].AsInteger; - finally - lQuery:=nil; - end; -end; - -procedure TDAEDBISAMConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -var - i: integer; -begin - inherited DoGetTableFields(aTableName,Fields); - For i:=0 to Fields.Count -1 do - if Fields[i].DataType = datAutoInc then Fields[i].GeneratorName:= aTableName; -end; - -{ TDAEDBISAMDriver } - -procedure TDAEDBISAMDriver.GetAuxParams(const AuxDriver: string; out List: IROStrings); -begin - inherited; - - List.Add('ForceBufferFlush=False,True'); - List.Add('KeepConnections=False,True'); - List.Add('LockProtocol=lpOptimistic,lpPessimistic'); - List.Add('LockRetryCount='); - List.Add('LockWaitTime='); - List.Add('PrivateDir='); - List.Add('RemotePort='); - List.Add('RemoteService='); - List.Add('RemoteTrace=False,True'); - List.Add('TablePassword='); - {$IFDEF DBISAM_V3} - List.Add('RemoteType=rtLAN,rtInternet'); - {$ENDIF} - {$IFDEF DBISAM_V4} - List.Add('RemoteCompression='); - List.Add('RemoteEncryption=False,True'); - List.Add('RemoteEncryptionPassword='); - List.Add('RemoteTimeout='); - {$ENDIF} - - List.Sorted := True; -end; - -function TDAEDBISAMDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAEDBISAMDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEDBISAMConnection -end; - -function TDAEDBISAMDriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - Result:=DBISAM_DriverType; -end; - -function TDAEDBISAMDriver.GetDescription: string; -begin - {$IFDEF DBISAM_V3} - result := 'DBISAM3 Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; - {$ENDIF} - {$IFDEF DBISAM_V4} - result := 'DBISAM4 Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; - {$ENDIF} -end; - -function TDAEDBISAMDriver.GetDriverID: string; -begin - {$IFDEF DBISAM_V3} - result := 'DBISAM3'; - {$ENDIF} - {$IFDEF DBISAM_V4} - result := 'DBISAM4'; - {$ENDIF} -end; - -{ TDAEDBISAMQuery } - -function TDAEDBISAMQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TDBISAMQuery.Create(nil); - - with TDBISAMQuery(result) do begin - DatabaseName := TDAEDBISAMConnection(aConnection).fConnection.Database.DatabaseName; - SessionName := TDAEDBISAMConnection(aConnection).fConnection.Session.SessionName; - ReadOnly := True; - RequestLive := True; - end; -end; - -function TDAEDBISAMQuery.DoExecute: integer; -begin - with TDBISAMQuery(Dataset) do begin - ExecSQL; - result := RowsAffected; - end; -end; - -function TDAEDBISAMQuery.DoGetSQL: string; -begin - result := TDBISAMQuery(Dataset).SQL.Text -end; - -procedure TDAEDBISAMQuery.DoPrepare(Value: Boolean); -begin - TDBISAMQuery(Dataset).Prepared := Value; -end; - -procedure TDAEDBISAMQuery.SetParamValues(Params: TDAParamCollection); -var - i: integer; - par: uDAInterfaces.TDAParam; - {$IFDEF DBISAM_V4} - outpar: TDBISAMParam; - {$ELSE} - outpar: TParam; - {$ENDIF} - s : string; -begin - s := ''; - for i := 0 to (Params.Count - 1) do begin - par := Params[i]; - - outpar := TDBISAMQuery(Dataset).Params.ParamByName(par.Name); - if par.DataType = datBlob then begin - outpar.DataType := ftBlob; - outpar.Value := VariantBinaryToString(par.Value); - end - else begin - {$IFDEF DBISAM_V4} - outpar.DataType := DATypeToVCLType(par.DataType); - {$ENDIF} - outpar.Value := par.Value; - end; - - s := s+outpar.Name+'='+VarToStr(outpar.Value)+#13#10; - end; -end; - -procedure TDAEDBISAMQuery.GetParamValues(Params: TDAParamCollection); -var - i: integer; - par: uDAInterfaces.TDAParam; - {$IFDEF DBISAM_V4} - inpar: TDBISAMParam; - {$ELSE} - inpar: TParam; - {$ENDIF} -begin - for i := 0 to (Params.Count - 1) do begin - par := Params[i]; - inpar := TDBISAMQuery(Dataset).Params.ParamByName(par.Name); - par.Value := inpar.Value; - end; -end; - -procedure TDAEDBISAMQuery.DoSetSQL(const Value: string); -begin - TDBISAMQuery(Dataset).SQL.Text := Value; -end; - -{$IFDEF DBISAM_V4} -procedure TDAEDBISAMQuery.RefreshParams; -var - i: Integer; - par: TDAParam; - outpar: TDBISAMParam; - ds: TDBISAMQuery; -begin - inherited; - ds := TDBISAMQuery(Dataset); - if not Assigned(ds.Params) then - Exit; - for i := 0 to ds.Params.Count -1 do begin - outpar := ds.Params[i]; - - par := self.ParamByName(outpar.Name); - - if outpar.DataType <> ftUnknown then begin - par.DataType := VCLTypeToDAType(outpar.DataType); - end; - end; -end; -{$ENDIF} - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBXDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBXDriver.pas deleted file mode 100644 index 7c30319..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDADBXDriver.pas +++ /dev/null @@ -1,937 +0,0 @@ -unit uDADBXDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -{$R DataAbstract_DBXDriver_Glyphs.res} - -interface - -uses Windows,Classes, DB, uDAEngine, uDAInterfaces, uROClasses, SqlExpr, DBXpress, - SqlConst, uDAUtils, uDAIBInterfaces, uDAAdoInterfaces,uDAMySQLInterfaces; - -const - // Standard dbExpress driver identifiers - dbx_UnknownId = '???'; - dbx_MSSQLId = 'MSSQL'; - dbx_InterbaseId = 'Interbase'; - dbx_OracleId = 'Oracle'; - dbx_DB2Id = 'DB2'; - dbx_MySQLId = 'MYSQL'; - dbx_InformixId = 'Informix'; - {$IFDEF DELPHI9UP} - dbx_ASAid = 'ASA'; - dbx_ASEid = 'ASE'; - {$ENDIF} - -type - // Standard dbExpress driver enumerated - TDADBXDriverType = (dbx_Unknown, - dbx_MSSQL, - dbx_Interbase, - dbx_Oracle, - dbx_DB2, - dbx_MySQL, - dbx_Informix - {$IFDEF DELPHI9UP} - , dbx_ASA, dbx_ASE - {$ENDIF DELPHI9UP} - ); - -const - // Standard dbExpress driver identifier array (useful for lookups) - DBXDrivers: array[TDADBXDriverType] of string = ( - dbx_UnknownId, - dbx_MSSQLId, - dbx_InterbaseId, - dbx_OracleId, - dbx_DB2Id, - dbx_MySQLId, - dbx_InformixId - {$IFDEF DELPHI9UP} - ,dbx_ASAid, dbx_ASEid - {$ENDIF DELPHI9UP} - ); - -type - { TDADBXDriver } - TDADBXDriver = class(TDADriverReference) - end; - - { TDAEDBXDriver } - TDAEDBXDriver = class(TDAEDriver, IDADriver40) - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - - procedure GetAuxDrivers(out List: IROStrings); override; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - // IDADriver40 - function GetProviderDefaultCustomParameters(Provider: string): string; safecall; - function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall; - public - end; - - { IDBXConnection - For identification purposes. } - IDBXConnection = interface - ['{D4E8FE6C-76B5-46FA-A850-2FD626960775}'] - function GetDriverName: string; - function GetDriverType: TDADBXDriverType; - - property DriverName: string read GetDriverName; - property DriverType: TDADBXDriverType read GetDriverType; - end; - - { TDBXConnection } - TDBXConnection = class(TDAConnectionWrapper) - private - fSQLConnection: TSQLConnection; - fTransDesc: TTransactionDesc; - - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: Boolean); override; - - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - - property SQLConnection: TSQLConnection read fSQLConnection; - property TransDesc: TTransactionDesc read fTransDesc; - end; - - - { TDAEDBXConnection } - TDAEDBXConnection = class(TDAEConnection, IDAFileBasedDatabase, - IDACanQueryDatabaseNames, IDAUseGenerators ,{IDAADOConnection,} - IDAInterbaseConnection,IDACanQueryGeneratorsNames) - private - fConnection: TDBXConnection; - fDriverName: string; - fDriverType: TDADBXDriverType; - fMSSQLSchemaEnabled: Boolean; - protected - function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; - // TDAEConnection - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - function GetUserID: string; override; safecall; - procedure SetUserID(const Value: string); override; safecall; - function GetPassword: string; override; safecall; - procedure SetPassword(const Value: string); override; safecall; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - procedure DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); override; - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; - // IDBXConnection - function GetDriverName: string; - function GetDriverType: TDADBXDriverType; - function GetSPSelectSyntax(HasArguments: Boolean): string; override; - safecall; - //IDAFileBasedDatabase - function GetFileExtensions: IROStrings; - //IDACanQueryDatabaseNames - function GetDatabaseNames: IROStrings; - //IDAUseGenerators - function GetNextAutoinc(const GeneratorName: string): integer; safecall; - // IDACanQueryGeneratorsNames - function GetGeneratorNames: IROStrings; - public - property MSSQLSchemaEnabled: Boolean read fMSSQLSchemaEnabled write fMSSQLSchemaEnabled; - end; - - { TDAEDBXQuery } - TDAEDBXQuery = class(TDAEDataset) - private - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function IsNeedCreateFieldDefs: Boolean; override; - function IsNeedToFixFMTBCDIssue: Boolean; override; - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - public - end; - - { TDAEDBXStoredProcedure } - TDAEDBXStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - procedure RefreshParams; override; - end; - -procedure Register; - -function DBXDriverIdToDBXDriverType(const anID: string): TDADBXDriverType; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses SysUtils, INIFiles, uDADriverManager, uDARes, uDAMacroProcessors, Variants, SqlTimSt, - uROBinaryHelpers,uDASQL92Interfaces,uDAOracleInterfaces; - -// TODO: Add support for IADOConnection and IInterbaseConnection, etc by redefining QueryInterface in TDAEDBXConnection - - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDADBXDriver]); -end; - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAEDBXDriver.Create(nil); - result := _driver; -end; - -function DBXDriverIdToDBXDriverType(const anID: string): TDADBXDriverType; -var - x: TDADBXDriverType; -begin - result := dbx_Unknown; - - for x := Low(TDADBXDriverType) to High(TDADBXDriverType) do - if AnsiSameText(DBXDrivers[x], anID) then begin - result := x; - Exit; - end; - - //RaiseError('Unknown dbExpress driver %s', [anID]); -end; - -{ TDBXConnection } - -constructor TDBXConnection.Create(AOwner: TComponent); -begin - inherited; - fSQLConnection := TSQLConnection.Create(nil); -end; - -destructor TDBXConnection.Destroy; -begin - inherited; - fSQLConnection.Free; -end; - -function TDBXConnection.GetConnected: Boolean; -begin - result := fSQLConnection.Connected -end; - -procedure TDBXConnection.SetConnected(Value: Boolean); -begin - fSQLConnection.Connected := Value; -end; - -{ TDAEDBXConnection } - -procedure TDAEDBXConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); - - function GetProfileString(Section, Setting, IniFileName: string): string; - var - IniFile: TMemIniFile; - List: TStrings; - begin - List := TStringList.Create; - try - IniFile := TMemIniFile.Create(IniFileName); - IniFile.ReadSectionValues(Section, List); - try - Result := List.Values[Setting]; - finally - IniFile.Free; - end; - finally - List.Free; - end; - end; - -var - i: integer; - drvregfile: string; -begin - inherited; - - with aConnStrParser do begin - - with TDBXConnection(aConnectionObject).SQLConnection do begin - DriverName := AuxDriver; - - fDriverType := DBXDriverIdToDBXDriverType(AuxDriver); - - drvregfile := GetDriverRegistryFile(false); - - try - VendorLib := GetProfileString(DriverName, VENDORLIB_KEY, drvregfile); - LibraryName := GetProfileString(DriverName, DLLLIB_KEY, drvregfile); - GetDriverFunc := GetProfileString(DriverName, GETDRIVERFUNC_KEY, drvregfile); - except - DatabaseErrorFmt(SDriverNotInConfigFile, [DriverName, drvregfile]); - end; - - Params.Clear; - Params.Values[szUSERNAME] := UserID; - Params.Values[szPASSWORD] := Password; - if fDriverType = dbx_Interbase then begin // Dbx requires a seperate host field for Interbase - Params.Values[DATABASENAME_KEY] := Server + ':' + Database; - if auxParams[SQLDIALECT_KEY] = '' then begin - AuxParams[SQLDIALECT_KEY] := '3'; // default to 3 - end; - end else begin - Params.Values[HOSTNAME_KEY] := Server; - Params.Values[DATABASENAME_KEY] := Database; - end; - fMSSQLSchemaEnabled := false; - for i := 0 to (AuxParamsCount - 1) do begin - if AnsiSameText(AuxParamNames[i], 'DriverName') then - fConnection.fSQLConnection.DriverName:=AuxParams[AuxParamNames[i]] - else if AnsiSameText(AuxParamNames[i], 'GetDriverFunc') then - fConnection.fSQLConnection.GetDriverFunc:=AuxParams[AuxParamNames[i]] - else if AnsiSameText(AuxParamNames[i], 'LibraryName') then - fConnection.fSQLConnection.LibraryName:=AuxParams[AuxParamNames[i]] - else if AnsiSameText(AuxParamNames[i], 'TableScope') then begin - if AnsiSameText(AuxParams[AuxParamNames[i]], 'Synonyms') then - TableScope := [tsTable, tsView, tsSynonym] - else - TableScope := [tsTable, tsView] - end - else if AnsiSameText(AuxParamNames[i], 'Schemas') then - fMSSQLSchemaEnabled := AuxParams['Schemas'] = '1' - else begin - Params.Add(AuxParamNames[i] + '=' + AuxParams[AuxParamNames[i]]); - end; - end; - LoginPrompt := FALSE; - end; - end; -end; - -function TDAEDBXConnection.DoBeginTransaction: integer; -begin - result := -1; - - // TODO: allow more flexibility here... - fConnection.fTransDesc.TransactionID := 1; - fConnection.fTransDesc.IsolationLevel := xilREADCOMMITTED; - - fConnection.fSQLConnection.StartTransaction(fConnection.fTransDesc); -end; - -procedure TDAEDBXConnection.DoCommitTransaction; -begin - fConnection.fSQLConnection.Commit(fConnection.fTransDesc); -end; - -function TDAEDBXConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TDBXConnection.Create(nil); - fConnection.SQLConnection.LoginPrompt := FALSE; - result := fConnection; -end; - -function TDAEDBXConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEDBXQuery; -end; - -function TDAEDBXConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEDBXStoredProcedure; -end; - -procedure TDAEDBXConnection.DoGetStoredProcedureNames(out List: IROStrings); -begin - inherited DoGetStoredProcedureNames(List); - case fDriverType of - dbx_MSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure, MSSQLSchemaEnabled); - dbx_Interbase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotProcedure); - dbx_MySQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else -{$IFDEF DELPHI10}{$WARN SYMBOL_DEPRECATED OFF}{$ENDIF} - fConnection.fSQLConnection.GetProcedureNames(List.Strings); -{$IFDEF DELPHI10}{$WARN SYMBOL_DEPRECATED ON}{$ENDIF} - end; -end; - -procedure TDAEDBXConnection.DoGetStoredProcedureParams( - const aStoredProcedureName: string; out Params: TDAParamCollection); -begin - case fDriverType of - dbx_MySQL: MYSQL_DoGetStoredProcedureParams(aStoredProcedureName,GetDatasetClass.Create(Self),Params,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else - inherited; - end; -end; - -procedure TDAEDBXConnection.DoGetTableNames(out List: IROStrings); -begin - inherited DoGetTableNames(List); - case fDriverType of - dbx_MSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable, MSSQLSchemaEnabled); - dbx_Interbase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotTable); - dbx_MySQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else - fConnection.fSQLConnection.GetTableNames(List.Strings); - end; -end; - -procedure TDAEDBXConnection.DoRollbackTransaction; -begin -{$WARNINGS OFF} - fConnection.fSQLConnection.Rollback(fConnection.fTransDesc); -{$WARNINGS ON} -end; - -function TDAEDBXConnection.DoGetInTransaction: boolean; -begin - result := fConnection.fSQLConnection.InTransaction -end; - -function TDAEDBXConnection.GetDriverName: string; -begin - result := fDriverName -end; - -function TDAEDBXConnection.GetDriverType: TDADBXDriverType; -begin - result := fDriverType -end; - -function TDAEDBXConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - case fDriverType of - dbx_MSSQL: result := MSSQL_CreateMacroProcessor; - dbx_Interbase: result := IB_CreateMacroProcessor; - dbx_Oracle: result := Oracle_CreateMacroProcessor; - else - result := inherited CreateMacroProcessor; - end; -end; - -function TDAEDBXConnection.GetPassword: string; -begin - Result := fConnection.SQLConnection.Params.Values[szPASSWORD]; -end; - -function TDAEDBXConnection.GetUserID: string; -begin - Result := fConnection.SQLConnection.Params.Values[szUSERNAME]; -end; - -procedure TDAEDBXConnection.SetPassword(const Value: string); -begin - fConnection.SQLConnection.Params.Values[szPASSWORD] := Value; -end; - -procedure TDAEDBXConnection.SetUserID(const Value: string); -begin - fConnection.SQLConnection.Params.Values[szUSERNAME] := Value; -end; - -function TDAEDBXConnection.GetSPSelectSyntax( - HasArguments: Boolean): string; -begin - case fDriverType of - dbx_MSSQL: Result := MSSQL_GetSPSelectSyntax(HasArguments); - dbx_Interbase: Result := IB_GetSPSelectSyntax(HasArguments); - dbx_Oracle: Result := Oracle_GetSPSelectSyntax(HasArguments); - else - Result := inherited GetSPSelectSyntax(HasArguments); - end; -end; - -function TDAEDBXConnection.GetFileExtensions: IROStrings; -begin - case fDriverType of - dbx_Interbase: result := IB_GetFileExtensions; - else - result := TROStrings.Create; - end; -end; - -function TDAEDBXConnection.GetGeneratorNames: IROStrings; -begin - case fDriverType of - dbx_Interbase: Result:= IB_GetGeneratorNames(GetDatasetClass.Create(Self)); - else - Result := NewROStrings; - end; -end; - -function TDAEDBXConnection.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - Result := E_NOINTERFACE; - - if IsEqualGUID(IID, IDAInterbaseConnection) then begin - if not (fDriverType in [dbx_Interbase]) then Exit; - end; - - if IsEqualGUID(IID, IDAADOConnection) then begin - if not (fDriverType in [dbx_MSSQL]) then Exit; - end; - - if IsEqualGUID(IID, IDAMySQLConnection) then begin - if not (fDriverType in [dbx_MySQL]) then Exit; - end; - - if IsEqualGUID(IID, IDAUseGenerators) then begin - if not (fDriverType in [dbx_Interbase,dbx_Oracle]) then Exit; - end; - - if IsEqualGUID(IID, IDACanQueryGeneratorsNames) then begin - if not (fDriverType in [dbx_Interbase]) then Exit; - end; - - if IsEqualGUID(IID, IDAFileBasedDatabase) then begin - if not (fDriverType in [dbx_Interbase]) then Exit; - end; - - if IsEqualGUID(IID, IDACanQueryDatabaseNames) then begin - if not (fDriverType in [dbx_MSSQL, dbx_Oracle, dbx_MySQL {$IFDEF DELPHI9UP}, dbx_ASA, dbx_ASE{$ENDIF DELPHI9UP}]) then Exit; - end; - - Result := inherited QueryInterface(IID, Obj); -end; - -function TDAEDBXConnection.GetDatabaseNames: IROStrings; -begin - case fDriverType of - dbx_MSSQL: Result:=MSSQL_GetDatabaseNames(Self); - dbx_MySQL: Result:=MYSQL_GetDatabaseNames(GetDatasetClass.Create(Self)); - else - Result := NewROStrings; - end; -end; - -procedure TDAEDBXConnection.DoGetViewNames(out List: IROStrings); -begin - inherited DoGetViewNames(List); - case fDriverType of - dbx_MSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView, MSSQLSchemaEnabled); - dbx_Interbase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotView); - dbx_MySQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else - // - end; -end; - -procedure TDAEDBXConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -begin - inherited DoGetForeignKeys(ForeignKeys); - case fDriverType of - dbx_MSSQL: MSSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, MSSQLSchemaEnabled); - dbx_Interbase: IB_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys); - dbx_MySQL: MYSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else - // - end; -end; - -procedure TDAEDBXConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -begin - case fDriverType of - dbx_MSSQL: MSSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - dbx_Interbase: IB_GetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - dbx_MySQL: MYSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields,fConnection.SQLConnection.Params.Values[DATABASENAME_KEY]); - else - inherited DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), Fields); - end; -end; - -function TDAEDBXConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -begin - case fDriverType of - dbx_MSSQL: Result := MSSQL_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dbx_Interbase: Result := IB_GetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dbx_Oracle: Result := Oracle_DoGetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - dbx_MySQL: Result := MySQL_GetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); - else - Result := inherited DoGetLastAutoInc(GeneratorName); - end; -end; - -function TDAEDBXConnection.GetNextAutoinc( - const GeneratorName: string): integer; -begin - case fDriverType of - dbx_Interbase: Result := IB_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - dbx_Oracle: Result := Oracle_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - else - result := -1; - end; -end; - -function TDAEDBXConnection.IdentifierNeedsQuoting( - const iIdentifier: string): boolean; -begin - Result := inherited IdentifierNeedsQuoting(iIdentifier); - if not Result then - case fDriverType of - dbx_MSSQL: Result := MSSQL_IdentifierNeedsQuoting(iIdentifier); - dbx_Interbase: Result := IB_IdentifierNeedsQuoting(iIdentifier); - dbx_MySQL: Result := MYSQL_IdentifierNeedsQuoting(iIdentifier); - else - Result:= SQL92_IdentifierNeedsQuoting(iIdentifier); - end; -end; - -{ TDAEDBXDriver } - -function TDAEDBXDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doAuxDriver, doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAEDBXDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEDBXConnection; -end; - -function TDAEDBXDriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - case DBXDriverIdToDBXDriverType(AuxDriver) of - dbx_MSSQL: Result:=MSSQL_DriverType; - dbx_Interbase: Result:=IB_DriverType; - dbx_Oracle: Result:=Oracle_DriverType; - dbx_DB2: Result:=DB2_DriverType; - dbx_MySQL: Result:=MySQL_DriverType; - dbx_Informix: Result:=Informix_DriverType; - {$IFDEF DELPHI9UP} - dbx_ASA,dbx_ASE : Result:=ASA_DriverType; - {$ENDIF DELPHI9UP} - else - Result := inherited GetDefaultConnectionType(AuxDriver); - end; -end; - -function TDAEDBXDriver.GetDescription: string; -begin - result := 'Borland DBXExpress Driver'; -end; - -function TDAEDBXDriver.GetDriverID: string; -begin - result := 'DBX'; -end; - -procedure TDAEDBXDriver.GetAuxDrivers(out List: IROStrings); -var - i: Integer; - lDriversIni: string; - x: TDADBXDriverType; -begin - List := NewROStrings; - - lDriversIni := GetDriverRegistryFile(false); - if FileExists(lDriversIni) then begin - with TMemIniFile.Create(lDriversIni) do try - ReadSections(List.Strings); - for i := List.Count - 1 downto 0 do begin - if not ValueExists(List[i], 'LibraryName') then List.Delete(i); - end; { for } - finally - Free(); - end; - end - else begin - for x := Low(TDADBXDriverType) to High(TDADBXDriverType) do - if (x <> dbx_Unknown) {// Redundant but safe if I change the enum later...} then - List.Add(DBXDrivers[x]) - end; - List.Sorted:=True; -end; - -procedure TDAEDBXDriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - List.Add('TableScope=Synonyms'); - List.Add('DriverName='); - List.Add('GetDriverFunc='); - List.Add('LibraryName='); - case DBXDriverIdToDBXDriverType(AuxDriver) of - dbx_MSSQL: List.Add('Schemas=(0,1)'); - dbx_Interbase: List.Add('Interbase TransIsolation=(ReadCommited,RepeatableRead)'); - end; -end; - -function TDAEDBXDriver.GetProviderDefaultCustomParameters( - Provider: string): string; -begin - Result := ''; - case DBXDriverIdToDBXDriverType(Provider) of - dbx_MSSQL: Result := 'Schemas=0;'; - dbx_Interbase: Result:='Interbase TransIsolation=ReadCommited;'; - end; -end; - -{ TDAEDBXQuery } - -function TDAEDBXQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TSQLQuery.Create(nil); - - //TSQLQuery(result).rea - //TSQLQuery(result).CursorLocation := clUseClient; - //TSQLQuery(result).CursorType := ctOpenForwardOnly; - TSQLQuery(result).SQLConnection := TDAEDBXConnection(aConnection).fConnection.fSQLConnection; -end; - -function GetBlobValue(const val: Variant): string; -var - lsize: integer; - p: Pointer; -begin - if VarType(val) = 8209 then - begin - lSize := VarArrayHighBound(val, 1) - VarArrayLowBound(val, 1) + 1; - p := VarArrayLock(val); - try - setlength(REsult, lSize); - move(p^, Result[1], lSize); - finally - VarArrayUnlock(val); - end; - end else if vartype(val) = varEmpty then - result := '' - else - result := val; -end; - -function TDAEDBXQuery.DoExecute: integer; -var - i: Integer; - refParams: TParams; - dapar: TDAParam; - lDriverName: string; -begin - if Assigned(DataSet) and Assigned(TSQLQuery(DataSet).SQLConnection) and - Assigned(TSQLQuery(DataSet).Params) then begin - lDriverName := TSQLQuery(DataSet).SQLConnection.DriverName; - refParams := TSQLQuery(DataSet).Params; - case DBXDriverIdToDBXDriverType(lDriverName) of - dbx_Oracle: begin - for i := 0 to refParams.Count - 1 do begin - case VarType(refParams[i].Value) of - varInteger, - varSmallInt, - varShortInt, - varWord, - varByte, - varLongWord: - refParams[i].AsString := VarToStr(refParams[i].Value); - varSingle, - varDouble, - varCurrency: - refParams[i].AsBCD := StrToCurr(VarToStr(refParams[i].Value)); - varDate: - refParams[i].AsSQLTimeStamp := DateTimeToSQLTimeStamp(VarToDateTime(refParams[i].Value)); - end; - end; - end; - dbx_Interbase: begin - for i := 0 to refParams.Count - 1 do begin - dapar := GetParams.FindParam(refParams[i].Name); - if (dapar <> nil) then begin - if dapar.DataType = datBlob then begin - refParams[i].AsBlob := GetBlobValue(dapar.AsVariant); - continue; - end; - if dapar.DataType = datMemo then begin - refParams[i].AsMemo := dapar.AsVariant; - continue; - end; - end; - case VarType(refParams[i].Value) of - varDate: - refParams[i].AsSQLTimeStamp := DateTimeToSQLTimeStamp(VarToDateTime(refParams[i].Value)); - end; - end; - end; - else ; - end; - end; - - inherited DoExecute; - result := TSQLQuery(Dataset).RowsAffected; -end; - -function TDAEDBXQuery.DoGetSQL: string; -begin - result := TSQLQuery(Dataset).SQL.Text; -end; - -procedure TDAEDBXQuery.DoPrepare(Value: boolean); -begin - TSQLQuery(Dataset).Prepared := Value; -end; - -procedure TDAEDBXQuery.DoSetSQL(const Value: string); -begin - TSQLQuery(Dataset).SQL.Text := Value; -end; - -function TDAEDBXQuery.IsNeedCreateFieldDefs: Boolean; -begin - Result:=True; -end; - -function TDAEDBXQuery.IsNeedToFixFMTBCDIssue: Boolean; -begin - Result:=True; -end; - -{ TDAEDBXStoredProcedure } - -function TDAEDBXStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TSQLStoredProc.Create(nil); - TSQLStoredProc(result).SQLConnection := TDAEDBXConnection(aConnection).fConnection.fSQLConnection; -end; - -procedure TDAEDBXStoredProcedure.SetParamValues(Params: TDAParamCollection); -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptInput, daptInputOutput, daptUnknown]) then begin - sqPar := TSQLStoredProc(Dataset).ParamByName(Params[i].Name); - if (Params[i].DataType <> datBlob) then - sqPar.Value := params[i].Value - else begin - sqPar.AsBlob := VariantBinaryToString(params[i].Value); - end; - end; -end; - -procedure TDAEDBXStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) then begin - sqPar := TSQLStoredProc(Dataset).ParamByName(Params[i].Name); - params[i].Value := sqPar.Value - end; -end; - -function TDAEDBXStoredProcedure.Execute: integer; -begin - SetParamValues(GetParams); - TSQLStoredProc(Dataset).ExecProc; - result := -1; - GetParamValues(GetParams); -end; - -function TDAEDBXStoredProcedure.GetStoredProcedureName: string; -begin - result := TSQLStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEDBXStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TSQLStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEDBXStoredProcedure.RefreshParams; -var - dsparams: TParams; - i: integer; - par: TDAParam; - params: TDAParamCollection; - nme: string; -begin - // Must override completely because the parameters' size is not reflected correctly via IProviderSupport!! - - dsparams := TSQLStoredProc(Dataset).Params; - TSQLStoredProc(Dataset).Prepared := True; - - params := GetParams; - params.Clear; - - for i := 0 to (dsparams.Count - 1) do begin - par := params.Add; - - nme := dsparams[i].Name; - System.Delete(nme, Pos('@', nme), 1); - par.Name := nme; - - par.DataType := VCLTypeToDAType(dsparams[i].DataType); - par.ParamType := TDAParamType(dsparams[i].ParamType); - par.Size := dsparams[i].Size; - end; -end; - - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAFIBDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAFIBDriver.pas deleted file mode 100644 index 23b9aaa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAFIBDriver.pas +++ /dev/null @@ -1,684 +0,0 @@ -unit uDAFIBDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -{$R DataAbstract_FIBDriver_Glyphs.res} - -interface - -uses - Classes, DB, uDAEngine, uDAInterfaces, uDAIBInterfaces, FIBDatabase, - uROClasses, pFIBDatabase, FIBQuery, pFIBQuery, pFIBStoredProc, uDAUtils, - FIBDataSet, ibase, FIBSQLMonitor; - -type - { TDAFIBDriver } - TDAFIBDriver = class(TDADriverReference) - end; - - { TFIBConnection } - TFIBConnection = class(TDAConnectionWrapper) - private - fDatabase: TpFIBDatabase; - fTransaction: TFIBTransaction; - - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: boolean); override; - - public - constructor Create(AOwner: TComponent); override; - - property Database: TpFIBDatabase read fDatabase; - property Transaction: TFIBTransaction read fTransaction; - end; - - { TDAEFIBDriver } - TDAEFIBDriver = class(TDAIBDriver) - private - fFIBTraceOptions: TFIBTraceFlags; - fTraceCallback: TDALogTraceEvent; - fMonitor: TFIBSQLMonitor; - procedure OnTrace(EventText: string; EventTime: TDateTime); - protected - function GetConnectionClass: TDAEConnectionClass; override; - procedure CustomizeConnectionObject(aConnection: TDAEConnection); override; - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - public - end; - - { TDAEFIBConnection } - TDAEFIBConnection = class(TDAIBConnection, IDAInterbaseConnection, IDAIBTransactionAccess, IDAIBConnectionProperties, IDAUseGenerators, IDAFileBasedDatabase) - private - fConnection: TFIBConnection; - protected - - // IIBTransactionAccess - function GetTransaction: TObject; safecall; - - procedure Commit; safecall; - procedure CommitRetaining; safecall; - procedure Rollback; safecall; - procedure RollbackRetaining; safecall; - - // IIBConnectionProperties - function GetRole: string; safecall; - procedure SetRole(const Value: string); safecall; - function GetSQLDialect: integer; override; safecall; - procedure SetSQLDialect(Value: integer); safecall; - function GetCharset: string; safecall; - procedure SetCharset(const Value: string); safecall; - - // IDAConnection - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - public - end; - - { TDAEFIBQuery } - TDAEFIBQuery = class(TDAEDataset, IDAMustSetParams) - private - protected - function DoGetRecordCount: integer; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - procedure RefreshParams; override; - procedure DoSetActive(Value: Boolean); override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - public - end; - - { TDAEFIBStoredProcedure } - TDAEFIBStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - private - FSP: TpFIBStoredProc; - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - procedure RefreshParams; override; - - function Execute: integer; override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses SysUtils, uDADriverManager, uDARes, - pFIBProps; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAFIBDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEFIBDriver.Create(nil); - result := _driver; -end; - - -{ TFIBConnection } - -constructor TFIBConnection.Create(AOwner: TComponent); -begin - inherited; - - fDatabase := TpFIBDatabase.Create(Self); - fTransaction := TFIBTransaction.Create(Self); - - fDatabase.UseLoginPrompt := FALSE; - fDatabase.DefaultTransaction := fTransaction; -end; - -function TFIBConnection.GetConnected: Boolean; -begin - result := fDatabase.Connected -end; - -procedure TFIBConnection.SetConnected(Value: boolean); -begin - // This first check is required. - // I think there's a bug in the FIB destroying sequence and the notification. TCustomConnection gets to this point *after* - // the owned components are destroyed. Only happens with FIB... - - if (csDestroying in ComponentState) then Exit; - fDatabase.Connected := Value -end; - -{ TDAEFIBConnection } - -procedure TDAEFIBConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - - fConnection.Database.SQLDialect := 3; - with aConnStrParser do begin - if (Self.UserID <> '') then - fConnection.Database.ConnectParams.UserName := Self.UserID - else - fConnection.Database.ConnectParams.UserName := UserID; - - if (Self.Password <> '') then - fConnection.Database.ConnectParams.Password := Self.Password - else - fConnection.Database.ConnectParams.Password := Password; - - if Server <> '' then - fConnection.Database.DatabaseName := Server + ':' + Database - else - fConnection.Database.DatabaseName := Database; - - if AuxParams['Dialect'] <> '' then - fConnection.Database.SQLDialect := StrtoInt(AuxParams['Dialect']) - else if AuxParams['SQLDialect'] <> '' then - fConnection.Database.SQLDialect := StrtoInt(AuxParams['SQLDialect']); - - if AuxParams['Role'] <> '' then - fConnection.Database.ConnectParams.RoleName := AuxParams['Role']; - - if AuxParams['Charset'] <> '' then - SetCharset(AuxParams['Charset']); - - end; -end; - -function TDAEFIBConnection.DoBeginTransaction: integer; -begin - result := -1; - fConnection.Database.DefaultTransaction.StartTransaction; -end; - -procedure TDAEFIBConnection.DoCommitTransaction; -begin - fConnection.Database.DefaultTransaction.Commit; -end; - -function TDAEFIBConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TFIBConnection.Create(nil); - result := fConnection; -end; - -function TDAEFIBConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEFIBQuery -end; - -function TDAEFIBConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEFIBStoredProcedure -end; - -function TDAEFIBConnection.GetTransaction: TObject; -begin - result := fConnection.fTransaction; -end; - -procedure TDAEFIBConnection.DoRollbackTransaction; -begin - fConnection.Database.DefaultTransaction.Rollback; -end; - -function TDAEFIBConnection.GetRole: string; -begin - result := fConnection.Database.ConnectParams.RoleName; -end; - -function TDAEFIBConnection.GetSQLDialect: integer; -begin - result := fConnection.Database.SQLDialect -end; - -function TDAEFIBConnection.GetCharset: string; -begin - result := fConnection.Database.ConnectParams.CharSet -end; - -procedure TDAEFIBConnection.SetRole(const Value: string); -begin - fConnection.Database.ConnectParams.RoleName := Value -end; - -procedure TDAEFIBConnection.SetSQLDialect(Value: integer); -begin - fConnection.Database.SQLDialect := Value -end; - -procedure TDAEFIBConnection.SetCharset(const Value: string); -begin - fConnection.Database.ConnectParams.CharSet := Value; -end; - -procedure TDAEFIBConnection.Commit; -begin - fConnection.fTransaction.Commit -end; - -procedure TDAEFIBConnection.CommitRetaining; -begin - fConnection.fTransaction.CommitRetaining -end; - -procedure TDAEFIBConnection.Rollback; -begin - fConnection.fTransaction.Rollback -end; - -procedure TDAEFIBConnection.RollbackRetaining; -begin - fConnection.fTransaction.RollbackRetaining -end; - -function TDAEFIBConnection.DoGetInTransaction: boolean; -begin - result := fConnection.fTransaction.InTransaction -end; - -{ TDAEFIBDriver } - -procedure TDAEFIBDriver.CustomizeConnectionObject(aConnection: TDAEConnection); -begin - // 25/04/06 13:05 Donald Shimoda . To do. - //TDAEFIBConnection(aConnection).fConnection.Database.TraceFlags := fIBTraceOptions; -end; - -procedure TDAEFIBDriver.DoSetTraceOptions(TraceActive: boolean; - TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TFIBSQLMonitor.Create(Self); - - fMonitor.Active := False; - fMonitor.OnSQL := OnTrace; - - fFIBTraceOptions := []; - if (toPrepare in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfQPrepare]; - if (toExecute in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfQExecute]; - if (toFetch in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfQFetch]; - if (toConnect in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfConnect]; - if (toTransact in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfTransact]; - if (toService in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfService]; - if (toMisc in TraceOptions) then fFIBTraceOptions := fFIBTraceOptions + [tfMisc]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := fFIBTraceOptions; - fMonitor.Active := True; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - - -function TDAEFIBDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEFIBConnection; -end; - -function TDAEFIBDriver.GetDescription: string; -begin - result := 'FIBPlus Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEFIBDriver.GetDriverID: string; -begin - result := 'FIB'; -end; - -procedure CreateParams(FQuery: TFIBQuery; Pars: TDAParamCollection; CreateOutputParams: Boolean = False); -var - i: Integer; - par: TDAParam; - sqPar: TFIBXSQLVAR; -begin - if FQuery.Database.Handle = nil then - FQuery.Database.Open; - - if not FQuery.Prepared then - FQuery.Prepare; - pars.Clear; - for i := 0 to FQuery.ParamCount -1 do begin - sqpar := FQuery.Params[i]; - if sqpar.IsParam then begin - par := pars.Add; - par.Name := sqPar.Name; - par.ParamType:= daptInput; - case sqpar.SQLType and not 1 of - SQL_VARYING, SQL_TEXT: - begin - if sqPar.CharacterSet = 'UNICODE_FSS' then - par.DataType := datWideString - else - par.DataType := datString; - par.Size := sqPar.Size; - end; - SQL_DOUBLE, SQL_FLOAT,SQL_D_FLOAT:par.DataType := datFloat; - SQL_SHORT, SQL_LONG: begin - if sqPar.Scale <> 0 then - par.DataType := datFloat - else - par.DataType := datInteger; - end; - SQL_INT64: begin - if sqPar.Scale <> 0 then - par.DataType := datFloat - else - par.DataType := datLargeInt; - end; - SQL_TIMESTAMP, - SQL_TYPE_TIME, - SQL_TYPE_DATE: par.DataType := datDateTime; - SQL_BLOB: - if sqPar.SQLSubtype = 1 then - par.DataType := datMemo - else - par.DataType := datBlob; - SQL_BOOLEAN: par.DataType := datBoolean; - else - par.DataType := datUnknown; - end; - end; - end; - - if CreateOutputParams then - for i := 0 to FQuery.FieldCount -1 do begin - sqpar := FQuery.Fields[i]; - par := pars.Add; - par.Name := sqPar.Name; - par.ParamType:= daptOutput; - case sqpar.SQLType and not 1 of - SQL_VARYING, SQL_TEXT: - begin - if sqPar.CharacterSet = 'UNICODE_FSS' then - par.DataType := datWideString - else - par.DataType := datString; - par.Size := sqPar.Size; - end; - SQL_DOUBLE, SQL_FLOAT,SQL_D_FLOAT:par.DataType := datFloat; - SQL_SHORT, SQL_LONG: begin - if sqPar.Scale <> 0 then - par.DataType := datFloat - else - par.DataType := datInteger; - end; - SQL_INT64: begin - if sqPar.Scale <> 0 then - par.DataType := datFloat - else - par.DataType := datLargeInt; - end; - SQL_TIMESTAMP, - SQL_TYPE_TIME, - SQL_TYPE_DATE: par.DataType := datDateTime; - SQL_BLOB: - if sqPar.SQLSubtype = 1 then - par.DataType := datMemo - else - par.DataType := datBlob; - SQL_BOOLEAN: par.DataType := datBoolean; - else - par.DataType := datUnknown; - end; - end; -end; - - -{ TDAEFIBQuery } - - -procedure TDAEFIBDriver.OnTrace(EventText: string; EventTime: TDateTime); -begin - if Assigned(fTraceCallback) then fTraceCallback(fMonitor, EventText, 0); -end; - -{ TDAEFIBStoredProcedure } - -function TDAEFIBStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - FreeAndNil(FSP); - FSP := TpFIBStoredProc.Create(nil); - FSP.Database := TDAEFIBConnection(aConnection).fConnection.Database; - result := nil; -end; - -function TDAEFIBStoredProcedure.Execute: integer; -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - if FSP.Database.Handle = nil then - FSP.Database.Open; - - SetParamValues(GetParams); - FSP.ExecQuery; - result := FSP.RowsAffected; - GetParamValues(GetParams); -end; - -procedure TDAEFIBStoredProcedure.SetParamValues(Params: TDAParamCollection); -var - i: integer; - _params: TDAParamCollection; - sqPar: TFIBXSQLVAR; -begin - _params := Params; - - for i := 0 to _params.Count - 1 do begin - if (_Params[i].ParamType in [daptInput, daptInputOutput, daptUnknown]) then begin - sqPar:= FSP.ParamByName(_Params[i].Name); - if (sqPar <> nil) and sqPar.IsParam then sqPar.Value:=_params[i].Value; - end; - end; -end; - -procedure TDAEFIBStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: integer; - _params: TDAParamCollection; - sqPar: TFIBXSQLVAR; -begin - _params := Params; - - for i := 0 to _params.Count - 1 do begin - if (Params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) then begin - sqPar:= FSP.FieldByName(_Params[i].Name); - if (sqPar <> nil) then _params[i].Value:=sqPar.Value; - end; - end; -end; - - -function TDAEFIBStoredProcedure.GetStoredProcedureName: string; -begin - result := FSP.StoredProcName; -end; - -procedure TDAEFIBStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - FSP.StoredProcName := Name; -end; - -procedure TDAEFIBStoredProcedure.RefreshParams; -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - CreateParams(FSP, GetParams,True); -end; - -exports - GetDriverObject name func_GetDriverObject; - -{ TDAEFIBQuery } - -function TDAEFIBQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -var - ds: TFIBDataSet; -begin - ds := TFIBDataSet.Create(nil); - ds.Database := TDAEFIBConnection(aConnection).fConnection.Database; - ds.Transaction := TDAEFIBConnection(aConnection).fConnection.Transaction; - ds.PrepareOptions := ds.PrepareOptions + [psUseLargeIntField]; - result := ds; -end; - -function TDAEFIBQuery.DoExecute: integer; -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - TFIBDataSet(Dataset).QSelect.ExecQuery; - result := TFIBDataSet(Dataset).QSelect.RowsAffected; -end; - -function TDAEFIBQuery.DoGetRecordCount: integer; -begin - result := TFIBDataSet(DAtaset).QSelect.RecordCount; -end; - -function TDAEFIBQuery.DoGetSQL: string; -begin - result := TFIBDataSet(DAtaset).QSelect.SQL.Text; -end; - -procedure TDAEFIBQuery.DoPrepare(Value: boolean); -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - - if Value then TFIBDataSet(DAtaset).QSelect.Prepare; -end; - -procedure TDAEFIBQuery.DoSetActive(Value: Boolean); -begin - if not TDAEFIBConnection(Connection).fConnection.Connected then TDAEFIBConnection(Connection).fConnection.Open; - if not TDAEFIBConnection(Connection).fConnection.Transaction.InTransaction then - TDAEFIBConnection(Connection).fConnection.Transaction.StartTransaction; - if Value then begin - if not TFIBDataSet(Dataset).Database.Connected then - TFIBDataSet(Dataset).Database.Connected := true; - end; - inherited DoSetActive(Value); -end; - -procedure TDAEFIBQuery.DoSetSQL(const Value: string); -begin - TFIBDataSet(DAtaset).QSelect.SQL.Text := Value; -end; - - - -procedure TDAEFIBQuery.RefreshParams; -begin - CreateParams(TFIBDataSet(Dataset).QSelect, GetParams); -end; - - -procedure TDAEFIBQuery.SetParamValues(Params: TDAParamCollection); -var - i: integer; - _params: TDAParamCollection; - _par: TDAParam; -begin - _params := GetParams; - - for i := 0 to TFIBDataSet(Dataset).ParamCount - 1 do begin - _Par := _params.ParamByName(TFIBDataSet(Dataset).Params[i].Name); - if (_Par.ParamType in [daptInput, daptInputOutput, daptUnknown]) then - if (TFIBDataSet(Dataset).Params[i].IsParam) then TFIBDataSet(Dataset).Params[i].Value := _Par.Value; - end; -end; - -procedure TDAEFIBQuery.GetParamValues(Params: TDAParamCollection); -var - i: integer; - _params: TDAParamCollection; - _Par: TDAParam; -begin - _params := GetParams; - for i := 0 to TFIBDataSet(Dataset).ParamCount - 1 do begin - _Par := _params.ParamByName(TFIBDataSet(Dataset).Params[i].Name); - if (_Par.ParamType in [daptOutput, daptInputOutput, daptResult]) then - _Par.Value := TFIBDataSet(Dataset).Params[i].Value; - end; -end; - - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBDACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBDACDriver.pas deleted file mode 100644 index 4c851c3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBDACDriver.pas +++ /dev/null @@ -1,543 +0,0 @@ -unit uDAIBDACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_IBDACDriver_Glyphs.res} - -interface - -uses - DB, Classes, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, - DBAccess, IBC, DASQLMonitor, - IBCSQLMonitor, Variants, uDAUtils, uDAIBInterfaces; - -type { TDAIBDACDriver } - TDAIBDACDriver = class(TDADriverReference) - end; - - { TDAEIBDACDriver } - TDAEIBDACDriver = class(TDAIBDriver) - private - fMonitor: TIBCSQLMonitor; - fTraceCallBack: TDALogTraceEvent; - procedure OnIBDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); - protected - function GetConnectionClass: TDAEConnectionClass; override; - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - procedure CustomizeConnectionObject(aConnection: TDAEConnection); override; - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - end; - - { TDAEIBDACConnection } - TDAEIBDACConnection = class(TDAIBConnection, IDAInterbaseConnection, IDAIBTransactionAccess, IDAIBConnectionProperties, IDAUseGenerators, IDAFileBasedDatabase) - private - fConnection: TIBCConnection; - protected - // IIBTransactionAccess - function GetTransaction: TObject; safecall; - - procedure Commit; safecall; - procedure CommitRetaining; safecall; - procedure Rollback; safecall; - procedure RollbackRetaining; safecall; - - // IIBConnectionProperties - function GetRole: string; safecall; - procedure SetRole(const Value: string); safecall; - function GetSQLDialect: integer;override; safecall; - procedure SetSQLDialect(Value: integer); safecall; - function GetCharset: string; safecall; - procedure SetCharset(const Value: string); safecall; - - - // IDAConnection - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - end; - - { TDAEIBDACQuery } - TDAEIBDACQuery = class(TDAEDataset, IDAMustSetParams) - private - - protected - function DoGetRecordCount: integer; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - - public - end; - - { TDAEIBDACStoredProcedure } - TDAEIBDACStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - procedure RefreshParams; override; - - // IDAMustSetParams - procedure GetParamValues(Params: TDAParamCollection); safecall; - procedure SetParamValues(Params: TDAParamCollection); safecall; - - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, - uDADriverManager, uDARes, - uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAIBDACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin -{$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; -{$ENDIF} - if (_driver = nil) then _driver := TDAEIBDACDriver.Create(nil); - result := _driver; -end; - -{$I uDACRLabsUtils.inc} - -{ TDAEIBDACConnection } - -procedure TDAEIBDACConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - SetSQLDialect(3); - with aConnStrParser do begin - if (Self.UserID <> '') then - fConnection.Username := Self.UserID - else - fConnection.Username := UserID; - - if (Self.Password <> '') then - fConnection.Password := Self.Password - else - fConnection.Password := Password; - - if Server <> '' then - fConnection.Database := Server + ':' + Database - else - fConnection.Database := Database; - - if AuxParams['Dialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['Dialect'])) - else if AuxParams['SQLDialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['SQLDialect'])); - - if AuxParams['Role'] <> '' then SetRole(AuxParams['Role']); - - if AuxParams['Charset'] <> '' then SetCharset(AuxParams['Charset']); - end; -end; - -function TDAEIBDACConnection.DoBeginTransaction: integer; -begin - result := -1; - fConnection.StartTransaction; -end; - -procedure TDAEIBDACConnection.DoCommitTransaction; -begin - fConnection.Commit; -end; - -function TDAEIBDACConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TIBCConnection.Create(nil); - fConnection.LoginPrompt := FALSE; - - result := fConnection; -end; - -function TDAEIBDACConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEIBDACQuery; -end; - -function TDAEIBDACConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEIBDACStoredProcedure; -end; - -(*function SqlServerToDAType(aType:integer):TDADataType; -begin - case aType of - 34:result := datBlob; - 35:result := datMemo; - 36:result := datString; //uniqueidentifier - 48:result := datInteger; - 52:result := datInteger; - 56:result := datInteger; - 58:result := datDateTime; - 59:result := datFloat; - 60:result := datCurrency; - 61:result := datDateTime; - 62:result := datFloat; - //98 sql_variant - 99:result := datMemo;// ntext - 104:result := datBoolean; - 106:result := datFloat; - 108:result := datFloat; - 122:result := datCurrency; - 127:result := datInteger; - 165:result := datBlob; // varbinary - 167:result := datString; - 173:result := datBlob; // binary - 175:result := datString; // char - 189:result := datBlob; // timestamp - 231:result := datString; // nvarchar - 239:result := datString; //nchar - 240:result := datDateTime; - 241:result := datBlob;// xml - else result := datUnknown; - end; -end; - -procedure TDAEIBDACConnection.DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); -var - ds : TIBCQuery; - lID:string; -begin - ds := TIBCQuery.Create(NIL); - try - - ds.Connection := fConnection; - ds.SQL.Text := 'select * from sysobjects where xtype=''P'' and name='''+aStoredProcedureName+''''; - ds.Open; - try - if ds.EOF then RaiseError('Stored Procedure %s not found in database',[aStoredProcedureName]); - lID := ds.FieldbyName('id').AsString; - finally - ds.Close(); - end; - - ds.SQL.Text := 'select * from sys.parameters where object_id='''+lID+''' ORDER BY parameter_id'; - ds.Open; - try - Params := TDAParamCollection.Create(nil); - while not ds.Eof do begin - with Params.Add() do begin - Name := ds.FieldByName('name').AsString; - - DataType := SqlServerToDAType(ds.FieldByName('system_type_id').AsInteger); - Size := ds.FieldByName('max_length').AsInteger; - - {if ds.FieldByName('has_default_value').AsBoolean then - DefaultValue := ds.FieldByName('default_Value').AsInteger;} - - if ds.FieldByName('is_output').AsBoolean then - ParamType := daptOutput - else - ParamType := daptInput; - - end; - ds.Next(); - end; - finally - Close(); - end; - - finally - ds.Free; - end; -end;*) - -procedure TDAEIBDACConnection.DoRollbackTransaction; -begin - fConnection.Rollback; -end; - -function TDAEIBDACConnection.DoGetInTransaction: boolean; -begin - result := fConnection.InTransaction -end; - -procedure TDAEIBDACConnection.Commit; -begin - fConnection.Commit; -end; - -procedure TDAEIBDACConnection.CommitRetaining; -begin - fConnection.CommitRetaining; -end; - -function TDAEIBDACConnection.GetCharset: string; -begin - result := fConnection.Options.Charset; -end; - -function TDAEIBDACConnection.GetRole: string; -begin - Result := fConnection.Options.Role; -end; - -function TDAEIBDACConnection.GetSQLDialect: integer; -begin - Result := fConnection.SQLDialect; -end; - -function TDAEIBDACConnection.GetTransaction: TObject; -begin - Result := fConnection.DefaultTransaction; -end; - -procedure TDAEIBDACConnection.Rollback; -begin - fConnection.Rollback; -end; - -procedure TDAEIBDACConnection.RollbackRetaining; -begin - fConnection.RollbackRetaining; -end; - -procedure TDAEIBDACConnection.SetCharset(const Value: string); -begin - fConnection.Options.Charset := Value; -end; - -procedure TDAEIBDACConnection.SetRole(const Value: string); -begin - fConnection.Options.Role := Value; -end; - -procedure TDAEIBDACConnection.SetSQLDialect(Value: integer); -begin - fConnection.SQLDialect := Value; -end; - -{ TDAEIBDACDriver } - -function TDAEIBDACDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEIBDACConnection; -end; - -function TDAEIBDACDriver.GetDescription: string; -begin - result := 'Core Lab IBDAC Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEIBDACDriver.GetDriverID: string; -begin - result := 'IBDAC'; -end; - -procedure TDAEIBDACDriver.OnIBDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); -begin - inherited; - // if Assigned(fTraceCallback) then fTraceCallback(Sender, Text, integer(Flag)); -end; - -procedure TDAEIBDACDriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -var - IBDACopts: TDATraceFlags; -begin - inherited; - exit; - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TIBCSQLMonitor.Create(Self); - - fMonitor.Active := FALSE; - fMonitor.OnSQL := OnIBDACTrace; - - IBDACopts := []; - if (toPrepare in TraceOptions) then IBDACopts := IBDACopts + [tfQPrepare]; - if (toExecute in TraceOptions) then IBDACopts := IBDACopts + [tfQExecute]; - if (toFetch in TraceOptions) then IBDACopts := IBDACopts + [tfQFetch]; - if (toError in TraceOptions) then IBDACopts := IBDACopts + [tfError]; - if (toStmt in TraceOptions) then IBDACopts := IBDACopts + [tfStmt]; - if (toConnect in TraceOptions) then IBDACopts := IBDACopts + [tfConnect]; - if (toTransact in TraceOptions) then IBDACopts := IBDACopts + [tfTransact]; - if (toBlob in TraceOptions) then IBDACopts := IBDACopts + [tfBlob]; - if (toService in TraceOptions) then IBDACopts := IBDACopts + [tfService]; - if (toMisc in TraceOptions) then IBDACopts := IBDACopts + [tfMisc]; - if (toParams in TraceOptions) then IBDACopts := IBDACopts + [tfParams]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := IBDACopts; - fMonitor.Active := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - -procedure TDAEIBDACDriver.CustomizeConnectionObject( - aConnection: TDAEConnection); -begin - // -end; - -{ TDAEIBDACQuery } - -function TDAEIBDACQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TIBCQuery.Create(nil); - TIBCQuery(result).FetchAll := True; //for preventing creating an additional session when you call StartTransaction (an known issue of OLEDB) - TIBCQuery(result).Unidirectional := True; - TIBCQuery(result).ReadOnly := TRUE; - TIBCQuery(result).Connection := TDAEIBDACConnection(aConnection).fConnection; -end; - -function TDAEIBDACQuery.DoExecute: integer; -begin - inherited DoExecute; - result := TIBCQuery(Dataset).RowsAffected; -end; - -function TDAEIBDACQuery.DoGetRecordCount: integer; -begin - Result := TIBCQuery(Dataset).RecordCount; -end; - -function TDAEIBDACQuery.DoGetSQL: string; -begin - result := TIBCQuery(Dataset).SQL.Text; -end; - -procedure TDAEIBDACQuery.DoPrepare(Value: boolean); -begin - TIBCQuery(Dataset).Prepared := Value; -end; - -procedure TDAEIBDACQuery.DoSetSQL(const Value: string); -begin - TIBCQuery(Dataset).SQL.Text := Value; -end; - -procedure TDAEIBDACQuery.GetParamValues(Params: TDAParamCollection); -var - I: Integer; -begin - for i := 0 to TIBCQuery(DataSet).Params.Count - 1 do - if (TIBCQuery(DataSet).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then params[i].Value := TIBCQuery(DataSet).Params[i].Value; -end; - -procedure TDAEIBDACQuery.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TIBCQuery(Dataset).Params, true); -end; - -{ TDAEIBDACStoredProcedure } - -function TDAEIBDACStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TIBCStoredProc.Create(nil); - TIBCStoredProc(result).Connection := TDAEIBDACConnection(aConnection).fConnection; -end; - -function TDAEIBDACStoredProcedure.Execute: integer; -begin - TIBCStoredProc(Dataset).Prepare; - SetParamValues(GetParams); - TIBCStoredProc(Dataset).ExecProc; - result := TIBCStoredProc(Dataset).RowsAffected; - GetParamValues(GetParams); -end; - - -procedure TDAEIBDACStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: Integer; -begin - for i := 0 to TIBCStoredProc(DataSet).Params.Count - 1 do - if (TIBCStoredProc(DataSet).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then - params[i].Value := TIBCStoredProc(DataSet).Params[i].Value; -end; - -function TDAEIBDACStoredProcedure.GetStoredProcedureName: string; -begin - result := TIBCStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEIBDACStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TIBCStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEIBDACStoredProcedure.RefreshParams; -begin - TIBCStoredProc(Dataset).Prepare; - inherited; -end; - -procedure TDAEIBDACStoredProcedure.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TIBCStoredProc(Dataset).Params); -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBODriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBODriver.pas deleted file mode 100644 index 8f5f675..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBODriver.pas +++ /dev/null @@ -1,518 +0,0 @@ -unit uDAIBODriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_IBODriver_Glyphs.res} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, uDAIBInterfaces, uROClasses, - IBODataset, IB_Components, IB_Monitor, uDAUtils; - -type - { TDAIBODriver } - TDAIBODriver = class(TDADriverReference) - end; - - { TIBOConnection } - TIBOConnection = class(TDAConnectionWrapper) - private - fDatabase: TIBODatabase; - - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: boolean); override; - - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property Database: TIBODatabase read fDatabase; - end; - - { TDAEIBODriver } - TDAEIBODriver = class(TDAIBDriver) - private - fTraceCallback: TDALogTraceEvent; - fMonitor: TIB_Monitor; - procedure OnIBOTrace(Sender: TObject; const NewString: string); - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; - Callback: TDALogTraceEvent); override; - - public - end; - - { TDAEIBOConnection } - TDAEIBOConnection = class(TDAIBConnection, IDAInterbaseConnection, IDAIBTransactionAccess, IDAIBConnectionProperties, IDAUseGenerators, - IDAFileBasedDatabase) - private - fConnection: TIBOConnection; - fSQLDialect: integer; // See TDAEIBOConnection.GetSQLDialect for more details - - protected - - // IIBTransactionAccess - function GetTransaction: TObject; safecall; - - procedure Commit; safecall; - procedure CommitRetaining; safecall; - procedure Rollback; safecall; - procedure RollbackRetaining; safecall; - - // IIBConnectionProperties - function GetRole: string; safecall; - procedure SetRole(const Value: string); safecall; - function GetSQLDialect: integer; override;safecall; - procedure SetSQLDialect(Value: integer); safecall; - function GetCharset: string; safecall; - procedure SetCharset(const Value: string); safecall; - - // IDAConnection - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - public - end; - - { TDAEIBOQuery } - TDAEIBOQuery = class(TDAEDataset) - private - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - public - end; - - { TDAEIBOStoredProcedure } - TDAEIBOStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure RefreshParams; override; - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - - function Execute: integer; override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses SysUtils, uDADriverManager, uDARes, uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAIBODriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEIBODriver.Create(nil); - result := _driver; -end; - - - -{ TIBOConnection } - -constructor TIBOConnection.Create(AOwner: TComponent); -begin - inherited; - - fDatabase := TIBODatabase.Create(Self); - fDatabase.LoginPrompt := FALSE; -end; - -destructor TIBOConnection.Destroy; -begin - FreeAndNil(fDatabase); - inherited; -end; - -function TIBOConnection.GetConnected: Boolean; -begin - result := fDatabase.Connected -end; - -procedure TIBOConnection.SetConnected(Value: boolean); -begin - if fDatabase <> nil then fDatabase.Connected := Value; -end; - -{ TDAEIBOConnection } - -procedure TDAEIBOConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - - with aConnStrParser do begin - if (Self.UserID <> '') then - fConnection.Database.Username := Self.UserID - else - fConnection.Database.Username := UserID; - - if (Self.Password <> '') then - fConnection.Database.Password := Self.Password - else - fConnection.Database.Password := Password; - - if (Server <> '') then - fConnection.Database.DatabaseName := Server + ':' + Database - else - fConnection.Database.DatabaseName := Database; - - if AuxParams['Dialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['Dialect'])) - else if AuxParams['SQLDialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['SQLDialect'])); - - if AuxParams['Role'] <> '' then - SetRole(AuxParams['Role']); - - if AuxParams['Charset'] <> '' then - fConnection.Database.CharSet := AuxParams['Charset']; - - end; -end; - -function TDAEIBOConnection.DoBeginTransaction: integer; -begin - fConnection.Database.DefaultTransaction.StartTransaction; - result := -1; -end; - -procedure TDAEIBOConnection.DoCommitTransaction; -begin - fConnection.Database.DefaultTransaction.Commit; -end; - -function TDAEIBOConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TIBOConnection.Create(nil); - fSQLDialect := fConnection.Database.SQLDialect; - result := fConnection; -end; - -function TDAEIBOConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEIBOQuery -end; - -function TDAEIBOConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEIBOStoredProcedure -end; - -function TDAEIBOConnection.GetTransaction: TObject; -begin - result := fConnection.Database.DefaultTransaction; -end; - -procedure TDAEIBOConnection.DoRollbackTransaction; -begin - fConnection.Database.DefaultTransaction.Rollback; -end; - -function TDAEIBOConnection.GetRole: string; -begin - result := fConnection.Database.SQLRole -end; - -function TDAEIBOConnection.GetSQLDialect: integer; -begin - // AleF: I modified this because somehow IBO returned 3 even after setting this value to 2 or else. - // Somewhere in the IBO code this calue gets reset. This is a work around that basically makes QuoteIdentifier work correctly - - result := fSQLDialect; // fConnection.Database.SQLDialect; -end; - -procedure TDAEIBOConnection.SetSQLDialect(Value: integer); -begin - fSQLDialect := Value; - fConnection.Database.SQLDialect := Value; -end; - -procedure TDAEIBOConnection.SetRole(const Value: string); -begin - fConnection.Database.SQLRole := Value -end; - -procedure TDAEIBOConnection.Commit; -begin - fConnection.Database.Commit -end; - -procedure TDAEIBOConnection.CommitRetaining; -begin - fConnection.Database.CommitRetaining -end; - -procedure TDAEIBOConnection.Rollback; -begin - fConnection.Database.Rollback -end; - -procedure TDAEIBOConnection.RollbackRetaining; -begin - fConnection.Database.RollbackRetaining -end; - -function TDAEIBOConnection.DoGetInTransaction: boolean; -begin - result := fConnection.Database.InTransaction -end; - -function TDAEIBOConnection.GetCharset: string; -begin - result := fConnection.Database.CharSet; -end; - -procedure TDAEIBOConnection.SetCharset(const Value: string); -begin - fConnection.Database.CharSet := Value; -end; - -{ TDAEIBODriver } - -function TDAEIBODriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEIBOConnection -end; - -function TDAEIBODriver.GetDescription: string; -begin - result := 'Interbase Objects (IBO) Driver'; -end; - -function TDAEIBODriver.GetDriverID: string; -begin - result := 'IBO'; -end; - -procedure TDAEIBODriver.OnIBOTrace(Sender: TObject; const NewString: string); -begin - if Assigned(fTraceCallback) then fTraceCallback(fMonitor, NewString, 0); -end; - -procedure TDAEIBODriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: - TDATraceOptions; Callback: TDALogTraceEvent); -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TIB_Monitor.Create(Self); - - fMonitor.Enabled := FALSE; - fMonitor.OnMonitorOutputItem := OnIBOTrace; - fMonitor.IncludeTimeStamp := True; - fMonitor.ItemStart := ''; - fMonitor.ItemEnd := ''; - fMonitor.NewLineText := ','; - - FMonitor.MonitorGroups := []; - FMonitor.StatementGroups := []; - - if (toPrepare in TraceOptions) then begin - FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgStatement]; - FMonitor.StatementGroups := FMonitor.StatementGroups + [sgPrepare, sgAllocate, sgStatementInfo, sgDescribe]; - end; - - if (toExecute in TraceOptions) then begin - FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgStatement]; - FMonitor.StatementGroups := FMonitor.StatementGroups + [sgExecute]; - end; - - if (toFetch in TraceOptions) then begin - FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgStatement, mgRow]; - FMonitor.StatementGroups := FMonitor.StatementGroups + [sgDescribe, sgStatementInfo]; - end; - - if (toStmt in TraceOptions) then begin - FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgStatement]; - FMonitor.StatementGroups := FMonitor.StatementGroups + [sgDescribe, sgStatementInfo]; - end; - - if (toConnect in TraceOptions) then FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgConnection]; - if (toTransact in TraceOptions) then FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgtransaction]; - - if (toBlob in TraceOptions) then FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgBlob]; - - if (toMisc in TraceOptions) then begin - FMonitor.MonitorGroups := FMonitor.MonitorGroups + [mgBlob, mgArray, mgClientTrace]; - FMonitor.StatementGroups := FMonitor.StatementGroups + [sgStatementInfo, sgServerCursor, sgServerCursor]; - end; - - fTraceCallBack := Callback; - - fMonitor.Enabled := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - -{ TDAEIBOQuery } - -function TDAEIBOQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TIBOQuery.Create(nil); - TIBOQuery(result).IB_Connection := TDAEIBOConnection(aConnection).fConnection.Database; - TIBOQuery(result).AutoFetchAll := TRUE; - TIBOQuery(result).RecordCountAccurate := TRUE; -end; - -function TDAEIBOQuery.DoExecute: integer; -begin - inherited DoExecute; - result := TIBOQuery(Dataset).RowsAffected; -end; - -function TDAEIBOQuery.DoGetSQL: string; -begin - result := TIBOQuery(Dataset).SQL.Text -end; - -procedure TDAEIBOQuery.DoPrepare(Value: boolean); -begin - TIBOQuery(Dataset).Prepared := Value; -end; - -procedure TDAEIBOQuery.DoSetSQL(const Value: string); -begin - TIBOQuery(Dataset).SQL.Text := Value; -end; - -{ TDAEIBOStoredProcedure } - -function TDAEIBOStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TIBOStoredProc.Create(nil); - TIBOStoredProc(result).IB_Connection := TDAEIBOConnection(aConnection).fConnection.Database; -end; - -function TDAEIBOStoredProcedure.Execute: integer; -begin - with TIBOStoredProc(Dataset) do begin - Unprepare; - Prepare; - end; - - SetParamValues(GetParams); - TIBOStoredProc(Dataset).ExecProc; - result := TIBOStoredProc(Dataset).RowsAffected; - GetParamValues(GetParams); -end; - -function TDAEIBOStoredProcedure.GetStoredProcedureName: string; -begin - result := TIBOStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEIBOStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TIBOStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEIBOStoredProcedure.RefreshParams; -begin - // Apparently a bug in IBO requires to do so... Automatic gathering only works at runtime - TIBOStoredProc(Dataset).Prepare; - - inherited; -end; - -procedure TDAEIBOStoredProcedure.SetParamValues(Params: TDAParamCollection); -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptInput, daptInputOutput, daptUnknown]) then begin - sqPar := TIBOStoredProc(Dataset).ParamByName(Params[i].Name); - if (Params[i].DataType <> datBlob) then - sqPar.Value := params[i].Value - else begin - sqPar.AsBlob:=VariantBinaryToString(params[i].Value); - end; - end; -end; - -procedure TDAEIBOStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) then begin - sqPar := TIBOStoredProc(Dataset).ParamByName(Params[i].Name); - params[i].Value := sqPar.Value - end; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBXDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBXDriver.pas deleted file mode 100644 index 028fba5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAIBXDriver.pas +++ /dev/null @@ -1,493 +0,0 @@ -unit uDAIBXDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -{$R DataAbstract_IBXDriver_Glyphs.res} - -interface - -uses - Classes, DB, uDAEngine, uDAInterfaces, uDAIBInterfaces, IBDatabase, - uROClasses, IBQuery, IBStoredProc, IBSQLMonitor, IB, uDAUtils; - -type - { TDAIBXDriver } - TDAIBXDriver = class(TDADriverReference) - end; - - { TIBXConnection } - TIBXConnection = class(TDAConnectionWrapper) - private - fDatabase: TIBDatabase; - fTransaction: TIBTransaction; - - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: boolean); override; - - public - constructor Create(AOwner: TComponent); override; - - property Database: TIBDatabase read fDatabase; - property Transaction: TIBTransaction read fTransaction; - end; - - { TDAEIBXDriver } - TDAEIBXDriver = class(TDAIBDriver) - private - fIBTraceOptions: TTraceFlags; - fTraceCallback: TDALogTraceEvent; - fMonitor: TIBSQLMonitor; - - procedure OnIBXTrace(EventText: string; EventTime: TDateTime); - protected - function GetConnectionClass: TDAEConnectionClass; override; - procedure CustomizeConnectionObject(aConnection: TDAEConnection); override; - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - public - end; - - { TDAEIBXConnection } - TDAEIBXConnection = class(TDAIBConnection, IDAInterbaseConnection, IDAIBTransactionAccess, IDAIBConnectionProperties, IDAUseGenerators, IDAFileBasedDatabase) - private - fConnection: TIBXConnection; - - protected - // IIBTransactionAccess - function GetTransaction: TObject; safecall; - - procedure Commit; safecall; - procedure CommitRetaining; safecall; - procedure Rollback; safecall; - procedure RollbackRetaining; safecall; - - // IIBConnectionProperties - function GetRole: string; safecall; - procedure SetRole(const Value: string); safecall; - function GetSQLDialect: integer; override;safecall; - procedure SetSQLDialect(Value: integer); safecall; - function GetCharset: string; safecall; - procedure SetCharset(const Value: string); safecall; - - - // IDAConnection - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - end; - - { TDAEIBXQuery } - TDAEIBXQuery = class(TDAEDataset) - - protected - function DoGetRecordCount: integer; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - public - end; - - { TDAEIBXStoredProcedure } - TDAEIBXStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - procedure RefreshParams; override; - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses SysUtils, uDADriverManager, uDARes, IBCustomDataSet, IBSQL,uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAIBXDriver]); -end; - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAEIBXDriver.Create(nil); - result := _driver; -end; - -{ TIBXConnection } - -constructor TIBXConnection.Create(AOwner: TComponent); -begin - inherited; - - fDatabase := TIBDatabase.Create(Self); - fTransaction := TIBTransaction.Create(Self); - fTransaction.AutoStopAction := saNone; - //fTransaction.AutoStopAction := saCommit; - // ^ new per recommendation from Andy Gibson, to fix the "Transaction in progress" error. - - fDatabase.LoginPrompt := FALSE; - fDatabase.DefaultTransaction := fTransaction; -end; - -function TIBXConnection.GetConnected: Boolean; -begin - result := fDatabase.Connected -end; - -procedure TIBXConnection.SetConnected(Value: boolean); -begin - // This first check is required. - // I think there's a bug in the IBX destroying sequence and the notification. TCustomConnection gets to this point *after* - // the owned components are destroyed. Only happens with IBX... - - if (csDestroying in ComponentState) then Exit; - fDatabase.Connected := Value -end; - -{ TDAEIBXConnection } - -procedure TDAEIBXConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - - with aConnStrParser do begin - if (Self.UserID <> '') then - fConnection.Database.Params.Add('user_name=' + Self.UserID) - else - fConnection.Database.Params.Add('user_name=' + UserID); - - if (Self.Password <> '') then - fConnection.Database.Params.Add('password=' + Self.Password) - else - fConnection.Database.Params.Add('password=' + Password); - - if Server <> '' then { Change: Aleksander Oven, 27. july 2003 } - fConnection.Database.DatabaseName := Server + ':' + Database - else - fConnection.Database.DatabaseName := Database; - - if AuxParams['Dialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['Dialect'])) - else if AuxParams['SQLDialect'] <> '' then - SetSQLDialect(StrToInt(AuxParams['SQLDialect'])); - - if AuxParams['Role'] <> '' then - SetRole(AuxParams['Role']); - - if AuxParams['Charset'] <> '' then - SetCharset(AuxParams['Charset']); - - end; -end; - -function TDAEIBXConnection.DoBeginTransaction: integer; -begin - result := -1; - fConnection.Database.DefaultTransaction.StartTransaction; -end; - -procedure TDAEIBXConnection.DoCommitTransaction; -begin - fConnection.Database.DefaultTransaction.Commit; -end; - -function TDAEIBXConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TIBXConnection.Create(nil); - result := fConnection; -end; - -function TDAEIBXConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEIBXQuery -end; - -function TDAEIBXConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEIBXStoredProcedure -end; - -function TDAEIBXConnection.GetTransaction: TObject; -begin - result := fConnection.fTransaction; -end; - -procedure TDAEIBXConnection.DoRollbackTransaction; -begin - fConnection.Database.DefaultTransaction.Rollback; -end; - -function TDAEIBXConnection.GetRole: string; -begin - result := fConnection.Database.Params.Values['sql_role_name'] -end; - -function TDAEIBXConnection.GetSQLDialect: integer; -begin - result := fConnection.Database.SQLDialect -end; - -function TDAEIBXConnection.GetCharset: string; -begin - result := fConnection.Database.Params.Values['lc_ctype'] -end; - -procedure TDAEIBXConnection.SetRole(const Value: string); -begin - fConnection.Database.Params.Values['sql_role_name'] := Value -end; - -procedure TDAEIBXConnection.SetSQLDialect(Value: integer); -begin - fConnection.Database.SQLDialect := Value -end; - -procedure TDAEIBXConnection.SetCharset(const Value: string); -begin - fConnection.Database.Params.Values['lc_ctype'] := Value; -end; - -procedure TDAEIBXConnection.Commit; -begin - fConnection.fTransaction.Commit -end; - -procedure TDAEIBXConnection.CommitRetaining; -begin - fConnection.fTransaction.CommitRetaining -end; - -procedure TDAEIBXConnection.Rollback; -begin - fConnection.fTransaction.Rollback -end; - -procedure TDAEIBXConnection.RollbackRetaining; -begin - fConnection.fTransaction.RollbackRetaining -end; - -function TDAEIBXConnection.DoGetInTransaction: boolean; -begin - result := fConnection.fTransaction.InTransaction -end; - -{ TDAEIBXDriver } - -procedure TDAEIBXDriver.CustomizeConnectionObject(aConnection: TDAEConnection); -begin - TDAEIBXConnection(aConnection).fConnection.Database.TraceFlags := fIBTraceOptions; -end; - -function TDAEIBXDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEIBXConnection; -end; - -function TDAEIBXDriver.GetDescription: string; -begin - result := 'Borland Interbase Express Driver'; -end; - -function TDAEIBXDriver.GetDriverID: string; -begin - result := 'IBX'; -end; - -procedure TDAEIBXDriver.OnIBXTrace(EventText: string; EventTime: TDateTime); -begin - if Assigned(fTraceCallback) then fTraceCallback(fMonitor, EventText, 0); -end; - -procedure TDAEIBXDriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TIBSQLMonitor.Create(Self); - - fMonitor.Enabled := FALSE; - fMonitor.OnSQL := OnIBXTrace; - - fIBTraceOptions := []; - if (toPrepare in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfQPrepare]; - if (toExecute in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfQExecute]; - if (toFetch in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfQFetch]; - if (toError in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfError]; - if (toStmt in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfStmt]; - if (toConnect in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfConnect]; - if (toTransact in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfTransact]; - if (toBlob in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfBlob]; - if (toService in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfService]; - if (toMisc in TraceOptions) then fIBTraceOptions := fIBTraceOptions + [tfMisc]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := fIBTraceOptions; - fMonitor.Enabled := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - -{ TDAEIBXQuery } - -function TDAEIBXQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TIBQuery.Create(nil); - TIBQuery(result).UniDirectional := true; - TIBQuery(result).Database := TDAEIBXConnection(aConnection).fConnection.Database; -end; - -function TDAEIBXQuery.DoExecute: integer; -begin - inherited DoExecute; - - result := TIBQuery(Dataset).RowsAffected; -end; - -function TDAEIBXQuery.DoGetRecordCount: integer; -begin - TIBQuery(Dataset).FetchAll; - Result := inherited DoGetRecordCount; -end; - -function TDAEIBXQuery.DoGetSQL: string; -begin - result := TIBQuery(Dataset).SQL.Text -end; - -procedure TDAEIBXQuery.DoPrepare(Value: boolean); -begin - TIBQuery(Dataset).Prepared := Value -end; - -procedure TDAEIBXQuery.DoSetSQL(const Value: string); -begin - TIBQuery(Dataset).SQL.Text := Value; -end; - - -{ TDAEIBXStoredProcedure } - -function TDAEIBXStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TIBStoredProc.Create(nil); - TIBStoredProc(result).Database := TDAEIBXConnection(aConnection).fConnection.Database; -end; - -function TDAEIBXStoredProcedure.Execute: integer; -begin - SetParamValues(GetParams); - TIBStoredProc(Dataset).ExecProc; - result := TIBStoredProc(Dataset).RowsAffected; - GetParamValues(GetParams); -end; - -procedure TDAEIBXStoredProcedure.SetParamValues(Params: TDAParamCollection); safecall; -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptInput, daptInputOutput, daptUnknown]) then begin - sqPar := TIBStoredProc(Dataset).ParamByName(Params[i].Name); - if (Params[i].DataType <> datBlob) then - sqPar.Value := params[i].Value - else begin - sqPar.AsBlob:=VariantBinaryToString(params[i].Value); - end; - end; -end; - -procedure TDAEIBXStoredProcedure.GetParamValues(Params: TDAParamCollection); safecall; -var - i: integer; - sqPar: TParam; -begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) then begin - sqPar := TIBStoredProc(Dataset).ParamByName(Params[i].Name); - params[i].Value := sqPar.Value - end; -end; - -function TDAEIBXStoredProcedure.GetStoredProcedureName: string; -begin - result := TIBStoredProc(Dataset).StoredProcName -end; - -procedure TDAEIBXStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TIBStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEIBXStoredProcedure.RefreshParams; -begin - // Apparently a bug in IBX requires to do so... Automatic gathering only works at runtime - TIBStoredProc(Dataset).Prepare; - - inherited; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMyDACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMyDACDriver.pas deleted file mode 100644 index 6a3af77..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMyDACDriver.pas +++ /dev/null @@ -1,518 +0,0 @@ -unit uDAMyDACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_MyDACDriver_Glyphs.res} -{.$DEFINE ENABLE_SQLMonitor} -{.$DEFINE MYSQL4Compatible} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, {uDAADOInterfaces,} uROClasses, DBAccess, MyAccess, - {$IFDEF ENABLE_SQLMonitor}DASQLMonitor, MySQLMonitor,{$ENDIF ENABLE_SQLMonitor} uROBinaryHelpers, uDAUtils, uDAMySQLInterfaces; - -type { TDAMyDACDriver } - TDAMyDACDriver = class(TDADriverReference) - end; - - { TDAEADODriver } - TDAEADODriver = class(TDAMySQLDriver) - private - {$IFDEF ENABLE_SQLMonitor} - fMonitor: TMySQLMonitor; - fTraceCallBack: TDALogTraceEvent; - - procedure OnMyDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); - {$ENDIF ENABLE_SQLMonitor} - protected - function GetConnectionClass: TDAEConnectionClass; override; - {$IFDEF ENABLE_SQLMonitor} - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - {$ENDIF ENABLE_SQLMonitor} - // IDADriver - function GetDriverID: string; override; safecall; - function GetDescription: string; override; safecall; - function GetDefaultCustomParameters: string; override; safecall; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - end; - - { TDAEMyConnection } - TDAEMyConnection = class(TDAMySQLConnection, IDAMySQLConnection,IDACanQueryDatabaseNames) - private - function GetMyConnection: TMyConnection; - - protected - function GetTableSchema: string; override; - function useUnicode:Boolean; override; - - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - procedure DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); override; - function GetDatabaseNames: IROStrings; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - property MyConnection: TMyConnection read GetMyConnection; - public - end; - - { TDAEMyQuery } - TDAEMyQuery = class(TDAEDataset, IDAMustSetParams) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - - public - end; - - { TDAEADOStoredProcedure } - TDAEADOStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils,Variants, - uDADriverManager, uDARes; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAMyDACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEADODriver.Create(nil); - result := _driver; -end; - -{$IFDEF LATEST_MyDAC} -{$I uDACRLabsUtils.inc} -{$ENDIF LATEST_MyDAC} - - -{$I uDACRLabsUtils.inc} -{ TDAEMyConnection } - -function TDAEMyConnection.DoBeginTransaction: integer; -begin - MyConnection.StartTransaction; - result := 0; -end; - -procedure TDAEMyConnection.DoCommitTransaction; -begin - MyConnection.Commit; -end; - -function TDAEMyConnection.GetMyConnection: TMyConnection; -begin - result := TMyConnection(inherited ConnectionObject); -end; - -function TDAEMyConnection.CreateCustomConnection: TCustomConnection; -begin - result := TMyConnection.Create(nil); - TMyConnection(result).LoginPrompt := FALSE; -end; - -function TDAEMyConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEMyQuery; -end; - -function TDAEMyConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEADOStoredProcedure; -end; - -procedure TDAEMyConnection.DoGetStoredProcedureNames(out List: IROStrings); -begin - {$IFDEF MYSQL4Compatible} - List := TROStrings.Create; - MyConnection.GetStoredProcNames(List.Strings); - {$ELSE} - inherited DoGetStoredProcedureNames(List); - {$ENDIF} -end; - -procedure TDAEMyConnection.DoGetTableNames(out List: IROStrings); -begin - {$IFDEF MYSQL4Compatible} - List := TROStrings.Create; - MyConnection.GetTableNames(List.Strings); - {$ELSE} - inherited DoGetTableNames(List); - {$ENDIF MYSQL4Compatible} -end; - -procedure TDAEMyConnection.DoRollbackTransaction; -begin - MyConnection.Rollback; -end; - -function TDAEMyConnection.DoGetInTransaction: boolean; -begin - result := MyConnection.InTransaction -end; - - -procedure TDAEMyConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -const - stdMSSQL_ConnectionString = 'User ID=%s;Password=%s;Initial Catalog=%s;Data Source=%s'; -var - adoconn: string; - i: integer; - sName,sValue: string; -begin - inherited; - - with aConnStrParser do begin - adoconn := Format(stdMSSQL_ConnectionString, [UserID, Password, Database, Server]); - - MyConnection.Database := Database; - - MyConnection.Server := Server; - - if (Self.UserID <> '') then - MyConnection.Username := Self.UserID - else - MyConnection.Username := UserID; - - if (Self.Password <> '') then - MyConnection.Password := Self.Password - else - MyConnection.Password := Password; - for i := 0 to AuxParamsCount -1 do - begin - sName := AuxParamNames[i]; - sValue := AuxParams[AuxParamNames[i]]; - if SameText('Port', sName) then MyConnection.Port:= StrToIntDef(sValue,3306); - if SameText('useUnicode', sName) then MyConnection.Options.UseUnicode:=StrToBoolDef(sValue,False); - end; - end; -end; - -function TDAEMyConnection.GetTableSchema: string; -begin - Result:=MyConnection.Database; -end; - -function TDAEMyConnection.useUnicode: Boolean; -begin - Result:= GetMyConnection.Options.UseUnicode; -end; - -function TDAEMyConnection.GetDatabaseNames: IROStrings; -begin - {$IFDEF MYSQL4Compatible} - Result := TROStrings.Create(); - MyConnection.GetDatabaseNames(Result.Strings); - {$ELSE} - Result := inherited GetDatabaseNames; - {$ENDIF MYSQL4Compatible} -end; - -procedure TDAEMyConnection.DoGetViewNames(out List: IROStrings); -begin - {$IFDEF MYSQL4Compatible} - List := TROStrings.Create; - GetTablesList(MyConnection, List.Strings); - {$ELSE} - inherited DoGetViewNames(List); - {$ENDIF MYSQL4Compatible} -end; - -procedure TDAEMyConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -begin - {$IFDEF MYSQL4Compatible} - ForeignKeys := TDADriverForeignKeyCollection.Create(nil); - {$ELSE} - inherited DoGetForeignKeys(ForeignKeys); - {$ENDIF MYSQL4Compatible} -end; - -procedure TDAEMyConnection.DoGetStoredProcedureParams( - const aStoredProcedureName: string; out Params: TDAParamCollection); -{$IFDEF MYSQL4Compatible} -var - cmd: IDASQLCommand; - {$ENDIF MYSQL4Compatible} -begin - {$IFDEF MYSQL4Compatible} - cmd := NewCommand(aStoredProcedureName, stStoredProcedure); - cmd.RefreshParams; - Params := TDAParamCollection.Create(nil); - Params.AssignParamCollection(cmd.Params); - {$ELSE} - inherited DoGetStoredProcedureParams(aStoredProcedureName, Params); - {$ENDIF MYSQL4Compatible} -end; - -procedure TDAEMyConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -{$IFDEF MYSQL4Compatible} - var - qry: IDADataset; -{$ENDIF} -begin - {$IFDEF MYSQL4Compatible} - Fields := TDAFieldCollection.Create(nil); - qry := GetDatasetClass.Create(Self); - try - qry.SQL := 'SELECT * FROM ' + QuoteIdentifierIfNeeded(aTableName) + ' WHERE 1=0'; - qry.Open; - Fields.Assign(qry.Fields); - finally - qry := nil; - end; - {$ELSE} - inherited DoGetTableFields(aTableName, Fields); - {$ENDIF MYSQL4Compatible} -end; - -{ TDAEADODriver } - -procedure TDAEADODriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - List.Add('useUnicode=(True;False)'); -end; - -function TDAEADODriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEMyConnection; -end; - -function TDAEADODriver.GetDefaultCustomParameters: string; -begin - Result:= inherited GetDefaultCustomParameters + 'useUnicode=False;'; -end; - -function TDAEADODriver.GetDescription: string; -begin - result := 'Core Lab MyDAC Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEADODriver.GetDriverID: string; -begin - result := 'MyDAC'; -end; - -{$IFDEF ENABLE_SQLMonitor} -procedure TDAEADODriver.OnMyDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); -begin - if Assigned(fTraceCallback) then fTraceCallback(Sender, Text, integer(Flag)); -end; - -procedure TDAEADODriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -var - MyDACopts: TDATraceFlags; -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TMySQLMonitor.Create(Self); - - fMonitor.Active := FALSE; - fMonitor.OnSQL := OnMyDACTrace; - - MyDACopts := []; - if (toPrepare in TraceOptions) then MyDACopts := MyDACopts + [tfQPrepare]; - if (toExecute in TraceOptions) then MyDACopts := MyDACopts + [tfQExecute]; - if (toFetch in TraceOptions) then MyDACopts := MyDACopts + [tfQFetch]; - if (toError in TraceOptions) then MyDACopts := MyDACopts + [tfError]; - if (toStmt in TraceOptions) then MyDACopts := MyDACopts + [tfStmt]; - if (toConnect in TraceOptions) then MyDACopts := MyDACopts + [tfConnect]; - if (toTransact in TraceOptions) then MyDACopts := MyDACopts + [tfTransact]; - if (toBlob in TraceOptions) then MyDACopts := MyDACopts + [tfBlob]; - if (toService in TraceOptions) then MyDACopts := MyDACopts + [tfService]; - if (toMisc in TraceOptions) then MyDACopts := MyDACopts + [tfMisc]; - if (toParams in TraceOptions) then MyDACopts := MyDACopts + [tfParams]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := MyDACopts; - fMonitor.Active := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; -{$ENDIF ENABLE_SQLMonitor} - -{ TDAEMyQuery } - -function TDAEMyQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TMyQuery.Create(nil); - TMyQuery(result).ReadOnly := TRUE; - TMyQuery(result).Connection := TDAEMyConnection(aConnection).MyConnection; - TMyQuery(result).FetchAll := True; //for preventing creating an additional session when you call StartTransaction (an known issue of OLEDB) - -// GetLastAutoInc will work in case these options is commented -// TMyQuery(result).FetchAll := False; -// TMyQuery(result).Unidirectional := True; -end; - -function TDAEMyQuery.DoExecute: integer; -begin - inherited DoExecute; - result := TMyQuery(Dataset).RowsAffected; -end; - -function TDAEMyQuery.DoGetSQL: string; -begin - result := TMyQuery(Dataset).SQL.Text; -end; - -procedure TDAEMyQuery.DoPrepare(Value: boolean); -begin - // Do not do inherited DoPrepare for MySQL. - {with TMyQuery(Dataset) do begin - if not Options.Direct then Prepared := Value; - end;} -end; - -procedure TDAEMyQuery.DoSetSQL(const Value: string); -begin - TMyQuery(Dataset).SQL.Text := Value; -end; - -procedure TDAEMyQuery.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TMyQuery(Dataset).Params); -end; - -procedure TDAEMyQuery.GetParamValues(Params: TDAParamCollection); safecall; -var - i: integer; - par: uDAInterfaces.TDAParam; - inpar: TParam; -begin - for i := 0 to (Params.Count - 1) do begin - par := Params[i]; - inpar := TMyQuery(Dataset).Params.ParamByName(par.Name); - par.Value := inpar.Value; - end; -end; - -{ TDAEADOStoredProcedure } - -function TDAEADOStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TMyStoredProc.Create(nil); - TMyStoredProc(result).Connection := TDAEMyConnection(aConnection).MyConnection; -end; - -function TDAEADOStoredProcedure.Execute: integer; -begin - SetParamValues(GetParams); - TMyStoredProc(Dataset).ExecProc; - Result := -1; - GetParamValues(GetParams); -end; - -function TDAEADOStoredProcedure.GetStoredProcedureName: string; -begin - result := TMyStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEADOStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TMyStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEADOStoredProcedure.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TMyStoredProc(Dataset).Params); -end; - -procedure TDAEADOStoredProcedure.GetParamValues(Params: TDAParamCollection); safecall; -var - i: Integer; -begin - for i := 0 to TMyStoredProc(DataSet).Params.Count - 1 do - if (TMyStoredProc(DataSet).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then - params[i].Value := TMyStoredProc(DataSet).Params[i].Value; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMySQLDACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMySQLDACDriver.pas deleted file mode 100644 index ee5923c..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAMySQLDACDriver.pas +++ /dev/null @@ -1,332 +0,0 @@ -unit uDAMySQLDACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_MySQLDACDriver_Glyphs.res} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, - uROBinaryHelpers, uDAUtils, mySQLAccess, mySQLDbTables, mySQLTypes, uDAMySQLInterfaces; - -type { TDAMySQLDACDriver } - TDAMySQLDacDriver = class(TDADriverReference) - end; - - { TDAEMySQLDacDriver } - TDAEMySQLDacDriver = class(TDAMySQLDriver) - private - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; safecall; - function GetDescription: string; override; safecall; - end; - - { TDAEMyConnection } - TDAEMySQLDacConnection = class(TDAMySQLConnection, IDACanQueryDatabaseNames,IDAMySQLConnection) - private - function GetConnection: TmySQLDatabase; - - protected - function GetTableSchema: string; override; - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - property Connection: TmySQLDatabase read GetConnection; - public - end; - - { TDAEMySQLDacQuery } - TDAEMySQLDacQuery = class(TDAEDataset) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - public - end; - - { TDAEMySQLDacStoredProcedure } - TDAEMySQLDacStoredProcedure = class(TDAEStoredProcedure) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure RefreshParams; override; safecall; - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, - uDADriverManager, uDARes, uDAMacroProcessors; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAMySQLDACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEMySQLDacDriver.Create(nil); - result := _driver; -end; - -{$IFDEF LATEST_MyDAC} -{$I uDACRLabsUtils.inc} -{$ENDIF LATEST_MyDAC} - -{ TDAEMySQLDacConnection } - -function TDAEMySQLDacConnection.DoBeginTransaction: integer; -begin - Connection.StartTransaction; - result := 0; -end; - -procedure TDAEMySQLDacConnection.DoCommitTransaction; -begin - Connection.Commit; -end; - -function TDAEMySQLDacConnection.GetConnection: TmySQLDatabase; -begin - result := TmySQLDatabase(inherited ConnectionObject); -end; - -function TDAEMySQLDacConnection.CreateCustomConnection: TCustomConnection; -begin - result := TmySQLDatabase.Create(nil); - TmySQLDatabase(result).LoginPrompt := false; -end; - -function TDAEMySQLDacConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEMySQLDacQuery; -end; - -function TDAEMySQLDacConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEMySQLDacStoredProcedure; -end; - - -procedure TDAEMySQLDacConnection.DoRollbackTransaction; -begin - Connection.Rollback; -end; - -function TDAEMySQLDacConnection.DoGetInTransaction: boolean; -begin - result := Connection.InTransaction -end; - - - -procedure TDAEMySQLDacConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - i: Integer; -begin - inherited; - - with aConnStrParser do begin - Connection.DatabaseName := Database; - - Connection.Host := Server; - - if (Self.UserID <> '') then - Connection.Username := Self.UserID - else - Connection.Username := UserID; - - if (Self.Password <> '') then - Connection.UserPassword := Self.Password - else - Connection.UserPassword := Password; - if AuxParams['Port'] <> '' then Connection.Port := StrToIntDef(AuxParams['Port'],3306); - - for i := 0 to AuxParamsCount -1 do - begin - if SameText(AuxParamNames[i], 'Port') then continue; - if AuxParams[AuxParamNames[i]] <> '' then - Connection.Params.Add(AuxParamNames[i]+'='+AuxParams[AuxParamNames[i]]); - end; - end; -end; - - -function TDAEMySQLDacConnection.GetTableSchema: string; -begin - Result:=Connection.DatabaseName; -end; - -{ TDAEMySQLDacDriver } - - -function TDAEMySQLDacDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEMySQLDacConnection; -end; - -function TDAEMySQLDacDriver.GetDescription: string; -begin - result := 'MicroOlap DAC for MySQL Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEMySQLDacDriver.GetDriverID: string; -begin - result := 'MySQLDAC'; -end; - - -{ TDAEMySQLDacQuery } - -function TDAEMySQLDacQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TmySQLQuery.Create(nil); - - TmySQLQuery(result).RequestLive := false; - TmySQLQuery(result).UniDirectional:=True; - TMySqlQuery(result).Database := TDAEMySQLDacConnection(aConnection).Connection; -end; - -function TDAEMySQLDacQuery.DoExecute: integer; -begin - inherited DoExecute; - - result := TmySQLQuery(Dataset).RowsAffected; -end; - -function TDAEMySQLDacQuery.DoGetSQL: string; -begin - result := TmySQLQuery(Dataset).SQL.Text; -end; - -procedure TDAEMySQLDacQuery.DoPrepare(Value: boolean); -begin - TmySQLQuery(Dataset).Prepared := Value; -end; - -procedure TDAEMySQLDacQuery.DoSetSQL(const Value: string); -begin - TmySQLQuery(Dataset).SQL.Text := Value; -end; - - -{ TDAEADOStoredProcedure } - -function TDAEMySQLDacStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TmySQLStoredProc.Create(nil); - TmySQLStoredProc(result).Database := TDAEMySQLDacConnection(aConnection).Connection; -end; - -function TDAEMySQLDacStoredProcedure.Execute: integer; -var - i: integer; - _params: TDAParamCollection; -begin - _params := GetParams; - - with TmySQLStoredProc(Dataset) do begin - for i := 0 to (Params.Count-1) do - if (Params[i].ParamType in [ptInput, ptInputOutput]) - then Params[i].Value := _params[i].Value; - - ExecProc; - result := -1; - - for i := 0 to (Params.Count-1) do - if (Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) - then _params[i].Value := Params[i].Value; - end; -end; - -function TDAEMySQLDacStoredProcedure.GetStoredProcedureName: string; -begin - Result := TmySQLStoredProc(Dataset).ProcedureName; -end; - -procedure TDAEMySQLDacStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TmySQLStoredProc(Dataset).ProcedureName := Name; -end; - -procedure TDAEMySQLDacStoredProcedure.RefreshParams; -var - lParams: TParams; - i: integer; - par: TDAParam; -begin - lParams := TmySQLStoredProc(Dataset).Params; - getParams.Clear; - for i := 0 to (lParams.Count - 1) do begin - par := getParams.Add; - par.Name := lParams[i].Name; - par.DataType := intVCLTypeToDAType(lParams[i].DataType); - par.ParamType := TDAParamType(lParams[i].ParamType); - par.Size := lParams[i].Size; - end; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.dcr b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.dcr deleted file mode 100644 index 52a0cec..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.dcr and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.pas deleted file mode 100644 index 53a2078..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDANexusDBDriver.pas +++ /dev/null @@ -1,1082 +0,0 @@ -unit uDANexusDBDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ (c)opyright Nexus Database Systems Pty. Ltd. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I DataAbstract.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, - DB, - - uDAEngine, - uDAInterfaces, - uROClasses, - - nxllMemoryManager, - nxllSync, - nxllComponent, - nxllTransport, - - nxsdServerEngine, - - nxdb, - - {$IFNDEF DataAbstract_NexusDBPack} - nxptBasePooledTransport, - nxtwWinsockTransport, - nxtnNamedPipeTransport, - - nxreRemoteServerEngine, - {$ENDIF} - - nxsrSqlEngineBase, - nxsrServerEngine, - - nxsqlEngine, - - //nx1xAllEngines, - nxseAllEngines, // // NXDB2: Renamed - uDAUtils; - -type - TDANexusDBDriver = class(TDADriverReference) - end; - - INexusDBConnection = interface - ['{DFF41623-A766-44C0-A61A-CC18FB80CAE3}'] - end; - - INexusDBDriver = interface - ['{CFE4B5BB-3C38-40BF-BE57-5BE3C627A6C3}'] - procedure RegisterServerEngine(aServerEngine: TnxBaseServerEngine; - const aName: string); safecall; - - procedure UnregisterServerEngine(aServerEngine: TnxBaseServerEngine); overload; safecall; - procedure UnregisterServerEngine(const aName: string); overload; safecall; - end; - - TNexusDBConnection = class; - - TNexusDBBaseEngineContainer = class(TnxObject) - protected {private} - becServerName: string; - - becConnectionsHead : TNexusDBConnection; - becConnectionsTail : TNexusDBConnection; - protected - function becGetEngine: TnxBaseServerEngine; virtual; abstract; - public - constructor Create(aServerName: string); - destructor Destroy; override; - - procedure CheckedFree; virtual; - - property Engine: TnxBaseServerEngine - read becGetEngine; - end; - - TNexusDBConnection = class(TDAConnectionWrapper) - protected {private} - conEngineContainer : TNexusDBBaseEngineContainer; - conEngineContainerNext : TNexusDBConnection; - conEngineContainerPrev : TNexusDBConnection; - conEngineContainerAdded : Boolean; - - conSession : TnxSession; - conDatabase : TnxDatabase; - - procedure conSetEngineContainer(aContainer: TNexusDBBaseEngineContainer); - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: Boolean); override; - - procedure conAddToEngineContainer; - procedure conRemoveFromEngineContainer; - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - property EngineContainer: TNexusDBBaseEngineContainer read conEngineContainer write conSetEngineContainer; - property Session: TnxSession read conSession; - property Database: TnxDatabase read conDatabase; - end; - - TDAENexusDBDriver = class(TDAEDriver, INexusDBDriver) - protected {private} - nxdEnginesPadlock: TnxPadlock; - nxdEngines: TStringList; - protected - function GetConnectionClass: TDAEConnectionClass; override; - - { IDADriver } - function GetDriverID: string; override; - function GetDescription: string; override; - - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetDefaultCustomParameters: string; override; safecall; - { INexusDBDriver } - procedure RegisterServerEngine(aServerEngine: TnxBaseServerEngine;const aName: string); safecall; - - procedure UnregisterServerEngine(aServerEngine: TnxBaseServerEngine); overload; safecall; - procedure UnregisterServerEngine(const aName: string); overload; safecall; - function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall; - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - end; - - { TDAENexusDBConnection } - TDAENexusDBConnection = class(TDAEConnection, INexusDBConnection) - private - dacConnection: TNexusDBConnection; - protected - { IDAConnection } - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject : TCustomConnection); override; - function DoBeginTransaction: Integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: Boolean; override; - - procedure DoGetTableNames(out aList: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - procedure DoGetTableFields(const aTableName : string; - out aFields : TDAFieldCollection); override; - - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - public - end; - - { TDAENexusDBQuery } - TDAENexusDBQuery = class(TDAEDataset, IDAMustSetParams) - private - protected - function CreateDataset(aConnection: TDAEConnection): TDataSet; override; - - function DoExecute: Integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: Boolean); override; - - { IDAMustSetParams } - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - public - end; - - { TDAENexusStoredProcedure } - TDAENexusStoredProcedure = class(TDAEStoredProcedure, IDAStoredProcedure, IDAMustSetParams) - protected - // Internal - // function DoGetStoredProcedureName: string; override; - // procedure DoSetStoredProcedureName(const Name: string); override; - // procedure RefreshParams; override; safecall; - - // IDAStoredProcedure - function GetStoredProcedureName: string; override; safecall; - procedure SetStoredProcedureName(const Name: string); override; safecall; - - // procedure PrepareSQLStatement; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure DoPrepare(Value: boolean); override; safecall; - function Execute: integer; override; safecall; - procedure DoSetSQL(const Value: string); override; safecall; - function DoGetSQL: string; override; safecall; - // function intVCLTypeToDAType(aFieldType: TFieldType): TDADataType;override; - - { IDASQLCommand } - procedure RefreshParams; override; safecall; - // function DoGetRecordCount: integer; override; - // function DoGetActive: boolean; override; - // procedure DoSetActive(Value: boolean); override; - // function DoGetBOF: boolean; override; - // function DoGetEOF: boolean; override; - // procedure DoNext; override; - // function DoLocate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -const - Nexus_DriverType = 'Nexus'; -implementation - -uses - SysUtils, - - nxllUtils,nxsdTypes, - - uDADriverManager, - uDARes, - uDAMacroProcessors, - - TypInfo; - -const - csUrlSeperator = '://'; - - csEmbedded = 'embedded'; - csRegistered = 'registered'; - csEmbeddedDefault = 'embedded://default'; - - csAlias = 'alias'; - csPath = 'path'; - - csNexusDB = 'NexusDB'; - csNexusDBDriver = 'NexusDB Driver'; - -resourcestring - rsEmbeddedOnly = ' [embedded only]'; - rsThisDriverOnlySupportsEmbeddedServerEngines = 'This driver only supports embedded server engines. Connections to remote server engines require a full NexusDB license.'; - rsNoProtocolHasBeenSpecified = 'No protocol has been specified'; - rsNoServerEngineHasBeenRegisteredAs = 'No Server Engine has been registered as "%s"'; - rsNoTransportAvailableForProtocol = 'No transport available for protocol "%s"'; - rsUnknownDatabaseType = 'Unknown database type "%s"'; - -var - _driver : TDAENexusDBDriver = nil; - -{===Register===================================================================} -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDANexusDBDriver]); -end; -{==============================================================================} - - - -{===GetDriverObject============================================================} -{$IFDEF DataAbstract_SchemaModelerOnly}{$INCLUDE DataAbstract_SchemaModelerOnly.inc}{$ENDIF DataAbstract_SchemaModelerOnly} -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - Result := nil; - Exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAENexusDBDriver.Create(nil); - Result := _driver; -end; -{==============================================================================} - - - -{===TNexusDBBaseEngineContainer================================================} -procedure TNexusDBBaseEngineContainer.CheckedFree; -begin - if not Assigned(becConnectionsHead) then - Free; -end; -{------------------------------------------------------------------------------} -constructor TNexusDBBaseEngineContainer.Create(aServerName: string); -begin - becServerName := aServerName; - - inherited Create; - - _driver.nxdEnginesPadlock.Lock; - try - _driver.nxdEngines.AddObject(aServerName, Self); - finally - _driver.nxdEnginesPadlock.Unlock; - end; -end; -{------------------------------------------------------------------------------} -destructor TNexusDBBaseEngineContainer.Destroy; -var - i : Integer; -begin - if Assigned(_driver) then begin - _driver.nxdEnginesPadlock.Lock; - try - with _driver.nxdEngines do - if Find(becServerName, i) and (Objects[i] = Self) then - Delete(i); - while Assigned(becConnectionsHead) do try - becConnectionsHead.EngineContainer := nil; - except end; - finally - _driver.nxdEnginesPadlock.Unlock; - end; - end; - - inherited; -end; -{==============================================================================} - - - -{===TNexusDBEmbeddedEngineContainer============================================} -type - TNexusDBEmbeddedEngineContainer = class(TNexusDBBaseEngineContainer) - protected {private} - eecServerEngine: TnxServerEngine; - protected - function becGetEngine: TnxBaseServerEngine; override; - public - constructor Create(aServerName: string); - destructor Destroy; override; - - procedure CheckedFree; override; - end; -function TNexusDBEmbeddedEngineContainer.becGetEngine: TnxBaseServerEngine; -begin - Result := eecServerEngine; -end; -{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} -procedure TNexusDBEmbeddedEngineContainer.CheckedFree; -begin - if not SameText(becServerName, csEmbeddedDefault) then - inherited; -end; -{------------------------------------------------------------------------------} -constructor TNexusDBEmbeddedEngineContainer.Create(aServerName: string); -begin - eecServerEngine := TnxServerEngine.Create(nil); - eecServerEngine.SqlEngine := TnxSqlEngine.Create(eecServerEngine); - eecServerEngine.Open; - - inherited Create(aServerName); -end; -{------------------------------------------------------------------------------} -destructor TNexusDBEmbeddedEngineContainer.Destroy; -begin - inherited; - FreeAndNil(eecServerEngine); -end; -{==============================================================================} - - - -{$IFNDEF DataAbstract_NexusDBPack} -{==============================================================================} -type - TNexusDBRemoteEngineContainer = class(TNexusDBBaseEngineContainer) - protected {private} - recTransport: TnxBaseTransport; - recServerEngine: TnxRemoteServerEngine; - protected - function becGetEngine: TnxBaseServerEngine; override; - public - constructor Create(aServerName, aAuxParamsString: string; - aTransportClass: TnxBaseTransportClass); - destructor Destroy; override; - end; -{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} -function TNexusDBRemoteEngineContainer.becGetEngine: TnxBaseServerEngine; -begin - Result := recServerEngine; -end; -{------------------------------------------------------------------------------} -constructor TNexusDBRemoteEngineContainer.Create(aServerName, aAuxParamsString: string; - aTransportClass: TnxBaseTransportClass); -var - S, - N, - V : string; - AuxParams : IROStrings; - i : integer; - - procedure SetProperty(Instance: TObject; const Prefix, Name, Value: string); - begin - if (Pos(Prefix, Name) = 1) then - begin - SetPropValue(Instance, - Copy(Name, Length(Prefix) + 1, Length(Name)), - Value); - end; - end; - -begin - S := aServerName; - Delete(S, 1, Pos(csUrlSeperator, S) + 2); - - AuxParams := ListStringElements(aAuxParamsString); - - recTransport := aTransportClass.Create(nil); - recTransport.ServerName := S; - - recServerEngine := TnxRemoteServerEngine.Create(nil); - recServerEngine.Transport := recTransport; - - for i := 0 to AuxParams.Count-1 do - begin - N := AuxParams.Names[i]; - V := AuxParams.Values[AuxParams.Names[i]]; - SetProperty(recTransport, 'Transport.', N, V); - SetProperty(recServerEngine, 'Server.', N, V); - end; - - recTransport.Open; - recServerEngine.Open; - - inherited Create(aServerName); -end; -{------------------------------------------------------------------------------} -destructor TNexusDBRemoteEngineContainer.Destroy; -begin - inherited; - FreeAndNil(recServerEngine); - FreeAndNil(recTransport); -end; -{==============================================================================} -{$ENDIF} - - - -{===TNexusDBRegisteredEngineContainer==========================================} -type - TNexusDBRegisteredEngineContainer = class(TNexusDBBaseEngineContainer) - protected {private} - regecServerEngine: TnxBaseServerEngine; - protected - function becGetEngine: TnxBaseServerEngine; override; - public - constructor Create(aServerName: string; - aServerEngine: TnxBaseServerEngine); - - procedure CheckedFree; override; - end; -{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~} -function TNexusDBRegisteredEngineContainer.becGetEngine: TnxBaseServerEngine; -begin - Result := regecServerEngine; -end; -{------------------------------------------------------------------------------} -procedure TNexusDBRegisteredEngineContainer.CheckedFree; -begin - {never} -end; -{------------------------------------------------------------------------------} -constructor TNexusDBRegisteredEngineContainer.Create(aServerName: string; - aServerEngine: TnxBaseServerEngine); -begin - regecServerEngine := aServerEngine; - inherited Create(aServerName); -end; -{==============================================================================} - - - -{===TNexusDBConnection=========================================================} -procedure TNexusDBConnection.conAddToEngineContainer; -begin - if conEngineContainerAdded then - Exit; - if not Assigned(conEngineContainer) then - Exit; - - _driver.nxdEnginesPadlock.Lock; - try - conEngineContainerPrev := conEngineContainer.becConnectionsTail; - conEngineContainer.becConnectionsTail := Self; - if Assigned(conEngineContainerPrev) then - conEngineContainerPrev.conEngineContainerNext := Self; - if not Assigned(conEngineContainer.becConnectionsHead) then - conEngineContainer.becConnectionsHead := Self; - finally - _driver.nxdEnginesPadlock.Unlock; - end; - - conEngineContainerAdded := True; -end; -{------------------------------------------------------------------------------} -procedure TNexusDBConnection.conRemoveFromEngineContainer; -begin - if not conEngineContainerAdded then - Exit; - - _driver.nxdEnginesPadlock.Lock; - try - if Assigned(conEngineContainerNext) then - conEngineContainerNext.conEngineContainerPrev := conEngineContainerPrev - else - if conEngineContainer.becConnectionsTail = Self then - conEngineContainer.becConnectionsTail := conEngineContainerPrev; - - if Assigned(conEngineContainerPrev) then - conEngineContainerPrev.conEngineContainerNext := conEngineContainerNext - else - if conEngineContainer.becConnectionsHead = Self then - conEngineContainer.becConnectionsHead := conEngineContainerNext; - - conEngineContainerNext := nil; - conEngineContainerPrev := nil; - - conEngineContainer.CheckedFree; - conEngineContainer := nil; - finally - _driver.nxdEnginesPadlock.Unlock; - end; - conEngineContainerAdded := False; -end; -{------------------------------------------------------------------------------} -procedure TNexusDBConnection.conSetEngineContainer(aContainer: TNexusDBBaseEngineContainer); -begin - if conEngineContainer <> aContainer then begin - conSession.Close; - conSession.ServerEngine := nil; - - conRemoveFromEngineContainer; - - conEngineContainer := aContainer; - if Assigned(conEngineContainer) then - conSession.ServerEngine := conEngineContainer.Engine; - - conAddToEngineContainer; - end; -end; -{------------------------------------------------------------------------------} -constructor TNexusDBConnection.Create(aOwner: TComponent); -begin - inherited; - - conSession := TnxSession.Create(Self); - conDatabase := TnxDatabase.Create(Self); - conDatabase.Session := conSession; -end; -{------------------------------------------------------------------------------} -destructor TNexusDBConnection.Destroy; -begin - EngineContainer := nil; - inherited; -end; -{------------------------------------------------------------------------------} -function TNexusDBConnection.GetConnected: Boolean; -begin - Result := conDatabase.Connected; -end; -{------------------------------------------------------------------------------} -procedure TNexusDBConnection.SetConnected(Value: Boolean); -begin - if (csDestroying in ComponentState) then Exit; - - try - conSession.Active := Value; - conDatabase.Connected := Value; - except - conSession.Active := False; - conDatabase.Connected := False; - raise; - end; -end; -{==============================================================================} - - - -{===TDAENexusDBDriver==========================================================} -constructor TDAENexusDBDriver.Create(aOwner: TComponent); -begin - inherited; - nxdEnginesPadlock := TnxPadlock.Create; - nxdEngines := TStringList.Create; -end; -{------------------------------------------------------------------------------} -destructor TDAENexusDBDriver.Destroy; -var - i : Integer; -begin - if Assigned(nxdEnginesPadlock) then begin - nxdEnginesPadlock.Lock; - try - if Assigned(nxdEngines) then begin - for i := Pred(nxdEngines.Count) downto 0 do - nxdEngines.Objects[i].Free; - nxdEngines.Clear; - end; - finally - nxdEnginesPadlock.Unlock; - end; - end; - inherited; - FreeAndNil(nxdEnginesPadlock); - FreeAndNil(nxdEngines); -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBDriver.GetAuxParams(const AuxDriver: string; out List: IROStrings); -begin - inherited; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - {$IFDEF DataAbstract_NexusDBPack} - Result := [doDatabaseName]; - {$ELSE} - Result := [doServerName, doDatabaseName, doLogin]; - {$ENDIF} -end; -{------------------------------------------------------------------------------} -function TDAENexusDBDriver.GetConnectionClass: TDAEConnectionClass; -begin - Result := TDAENexusDBConnection; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBDriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - Result:=Nexus_DriverType; -end; - -function TDAENexusDBDriver.GetDefaultCustomParameters: string; -begin - Result:=''; -end; - -function TDAENexusDBDriver.GetDescription: string; -begin - Result := csNexusDBDriver - {$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF} - {$IFDEF DataAbstract_NexusDBPack} + rsEmbeddedOnly{$ENDIF}; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBDriver.GetDriverID: string; -begin - Result := csNexusDB; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBDriver.RegisterServerEngine(aServerEngine : TnxBaseServerEngine; - const aName : string); -begin - TNexusDBRegisteredEngineContainer.Create(csRegistered + csUrlSeperator + aName, aServerEngine); -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBDriver.UnregisterServerEngine(aServerEngine : TnxBaseServerEngine); -var - i : Integer; -begin - _driver.nxdEnginesPadlock.Lock; - try - for i := Pred(_driver.nxdEngines.Count) downto 0 do - if _driver.nxdEngines.Objects[i] is TNexusDBRegisteredEngineContainer then - if TNexusDBRegisteredEngineContainer(_driver.nxdEngines.Objects[i]).regecServerEngine = aServerEngine then - _driver.nxdEngines.Objects[i].Free; - finally - _driver.nxdEnginesPadlock.Unlock; - end; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBDriver.UnregisterServerEngine(const aName : string); -var - i : Integer; -begin - _driver.nxdEnginesPadlock.Lock; - try - if _driver.nxdEngines.Find(csRegistered + csUrlSeperator + aName, i) then - _driver.nxdEngines.Objects[i].Free; - finally - _driver.nxdEnginesPadlock.Unlock; - end; -end; -{==============================================================================} - - - -{===TDAENexusDBConnection======================================================} -function TDAENexusDBConnection.CreateCustomConnection: TCustomConnection; -begin - Result := TNexusDBConnection.Create(nil); - dacConnection := TNexusDBConnection(Result); -end; -{------------------------------------------------------------------------------} -function TDAENexusDBConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - Result := TOracleMacroProcessor.Create; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBConnection.DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject : TCustomConnection); -var - S, T : string; - i : Integer; - sl : TStringList; - tpc : TnxBaseTransportClass; -begin - inherited; - - with aConnStrParser do begin - (aConnectionObject as TNexusDBConnection).Session.Close; - - if Self.UserID <> '' then - dacConnection.Session.Username := Self.UserID - else - dacConnection.Session.Username := UserID; - - if Self.Password <> '' then - dacConnection.Session.Password := Self.Password - else - dacConnection.Session.Password := Password; - - Server := Trim(Server); - - if Server = '' then - Server := csEmbeddedDefault; - - _driver.nxdEnginesPadlock.Lock; - try - S := Server; - SetLength(S, nxMaxI32(0, Pred(Pos(csUrlSeperator, S)))); - - if S = '' then - raise EDADriverException.Create(rsNoProtocolHasBeenSpecified); - - if not _driver.nxdEngines.Find(Server, i) then begin - - if SameText(S, csEmbedded) then begin - (aConnectionObject as TNexusDBConnection).EngineContainer := - TNexusDBEmbeddedEngineContainer.Create(Server); - end else if SameText(S, csRegistered) then begin - raise EDADriverException.CreateFmt(rsNoServerEngineHasBeenRegisteredAs, [Server]); - end else begin - {$IFDEF DataAbstract_NexusDBPack} - raise EDADriverException.Create(rsThisDriverOnlySupportsEmbeddedServerEngines); - {$ELSE} - sl := TStringList.Create; - try - TnxBaseDirectTransport.GetRegisteredClasses(sl); - tpc := nil; - for i := 0 to Pred(sl.Count) do - if SameText(S, TnxBaseTransportClass(sl.Objects[i]).ProtocolName) then begin - tpc := TnxBaseTransportClass(sl.Objects[i]); - Break; - end; - if not Assigned(tpc) then - raise EDADriverException.CreateFmt(rsNoTransportAvailableForProtocol, [S]); - (aConnectionObject as TNexusDBConnection).EngineContainer := - TNexusDBRemoteEngineContainer.Create(Server, AuxParamsString, tpc); - finally - FreeAndNil(sl); - end; - {$ENDIF} - end; - end else - (aConnectionObject as TNexusDBConnection).EngineContainer := - (_driver.nxdEngines.Objects[i] as TNexusDBBaseEngineContainer); - finally - _driver.nxdEnginesPadlock.Unlock; - end; - - Database := Trim(Database); - - S := Database; - SetLength(S, nxMaxI32(0, Pred(Pos(csUrlSeperator, S)))); - if Pos(csUrlSeperator, Database) > 0 then - T := Copy(Database, Length(S) + 4, High(Integer)) - else - T := Database; - - if S = '' then - if (aConnectionObject as TNexusDBConnection).EngineContainer.becGetEngine is TnxServerEngine then - S := csPath - else - S := csAlias; - - if SameText(S, csAlias) then - (aConnectionObject as TNexusDBConnection).Database.AliasName := T - else if SameText(S, csPath) then - (aConnectionObject as TNexusDBConnection).Database.AliasPath := T - else - raise EDADriverException.CreateFmt(rsUnknownDatabaseType, [S]); - - end; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBConnection.DoBeginTransaction: Integer; -begin - Result := -1; - dacConnection.Database.StartTransaction; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBConnection.DoCommitTransaction; -begin - dacConnection.Database.Commit; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBConnection.DoGetInTransaction: Boolean; -begin - Result := dacConnection.Database.InTransaction; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBConnection.DoGetTableFields(const aTableName : string; - out aFields : TDAFieldCollection); -var - i : Integer; -begin - dacConnection.Open; - - with TnxQuery.Create(nil) do try - SQL.Text := 'SELECT * FROM "' + aTableName + '" WHERE ''c'' <> ''c'''; - Database := dacConnection.Database; - Open; - - aFields := TDAFieldCollection.Create(nil); - try - for i := 0 to Pred(FieldCount) do - with aFields.Add do begin - Name := Fields.Fields[i].FieldName; - Size := Fields.Fields[i].Size; - Required := Fields.Fields[i].Required; - ReadOnly := Fields.Fields[i].ReadOnly; - Calculated := Fields.Fields[i].Calculated; - DisplayWidth := Fields.Fields[i].DisplayWidth; - DisplayLabel := Fields.Fields[i].DisplayLabel; - DataType := VCLTypeToDAType(Fields.Fields[i].DataType); - end; - except - FreeAndNil(aFields); - raise; - end; - finally - Free; - end; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBConnection.DoGetTableNames(out aList: IROStrings); -begin - inherited; - dacConnection.Database.Open; - dacConnection.Database.GetTableNames(aList.Strings); -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBConnection.DoRollbackTransaction; -begin - dacConnection.Database.Rollback; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBConnection.GetDatasetClass: TDAEDatasetClass; -begin - Result := TDAENexusDBQuery; -end; - -function TDAENexusDBConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - Result:=TDAENexusStoredProcedure; -end; - -{------------------------------------------------------------------------------} -function TDAENexusDBConnection.DoGetLastAutoInc(const GeneratorName: string): integer; -begin - // dacConnection.Database.GetAutoIncValue(GeneratorName, Cardinal(Result)); // NXDB2: Changed - dacConnection.Database.GetAutoIncValue(GeneratorName, - dacConnection.Session.Password, - Cardinal(Result)); - Dec(Result); -end; -{==============================================================================} - - - -{===TDAENexusDBQuery===========================================================} -function TDAENexusDBQuery.CreateDataset(aConnection: TDAEConnection): TDataSet; -begin - Result := TnxQuery.Create(nil); - with TnxQuery(Result) do begin - Database := TDAENexusDBConnection(aConnection).dacConnection.Database; - RequestLive := False; - end; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBQuery.DoExecute: Integer; -begin - with TnxQuery(DataSet) do begin - ExecSQL; - Result := RowsAffected; - end; -end; -{------------------------------------------------------------------------------} -function TDAENexusDBQuery.DoGetSQL: string; -begin - Result := TnxQuery(DataSet).SQL.Text -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBQuery.DoPrepare(Value: Boolean); -begin - TnxQuery(DataSet).Prepared := Value; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBQuery.DoSetSQL(const Value: string); -begin - TnxQuery(DataSet).SQL.Text := Value; -end; -{------------------------------------------------------------------------------} -procedure TDAENexusDBQuery.SetParamValues(Params: TDAParamCollection); -var - i : Integer; - par : uDAInterfaces.TDAParam; - outpar : TParam; -begin - for i := 0 to (Params.Count - 1) do begin - par := Params[i]; - outpar := TnxQuery(DataSet).Params.ParamByName(par.Name); - outpar.DataType := DATypeToVCLType(par.DataType); - outpar.ParamType := TParamType(Ord(par.ParamType)); - outpar.Value := par.Value; - end; -end; - -procedure TDAENexusDBQuery.GetParamValues(Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - inpar: TParam; - ds: TnxQuery; -begin - ds := TnxQuery(Dataset); - if not Assigned(ds.Params) then - Exit; - - for i := 0 to (ds.Params.Count - 1) do begin - inpar := ds.Params[i]; - - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then - par.Value := inpar.Value; - end; -end; - - -{==============================================================================} - -exports - GetDriverObject Name func_GetDriverObject; - -procedure TDAENexusDBConnection.DoGetStoredProcedureNames( - out List: IROStrings); -begin - inherited; - dacConnection.Database.Open; - dacConnection.Database.GetStoredProcNames(List.Strings); -end; - - -{ TDAENexusStoredProcedure } - -function TDAENexusStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - Result := TnxStoredProc.Create(nil); - with TnxStoredProc(Result) do begin - Database := TDAENexusDBConnection(aConnection).dacConnection.Database; - RequestLive := False; - end; -end; - -function TDAENexusStoredProcedure.Execute: integer; -begin - SetParamValues(GetParams); - TnxStoredProc(Dataset).ExecProc; - Result:=-1; - GetParamValues(GetParams); -end; - -function TDAENexusStoredProcedure.DoGetSQL: string; -begin - Result:=''; -end; - -procedure TDAENexusStoredProcedure.DoSetSQL(const Value: string); -begin -// -end; - -procedure TDAENexusStoredProcedure.GetParamValues( - Params: TDAParamCollection); -var - i: integer; - par: TDAParam; - inpar: TParam; - ds: TnxStoredProc; -begin - ds := TnxStoredProc(Dataset); - if not Assigned(ds.Params) then Exit; - - for i := 0 to (ds.Params.Count - 1) do begin - inpar := ds.Params[i]; - par := Params.ParamByName(inpar.Name); - if par.ParamType in [daptOutput, daptInputOutput, daptResult] then - par.Value := inpar.Value; - end; -end; - -function TDAENexusStoredProcedure.GetStoredProcedureName: string; -begin - Result:=TnxStoredProc(Dataset).StoredProcName; -end; - -procedure TDAENexusStoredProcedure.SetParamValues( - Params: TDAParamCollection); -var - i : Integer; - par : uDAInterfaces.TDAParam; - outpar : TParam; -begin - for i := 0 to (Params.Count - 1) do begin - par := Params[i]; - outpar := TnxStoredProc(DataSet).Params.ParamByName(par.Name); - outpar.DataType := DATypeToVCLType(par.DataType); - outpar.ParamType := TParamType(Ord(par.ParamType)); - outpar.Value := par.Value; - end; -end; - -procedure TDAENexusStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TnxStoredProc(Dataset).StoredProcName:=Name; -end; - -procedure TDAENexusStoredProcedure.RefreshParams; -begin - TnxStoredProc(DataSet).RefreshParam; - inherited; -end; - -procedure TDAENexusStoredProcedure.DoPrepare(Value: boolean); -begin - TnxStoredProc(DataSet).Prepared:=Value; -end; - - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - try - _driver.Free; - except end; - _driver := nil; -end. - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAODACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAODACDriver.pas deleted file mode 100644 index bc321ab..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAODACDriver.pas +++ /dev/null @@ -1,732 +0,0 @@ -unit uDAODACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_ODACDriver_Glyphs.res} - -{ - If you have the version with source code, uncomment the following conditional to - make this unit compile. -} - -{.$DEFINE SOURCECODEVERSION} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, Variants, - uDAOracleInterfaces, Ora, DBAccess, DASQLMonitor, OraSQLMonitor, OraSmart, uDAMacroProcessors, uDAUtils; - -type { TDAODACDriver } - TDAODACDriver = class(TDADriverReference) - end; - - { TDAEODACDriver } - TDAEODACDriver = class(TDAOracleDriver) - private - fMonitor: TOraSQLMonitor; - fTraceCallBack: TDALogTraceEvent; - - procedure OnODACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); - - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - function GetDefaultCustomParameters: string; override; - - public - end; - - { TDAEODACConnection } - TDAEODACConnection = class(TDAEConnection, IDAOracleConnection, IDAUseGenerators, IDACanQueryDatabaseNames) - private - fConnection: TORASession; - - procedure GetSysObjects(const aCondition: string; aList: TStrings); - procedure GetSynObjects(const aCondition: string; aList: TStrings); - - protected - // IDAUseGenerators - function GetNextAutoinc(const GeneratorName: string): integer; safecall; - - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - function GetSPSelectSyntax(HasArguments: Boolean): String; override; safecall; - - public - function GetDatabaseNames: IROStrings; - end; - - { TDAEODACQuery } - TDAEODACQuery = class(TDAEDataset, IDAOracleDataset, IDAMustSetParams) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function intVCLTypeToDAType(aFieldType: TFieldType): TDADataType;override; - - // IDADataset - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - procedure DoSetActive(Value: boolean); override; - - // IOracleDataset - function GetLockMode: TDAOracleLockMode; - procedure SetLockMode(Value: TDAOracleLockMode); - function GetOptions: TDAOracleOptions; - procedure SetOptions(Value: TDAOracleOptions); - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - - procedure GetParamValues(Params: TDAParamCollection); safecall; - - public - end; - - { TDAEODACStoredProcedure } - TDAEODACStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - function intVCLTypeToDAType(aFieldType: TFieldType): TDADataType;override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - procedure RefreshParams; override; - function Execute: integer; override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, - uDADriverManager, uDARes, uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAODACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEODACDriver.Create(nil); - result := _driver; -end; - -procedure WriteODACParamValues( - InputParams : TDAParamCollection; - OutputParams: TDAParams); -var i : integer; - par : uDAInterfaces.TDAParam; - outpar : DBAccess.TDAParam; - ms: IROStream; - blobtype : TFieldType; -begin - for i := 0 to (InputParams.Count-1) do begin - par := InputParams[i]; - outpar := OutputParams.ParamByName(par.Name); - - // If no blob type is specified, then gets the default field type. - // BlobType is only meaningful to Oracle. MSSQL works fine just setting the DataType - blobtype := BlobTypeMappings[par.BlobType]; - if (blobtype=ftUnknown) - then blobtype := DADataTypesMappings[par.DataType]; - - case par.DataType of - datBlob : begin - outpar.ParamType := TParamType(par.ParamType); - outpar.DataType := DADataTypesMappings[par.DataType]; - - ms := TROStream.Create; - par.SaveToStream(ms); - ms.Position := 0; - if ms.Size>0 - then outpar.LoadFromStream(ms.Stream, blobtype); - - end; - datMemo : begin - outpar.ParamType := TParamType(par.ParamType); - outpar.DataType := ftMemo; - - // Only happens with Oracle - if (blobtype<>ftUnknown) - then outpar.DataType := blobtype; - outpar.Value := par.Value; - end; - else begin - outpar.ParamType := TParamType(par.ParamType); - case par.DataType of - datAutoInc : outpar.DataType := ftInteger; - datLargeAutoInc: outpar.DataType := ftLargeInt; - else outpar.DataType := DADataTypesMappings[par.DataType]; - end; - outpar.Value := par.Value; - end; - end; - end; -end; - -{ TDAEODACConnection } - -procedure TDAEODACConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -begin - inherited; - - with aConnStrParser do begin - - if (Self.UserID <> '') then - fConnection.Username := Self.UserID - else - fConnection.Username := UserID; - - if (Self.Password <> '') then - fConnection.Password := Self.Password - else - fConnection.Password := Password; - - fConnection.Server := Server; - fConnection.ConnectPrompt := FALSE; - fConnection.Debug := (AuxParams['Debug']='1'); - - fConnection.Options.Net := AuxParams['Net'] = '1'; - end; -end; - -function TDAEODACConnection.DoBeginTransaction: integer; -begin - fConnection.StartTransaction; - result := 0; -end; - -procedure TDAEODACConnection.DoCommitTransaction; -begin - fConnection.Commit; -end; - -function TDAEODACConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TORASession.Create(nil); - fConnection.LoginPrompt := FALSE; - - { ToDo: add a COnnectionString parameter to set - fConnection.Debug := TRUE; } - - result := fConnection; -end; - -function TDAEODACConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEODACQuery; -end; - -function TDAEODACConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEODACStoredProcedure; -end; - -procedure TDAEODACConnection.GetSysObjects(const aCondition: string; aList: TStrings); -var - ds: TSmartQuery; -begin - ds := TSmartQuery.Create(nil); - with ds do try - Connection := fConnection; - SQL.Text := 'select object_name from all_objects ' + aCondition + ' and owner =''' + UpperCase(fConnection.Username) + ''''; - Open; - - while not ds.EOF do begin - aList.Add(ds.FieldByName('object_name').AsString); - Next; - end; - finally - ds.Free; - end; -end; - -procedure TDAEODACConnection.DoGetStoredProcedureNames(out List: IROStrings); -begin - List := TROStrings.Create; - GetSysObjects('where (object_type = ''PROCEDURE'' or object_type = ''FUNCTION'')', List.Strings); - GetSynObjects('(ao.object_type = ''PROCEDURE'' or ao.object_type = ''FUNCTION'')', List.Strings); -end; - -procedure TDAEODACConnection.DoGetTableNames(out List: IROStrings); -begin - List := TROStrings.Create; - GetSysObjects('where object_type = ''TABLE''', List.Strings); - GetSynObjects('ao.object_type = ''TABLE''', List.Strings); -end; - -procedure TDAEODACConnection.DoRollbackTransaction; -begin - fConnection.Rollback; -end; - -function TDAEODACConnection.DoGetInTransaction: boolean; -begin - result := fConnection.InTransaction -end; - -function TDAEODACConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - result := Oracle_CreateMacroProcessor; -end; - -function TDAEODACConnection.DoGetLastAutoInc(const GeneratorName: string): integer; -begin - Result := Oracle_DoGetLastAutoInc(GeneratorName,GetDatasetClass.Create(Self)); -end; - -procedure TDAEODACConnection.DoGetViewNames(out List: IROStrings); -begin - List := TROStrings.Create; - GetSysObjects('where object_type = ''VIEW''', List.Strings); - GetSynObjects('ao.object_type = ''VIEW''', List.Strings); -end; - -function TDAEODACConnection.GetNextAutoinc( - const GeneratorName: string): integer; -begin - Result := Oracle_GetNextAutoinc(GeneratorName,GetDatasetClass.Create(Self)); -end; - -procedure TDAEODACConnection.GetSynObjects(const aCondition: string; - aList: TStrings); -var - ds: TSmartQuery; -begin - ds := TSmartQuery.Create(nil); - with ds do try - Connection := fConnection; - SQL.Text := 'select distinct(us.synonym_name) from all_synonyms us, all_objects ao where us.table_owner = ao.owner and '+ - 'us.table_name = ao.object_name and '+ - '(us.owner =''' + UpperCase(fConnection.Username) + ''' or us.owner = ''PUBLIC'') and '+aCondition; - Open; - - while not ds.EOF do begin - aList.Add(ds.FieldByName('synonym_name').AsString); - Next; - end; - finally - ds.Free; - end; -end; - -function TDAEODACConnection.GetSPSelectSyntax( - HasArguments: Boolean): String; -begin - if HasArguments then - Result := 'CALL {0}({1})' else Result := 'CALL {0}'; -end; - -function TDAEODACConnection.GetDatabaseNames: IROStrings; -begin - Result := TROStrings.Create(); - fConnection.GetDatabaseNames(Result.Strings); -end; - -{ TDAEODACDriver } - -function TDAEODACDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doServerName, doLogin, doCustom]; -end; - -function TDAEODACDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEODACConnection; -end; - -function TDAEODACDriver.GetDefaultCustomParameters: string; -begin - result := 'Net=0'; -end; - -function TDAEODACDriver.GetDescription: string; -begin - result := 'Core Lab ODAC Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEODACDriver.GetDriverID: string; -begin - result := 'ODAC'; -end; - -procedure TDAEODACDriver.GetAuxParams(const AuxDriver: string; out List: IROStrings); -begin - inherited; - List.Add('Net=0,1'); -end; - -procedure TDAEODACDriver.OnODACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); -begin - if Assigned(fTraceCallback) then fTraceCallback(Sender, Text, integer(Flag)); -end; - -procedure TDAEODACDriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -var - sdacopts: TDATraceFlags; -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TOraSQLMonitor.Create(Self); - - fMonitor.Active := FALSE; - fMonitor.OnSQL := OnODACTrace; - - sdacopts := []; - if (toPrepare in TraceOptions) then sdacopts := sdacopts + [tfQPrepare]; - if (toExecute in TraceOptions) then sdacopts := sdacopts + [tfQExecute]; - if (toFetch in TraceOptions) then sdacopts := sdacopts + [tfQFetch]; - if (toError in TraceOptions) then sdacopts := sdacopts + [tfError]; - if (toStmt in TraceOptions) then sdacopts := sdacopts + [tfStmt]; - if (toConnect in TraceOptions) then sdacopts := sdacopts + [tfConnect]; - if (toTransact in TraceOptions) then sdacopts := sdacopts + [tfTransact]; - if (toBlob in TraceOptions) then sdacopts := sdacopts + [tfBlob]; - if (toService in TraceOptions) then sdacopts := sdacopts + [tfService]; - if (toMisc in TraceOptions) then sdacopts := sdacopts + [tfMisc]; - if (toParams in TraceOptions) then sdacopts := sdacopts + [tfParams]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := sdacopts; - fMonitor.Active := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - -{ TDAEODACQuery } - -function TDAEODACQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TSmartQuery.Create(nil); - TSmartQuery(result).Debug := TDAEODACConnection(aConnection).fConnection.Debug; - TSmartQuery(result).ReadOnly := TRUE; - TSmartQuery(result).FetchAll := True; //for preventing creating an additional session when you call StartTransaction (an known issue of OLEDB) - TSmartQuery(result).Unidirectional := True; - TSmartQuery(result).Session := TDAEODACConnection(aConnection).fConnection; -end; - -function TDAEODACQuery.DoGetSQL: string; -begin - result := TSmartQuery(Dataset).SQL.Text; -end; - -procedure TDAEODACQuery.DoSetSQL(const Value: string); -begin - TSmartQuery(Dataset).SQL.Text := Value; -end; - -function TDAEODACQuery.GetLockMode: TDAOracleLockMode; -begin - result := TDAOracleLockMode(TSmartQuery(Dataset).LockMode) -end; - -procedure TDAEODACQuery.SetLockMode(Value: TDAOracleLockMode); -begin - TSmartQuery(Dataset).LockMode := TLockMode(Value) -end; - -procedure TDAEODACQuery.SetOptions(Value: TDAOracleOptions); -var - {$IFDEF SOURCECODEVERSION} - dsopts: TOraDataSetOptions; - {$ELSE} - dsopts: TOraDataSetOptionsDS; - {$ENDIF} -begin - {$IFDEF SOURCECODEVERSION} - dsopts := TSmartQuery(Dataset).Options; - {$ELSE} - dsopts := TSmartQuery(Dataset).OptionsDS; - {$ENDIF} - - TSmartQuery(Dataset).DMLRefresh := True; // To get the output params when we exec SPs - dsopts.AutoClose := opAutoClose in Value; - dsopts.DefaultValues := opDefaultValues in Value; - dsopts.LongStrings := opLongStrings in Value; - dsopts.QueryRecCount := opQueryRecCount in Value; - dsopts.CacheLobs := opCacheLobs in Value; - dsopts.DeferredLobRead := opDeferredLobRead in Value; - dsopts.KeepPrepared := opKeepPrepared in Value; -end; - -function TDAEODACQuery.GetOptions: TDAOracleOptions; -var - {$IFDEF SOURCECODEVERSION} - dsopts: TOraDataSetOptions; - {$ELSE} - dsopts: TOraDataSetOptionsDS; - {$ENDIF} -begin - {$IFDEF SOURCECODEVERSION} - dsopts := TSmartQuery(Dataset).Options; - {$ELSE} - dsopts := TSmartQuery(Dataset).OptionsDS; - {$ENDIF} - - result := []; - - if dsopts.AutoClose then result := result + [opAutoClose]; - if dsopts.DefaultValues then result := result + [opDefaultValues]; - if dsopts.LongStrings then result := result + [opLongStrings]; - if dsopts.QueryRecCount then result := result + [opQueryRecCount]; - if dsopts.CacheLobs then result := result + [opCacheLobs]; - if dsopts.DeferredLobRead then result := result + [opDeferredLobRead]; - if dsopts.KeepPrepared then result := result + [opKeepPrepared]; -end; - -procedure TDAEODACQuery.DoPrepare(Value: boolean); -begin - TSmartQuery(Dataset).Prepared := Value -end; - -function TDAEODACQuery.DoExecute: integer; -begin - inherited DoExecute; - result := TSmartQuery(Dataset).RowsAffected; - -end; - -procedure TDAEODACQuery.SetParamValues(Params: TDAParamCollection); -begin - WriteODACParamValues(Params, TSmartQuery(Dataset).Params); -end; - -procedure TDAEODACQuery.GetParamValues(Params: TDAParamCollection); -var - i: integer; -begin - for i := 0 to TOraQuery(Dataset).Params.Count - 1 do - if (TSmartQuery(Dataset).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then params[i].Value := TSmartQuery(Dataset).Params[i].Value; -end; - - -function ExtractTableName(aSQLStatement: string): string; -var sql: string; - idx, i, x: integer; -begin - result := ''; - - sql := UpperCase(aSQLStatement); - ReplaceChar(sql, [#13, #9, #10], #32); - - idx := Pos(' FROM ', sql); - if (idx=0) then Exit; - - for i := idx+6 to Length(sql) do begin - if (sql[i]<>#32) then begin - for x := i to Length(sql) do - if not (sql[x] in ['A'..'Z', '0'..'9', '.', '_']) then begin - result := Trim(Copy(sql, i, x-i)); - Exit; - end; - end; - end; -end; - -procedure TDAEODACQuery.DoSetActive(Value: boolean); -var willCreateFields: boolean; - fieldColl: TDAFieldCollection; - tableName: string; - fld: TDAField; - qry: TSmartQuery; -begin - fieldColl:=nil; // prevent warnings - willCreateFields := FALSE; - if Value then begin - fieldColl := inherited GetFields; - willCreateFields := fieldColl.Count=0; - end; - - inherited; - - if not willCreateFields then Exit; - - { Determines which ones are part of the PK } - tableName := UpperCase(ExtractTableName(DoGetSQL)); - - if (tableName='') then Exit; - qry := TSmartQuery.Create(NIL); - try - qry.Assign(Dataset); - qry.SQL.Text := Format( - 'SELECT cols.column_name, cols.position '+ - 'FROM all_constraints cons, all_cons_columns cols '+ - 'WHERE cols.table_name = ''%s'' AND cons.constraint_type = ''P'' AND cons.constraint_name = cols.constraint_name '+ - 'AND cons.owner = cols.owner ORDER BY cols.position', [tableName]); - qry.Open; - if (qry.RecordCount=0) then Exit; - - while not qry.Eof do try - fld := fieldColl.FindField(qry.Fields[0].AsString); - if (fld<>NIL) then begin - fld.InPrimaryKey := TRUE; - fld.Required := TRUE; - end; - finally - qry.Next; - end; - finally - qry.Free; - end; -end; - -function TDAEODACQuery.intVCLTypeToDAType( - aFieldType: TFieldType): TDADataType; -begin - if ord(aFieldType) in [ftTimeStampTZ,ftTimeStampLTZ] then aFieldType:=ftTimeStamp; - Result:= inherited intVCLTypeToDAType(aFieldType); -end; - -{ TDAEODACStoredProcedure } - -function TDAEODACStoredProcedure.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TOraStoredProc.Create(nil); - TOraStoredProc(result).Debug := TDAEODACConnection(aConnection).fConnection.Debug; - TOraStoredProc(result).Session := TDAEODACConnection(aConnection).fConnection; -end; - -function TDAEODACStoredProcedure.Execute: integer; -var - i: integer; - _params: TDAParamCollection; -begin - _params := GetParams; - - with TOraStoredProc(Dataset) do begin - if (Params.Count <> _Params.Count) then TOraStoredProc(Dataset).PrepareSQL; - - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [ptInput, ptInputOutput]) then Params[i].Value := _params[i].Value; - - for i := 0 to (_params.Count - 1) do begin - if (_params[i].DataType = datString) and (Params[i].ParamType in [ptOutput, ptInputOutput]) then - if _params[i].Size > 4000 then Params[i].Size := _params[i].Size; - end; - - - ExecProc; - result := RowsAffected; - - for i := 0 to (_params.Count-1) do - if (_params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) - then _params[i].Value := params.ParamByName(_params[i].Name).Value; - - end; -end; - -function TDAEODACStoredProcedure.GetStoredProcedureName: string; -begin - result := TOraStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEODACStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TOraStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEODACStoredProcedure.SetParamValues(Params: TDAParamCollection); -begin - WriteODACParamValues(Params, TOraStoredProc(Dataset).Params); -end; - -procedure TDAEODACStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: Integer; -begin - for i := 0 to TOraStoredProc(Dataset).Params.Count - 1 do - if (TOraStoredProc(Dataset).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then params[i].Value := TOraStoredProc(Dataset).Params[i].Value; -end; - -procedure TDAEODACStoredProcedure.RefreshParams; -begin - TOraStoredProc(Dataset).PrepareSQL; - inherited; -end; - -function TDAEODACStoredProcedure.intVCLTypeToDAType( - aFieldType: TFieldType): TDADataType; -begin - if ord(aFieldType) in [ftTimeStampTZ,ftTimeStampLTZ] then aFieldType:=ftTimeStamp; - Result:= inherited intVCLTypeToDAType(aFieldType); -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAPostgresDACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAPostgresDACDriver.pas deleted file mode 100644 index 6cfb1aa..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAPostgresDACDriver.pas +++ /dev/null @@ -1,343 +0,0 @@ -unit uDAPostgresDACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_PostgresDACDriver_Glyphs.res} - -interface - -uses DB, Classes, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, - uROBinaryHelpers, uDAUtils, PSQLDbTables, uDAPostgresInterfaces; - -type { TDAPostgresDACDriver } - TDAPostgresDACDriver = class(TDADriverReference) - end; - - { TDAEPostgresDACDriver } - TDAEPostgresDACDriver = class(TDAPostgresDriver) - private - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; safecall; - function GetDescription: string; override; safecall; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; safecall; - end; - - { TDAEMyConnection } - TDAEPostgresDACConnection = class(TDAEPostgresConnection) - private - function GetConnection: TPSQLDatabase; - procedure FixSQLNames(items: TStrings); - - protected - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - - property Connection: TPSQLDatabase read GetConnection; - public - end; - - { TDAEPostgresDACQuery } - TDAEPostgresDACQuery = class(TDAEDataset) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - public - end; - - { TDAEPostgresDACStoredProcedure } - TDAEPostgresDACStoredProcedure = class(TDAEStoredProcedure) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, - uDADriverManager, uDARes; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAPostgresDACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEPostgresDacDriver.Create(nil); - result := _driver; -end; - -{$IFDEF LATEST_MyDAC} -{$I uDACRLabsUtils.inc} -{$ENDIF LATEST_MyDAC} - -{ TDAEPostgresDacConnection } - -function TDAEPostgresDacConnection.DoBeginTransaction: integer; -begin - Connection.StartTransaction; - result := 0; -end; - -procedure TDAEPostgresDacConnection.DoCommitTransaction; -begin - Connection.Commit; -end; - -function TDAEPostgresDacConnection.GetConnection: TPsqlDatabase; -begin - result := TPsqlDatabase(inherited ConnectionObject); -end; - -function TDAEPostgresDacConnection.CreateCustomConnection: TCustomConnection; -begin - result := TPsqlDatabase.Create(nil); - TPsqlDatabase(result).LoginPrompt := false; -end; - -function TDAEPostgresDacConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEPostgresDacQuery; -end; - -function TDAEPostgresDacConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEPostgresDacStoredProcedure; -end; - -procedure TDAEPostgresDacConnection.DoGetStoredProcedureNames(out List: IROStrings); -begin - List := TROStrings.Create; - Connection.GetStoredProcNames('', List.Strings); -end; - -procedure TDAEPostgresDacConnection.DoGetTableNames(out List: IROStrings); -begin - List := TROStrings.Create; - Connection.GetTableNames('', false, List.Strings); - FixSQLNames(List.Strings); -end; - -procedure TDAEPostgresDacConnection.DoRollbackTransaction; -begin - Connection.Rollback; -end; - -function TDAEPostgresDacConnection.DoGetInTransaction: boolean; -begin - result := Connection.InTransaction -end; - - -procedure TDAEPostgresDacConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - i: Integer; -begin - inherited; - - with aConnStrParser do begin - Connection.DatabaseName := Database; - - Connection.Host := Server; - - if (Self.UserID <> '') then - Connection.Username := Self.UserID - else - Connection.Username := UserID; - - if (Self.Password <> '') then - Connection.UserPassword := Self.Password - else - Connection.UserPassword := Password; - - for i := 0 to AuxParamsCount -1 do - begin - if AuxParams[AuxParamNames[i]] <> '' then - Connection.Params.Add(AuxParamNames[i]+'='+AuxParams[AuxParamNames[i]]); - end; - end; -end; - -procedure TDAEPostgresDacConnection.FixSQLNames(items: TStrings); -var - i: Integer; - s: string; -begin - Items.Text := StringReplace(Items.Text, '"', '', [rfReplaceAll]); - for i := Items.Count -1 downto 0 do - begin - s := Items[i]; - if lowercase(copy(s,1,7)) = 'public.' then - begin - Delete(s,1,7); - Items[i] := s; - end; - end; - // the driver adds quotes around it, while it shouldn't do that, we do that ourselves. -end; - -{ TDAEPostgresDacDriver } - -function TDAEPostgresDacDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - Result := [doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAEPostgresDacDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEPostgresDacConnection; -end; - -function TDAEPostgresDacDriver.GetDescription: string; -begin - result := 'MicroOlap DAC for Postgres Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEPostgresDacDriver.GetDriverID: string; -begin - result := 'PostgresDAC'; -end; - - -{ TDAEPostgresDacQuery } - -function TDAEPostgresDacQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TPSQLQuery.Create(nil); - TPSQLQuery(result).UniDirectional := True; - TPSQLQuery(result).RequestLive := false; - TPSQLQuery(result).Database := TDAEPostgresDacConnection(aConnection).Connection; -end; - -function TDAEPostgresDacQuery.DoExecute: integer; -begin - inherited DoExecute; - - result := TPSQLQuery(Dataset).RowsAffected; -end; - -function TDAEPostgresDacQuery.DoGetSQL: string; -begin - result := TPSQLQuery(Dataset).SQL.Text; -end; - -procedure TDAEPostgresDacQuery.DoPrepare(Value: boolean); -begin - TPSQLQuery(Dataset).Prepared := Value; -end; - -procedure TDAEPostgresDacQuery.DoSetSQL(const Value: string); -begin - TPSQLQuery(Dataset).SQL.Text := Value; -end; - - -{ TDAEADOStoredProcedure } - -function TDAEPostgresDacStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TPSQLStoredProc.Create(nil); - TPSQLStoredProc(result).Database := TDAEPostgresDacConnection(aConnection).Connection; -end; - -function TDAEPostgresDacStoredProcedure.Execute: integer; -var - i: integer; - _params: TDAParamCollection; -begin - _params := GetParams; - - with TPSQLStoredProc(Dataset) do begin - for i := 0 to (ParamCount-1) do - if (Params[i].ParamType in [ptInput, ptInputOutput]) - then Params[i].Value := _params[i].Value; - - ExecProc; - result := -1; - - for i := 0 to (ParamCount-1) do - if (Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) - then _params[i].Value := Params[i].Value; - end; -end; - -function TDAEPostgresDacStoredProcedure.GetStoredProcedureName: string; -begin - Result := TPSQLStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEPostgresDacStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TPSQLStoredProc(Dataset).StoredProcName := Name; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASDACDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASDACDriver.pas deleted file mode 100644 index c693657..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASDACDriver.pas +++ /dev/null @@ -1,554 +0,0 @@ -unit uDASDACDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -{$R DataAbstract_SDACDriver_Glyphs.res} - -interface - -uses - DB, Classes, uDAEngine, uDAInterfaces, uDAADOInterfaces, uROClasses, - DBAccess, MSAccess, DASQLMonitor, - MSSQLMonitor, Variants, uDAUtils; - -type { TDASDACDriver } - TDASDACDriver = class(TDADriverReference) - end; - - { TDAEADODriver } - TDAEADODriver = class(TDAMSSQLDriver) - private - fMonitor: TMSSQLMonitor; - fTraceCallBack: TDALogTraceEvent; - - procedure OnSDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); - - protected - function GetConnectionClass: TDAEConnectionClass; override; - procedure DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; safecall; - function GetDefaultCustomParameters: String; override; safecall; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - end; - - { TDAEMSConnection } - TDAEMSConnection = class(TDAMSConnection, IDAADOConnection, IDACanQueryDatabaseNames) - private - fMSConnection: TMSConnection; - -// procedure GetSysObjects(const aCondition: string; aList: TStrings); - - protected - function CreateCustomConnection: TCustomConnection; override; - - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; - aConnectionObject: TCustomConnection); override; - - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - //procedure DoGetStoredProcedureParams(const aStoredProcedureName : string; out Params : TDAParamCollection); //override; - // IADOConnection - function GetProviderName: string; safecall; - function GetProviderType: TDAOleDBProviderType; safecall; - function GetCommandTimeout: Integer; safecall; - procedure SetCommandTimeout(const Value: Integer); safecall; - end; - - { TDAEMSQuery } - TDAEMSQuery = class(TDAEDataset, IDAMustSetParams) - private - - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - procedure DoPrepare(Value: boolean); override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - - public - end; - - { TDAEADOStoredProcedure } - TDAEADOStoredProcedure = class(TDAEStoredProcedure, IDAMustSetParams) - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - - function GetStoredProcedureName: string; override; - procedure SetStoredProcedureName(const Name: string); override; - function Execute: integer; override; - - // IDAMustSetParams - procedure SetParamValues(Params: TDAParamCollection); safecall; - procedure GetParamValues(Params: TDAParamCollection); safecall; - - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - SysUtils, - uDADriverManager, uDARes, OLEDBAccess, - uROBinaryHelpers; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDASDACDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - {$IFDEF DataAbstract_SchemaModelerOnly} - if not RunningInSchemaModeler then begin - result := nil; - exit; - end; - {$ENDIF} - if (_driver = nil) then _driver := TDAEADODriver.Create(nil); - result := _driver; -end; - -{$I uDACRLabsUtils.inc} - -{ TDAEMSConnection } - -procedure TDAEMSConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - adoconn: string; - i: integer; -begin - inherited; - - with aConnStrParser do begin - adoconn := Format(stdMSSQL_ConnectionString, [UserID, Password, Database, Server]); - adoconn := ''; - if UserId <> '' then begin - if adoconn = '' then - AdoConn := 'User ID='+UserID - else - AdoConn := ADoConn + ';User ID='+UserID; - end; - if Password <> '' then begin - if adoconn = '' then - AdoConn := 'Password='+Password - else - AdoConn := ADoConn + ';Password='+Password; - end; - if DataBase <> '' then begin - if adoconn = '' then - AdoConn := 'Initial Catalog='+Database - else - AdoConn := ADoConn + ';Initial Catalog='+Database; - end; - if Server <> '' then begin - if adoconn = '' then - AdoConn := 'Data Source='+Server - else - AdoConn := ADoConn + ';Data Source='+Server; - end; - - AdoConn := ADoConn + ';'; - MSSQLSchemaEnabled := True; // by default - for i := 0 to AuxParamsCount -1 do - begin - if Uppercase(AuxParamNames[i]) = 'SCHEMAS' then - MSSQLSchemaEnabled := AuxParams['Schemas'] = '1' - else - adoconn := adoconn + AuxParamNames[i] + '=' + AuxParams[AuxParamNames[i]]+';'; - end; - - fMSConnection.ConnectString := adoconn; - - if (Self.UserID <> '') then fMSConnection.Username := Self.UserID; - - if (Self.Password <> '') then fMSConnection.Password := Self.Password; - end; -end; - -function TDAEMSConnection.DoBeginTransaction: integer; -begin - fMSConnection.StartTransaction; - result := 0; -end; - -procedure TDAEMSConnection.DoCommitTransaction; -begin - fMSConnection.Commit; -end; - -function TDAEMSConnection.CreateCustomConnection: TCustomConnection; -begin - fMSConnection := TMSConnection.Create(nil); - fMSConnection.LoginPrompt := FALSE; - - result := fMSConnection; -end; - -function TDAEMSConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAEMSQuery; -end; - -function TDAEMSConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAEADOStoredProcedure; -end; - -(*function SqlServerToDAType(aType:integer):TDADataType; -begin - case aType of - 34:result := datBlob; - 35:result := datMemo; - 36:result := datString; //uniqueidentifier - 48:result := datInteger; - 52:result := datInteger; - 56:result := datInteger; - 58:result := datDateTime; - 59:result := datFloat; - 60:result := datCurrency; - 61:result := datDateTime; - 62:result := datFloat; - //98 sql_variant - 99:result := datMemo;// ntext - 104:result := datBoolean; - 106:result := datFloat; - 108:result := datFloat; - 122:result := datCurrency; - 127:result := datInteger; - 165:result := datBlob; // varbinary - 167:result := datString; - 173:result := datBlob; // binary - 175:result := datString; // char - 189:result := datBlob; // timestamp - 231:result := datString; // nvarchar - 239:result := datString; //nchar - 240:result := datDateTime; - 241:result := datBlob;// xml - else result := datUnknown; - end; -end; - -procedure TDAEMSConnection.DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); -var - ds : TMSQuery; - lID:string; -begin - ds := TMSQuery.Create(NIL); - try - - ds.Connection := fMSConnection; - ds.SQL.Text := 'select * from sysobjects where xtype=''P'' and name='''+aStoredProcedureName+''''; - ds.Open; - try - if ds.EOF then RaiseError('Stored Procedure %s not found in database',[aStoredProcedureName]); - lID := ds.FieldbyName('id').AsString; - finally - ds.Close(); - end; - - ds.SQL.Text := 'select * from sys.parameters where object_id='''+lID+''' ORDER BY parameter_id'; - ds.Open; - try - Params := TDAParamCollection.Create(nil); - while not ds.Eof do begin - with Params.Add() do begin - Name := ds.FieldByName('name').AsString; - - DataType := SqlServerToDAType(ds.FieldByName('system_type_id').AsInteger); - Size := ds.FieldByName('max_length').AsInteger; - - {if ds.FieldByName('has_default_value').AsBoolean then - DefaultValue := ds.FieldByName('default_Value').AsInteger;} - - if ds.FieldByName('is_output').AsBoolean then - ParamType := daptOutput - else - ParamType := daptInput; - - end; - ds.Next(); - end; - finally - Close(); - end; - - finally - ds.Free; - end; -end;*) - -procedure TDAEMSConnection.DoRollbackTransaction; -begin - fMSConnection.Rollback; -end; - -function TDAEMSConnection.DoGetInTransaction: boolean; -begin - result := fMSConnection.InTransaction -end; - -function TDAEMSConnection.GetProviderName: string; -begin - result := oledb_MSSQLId; -end; - -function TDAEMSConnection.GetProviderType: TDAOleDBProviderType; -begin - result := oledb_MSSQL; -end; - -function TDAEMSConnection.GetCommandTimeout: Integer; -begin - if fMSConnection <> nil then - Result := fMSConnection.ConnectionTimeout - else - Result:=0; -end; - -procedure TDAEMSConnection.SetCommandTimeout(const Value: Integer); -begin - if fMSConnection <> nil then - fMSConnection.ConnectionTimeout := Value; -end; - -{ TDAEADODriver } - -function TDAEADODriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAEMSConnection; -end; - -function TDAEADODriver.GetDescription: string; -begin - result := 'Core Lab SDAC Driver'{$IFDEF DataAbstract_SchemaModelerOnly} + SchemaModelerOnly{$ENDIF}; -end; - -function TDAEADODriver.GetDriverID: string; -begin - result := 'SDAC'; -end; - -procedure TDAEADODriver.OnSDACTrace(Sender: TObject; Text: string; Flag: TDATraceFlag); -begin - if Assigned(fTraceCallback) then fTraceCallback(Sender, Text, integer(Flag)); -end; - -procedure TDAEADODriver.DoSetTraceOptions(TraceActive: boolean; TraceOptions: TDATraceOptions; Callback: TDALogTraceEvent); -var - sdacopts: TDATraceFlags; -begin - inherited; - - if TraceActive then begin - if (fMonitor = nil) then fMonitor := TMSSQLMonitor.Create(Self); - - fMonitor.Active := FALSE; - fMonitor.OnSQL := OnSDACTrace; - - sdacopts := []; - if (toPrepare in TraceOptions) then sdacopts := sdacopts + [tfQPrepare]; - if (toExecute in TraceOptions) then sdacopts := sdacopts + [tfQExecute]; - if (toFetch in TraceOptions) then sdacopts := sdacopts + [tfQFetch]; - if (toError in TraceOptions) then sdacopts := sdacopts + [tfError]; - if (toStmt in TraceOptions) then sdacopts := sdacopts + [tfStmt]; - if (toConnect in TraceOptions) then sdacopts := sdacopts + [tfConnect]; - if (toTransact in TraceOptions) then sdacopts := sdacopts + [tfTransact]; - if (toBlob in TraceOptions) then sdacopts := sdacopts + [tfBlob]; - if (toService in TraceOptions) then sdacopts := sdacopts + [tfService]; - if (toMisc in TraceOptions) then sdacopts := sdacopts + [tfMisc]; - if (toParams in TraceOptions) then sdacopts := sdacopts + [tfParams]; - - fTraceCallBack := Callback; - - fMonitor.TraceFlags := sdacopts; - fMonitor.Active := TRUE; - end - else begin - FreeAndNIL(fMonitor); - fTraceCallback := nil; - end; -end; - -function TDAEADODriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAEADODriver.GetDefaultCustomParameters: String; -begin - Result := 'Schemas=1;Integrated Security=SSPI'; -end; - - - -procedure TDAEADODriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - MSSQL_GetAuxParams(List); -end; - -{ TDAEMSQuery } - -function TDAEMSQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TMSQuery.Create(nil); - - TMSQuery(result).FetchAll := True; //for preventing creating an additional session when you call StartTransaction (an known issue of OLEDB) - TMSQuery(result).Unidirectional := True; - TMSQuery(result).ReadOnly := TRUE; - TMSQuery(result).Connection := TDAEMSConnection(aConnection).fMSConnection; -// TMSQuery(result).Options.AutoPrepare:=True; -end; - -function TDAEMSQuery.DoExecute: integer; -begin - inherited DoExecute; - result := TMSQuery(Dataset).RowsAffected; -end; - -function TDAEMSQuery.DoGetSQL: string; -begin - result := TMSQuery(Dataset).SQL.Text; -end; - -procedure TDAEMSQuery.DoPrepare(Value: boolean); -var - i: integer; - par: TParam; -begin - if Value and not TMSQuery(Dataset).Prepared and (TMSQuery(Dataset).ParamCount<>0) then begin - for I := 0 to GetParams.Count - 1 do begin - par:=TMSQuery(Dataset).ParamByName(GetParams[i].Name); - par.DataType:= DATypeToVCLType(GetParams[i].DataType); - if par.DataType = ftAutoInc then par.DataType:= ftInteger; - end; - end; - TMSQuery(Dataset).Prepared := Value; -end; - -procedure TDAEMSQuery.DoSetSQL(const Value: string); -begin - TMSQuery(Dataset).SQL.Text := Value; -end; - -procedure TDAEMSQuery.GetParamValues(Params: TDAParamCollection); -var - I: Integer; -begin - for i := 0 to TMSQuery(DataSet).Params.Count - 1 do - if (TMSQuery(DataSet).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then params[i].Value := TMSQuery(DataSet).Params[i].Value; -end; - -procedure TDAEMSQuery.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TMSQuery(Dataset).Params, true); -end; - -{ TDAEADOStoredProcedure } - -function TDAEADOStoredProcedure.CreateDataset( - aConnection: TDAEConnection): TDataset; -begin - result := TMSStoredProc.Create(nil); - TMSStoredProc(result).Connection := TDAEMSConnection(aConnection).fMSConnection; -end; - -function TDAEADOStoredProcedure.Execute: integer; -var - i: integer; - _params: TDAParamCollection; -begin - _params := GetParams; - - with TMSStoredProc(Dataset) do begin - for i := 0 to (Params.Count - 1) do - if (Params[i].ParamType in [ptInput, ptInputOutput]) then begin - if (Params[i].DataType in [ftMemo, ftBlob, ftGraphic]) and VarIsArray(_params[i].Value) - then Params[i].Value := VariantBinaryToString(_params[i].Value) - else Params[i].Value := _params[i].Value; - end; - - ExecProc; - result := RowsAffected; - - for i := 0 to (_params.Count-1) do - if (_params[i].ParamType in [daptOutput, daptInputOutput, daptResult]) - then _params[i].Value := params.ParamByName(_params[i].Name).Value; - end; -end; - -procedure TDAEADOStoredProcedure.GetParamValues(Params: TDAParamCollection); -var - i: Integer; -begin - for i := 0 to TMSStoredProc(DataSet).Params.Count - 1 do - if (TMSStoredProc(DataSet).Params[i].ParamType in [ptOutput, ptInputOutput, ptResult]) then params[i].Value := TMSStoredProc(DataSet).Params[i].Value; -end; - - -function TDAEADOStoredProcedure.GetStoredProcedureName: string; -begin - result := TMSStoredProc(Dataset).StoredProcName; -end; - -procedure TDAEADOStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TMSStoredProc(Dataset).StoredProcName := Name; -end; - -procedure TDAEADOStoredProcedure.SetParamValues(Params: TDAParamCollection); -begin - WriteCrLabsParamValues(Params, TMSStoredProc(Dataset).Params); -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); - -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASQLiteDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASQLiteDriver.pas deleted file mode 100644 index db0ba9d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDASQLiteDriver.pas +++ /dev/null @@ -1,356 +0,0 @@ -unit uDASQLiteDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -{$R DataAbstract_SQLiteDriver_Glyphs.res} - -interface - -uses Windows, Classes, DB, uDAEngine, uDAInterfaces, uROClasses, uDAUtils, ASGSQLite3, uDASQLiteInterfaces; - -type - { TDASQLiteDriver } - TDASQLiteDriver = class(TDADriverReference) - end; - - { TDAESQLiteDriver } - TDAESQLiteDriver = class(uDASQLiteInterfaces.TDASQLiteDriver, IDADriver40) - protected - function GetConnectionClass: TDAEConnectionClass; override; - - // IDADriver - function GetDriverID: string; override; - function GetDescription: string; override; - - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; - // IDADriver40 - function GetProviderDefaultCustomParameters(Provider: string): string; safecall; - public - end; - - // for access to protected methods - TDAASQLite3DB = class(TASQLite3DB) - private - public - function GetLastInsertRow: integer; - end; - - { TSQLiteConnection } - TSQLiteConnection = class(TDAConnectionWrapper) - private - fConnection: TDAASQLite3DB; - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: Boolean); override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property Connection: TDAASQLite3DB read fConnection; - end; - - { TDAESQLiteConnection } - TDAESQLiteConnection = class(TDASQLiteConnection) - private - FtransactionFlag: Boolean; - fConnection: TSQLiteConnection; - protected - // TDAEConnection - function CreateCustomConnection: TCustomConnection; override; - function GetDatasetClass: TDAEDatasetClass; override; - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; - public - constructor Create(aDriver: TDAEDriver; aName: string = ''); override; - end; - - { TDAESQLiteQuery } - TDAESQLiteQuery = class(TDAEDataset) - private - protected - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure DoPrepare(Value: boolean); override; safecall; - function DoExecute: integer; override; - function DoGetSQL: string; override; - procedure DoSetSQL(const Value: string); override; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses SysUtils, uDADriverManager, uDARes, Variants, - uROBinaryHelpers, uDASQL92Interfaces; - -var - _driver: TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDASQLiteDriver]); -end; - -{$IFDEF DataAbstract_SchemaModelerOnly} -{$INCLUDE ..\DataAbstract_SchemaModelerOnly.inc} -{$ENDIF DataAbstract_SchemaModelerOnly} - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAESQLiteDriver.Create(nil); - result := _driver; -end; - -{ TSQLiteConnection } - -constructor TSQLiteConnection.Create(AOwner: TComponent); -begin - inherited; - fConnection := TDAASQLite3DB.Create(nil); -end; - -destructor TSQLiteConnection.Destroy; -begin - inherited; - fConnection.Free; -end; - -function TSQLiteConnection.GetConnected: Boolean; -begin - result := fConnection.Connected; -end; - -procedure TSQLiteConnection.SetConnected(Value: Boolean); -begin - fConnection.Connected := Value; -end; - -{ TDAESQLiteConnection } - -procedure TDAESQLiteConnection.DoApplyConnectionString( - aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - sName, sValue: string; - i: integer; -begin - inherited; - with aConnStrParser do begin - TSQLiteConnection(aConnectionObject).Connection.Database := Database; - for i := 0 to (AuxParamsCount - 1) do begin - sName := AuxParamNames[i]; - sValue := AuxParams[sName]; - if AnsiSameText(sName, 'TransactionType') then begin - if AnsiSameText(sValue, 'DEFAULT') or - AnsiSameText(sValue, 'DEFERRED') or - AnsiSameText(sValue, 'IMMEDIATE') or - AnsiSameText(sValue, 'EXCLUSIVE') then - fConnection.fConnection.TransactionType := AnsiUpperCase(sValue); - end - else if AnsiSameText(sName, 'DriverDll') then begin - fConnection.fConnection.DriverDll := sValue - end - else if AnsiSameText(sName, 'CharacterEncoding') then begin - if AnsiSameText(sValue, 'STANDARD') or - AnsiSameText(sValue, 'UTF8') then - fConnection.fConnection.CharacterEncoding := AnsiUpperCase(sValue); - end; - end; - end; -end; - -function TDAESQLiteConnection.DoBeginTransaction: integer; -begin - result := -1; - fConnection.Connection.StartTransaction; - FtransactionFlag := True; -end; - -procedure TDAESQLiteConnection.DoCommitTransaction; -begin - fConnection.Connection.Commit; - FtransactionFlag := False; -end; - -function TDAESQLiteConnection.CreateCustomConnection: TCustomConnection; -begin - fConnection := TSQLiteConnection.Create(nil); - result := fConnection; -end; - -function TDAESQLiteConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAESQLiteQuery; -end; - -procedure TDAESQLiteConnection.DoRollbackTransaction; -begin - FtransactionFlag := False; - fConnection.Connection.RollBack; -end; - -function TDAESQLiteConnection.DoGetInTransaction: boolean; -begin - Result := FtransactionFlag; -end; - -procedure TDAESQLiteConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -var - List: TList; - i: integer; - fld: TDAField; -begin - inherited DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), Fields); - List := TList.Create; - try - fConnection.Connection.GetTableInfo(aTableName, List); - for i := 0 to List.Count - 1 do - with TASQLite3Field(List[i]) do begin - fld := Fields.FieldByName(FieldName); - fld.Required := FieldNN <> 0; - fld.InPrimaryKey := FieldPK <> 0; - if fld.InPrimaryKey then fld.Required := True; - fld.DefaultValue := FieldDefault; - end; - finally - List.Free; - end; -end; - -function TDAESQLiteConnection.IdentifierNeedsQuoting( - const iIdentifier: string): boolean; -begin - Result := inherited IdentifierNeedsQuoting(iIdentifier) or - SQL92_IdentifierNeedsQuoting(iIdentifier); -end; - -constructor TDAESQLiteConnection.Create(aDriver: TDAEDriver; - aName: string); -begin - inherited; - FtransactionFlag := False; -end; - -function TDAESQLiteConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -begin - Result := fConnection.Connection.GetLastInsertRow; -end; - -procedure TDAESQLiteConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -begin - inherited; - // SQL Features That SQLite Does Not Implement -end; - -{ TDAESQLiteDriver } - -function TDAESQLiteDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - result := [doDatabaseName, doCustom]; -end; - -function TDAESQLiteDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAESQLiteConnection; -end; - -function TDAESQLiteDriver.GetDescription: string; -begin - result := 'SQLite Driver'; -end; - -function TDAESQLiteDriver.GetDriverID: string; -begin - result := 'SQLite'; -end; - -procedure TDAESQLiteDriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -begin - inherited; - List.Add('TransactionType=(DEFAULT,DEFERRED,IMMEDIATE,EXCLUSIVE)'); - List.Add('DriverDll=SQLite3.dll'); - List.Add('CharacterEncoding=(STANDARD,UTF8)'); -end; - -function TDAESQLiteDriver.GetProviderDefaultCustomParameters( - Provider: string): string; -begin - Result := ''; -end; - -{ TDAESQLiteQuery } - -function TDAESQLiteQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TASQLite3Query.Create(nil); - TASQLite3Query(result).Connection := TDAESQLiteConnection(aConnection).fConnection.Connection; -end; - -function TDAESQLiteQuery.DoExecute: integer; -begin - Result := -1; - inherited DoExecute; -end; - -function TDAESQLiteQuery.DoGetSQL: string; -begin - result := TASQLite3Query(Dataset).SQL.Text; -end; - -procedure TDAESQLiteQuery.DoPrepare(Value: boolean); -begin - // nothing -end; - -procedure TDAESQLiteQuery.DoSetSQL(const Value: string); -begin - TASQLite3Query(Dataset).SQL.Text := Value; -end; - -exports GetDriverObject name func_GetDriverObject; - -{ TDAASQLite3DB } - -function TDAASQLite3DB.GetLastInsertRow: integer; -begin - result := SQLite3_LastInsertRow(DBHandle) -end; - -initialization - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAZeosDriver.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAZeosDriver.pas deleted file mode 100644 index c1d4546..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/Drivers/uDAZeosDriver.pas +++ /dev/null @@ -1,1067 +0,0 @@ -unit uDAZeosDriver; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - Driver Library } -{ } -{ compiler: Delphi 6 and up , FPC } -{ platform: Win32 } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the Data Abstract } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I ..\DataAbstract.inc} - -interface - -uses Classes, DB, - ZConnection, ZSqlMetadata, - uDAInterfaces, - uDAADOInterfaces, - uDAIBInterfaces, - uDASQLiteInterfaces, - uDAOracleInterfaces, - uDAMySQLInterfaces, - uDAPostgresInterfaces, - uROClasses, uDAEngine, uDAUtils; - -type - TDAZEOSDriverType = ( - dazUnknown, - dazADO, - dazASA, - dazIBMDB2, - dazInterBase, - dazMSSQL, - dazMySQL, - dazOracle, - dazPostgreSQL, - dazSQLite, - dazSybase); - -const - ZEOS_ADO = 'ado'; - ZEOS_ASA = 'asa'; - ZEOS_IBMDB2 = 'db2'; - ZEOS_Interbase = 'interbase'; - ZEOS_Firebird = 'firebird'; - ZEOS_MSSQL = 'mssql'; - ZEOS_MySQL = 'mysql'; - ZEOS_ORACLE = 'oracle'; - ZEOS_PostgreSQL = 'postgresql'; - ZEOS_SQLite = 'sqlite'; - ZEOS_SYBASE = 'sybase'; - -type - { TDAZeosDriver } - TDAZeosDriver = class(TDADriverReference) - end; - - { TDAESampleDriver } - TDAESampleDriver = class(TDAEDriver, IDADriver40) - // TDAESampleDriver = class(TDAIBDriver, IDADriver40) - protected - function GetConnectionClass: TDAEConnectionClass; override; - //procedure CustomizeConnectionObject(aConnection: TDAEConnection); override; - //procedure DoSetTraceOptions(TraceActive: boolean; TraceFlags: TDATraceOptions; Callback: TDALogTraceEvent); override; - - { IDADriver } - function GetDriverID: string; override; safecall; - function GetDescription: string; override; safecall; - // function GetMajVersion: byte; override; safecall; - // function GetMinVersion: byte; override; safecall; - procedure GetAuxDrivers(out List: IROStrings); override; safecall; - procedure GetAuxParams(const AuxDriver: string; out List: IROStrings); override; - function GetAvailableDriverOptions: TDAAvailableDriverOptions; override; safecall; - // procedure Initialize; override; safecall; - // procedure Finalize; override; safecall; - // function GetDefaultCustomParameters: string; override; safecall; - function GetDefaultConnectionType(const AuxDriver: string): string; override; safecall; - - { IDADriver40 } - function GetProviderDefaultCustomParameters(Provider: string): string; safecall; - public - end; - - TZEOSConnection = class(TDAConnectionWrapper) - private - fConnection: TZConnection; - fMetaData: TZSQLMetaData; - protected - function GetConnected: Boolean; override; - procedure SetConnected(Value: boolean); override; - public - constructor Create(AOwner: TComponent); override; - property Connection: TZConnection read fConnection write fConnection; - end; - - { TDAESampleConnection } - TDAESampleConnection = class(TDAEConnection, IDAConnection, - IDAADOConnection, - IDAInterbaseConnection, //IDAIBTransactionAccess, IDAIBConnectionProperties, - IDAOracleConnection, - IDAMySQLConnection, - IDASQLiteConnection, - IDAPostgresConnection, - // IDAConnectionModelling, - IDACanQueryDatabaseNames, - IDAFileBasedDatabase, - // IDADirectoryBasedDatabase, - IDAUseGenerators, - IDACanQueryGeneratorsNames, - IDATestableObject) - private - fNativeConnection: TZEOSConnection; - fDriverType: TDAZEOSDriverType; - fDriverName: string; - fADOProviderName: string; - fADOProviderType: TDAOleDBProviderType; - fMSSQLSchemaEnabled: Boolean; - procedure DoGetNames(AList: IROStrings; AObjectType: TDAObjecttype); - protected - function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; - - function CreateCustomConnection: TCustomConnection; override; - function CreateMacroProcessor: TDASQLMacroProcessor; override; - function GetDatasetClass: TDAEDatasetClass; override; - function GetStoredProcedureClass: TDAEStoredProcedureClass; override; - procedure DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); override; - - // transaction support - function DoBeginTransaction: integer; override; - procedure DoCommitTransaction; override; - procedure DoRollbackTransaction; override; - function DoGetInTransaction: boolean; override; - - procedure DoGetTableNames(out List: IROStrings); override; - procedure DoGetViewNames(out List: IROStrings); override; - procedure DoGetStoredProcedureNames(out List: IROStrings); override; - - procedure DoGetTableFields(const aTableName: string; out Fields: TDAFieldCollection); override; - // procedure DoGetQueryFields(const aSQL: string; aParamsIfNeeded: TDAParamCollection; out Fields: TDAFieldCollection); override; - // procedure DoGetViewFields(const aViewName: string; out Fields: TDAFieldCollection); override; - - procedure DoGetStoredProcedureParams(const aStoredProcedureName: string; out Params: TDAParamCollection); override; - procedure DoGetForeignKeys(out ForeignKeys: TDADriverForeignKeyCollection); override; - - function DoGetLastAutoInc(const GeneratorName: string): integer; override; - - { IDATestableObject } - // procedure Test; override; safecall; - - { IDAConnection } - - function GetSPSelectSyntax(HasArguments: Boolean): string; override; safecall; - function GetQuoteChars: TDAQuoteCharArray; override; safecall; - // function IdentifierIsQuoted(const iIdentifier: string): boolean; override; safecall; - function IdentifierNeedsQuoting(const iIdentifier: string): boolean; override; safecall; - // function QuoteIdentifierIfNeeded(const iIdentifier: string): string; override; safecall; - // function QuoteIdentifier(const iIdentifier: string): string; override; safecall; - // function QuoteFieldNameIfNeeded(const aTableName, aFieldName: string): string; override;safecall; - // function QuoteFieldName(const aTableName, aFieldName: string): string; override; safecall; - - // function NewCommand(const Text: string; CommandType: TDASQLStatementType; const aCommandName: string = ''): IDASQLCommand; override; safecall; - // function NewDataset(const SQL: string; const aDatasetName: string = ''): IDADataset; override; safecall; - - // function isAlive: Boolean; override; safecall; - // function GetQueryBuilder: TDAQueryBuilder; override; safecall; - - { IDAADOConnection } - function GetProviderName: string; safecall; - function GetProviderType: TDAOleDBProviderType; safecall; - function GetCommandTimeout: Integer; safecall; - procedure SetCommandTimeout(const Value: Integer); safecall; - - { IDAInterbaseConnection } - // nothing - - { IDAIBTransactionAccess } - //function GetTransaction: TObject; safecall; - //procedure CommitRetaining; safecall; - //procedure RollbackRetaining; safecall; - - { IDAIBConnectionProperties } - function GetRole: string; safecall; - procedure SetRole(const Value: string); safecall; - function GetSQLDialect: integer; safecall; - procedure SetSQLDialect(Value: integer); safecall; - function GetCharset: string; safecall; - procedure SetCharset(const Value: string); safecall; - - procedure Commit; safecall; - // procedure CommitRetaining; safecall; - procedure Rollback; safecall; - // procedure RollbackRetaining; safecall; - - { IDAOracleConnection } - // nothing - - { IDAConnectionModelling } - // function FieldToDeclaration(aField: TDAField): string; safecall; - // function BuildCreateTableSQL(aDataSet: TDADataSet; const aOverrideName: string = ''): string; safecall; - // procedure CreateTable(aDataSet: TDADataSet; const aOverrideName: string = ''); safecall; - - { IDACanQueryDatabaseNames } - function GetDatabaseNames: IROStrings; - - { IDAFileBasedDatabase } - function GetFileExtensions: IROStrings; - - { IDADirectoryBasedDatabase } - // nothing - - { IDAUseGenerators } - function GetNextAutoinc(const GeneratorName: string): integer; safecall; - - { IDACanQueryGeneratorsNames } - function GetGeneratorNames: IROStrings; - - public - constructor Create(aDriver: TDAEDriver; aName: string = ''); override; - end; - - { TDAESampleQuery } - TDAESampleQuery = class(TDAEDataset {, IDAMustSetParams}) - protected - // procedure PrepareSQLStatement; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - procedure DoPrepare(Value: boolean); override; safecall; - // function DoExecute: integer; override; safecall; - procedure DoSetSQL(const Value: string); override; safecall; - function DoGetSQL: string; override; safecall; - // function intVCLTypeToDAType(aFieldType: TFieldType): TDADataType;override; - - { IDASQLCommand } - // procedure RefreshParams; override; safecall; - // function Execute: integer; override; safecall; - // function DoGetRecordCount: integer; override; - // function DoGetActive: boolean; override; - // procedure DoSetActive(Value: boolean); override; - // function DoGetBOF: boolean; override; - // function DoGetEOF: boolean; override; - // procedure DoNext; override; - // function DoLocate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override; - - // IDAMustSetParams - // procedure SetParamValues(Params: TDAParamCollection); safecall; - // procedure GetParamValues(Params: TDAParamCollection); safecall; - public - end; - - { TDAESampleStoredProcedure } - TDAESampleStoredProcedure = class(TDAEStoredProcedure {, IDAMustSetParams}) - protected - // Internal - // function DoGetStoredProcedureName: string; override; - // procedure DoSetStoredProcedureName(const Name: string); override; - procedure DoPrepare(Value: boolean); override; - // procedure RefreshParams; override; safecall; - - // IDAStoredProcedure - function GetStoredProcedureName: string; override; safecall; - procedure SetStoredProcedureName(const Name: string); override; safecall; - - // procedure PrepareSQLStatement; override; - function CreateDataset(aConnection: TDAEConnection): TDataset; override; - // function DoExecute: integer; override; safecall; - procedure DoSetSQL(const Value: string); override; safecall; - function DoGetSQL: string; override; safecall; - // function intVCLTypeToDAType(aFieldType: TFieldType): TDADataType;override; - - { IDASQLCommand } - // procedure RefreshParams; override; safecall; - // function Execute: integer; override; safecall; - // function DoGetRecordCount: integer; override; - // function DoGetActive: boolean; override; - // procedure DoSetActive(Value: boolean); override; - // function DoGetBOF: boolean; override; - // function DoGetEOF: boolean; override; - // procedure DoNext; override; - // function DoLocate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override; - - // IDAMustSetParams - // procedure SetParamValues(Params: TDAParamCollection); safecall; - // procedure GetParamValues(Params: TDAParamCollection); safecall; - end; - -procedure Register; - -function GetDriverObject: IDADriver; stdcall; - -implementation - -uses - {$IFDEF FPC}LResources,{$ENDIF} - {$IFNDEF LINUX}Windows, {$ENDIF} - Variants, Types, SysUtils, - uDADriverManager, uDARes, uDASQL92Interfaces, - ZDbcIntfs, zClasses, ZDataset, ZStoredProcedure; - -{$IFNDEF FPC} - {$R DataAbstract_ZeosDriver_Glyphs.res} -{$ENDIF} - -var - _driver : TDAEDriver = nil; - -procedure Register; -begin - RegisterComponents(DAPalettePageName, [TDAZeosDriver]); -end; - -function GetDriverObject: IDADriver; -begin - if (_driver = nil) then _driver := TDAESampleDriver.Create(nil); - result := _driver; -end; - -function ZEOSDriverIdToZEOSDriverType(aAuxDriver: string): TDAZEOSDriverType; -begin - aAuxDriver := LowerCase(aAuxDriver); - if aAuxDriver = '' then Result := dazUnknown - else if Pos(ZEOS_ADO, aAuxDriver) = 1 then Result := dazADO - else if Pos(ZEOS_ASA, aAuxDriver) = 1 then Result := dazASA - else if Pos(ZEOS_IBMDB2, aAuxDriver) = 1 then Result := dazIBMDB2 - else if Pos(ZEOS_Interbase, aAuxDriver) = 1 then Result := dazInterBase - else if Pos(ZEOS_Firebird, aAuxDriver) = 1 then Result := dazInterBase - else if Pos(ZEOS_MSSQL, aAuxDriver) = 1 then Result := dazMSSQL - else if Pos(ZEOS_MySQL, aAuxDriver) = 1 then Result := dazMySQL - else if Pos(ZEOS_ORACLE, aAuxDriver) = 1 then Result := dazOracle - else if Pos(ZEOS_PostgreSQL, aAuxDriver) = 1 then Result := dazPostgreSQL - else if Pos(ZEOS_SQLite, aAuxDriver) = 1 then Result := dazSQLite - else if Pos(ZEOS_SYBASE, aAuxDriver) = 1 then Result := dazSybase - else Result := dazUnknown; -end; - -{ TDAESampleConnection } - -procedure TDAESampleConnection.DoApplyConnectionString(aConnStrParser: TDAConnectionStringParser; aConnectionObject: TCustomConnection); -var - i : Integer; - sName, sValue : string; -begin - inherited; - with aConnStrParser do begin - fDriverName := AuxDriver; - fDriverType := ZEOSDriverIdToZEOSDriverType(AuxDriver); - fADOProviderName := AuxParams['Provider']; - FADOProviderType := OleDBDriverIdToOleDBProviderType(FADOProviderName); - - fNativeConnection.fConnection.Protocol := AuxDriver; - if (Self.UserID <> '') then - fNativeConnection.fConnection.User := Self.UserID - else - fNativeConnection.fConnection.User := UserID; - - if (Self.Password <> '') then - fNativeConnection.fConnection.Password := Self.Password - else - fNativeConnection.fConnection.Password := Password; - if Server <> '' then fNativeConnection.fConnection.HostName := Server; - if Database <> '' then begin - fNativeConnection.fConnection.Database := Database; - if fDriverType <> dazSQLite then - fNativeConnection.fConnection.Catalog := Database; - end; - - for i := 0 to AuxParamsCount - 1 do begin - sName := AuxParamNames[i]; - if sName = '' then Continue; - sValue := AuxParams[AuxParamNames[i]]; - if AnsiSameText(sName, 'role') then begin - if fDriverType = dazInterBase then sName := 'rolename'; - end else if AnsiSameText(sName, 'charset') then begin - if fDriverType = dazInterBase then sName := 'codepage'; - end else if AnsiSameText(sName, 'port') then begin - if StrToIntDef(sValue, -1) <> -1 then fNativeConnection.fConnection.Port := StrToInt(sValue); - end else begin - if sName[1] = '@' then sName := Pchar(sName) + 1; - end; - fNativeConnection.fConnection.Properties.Values[sName] := sValue; - end; - - if fDriverType = dazADO then begin - if fADOProviderName = '' then - raise EDADriverException.Create('No proviver specified for ADO auxdriver'); - - fNativeConnection.fConnection.Properties.Values['User ID'] := fNativeConnection.fConnection.User; - fNativeConnection.fConnection.Properties.Values['Password'] := fNativeConnection.fConnection.Password; - if FADOProviderType = oledb_Jet then begin - fNativeConnection.fConnection.Properties.Values['Data Source'] := Database; - end else begin - if Database <> '' then begin - if fADOProviderType = oledb_Postgresql then - fNativeConnection.fConnection.Properties.Values['Location'] := Database - else - fNativeConnection.fConnection.Properties.Values['Initial Catalog'] := Database; - end; - if Server <> '' then fNativeConnection.fConnection.Properties.Values['Data Source'] := Server; - if fADOProviderType <> oledb_Postgresql then fNativeConnection.fConnection.Properties.Values['OLE DB SERVICES'] := '-2'; - end; - fNativeConnection.fConnection.Database := ''; - for i := 0 to fNativeConnection.fConnection.Properties.Count - 1 do begin - sName:=fNativeConnection.fConnection.Properties.Names[i]; - sValue:=fNativeConnection.fConnection.Properties.Values[sName]; - fNativeConnection.fConnection.Database:=fNativeConnection.fConnection.Database + sName+'='+sValue+';' - end; - end; - end; -end; - -function TDAESampleConnection.DoBeginTransaction: integer; -begin - fNativeConnection.fConnection.StartTransaction; - Result := 0; -end; - -procedure TDAESampleConnection.DoCommitTransaction; -begin - fNativeConnection.fConnection.Commit; -end; - -function TDAESampleConnection.CreateCustomConnection: TCustomConnection; -begin - fNativeConnection := TZEOSConnection.Create(nil); - result := fNativeConnection; -end; - -function TDAESampleConnection.GetDatasetClass: TDAEDatasetClass; -begin - result := TDAESampleQuery; -end; - -function TDAESampleConnection.GetStoredProcedureClass: TDAEStoredProcedureClass; -begin - result := TDAESampleStoredProcedure; -end; - -procedure TDAESampleConnection.DoRollbackTransaction; -begin - fNativeConnection.fConnection.Rollback; -end; - -function TDAESampleConnection.DoGetInTransaction: boolean; -begin - Result := fNativeConnection.fConnection.InTransaction -end; - -function TDAESampleConnection.QueryInterface(const IID: TGUID; out Obj): HResult; -begin - Result := E_NOINTERFACE; - if IsEqualGUID(IID, IDAADOConnection) then begin - if fDriverType <> dazADO then Exit; - end else if IsEqualGUID(IID, IDAInterbaseConnection) then begin - if fDriverType <> dazInterbase then Exit; - end else if IsEqualGUID(IID, IDAIBTransactionAccess) then begin - if fDriverType <> dazInterbase then Exit; - end else if IsEqualGUID(IID, IDAIBConnectionProperties) then begin - if fDriverType <> dazInterbase then Exit; - end else if IsEqualGUID(IID, IDAOracleConnection) then begin - if fDriverType <> dazOracle then Exit; - end else if IsEqualGUID(IID, IDASQLiteConnection) then begin - if fDriverType <> dazSQLite then Exit; - end else if IsEqualGUID(IID, IDAPostgresConnection) then begin - if fDriverType <> dazPostgreSQL then Exit; - end else if IsEqualGUID(IID, IDAMySQLConnection) then begin - if fDriverType <> dazMySQL then Exit; - end else if IsEqualGUID(IID, IDACanQueryDatabaseNames) then begin - if (fDriverType in [dazInterBase, dazSQLite]) then Exit; - end else if IsEqualGUID(IID, IDAFileBasedDatabase) then begin - if not (fDriverType in [dazInterBase, dazSQLite]) then Exit; - end else if IsEqualGUID(IID, IDAUseGenerators) then begin - if not (fDriverType in [dazInterBase, dazOracle, dazPostgreSQL]) then Exit; - end else if IsEqualGUID(IID, IDACanQueryGeneratorsNames) then begin - if not (fDriverType in [dazInterBase]) then Exit; - end - - // else if IsEqualGUID(IID, IDAConnectionModelling) then - // else if IsEqualGUID(IID, IDADirectoryBasedDatabase) then - ; - Result := inherited QueryInterface(IID, Obj); -end; - -constructor TDAESampleConnection.Create(aDriver: TDAEDriver; aName: string); -begin - inherited Create(aDriver, aName); - fMSSQLSchemaEnabled := True; -end; - -function TDAESampleConnection.CreateMacroProcessor: TDASQLMacroProcessor; -begin - case fDriverType of - dazInterBase: Result := IB_CreateMacroProcessor; - dazMSSQL: Result := MSSQL_CreateMacroProcessor; - dazOracle: Result := Oracle_CreateMacroProcessor; - else - Result := inherited CreateMacroProcessor; - end; -end; - -function TDAESampleConnection.GetFileExtensions: IROStrings; -begin - case fDriverType of - dazInterBase: Result := IB_GetFileExtensions; - dazSQLite: Result := SQLite_GetFileExtensions; - else - Result := NewROStrings; - end; -end; - -function TDAESampleConnection.GetGeneratorNames: IROStrings; -begin - case fDriverType of - dazInterBase: Result:= IB_GetGeneratorNames(GetDatasetClass.Create(Self)); - else - Result := NewROStrings; - end; -end; - -procedure TDAESampleConnection.DoGetTableNames(out List: IROStrings); -begin - inherited; - case fDriverType of - dazMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable, fMSSQLSchemaEnabled); - dazInterBase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotTable); - dazMYSQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable, fNativeConnection.fConnection.Catalog); - dazSQLite: SQLite_GetObjectNames(GetDatasetClass.Create(Self), List, dotTable); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotTable, fMSSQLSchemaEnabled) - else begin - DoGetNames(List, dotTable); - end; - end -end; - -procedure TDAESampleConnection.DoGetViewNames(out List: IROStrings); -begin - inherited; - case fDriverType of - dazMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView, fMSSQLSchemaEnabled); - dazInterBase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotView); - dazMYSQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView, fNativeConnection.fConnection.Catalog); - dazSQLite: SQLite_GetObjectNames(GetDatasetClass.Create(Self), List, dotView); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotView, fMSSQLSchemaEnabled) - else begin - DoGetNames(List, dotView); - end; - end -end; - -procedure TDAESampleConnection.DoGetStoredProcedureNames( - out List: IROStrings); -begin - inherited; - case fDriverType of - dazMSSQL: MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure, fMSSQLSchemaEnabled); - dazInterBase: IB_GetObjectNames(GetDatasetClass.Create(Self), List, dotProcedure); - dazMYSQL: MYSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure, fNativeConnection.fConnection.Catalog); - dazSQLite: SQLite_GetObjectNames(GetDatasetClass.Create(Self), List, dotProcedure); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - MSSQL_DoGetNames(GetDatasetClass.Create(Self), List, dotProcedure, fMSSQLSchemaEnabled) - else begin - DoGetNames(List, dotProcedure); - end; - end -end; - -procedure TDAESampleConnection.DoGetTableFields(const aTableName: string; - out Fields: TDAFieldCollection); -var - lschema, ltbl : string; - fld : TDAField; -begin - case fDriverType of - dazMSSQL: MSSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - dazInterBase: IB_GetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields); - dazMySQL: MYSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName),GetDatasetClass.Create(Self),Fields, fNativeConnection.fConnection.Catalog); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - MSSQL_DoGetTableFields(QuoteIdentifierIfNeeded(aTableName), GetDatasetClass.Create(Self), Fields) - else begin - inherited; - if Pos('.', aTableName) > 0 then begin - lschema := Trim(Copy(aTableName, 1, Pos('.', aTableName) - 1)); - ltbl := Trim(Copy(aTableName, Pos('.', aTableName) + 1, Length(aTableName))); - end else begin - lschema := ''; - ltbl := aTableName; - end; - // required+default value - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetColumns(fNativeConnection.fConnection.Catalog, lschema, ltbl, '') do - while Next do begin - fld := Fields.FindField(GetStringByName('COLUMN_NAME')); - if fld = nil then Continue; - fld.Required := GetStringByName('IS_NULLABLE') = 'NO'; - - fld.DefaultValue := GetStringByName('COLUMN_DEF'); - if not TestDefaultValue(fld.DefaultValue, fld.DataType) then - fld.DefaultValue := ''; - end; - // pk - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetPrimaryKeys(fNativeConnection.fConnection.Catalog, lschema, ltbl) do - while Next do begin - fld := Fields.FindField(GetStringByName('COLUMN_NAME')); - if fld = nil then Continue; - fld.Required := True; - fld.InPrimaryKey := True; - end; - end; - end -end; - -procedure TDAESampleConnection.DoGetForeignKeys( - out ForeignKeys: TDADriverForeignKeyCollection); -var - lSupportedSchema : boolean; -begin - inherited; - case fDriverType of - dazMSSQL: MSSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, fMSSQLSchemaEnabled); - dazInterBase: IB_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys); - dazMySQL: MYSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, fNativeConnection.fConnection.Catalog); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - MSSQL_DoGetForeignKeys(GetDatasetClass.Create(Self), ForeignKeys, fMSSQLSchemaEnabled) - else begin - lSupportedSchema := fNativeConnection.fConnection.DbcConnection.GetMetadata.SupportsSchemasInDataManipulation; - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetCrossReference(fNativeConnection.fConnection.Catalog, '', '', fNativeConnection.fConnection.Catalog, '', '') do - while Next do - with ForeignKeys.Add do begin - if lSupportedSchema then begin - PKTable := GetStringByName('PKTABLE_SCHEM') + '.' + GetStringByName('PKTABLE_NAME'); - FKTable := GetStringByName('FKTABLE_SCHEM') + '.' + GetStringByName('FKTABLE_NAME'); - end - else begin - PKTable := GetStringByName('PKTABLE_NAME'); - FKTable := GetStringByName('FKTABLE_NAME'); - end; - PKField := GetStringByName('PKCOLUMN_NAME'); - FKField := GetStringByName('FKCOLUMN_NAME'); - end; - end; - end; -end; - -function TDAESampleConnection.GetDatabaseNames: IROStrings; -begin - case fDriverType of - dazMSSQL: Result := MSSQL_GetDatabaseNames(Self); - dazMySQL: Result := MYSQL_GetDatabaseNames(GetDatasetClass.Create(Self)); - dazPostgreSQL: Result := Postgres_GetDatabaseNames(Self); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - Result := MSSQL_GetDatabaseNames(Self) - else begin - Result := NewROStrings; - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetCatalogs do - while Next do - Result.Add(GetStringByName('TABLE_CAT')); - end; - end; -end; - -function TDAESampleConnection.GetQuoteChars: TDAQuoteCharArray; -var - s : string; -begin - Result := inherited GetQuoteChars; - case fDriverType of - dazMSSQL: Result := MSSQL_GetQuoteChars; - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - Result := MSSQL_GetQuoteChars - else begin - s := fNativeConnection.fConnection.DbcConnection.GetMetadata.GetIdentifierQuoteString; - if Length(s) = 1 then begin - Result[0] := s[1]; - Result[1] := s[1]; - end - else if Length(s) = 2 then begin - Result[0] := s[1]; - Result[1] := s[2]; - end - end; - end; -end; - -function TDAESampleConnection.IdentifierNeedsQuoting( - const iIdentifier: string): boolean; -var - lList : TstringList; - i : integer; -begin - Result:= inherited IdentifierNeedsQuoting(iIdentifier); - if not result then - case fDriverType of - dazMSSQL: Result := MSSQL_IdentifierNeedsQuoting(iIdentifier); - dazInterBase: Result := IB_IdentifierNeedsQuoting(iIdentifier, GetSQLDialect); - dazMySQL: Result := MYSQL_IdentifierNeedsQuoting(iIdentifier); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - Result := MSSQL_IdentifierNeedsQuoting(iIdentifier) - else begin - lList := TStringList.Create; - try - lList.CommaText := - fNativeConnection.fConnection.DbcConnection.GetMetadata.GetSQLKeywords + ',' + - fNativeConnection.fConnection.DbcConnection.GetMetadata.GetNumericFunctions + ',' + - fNativeConnection.fConnection.DbcConnection.GetMetadata.GetStringFunctions + ',' + - fNativeConnection.fConnection.DbcConnection.GetMetadata.GetSystemFunctions + ',' + - fNativeConnection.fConnection.DbcConnection.GetMetadata.GetTimeDateFunctions; - for i := 0 to lList.Count - 1 do - if CompareText(llist[i], iIdentifier) = 0 then begin - Result := True; - Exit; - end; - finally - lList.Free; - end - end; - end; -end; - -function TDAESampleConnection.GetRole: string; -begin - Result := fNativeConnection.fConnection.Properties.Values['rolename']; -end; - -function TDAESampleConnection.GetSQLDialect: integer; -begin - Result := StrToIntDef(fNativeConnection.fConnection.Properties.Values['dialect'], -1); - if Result = -1 then begin - if fDriverName = 'interbase-5' then - Result := 1 - else - Result := 3; - end; -end; - -procedure TDAESampleConnection.SetRole(const Value: string); -begin - fNativeConnection.fConnection.Properties.Values['rolename'] := Value; -end; - -procedure TDAESampleConnection.SetSQLDialect(Value: integer); -begin - fNativeConnection.fConnection.Properties.Values['dialect'] := IntToStr(Value); -end; - -function TDAESampleConnection.GetCharset: string; -begin - Result := fNativeConnection.fConnection.Properties.Values['codepage']; -end; - -procedure TDAESampleConnection.SetCharset(const Value: string); -begin - fNativeConnection.fConnection.Properties.Values['codepage'] := Value; -end; - -procedure TDAESampleConnection.Commit; -begin - Self.DoCommitTransaction; -end; - -procedure TDAESampleConnection.Rollback; -begin - Self.DoRollbackTransaction; -end; - -function TDAESampleConnection.DoGetLastAutoInc( - const GeneratorName: string): integer; -begin - Result := -1; - case fDriverType of - dazMSSQL: Result := MSSQL_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dazInterBase: Result := IB_GetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dazMySQL: Result := MySQL_GetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dazOracle: Result := Oracle_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - dazPostgreSQL: Result := Postgres_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - Result := MSSQL_DoGetLastAutoInc(GeneratorName, GetDatasetClass.Create(Self)) - else ; - end; -end; - -function TDAESampleConnection.GetNextAutoinc( - const GeneratorName: string): integer; -begin - Result := -1; - case fDriverType of - dazInterBase: Result := IB_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - dazOracle: Result := Oracle_GetNextAutoinc(GeneratorName, GetDatasetClass.Create(Self)); - dazPostgreSQL: Result := Postgres_GetNextAutoInc(GeneratorName, GetDatasetClass.Create(Self)); - end; -end; - -procedure TDAESampleConnection.DoGetNames(AList: IROStrings; - AObjectType: TDAObjecttype); -var - lTableTypes : TStringDynArray; - lsupportSchema : Boolean; - lprocname : string; - i : integer; -begin - fNativeConnection.fConnection.Connect; - lsupportSchema := fNativeConnection.fConnection.DbcConnection.GetMetadata.SupportsSchemasInDataManipulation; - if AObjectType = dotProcedure then begin - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetProcedures(fNativeConnection.fConnection.Catalog, '', '') do - while Next do begin - lprocname := GetStringByName('PROCEDURE_NAME'); - i := pos(';', lprocname); - if i > 0 then lprocname := Copy(lprocname, 1, i - 1); - if lsupportSchema then - aList.Add(GetStringByName('PROCEDURE_SCHEM') + '.' + lprocname) - else - aList.Add(lprocname) - end; - end - else begin - SetLength(lTableTypes, 1); - if AObjectType = dotTable then - lTableTypes[0] := 'TABLE' - else - lTableTypes[0] := 'VIEW'; - with fNativeConnection.fConnection.DbcConnection.GetMetadata.GetTables(fNativeConnection.fConnection.Catalog, '', '', lTableTypes) do - while Next do - if lsupportSchema then - aList.Add(GetStringByName('TABLE_SCHEM') + '.' + GetStringByName('TABLE_NAME')) - else - aList.Add(GetStringByName('TABLE_NAME')) - end; -end; - -function TDAESampleConnection.GetSPSelectSyntax( - HasArguments: Boolean): string; -begin - case fDriverType of - dazMSSQL: Result := MSSQL_GetSPSelectSyntax(HasArguments); - dazInterBase: Result := IB_GetSPSelectSyntax(HasArguments); - dazOracle: Result := Oracle_GetSPSelectSyntax(HasArguments); - else - if (fDriverType = dazADO) and (fADOProviderType in [oledb_MSSQL, oledb_MSSQL2005]) then - Result := MSSQL_GetSPSelectSyntax(HasArguments) - else begin - Result := inherited GetSPSelectSyntax(HasArguments); - end; - end; -end; - -function TDAESampleConnection.GetCommandTimeout: Integer; -begin - Result := StrToIntDef(fNativeConnection.fConnection.Properties.Values['timeout'], 0); -end; - -function TDAESampleConnection.GetProviderName: string; -begin - Result := fADOProviderName; -end; - -function TDAESampleConnection.GetProviderType: TDAOleDBProviderType; -begin - Result := fADOProviderType; -end; - -procedure TDAESampleConnection.SetCommandTimeout(const Value: Integer); -begin - fNativeConnection.fConnection.Properties.Values['timeout'] := InttoStr(Value); -end; - -procedure TDAESampleConnection.DoGetStoredProcedureParams( - const aStoredProcedureName: string; out Params: TDAParamCollection); -begin - case fDriverType of - dazMySQL: MYSQL_DoGetStoredProcedureParams(aStoredProcedureName, GetDatasetClass.Create(Self), Params, fNativeConnection.fConnection.Catalog); - else - inherited; - end; -end; - -{ TDAESampleDriver } - -procedure TDAESampleDriver.GetAuxDrivers(out List: IROStrings); -var - i, j : integer; - lDrivers : IZCollection; - Protocols : TStringDynArray; -begin - inherited; - lDrivers := ZDbcIntfs.DriverManager.GetDrivers; - for i := 0 to lDrivers.Count - 1 do begin - Protocols := (lDrivers[I] as IZDriver).GetSupportedProtocols; - for J := Low(Protocols) to High(Protocols) do - List.Add(Protocols[J]); - end; - List.Sorted := True; -end; - -procedure TDAESampleDriver.GetAuxParams(const AuxDriver: string; - out List: IROStrings); -var - i : TDAOleDBProviderType; - s : string; -begin - inherited; - case ZEOSDriverIdToZEOSDriverType(AuxDriver) of - dazADO: begin - s := ''; - for i := Low(TDAOleDBProviderType) to High(TDAOleDBProviderType) do - if (i <> oledb_Unknown) {// Redundant but safe if I change the enum later...} then begin - if s <> '' then s := s + ';'; - s := s + OleDBProviders[i]; - end; - List.Add('Provider=(' + s + ')'); - end; - dazInterBase: AddIBAuxParams(List); - end; - if ZEOSDriverIdToZEOSDriverType(AuxDriver) <> dazAdo then List.Add('Port='); - List.Add('timeout='); -end; - -function TDAESampleDriver.GetAvailableDriverOptions: TDAAvailableDriverOptions; -begin - Result := [doAuxDriver, doServerName, doDatabaseName, doLogin, doCustom]; -end; - -function TDAESampleDriver.GetConnectionClass: TDAEConnectionClass; -begin - result := TDAESampleConnection; -end; - -function TDAESampleDriver.GetDefaultConnectionType( - const AuxDriver: string): string; -begin - case ZEOSDriverIdToZEOSDriverType(AuxDriver) of - dazADO: Result := ''; - dazMySQL: Result := MySQL_DriverType; - dazIBMDB2: Result:= DB2_DriverType; - dazInterBase: Result := MSSQL_DriverType; - dazMSSQL: Result := IB_DriverType; - dazOracle: Result := Oracle_DriverType; - dazPostgreSQL: Result := PostgreSQL_DriverType; - dazSQLite : Result:= SQLite_DriverType; - dazASA: Result:=ASA_DriverType; - dazSybase: Result:=Sybase_DriverType; - else - Result:= inherited GetDefaultConnectionType(AuxDriver); - end; -end; - -function TDAESampleDriver.GetDescription: string; -begin - result := 'DataAbstact Zeos Driver'; -end; - -function TDAESampleDriver.GetDriverID: string; -begin - result := 'ZEOS'; -end; - -function TDAESampleDriver.GetProviderDefaultCustomParameters( - Provider: string): string; -begin - Result := ''; - case ZEOSDriverIdToZEOSDriverType(Provider) of - dazADO: Result := 'Provider=;'; - dazMySQL: Result := MYSQL_GetDefaultCustomParameters; - end; -end; - -{ TDAESampleQuery } - -function TDAESampleQuery.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TZReadOnlyQuery.Create(nil); - TZReadOnlyQuery(result).Connection := TDAESampleConnection(aConnection).fNativeConnection.fConnection; -end; - -function TDAESampleQuery.DoGetSQL: string; -begin - result := TZReadOnlyQuery(Dataset).SQL.Text; -end; - -procedure TDAESampleQuery.DoPrepare(Value: boolean); -begin - // nothing -end; - -procedure TDAESampleQuery.DoSetSQL(const Value: string); -begin - TZReadOnlyQuery(Dataset).SQL.Text := Value; -end; - -{ TDAESampleStoredProcedure } - -function TDAESampleStoredProcedure.CreateDataset(aConnection: TDAEConnection): TDataset; -begin - result := TZStoredProc.Create(nil); - TZStoredProc(result).Connection := TDAESampleConnection(aConnection).fNativeConnection.fConnection; -end; - -function TDAESampleStoredProcedure.DoGetSQL: string; -begin - Result := ''; -end; - -procedure TDAESampleStoredProcedure.DoPrepare(Value: boolean); -begin - // nothing -end; - -procedure TDAESampleStoredProcedure.DoSetSQL(const Value: string); -begin - // -end; - -function TDAESampleStoredProcedure.GetStoredProcedureName: string; -begin - Result := TZStoredProc(result).StoredProcName; -end; - -procedure TDAESampleStoredProcedure.SetStoredProcedureName( - const Name: string); -begin - TZStoredProc(Dataset).StoredProcName := Name; -end; - -{ TZEOSConnection } - -constructor TZEOSConnection.Create(AOwner: TComponent); -begin - inherited; - fConnection := TZConnection.Create(self); - fConnection.LoginPrompt := False; - fMetaData := TZSQLMetaData.Create(Self); - fMetaData.Connection := fConnection; -end; - -function TZEOSConnection.GetConnected: Boolean; -begin - Result := fConnection.Connected; -end; - -procedure TZEOSConnection.SetConnected(Value: boolean); -begin - fConnection.Connected := Value; -end; - -exports - GetDriverObject name func_GetDriverObject; - -initialization -{$IFDEF FPC} - {$I DataAbstract_ZeosDriver_Glyphs.lrs} -{$ENDIF} - _driver := nil; - RegisterDriverProc(GetDriverObject); -finalization - UnregisterDriverProc(GetDriverObject); - FreeAndNIL(_driver); -end. - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.rc b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.rc deleted file mode 100644 index d480282..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.rc +++ /dev/null @@ -1 +0,0 @@ -DALOGO BITMAP DISCARDABLE "dalogo.bmp" diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.res deleted file mode 100644 index 6735fcb..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_AdditionalResources.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.bdsproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.bdsproj deleted file mode 100644 index 67fa8e2..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.bdsproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - DataAbstract_IDE_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects Data Abstract - IDE Package - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - - - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.cfg deleted file mode 100644 index f6e54d1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.cfg +++ /dev/null @@ -1,52 +0,0 @@ --$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 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\;..\..\Dcu\D10" --O"..\;..\..\Dcu\D10" --I"..\;..\..\Dcu\D10" --R"..\;..\..\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dpk deleted file mode 100644 index fdc6b17..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dpk +++ /dev/null @@ -1,51 +0,0 @@ -package DataAbstract_IDE_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - IDE Package'} -{$IMPLICITBUILD OFF} - -requires - rtl, - DesignIDE, - vcldb, - dbrtl, - RemObjects_Core_D10, - RemObjects_IDE_D10, - RemObjects_Everwood_D10, - DataAbstract_Core_D10; - -contains - DataAbstract_IDE_Reg in 'DataAbstract_IDE_Reg.pas', - uDADataAbstractEditors in 'uDADataAbstractEditors.pas', - uDADBSessionManagerEditor in 'uDADBSessionManagerEditor.pas', - uDASchemaUnitsGenerator in 'uDASchemaUnitsGenerator.pas', - uDAIDEMenu in 'uDAIDEMenu.pas', - uDAIDEData in 'uDAIDEData.pas' {DAIdeData: TDataModule}, - uDAIDERes in 'uDAIDERes.pas', - uDASelectDataTablesForm in 'uDASelectDataTablesForm.pas' {DASelectDataTablesForm}, - uDADataTableMasterLinkWizardForm in 'uDADataTableMasterLinkWizardForm.pas' {DADataTableMasterLinkWizard}, - uDAGuideWizardForm in 'uDAGuideWizardForm.pas' {DAGuideWizardForm}, - uDADataTableWizards in 'uDADataTableWizards.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dproj b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dproj deleted file mode 100644 index f7f24a3..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.dproj +++ /dev/null @@ -1,137 +0,0 @@ - - - {83d4313b-eff3-4ea0-9289-ba6e608e821e} - DataAbstract_IDE_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\DataAbstract_IDE_D10.bpl - - - 7.0 - False - False - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects Data Abstract - IDE Package - False - False - False - - - True - False - 3 - 0 - 1 - 361 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 3.0.1.361 - - - - - RemObjects SDK - 1.0.0.0 - - - DataAbstract_IDE_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - -
DADataTableMasterLinkWizard
-
- - - -
DAGuideWizardForm
-
- -
DAIdeData
-
- - - - -
DASelectDataTablesForm
-
-
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.cfg deleted file mode 100644 index a95f764..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.cfg +++ /dev/null @@ -1,41 +0,0 @@ --$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 --N"..\..\Dcu\D6" --LE"..\..\Dcu\D6" --LN"..\..\Dcu\D6" --U"..\Dcu\D6" --O"..\Dcu\D6" --I"..\Dcu\D6" --R"..\Dcu\D6" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dof deleted file mode 100644 index f1ca4e5..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - IDE Package - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\Dcu\D6 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.138 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dpk deleted file mode 100644 index c2b6298..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.dpk +++ /dev/null @@ -1,51 +0,0 @@ -package DataAbstract_IDE_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - IDE Package'} -{$IMPLICITBUILD OFF} - -requires - rtl, - DesignIDE, - vcldb, - dbrtl, - RemObjects_Core_D6, - RemObjects_IDE_D6, - RemObjects_Everwood_D6, - DataAbstract_Core_D6; - -contains - DataAbstract_IDE_Reg in 'DataAbstract_IDE_Reg.pas', - uDADataAbstractEditors in 'uDADataAbstractEditors.pas', - uDADBSessionManagerEditor in 'uDADBSessionManagerEditor.pas', - uDASchemaUnitsGenerator in 'uDASchemaUnitsGenerator.pas', - uDAIDEMenu in 'uDAIDEMenu.pas', - uDAIDEData in 'uDAIDEData.pas' {DAIdeData: TDataModule}, - uDAIDERes in 'uDAIDERes.pas', - uDASelectDataTablesForm in 'uDASelectDataTablesForm.pas' {DASelectDataTablesForm}, - uDADataTableMasterLinkWizardForm in 'uDADataTableMasterLinkWizardForm.pas' {DADataTableMasterLinkWizard}, - uDAGuideWizardForm in 'uDAGuideWizardForm.pas' {DAGuideWizardForm}, - uDADataTableWizards in 'uDADataTableWizards.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.cfg b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.cfg deleted file mode 100644 index 5645689..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.cfg +++ /dev/null @@ -1,50 +0,0 @@ --$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 --N"..\..\Dcu\D7" --LE"..\..\Dcu\D7" --LN"..\..\Dcu\D7" --U"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --O"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --I"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --R"..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dof deleted file mode 100644 index 2b8a3a6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dof +++ /dev/null @@ -1,116 +0,0 @@ -[FileVersion] -Version=7.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects Data Abstract - IDE Package - -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\..\Dcu\DevEx;..\..\..\RemObjects SDK\Dcu\D7 -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;RemObjects_DataSnap_D7;PurposesoftD7;addict3_d6;tb2kComplete_70;CDKDesignTimeSupport;CDKSmp;CDK;ES_CodeSite20;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;ESVsCp;ESSampleComposites70;ESSampleCompositeEditors7;Rz252N70;SynEdit_D7;dxsbD7;dxComnD7;dxDockingD7;dxEdtrD7;dxELibD7;dxExELD7;EQGridD7;dxExRwD7;dxDBEdD7;dxInsD7;dxGrEdD7;ECQDBCD7;EQTLD7;EQDBTLD7;dxLayoutControlD7;dxMasterViewD7;dxmdsd7;dxNavBarD7;dxObjInsD7;dxPageControlD7;dxPSCoreD7;Rz252D70;cxPageControlVCLD7;cxEditorsVCLD7;dxThemeD7;cxLibraryVCLD7;cxDataD7;cxGridUtilsVCLD7;cxGridVCLD7;RemObjects_BPDX_D7 -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.280 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dpk deleted file mode 100644 index 377b366..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.dpk +++ /dev/null @@ -1,51 +0,0 @@ -package DataAbstract_IDE_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - IDE Package'} -{$IMPLICITBUILD OFF} - -requires - rtl, - DesignIDE, - vcldb, - dbrtl, - RemObjects_Core_D7, - RemObjects_IDE_D7, - RemObjects_Everwood_D7, - DataAbstract_Core_D7; - -contains - DataAbstract_IDE_Reg in 'DataAbstract_IDE_Reg.pas', - uDADataAbstractEditors in 'uDADataAbstractEditors.pas', - uDADBSessionManagerEditor in 'uDADBSessionManagerEditor.pas', - uDASchemaUnitsGenerator in 'uDASchemaUnitsGenerator.pas', - uDAIDEMenu in 'uDAIDEMenu.pas', - uDAIDEData in 'uDAIDEData.pas' {DAIdeData: TDataModule}, - uDAIDERes in 'uDAIDERes.pas', - uDASelectDataTablesForm in 'uDASelectDataTablesForm.pas' {DASelectDataTablesForm}, - uDADataTableMasterLinkWizardForm in 'uDADataTableMasterLinkWizardForm.pas' {DADataTableMasterLinkWizard}, - uDAGuideWizardForm in 'uDAGuideWizardForm.pas' {DAGuideWizardForm}, - uDADataTableWizards in 'uDADataTableWizards.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.conf b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.conf deleted file mode 100644 index 0b018a1..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.conf +++ /dev/null @@ -1,40 +0,0 @@ --$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 --H+ --W+ --M --$M1048576 --K$00400000 --N"../../Dcu/K3" --LE"../../Dcu/K3" --LN"../../Dcu/K3" --U"../:../../Dcu/K3:../../../RemObjects SDK/Dcu/K3" --O"../:../../Dcu/K3:../../../RemObjects SDK/Dcu/K3" --I"../:../../Dcu/K3:../../../RemObjects SDK/Dcu/K3" --R"../:../../Dcu/K3:../../../RemObjects SDK/Dcu/K3" --Z diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.dpk b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.dpk deleted file mode 100644 index be38f72..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package DataAbstract_IDE_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects Data Abstract - IDE Package'} -{$IMPLICITBUILD OFF} - -requires - rtl, - designide, - RemObjects_Core_K3, - RemObjects_IDE_K3, - DataAbstract_Core_K3; - -contains - DataAbstract_IDE_Reg in 'DataAbstract_IDE_Reg.pas', - uDADataAbstractEditors in 'uDADataAbstractEditors.pas', - uDADBSessionManagerEditor in 'uDADBSessionManagerEditor.pas'; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.kof b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.kof deleted file mode 100644 index 727e0d6..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.kof +++ /dev/null @@ -1,71 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=Data Abstract - IDE Package -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../../Dcu/K3 -PackageDLLOutputDir=../../Dcu/K3 -PackageDCPOutputDir=../../Dcu/K3 -SearchPath=../:../../Dcu/K3:../../../RemObjects SDK/Dcu/K3 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[Excluded Packages] -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_Indy_K3.so=RemObjects SDK - Indy Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_RODX_K3.so=RemObjects - RODXSock Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_BPDX_K3.so=RemObjects SDK - BPDX Library -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_IDE_K3.so=RemObjects SDK - IDE Integration -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_DataSnap_K3.so=RemObjects - DataSnap Package -/work_local/RemObjects SDK/Dcu/K3/bplRemObjects_Enterprise_K3.so=RemObjects SDK - Enterprise Edition - diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_Reg.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_Reg.pas deleted file mode 100644 index 101b54a..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/DataAbstract_IDE_Reg.pas +++ /dev/null @@ -1,163 +0,0 @@ -unit DataAbstract_IDE_Reg; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - IDE Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -interface - -procedure Register; - -implementation - -uses - Classes, uDAClasses, uDADataTable, uDARemoteDataAdapter, uDARemoteDataAdapterRequests, - uDADataAbstractEditors, uDADriverManager, uDAInterfaces, - uDABusinessProcessor, uRODLGenTools, ColnEdit, - DB, SysUtils, uDADBSessionManagerEditor, uDADBSessionManager, - DARemoteService_Impl, DALoginService_Impl, - DataAbstractService_Impl, BaseLoginService_Impl, MultiDbLoginService_Impl, SimpleLoginService_Impl, - uDAClientDataModule, uDADesigntimeCall, uDADataTableReferenceCollection, - {$IFDEF MSWINDOWS} - uROProductVersionInfo, fROAbout, - {$ENDIF MSWINDOWS} - {$IFDEF DELPHI5} - DsgnIntf, DMDesigner, - {$ELSE} - DesignIntf, DesignEditors; - {$ENDIF} - -procedure Register; -begin - RegisterComponentEditor(TDADriverManager, TDADriverManagerEditor); - RegisterComponentEditor(TDASchema, TDASchemaEditor); - RegisterComponentEditor(TDAConnectionManager, TDAConnectionManagerEditor); - RegisterComponentEditor(TDADataDictionary, TDADataDictionaryEditor); - RegisterComponentEditor(TDADataTable, TDADataTableEditor); - RegisterComponentEditor(TDARemoteDataAdapter, TDARemoteDataAdapterEditor); - RegisterComponentEditor(TDADesigntimeCall, TDADesigntimeCallEditor); - - {$IFDEF MSWINDOWS} - //RegisterComponentEditor(TDAClientDataModule, TDAClientDataModuleEditor); - {$ENDIF MSWINDOWS} - - RegisterPropertyEditor(TypeInfo(string), TDARemoteRequest, 'MethodName', TDADataRequestCallMethodNameEditor); - - {$IFDEF MSWINDOWS} - RegisterPropertyEditor(TypeInfo(string), TDADataTable, 'MasterFields', TDADataTableMasterDetailProps); - RegisterPropertyEditor(TypeInfo(string), TDADataTable, 'DetailFields', TDADataTableMasterDetailProps); - RegisterPropertyEditor(TypeInfo(TStrings), TDADataTable, 'MasterRequestMappings', TDADataTableMasterDetailProps); - RegisterPropertyEditor(TypeInfo(TStrings), TDADataTable, 'MasterParamsMappings', TDADataTableMasterDetailProps); - {$ENDIF MSWINDOWS} - - RegisterPropertyEditor(TypeInfo(string), TDADriverManager, 'DriverDirectory', TDADriverManagerDirectory); - RegisterPropertyEditor(TypeInfo(TComponent), TDADataTableReference, 'DataTable', TDADataTableReferenceDataTable); - - RegisterPropertyEditor(TypeInfo(TDataset), TDADataSource, 'Dataset', NIL); - - RegisterPropertyEditor(TypeInfo(string), TDADataTable, 'LogicalName', TDADataTableLogicalNameEditor); - RegisterPropertyEditor(TypeInfo(string), TDADataTable, 'LocalConnection', TDADataTableLocalConnection); - - RegisterPropertyEditor(TypeInfo(string), TDAUpdateRule, 'DatasetName', TDACollectionItemDatasetNameEditor); - RegisterPropertyEditor(TypeInfo(string), TDADatasetRelationship, 'DetailDatasetName', TDACollectionItemDatasetNameEditor); - RegisterPropertyEditor(TypeInfo(string), TDADatasetRelationship, 'MasterDatasetName', TDACollectionItemDatasetNameEditor); - - RegisterPropertyEditor(TypeInfo(string), TDABusinessProcessor, 'InsertCommandName', TDABusinessProcessorCommandProperty); - RegisterPropertyEditor(TypeInfo(string), TDABusinessProcessor, 'DeleteCommandName', TDABusinessProcessorCommandProperty); - RegisterPropertyEditor(TypeInfo(string), TDABusinessProcessor, 'UpdateCommandName', TDABusinessProcessorCommandProperty); - RegisterPropertyEditor(TypeInfo(string), TDABusinessProcessor, 'ReferencedDataset', TDABusinessProcessorRefDatasetProperty); - RegisterPropertyEditor(TypeInfo(string), TDABusinessProcessor, 'RefreshDatasetName', TDABusinessProcessorRefDatasetProperty); - - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'InsertSessionCommand', TDASchemaCommandListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'UpdateSessionCommand', TDASchemaCommandListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'DeleteSessionCommand', TDASchemaCommandListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'ClearSessionsCommand', TDASchemaCommandListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'GetSessionCountDataSet', TDASchemaDataSetListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'GetAllSessionIDsDataset', TDASchemaDataSetListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'GetSessionDataSet', TDASchemaDataSetListEditor); - RegisterPropertyEditor(TypeInfo(string), TDADBSessionManager, 'Connection', TDASchemaConnectionsListEditor); - - RegisterPropertyEditor(TypeInfo(TCollection), TDADataset, 'Fields', TCollectionProperty); - RegisterPropertyEditor(TypeInfo(TCollection), TDADataset, 'Params', TCollectionProperty); - RegisterPropertyEditor(TypeInfo(TCollection), TDADataset, 'Statements', TCollectionProperty); - - RegisterPropertyEditor(TypeInfo(string), TDALoginService, 'LoginDataset', TDARemoteServiceDataSetListEditor); - RegisterPropertyEditor(TypeInfo(string), TDALoginService, 'LogoutCommand', TDARemoteServiceCommandListEditor); - - RegisterPropertyEditor(TypeInfo(string), TDAField, 'KeyFields', TDALookupSourceProperty); - RegisterPropertyEditor(TypeInfo(string), TDAField, 'LookupKeyFields', TDALookupDestProperty); - RegisterPropertyEditor(TypeInfo(string), TDAField, 'LookupResultField', TDALookupResultFieldProperty); - - {$IFDEF VER140UP} - RegisterCustomModule(TDARemoteService, TCustomModule); - RegisterCustomModule(TDALoginService, TCustomModule); - RegisterCustomModule(TDataAbstractService, TCustomModule); - RegisterCustomModule(TBaseLoginService, TCustomModule); - RegisterCustomModule(TSimpleLoginService, TCustomModule); - RegisterCustomModule(TMultiDbLoginService, TCustomModule); - {$ELSE} - RegisterCustomModule(TDARemoteService, TDataModuleDesignerCustomModule); - RegisterCustomModule(TDALoginService, TDataModuleDesignerCustomModule); - RegisterCustomModule(TDataAbstractService, TDataModuleDesignerCustomModule); - RegisterCustomModule(TBaseLoginService, TDataModuleDesignerCustomModule); - RegisterCustomModule(TSimpleLoginService, TDataModuleDesignerCustomModule); - RegisterCustomModule(TMultiDbLoginService, TDataModuleDesignerCustomModule); - {$ENDIF} - - RegisterRODataModuleClass(TDataAbstractService, - '&Data Abstract 4.0 Service', - 'Data Abstract datamodule. '+ - 'This is the preferred server type when creating a Data Abstract version 4.0 or above server.', - 'uRORemoteDataModule, uDAInterfaces, DataAbstractService_Impl, DataAbstract4_Intf' - ); - - RegisterRODataModuleClass(TDARemoteService, - 'Data Abstract &3.0 Remote Service', - 'Data Abstract datamodule. This is the preferred server type when creating backward-compatible version 3.0 Data Abstract server.', - 'uRORemoteDataModule, uDAInterfaces, DARemoteService_Impl, DataAbstract3_Intf' - ); - - RegisterCustomModule(TDAClientDataModule,TCustomModule); - - { TDARemoteDataAdapter } - RegisterPropertiesInCategory('Dynamic Method Binding', TDARemoteDataAdapter, ['GetSchemaCall', 'GetDataCall', 'GetScriptsCall', 'UpdateDataCall']); - - RegisterPropertiesInCategory('Legacy', TDAGetDataRequest, ['OutgoingParamsParameter', 'OutgoingIncludeSchemaParameter', 'OutgoingMaxRecordsParameter']); - - { TDADataTable } - //RegisterPropertiesInCategory('Legacy v3.0', TDADataTable, ['DataRequestCall', 'DataUpdateCall', 'SchemaCall', 'ScriptCall', 'Adapter']); - RegisterPropertiesInCategory('Master/Detail', TDADataTable, ['MasterFields', 'MasterMappingMode', 'MasterOptions', 'MasterParamsMappings', 'MasterRequestMappings', 'MasterSource', 'DetailFields', 'DetailOptions']); - RegisterPropertiesInCategory('Database', TDADataTable, ['Fields', 'Params', 'LogicalName', 'IndexDefs', 'IndexName', 'Active', 'StoreActive', 'LogChanges', 'MaxRecords']); - RegisterPropertiesInCategory('Business Rules', TDADataTable, ['BusinessRulesID', 'ScriptCode']); - RegisterPropertiesInCategory('Local Data', TDADataTable, ['LocalConnection', 'LocalSchema', 'LocalDataStreamer']); - - { DA Service } - - { Login Services } - RegisterPropertiesInCategory('Login', TBaseLoginService, ['OnLogout']); - RegisterPropertiesInCategory('Login', TSimpleLoginService, ['OnLogin']); - RegisterPropertiesInCategory('Login', TMultiDbLoginService, ['OnLogin']); -end; - -{$IFDEF MSWINDOWS} -initialization - RegisterProduct('{261E7EA5-C380-42A4-90AC-1FA10ADB39D8}',VersionBuildNo(hInstance)); -finalization - UnregisterProduct('{261E7EA5-C380-42A4-90AC-1FA10ADB39D8}'); -{$ENDIF MSWINDOWS} -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/Resources.BDS.RES b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/Resources.BDS.RES deleted file mode 100644 index 8268ee9..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/Resources.BDS.RES and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.dfm deleted file mode 100644 index 32d530e..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.dfm +++ /dev/null @@ -1,180 +0,0 @@ -object DAClientDataModuleDataTableWizardForm: TDAClientDataModuleDataTableWizardForm - Left = 417 - Top = 173 - BorderStyle = bsDialog - BorderWidth = 5 - Caption = '%s - DataTable Wizard' - ClientHeight = 412 - ClientWidth = 339 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - DesignSize = ( - 339 - 412) - PixelsPerInch = 96 - TextHeight = 13 - object lbl_ServerUrl1: TLabel - Left = 0 - Top = 0 - Width = 90 - Height = 13 - Caption = 'Select DataSets' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object lbl_ServerUrl2: TLabel - Left = 16 - Top = 16 - Width = 248 - Height = 26 - Caption = - 'Select the Datasets for that you want to generate TDADataTable ' + - 'components.' - WordWrap = True - end - object BitBtn2: TBitBtn - Left = 264 - Top = 387 - Width = 75 - Height = 25 - Anchors = [akLeft, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 0 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object BitBtn1: TBitBtn - Left = 184 - Top = 387 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'Finish' - Default = True - ModalResult = 1 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00FF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00 - 811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF787878787878FF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 811E00811E00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF787878787878787878FF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF811E0095440F811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878898989787878FF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF811E00A7632F811E00811E00FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF7878789F9F9F78787878 - 7878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF811E00BF8B62CCA17E811E00811E00FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878B8B8B8C6 - C6C6787878787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF811E00D8B69CE6D1BFE7D3C4811E00FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878D1 - D1D1E0E0E0E2E2E2787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00F0E2D9FCF7F2FAF0E6811E00811E - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878EBEBEBF5F5F5F1F1F1787878787878FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00D8AF96F4E2CFF0D7BDD8A784811E - 00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878D0D0D0E9E9E9E3E3E3CACACA787878787878FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF811E00F3DECAEFD4B8EBC9A7DAA67D811E00FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878E7 - E7E7E1E1E1DBDBDBC9C9C9787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00E7BB92E3B081E0A672D5925A811E - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878D3D3D3CDCDCDC6C6C6BCBCBC787878FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00DA995ED78F50D38441CF7B - 35811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FF787878BFBFBFB8B8B8B2B2B2ACACAC787878FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00811E00811E00811E - 00811E00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FF787878787878787878787878787878787878FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object lb_DataSets: TCheckListBox - Left = 16 - Top = 48 - Width = 323 - Height = 329 - Anchors = [akLeft, akTop, akRight, akBottom] - ItemHeight = 13 - TabOrder = 2 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.pas deleted file mode 100644 index e48152d..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleDataTableWizardForm.pas +++ /dev/null @@ -1,114 +0,0 @@ -unit uDAClientDataModuleDataTableWizardForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, CheckLst, Buttons, uDAClientDataModule, DesignIntf; - -type - TDAClientDataModuleDataTableWizardForm = class(TForm) - BitBtn2: TBitBtn; - BitBtn1: TBitBtn; - lbl_ServerUrl1: TLabel; - lbl_ServerUrl2: TLabel; - lb_DataSets: TCheckListBox; - private - fModule:TDAClientDataModule; - procedure FillDataSets; - public - class function Execute(aOwner: TComponent; aModule:TDAClientDataModule; aDesigner:IDesigner):boolean; - end; - -var - DAClientDataModuleDataTableWizardForm: TDAClientDataModuleDataTableWizardForm; - -implementation - -uses - uROClasses, uDAIDERes, uRODL, uRORemoteService, - uDADataAbstractEditors, uDAMemDataTable, uDAClasses, uDAPleaseWaitForm; - -{$R *.dfm} - -{ TDAClientDataModuleDataTableWizardForm } - -class function TDAClientDataModuleDataTableWizardForm.Execute(aOwner: TComponent; aModule: TDAClientDataModule; aDesigner:IDesigner): boolean; -var - i:integer; -begin - if not Assigned(aModule.RemoteService) then RaiseError(err_AssignRemoteService); - if not Assigned(aModule.RemoteService.Channel) then RaiseError(err_AssignRemoteServiceChannel); - if not Assigned(aModule.RemoteService.Message) then RaiseError(err_AssignRemoteServiceMessage); - - with self.Create(aOwner) do try - - fModule := aModule; - Caption := Format(Caption,[fModule.Name]); - FillDataSets(); - - result := ShowModal() = idOk; - if result then begin - - for i := 0 to lb_DataSets.Items.Count-1 do begin - if lb_DataSets.Checked[i] then begin - CreateDataTable(aDesigner, aModule, TDAMemDataTable, lb_DataSets.Items[i], false); - end; - end; - - end; - - finally - Free(); - end; -end; - -procedure TDAClientDataModuleDataTableWizardForm.FillDataSets; -var - i: integer; - lSchema: TDASchema; - lDataSets: TStringList; -begin - - lDataSets := TStringList.Create(); - try - lDataSets.Duplicates := dupIgnore; - lDataSets.Sorted := true; - - - lSchema := nil; - with CreatePleaseWaitForm(self,'Retrieving Schema...') do begin - fModule.GetSchema(lSchema,true); - Hide; - end; - try - for i := 0 to lSchema.Datasets.Count-1 do begin - lDataSets.Add(lSchema.Datasets[i].Name); - end; { for } - finally - lSchema.Free(); - end; - - lb_DataSets.Items.Assign(lDataSets); - for i := 0 to lb_Datasets.Items.Count-1 do begin - lb_DataSets.Checked[i] := true; - end; { for } - - finally - FreeAndNil(lDataSets); - end; - {lLibrary := fModule.RemoteService.GetRODLLibrary(); - if not Assigned (lLibrary) then RaiseError('Library could not retrieved from server'); - try - lDataSets := fModule.RemoteService.GetServiceMethods(); - for i := 0 to lDataSets.Count-1 do begin - p := Pos('_',lDataSets[i]); - if p > 0 then - lb_DataSets.Checked[lb_DataSets.Items.Add(Copy(lDataSets[i],p+1,Length(lDataSets[i])-p))] := true; - end; - finally - lLibrary.Free(); - end; } -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.dfm b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.dfm deleted file mode 100644 index 4c5220b..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.dfm +++ /dev/null @@ -1,284 +0,0 @@ -object DAClientDataModuleEditorForm: TDAClientDataModuleEditorForm - Left = 381 - Top = 253 - BorderStyle = bsDialog - BorderWidth = 5 - Caption = '%s - ClientDataModule Editor' - ClientHeight = 183 - ClientWidth = 322 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - DesignSize = ( - 322 - 183) - PixelsPerInch = 96 - TextHeight = 13 - object lbl_ServerUrl1: TLabel - Left = 0 - Top = 0 - Width = 66 - Height = 13 - Caption = 'Server URL:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object lbl_ServerUrl2: TLabel - Left = 16 - Top = 16 - Width = 211 - Height = 13 - Caption = 'Select the URL of yout development server.' - end - object lbl_ServerUrl3: TLabel - Left = 16 - Top = 32 - Width = 308 - Height = 26 - Caption = - 'If you have kept the defaults when writing the server and are ru' + - 'nning the server on this machine, the default value will be ok:' - WordWrap = True - end - object Label4: TLabel - Left = 0 - Top = 96 - Width = 77 - Height = 13 - Caption = 'Service Name' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label5: TLabel - Left = 16 - Top = 112 - Width = 228 - Height = 13 - Caption = 'Select the Service that you want to connect to:' - end - object btn_CreateTables: TBitBtn - Left = 62 - Top = 158 - Width = 126 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'Create DataTables' - ModalResult = 1 - TabOrder = 0 - OnClick = btn_CreateTablesClick - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000130B0000130B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF08750D08750D08750D0875 - 0DFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FF8C8C8C8C8C8C8C8C8C8C8C8CFF00FFFF00FFFF00FFFF00FFFF00FF - 0E80AA0E80AA0E80AA0E80AA0E80AA0E80AAFF00FF08750D13AA2210A61D0875 - 0DFF00FFFF00FFFF00FFFF00FFFF00FF83838383838383838383838383838383 - 8383FF00FF8C8C8CA3A3A3A1A1A18C8C8CFF00FFFF00FFFF00FFFF00FF078DBB - 49D5EE23D7FE36D9FE6FE6FF8DE7FA44BADD0E80AA08750D1AB12D16AD260875 - 0DFF00FFFF00FFFF00FFFF00FF878787AFAFAFA8A8A8AFAFAFC3C3C3CCCCCCA8 - A8A88383838C8C8CA8A8A8A5A5A58C8C8CFF00FFFF00FFFF00FF078DBB8CFBFE - 59EAFE23D7FE36D8FD6CE0F808750D08750D08750D08750D22B93B1DB5320875 - 0D08750D08750D08750D878787CDCDCDBBBBBBA8A8A8AEAEAEC0C0C08C8C8C8C - 8C8C8C8C8C8C8C8CADADADAAAAAA8C8C8C8C8C8C8C8C8C8C8C8C078DBB8CFBFE - 59EAFE23D7FE36D8FD6CE0F808750D3CD46236CF5A30C9522CC34926BE4121B8 - 381CB43117AF2A08750D878787CDCDCDBBBBBBA8A8A8AEAEAEC0C0C08C8C8CC0 - C0C0BCBCBCB8B8B8B4B4B4B1B1B1ACACACAAAAAAA6A6A68C8C8C078DBB8CFBFE - 59EAFE23D7FE36D9FE6CE1F908750D44DD703FD8683AD26035CD582FC74F2AC1 - 4725BD3E20B83608750D878787CDCDCDBBBBBBA8A8A8AFAFAFC0C0C08C8C8CC6 - C6C6C2C2C2BFBFBFBBBBBBB7B7B7B3B3B3B0B0B0ACACAC8C8C8C078DBBB3FCFE - B6F6FFC6F5FFE3FAFFE9F9FD08750D08750D08750D08750D3ED76638D15E0875 - 0D08750D08750D08750D878787DADADADCDCDCE1E1E1ECECECEDEDED8C8C8C8C - 8C8C8C8C8C8C8C8CC2C2C2BDBDBD8C8C8C8C8C8C8C8C8C8C8C8C078DBBBAEEF6 - 30BCDD11A7D2129FCB20A1CA35A7CD2692BF92CEE408750D46DE7341DA6D0875 - 0DFF00FFFF00FFFF00FF878787DADADAA1A1A19292929090909595959D9D9D93 - 9393C6C6C68C8C8CC7C7C7C4C4C48C8C8CFF00FFFF00FFFF00FF078DBB4AC5DD - 59EAFE23D7FE36D9FE6FE6FF8DE7FA49C1E30682B608750D4DE67F49E2790875 - 0DFF00FFFF00FFFF00FF878787AAAAAABBBBBBA8A8A8AFAFAFC3C3C3CCCCCCAC - ACAC8585858C8C8CCCCCCCC9C9C98C8C8CFF00FFFF00FFFF00FF078DBB8CFBFE - 59EAFE23D7FE36D9FE6FE6FF8DE7FA49C1E3089DCF08750D08750D08750D0875 - 0DFF00FFFF00FFFF00FF878787CDCDCDBBBBBBA8A8A8AFAFAFC3C3C3CCCCCCAC - ACAC8E8E8E8C8C8C8C8C8C8C8C8C8C8C8CFF00FFFF00FFFF00FF078DBB8CFBFE - 59EAFE23D7FE36D9FE6FE6FF8DE7FA49C1E3089CCE0E7FA9FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF878787CDCDCDBBBBBBA8A8A8AFAFAFC3C3C3CCCCCCAC - ACAC8E8E8E838383FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF078DBB8CFBFE - 59EAFE23D7FE36D9FE6FE6FF8DE7FA49C1E3089DCF0E80AAFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF878787CDCDCDBBBBBBA8A8A8AFAFAFC3C3C3CCCCCCAC - ACAC8E8E8E838383FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF078DBB91FCFE - 82F8FF6FF8FF7AFEFF97FEFFA0FCFE63DAF50DA2D40E80AAFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF878787CECECEC9C9C9C3C3C3C7C7C7D1D1D1D4D4D4BB - BBBB919191838383FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF078DBBFCFFFF - F4FFFFD3FFFFB4FFFFADFFFFADFFFFA9FFFF72F9FE0E80AAFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF878787F4F4F4F1F1F1E6E6E6DBDBDBD9D9D9D9D9D9D7 - D7D7C4C4C4838383FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0C92C0 - F1FBFDE4FFFFC7FFFFAEFFFFA8FFFF9BFBFC1385AFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF8A8A8AF0F0F0ECECECE2E2E2D9D9D9D7D7D7D1 - D1D1878787FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 078DBB078DBB078DBB078DBB078DBB078DBBFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF87878787878787878787878787878787 - 8787FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object BitBtn2: TBitBtn - Left = 259 - Top = 158 - Width = 63 - Height = 25 - Anchors = [akLeft, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 1 - OnClick = BitBtn2Click - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object ed_ServerUrl: TEdit - Left = 16 - Top = 64 - Width = 306 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 2 - OnChange = ed_ServerUrlChange - end - object cb_Services: TComboBox - Left = 16 - Top = 128 - Width = 306 - Height = 21 - Anchors = [akLeft, akTop, akRight] - ItemHeight = 13 - TabOrder = 3 - OnChange = cb_ServicesChange - OnCloseUp = cb_ServicesChange - OnEnter = cb_ServicesEnter - OnExit = cb_ServicesChange - end - object BitBtn1: TBitBtn - Left = 193 - Top = 158 - Width = 61 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'Finish' - Default = True - ModalResult = 1 - TabOrder = 4 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00FF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00 - 811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF787878787878FF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 811E00811E00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF787878787878787878FF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF811E0095440F811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878898989787878FF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF811E00A7632F811E00811E00FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF7878789F9F9F78787878 - 7878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF811E00BF8B62CCA17E811E00811E00FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878B8B8B8C6 - C6C6787878787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF811E00D8B69CE6D1BFE7D3C4811E00FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878D1 - D1D1E0E0E0E2E2E2787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00F0E2D9FCF7F2FAF0E6811E00811E - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878EBEBEBF5F5F5F1F1F1787878787878FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00D8AF96F4E2CFF0D7BDD8A784811E - 00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878D0D0D0E9E9E9E3E3E3CACACA787878787878FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF811E00F3DECAEFD4B8EBC9A7DAA67D811E00FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF787878E7 - E7E7E1E1E1DBDBDBC9C9C9787878FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF811E00E7BB92E3B081E0A672D5925A811E - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF78 - 7878D3D3D3CDCDCDC6C6C6BCBCBC787878FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00DA995ED78F50D38441CF7B - 35811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FF787878BFBFBFB8B8B8B2B2B2ACACAC787878FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF811E00811E00811E00811E - 00811E00811E00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FF787878787878787878787878787878787878FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end -end diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.pas deleted file mode 100644 index c5a26ff..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleEditorForm.pas +++ /dev/null @@ -1,148 +0,0 @@ -unit uDAClientDataModuleEditorForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDAClientDataModule, StdCtrls, Buttons, DesignIntf; - -type - TDAClientDataModuleEditorForm = class(TForm) - btn_CreateTables: TBitBtn; - BitBtn2: TBitBtn; - lbl_ServerUrl1: TLabel; - ed_ServerUrl: TEdit; - lbl_ServerUrl2: TLabel; - lbl_ServerUrl3: TLabel; - Label4: TLabel; - Label5: TLabel; - cb_Services: TComboBox; - BitBtn1: TBitBtn; - procedure ed_ServerUrlChange(Sender: TObject); - procedure cb_ServicesEnter(Sender: TObject); - procedure BitBtn2Click(Sender: TObject); - procedure btn_CreateTablesClick(Sender: TObject); - procedure cb_ServicesChange(Sender: TObject); - private - fServerUrlChanged: boolean; - fRestoreServerUrl: string; - fModule:TDAClientDataModule; - fCreateDataTables: boolean; - procedure FillServiceCombo; - - public - class function Execute(aOwner: TCOmponent; aModule:TDAClientDataModule; aDesigner:IDesigner):boolean; - end; - -var - DAClientDataModuleEditorForm: TDAClientDataModuleEditorForm; - -implementation - -uses - uROClasses, TypInfo, uDAIDERes, uDAPleaseWaitForm, - uDAClientDataModuleDataTableWizardForm; - -{$R *.dfm} - -{ TDAClientDataModuleEditorForm } - -class function TDAClientDataModuleEditorForm.Execute(aOwner: TCOmponent; aModule: TDAClientDataModule; aDesigner:IDesigner): boolean; -begin - if not Assigned(aModule.RemoteService) then RaiseError(err_AssignRemoteService); - if not Assigned(aModule.RemoteService.Channel) then RaiseError(err_AssignRemoteServiceChannel); - if not Assigned(aModule.RemoteService.Message) then RaiseError(err_AssignRemoteServiceMessage); - - with self.Create(aOwner) do try - - fModule := aModule; - Caption := Format(Caption,[fModule.Name]); - - - try - fRestoreServerUrl := GetStrProp(fModule.RemoteService.Channel,'TargetURL'); - ed_ServerUrl.Text := fRestoreServerUrl; - fServerUrlChanged := false; - except - ed_ServerUrl.Enabled := false; - lbl_ServerUrl1.Enabled := false; - lbl_ServerUrl2.Enabled := false; - lbl_ServerUrl3.Enabled := false; - end; - - FillServiceCombo(); - cb_Services.ItemIndex := cb_Services.Items.IndexOf(fModule.RemoteService.ServiceName); - cb_ServicesChange(nil); - - result := ShowModal() = idOk; - if result then begin - if ed_ServerUrl.Enabled then SetStrProp(fModule.RemoteService.Channel,'TargetURL',ed_ServerUrl.Text); - fModule.RemoteService.ServiceName := cb_Services.Text; - - if fCreateDataTables then begin - TDAClientDataModuleDataTableWizardForm.Execute(aOwner, fModule, aDesigner); - end; - - end; - - finally - Free(); - end; -end; - -procedure TDAClientDataModuleEditorForm.ed_ServerUrlChange( - Sender: TObject); -begin - fServerUrlChanged := true; -end; - -procedure TDAClientDataModuleEditorForm.FillServiceCombo; -var - lServiceNames: IROStrings; - i:integer; -begin - Screen.Cursor := crHourGlass; - try - cb_Services.Items.Clear(); - lServiceNames := fModule.RemoteService.GetServiceNames(); - if Assigned(lServiceNames) then begin - for i := 0 to (lServiceNames.Count-1) do - cb_Services.Items.Add(lServiceNames[i]); - end - else begin - cb_Services.Text := ''; - end; - cb_ServicesChange(nil); - finally - Screen.Cursor := crDefault; - end; -end; - -procedure TDAClientDataModuleEditorForm.cb_ServicesEnter(Sender: TObject); -begin - if fServerUrlChanged then begin - if ed_ServerUrl.Enabled then begin - SetStrProp(fModule.RemoteService.Channel,'TargetURL',ed_ServerUrl.Text); - FillServiceCombo(); - end; - fServerUrlChanged := true; - end -end; - -procedure TDAClientDataModuleEditorForm.BitBtn2Click(Sender: TObject); -begin - if ed_ServerUrl.Enabled then - SetStrProp(fModule.RemoteService.Channel,'TargetURL',fRestoreServerUrl); -end; - -procedure TDAClientDataModuleEditorForm.btn_CreateTablesClick(Sender: TObject); -begin - fCreateDataTables := true; -end; - -procedure TDAClientDataModuleEditorForm.cb_ServicesChange(Sender: TObject); -begin - btn_CreateTables.Enabled := cb_Services.Text <> ''; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleWizard.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleWizard.pas deleted file mode 100644 index 8ced8e8..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientDataModuleWizard.pas +++ /dev/null @@ -1,394 +0,0 @@ -unit uDAClientDataModuleWizard; - -{$I DataAbstract.inc} - -interface - -uses DesignEditors, ToolsAPI, Windows, ActnList, Menus, Classes; - -const CRLF = #13#10; // Carriage-return line-feed. - -resourcestring - sBasicDfmSource = - 'object %0:s: T%0:s' + crlf + - ' Left = 200' + crlf + - ' Top = 200' + crlf + - ' Height = 300' + crlf + - ' Width = 300' + crlf + - ' RemoteService = RORemoteService' + crlf + - ' Adapter = DABinAdapter' + crlf + - ' SchemaCall.MethodName = ''GetSchemaAsXML''' + crlf + - ' SchemaCall.Params = <' + crlf + - ' item' + crlf + - ' Name = ''Result''' + crlf + - ' ParamType = fResult' + crlf + - ' DataType = rtString' + crlf + - ' end>' + crlf + - ' object ROChannel: TROWinInetHTTPChannel' + crlf + - ' UserAgent = ''RemObjects SDK''' + crlf + - ' TargetURL = ''http://localhost:8099/bin''' + crlf + - ' Left = 40' + crlf + - ' Top = 8' + crlf + - ' end' + crlf + - ' object ROMessage: TROBinMessage' + crlf + - ' Left = 40' + crlf + - ' Top = 52' + crlf + - ' end' + crlf + - ' object RORemoteService: TRORemoteService' + crlf + - ' Message = ROMessage' + crlf + - ' Channel = ROChannel' + crlf + - ' Left = 40' + crlf + - ' Top = 96' + crlf + - ' end' + crlf + - ' object DABinAdapter: TDABINAdapter' + crlf + - ' Left = 40' + crlf + - ' Top = 144' + crlf + - ' end' + crlf + - 'end'; - - sBasicFormSource = - 'unit %0:s;' + crlf + - crlf + - 'interface' + crlf + - crlf + - 'uses {vcl:} SysUtils, Classes, DB, DBClient, ' + crlf + - ' {RemObjects:} %3:s;' + crlf + - crlf + - 'type' + crlf + - ' T%1:s = class(%2:s)' + crlf + - ' ROChannel: TROWinInetHTTPChannel;' + crlf + - ' ROMessage: TROBinMessage;' + crlf + - ' RORemoteService: TRORemoteService;' + crlf + - ' DABinAdapter: TDABINAdapter;' + crlf + - ' private' + crlf + - ' { Private declarations }' + crlf + - ' public' + crlf + - ' { Public declarations }' + crlf + - ' end;' + crlf + - crlf + - 'var' + crlf + - ' %1:s: T%1:s;' + crlf + - crlf + - 'implementation' + crlf + - crlf + - '{$R *.DFM}' + crlf + - crlf + - 'initialization' + crlf + - 'end.' ; - -type TSourceFile = class(TInterfacedObject, IOTAFile) - private - fAge: TDateTime; - fSource:string; - public - function GetSource: string; - function GetAge: TDateTime; - constructor Create(const iSource:string); - end; - - TBaseFormCreator = class(TInterfacedObject, IOTAModuleCreator) - public - function GetCreatorType: string; - function GetExisting: Boolean; - function GetFileSystem: string; - function GetOwner: IOTAModule; - function GetUnnamed: Boolean; - - function GetAncestorName: string; - function GetImplFileName: string; - function GetIntfFileName: string; - function GetFormName: string; - function GetMainForm: Boolean; - function GetShowForm: Boolean; - function GetShowSource: Boolean; - function NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile; - function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; - function NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; - - procedure FormCreated(const FormEditor: IOTAFormEditor); - end; { TBaseFormCreator } - - TNewModuleExpert = class(TInterfacedObject, - IOTAWizard, - IOTARepositoryWizard, - IOTAFormWizard, - {$IFDEF BDS} - IOTARepositoryWizard80, - {$ENDIF} - IOTARepositoryWizard60) - public - - constructor Create(); - destructor Destroy(); override; - - procedure AfterSave; - procedure BeforeSave; - procedure Destroyed; - procedure Modified; - - procedure Execute; - function GetAuthor: String; - function GetComment: String; - function GetGlyph: Cardinal; - function GetIDString: String; - function GetName: String; - function GetPage: String; - function GetState: TWizardState; - function GetDesigner: String; - - {$IFDEF BDS} - function GetGalleryCategory: IOTAGalleryCategory; - function GetPersonality: string; - {$ENDIF} - - end; - -procedure Register; - -implementation - -uses SysUtils, Graphics, - uRORes, uDADataAbstractEditors, Dialogs, uDAClientDataModuleEditorForm, Forms, - uDAClientDataModule; - -{ TBaseFormCreator } - -procedure TBaseFormCreator.FormCreated(const FormEditor: IOTAFormEditor); -begin - -end; - -function TBaseFormCreator.GetAncestorName: string; -begin - result := 'TDAClientDataModule'; -end; - -function TBaseFormCreator.GetCreatorType: string; -begin - result := sForm; -end; - -function TBaseFormCreator.GetExisting: Boolean; -begin - result := false; -end; - -function TBaseFormCreator.GetFileSystem: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetFormName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetImplFileName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetIntfFileName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetMainForm: Boolean; -begin - result := false; -end; - -function TBaseFormCreator.GetOwner: IOTAModule; -var - ModuleServices: IOTAModuleServices; - Module: IOTAModule; - NewModule: IOTAModule; -begin - Result := nil; - if BorlandIDEServices.QueryInterface(IOTAModuleServices, ModuleServices) = -S_OK then - begin - Module := ModuleServices.CurrentModule; - if Module <> nil then - if Module.GetOwnerCount > 0 then - begin - NewModule := Module.GetOwner(0); - if NewModule <> nil then - if NewModule.QueryInterface(IOTAProject, Result) <> S_OK then - Result := nil; - end; - end; -end; - -function TBaseFormCreator.GetShowForm: Boolean; -begin - result := true; -end; - -function TBaseFormCreator.GetShowSource: Boolean; -begin - result := true; -end; - -function TBaseFormCreator.GetUnnamed: Boolean; -begin - result := true; -end; - -function RemoveInitialT(const iString:string):string; -begin - result := iString; - if (result <> '') and (result[1] = 'T') then Delete(result,1,1); - //ShowMessage(iString+' '+result); -end; - -function TBaseFormCreator.NewFormFile(const FormIdent, - AncestorIdent: string): IOTAFile; -begin - result := TSourceFile.Create(Format(sBasicDfmSource,[RemoveInitialT(FormIdent)])); -end; - -function TBaseFormCreator.NewImplSource(const ModuleIdent, FormIdent, - AncestorIdent: string): IOTAFile; -begin - result := TSourceFile.Create(Format(sBasicFormSource,[ModuleIdent,RemoveInitialT(FormIdent),AncestorIdent,'uDAClientDataModule'])); -end; - -function TBaseFormCreator.NewIntfSource(const ModuleIdent, FormIdent, - AncestorIdent: string): IOTAFile; -begin - -end; - -{ TSourceFile } - -constructor TSourceFile.Create(const iSource: string); -begin - inherited Create(); - fSource := iSource; - fAge := Now; -end; - -function TSourceFile.GetAge: TDateTime; -begin - result := fAge; -end; - -function TSourceFile.GetSource: string; -begin - result := fSource; -end; - -{ TNewModuleExpert } - -constructor TNewModuleExpert.Create; -begin - inherited; -end; - -destructor TNewModuleExpert.Destroy; -begin - inherited; -end; - -procedure TNewModuleExpert.Execute; -var - lModuleServices: IOTAModuleServices; - lModuleCreator: IOTAModuleCreator; - lModule: IOTAModule; -begin - if BorlandIDEServices.QueryInterface(IOTAModuleServices, lModuleServices) = S_OK then - begin - lModuleCreator := TBaseFormCreator.Create(); - lModule := lModuleServices.CreateModule(lModuleCreator); - TDAClientDataModuleEditorForm.Execute(Application, - (lModule.GetCurrentEditor as INTAFormEditor).FormDesigner.Root as TDAClientDataModule, - (lModule.GetCurrentEditor as INTAFormEditor).FormDesigner); - end; -end; - -function TNewModuleExpert.GetAuthor: String; -begin - result := 'RemObjects Software'; -end; - -function TNewModuleExpert.GetComment: String; -begin - result := 'Data Abstract ClientDataModule'; -end; - -function TNewModuleExpert.GetGlyph: Cardinal; -begin - result := LoadIcon(hInstance,'DAClientDataModule'); -end; - -function TNewModuleExpert.GetIDString: String; -begin - result := 'RemObjectsDAClientDataModule'; -end; - -function TNewModuleExpert.GetName: String; -begin - result := 'Data Abstract ClientDataModule'; -end; - -function TNewModuleExpert.GetPage: String; -begin - result := 'RemObjects Data Abstract'; -end; - -{$IFDEF BDS} -function TNewModuleExpert.GetGalleryCategory: IOTAGalleryCategory; -var - lGalleryManager: IOTAGalleryCategoryManager; -begin - lGalleryManager := BorlandIDEServices as IOTAGalleryCategoryManager; - result := lGalleryManager.FindCategory('RemObjectsDataAbstractDelphi'); -end; - -function TNewModuleExpert.GetPersonality: string; -begin - result := sDelphiPersonality; -end; -{$ENDIF} - -function TNewModuleExpert.GetState: TWizardState; -begin - result := [wsEnabled]; -end; - -procedure TNewModuleExpert.AfterSave; -begin - -end; - -procedure TNewModuleExpert.BeforeSave; -begin - -end; - -procedure TNewModuleExpert.Destroyed; -begin - -end; - -procedure TNewModuleExpert.Modified; -begin - -end; - -procedure Register; -begin - //RegisterPackageWizard(TNewModuleExpert.Create as IOTAFormWizard); -end; - -{$R 'uDAClientModuleWizard.res' 'uDAClientModuleWizard.rc'} - -function TNewModuleExpert.GetDesigner: String; -begin - Result := dAny; -end; - -initialization -finalization -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientModuleWizard.res b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientModuleWizard.res deleted file mode 100644 index dd81d99..0000000 Binary files a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAClientModuleWizard.res and /dev/null differ diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADBSessionManagerEditor.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADBSessionManagerEditor.pas deleted file mode 100644 index 5f20234..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADBSessionManagerEditor.pas +++ /dev/null @@ -1,166 +0,0 @@ -unit uDADBSessionManagerEditor; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - IDE Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, DesignIntf, DesignEditors, - uDAClasses; - -type - TDASchemaItemListEditor = class(TStringProperty) - protected - function GetSchema: TDASchema; virtual; - - public - function GetAttributes: TPropertyAttributes; override; - procedure SetValue(const Value: string); override; - property Schema: TDASchema read GetSchema; - end; - - TDASchemaCommandListEditor = class(TDASchemaItemListEditor) - public - procedure GetValues(Proc: TGetStrProc); override; - end; - - TDASchemaDataSetListEditor = class(TDASchemaItemListEditor) - public - procedure GetValues(Proc: TGetStrProc); override; - end; - - TDARemoteServiceDataSetListEditor = class(TDASchemaDataSetListEditor) - protected - function GetSchema: TDASchema; override; - - end; - - TDARemoteServiceCommandListEditor = class(TDASchemaCommandListEditor) - protected - function GetSchema: TDASchema; override; - - end; - - TDASchemaCommandAndDataSetListEditor = class(TDASchemaItemListEditor) - public - procedure GetValues(Proc: TGetStrProc); override; - end; - - TDASchemaConnectionsListEditor = class(TDASchemaItemListEditor) - public - procedure GetValues(Proc: TGetStrProc); override; - end; - -implementation - -uses - uDADBSessionManager, Dialogs, DARemoteService_Impl; - -{ TDASchemaItemListEditor } - -function TDASchemaItemListEditor.GetAttributes: TPropertyAttributes; -begin - result := [paValueList, paSortList] -end; - -function TDASchemaItemListEditor.GetSchema: TDASchema; -begin - result := (GetComponent(0) as TDADBSessionManager).Schema; -end; - -procedure TDASchemaItemListEditor.SetValue(const Value: string); -begin - inherited; - -end; - -{ TDASchemaCommandListEditor } - -procedure TDASchemaCommandListEditor.GetValues(Proc: TGetStrProc); -var - i: integer; -begin - if Assigned(Schema) then begin - for i := 0 to Schema.Commands.Count - 1 do begin - Proc(Schema.Commands[i].Name); - end; - end; -end; - -{ TDASchemaDataSetListEditor } - -procedure TDASchemaDataSetListEditor.GetValues(Proc: TGetStrProc); -var - i: integer; -begin - if Assigned(Schema) then begin - for i := 0 to Schema.Datasets.Count - 1 do begin - Proc(Schema.Datasets[i].Name); - end; - end; -end; - -{ TDASchemaCommandAndDataSetListEditor } - -procedure TDASchemaCommandAndDataSetListEditor.GetValues(Proc: TGetStrProc); -var - i: integer; -begin - if Assigned(Schema) then begin - for i := 0 to Schema.Datasets.Count - 1 do begin - Proc(Schema.Datasets[i].Name); - end; - if (Schema.Datasets.Count > 0) and (Schema.Commands.Count > 0) then - Proc('---'); - - for i := 0 to Schema.Commands.Count - 1 do begin - Proc(Schema.Commands[i].Name); - end; - end; -end; - -{ TDASchemaConnectionsListEditor } - -procedure TDASchemaConnectionsListEditor.GetValues(Proc: TGetStrProc); -var - i: integer; -begin - if Assigned(Schema) and Assigned(Schema.ConnectionManager) then begin - for i := 0 to Schema.ConnectionManager.Connections.Count - 1 do begin - Proc(Schema.ConnectionManager.Connections[i].Name); - end; - end; -end; - -{ TDARemoteServiceDataSetListEditor } - -function TDARemoteServiceDataSetListEditor.GetSchema: TDASchema; -begin - result := (GetComponent(0) as TDARemoteService).ServiceSchema; -end; - -{ TDARemoteServiceCommandListEditor } - -function TDARemoteServiceCommandListEditor.GetSchema: TDASchema; -begin - result := (GetComponent(0) as TDARemoteService).ServiceSchema; -end; - -end. diff --git a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADataAbstractEditors.pas b/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADataAbstractEditors.pas deleted file mode 100644 index 21146fb..0000000 --- a/internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDADataAbstractEditors.pas +++ /dev/null @@ -1,1286 +0,0 @@ -unit uDADataAbstractEditors; - -{----------------------------------------------------------------------------} -{ Data Abstract Library - IDE Library -{ -{ compiler: Delphi 6 and up, Kylix 3 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the Data Abstract -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF MSWINDOWS} -{$I ..\DataAbstract.inc} -{$ENDIF MSWINDOWS} -{$IFDEF LINUX} -{$I ../DataAbstract.inc} -{$ENDIF LINUX} - -interface - -uses - Windows, Classes, uDAClasses, DesignIntf, DesignEditors, uRODL, ColnEdit,uDARes, - uDAClientDataModule, uDADataTable, uDARemoteDataAdapter, uROClient, SysUtils, - uRORemoteService; - -type { TDADriverManagerEditor } - TDADriverManagerEditor = class(TComponentEditor) - private - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDAConnectionManagerEditor } - TDAConnectionManagerEditor = class(TComponentEditor) - private - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDADataDictionaryEditor } - TDADataDictionaryEditor = class(TComponentEditor) - private - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDASchemaEditor } - TDASchemaEditor = class(TComponentEditor) - protected - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDADesigntimeCallEditor } - TDADesigntimeCallEditor = class(TComponentEditor) - protected - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDADataRequestCallMethodNameEditor } - TDADataRequestCallMethodNameEditor = class(TStringProperty) - private - function RetrieveLibrary: TRODLLibrary; - - protected - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - procedure SetValue(const Value: string); override; - end; - - { TDALoginAwareComponentEditor } - TDALoginAwareComponentEditor = class(TComponentEditor) - protected - fRemoteService: TRORemoteService; - function GetAdapterSchema(aAdapter: TDARemoteDataAdapter): TDASchema; - procedure OnLoginNeeded(Sender: TROTransportChannel; anException: Exception; var aRetry: Boolean); - end; - - { TDADataTableEditor } - TDADataTableEditor = class(TDALoginAwareComponentEditor) - protected - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDARemoteDataAdapterEditor } - TDARemoteDataAdapterEditor = class(TDALoginAwareComponentEditor) - private - fDataTables: TStringList; - function HookUpDataTables: boolean; - procedure GetDataTables(const aName: string); - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - - { TDADataTableMasterDetailProps } - {$IFDEF MSWINDOWS} - TDADataTableMasterDetailProps = class(TStringProperty) - protected - public - function GetAttributes: TPropertyAttributes; override; - procedure Edit; override; - end; - {$ENDIF MSWINDOWS} - - { TDABusinessProcessorCommandProperty } - TDABusinessProcessorCommandProperty = class(TStringProperty) - protected - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDABusinessProcessorRefDatasetProperty } - TDABusinessProcessorRefDatasetProperty = class(TStringProperty) - protected - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDACollectionProperty } - TDACollectionProperty = class(TCollectionProperty) - private - protected - public - procedure Edit; override; - function GetAttributes: TPropertyAttributes; override; - end; - - { TDADataTableLogicalNameEditor } - TDADataTableLogicalNameEditor = class(TStringProperty) - private - function GetSchema: TDASchema; - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDACollectionItemDatasetNameEditor } - TDACollectionItemDatasetNameEditor = class(TStringProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDADataTableLocalConnection } - TDADataTableLocalConnection = class(TStringProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDADriverManagerDirectory } - TDADriverManagerDirectory = class(TStringProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - procedure SetValue(const Value: string); override; - end; - - { TDADataTableReferenceDataTable } - TDADataTableReferenceDataTable = class(TComponentProperty) - public - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDALookupSourceProperty } - TDALookupSourceProperty = class(TStringProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDALookupDestProperty } - TDALookupDestProperty = class(TStringProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDALookupResultFieldProperty } - TDALookupResultFieldProperty = class(TDALookupDestProperty) - private - public - function GetAttributes: TPropertyAttributes; override; - procedure SetValue(const Value: string); override; - end; - -implementation - -uses - Dialogs, ToolsAPI, ShellAPI, Graphics, Controls, FileCtrl, - TypInfo, Forms, ClipBrd, DB, - uROTypes, - uDAUtils, uDADriverManager, uDADriverInfo, uDASupportClasses, - uROClasses, - {$IFDEF MSWINDOWS} - uROIDETools, uROIDEMenu, uROPleaseWaitForm, uDASchemaUnitsGenerator, - uDAIDEMenu, uDADataTableMasterLinkWizardForm, uDAPleaseWaitForm, - {$ENDIF MSWINDOWS} - uRODLToXML, uDAInterfaces, uDABusinessProcessor, uDAIDERes, - IniFiles, Registry, uDAIDEData, uDADesigntimeCall, uDASelectDataTablesForm, - uRODynamicRequest, uDADataTableWizards, uROLoginNeededForm; - -{ TDASchemaEditor } - -const - {$IFDEF MSWINDOWS} - COMMAND_INDEX_EDIT = 0; - COMMAND_INDEX_PUBLISH = 1; - COMMAND_INDEX_SEPARATOR_1 = 2; - COMMAND_INDEX_SAVE = 3; - COMMAND_INDEX_LOAD = 4; - COMMAND_INDEX_SEPARATOR_2 = 5; - COMMAND_INDEX_GENCODE = 6; - COMMAND_INDEX_GENCONSTS = 7; - {$ENDIF MSWINDOWS} - {$IFDEF LINUX} - COMMAND_INDEX_EDIT = -1; - COMMAND_INDEX_PUBLISH = -2; - COMMAND_INDEX_SAVE = 0; - COMMAND_INDEX_LOAD = 1; - {$ENDIF LINUX} - -procedure TDASchemaEditor.ExecuteVerb(Index: Integer); -var - schema :TDASchema; - connmgr : TDAConnectionManager; - lSchemaAge:integer; - sfname, - cmfname, dadname,diagramname :string; - i, x : integer; - s : string; - lDesigner:IDesignerNotify; - params: TStringList; -begin - schema := GetComponent as TDASchema; - connmgr := schema.ConnectionManager; - - {$IFDEF MSWINDOWS} - if (Index=COMMAND_INDEX_GENCONSTS) then begin - params := TStringList.Create; - with schema do try - params.Sorted := TRUE; - - s := ''; - if Datasets.Count>0 then begin - s := Format(' { Dataset names contained in schema "%s" }',[schema.Name])+#13#10; - for i := 0 to (Datasets.Count-1) do begin - s := s+Format(' ds_%s = ''%s'';', [MakeValidIdentifier(Datasets[i].Name), Datasets[i].Name])+#13#10; - end; - end; - - if Commands.Count>0 then begin - s := s+#13#10+Format(' { Command names contained in schema "%s"}',[schema.Name])+#13#10; - for i := 0 to (Commands.Count-1) do begin - s := s+Format(' cmd_%s = ''%s'';', [MakeValidIdentifier(Commands[i].Name), Commands[i].Name])+#13#10; - end; - end; - - s := s+' { Dataset and command parameters }'+#13#10; - for i := 0 to (Datasets.Count-1) do begin - for x := 0 to (Datasets[i].Params.Count-1) do begin - // Checks for duplicates - if params.IndexOf(UpperCase(Datasets[i].Params[x].Name))<0 - then params.Add(UpperCase(Datasets[i].Params[x].Name)) - else Continue; - - s := s+Format(' par_%s = ''%s'';', [Datasets[i].Params[x].Name, Datasets[i].Params[x].Name])+#13#10; - end; - end; - - for i := 0 to (Commands.Count-1) do begin - for x := 0 to (Commands[i].Params.Count-1) do begin - // Checks for duplicates - if params.IndexOf(UpperCase(Commands[i].Params[x].Name))<0 - then params.Add(UpperCase(Commands[i].Params[x].Name)) - else Continue; - - s := s+Format(' par_%s = ''%s'';', [Commands[i].Params[x].Name, Commands[i].Params[x].Name])+#13#10; - end; - end; - finally - params.Free; - end; - - Clipboard.AsText := s; - Exit; - end; - {$ENDIF MSWINDOWS} - - if (Index<>COMMAND_INDEX_LOAD) {$IFDEF MSWINDOWS} and (Index<>COMMAND_INDEX_GENCODE) {$ENDIF} then begin - Check(connmgr=NIL, 'The schema doesn''t have a connection manager associated. Cannot launch Schema Modeler'); - - if (Index=COMMAND_INDEX_SAVE) then begin - sfname := schema.Name; - if not PromptForFileName(sfname, 'Data Abstract Schema (*'+daFileExtSchemaFile+')|*'+daFileExtSchemaFile+'|All Files (*.*)|*.*', daFileExtSchemaFile, 'Save Schema '+schema.Name, '', TRUE) - then Exit; - end - else begin - sfname := GetTempFileName(daFileExtSchemaFile); - end; - - schema.SaveToFile(sfname, pfXML); - lSchemaAge := FileAge(sfname); - - cmfname := ChangeFileExt(sfname, daFileExtConnectionMgrFile); - connmgr.SaveToFile(cmfname, pfXML); - - dadname := ''; - if Assigned(schema.DataDictionary) then begin - dadname := ChangeFileExt(sfname, daFileExtDataDictionaryFile); - schema.DataDictionary.SaveToFile(dadname, pfXML); - end; - - diagramname := ''; - if Assigned(schema.Diagrams) then begin - diagramname := ChangeFileExt(sfname, DAFileExtDiagramsFile); - schema.Diagrams.SaveToFile(diagramname); - end; - - if (Index=COMMAND_INDEX_LOAD) then Exit; // Only wants to save! - - case Index of - {$IFDEF MSWINDOWS} - COMMAND_INDEX_EDIT:try - with CreatePleaseWaitForm('Running the Schema Modeler...') do try - Show(); - ExecuteAndWait(GetSchemaModelerPath, '/ns /platform:Delphi /projectname:"'+GetComponent().Name+'" /autosave /schemafile:"'+sfname+'"'); - Hide(); - finally - Free(); - end; - - if lSchemaAge < FileAge(sfname) then begin - - schema.LoadFromFile(sfname, pfXML); - Designer.Modified(); - - connmgr.LoadFromFile(cmfname, pfXML); - lDesigner := FindRootDesigner(connmgr); - if Assigned(lDesigner) then lDesigner.Modified(); - - if dadname <> '' then begin - schema.DataDictionary.LoadFromFile(dadname, pfXML); - lDesigner := FindRootDesigner(schema.DataDictionary); - if Assigned(lDesigner) then lDesigner.Modified(); - end; - - if diagramname <> '' then begin - schema.Diagrams.LoadFromFile(diagramname); - lDesigner := FindRootDesigner(schema.DataDictionary); - if Assigned(lDesigner) then lDesigner.Modified(); - end; - - end; - finally - DeleteFile(sfname); - DeleteFile(cmfname); - if dadname <> '' then DeleteFile(dadname); - end; - COMMAND_INDEX_PUBLISH:try - with CreatePleaseWaitForm('Running the Service Builder...') do try - Show(); - {$IFDEF SB2} - LaunchServiceBuilderForCurrentProject('/dataabstract-import-schema /schemafile:"'+sfname+'" /schemacomponentname:"'+schema.Name+'" /ServiceName:"'+schema.Owner.Name+'"',true,true); - {$ELSE} - LaunchServiceBuilderForCurrentProject('/execute:"DataAbstract.PublishSchemaWizard" /execute-options:"Schema='+sfname+';ServiceName='+schema.Owner.Name+';SchemaComponentName='+schema.Name+'"',true,true); - {$ENDIF} - Hide(); - finally - Free(); - end; - finally - DeleteFile(sfname); - DeleteFile(cmfname); - if dadname <> '' then DeleteFile(dadname); - if diagramname <> '' then DeleteFile(diagramname); - end; - {$ENDIF MSWINDOWS} - COMMAND_INDEX_SAVE:exit; - end; - end - - {$IFDEF MSWINDOWS} - else if (Index=COMMAND_INDEX_GENCODE) then begin - //MessageDlg('Not available yet', mtWarning, [mbOK], 0); - GenerateSchemaUnits(schema); - end - {$ENDIF MSWINDOWS} - - else begin - if PromptForFileName(sfname, 'Data Abstract Schema (*'+daFileExtSchemaFile+')|*'+daFileExtSchemaFile+'|All Files (*.*)|*.*', daFileExtSchemaFile, 'Load Schema') - then schema.LoadFromFile(sfname, pfXML); - end; -end; - -function TDASchemaEditor.GetVerb(Index: Integer): string; -begin - case Index of - {$IFDEF MSWINDOWS} - COMMAND_INDEX_SEPARATOR_1, - COMMAND_INDEX_SEPARATOR_2 : result := '-'; - {$ENDIF MSWINDOWS} - COMMAND_INDEX_EDIT : result := 'Edit '+GetComponent.Name; - COMMAND_INDEX_PUBLISH : result := 'Publish '+GetComponent.Name+'...'; - COMMAND_INDEX_SAVE : result := 'Save '+GetComponent.Name+' to Disk...'; - COMMAND_INDEX_LOAD : result := 'Load '+GetComponent.Name+' from Disk...'; - {$IFDEF MSWINDOWS} - COMMAND_INDEX_GENCODE : result := 'Generate '+GetComponent.Name+' strongly-typed access units...'; - COMMAND_INDEX_GENCONSTS : result := 'Copy Dataset and Command Names to Clipboard'; - {$ENDIF MSWINDOWS} - end; -end; - -function TDASchemaEditor.GetVerbCount: Integer; -begin - {$IFDEF MSWINDOWS} - result := 8; - {$ENDIF MSWINDOWS} - {$IFDEF LINUX} - result := 4; - {$ENDIF LINUX} -end; - -{ TDADriverManagerEditor } - -procedure TDADriverManagerEditor.ExecuteVerb(Index: Integer); -var - s : string; - i: Integer; - sl : IROStrings; - dm : TDADriverManager; -begin - dm := TDADriverManager(GetComponent); - s := ''; - - case Index of - 0 : ShowDriverInfo(dm); - - 1: begin - if (dm.DriverCount=0) then begin - MessageDlg('No drivers to unload.', mtWarning, [mbOK], 0); - end - else begin - dm.UnloadAllDrivers; - MessageDlg('Drivers unloaded.', mtInformation, [mbOK], 0); - end; - end; - - 2 : begin - if (dm.DriverDirectory='') then begin - MessageDlg('DriverDirectory is empty. Cannot load drivers.', mtWarning, [mbOK], 0); - end - else begin - dm.ListDrivers(dm.DriverDirectory, sl); - if (sl.Count=0) then begin - MessageDlg('No drivers were found', mtInformation, [mbOK], 0); - end - else begin - {$IFDEF MSWINOWS} - with CreatePleaseWaitForm('Loading Drivers...') do try - {$ENDIF MSWINOWS} - for i := 0 to sl.Count-1 do try - {$IFDEF MSWINOWS} - Show(Format('Loading %s...',[ExtractFileName(sl[i])])); - {$ENDIF MSWINOWS} - dm.LoadDriver(sl[i]); - except - on E:EDADriverAlreadyLoaded do; - on E:EDASchemaModelerOnly do; - on E:Exception do begin - {$IFDEF MSWINOWS} - Hide(); - {$ENDIF MSWINOWS} - ShowMessageFmt('There was an error loading the %s driver:'#13#13'%s: %s',[ExtractFileName(sl[i]),E.ClassName,E.Message]); - end; - end; { for } - {$IFDEF MSWINOWS} - end; - {$ENDIF MSWINOWS} - MessageDlg(IntToStr(dm.DriverCount)+' Drivers loaded.', mtInformation, [mbOK], 0); - end; - end; - end; - end; -end; - -function TDADriverManagerEditor.GetVerb(Index: Integer): string; -var dir : string; -begin - case Index of - 0 : result := 'Display Driver Information...'; - 1 : result := 'Unload All Drivers'; - 2 : begin - dir := TranslateFileName(TDADriverManager(GetComponent).DriverDirectory); - if (dir='') - then dir := ''; - result := 'Load Drivers in '+dir; - end; - end; -end; - -function TDADriverManagerEditor.GetVerbCount: Integer; -begin - result := 3; -end; - -{ TDAConnectionManagerEditor } - -procedure TDAConnectionManagerEditor.ExecuteVerb(Index: Integer); -var connmgr : TDAConnectionManager; - sfname : string; -begin - connmgr := GetComponent as TDAConnectionManager; - sfname := connmgr.Name+daFileExtConnectionMgrFile; - - case Index of - 0:begin - ShowCollectionEditor(Designer, connmgr, connmgr.Connections, 'Connections'); - end; - - 1 : {separator}; - - 2 : begin - if not PromptForFileName(sfname, 'Data Abstract Connections (*'+daFileExtConnectionMgrFile+')|*'+daFileExtConnectionMgrFile+'|All Files (*.*)|*.*', daFileExtConnectionMgrFile, 'Save Connections '+connmgr.Name, '', TRUE) - then Exit; - - connmgr.SaveToFile(sfname, pfXML); - end; - - 3: begin - if not PromptForFileName(sfname, 'Data Abstract Connections (*'+daFileExtConnectionMgrFile+')|*'+daFileExtConnectionMgrFile+'|All Files (*.*)|*.*', DAFileExtConnectionMgrFile, 'Load Connections '+connmgr.Name, '') - then Exit; - - connmgr.LoadFromFile(sfname, pfXML); - end; - end; -end; - -function TDAConnectionManagerEditor.GetVerb(Index: Integer): string; -begin - case Index of - 0 : result := 'Connection List Editor'; - 1 : result := '-'; - 2 : result := 'Save '+GetComponent.Name+' To Disk...'; - 3 : result := 'Load '+GetComponent.Name+' From Disk...'; - end; -end; - -function TDAConnectionManagerEditor.GetVerbCount: Integer; -begin - result := 4; -end; - -{ TDADataRequestAccessParamEditor } - -procedure CheckCondition(InvalidSituation : boolean; const anErrorMessage : string); -begin - if InvalidSituation then begin - MessageDlg(anErrorMessage, mtError, [mbOK], 0); - Abort; - end; -end; - - -{ TDADataRequestCallMethodNameEditor } - -function TDADataRequestCallMethodNameEditor.GetAttributes: TPropertyAttributes; -begin - result := [paValueList] -end; - -function TDADataRequestCallMethodNameEditor.RetrieveLibrary : TRODLLibrary; -var datamethod : TDARemoteRequest; - //datatable : TDADataTable; - //adapter : TDADataAdapter; - rs : TRORemoteService; - svcname : string; -begin - //result := NIL; - - // Sets the variable we need - datamethod := GetComponent(0) as TDARemoteRequest; - rs := datamethod.RemoteService; - - CheckCondition(rs=NIL, 'RemoteService must be assigned.'); - - svcname := Trim(rs.ServiceName); - CheckCondition(svcname='', rs.Name+'.ServiceName must be assigned.'); - - {adapter := datamethod.Owner.Adapter; - CheckCondition(adapter=NIL, 'The Adpater property is not set');} - - result := rs.GetRODLLibrary; -end; - -procedure TDADataRequestCallMethodNameEditor.GetValues(Proc: TGetStrProc); -var lib : TRODLLibrary; - i,j : integer; - svc : TRODLService; - svcintf : TRODLServiceInterface; - svcname : string; - sl : IROStrings; - anchestors : TList; - method: TDARemoteRequest; -begin - lib := RetrieveLibrary; - if not assigned(lib) then - raise Exception.Create('RODL library could npt be retrieved from server.'); - - anchestors := TList.Create; - try - - method := GetComponent(0) as TDARemoteRequest; - svcname := method.RemoteService.ServiceName; - - svc := lib.FindService(svcname); - if not assigned(svc) then raise Exception.Create('Service "'+svcname+'" could not be found in RODL.'); - - repeat - anchestors.Add(svc.Default); - if (Trim(svc.Ancestor)<>'') then begin - svc := lib.FindService(svc.Ancestor); - if not assigned(svc) then break; - end - else break; - until false; - - // Methods - sl := NewROStrings; - sl.Sorted := TRUE; - - for i := 0 to anchestors.Count-1 do begin - svcintf := TRODLServiceInterface(anchestors[i]); - - for j := 0 to (svcintf.Count-1) do begin - {if (svcintf.Items[i].Result=NIL) or - not (StrToDataType(svcintf.Items[i].Result.DataType)=method.Owner.Adapter.TargetDataType) - then Continue;} - - sl.Add(svcintf.Items[j].Name); - end; - end; - - for i := 0 to (sl.Count-1) - do Proc(sl[i]); - - finally - anchestors.Free; - end; -end; - -procedure TDADataRequestCallMethodNameEditor.SetValue(const Value: string); -var - lRemoteRequest: TDARemoteRequest; - lOldMethodName: String; -begin - lRemoteRequest := TDARemoteRequest(GetComponent(0)); - lOldMethodName := lRemoteRequest.MethodName; - lRemoteRequest.MethodName := Value; - if (Trim(lOldMethodName) <> Trim(Value)) - then Designer.Modified(); - - if (Trim(Value)='') then Exit; - - if MessageDlg('Do you want to retrieve the parameters of the method '+Value+'?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin - {$IFDEF MSWINOWS} - with CreatePleaseWaitForm('Retrieving Parameters...') do begin - {$ENDIF MSWINOWS} - lRemoteRequest.RefreshParams(true); - {$IFDEF MSWINOWS} - Hide(); - Designer.Modified(); - end; - {$ENDIF MSWINOWS} - end; - -end; - -{ TDALoginAwareComponentEditor } - -procedure TDALoginAwareComponentEditor.OnLoginNeeded(Sender: TROTransportChannel; anException: Exception; var aRetry: Boolean); -begin - aRetry := TROLoginNeededForm.Execute(fRemoteService); -end; - -function TDALoginAwareComponentEditor.GetAdapterSchema(aAdapter: TDARemoteDataAdapter): TDASchema; -var - lSaved: TROExceptionEvent; -begin - if aAdapter.RemoteService.Channel = nil then - raise EROException.Create('Channel not assigned'); - lSaved := aAdapter.RemoteService.Channel.OnLoginNeeded; - aAdapter.RemoteService.Channel.OnLoginNeeded := OnLoginNeeded; - try - fRemoteService := aAdapter.RemoteService; - result := aAdapter.ReadSchema(True); - finally - aAdapter.RemoteService.Channel.OnLoginNeeded := lSaved; - end; -end; - -{ TDARemoteDataAdapterEditor } - -procedure TDARemoteDataAdapterEditor.GetDataTables(const aName: string); -begin - fDataTables.Add(aName); -end; - -function TDARemoteDataAdapterEditor.HookUpDataTables: boolean; -var - lForm: TDASelectDataTablesForm; - i: integer; -begin - fDataTables := TStringList.Create; - try - fDataTables.Sorted := true; - Designer.GetComponentNames(GetTypeData(TypeInfo(TDADataTable)), GetDataTables); - if fDataTables.Count > 0 then begin - lForm := TDASelectDataTablesForm.Create(nil); - try - for i := 0 to fDataTables.Count - 1 do begin - lForm.lb_DataTables.Items.AddObject(fDataTables[i], nil); - lForm.lb_DataTables.Checked[lForm.lb_DataTables.Items.Count-1] := not assigned((Designer.GetComponent(fDataTables[i]) as TDADataTable).RemoteDataAdapter); - end; - lForm.UpdateCheckBoxState(); - lForm.OkButtonCaption := '&Hook Up'; - result := (lForm.ShowModal() = idOk); - if result then begin - for i := 0 to lForm.lb_DataTables.Items.Count - 1 do - if lForm.lb_DataTables.Checked[i] then - (Designer.GetComponent(lForm.lb_DataTables.Items[i]) as TDADataTable).RemoteDataAdapter := TDARemoteDataAdapter(GetComponent); - end; - finally - FreeAndNil(lForm); - end; - end - else begin - result := false; - ShowMessage('No data tables were found on module.') - end; - finally - FreeAndNil(fDataTables); - end; -end; - -procedure TDARemoteDataAdapterEditor.ExecuteVerb(Index: Integer); -var - lAdapter: TDARemoteDataAdapter; -begin - lAdapter := TDARemoteDataAdapter(GetComponent); - case Index of - 0: lAdapter.SetupDefaultRequest(); - 1: lAdapter.SetupDefaultRequestV3(); - 2: { Separator }; - 3: if not HookUpDataTables() then exit; - 4: if not TDataTableWizards.CreateDataTables(Designer, lAdapter, GetAdapterSchema(lAdapter), Point(0,0)) then exit; - end; - Designer.Modified(); -end; - -function TDARemoteDataAdapterEditor.GetVerb(Index: Integer): string; -begin - case Index of - 0 : result := '&Reset Calls to Default'; - 1 : result := 'Reset Calls to Default (Legacy v&3.0)'; - 2 : result := '-'; - 3 : result := '&Hook up Data Tables...'; - 4 : result := '&Create Data Tables...'; - end; -end; - -function TDARemoteDataAdapterEditor.GetVerbCount: Integer; -begin - result := 5; -end; - -{ TDADataTableEditor } - -procedure TDADataTableEditor.ExecuteVerb(Index: Integer); -var - dt: TDADataTable; - ds: TDADataset; - lTempSchema: TDASchema; - lTempSchemaDataSet: TDADataset; - s: string; - lSaved: TROExceptionEvent; -begin - dt := TDADataTable(GetComponent); - - case Index of - 0:begin - ShowCollectionEditor(Designer, dt, dt.Fields, 'Fields'); - end; - 1:{ Seperator }; - 2:begin - if not (MessageDlg('Do you want to retrieve the schema of '+dt.Name+'?'#13+ - 'This will overwrite the current field and parameter settings.', - mtWarning, [mbYes, mbNo], 0)=mrYes) then Exit; - - if dt.LogicalName = '' then - raise Exception.Create('LogicalName must be set.'); - - if assigned(dt.RemoteDataAdapter) then begin - (dt.RemoteDataAdapter as TDARemoteDataAdapter).CheckProperties(); - fRemoteService := (dt.RemoteDataAdapter as TDARemoteDataAdapter).RemoteService; - lSaved := fRemoteService.Channel.OnLoginNeeded; - fRemoteService.Channel.OnLoginNeeded := OnLoginNeeded; - (dt.RemoteDataAdapter as TDARemoteDataAdapter).FlushSchema; - try - dt.LoadSchema(true, true); - finally - fRemoteService.Channel.OnLoginNeeded := lSaved; - end; - end - else if assigned(dt.LocalSchema) and assigned(dt.LocalDataStreamer) then begin - ds := dt.LocalSchema.Datasets.DatasetByName(dt.LogicalName); - dt.Fields.AssignFieldCollection(ds.Fields); - dt.Params.AssignParamCollection(ds.Params); - end - else begin - MessageDlg('Either RemoteDataAdapter or LocalSchema/LocalDataStreamer must be assigned.', mtError, [mbOK], 0); - Exit; - end; - - s := 'Schema loaded successfully. '+IntToStr(dt.Fields.Count)+' fields'; - if (dt.Params.Count>0) then s := s+' and '+IntToStr(dt.Params.Count)+' params'; - s := s+' have been created. Original lookup- and client calculated fields have been preserved.'; - - MessageDlg(s, mtInformation, [mbOK], 0); - - Designer.Modified; - end; - {$IFDEF MSWINDOWS} - 3: if TDADataTableMasterLinkWizard.ExecuteWizard(dt, Designer) then - Designer.Modified(); - 4:{ Seperator }; - 5:begin - lTempSchema := TDASchema.Create(NIL); - try - lTempSchema.Name := MakeValidIdentifier(dt.LogicalName); - if lTempSchema.Name = '' then lTempSchema.Name := dt.Name; - - lTempSchemaDataSet := lTempSchema.Datasets.Add(); - lTempSchemaDataSet.Name := lTempSchema.Name; - lTempSchemaDataSet.Fields.AssignFieldCollection(dt.Fields); - - GenerateSchemaUnits(lTempSchema); - finally - lTempSchema.Free; - end; - end; - 6:{ Seperator }; - 7:begin - with TDAIdeData.Create(nil) do try - if dlg_OpenBriefcase.Execute then begin - dt.LoadFromFile(dlg_OpenBriefcase.Filename); - Designer.Modified(); - end; - finally - Free(); - end; - end; - 8:begin - if not dt.Active then - raise Exception.Create('DataTable is not active.'); - - with TDAIdeData.Create(nil) do try - if dlg_SaveBriefcase.Execute then begin - dt.SaveToFile(dlg_SaveBriefcase.Filename); - end; - finally - Free(); - end; - end; - 10:begin - if dt.LogicalName = '' then - raise Exception.Create('LogicalName must be set.'); - - if assigned(dt.RemoteDataAdapter) then begin - (dt.RemoteDataAdapter as TDARemoteDataAdapter).CheckProperties(); - fRemoteService := (dt.RemoteDataAdapter as TDARemoteDataAdapter).RemoteService; - lSaved := fRemoteService.Channel.OnLoginNeeded; - fRemoteService.Channel.OnLoginNeeded := OnLoginNeeded; - try - dt.Open(); - finally - fRemoteService.Channel.OnLoginNeeded := lSaved; - end; - end; - Designer.Modified; - end; - - {$ENDIF MSWINDOWS} - end; { case } -end; - -function TDADataTableEditor.GetVerb(Index: Integer): string; -begin - case Index of - 0 : result := 'Field Collection Editor'; - 1 : result := '-'; - //2 : result := 'Dynamic Method Binding Setup Wizard (Legacy v3.0)'; - //3 : result := '-'; - 2 : result := 'Retrieve DataTable Schema'; - 3 : result := 'Master/Detail Wizard'; - 4 : result := '-'; - 5 : result := 'Generate Business Class...'; - 6 : result := '-'; - 7 : result := 'Load Data from briefcase file...'; - 8 : result := 'Save Data to briefcase file...'; - 9 : result := '-'; - 10 : result := 'Get Design-Time Data'; - end; -end; - -function TDADataTableEditor.GetVerbCount: Integer; -begin - {$IFDEF MSWINDOWS} - result := 9; - if not TDADataTable(GetComponent).Active and (assigned(TDADataTable(GetComponent).RemoteDataAdapter)) then inc(result,2); - {$ENDIF MSWINDOWS} - {$IFDEF LINUX} - result := 3; - {$ENDIF LINUX} -end; - -{ TDABusinessProcessorCommandProperty } - -function TDABusinessProcessorCommandProperty.GetAttributes: TPropertyAttributes; -begin - result := [paValueList, paSortList] -end; - -procedure TDABusinessProcessorCommandProperty.GetValues(Proc: TGetStrProc); -var biz : TDABusinessProcessor; - i : integer; - list : IROStrings; -begin - biz := GetComponent(0) as TDABusinessProcessor; - if (biz.Schema=NIL) then Exit; - - list := NewROStrings; - for i := 0 to (biz.Schema.Commands.Count-1) do - list.Add(biz.Schema.Commands[i].Name); - - list.Sorted := TRUE; - - for i := 0 to (list.Count-1) do - Proc(list[i]); -end; - -type - TPersistentCracker = class(TPersistent); - -{ TDACollectionProperty } - -procedure TDACollectionProperty.Edit; -var coll : TCollection; -begin - coll := GetObjectProp(GetComponent(0), GetName) as TCollection; - - if (coll=NIL) then ShowMessage('no way!') - else showmessage(GetName+' has #'+INtToSTr(coll.count)+' '+TComponent(integer(coll.Owner)).ClassName); - - ShowCollectionEditor(Designer, TComponent(GetComponent(0)), coll, GetName); -end; - -function TDACollectionProperty.GetAttributes: TPropertyAttributes; -begin - result := [paDialog, paReadOnly]; -end; - -{ TDABusinessProcessorRefDatasetProperty } - -function TDABusinessProcessorRefDatasetProperty.GetAttributes: TPropertyAttributes; -begin - result := [paValueList, paSortList] -end; - -procedure TDABusinessProcessorRefDatasetProperty.GetValues( Proc: TGetStrProc); -var biz : TDABusinessProcessor; - i : integer; - list : IROStrings; -begin - biz := GetComponent(0) as TDABusinessProcessor; - if (biz.Schema=NIL) then Exit; - - list := NewROStrings; - for i := 0 to (biz.Schema.Datasets.Count-1) do - list.Add(biz.Schema.Datasets[i].Name); - - list.Sorted := TRUE; - - for i := 0 to (list.Count-1) do - Proc(list[i]); -end; - -{ TDADataTableLogicalNameEditor } - -function TDADataTableLogicalNameEditor.GetAttributes: TPropertyAttributes; -begin - result := [paValueList, paSortList] -end; - -function TDADataTableLogicalNameEditor.GetSchema: TDASchema; -begin - Result:=nil; - try - with TDADataTable(GetComponent(0)) do - if not RemoteFetchEnabled then - Result := LocalSchema - else if (RemoteDataAdapter <> nil) and (RemoteDataAdapter is TDARemoteDataAdapter) then - Result:= (RemoteDataAdapter as TDARemoteDataAdapter).Schema; - except - // hide exception, when RDA can't receive SCHEMA - end; -end; - -procedure TDADataTableLogicalNameEditor.GetValues(Proc: TGetStrProc); -var i : integer; - _Schema: TDASchema; -begin - _Schema:= GetSchema; - if _Schema <> nil then begin - for i := 0 to (_Schema.Datasets.Count-1) do - if _Schema.Datasets[i].IsPublic then Proc(_Schema.Datasets[i].Name); - for i := 0 to (_Schema.UnionDataTables.Count-1) do - if _Schema.UnionDataTables[i].IsPublic then Proc(_Schema.UnionDataTables[i].Name); - for i := 0 to (_Schema.JoinDataTables.Count-1) do - if _Schema.JoinDataTables[i].IsPublic then Proc(_Schema.JoinDataTables[i].Name); - end; -end; - -{ TDADataTableLocalConnection } - -function TDADataTableLocalConnection.GetAttributes: TPropertyAttributes; -begin - if (TDADataTable(GetComponent(0)).LocalSchema<>NIL) and (TDADataTable(GetComponent(0)).LocalSchema.ConnectionManager<>NIL) - then result := [paValueList] - else result := [] -end; - -procedure TDADataTableLocalConnection.GetValues(Proc: TGetStrProc); -var i : integer; -begin - with TDADataTable(GetComponent(0)) do begin - if (LocalSchema=NIL) or (LocalSchema.ConnectionManager=NIL) then Exit; - - for i := 0 to (LocalSchema.ConnectionManager.Connections.Count-1) do - Proc(LocalSchema.ConnectionManager.Connections[i].Name); - end; -end; - -{ TDADriverManagerDirectory } - -function TDADriverManagerDirectory.GetAttributes: TPropertyAttributes; -begin - result := [paValueList] -end; - -const SelectDirOption = '', [svcname, Name]), 9); - Write(Format('', [svcname, Name]), 9); - Write(Format('', [Name]), 6) - end; - end; - - aService := GetAnchestor(aLibrary, aService); - end; - Write('', 3); -end; - -procedure TRODLToWSDL.WriteBindings(aLibrary: TRODLLibrary; aService: TRODLService); -var o : integer; - svcname : string; -begin - // Write all the bindings for this service and its anchestors using the method names. - // It's important to notice that we NEVER use the anchestor name when composing the SOAPAction, but - // always use the final service name - if aService.isPrivate then Exit; - svcname := aService.Name; - - Write(Format('', [svcname, svcname]), 3); - WriteAnnotation(aService.Documentation, 6); {Giovanni} - if fUseDocument then - Write('', 6) - else - Write('', 6); - - while Assigned(aService) and not aService.isPrivate do begin - - for o := 0 to (aService.Default.Count-1) do begin - with aService.Default.Items[o] do begin - Write(Format('', [Name]), 9); - if fUseDocument then - Write(Format('', [aLibrary.Name, svcname, Name]),12) - else - Write(Format('', [aLibrary.Name, svcname, Name]),12); - if fUseLiteral then begin - Write('', 12); - Write('', 15); - if fShowClientId and fUseDocument then - write('', 15); - Write('', 12); - - Write('', 12); - Write('', 15); - if fShowClientId and fUseDocument then - write('', 15); - Write('', 12); - end - else begin - Write('', 12); - Write(Format('', - [aLibrary.Name, svcname]), 15); - Write('', 12); - - Write('', 12); - Write(Format('', - [aLibrary.Name, svcname]), 15); - Write('', 12); - end; - - Write('', 9); - end; - end; - - aService := GetAnchestor(aLibrary, aService); - end; - - Write('', 3); -end; - - -procedure TRODLToWSDL.WriteAnnotation(aDocString: string; aIndentation: Integer - = 0; aNs: string = 'xs:'); -begin - Write(Format('<%sannotation>',[aNs]), aIndentation); - WriteDocumentation(aDocString,aIndentation+3); - Write(Format('',[aNs]), aIndentation); -end; - - -procedure TRODLToWSDL.WriteDocumentation(aDocString: string; aIndentation: - Integer = 0; aNs: string = 'xs:'); -begin - Write(Format('<%sdocumentation>',[aNs]), aIndentation); - Write(Format('%s', [aDocString]),aIndentation); - Write(Format('',[aNs]), aIndentation); -end; - -procedure TRODLToWSDL.WriteService(aLibrary: TRODLLibrary; aService: TRODLService); -begin - // We only write the service itself, ignoring the anchestors - if aService.isPrivate then Exit; - Write(Format('', [aService.Name]), 3); - WriteAnnotation(aService.Default.Documentation, 6); - - while Assigned(aService) and not aService.isPrivate do begin - Write(Format('', - [aService.Name, aService.Name]), 6); - Write(Format('', [fLocation]), 9); - Write('', 6); - - aService := NIL;//GetAnchestor(aLibrary, aService); - end; - - Write('',3); -end; - -procedure TRODLToWSDL.WriteStruct(const aLibrary: TRODLLibrary; aStruct: TRODLStruct); -var - i : integer; -begin - if fExternalTypesAsReferences and (aStruct.Attributes.Values['ImportedFromUrl'] <> '') then exit; - Write(Format('', [aStruct.Name]), 9); - WriteAnnotation(aStruct.Documentation, 9); {Giovanni} - Write('', 12); - while Assigned(aStruct) do begin - for i := 0 to aStruct.Count-1 do - with aStruct.Items[i] do begin - Write(Format('', [Name, ExtSOAPDataType(aLibrary, DataType)]), 15); - WriteAnnotation(Documentation, 15); {Giovanni} - Write('',15); - end; - - if aStruct.Ancestor <> '' then begin - aStruct := aLibrary.FindStruct(aStruct.Ancestor) - end - else begin - aStruct := nil; - end; - end; - Write('', 12); - Write('', 9); -end; - -procedure TRODLToWSDL.WriteLiteralParameters(aLibrary: TRODLLibrary; - aService: TRODLService); -var o, p, i : integer; - dups : TStringList; - s, svcname, mtdname : string; - op : TRODLOperation; -begin - // Writes all the methods of this service and its anchestors. - // If more than one service descend from the same base one, the WSDL has to be generated - // using a format like this: http://localhost:8099/SOAP?Service=ServiceOne - - svcname := aService.Name; - dups := TStringList.Create; - dups.Duplicates := dupIgnore; - dups.Sorted := TRUE; - try - while Assigned(aService) and not aService.isPrivate do begin - - for o := 0 to (aService.Default.Count-1) do begin - op := aService.Default.Items[o]; - - // If a method with this name is present, it skips it - mtdname := UpperCase(op.Name); - if (dups.IndexOf(mtdname)>=0) then Continue else dups.Add(mtdname); - - s := op.Attributes.Values['SOAPInputName']; - if s = '' then s := Format('%s___%s', [svcname, op.Name]); - - p := 0; - for i := 0 to op.Count -1 do begin - if op[i].Flag in [fIn, fInOut] then - inc(p); - end; - write(Format('', [s]), 3); - if p = 0 then begin - write('', 6); - end - else begin - write('', 6); - write('', 9); - for i := 0 to op.Count -1 do begin - if op[i].Flag in [fIn, fInOut] then - write(Format('', [op[i].Name, ExtSOAPDataType(aLibrary, op[i].DataType)]), 12); - end; - write('', 9); - write('', 6); - end; - write('', 3); - - s := op.Attributes.Values['SOAPOutputName']; - if s = '' then s := Format('%s___%sResponse', [svcname, op.Name]); - p := 0; - for i := 0 to op.Count -1 do begin - if op[i].Flag in [fOut, fInOut, fResult] then - inc(p); - end; - if op.Result <> nil then begin - inc(p); - end; - write(Format('', [s]), 3); - if p = 0 then begin - write('', 6); - end - else begin - write('', 6); - write('', 9); - for i := 0 to op.Count -1 do begin - if op[i].Flag in [fOut, fInOut, fResult] then - write(Format('', [op[i].Name, ExtSOAPDataType(aLibrary, op[i].DataType)]), 12); - end; - if op.Result <> nil then - write(Format('', [op.Result.Name, ExtSOAPDataType(aLibrary, op.Result.DataType)]), 12); - write('', 9); - write('', 6); - end; - write('', 3); - end; - aService := GetAnchestor(aLibrary, aService); - end; - finally - dups.Free; - end; -end; - -constructor TRODLToWSDL.Create(const aLibraryFile, aTargetEntity: string); -begin - fTargetNamespace := 'http://tempuri.org/'; - fExternalRefs := TStringList.Create; - fExternalUrls := TStringList.Create; - inherited; -end; - -constructor TRODLToWSDL.Create(const aLibrary: TRODLLibrary; - const aTargetEntity: string); -begin - fTargetNamespace := 'http://tempuri.org/'; - fExternalRefs := TStringList.Create; - fExternalUrls := TStringList.Create; - inherited; -end; - -destructor TRODLToWSDL.Destroy; -begin - fExternalRefs.Free; - fExternalUrls.Free; - inherited; -end; - -procedure TRODLToWSDL.AddExternal(aNode: TRODLEntity); -begin - if aNode.Attributes.Values['ImportedFromUrl'] = '' then exit; - if fExternalRefs.IndexOf(aNode.Attributes.Values['ImportedFromNamespace']) <> -1 then exit; - fExternalRefs.Add(aNode.Attributes.Values['ImportedFromNamespace']); - fExternalUrls.ADd(aNode.Attributes.Values['ImportedFromUrl']); -end; - -function TRODLToWSDL.ExtSOAPDataType(aLibrary: TRODLLibrary; const aDataTypeName: string): string; -var - el: TRODLEntity; -begin - if fExternalTypesAsReferences then begin - el := aLibrary.FindStruct(aDataTypeName); - if el = nil then - el := aLibrary.FindEnum(aDataTypeName); - if el = nil then - el := aLibrary.FindArray(aDataTypeName); - if el <> nil then begin - if el.Attributes.values['ImportedFromNamespace'] <> '' then begin - result := 'ns'+IntToStr(fExternalRefs.IndexOf(el.Attributes.values['ImportedFromNamespace']))+':'+aDataTypeName; - exit; - end; - end; - end; - - result := SOAPDataType(aDataTypeName, True); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen/uRODLToXML.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen/uRODLToXML.pas deleted file mode 100644 index c59c9c0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen/uRODLToXML.pas +++ /dev/null @@ -1,1214 +0,0 @@ -unit uRODLToXML; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - SysUtils, - Classes, uRODL; - -const - XMLFlagNames: array[TRODLParamFlag] of string = ( - 'In', 'Out', 'InOut', 'Result'); - -type - { TRODLToXML } - TRODLToXML = class(TRODLConverter) - private - fFlattenUsedRODLs:boolean; - fStyleSheet: string; - protected - procedure IntConvert(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); override; - public - constructor Create(const aLibrary: TRODLLibrary; iFlattenUsedRODLs:boolean=false); reintroduce; overload; - constructor Create(const aLibraryFile: string; iFlattenUsedRODLs:boolean=false); reintroduce; overload; - - property StyleSheet: string read fStyleSheet write fStyleSheet; - end; - - { TXMLToRODL } - TXMLToRODL = class(TRODLReader) - private - fAddToExistingLibrary:TRODLLibrary; - fRecreateGuids:boolean; - procedure LoadStreamToLibrary(aStream: TStream; iLibrary: TRODLLibrary; iRodlName: string = ''; iRodlUse: TRODLUse=nil; iReplaceLibraryAttributes:boolean=true); - function RecreateGuidIfNeeded(iGuid:TGuid):TGuid; - protected - function IntReadFromStream(aStream: TStream; aFilename:string): TRODLLibrary; override; - - public - constructor Create(iAddToExisting:TRODLLibrary; iRecreateGuids:boolean=false); reintroduce; overload; - procedure LoadFileToLibrary(iFilename: string; iLibrary: TRODLLibrary; iRodlUse:TRODLUse=nil); - - function ReadFromString(const aString: string; const aFilename:string=''): TRODLLibrary; - end; - -function XMLFlagNameToFlag(const aName: string): TRODLParamFlag; - -function LoadLibraryFromXml(const aFilename: string): TRODLLibrary; - -implementation - -uses - {$IFDEF DEBUG_REMOBJECTS_RODLTOXML}eDebugServer, {$ENDIF} - TypInfo, {$IFDEF DELPHI5}ComObj,{$ENDIF} - uROClasses, uRORes, uROXMLIntf; - -function XMLFlagNameToFlag(const aName: string): TRODLParamFlag; -var - f: TRODLParamFlag; -begin - result := fIn; - - for f := Low(TRODLParamFlag) to High(TRODLParamFlag) do - if (CompareText(XMLFlagNames[f], aName) = 0) then begin - result := f; - Exit; - end; - - RaiseError(err_InvalidParamFlag, [aName]); -end; - -function LoadLibraryFromXml(const aFilename: string): TRODLLibrary; -begin - with TXMLToRODL.Create do try - result := ReadFromFile(aFilename); - finally - Free; - end; -end; - -constructor TRODLToXML.Create(const aLibrary: TRODLLibrary; iFlattenUsedRODLs: boolean); -begin - fFlattenUsedRODLs := iFlattenUsedRODLs; - inherited Create(aLibrary); -end; - -constructor TRODLToXML.Create(const aLibraryFile: string; iFlattenUsedRODLs: boolean); -begin - fFlattenUsedRODLs := iFlattenUsedRODLs; - inherited Create(aLibraryFIle); -end; - -procedure TRODLToXML.IntConvert(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); -const - CRLF = #13#10; - - function Indent(SpaceCount: byte): string; - {var - i: integer;} - begin - result := ''; - {for i := 1 to SpaceCount do - result := result + ' ';} - end; - - function CleanCDATA(const aString:string):string; - var - lLength:integer; - begin - result := aString; - lLength := length(aString); - while (lLength > 0) and (result[lLength] in [#09,#10,#13,#32]) do dec(lLength); - SetLength(result,lLength); - for lLength := Length(Result) downto 1 do - if Result[lLength] in [#0..#8,#11,#12,#14..#31] then result[lLength] := #32; - result := StringReplace(result, ']]>', ']]>', [rfReplaceAll]); - end; - - procedure WriteAsCData(var XML: string; aData: string); - begin - xml := xml + ''; - end; - - procedure WriteAttributes(var XML: string; aEntity: TRODLEntity); - var - attr: integer; - begin - if aEntity.Documentation <> '' then begin - xml := xml + Indent(6) + '' ; - WriteAsCData(xml,aEntity.Documentation); - xml := xml + ''; - end; - if (aEntity.Attributes.Count > 0) then begin - with aEntity.Attributes do begin - xml := xml + Indent(6) + '' + CRLF; - - for attr := 0 to (aEntity.Attributes.Count - 1) do - xml := xml + Indent(9) + Format('<%s Value="%s" />', - [Names[attr], Values[Names[attr]]]) + CRLF; - - xml := xml + Indent(6) + '' + CRLF; - end; - end; - if Assigned(aEntity.GroupUnder) then begin - xml := xml + Indent(6) + Format('',[GUIDToString(aEntity.GroupUnder.UID)]) + CRLF; - end; - end; - -var - lAdd: string; - i, k, m, p: integer; - s, xml: string; - lAdditional: string; - lUsedRodlFilename,lUsedRodlFilename_absolute:string; -begin - with aLibrary do try - lAdditional := ''; - if Namespace <> '' then lAdditional := 'Namespace="'+Namespace+'" '; - - xml := '' + CRLF; - if fStyleSheet <> '' then - xml := xml + '' + CRLF; - - xml := xml + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, aLibrary); - // Services - - if GroupCount > 0 then begin - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (GroupCount - 1) do begin - if fFlattenUsedRODLs or not Groups[i].IsFromUsedRodl then begin - with Groups[i] do begin - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(6) + '' + CRLF; - end; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - end; - - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (ServiceCount - 1) do begin - if fFlattenUsedRODLs or not Services[i].IsFromUsedRodl then - with Services[i] do begin - - lAdditional := ''; - if ImplUnit <> '' then lAdditional := ' ImplUnit="' + ImplUnit + '"'; - if ImplClass <> '' then lAdditional := lAdditional + ' ImplClass="' + ImplClass + '"'; - if Ancestor <> '' then lAdditional := lAdditional + ' Ancestor="' + Ancestor + '"'; - if Abstract then lAdditional := lAdditional + ' Abstract="1"'; - if isPrivate then lAdditional := lAdditional + ' Private="1"'; - - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - - for k := 0 to (Count - 1) do begin - with Items[k] do begin - xml := xml + Indent(9) + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - for m := 0 to (Count - 1) do begin - with Items[m] do begin - if ForceAsyncResponse then - xml := xml + Indent(9) + Format('', [Name, GUIDToString(UID)]) + CRLF - else - xml := xml + Indent(9) + Format('', [Name, GUIDToString(UID)]) + CRLF; - - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - - if Assigned(Result) then with Result do begin - with Result do begin - xml := xml+ Format('', [Name, DataType, XMLFlagNames[Flag]]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + '' + CRLF; - end; - end; - - for p := 0 to (Count - 1) do begin - with Items[p] do begin - xml := xml + Format('', [Name, DataType, XMLFlagNames[Flag]]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + '' + CRLF; - end; - end; - xml := xml + Indent(6) + '' + CRLF; - - if CodeBodyCount > 0 then begin - xml := xml + Indent(6) + '' + CRLF; - for p := 0 to CodeBodyCount-1 do begin - xml := xml + Indent(6) + ''; - WriteAsCData(xml, CodeBodies[CodeBodyLanguages[p]].Text); - xml := xml + '' + CRLF; - end; - xml := xml + Indent(6) + '' + CRLF; - end; - - xml := xml + Indent(9) + '' + CRLF; - end; - end; - xml := xml + Indent(6) + '' + CRLF; - - xml := xml + Indent(9) + '' + CRLF; - end; - end; - - xml := xml + Indent(6) + '' + CRLF; - xml := xml + Indent(6) + '' + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - - // EventSinks - if EventSinkCount > 0 then begin - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (EventSinkCount - 1) do begin - if fFlattenUsedRODLs or not EventSinks[i].IsFromUsedRodl then - with EventSinks[i] do begin - - lAdditional := ''; - if ImplUnit <> '' then lAdditional := ' ImplUnit="' + ImplUnit + '"'; - if ImplClass <> '' then lAdditional := lAdditional + ' ImplClass="' + ImplClass + '"'; - if Ancestor <> '' then lAdditional := lAdditional + ' Ancestor="' + Ancestor + '"'; - if Abstract then lAdditional := lAdditional + ' Abstract="1"'; - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF; - - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - - for k := 0 to (Count - 1) do begin - with Items[k] do begin - xml := xml + Indent(9) + - Format('', [Name, GUIDToString(UID)]) + CRLF; - - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - for m := 0 to (Count - 1) do begin - with Items[m] do begin - xml := xml + Indent(9) + - Format('', [Name, GUIDToString(UID)]) + CRLF; - - WriteAttributes(xml, Info); - - xml := xml + Indent(6) + '' + CRLF; - - { ToDo: cloned from above for now; implement "proper" RODL->XML for 3.0 } - if Assigned(Result) then with Result do begin - with Result do begin - xml := xml + Format('', [Name, DataType, XMLFlagNames[Flag]]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + '' + CRLF; - end; - end; - - for p := 0 to (Count - 1) do begin - with Items[p] do begin - xml := xml + Format('', [Name, DataType, XMLFlagNames[Flag]]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + '' + CRLF; - end; - end; - xml := xml + Indent(6) + '' + CRLF; - xml := xml + Indent(9) + '' + CRLF; - end; - end; - xml := xml + Indent(6) + '' + CRLF; - - xml := xml + Indent(9) + '' + CRLF; - end; - end; - - xml := xml + Indent(6) + '' + CRLF; - xml := xml + Indent(6) + '' + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - end; - - // Structs - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (StructCount - 1) do begin - - if fFlattenUsedRODLs or not Structs[i].IsFromUsedRodl then - with Structs[i] do begin - - lAdd := ''; - if AutoCreateParams then - lAdd := ' AutoCreateParams="1"' - else - lAdd := ' AutoCreateParams="0"'; - - if Ancestor <> '' then lAdd := lAdd+Format(' Ancestor="%s"',[Ancestor]); - if Abstract then lAdd := lAdd + ' Abstract="1"'; - - xml := xml + Indent(6) + Format('', - [Name, GUIDToString(UID)]) + CRLF; - - WriteAttributes(xml, Info); - xml := xml + Indent(3) + '' + CRLF; - for k := 0 to (Count - 1) do begin - with Items[k] do begin - xml := xml + Indent(9) + Format('', [Name, DataType]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(9) + Format('', [Name, DataType]) + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - xml := xml + Indent(6) + '' + CRLF; - end; - - end; - xml := xml + Indent(3) + '' + CRLF; - - // Enums - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (EnumCount - 1) do begin - - if fFlattenUsedRODLs or not Enums[i].IsFromUsedRodl then - with Enums[i] do begin - if not PrefixEnumValues then - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF - else - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(3) + '' + CRLF; - for k := 0 to (Count - 1) do begin - with Items[k] do begin - xml := xml + Indent(9) + Format('', [Name]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(9) + '' + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - xml := xml + Indent(6) + '' + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - - // Arrays - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (ArrayCount - 1) do begin - if fFlattenUsedRODLs or not Arrays[i].IsFromUsedRodl then - with Arrays[i] do begin - xml := xml + Indent(6) + Format('', [Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(3) + Format('', [ElementType]) + CRLF; - xml := xml + Indent(6) + '' + CRLF; - end; - - end; - xml := xml + Indent(3) + '' + CRLF; - - // Use - if UseCount > 0 then begin - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (UseCount - 1) do begin - if (not fFlattenUsedRODLs) and (not Use[i].IsFromUsedRodl) then - with Use[i] do begin - lUsedRodlFilename := RodlFile; - lUsedRodlFilename_absolute := AbsoluteRodlFile; - if lUsedRodlFilename_absolute = '' then - lUsedRodlFilename_absolute := ExpandFileName(ExpandVariables(lUsedRodlFilename)); - {if aLibrary.RodlFilename <> '' then - lUsedRodlFilename := ExtractRelativePath(ExtractFilePath(aLibrary.RodlFilename),lUsedRodlFilename);} - - if GenerateCode then - xml := xml + Indent(6) + Format('', - [Name, GUIDToString(UID), lUsedRodlFilename, lUsedRodlFilename_absolute]) + CRLF - else - xml := xml + Indent(6) + Format('', - [Name, GUIDToString(UID), lUsedRodlFilename, lUsedRodlFilename_absolute]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(6) + '' - end; - - end; - xml := xml + Indent(3) + '' + CRLF; - end; - - // Exceptions - if ExceptionCount > 0 then begin - xml := xml + Indent(3) + '' + CRLF; - for i := 0 to (ExceptionCount - 1) do begin - if fFlattenUsedRODLs or not Exceptions[i].IsFromUsedRodl then - with Exceptions[i] do begin - - lAdd := ''; - if AutoCreateParams then - lAdd := ' AutoCreateParams="1"' - else - lAdd := ' AutoCreateParams="0"'; - - if Ancestor <> '' then lAdd := lAdd+Format(' Ancestor="%s"',[Ancestor]); - if Abstract then lAdd := lAdd + ' Abstract="1"'; - - xml := xml + Indent(6) + Format('',[Name, GUIDToString(UID)]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(3) + '' + CRLF; - for k := 0 to (Count - 1) do begin - with Items[k] do begin - xml := xml + Indent(9) + Format('', [Name, DataType]) + CRLF; - WriteAttributes(xml, Info); - xml := xml + Indent(9) + Format('', [Name, DataType]) + CRLF; - end; - end; - xml := xml + Indent(3) + '' + CRLF; - xml := xml + Indent(6) + '' + CRLF - end; - - end; - xml := xml + Indent(3) + '' + CRLF; - end; - - xml := xml + '' + CRLF; - finally - Buffer.Text := xml; - end; -end; - -{ TXMLToRODL } - -function GetNodeAttribute(aNode: IXMLNode; const anAttributeName: string): string; -var - lAtrributeNode: IXMLNode; -begin - Result := ''; - if Assigned(aNode) then begin - lAtrributeNode := aNode.GetAttributeByName(anAttributeName); - if Assigned(lAtrributeNode) then result := lAtrributeNode.Value; - end else - if CompareText(anAttributeName, 'UID') = 0 then result := GUIDToString(EmptyGUID); -end; - -constructor TXMLToRODL.Create(iAddToExisting: TRODLLibrary; iRecreateGuids:boolean=false); -begin - Create(); - fAddToExistingLibrary := iAddToExisting; - fRecreateGuids := iRecreateGuids; -end; - -function TXMLToRODL.IntReadFromStream(aStream: TStream; aFilename:string): TRODLLibrary; -begin - if Assigned(fAddToExistingLibrary) then begin - result := fAddToExistingLibrary; - LoadStreamToLibrary(aStream, result, aFilename, nil, false); // Don't set RODL Attributes - end - else begin - result := TRODLLibrary.Create(); - result.RodlFilename := aFilename; - LoadStreamToLibrary(aStream, result, aFilename); - end; -end; - -procedure TXMLToRODL.LoadFileToLibrary(iFilename: string; iLibrary: TRODLLibrary; iRodlUse:TRODLUse=nil); -var - lStream: TStream; -begin - //ToDo: resolve relative filenames; handle http filenames, etc. - - lStream := TFileStream.Create(iFilename, fmOpenRead); - try - LoadStreamToLibrary(lStream, iLibrary, iFilename, iRodlUse); - finally - lStream.Free(); - end; -end; - -function ExpandFileNameByBase(const iBase, iFilename:string):string; overload; -var - lCurrentDir:string; -begin - lCurrentDir := GetCurrentDir(); - SetCurrentDir(iBase); - try - result := ExpandFileName(iFilename); - finally - SetCurrentDir(lCurrentDir); - end; -end; - -function StringToGUID(const s: string): TGUID; -begin - if s = '' then Result := NewGuid else begin - try - Result := Sysutils.StringToGUID(s); - except - on e: EConvertError do - Result := NewGuid; - end; - end; -end; - -procedure TXMLToRODL.LoadStreamToLibrary(aStream: TStream; iLibrary: TRODLLibrary; iRodlName: string = ''; iRodlUse: TRODLUse=nil; iReplaceLibraryAttributes:boolean=true); -var - fGroupGuidList: TStringList; - - procedure ReadAttributes(anXMLNode: IXMLNode; aEntity: TRODLEntity); - var - lGroupID: string; - i, k: integer; - lName, lValue: string; - lNode,lChildNode:IXMLNode; - begin - if (anXMLNode = nil) then Exit; - - { read legacy v2.0 documentation attribues } - if (anXMLNode.GetAttributeByName('Documentation') <> nil) then begin - aEntity.Documentation := anXMLNode.GetAttributeByName('Documentation').Value; - end; - - lValue := ''; - for i := 0 to (anXMLNode.ChildrenCount-1) do begin - - lNode :=anXMLNode.Children[i]; - if (lNode.Name = 'CustomAttributes') then begin - - for k := 0 to (lNode.ChildrenCount-1) do begin - lChildNode := lNode.Children[k]; - lName := lChildNode.Name; - - if (lName = '#text') then Continue; - if (lChildNode.GetAttributeByName('Value') <> nil) then begin - lValue := lChildNode.GetAttributeByName('Value').Value; - end - else begin - lValue := ''; - end; - - aEntity.Attributes.Values[lName] := lValue; - end; - - Exit; - end - else if lNode.Name = 'Documentation' then begin - aEntity.Documentation := lNode.Value - end - else if lNode.Name = 'Group' then begin - lGroupID := lNode.GetAttributeValue('Under',''); - if lGroupID <> '' then begin - aEntity.GroupUnder := iLibrary.FindGroup(StringToGUID(lGroupID)); - if aEntity.GroupUnder = nil then begin - lGroupID := fGroupGuidList.Values[lGroupId]; - if lGroupID <> '' then - aEntity.GroupUnder := iLibrary.FindGroup(StringToGUID(lGroupID)); - - end; - end; - end; - - end; - end; - - function RODLFileIsUsed(aRODL: string): boolean; - var - i: integer; - begin - Result:=False; - if ARodl <> '' then - if FileExists(ARodl) then - For i := 0 to iLibrary.UseCount -1 do begin - if SameText(ExpandVariables(iLibrary.Use[i].RodlFile),aRODL) or SameText(iLibrary.Use[i].AbsoluteRodlFile, aRODL) then begin - Result:=True; - Break; - end; - end; - end; - -var - lFlag: TRODLParamFlag; - //domimpl: TDomImplementation; - //parser: TXmlToDomParser; - xmldoc: IXMLDocument; - list, - sublist, - subsublist, - lastlist: IXMLNodeList; - i, k, m, p: Integer; - - lParentNode:IXMLNode; - - struct: TRODLStruct; - stelem: TRODLTypedEntity; - arr: TRODLArray; - lUse: TRODLUse; - lEventSink: TRODLEventSink; - lFilename:string; - lException: TRODLException; - lGroup: TRODLGroup; - svc: TRODLService; - enum: TRODLEnum; - eval: TRODLEnumValue; - intf: TRODLServiceInterface; - op: TRODLOperation; - par: TRODLOperationParam; - -begin - fGroupGuidList:= TStringList.Create; - try - xmldoc := NewROXmlDocument(); - aStream.Position := 0; - xmldoc.New(); - xmldoc.LoadFromStream(aStream); - - if not Assigned(iRodlUse) then begin - // Library - if Assigned(xmldoc.DocumentNode) then begin - if iReplaceLibraryAttributes then begin - iLibrary.Name := GetNodeAttribute(xmldoc.DocumentNode, 'Name'); - iLibrary.Namespace := GetNodeAttribute(xmldoc.DocumentNode, 'Namespace'); - iLibrary.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(xmldoc.DocumentNode, 'UID'))); - //iLibrary.Documentation := GetNodeAttribute(xmldoc.DocumentNode, 'Documentation'); - - ReadAttributes(xmldoc.DocumentNode, iLibrary); - end; - end; - end else - begin - iRodlUse.LoadedRodlLibraryName := GetNodeAttribute(xmldoc.DocumentNode, 'Name'); - // - end; - - // Groups - lParentNode := xmldoc.DocumentNode.GetNodeByName('Groups'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Group'); - if Assigned(list) then - begin - for i := 0 to (list.Count-1) do begin - lGroup := TRODLGroup.Create; - lGroup.IsFromUsedRodl := iRodlUse <> nil; - lGroup.LocatedInRodlUse := iRodlUse; - lGroup.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //lGroup.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - lGroup.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - fGroupGuidList.Add(GetNodeAttribute(list.Nodes[i], 'UID')+'='+GUIDToString(lGroup.Uid)); - - iLibrary.Add(lGroup); - end; - for i := 0 to List.count -1 do begin - lGroup := iLibrary.Groups[iLibrary.GroupCount - List.count + i]; - ReadAttributes(list.Nodes[i], lGroup); - end; - end; - end; // Groups - - // Uses - lParentNode := xmldoc.DocumentNode.GetNodeByName('Uses'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Use'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - if RODLFileIsUsed(GetNodeAttribute(list.Nodes[i], 'AbsoluteRodl')) then Continue; - if RODLFileIsUsed(ExpandVariables(GetNodeAttribute(list.Nodes[i], 'Rodl'))) then Continue; - lUse := TRODLUse.Create; - lUse.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //lUse.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - lUse.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - lUse.RodlFile := GetNodeAttribute(list.Nodes[i], 'Rodl'); - lUse.AbsoluteRodlFile := GetNodeAttribute(list.Nodes[i], 'AbsoluteRodl'); - lUse.GenerateCode := GetNodeAttribute(list.Nodes[i], 'GenerateCode') = '1'; - - ReadAttributes(list.Nodes[i], lUse); - - lUse.IsFromUsedRodl := Assigned(iRodlUse); - lUse.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(lUse); - - try - with self.ClassType.Create do try - {$IFDEF DEBUG_REMOBJECTS_RODLTOXML} - DebugServer.Write('Used RODL "%s"',[lUse.RodlFile]); - {$ENDIF} - - lFilename := ExpandVariables(lUse.RodlFile); - if iRodlName <> '' then begin - if lUse.LocatedInRodlUse <> nil then - lFilename := ExpandFileNameByBase(ExtractFilePath(iRodlName),lUse.LocatedInRodlUse.AbsoluteRodlFile) - else - lFilename := ExpandFileNameByBase(ExtractFilePath(iRodlName),lFilename); - if FileExists(lFilename) then - lUse.AbsoluteRodlFile := lFilename; - end; - if (not FileExists(lFilename)) and (lUse.AbsoluteRodlFile <> '') then begin - lFilename := lUse.AbsoluteRodlFile; - if FileExists(lFilename) then - lUse.RodlFile := lFilename; - end; - - {$IFDEF DEBUG_REMOBJECTS_RODLTOXML} - DebugServer.Write('Loading "%s"',[lFilename]); - {$ENDIF} - - LoadFileToLibrary(lFilename, iLibrary, lUse); - finally - Free(); - end; { with } - except - { ignore if an included RODL cannot be found, for most cases it wont be needed to do the CodeGen } - end; - - end; - end; - end; // Uses - - // Services - lParentNode := xmldoc.DocumentNode.GetNodeByName('Services'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Service'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - svc := TRODLService.Create; - svc.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //svc.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - svc.Ancestor := GetNodeAttribute(list.Nodes[i], 'Ancestor'); - - svc.ImplUnit := GetNodeAttribute(list.Nodes[i], 'ImplUnit'); - svc.ImplClass := GetNodeAttribute(list.Nodes[i], 'ImplClass'); - svc.Abstract := GetNodeAttribute(list.Nodes[i], 'Abstract') = '1'; - svc.isPrivate := GetNodeAttribute(list.Nodes[i], 'Private') = '1'; - svc.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - - ReadAttributes(list.Nodes[i], svc); - - // Default interface - // TODO: Implement multiple interfaces in the future. Not needed now - lParentNode := list.Nodes[i].GetNodeByName('Interfaces'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('Interface'); - if Assigned(sublist) and (sublist.Count > 0) then begin - //later: for k := 0 to (sublist.Length-1) do begin - k := 0; - - intf := svc.Default; - intf.Name := GetNodeAttribute(sublist.Nodes[k], 'Name'); - intf.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(sublist.Nodes[k], 'UID'))); // Fixed thanks to a compiler warning! Was using m as index - //intf.Documentation := GetNodeAttribute(sublist.Nodes[k], 'Documentation'); - - ReadAttributes(sublist.Nodes[k], intf); - - // Operations - lParentNode := sublist.Nodes[k].GetNodeByName('Operations'); - if Assigned(lParentNode) then begin - subsublist := lParentNode.GetNodesByName('Operation'); - if Assigned(subsublist) then begin - for m := 0 to (subsublist.Count-1) do begin - op := intf.Add; - op.Name := GetNodeAttribute(subsublist.Nodes[m], 'Name'); - //op.Documentation := GetNodeAttribute(subsublist.Nodes[m], 'Documentation'); - op.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(subsublist.Nodes[m], 'UID'))); - op.ForceAsyncResponse := GetNodeAttribute(subsublist.Nodes[m], 'ForceAsyncResponse') = '1'; - - ReadAttributes(subsublist.Nodes[m], op); - - // Parameters - lParentNode := subsublist.Nodes[m].GetNodeByName('Parameters'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Parameter'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - lFlag := XMLFlagNameToFlag(GetNodeAttribute(lastlist.Nodes[p], 'Flag')); - case lFlag of - fResult:par := op.AddResult(); - else par := op.Add(); - end; { case } - par.Name := GetNodeAttribute(lastlist.Nodes[p], 'Name'); - //par.Documentation := GetNodeAttribute(lastlist.Nodes[p], 'Documentation'); - par.Flag := lFlag; - par.DataType := GetNodeAttribute(lastlist.Nodes[p], 'DataType'); - ReadAttributes(lastlist.Nodes[p], par); - end; - end; - end; // Service|Interface|Operation|Parameters - - // Code Bodies - lParentNode := subsublist.Nodes[m].GetNodeByName('Code'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Code'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - op.SetCodeBodyAsString(GetNodeAttribute(lastlist.Nodes[p], 'Language'),lastlist.Nodes[p].Value); - end; - end; - end; // Service|Interface|Operation|Parameters - - {op.MoveResult();} - end; - end; - end; // Service|Interface|Operations - end; - end; // Service|Interfaces - - svc.IsFromUsedRodl := Assigned(iRodlUse); - svc.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(svc); - end; - end; - end; // Services - - // EventSinks - lParentNode := xmldoc.DocumentNode.GetNodeByName('EventSinks'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('EventSink'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - lEventSink := TRODLEventSink.Create; - lEventSink.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //lEventSink.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - lEventSink.Ancestor := GetNodeAttribute(list.Nodes[i], 'Ancestor'); - - lEventSink.ImplUnit := GetNodeAttribute(list.Nodes[i], 'ImplUnit'); - lEventSink.ImplClass := GetNodeAttribute(list.Nodes[i], 'ImplClass'); - lEventSink.Abstract := GetNodeAttribute(list.Nodes[i], 'Abstract') = '1'; - lEventSink.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - - ReadAttributes(list.Nodes[i], lEventSink); - - // Default interface - // TODO: Implement multiple interfaces in the future. Not needed now - lParentNode := list.Nodes[i].GetNodeByName('Interfaces'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('Interface'); - if Assigned(sublist) and (sublist.Count > 0) then begin - //later: for k := 0 to (sublist.Length-1) do begin - k := 0; - - intf := lEventSink.Default; - intf.Name := GetNodeAttribute(sublist.Nodes[k], 'Name'); - intf.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(sublist.Nodes[k], 'UID'))); // Fixed thanks to a compiler warning! Was using m as index - //intf.Documentation := GetNodeAttribute(sublist.Nodes[k], 'Documentation'); - - ReadAttributes(sublist.Nodes[k], intf); - - // Operations - lParentNode := sublist.Nodes[k].GetNodeByName('Operations'); - if Assigned(lParentNode) then begin - subsublist := lParentNode.GetNodesByName('Operation'); - if Assigned(subsublist) then begin - for m := 0 to (subsublist.Count-1) do begin - op := intf.Add; - op.Name := GetNodeAttribute(subsublist.Nodes[m], 'Name'); - //op.Documentation := GetNodeAttribute(subsublist.Nodes[m], 'Documentation'); - op.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(subsublist.Nodes[m], 'UID'))); - - ReadAttributes(subsublist.Nodes[m], op); - - // Parameters - lParentNode := subsublist.Nodes[m].GetNodeByName('Parameters'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Parameter'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - lFlag := XMLFlagNameToFlag(GetNodeAttribute(lastlist.Nodes[p], 'Flag')); - case lFlag of - fResult:par := op.AddResult(); - else par := op.Add(); - end; { case } - par.Name := GetNodeAttribute(lastlist.Nodes[p], 'Name'); - //par.Documentation := GetNodeAttribute(lastlist.Nodes[p], 'Documentation'); - par.Flag := lFlag; - par.DataType := GetNodeAttribute(lastlist.Nodes[p], 'DataType'); - ReadAttributes(lastlist.Nodes[p], par); - end; - end; - end; // Service|Interface|Operation|Parameters - - // Code Bodies - lParentNode := subsublist.Nodes[m].GetNodeByName('Code'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Code'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - op.SetCodeBodyAsString(GetNodeAttribute(lastlist.Nodes[p], 'Language'),StringFromHexString(lastlist.Nodes[p].Value)); - end; - end; - end; // Service|Interface|Operation|Parameters - - {op.MoveResult();} - end; - end; - end; // Service|Interface|Operations - end; - end; // Service|Interfaces - - lEventSink.IsFromUsedRodl := Assigned(iRodlUse); - lEventSink.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(lEventSink); - end; - end; - end; // EventSinks - - //////////////////// TODO REMOVE **BELOW** - // EventSinks - lParentNode := xmldoc.DocumentNode.GetNodeByName('CallbackSinks'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('CallbackSink'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - lEventSink := TRODLEventSink.Create; - lEventSink.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //lEventSink.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - lEventSink.Ancestor := GetNodeAttribute(list.Nodes[i], 'Ancestor'); - - lEventSink.ImplUnit := GetNodeAttribute(list.Nodes[i], 'ImplUnit'); - lEventSink.ImplClass := GetNodeAttribute(list.Nodes[i], 'ImplClass'); - lEventSink.Abstract := GetNodeAttribute(list.Nodes[i], 'Abstract') = '1'; - lEventSink.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - - ReadAttributes(list.Nodes[i], lEventSink); - - // Default interface - // TODO: Implement multiple interfaces in the future. Not needed now - lParentNode := list.Nodes[i].GetNodeByName('Interfaces'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('Interface'); - if Assigned(sublist) and (sublist.Count > 0) then begin - //later: for k := 0 to (sublist.Length-1) do begin - k := 0; - - intf := lEventSink.Default; - intf.Name := GetNodeAttribute(sublist.Nodes[k], 'Name'); - intf.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(sublist.Nodes[k], 'UID'))); // Fixed thanks to a compiler warning! Was using m as index - //intf.Documentation := GetNodeAttribute(sublist.Nodes[k], 'Documentation'); - - ReadAttributes(sublist.Nodes[k], intf); - - // Operations - lParentNode := sublist.Nodes[k].GetNodeByName('Operations'); - if Assigned(lParentNode) then begin - subsublist := lParentNode.GetNodesByName('Operation'); - if Assigned(subsublist) then begin - for m := 0 to (subsublist.Count-1) do begin - op := intf.Add; - op.Name := GetNodeAttribute(subsublist.Nodes[m], 'Name'); - //op.Documentation := GetNodeAttribute(subsublist.Nodes[m], 'Documentation'); - op.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(subsublist.Nodes[m], 'UID'))); - - ReadAttributes(subsublist.Nodes[m], op); - - // Parameters - lParentNode := subsublist.Nodes[m].GetNodeByName('Parameters'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Parameter'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - lFlag := XMLFlagNameToFlag(GetNodeAttribute(lastlist.Nodes[p], 'Flag')); - case lFlag of - fResult:par := op.AddResult(); - else par := op.Add(); - end; { case } - par.Name := GetNodeAttribute(lastlist.Nodes[p], 'Name'); - //par.Documentation := GetNodeAttribute(lastlist.Nodes[p], 'Documentation'); - par.Flag := lFlag; - par.DataType := GetNodeAttribute(lastlist.Nodes[p], 'DataType'); - ReadAttributes(lastlist.Nodes[p], par); - end; - end; - end; // Service|Interface|Operation|Parameters - - // Code Bodies - lParentNode := subsublist.Nodes[m].GetNodeByName('Code'); - if Assigned(lParentNode) then begin - lastlist := lParentNode.GetNodesByName('Code'); - if Assigned(lastlist) then begin - for p := 0 to (lastlist.Count-1) do begin - op.SetCodeBodyAsString(GetNodeAttribute(lastlist.Nodes[p], 'Language'),StringFromHexString(lastlist.Nodes[p].Value)); - end; - end; - end; // Service|Interface|Operation|Parameters - - {op.MoveResult();} - end; - end; - end; // Service|Interface|Operations - end; - end; // Service|Interfaces - - lEventSink.IsFromUsedRodl := Assigned(iRodlUse); - lEventSink.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(lEventSink); - end; - end; - end; // EventSinks - //////////////////// TODO REMOVE ^^^^^^ - - // Structs - lParentNode := xmldoc.DocumentNode.GetNodeByName('Structs'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Struct'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - struct := TRODLStruct.Create; - struct.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //struct.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - struct.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - struct.Ancestor := GetNodeAttribute(list.Nodes[i], 'Ancestor'); - struct.AutoCreateParams := GetNodeAttribute(list.Nodes[i], 'AutoCreateParams') <> '0'; - struct.Abstract := GetNodeAttribute(list.Nodes[i], 'Abstract') = '1'; - - ReadAttributes(list.Nodes[i], struct); - - lParentNode := list.Nodes[i].GetNodeByName('Elements'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('Element'); - if Assigned(sublist) then begin - for p := 0 to (sublist.Count-1) do begin - stelem := struct.Add; - stelem.Name := GetNodeAttribute(sublist.Nodes[p], 'Name'); - //stelem.Documentation := GetNodeAttribute(sublist.Nodes[p], 'Documentation'); - stelem.DataType := GetNodeAttribute(sublist.Nodes[p], 'DataType'); - ReadAttributes(sublist.Nodes[p], stelem); - end; - end; - end; // Struct|Elements - - struct.IsFromUsedRodl := Assigned(iRodlUse); - struct.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(struct); - end; - end; - end; //Structs - - // Enums - lParentNode := xmldoc.DocumentNode.GetNodeByName('Enums'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Enum'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - enum := TRODLEnum.Create; - enum.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - enum.PrefixEnumValues := GetNodeAttribute(list.Nodes[i], 'Prefix') <> '0'; - //enum.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - enum.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - - ReadAttributes(list.Nodes[i], enum); - - lParentNode := list.Nodes[i].GetNodeByName('EnumValues'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('EnumValue'); - if Assigned(sublist) then begin - for p := 0 to (sublist.Count-1) do begin - eval := enum.Add; - eval.Name := GetNodeAttribute(sublist.Nodes[p], 'Name'); - ReadAttributes(sublist.Nodes[p], eval); - //eval.Documentation := GetNodeAttribute(sublist.Nodes[p], 'Documentation'); - end; - end; - end; //Enum|EnumValues - - enum.IsFromUsedRodl := Assigned(iRodlUse); - enum.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(enum); - end; - end; - end; // Enums - - // Arrays - lParentNode := xmldoc.DocumentNode.GetNodeByName('Arrays'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Array'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - arr := TRODLArray.Create; - arr.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //arr.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - arr.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - - ReadAttributes(list.Nodes[i], arr); - - sublist := list.Nodes[i].GetNodesByName('ElementType'); - if Assigned(sublist) and (sublist.Count > 0) then - arr.ElementType := GetNodeAttribute(sublist.Nodes[0], 'DataType'); - - arr.IsFromUsedRodl := Assigned(iRodlUse); - arr.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(arr) - end; - end; - end; // Arrays - - // Exceptions - lParentNode := xmldoc.DocumentNode.GetNodeByName('Exceptions'); - if Assigned(lParentNode) then begin - list := lParentNode.GetNodesByName('Exception'); - if Assigned(list) then begin - for i := 0 to (list.Count-1) do begin - lException := TRODLException.Create; - lException.Name := GetNodeAttribute(list.Nodes[i], 'Name'); - //lException.Documentation := GetNodeAttribute(list.Nodes[i], 'Documentation'); - lException.UID := RecreateGuidIfNeeded(StringToGUID(GetNodeAttribute(list.Nodes[i], 'UID'))); - lException.Ancestor := GetNodeAttribute(list.Nodes[i], 'Ancestor'); - lException.Abstract := GetNodeAttribute(list.Nodes[i], 'Abstract') = '1'; - - ReadAttributes(list.Nodes[i], lException); - - lParentNode := list.Nodes[i].GetNodeByName('Elements'); - if Assigned(lParentNode) then begin - sublist := lParentNode.GetNodesByName('Element'); - if Assigned(sublist) then begin - for p := 0 to (sublist.Count-1) do begin - stelem := lException.Add; - stelem.Name := GetNodeAttribute(sublist.Nodes[p], 'Name'); - //stelem.Documentation := GetNodeAttribute(sublist.Nodes[p], 'Documentation'); - stelem.DataType := GetNodeAttribute(sublist.Nodes[p], 'DataType'); - ReadAttributes(sublist.Nodes[p], stelem); - end; - end; - end; // Struct|Elements - - lException.IsFromUsedRodl := Assigned(iRodlUse); - lException.LocatedInRodlUse := iRodlUse; - - iLibrary.Add(lException) - end; - end; - end; // Exceptions - finally - fGroupGuidList.Free; - end; -end; - -function TXMLToRODL.ReadFromString(const aString: string; const aFilename:string): TRODLLibrary; -var - ss: TStringStream; -begin - ss := TStringStream.Create(aString); - try - result := Read(ss, aFilename); - finally - ss.Free; - end; -end; - -function TXMLToRODL.RecreateGuidIfNeeded(iGuid: TGuid): TGuid; -begin - if fRecreateGuids then - result := NewGuid() - else - result := iGuid; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.rc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.rc deleted file mode 100644 index 1a92fb9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.rc +++ /dev/null @@ -1,22 +0,0 @@ -TEMPLATE_INTF_PAS RCDATA "template.intf.pas" -TEMPLATE_INVK_PAS RCDATA "template.invk.pas" -TEMPLATE_IMPL_PAS RCDATA "template.impl.pas" -TEMPLATE_ASYNC_PAS RCDATA "template.async.pas" -TEMPLATE_WRAPPER_INTF_PAS RCDATA "template.wrapper_intf.pas" -TEMPLATE_WRAPPER_INVK_PAS RCDATA "template.wrapper_invk.pas" -TEMPLATE_WRAPPER_ASYNC_PAS RCDATA "template.wrapper_async.pas" - -TEMPLATE_IMPL_DFM RCDATA "template.impl.dfm" - -TEMPLATE_INTF_CPP RCDATA "template.intf.cpp" -TEMPLATE_INTF_H RCDATA "template.intf.h" -TEMPLATE_INVK_CPP RCDATA "template.invk.cpp" -TEMPLATE_INVK_H RCDATA "template.invk.h" -TEMPLATE_IMPL_CPP RCDATA "template.impl.cpp" -TEMPLATE_IMPL_H RCDATA "template.impl.h" -TEMPLATE_ASYNC_CPP RCDATA "template.async.cpp" -TEMPLATE_ASYNC_H RCDATA "template.async.h" -TEMPLATE_WRAPPER_INTF_H RCDATA "template.wrapper_intf.h" -TEMPLATE_WRAPPER_INVK_H RCDATA "template.wrapper_invk.h" -TEMPLATE_WRAPPER_ASYNC_H RCDATA "template.wrapper_async.h" - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.res deleted file mode 100644 index a576360..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/Templates.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.cpp b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.cpp deleted file mode 100644 index 54697e9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.cpp +++ /dev/null @@ -1,162 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -// Implementation of %UNIT_NAME% -#include "%UNIT_NAME%.h" - -// <%%% START SERVICES %%%> -// <%%% START FUNCTION_OPERATIONS %%%> -void __fastcall T%SERVICE_NAME%_AsyncProxy::Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ) -{ - __AssertProxyNotBusy("%OPERATION_NAME%"); - - __Message->InitializeRequestMessage(__TransportChannel, "%LIBRARY_NAME%", __InterfaceName, "%OPERATION_NAME%"); - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __DispatchAsyncRequest("%OPERATION_NAME%", __Message); -} - -// <%%% START IF_RESULT_SIMPLE %%%> -%OPERATION_RESULT% __fastcall T%SERVICE_NAME%_AsyncProxy::Retrieve_%OPERATION_NAME%( -// <%%% END IF_RESULT_SIMPLE %%%> -// <%%% START IF_RESULT_COMPLEX %%%> -%OPERATION_RESULT%* __fastcall T%SERVICE_NAME%_AsyncProxy::Retrieve_%OPERATION_NAME%( -// <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ) -{ - // <%%% START IF_RESULT_SIMPLE %%%> - %OPERATION_RESULT% result; - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - %OPERATION_RESULT%* result; - // <%%% END IF_RESULT_COMPLEX %%%> - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% = NULL; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - result = NULL; - // <%%% END IF_RESULT_COMPLEX %%%> - - TStream* __response = __RetrieveAsyncResponse("%OPERATION_NAME%"); - __Message->ReadFromStream(__response); - - // <%%% START IF_RESULT_SIMPLE %%%> - __Message->Read("Result", __Get%OPERATION_RESULT%Info, &result, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - __Message->Read("Result", __typeinfo(%OPERATION_RESULT%), result, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - delete __response; - return result; -} - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -void _fastcall T%SERVICE_NAME%_AsyncProxy::Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ) -{ - __AssertProxyNotBusy("%OPERATION_NAME%"); - TStream* __request = new TMemoryStream(); - - __Message->InitializeRequestMessage(__TransportChannel, "%LIBRARY_NAME%", __InterfaceName, "%OPERATION_NAME%"); - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message->Finalize(); - - __Message->WriteToStream(__request); - __DispatchAsyncRequest("%OPERATION_NAME%", __request, False); -} - -// <%%% START IF_OUT_PARAMS %%%> -void _fastcall T%SERVICE_NAME%_AsyncProxy::Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ) -{ - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% = NULL; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - TStream* __response = __RetrieveAsyncResponse("%OPERATION_NAME%"); - __Message->ReadFromStream(__response); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - delete __response; -} - -// <%%% END IF_OUT_PARAMS %%%> -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.h deleted file mode 100644 index 20d05db..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.h +++ /dev/null @@ -1,223 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -#pragma delphiheader begin -#pragma option push -#pragma option -w- // All warnings off -#pragma option -Vx // Zero-length empty class member functions -#pragma pack(push,8) - -#include // Pascal unit -#include -// <%%% START REQUIRED_UNITS %%%> -#include <%REQUIRED_UNIT_NAME%.hpp> -// <%%% END REQUIRED_UNITS %%%> -#include "%LIBRARY_NAME%_intf.h" - - -namespace %NAMESPACE_NAME% -{ -// Forward declarations -// <%%% START SERVICES %%%> -__interface I%SERVICE_NAME%_Async; // = interface; -class DELPHICLASS Co%SERVICE_NAME%_Async; -class DELPHICLASS T%SERVICE_NAME%_AsyncProxy; -// <%%% END SERVICES %%%> - -// <%%% START SERVICES %%%> -__interface I%SERVICE_NAME%_Async; -typedef System::DelphiInterface _di_I%SERVICE_NAME%_Async; -__interface INTERFACE_UUID("%SERVICE_UID%") I%SERVICE_NAME%_Async : public %SERVICE_ANCESTOR_NAME% -{ -public: - // <%%% START FUNCTION_OPERATIONS %%%> - virtual void __fastcall Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% START IF_RESULT_SIMPLE %%%> - virtual %OPERATION_RESULT% __fastcall Retrieve_%OPERATION_NAME%( - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - virtual %OPERATION_RESULT%* __fastcall Retrieve_%OPERATION_NAME%( - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END FUNCTION_OPERATIONS %%%> - - // <%%% START PROCEDURE_OPERATIONS %%%> - virtual void _fastcall Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% START IF_OUT_PARAMS %%%> - virtual void _fastcall Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END IF_OUT_PARAMS %%%> - // <%%% END PROCEDURE_OPERATIONS %%%> -}; - -// Co%SERVICE_NAME%_Async -class DELPHICLASS Co%SERVICE_NAME%_Async; -class Co%SERVICE_NAME%_Async : public System::TObject -{ - typedef System::TObject inherited; - -public: - static _di_I%SERVICE_NAME%_Async __fastcall Create(const Uroclientintf::_di_IROMessage aMessage, - Uroclientintf::_di_IROTransportChannel aTransportChannel) - { - _di_I%SERVICE_NAME%_Async result; - T%SERVICE_NAME%_AsyncProxy* proxy = new T%SERVICE_NAME%_AsyncProxy(aMessage, aTransportChannel); - if (proxy->QueryInterface(I%SERVICE_NAME%_IID, reinterpret_cast(&result)) != S_OK) - { - delete proxy; - throw EIntfCastError::EIntfCastError("I%SERVICE_NAME%_Async not supported"); - } - return result; - }; - - static _di_I%SERVICE_NAME%_Async __fastcall Create(const Uroclient::TROMessage* aMessage, - Uroclient::TROTransportChannel *aTransportChannel) - { - _di_IROMessage __Message; - _di_IROTransportChannel __TransportChannel; - - if (aMessage->GetInterface(__Message)) - { - if (aTransportChannel->GetInterface(__TransportChannel)) - return Create(__Message, __TransportChannel); - else - throw EIntfCastError::EIntfCastError("IROTransportChannel not supported"); - } - else - { - throw EIntfCastError::EIntfCastError("IROMessage not supported"); - } - }; -}; - -class DELPHICLASS T%SERVICE_NAME%_AsyncProxy; -class T%SERVICE_NAME%_AsyncProxy : public %SERVICE_PROXY_ANCESTOR_NAME%, I%SERVICE_NAME%_Async -{ - typedef %SERVICE_PROXY_ANCESTOR_NAME% inherited; - -protected: - virtual AnsiString __fastcall __GetInterfaceName() - { return "%SERVICE_NAME%"; } - - // <%%% START FUNCTION_OPERATIONS %%%> - virtual void __fastcall Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ); - // <%%% START IF_RESULT_SIMPLE %%%> - virtual %OPERATION_RESULT% __fastcall Retrieve_%OPERATION_NAME%( - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - virtual %OPERATION_RESULT%* __fastcall Retrieve_%OPERATION_NAME%( - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ); - // <%%% END FUNCTION_OPERATIONS %%%> - - // <%%% START PROCEDURE_OPERATIONS %%%> - virtual void _fastcall Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS %%%> - ); - // <%%% START IF_OUT_PARAMS %%%> - virtual void _fastcall Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS %%%> - ); - // <%%% END IF_OUT_PARAMS %%%> - // <%%% END PROCEDURE_OPERATIONS %%%> -public: - #pragma option push -w-inl - /* TROProxy.Create */ inline __fastcall virtual T%SERVICE_NAME%_AsyncProxy(const Uroclientintf::_di_IROMessage aMessage, const Uroclientintf::_di_IROTransportChannel aTransportChannel)/* overload */ : - %SERVICE_PROXY_ANCESTOR_NAME%(aMessage, aTransportChannel) {} - #pragma option pop - - virtual HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj) { - return inherited::QueryInterface(IID, (void *)Obj); } - - virtual ULONG __stdcall AddRef() { - return inherited::_AddRef(); } - - virtual ULONG __stdcall Release() { - return inherited::_Release(); } -}; -// <%%% END SERVICES %%%> - -} // namespace %NAMESPACE_NAME% - -using namespace %NAMESPACE_NAME%; -#pragma pack(pop) -#pragma option pop - -#pragma delphiheader end. -#endif // %UNIT_NAME%_H - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.pas deleted file mode 100644 index 29679eb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.async.pas +++ /dev/null @@ -1,229 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - // required units - // <%%% START REQUIRED_UNITS %%%> - %REQUIRED_UNIT_NAME%, - // <%%% END REQUIRED_UNITS %%%> - %LIBRARY_NAME%_Intf, - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf, uROAsync; - -type - { Forward declarations } - // <%%% START SERVICES %%%> - I%SERVICE_NAME%_Async = interface; - Co%SERVICE_NAME%_Async = class; - T%SERVICE_NAME%_AsyncProxy = class; - // <%%% END SERVICES %%%> - - // <%%% START SERVICES %%%> - { I%SERVICE_NAME%_Async } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - I%SERVICE_NAME%_Async = interface%SERVICE_ANCESTOR_NAME% - ['%ASYNC_SERVICE_UID%'] - // <%%% START FUNCTION_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); - function Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ): %OPERATION_RESULT%; - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); - // <%%% START IF_OUT_PARAMS %%%> - procedure Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ); - // <%%% END IF_OUT_PARAMS %%%> - // <%%% END PROCEDURE_OPERATIONS %%%> - end; - - { Co%SERVICE_NAME%_Async } - Co%SERVICE_NAME%_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): I%SERVICE_NAME%_Async; - end; - - { T%SERVICE_NAME%_Proxy } - T%SERVICE_NAME%_AsyncProxy = class(%SERVICE_PROXY_ANCESTOR_NAME%, I%SERVICE_NAME%_Async) - protected - function __GetInterfaceName:string; override; - - // <%%% START FUNCTION_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); - function Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ): %OPERATION_RESULT%; - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); - // <%%% START IF_OUT_PARAMS %%%> - procedure Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ); - // <%%% END IF_OUT_PARAMS %%%> - // <%%% END PROCEDURE_OPERATIONS %%%> - end; - - // <%%% END SERVICES %%%> -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -// <%%% START SERVICES %%%> -{ Co%SERVICE_NAME%_Async } - -class function Co%SERVICE_NAME%_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): I%SERVICE_NAME%_Async; -begin - result := T%SERVICE_NAME%_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ T%SERVICE_NAME%_AsyncProxy } - -function T%SERVICE_NAME%_AsyncProxy.__GetInterfaceName:string; -begin - result := '%SERVICE_NAME%'; -end; - -// <%%% START FUNCTION_OPERATIONS %%%> -procedure T%SERVICE_NAME%_AsyncProxy.Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); -begin - __AssertProxyNotBusy('%OPERATION_NAME%'); - - __Message.InitializeRequestMessage(__TransportChannel, '%LIBRARY_NAME%', __InterfaceName, '%OPERATION_NAME%'); - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __DispatchAsyncRequest('%OPERATION_NAME%',__Message); -end; - -function T%SERVICE_NAME%_AsyncProxy.Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ): %OPERATION_RESULT%; -var - __response:TStream; -begin - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - Result := nil; - // <%%% END IF_RESULT_COMPLEX %%%> - - __response := __RetrieveAsyncResponse('%OPERATION_NAME%'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(%OPERATION_RESULT%), Result, [%OPERATION_RESULT_ATTRIBUTE%]); - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - __response.Free(); -end; - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -procedure T%SERVICE_NAME%_AsyncProxy.Invoke_%OPERATION_NAME%( - // <%%% START IN_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END IN_PARAMS %%%> - ); -var - __request:TStream; -begin - __AssertProxyNotBusy('%OPERATION_NAME%'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, '%LIBRARY_NAME%', __InterfaceName, '%OPERATION_NAME%'); - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('%OPERATION_NAME%', __request, False); -end; - -// <%%% START IF_OUT_PARAMS %%%> -procedure T%SERVICE_NAME%_AsyncProxy.Retrieve_%OPERATION_NAME%( - // <%%% START OUT_PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END OUT_PARAMS %%%> - ); -var - __response:TStream; -begin - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - __response := __RetrieveAsyncResponse('%OPERATION_NAME%'); - __Message.ReadFromStream(__response); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - - __response.Free(); -end; - -// <%%% END IF_OUT_PARAMS %%%> -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> -initialization - -finalization - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.cpp b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.cpp deleted file mode 100644 index c6d2c8c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// <%%% START SERVICES %%%> -// unit %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Modify this unit to provide implementation for your service. */ - -// Interface of %LIBRARY_NAME% -#include "%LIBRARY_NAME%_intf.h" - -// Our header file -#include "%UNIT_NAME%.h" - -// Invoker interface -#include "%LIBRARY_NAME%_Invk.h" - -// <%%% START IF_DATA_MODULE %%%> -#pragma resourcefile // {$R *.dfm} -// <%%% END IF_DATA_MODULE %%%> - -void __fastcall Create_%SERVICE_NAME%(/*out*/ _di_IInterface& anInstance) -{ - anInstance = new T%SERVICE_NAME%( - // <%%% START IF_DATA_MODULE %%%> - NULL - // <%%% END IF_DATA_MODULE %%%> - )->operator IROObjectRetainer *(); -} - -// %SERVICE_NAME% -// <%%% START IF_DATA_MODULE %%%> - -__fastcall T%SERVICE_NAME%::T%SERVICE_NAME%(Classes::TComponent* aOwner) - : TRORemoteDataModule(aOwner) -{ -} -// <%%% END IF_DATA_MODULE %%%> -// <%%% START FUNCTION_OPERATIONS %%%> -// <%%% START IF_RESULT_SIMPLE %%%> -%OPERATION_RESULT% __fastcall T%SERVICE_NAME%::%OPERATION_NAME%( -// <%%% END IF_RESULT_SIMPLE %%%> -// <%%% START IF_RESULT_COMPLEX %%%> -%OPERATION_RESULT%* __fastcall T%SERVICE_NAME%::%OPERATION_NAME%( -// <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) -{ - // Insert your implementation code for %SERVICE_NAME%::%OPERATION_NAME% here -} -// <%%% END FUNCTION_OPERATIONS %%%> - -// <%%% START PROCEDURE_OPERATIONS %%%> -void __fastcall T%SERVICE_NAME%::%OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) -{ - // Insert your implementation code for %SERVICE_NAME%::%OPERATION_NAME% here -} -// <%%% END PROCEDURE_OPERATIONS %%%> - -void __initialization_%UNIT_NAME%(); - -#pragma startup __initialization_%UNIT_NAME% - -void __initialization_%UNIT_NAME%() -{ - new TROClassFactory("%SERVICE_NAME%", &Create_%SERVICE_NAME%, __classid(T%SERVICE_NAME%_Invoker)); -} - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.dfm deleted file mode 100644 index a201e4c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.dfm +++ /dev/null @@ -1,17 +0,0 @@ -// <%%% START SERVICES %%%> -object %SERVICE_NAME%: T%SERVICE_NAME% - Left = 0 - Top = 0 - ClientHeight = 273 - ClientWidth = 292 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 -end -// <%%% END SERVICES %%%> diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.h deleted file mode 100644 index 6b66247..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.h +++ /dev/null @@ -1,87 +0,0 @@ -// <%%% START SERVICES %%%> -// unit %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile your project. } -{ } -{ Modify the %UNIT_NAME%.cpp file to change the implementation details of } -{ this service. } -{---------------------------------------------------------------------------*/ - -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -#pragma delphiheader begin -#pragma option push -#pragma option -w- // All warnings off -#pragma option -Vx // Zero-length empty class member functions -#pragma pack(push,8) -#include // Pascal unit -#include // Pascal unit -// <%%% START IF_DATA_MODULE %%%> -#include // Pascal unit -// <%%% END IF_DATA_MODULE %%%> -#include "%LIBRARY_NAME%_intf.h" - -namespace %NAMESPACE_NAME% -{ -// T%SERVICE_NAME% -class DELPHICLASS T%SERVICE_NAME%; -class T%SERVICE_NAME% : public %SERVICE_ANCESTOR_NAME%, I%SERVICE_NAME% // implements I%SERVICE_NAME% -{ - typedef %SERVICE_ANCESTOR_NAME% inherited; - -protected: - // I%SERVICE_NAME% methods - // <%%% START FUNCTION_OPERATIONS %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - virtual %OPERATION_RESULT% __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - virtual %OPERATION_RESULT%* __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ); - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - virtual void __fastcall %OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ); - // <%%% END PROCEDURE_OPERATIONS %%%> - -public: - // <%%% START IF_DATA_MODULE %%%> - __fastcall T%SERVICE_NAME%(Classes::TComponent* aOwner); - - // <%%% END IF_DATA_MODULE %%%> - virtual HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj) { - return inherited::QueryInterface(IID, (void *)Obj); } - - virtual ULONG __stdcall AddRef() { - return inherited::_AddRef(); } - - virtual ULONG __stdcall Release() { - return inherited::_Release(); } -}; - -} // namespace %NAMESPACE_NAME% -#endif // %UNIT_NAME%_H - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.pas deleted file mode 100644 index 2fbf642..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.impl.pas +++ /dev/null @@ -1,93 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - // required units - // <%%% START REQUIRED_UNITS %%%> - %REQUIRED_UNIT_NAME%, - // <%%% END REQUIRED_UNITS %%%> - {vcl:} Classes, SysUtils, - {RemObjects:} uROXMLIntf, uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Generated:} %LIBRARY_NAME%_Intf; - -// <%%% START SERVICES %%%> -type - { T%SERVICE_NAME% } - T%SERVICE_NAME% = class(%SERVICE_ANCESTOR_NAME%, I%SERVICE_NAME%) - private - protected - { I%SERVICE_NAME% methods } - // <%%% START FUNCTION_OPERATIONS %%%> - function %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); - // <%%% END PROCEDURE_OPERATIONS %%%> - end; -// <%%% END SERVICES %%%> - -implementation - -// <%%% START IF_DATA_MODULE %%%> -{$R *.dfm} - -// <%%% END IF_DATA_MODULE %%%> -uses - {Generated:} %LIBRARY_NAME%_Invk; - -// <%%% START SERVICES %%%> -procedure Create_%SERVICE_NAME%(out anInstance : IUnknown); -begin - anInstance := T%SERVICE_NAME%.Create( - // <%%% START IF_DATA_MODULE %%%> - nil - // <%%% END IF_DATA_MODULE %%%> - ); -end; - -{ %SERVICE_NAME% } -// <%%% START FUNCTION_OPERATIONS %%%> -function T%SERVICE_NAME%.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; -begin -end; - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -procedure T%SERVICE_NAME%.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); -begin -end; - -// <%%% END PROCEDURE_OPERATIONS %%%> -initialization - TROClassFactory.Create('%SERVICE_NAME%', Create_%SERVICE_NAME%, T%SERVICE_NAME%_Invoker); - -finalization - -// <%%% END SERVICES %%%> -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.cpp b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.cpp deleted file mode 100644 index a6543aa..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.cpp +++ /dev/null @@ -1,1284 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -void __initialization_%UNIT_NAME%(); -void __finalization_%UNIT_NAME%(); - -#pragma startup __initialization_%UNIT_NAME% -#pragma exit __finalization_%UNIT_NAME% - -#include "%LIBRARY_NAME%_intf.h" -#include - -// Implementation of %UNIT_NAME% - -// <%%% START ARRAYS %%%> -// %ARRAY_NAME% -void __fastcall %ARRAY_NAME%::Assign(Classes::TPersistent* iSource) -{ - %ARRAY_NAME%* lSource = dynamic_cast<%ARRAY_NAME%*>(iSource); - if (lSource) - { - Clear(); - Resize(lSource->Count); - for (int i = 0 ; i < Count ; i++) - { - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - if (lSource->Items[i] != NULL) - { - Items[i]->Assign(lSource->Items[i]); - } - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - Items[i] = lSource->Items[i]; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - } - } - else - { - inherited::Assign(iSource); - } -} - -void __fastcall %ARRAY_NAME%::ReadComplex(TObject* ASerializer) -{ - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - %ARRAY_TYPE% lval; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - %ARRAY_TYPE%* lval; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - TROSerializer* Serializer = dynamic_cast(ASerializer); - for (int i = 0; i < Count; i++) - { - // <%%% START IF_ARRAY_BINARY_TYPE %%%> - Serializer->ReadBinary(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_BINARY_TYPE %%%> - // <%%% START IF_ARRAY_BOOLEAN_TYPE %%%> - Serializer->ReadEnumerated(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), __GetboolInfo, &lval, i); - // <%%% END IF_ARRAY_BOOLEAN_TYPE %%%> - // <%%% START IF_ARRAY_CURRENCY_TYPE %%%> - Serializer->ReadDouble(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), ftCurr, &lval, i); - // <%%% END IF_ARRAY_CURRENCY_TYPE %%%> - // <%%% START IF_ARRAY_DATETIME_TYPE %%%> - Serializer->ReadDateTime(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_DATETIME_TYPE %%%> - // <%%% START IF_ARRAY_DECIMAL_TYPE %%%> - Serializer->ReadDecimal(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_DECIMAL_TYPE %%%> - // <%%% START IF_ARRAY_DOUBLE_TYPE %%%> - Serializer->ReadDouble(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), ftDouble, &lval, i); - // <%%% END IF_ARRAY_DOUBLE_TYPE %%%> - // <%%% START IF_ARRAY_GUID_TYPE %%%> - Serializer->ReadGuid(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_GUID_TYPE %%%> - // <%%% START IF_ARRAY_INT64_TYPE %%%> - Serializer->ReadInt64(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_INT64_TYPE %%%> - // <%%% START IF_ARRAY_INTEGER_TYPE %%%> - Serializer->ReadInteger(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), otSLong, &lval, i); - // <%%% END IF_ARRAY_INTEGER_TYPE %%%> - // <%%% START IF_ARRAY_STRING_TYPE %%%> - Serializer->ReadUTF8String(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_STRING_TYPE %%%> - // <%%% START IF_ARRAY_UTF8STRING_TYPE %%%> - Serializer->ReadUTF8String(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_UTF8STRING_TYPE %%%> - // <%%% START IF_ARRAY_VARIANT_TYPE %%%> - Serializer->ReadVariant(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_VARIANT_TYPE %%%> - // <%%% START IF_ARRAY_WIDESTRING_TYPE %%%> - Serializer->ReadWideString(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_WIDESTRING_TYPE %%%> - // <%%% START IF_ARRAY_XML_TYPE %%%> - Serializer->ReadXml(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &lval, i); - // <%%% END IF_ARRAY_XML_TYPE %%%> - // <%%% START IF_ARRAY_ARRAY_TYPE %%%> - Serializer->ReadArray(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), __classid(%ARRAY_TYPE%), &lval, i); - // <%%% END IF_ARRAY_ARRAY_TYPE %%%> - // <%%% START IF_ARRAY_ENUM_TYPE %%%> - Serializer->ReadEnumerated(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), __Get%ARRAY_TYPE%Info, &lval, i); - // <%%% END IF_ARRAY_ENUM_TYPE %%%> - // <%%% START IF_ARRAY_STRUCT_TYPE %%%> - Serializer->ReadStruct(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), __classid(%ARRAY_TYPE%), &lval, i); - // <%%% END IF_ARRAY_STRUCT_TYPE %%%> - Items[i] = lval; - } -} - -void __fastcall %ARRAY_NAME%::WriteComplex(TObject* ASerializer) -{ - TROSerializer* Serializer = dynamic_cast(ASerializer); - for(int i = 0; i < Count; i++) - // <%%% START IF_ARRAY_BINARY_TYPE %%%> - Serializer->WriteBinary(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_BINARY_TYPE %%%> - // <%%% START IF_ARRAY_BOOLEAN_TYPE %%%> - Serializer->WriteEnumerated(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), __GetboolInfo, &(fItems[i]), i); - // <%%% END IF_ARRAY_BOOLEAN_TYPE %%%> - // <%%% START IF_ARRAY_CURRENCY_TYPE %%%> - Serializer->WriteDouble(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), ftCurr, &(fItems[i]), i); - // <%%% END IF_ARRAY_CURRENCY_TYPE %%%> - // <%%% START IF_ARRAY_DATETIME_TYPE %%%> - Serializer->WriteDateTime(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_DATETIME_TYPE %%%> - // <%%% START IF_ARRAY_DECIMAL_TYPE %%%> - Serializer->WriteDecimal(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_DECIMAL_TYPE %%%> - // <%%% START IF_ARRAY_DOUBLE_TYPE %%%> - Serializer->WriteDouble(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), ftDouble, &(fItems[i]), i); - // <%%% END IF_ARRAY_DOUBLE_TYPE %%%> - // <%%% START IF_ARRAY_GUID_TYPE %%%> - Serializer->WriteGuid(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_GUID_TYPE %%%> - // <%%% START IF_ARRAY_INT64_TYPE %%%> - Serializer->WriteInt64(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_INT64_TYPE %%%> - // <%%% START IF_ARRAY_INTEGER_TYPE %%%> - Serializer->WriteInteger(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), otSLong, &(fItems[i]), i); - // <%%% END IF_ARRAY_INTEGER_TYPE %%%> - // <%%% START IF_ARRAY_STRING_TYPE %%%> - Serializer->WriteUTF8String(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_STRING_TYPE %%%> - // <%%% START IF_ARRAY_UTF8STRING_TYPE %%%> - Serializer->WriteUTF8String(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_UTF8STRING_TYPE %%%> - // <%%% START IF_ARRAY_VARIANT_TYPE %%%> - Serializer->WriteVariant(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_VARIANT_TYPE %%%> - // <%%% START IF_ARRAY_WIDESTRING_TYPE %%%> - Serializer->WriteWideString(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_WIDESTRING_TYPE %%%> - // <%%% START IF_ARRAY_XML_TYPE %%%> - Serializer->WriteXml(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_XML_TYPE %%%> - // <%%% START IF_ARRAY_ARRAY_TYPE %%%> - Serializer->WriteArray(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_ARRAY_TYPE %%%> - // <%%% START IF_ARRAY_ENUM_TYPE %%%> - Serializer->WriteEnumerated(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), TypeInfo(%ARRAY_TYPE%), &(fItems[i]), i); - // <%%% END IF_ARRAY_ENUM_TYPE %%%> - // <%%% START IF_ARRAY_STRUCT_TYPE %%%> - Serializer->WriteStruct(Serializer->GetArrayElementName(GetItemType(__classid(%ARRAY_NAME%)), GetItemRef(i)), &(fItems[i]), i); - // <%%% END IF_ARRAY_STRUCT_TYPE %%%> -} - -void __fastcall %ARRAY_NAME%::Grow() -{ - int Delta; - int Capacity = fItems.Length; - if (Capacity > 64) - { - Delta = Capacity / 4; - } - else - { - if (Capacity > 8) - Delta = 16; - else - Delta = 4; - } - fItems.set_length(Capacity + Delta); -} - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -%ARRAY_TYPE%* __fastcall %ARRAY_NAME%::GetItems(const int Index) -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -// <%%% START IF_ARRAY_TYPE_SIMPLE %%%> -%ARRAY_TYPE% __fastcall %ARRAY_NAME%::GetItems(const int Index) -// <%%% END IF_ARRAY_TYPE_SIMPLE %%%> -{ - if ((Index < 0) || (Index >= Count)) - { - RaiseError(LoadResourceString(&_err_ArrayIndexOutOfBounds), ARRAYOFCONST((Index))); - } - return fItems[Index]; -} - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -void __fastcall %ARRAY_NAME%::SetItems(const int Index, %ARRAY_TYPE%* Value) -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -// <%%% START IF_ARRAY_TYPE_SIMPLE %%%> -void __fastcall %ARRAY_NAME%::SetItems(const int Index, %ARRAY_TYPE% Value) -// <%%% END IF_ARRAY_TYPE_SIMPLE %%%> -{ - if ((Index < 0) || (Index >= Count)) - { - RaiseError(LoadResourceString(&_err_ArrayIndexOutOfBounds), ARRAYOFCONST((Index))); - } - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - delete fItems[Index]; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - fItems[Index] = Value; -} - -int __fastcall %ARRAY_NAME%::GetCount() -{ - return fCount; -} - -void* __fastcall %ARRAY_NAME%::GetItemRef(const int Index) -{ - if ((Index < 0) || (Index >= Count)) - { - RaiseError(LoadResourceString(&_err_ArrayIndexOutOfBounds), ARRAYOFCONST((Index))); - } - return &fItems[Index]; -} - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -void __fastcall %ARRAY_NAME%::SetItemRef(const int Index, void* Ref) -{ - if ((Index < 0) || (Index >= Count)) - { - RaiseError(LoadResourceString(&_err_ArrayIndexOutOfBounds), ARRAYOFCONST((Index))); - } - - if (Ref != fItems[Index]) - { - delete fItems[Index]; - fItems[Index] = reinterpret_cast<%ARRAY_TYPE%*>(Ref); - } -} - -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -void __fastcall %ARRAY_NAME%::Clear() -{ - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - for (int i = 0; i < Count; i++) - delete fItems[i]; - - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - fItems.set_length(0); - fCount = 0; -} - -void __fastcall %ARRAY_NAME%::Delete(const int Index) -{ - if (Index >= Count) - { - RaiseError(LoadResourceString(&_err_InvalidIndex), ARRAYOFCONST((Index))); - } - - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - delete fItems[Index]; - - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - if (Index < Count - 1) - for (int i = Index; i < Count - 1 ; i++) - fItems[i] = fItems[i + 1]; - - fItems.set_length(Count - 1); - fCount--; -} - -void __fastcall %ARRAY_NAME%::Resize(const int ElementCount) -{ -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - int i; - for(i = fCount -1; i >= ElementCount; --i) - delete fItems[i]; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - fItems.set_length(ElementCount); -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - for(i = fCount; i <= ElementCount -1; ++i) - fItems[i] = new %ARRAY_TYPE%(); -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - fCount = ElementCount; -} - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -%ARRAY_TYPE%* __fastcall %ARRAY_NAME%::Add() -{ - %ARRAY_TYPE%* result = new %ARRAY_TYPE%(); - Add(result); - return result; -} - -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -int __fastcall %ARRAY_NAME%::Add(%ARRAY_TYPE%* Value) -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -// <%%% START IF_ARRAY_TYPE_SIMPLE %%%> -int __fastcall %ARRAY_NAME%::Add(%ARRAY_TYPE% Value) -// <%%% END IF_ARRAY_TYPE_SIMPLE %%%> -{ - int result = Count; - if (fItems.Length == result) - Grow(); - - fItems[result] = Value; - fCount++; - return result; -} -// <%%% END ARRAYS %%%> -// <%%% START EXCEPTIONS %%%> -// %EXCEPTION_NAME% - -%EXCEPTION_NAME%::%EXCEPTION_NAME%(AnsiString anExceptionMessage - // <%%% START ANCESTOR_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - , %FIELD_TYPE% a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - , %FIELD_TYPE%* a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END ANCESTOR_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - , %FIELD_TYPE% a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - , %FIELD_TYPE%* a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - ): %EXCEPTION_ANCESTOR_NAME%(anExceptionMessage - // <%%% START ANCESTOR_FIELDS %%%> - , a%FIELD_NAME% - // <%%% END ANCESTOR_FIELDS %%%> - ) -{ - // <%%% START FIELDS_NO_STRIP %%%> - f%FIELD_NAME% = a%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> -} - -// <%%% START IF_HAS_FIELDS %%%> -void __fastcall %EXCEPTION_NAME%::ReadException(TObject* ASerializer) -{ - if (dynamic_cast(ASerializer)->RecordStrictOrder) - { - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited::ReadException(ASerializer); - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->ReadBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->ReadDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->ReadDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->ReadGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->ReadInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->ReadInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->ReadVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->ReadXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->ReadArray("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->ReadStruct("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% = l_%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> - } - else - { - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->ReadBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->ReadDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->ReadDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->ReadGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->ReadInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->ReadInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->ReadVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->ReadXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->ReadArray("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->ReadStruct("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% = l_%FIELD_NAME%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - } -} - -void __fastcall %EXCEPTION_NAME%::WriteException(TObject* ASerializer) -{ - if (dynamic_cast(ASerializer)->RecordStrictOrder) - { - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited::WriteException(ASerializer); - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->WriteBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->WriteDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->WriteDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->WriteGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->WriteInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->WriteInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->WriteVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->WriteXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->WriteArray("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->WriteStruct("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END FIELDS_NO_STRIP %%%> - } - else - { - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->WriteBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->WriteDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->WriteDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->WriteGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->WriteInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->WriteInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->WriteVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->WriteXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->WriteArray("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->WriteStruct("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - } -} - -// <%%% END IF_HAS_FIELDS %%%> -// <%%% END EXCEPTIONS %%%> -// <%%% START STRUCTS %%%> -// %STRUCT_NAME% - -void __fastcall %STRUCT_NAME%::Assign(Classes::TPersistent* iSource) -{ - inherited::Assign(iSource); // inherited typedef - // <%%% START IF_HAS_FIELDS %%%> - - %STRUCT_NAME%* lSource = dynamic_cast<%STRUCT_NAME%*>(iSource); - if (lSource) - { - // <%%% END IF_HAS_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_NAME% = lSource->%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_NOT_AUTO_CREATE_FIELDS %%%> - if (f%FIELD_NAME% != NULL) - %FIELD_NAME%->Assign(lSource->%FIELD_NAME%); - // <%%% END IF_NOT_AUTO_CREATE_FIELDS %%%> - // <%%% START IF_AUTO_CREATE_FIELDS %%%> - %FIELD_NAME%->Assign(lSource->%FIELD_NAME%); - // <%%% END IF_AUTO_CREATE_FIELDS %%%> - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - // <%%% START IF_HAS_FIELDS %%%> - } - // <%%% END IF_HAS_FIELDS %%%> -} - -// <%%% START FIELDS_NO_STRIP %%%> -// <%%% START IF_FIELD_TYPE_COMPLEX %%%> -%FIELD_TYPE%* __fastcall %STRUCT_NAME%::Get%FIELD_NAME%() -{ - // <%%% START IF_AUTO_CREATE_FIELDS %%%> - if (f%FIELD_NAME% == NULL) - f%FIELD_NAME% = new %FIELD_TYPE%(); - // <%%% END IF_AUTO_CREATE_FIELDS %%%> - return f%FIELD_NAME%; -} - -// <%%% END IF_FIELD_TYPE_COMPLEX %%%> -// <%%% END FIELDS_NO_STRIP %%%> -// <%%% START IF_HAS_FIELDS %%%> -void __fastcall %STRUCT_NAME%::ReadComplex(TObject* ASerializer) -{ - if (dynamic_cast(ASerializer)->RecordStrictOrder) - { - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited::ReadException(ASerializer); - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->ReadBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->ReadDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->ReadDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->ReadGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->ReadInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->ReadInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->ReadVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->ReadXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->ReadArray("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->ReadStruct("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% = l_%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> - } - else - { - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->ReadBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->ReadDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->ReadDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->ReadDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->ReadGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->ReadInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->ReadInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->ReadVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->ReadWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->ReadXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->ReadArray("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->ReadEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->ReadStruct("%FIELD_NAME%", __classid(%FIELD_TYPE%), &l_%FIELD_NAME%); - if (%FIELD_NAME% != l_%FIELD_NAME%) delete %FIELD_NAME%; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% = l_%FIELD_NAME%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - } -} - -void __fastcall %STRUCT_NAME%::WriteComplex(TObject* ASerializer) -{ - if (dynamic_cast(ASerializer)->RecordStrictOrder) - { - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited::WriteException(ASerializer); - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->WriteBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->WriteDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->WriteDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->WriteGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->WriteInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->WriteInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->WriteVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->WriteXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->WriteArray("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->WriteStruct("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END FIELDS_NO_STRIP %%%> - } - else - { - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* l_%FIELD_NAME% = %FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_FIELD_BINARY_TYPE %%%> - dynamic_cast(ASerializer)->WriteBinary("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __GetboolInfo, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftCurr, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - dynamic_cast(ASerializer)->WriteDateTime("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - dynamic_cast(ASerializer)->WriteDecimal("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - dynamic_cast(ASerializer)->WriteDouble("%FIELD_NAME%", ftDouble, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - dynamic_cast(ASerializer)->WriteGuid("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - dynamic_cast(ASerializer)->WriteInt64("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - dynamic_cast(ASerializer)->WriteInteger("%FIELD_NAME%", otSLong, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteUTF8String("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - dynamic_cast(ASerializer)->WriteVariant("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - dynamic_cast(ASerializer)->WriteWideString("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - dynamic_cast(ASerializer)->WriteXml("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - dynamic_cast(ASerializer)->WriteArray("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - dynamic_cast(ASerializer)->WriteEnumerated("%FIELD_NAME%", __Get%FIELD_TYPE%Info, &l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - dynamic_cast(ASerializer)->WriteStruct("%FIELD_NAME%", &l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - } -} - -// <%%% END IF_HAS_FIELDS %%%> -//%STRUCT_COLLECTION_NAME% -%STRUCT_NAME%* __fastcall %STRUCT_COLLECTION_NAME%::Add() -{ - return dynamic_cast<%STRUCT_NAME%*>(inherited::Add()); -} - -%STRUCT_NAME%* __fastcall %STRUCT_COLLECTION_NAME%::GetItems(const int Index) -{ - return dynamic_cast<%STRUCT_NAME%*>(inherited::Items[Index]); -} - -void __fastcall %STRUCT_COLLECTION_NAME%::SetItems(const int Index, %STRUCT_NAME%* Value) -{ - dynamic_cast<%STRUCT_NAME%*>(inherited::Items[Index])->Assign(Value); -} - -// <%%% START ARRAYS_IS_FOUND %%%> -void %STRUCT_COLLECTION_NAME%::LoadFromArray(%ARRAY_NAME%* anArray) -{ - Clear(); - - for(int i = 0; i <= anArray->Count-1; ++i) - Add()->Assign((*anArray)[i]); -} - -void %STRUCT_COLLECTION_NAME%::SaveToArray(%ARRAY_NAME%* anArray) -{ - anArray->Clear(); - anArray->Resize(Count); - for(int i = 0; i <= Count-1; ++i) - { - anArray->Items[i] = new %STRUCT_NAME%; - anArray->Items[i]->Assign(Items[i]); - } -} - -// <%%% END ARRAYS_IS_FOUND %%%> -// <%%% END STRUCTS %%%> -// <%%% START SERVICES %%%> -// <%%% START FUNCTION_OPERATIONS %%%> -// <%%% START IF_RESULT_SIMPLE %%%> -%OPERATION_RESULT% __fastcall T%SERVICE_NAME%_Proxy::%OPERATION_NAME%( -// <%%% END IF_RESULT_SIMPLE %%%> -// <%%% START IF_RESULT_COMPLEX %%%> -%OPERATION_RESULT%* __fastcall T%SERVICE_NAME%_Proxy::%OPERATION_NAME%( -// <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) -{ - // <%%% START IF_RESULT_SIMPLE %%%> - %OPERATION_RESULT% result; - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - %OPERATION_RESULT%* result; - // <%%% END IF_RESULT_COMPLEX %%%> - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% = NULL; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - result = NULL; - // <%%% END IF_RESULT_COMPLEX %%%> - try - { - __Message->InitializeRequestMessage(__TransportChannel, "%LIBRARY_NAME%", __InterfaceName, "%OPERATION_NAME%"); - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message->Finalize(); - - __TransportChannel->Dispatch(__Message); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - __Message->Read("Result", __Get%OPERATION_RESULT%Info, &result, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - __Message->Read("Result", __typeinfo(%OPERATION_RESULT%), result, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_COMPLEX %%%> - } - __finally - { - __Message->FreeStream(); - } - return result; -} - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -void __fastcall T%SERVICE_NAME%_Proxy::%OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) -{ - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% = NULL; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - try - { - __Message->InitializeRequestMessage(__TransportChannel, "%LIBRARY_NAME%", __InterfaceName, "%OPERATION_NAME%"); - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message->Finalize(); - - __TransportChannel->Dispatch(__Message); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - } - __finally - { - __Message->FreeStream(); - } -} - -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> -// <%%% START EVENT_SINKS %%%> - -namespace %NAMESPACE_NAME% -{ -// T%EVENT_SINK_NAME%_Writer -class DELPHICLASS T%EVENT_SINK_NAME%_Writer; -class T%EVENT_SINK_NAME%_Writer : public T%EVENT_SINK_WRITER_ANCESTOR_NAME%, I%EVENT_SINK_NAME%_Writer -{ -protected: - // <%%% START OPERATIONS %%%> - void __fastcall %OPERATION_NAME%(const GUID __Sender - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ); - // <%%% END OPERATIONS %%%> -}; - -} // namespace %NAMESPACE_NAME% - -// <%%% START OPERATIONS %%%> -void __fastcall T%EVENT_SINK_NAME%_Writer::%OPERATION_NAME%(const GUID __Sender - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) -{ - Binary* __eventdata = new Binary(""); - try - { - __Message->InitializeEventMessage(NULL, "%LIBRARY_NAME%", EID_%EVENT_SINK_NAME%, "%OPERATION_NAME%"); - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - __Message->Finalize(); - - __Message->WriteToStream(__eventdata); - - Repository->StoreEventData(__Sender, __eventdata, TROEventWriter::ExcludeSender, TROEventWriter::ExcludeSessionList, TROEventWriter::SessionList->CommaText); - } - __finally - { - delete __eventdata; - } -} - -// <%%% END OPERATIONS %%%> -/* T%EVENT_SINK_NAME%_Invoker */ -namespace %NAMESPACE_NAME% -{ -class DELPHICLASS T%EVENT_SINK_NAME%_Invoker; -class T%EVENT_SINK_NAME%_Invoker : public T%EVENT_SINK_INVOKER_ANCESTOR_NAME% -{ -__published: - // <%%% START OPERATIONS %%%> - void __fastcall Invoke_%OPERATION_NAME%(TROEventReceiver* __EventReceiver, IROMessage* __Message, IUnknown* __Target); - // <%%% END OPERATIONS %%%> -}; -} // namespace %NAMESPACE_NAME% - -// <%%% START OPERATIONS %%%> -void __fastcall T%EVENT_SINK_NAME%_Invoker::Invoke_%OPERATION_NAME%(TROEventReceiver* __EventReceiver, IROMessage* __Message, IUnknown* __Target) -{ - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_TYPE% %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_TYPE%* %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - TROObjectDisposer* __lObjectDisposer; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - I%EVENT_SINK_NAME%* __%EVENT_SINK_NAME%Instance; - - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% = NULL; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - try - { - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __%EVENT_SINK_NAME%Instance = dynamic_cast(__Target); - __%EVENT_SINK_NAME%Instance->%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - } - __finally - { - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer = new TROObjectDisposer(__EventReceiver->operator IInterface *()); - try - { - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer->Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - } - __finally - { - delete __lObjectDisposer; - } - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - } -} - -// <%%% END OPERATIONS %%%> -// <%%% END EVENT_SINKS %%%> -void __initialization_%UNIT_NAME%() -{ - // <%%% START STRUCTS %%%> - RegisterROClass(__classid(%STRUCT_NAME%)); - // <%%% END STRUCTS %%%> - // <%%% START ARRAYS %%%> - RegisterROClass(__classid(%ARRAY_NAME%)); - // <%%% END ARRAYS %%%> - // <%%% START EXCEPTIONS %%%> - RegisterExceptionClass(__classid(%EXCEPTION_NAME%)); - // <%%% END EXCEPTIONS %%%> - // <%%% START SERVICES %%%> - RegisterProxyClass(I%SERVICE_NAME%_IID, __classid(T%SERVICE_NAME%_Proxy)); - // <%%% END SERVICES %%%> - // <%%% START EVENT_SINKS %%%> - RegisterEventWriterClass(I%EVENT_SINK_NAME%_IID, __classid(T%EVENT_SINK_NAME%_Writer)); - RegisterEventInvokerClass(EID_%EVENT_SINK_NAME%, __classid(T%EVENT_SINK_NAME%_Invoker)); - // <%%% END EVENT_SINKS %%%> -} - -void __finalization_%UNIT_NAME%() -{ - // <%%% START STRUCTS %%%> - UnregisterROClass(__classid(%STRUCT_NAME%)); - // <%%% END STRUCTS %%%> - // <%%% START ARRAYS %%%> - UnregisterROClass(__classid(%ARRAY_NAME%)); - // <%%% END ARRAYS %%%> - // <%%% START EXCEPTIONS %%%> - UnregisterExceptionClass(__classid(%EXCEPTION_NAME%)); - // <%%% END EXCEPTIONS %%%> - // <%%% START SERVICES %%%> - UnregisterProxyClass(I%SERVICE_NAME%_IID); - // <%%% END SERVICES %%%> - // <%%% START EVENT_SINKS %%%> - UnregisterEventWriterClass(I%EVENT_SINK_NAME%_IID); - UnregisterEventInvokerClass(EID_%EVENT_SINK_NAME%); - // <%%% END EVENT_SINKS %%%> -} - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.h deleted file mode 100644 index b736b69..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.h +++ /dev/null @@ -1,519 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -#pragma delphiheader begin -#pragma option push -#pragma option -w- // All warnings off -#pragma option -Vx // Zero-length empty class member functions -#pragma pack(push,8) - -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -#include // Pascal unit -// <%%% START REQUIRED_UNITS %%%> -#include <%REQUIRED_UNIT_NAME%.hpp> -// <%%% END REQUIRED_UNITS %%%> - -namespace %NAMESPACE_NAME% -{ -// Library ID -#define LibraryUID "%LIBRARY_UID%" -#define TargetNamespace "%NAMESPACE_NAME%" - -// Service Interface ID's -// <%%% START SERVICES %%%> -const GUID I%SERVICE_NAME%_IID = Sysutils::StringToGUID("%SERVICE_UID%"); -// <%%% END SERVICES %%%> - -// Event ID's -// <%%% START EVENT_SINKS %%%> -#define EID_%EVENT_SINK_NAME% "%EVENT_SINK_NAME%" -const GUID I%EVENT_SINK_NAME%_IID = Sysutils::StringToGUID("%EVENT_SINK_UID%"); -// <%%% END EVENT_SINKS %%%> - -// Forward declarations -// <%%% START SERVICES %%%> -__interface I%SERVICE_NAME%; // = interface; -// <%%% END SERVICES %%%> -// <%%% START ARRAYS %%%> -class DELPHICLASS %ARRAY_NAME%; -// <%%% END ARRAYS %%%> -// <%%% START STRUCTS %%%> -class DELPHICLASS %STRUCT_NAME%; -// <%%% END STRUCTS %%%> -// <%%% START EXCEPTIONS %%%> -class DELPHICLASS %EXCEPTION_NAME%; -// <%%% END EXCEPTIONS %%%> -// <%%% START EVENT_SINKS %%%> -__interface I%EVENT_SINK_NAME%; // = interface; -// <%%% END EVENT_SINKS %%%> - -/* Enumerateds */ -// <%%% START ENUMS %%%> -// <%%% START DOCUMENTATION %%%> - -/* Description: - %CONTENT% */ -// <%%% END DOCUMENTATION %%%> -#pragma option push -b- -enum %ENUM_NAME% { - // <%%% START VALUES %%%> - %VALUE_NAME%, - // <%%% END VALUES %%%> - }; -#pragma option pop - -// <%%% END ENUMS %%%> -/* Simple type holders */ -// Note: In order to get type info for a simple type, we MUST have it from the -// published property of a Delphi class. There is no other way as __typeinfo -// requires the type to actually derive from TObject. Hence the reason why -// we create these dummy classes with a simple property of the correct type. -// <%%% START SIMPLE_TYPES %%%> -#ifndef __Get%TYPE_NAME%Info -class DELPHICLASS %TYPE_NAME%TypeHolder; -class %TYPE_NAME%TypeHolder : public TPersistent -{ -private: - %TYPE_NAME% FHolderField; -__published: - __property %TYPE_NAME% HolderField = {read=FHolderField, write=FHolderField}; -}; -#define __Get%TYPE_NAME%Info *::GetPropInfo(__typeinfo(%TYPE_NAME%TypeHolder), "HolderField")->PropType -#endif // __Get%TYPE_NAME%Info - -// <%%% END SIMPLE_TYPES %%%> -// <%%% START STRUCTS %%%> -// %STRUCT_NAME% -class DELPHICLASS %STRUCT_NAME%; -class %STRUCT_NAME% : public Urotypes::TROComplexType -{ - // Allow the use of "inherited" in our class as Delphi allows - typedef Urotypes::TROComplexType inherited; - -private: - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* __fastcall Get%FIELD_NAME%(); - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> -public: - virtual void __fastcall Assign(Classes::TPersistent* iSource); - // <%%% START IF_HAS_FIELDS %%%> - virtual void __fastcall ReadComplex(TObject* ASerializer); - virtual void __fastcall WriteComplex(TObject* ASerializer); - // <%%% END IF_HAS_FIELDS %%%> - -__published: - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - __property %FIELD_TYPE% %FIELD_NAME% = {read=f%FIELD_NAME%, write=f%FIELD_NAME%}; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - __property %FIELD_TYPE%* %FIELD_NAME% = {read=Get%FIELD_NAME%, write=f%FIELD_NAME%}; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> -public: - // Pascal constructor/destructor - #pragma option push -w-inl - /* TROComplexType.Create */ inline __fastcall virtual %STRUCT_NAME%()/* overload */ : Urotypes::TROComplexType() {} - #pragma option pop - #pragma option push -w-inl - /* TROComplexType.Destroy */ inline __fastcall virtual ~%STRUCT_NAME%() {} - #pragma option pop -}; - -// %STRUCT_COLLECTION_NAME% -class DELPHICLASS %STRUCT_COLLECTION_NAME%; -class %STRUCT_COLLECTION_NAME% : public Uroclasses::TROCollection -{ - typedef Uroclasses::TROCollection inherited; - -public: - %STRUCT_NAME%* operator[](int Index) { return Items[Index]; } - -protected: - __fastcall %STRUCT_COLLECTION_NAME%(TMetaClass* aItemClass) : Uroclasses::TROCollection(aItemClass) {} /*overload*/ - %STRUCT_NAME%* __fastcall GetItems(const int Index); - void __fastcall SetItems(const int Index, %STRUCT_NAME%* Value); - -public: - __fastcall %STRUCT_COLLECTION_NAME%() : Uroclasses::TROCollection(__classid(%STRUCT_NAME%)) {} /*overload*/ - HIDESBASE %STRUCT_NAME%* __fastcall Add(); /*reintroduce*/ - // <%%% START ARRAYS_IS_FOUND %%%> - void SaveToArray(%ARRAY_NAME%* anArray); - void LoadFromArray(%ARRAY_NAME%* anArray); - // <%%% END ARRAYS_IS_FOUND %%%> - __property %STRUCT_NAME%* Items[int Index] = {read=GetItems, write=SetItems /*default*/}; - #pragma option push -w-inl - /* TCollection.Destroy */ inline __fastcall virtual ~%STRUCT_COLLECTION_NAME%() {} - #pragma option pop -}; - -typedef DynamicArray<%STRUCT_NAME%* > %UNIT_NAME%_%STRUCT_NAME%__4; - -// <%%% END STRUCTS %%%> -// <%%% START ARRAYS %%%> -// %ARRAY_NAME% - -// <%%% START IF_ARRAY_TYPE_SIMPLE %%%> -typedef DynamicArray<%ARRAY_TYPE%> %ARRAY_NAME%_%ARRAY_TYPE%; -// <%%% END IF_ARRAY_TYPE_SIMPLE %%%> -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -typedef DynamicArray<%ARRAY_TYPE%* > %ARRAY_NAME%_%ARRAY_TYPE%; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - -class DELPHICLASS %ARRAY_NAME%; -class %ARRAY_NAME% : public Urotypes::TROArray -{ - typedef Urotypes::TROArray inherited; - -public: - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - %ARRAY_TYPE%* operator[](const int Index) { return Items[Index]; } - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - %ARRAY_TYPE% operator[](const int Index) { return Items[Index]; } - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - -private: - int fCount; - %ARRAY_NAME%_%ARRAY_TYPE% fItems; - -protected: - virtual void __fastcall Grow(); - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - %ARRAY_TYPE%* __fastcall GetItems(const int Index); - void __fastcall SetItems(const int Index, %ARRAY_TYPE%* Value); - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - %ARRAY_TYPE% __fastcall GetItems(const int Index); - void __fastcall SetItems(const int Index, %ARRAY_TYPE% Value); - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - virtual int __fastcall GetCount(); - -public: - /* virtual class method */ - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - virtual Typinfo::PTypeInfo __fastcall GetItemType(const TMetaClass* vmt) { return __Get%ARRAY_TYPE%Info; } - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - virtual Typinfo::PTypeInfo __fastcall GetItemType(const TMetaClass* vmt) { return __typeinfo(%ARRAY_TYPE%); } - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - /* virtual class method */ - virtual TMetaClass* __fastcall GetItemClass(const TMetaClass* vmt) { return __classid(%ARRAY_TYPE%); } - - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - /* virtual class method */ - virtual int __fastcall GetItemSize(const TMetaClass* vmt) { return sizeof(%ARRAY_TYPE%); } - - virtual void * __fastcall GetItemRef(const int Index); - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - virtual void __fastcall SetItemRef(const int Index, void* Ref); - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - virtual void __fastcall Clear(); - virtual void __fastcall Delete(const int Index); - virtual void __fastcall Resize(const int ElementCount); - virtual void __fastcall Assign(Classes::TPersistent* iSource); - virtual void __fastcall ReadComplex(TObject* ASerializer); - virtual void __fastcall WriteComplex(TObject* ASerializer); - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - %ARRAY_TYPE%* __fastcall Add()/* overload */; - int __fastcall Add(%ARRAY_TYPE%* Value)/* overload */; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - int __fastcall Add(%ARRAY_TYPE% Value)/* overload */; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - __property int Count = {read=GetCount, nodefault}; - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - __property %ARRAY_TYPE%* Items[int Index] = {read=GetItems, write=SetItems/*, default*/}; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - __property %ARRAY_TYPE% Items[int Index] = {read=GetItems, write=SetItems/*, default*/}; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - __property %ARRAY_NAME%_%ARRAY_TYPE% InnerArray = {read=fItems, nodefault}; -public: - #pragma option push -w-inl - /* TROArray.Destroy */ inline __fastcall virtual ~%ARRAY_NAME%() {} - #pragma option pop - -public: - #pragma option push -w-inl - /* TROComplexType.Create */ inline __fastcall virtual %ARRAY_NAME%()/* overload */ : Urotypes::TROArray() {} - #pragma option pop -}; - -// <%%% END ARRAYS %%%> -// <%%% START EXCEPTIONS %%%> -// <%%% START DOCUMENTATION %%%> - -/* Description: - %CONTENT% */ -// <%%% END DOCUMENTATION %%%> -class DELPHICLASS %EXCEPTION_NAME%; -class %EXCEPTION_NAME% : public %EXCEPTION_ANCESTOR_NAME% -{ - typedef %EXCEPTION_ANCESTOR_NAME% inherited; - -private: - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_TYPE% f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - %FIELD_TYPE%* f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> -public: - %EXCEPTION_NAME%(AnsiString anExceptionMessage - // <%%% START ANCESTOR_FIELDS %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - , %FIELD_TYPE% a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - , %FIELD_TYPE%* a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END ANCESTOR_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - , %FIELD_TYPE% a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - , %FIELD_TYPE%* a%FIELD_NAME% - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - ); - // <%%% START IF_HAS_FIELDS %%%> - virtual void __fastcall ReadException(TObject* ASerializer); - virtual void __fastcall WriteException(TObject* ASerializer); - // <%%% END IF_HAS_FIELDS %%%> -__published: - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - __property %FIELD_TYPE% %FIELD_NAME% = {read=f%FIELD_NAME%, write=f%FIELD_NAME%}; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - __property %FIELD_TYPE%* %FIELD_NAME% = {read=f%FIELD_NAME%, write=f%FIELD_NAME%}; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> -}; - -// <%%% END EXCEPTIONS %%%> -// <%%% START SERVICES %%%> -__interface I%SERVICE_NAME%; -typedef System::DelphiInterface _di_I%SERVICE_NAME%; -__interface INTERFACE_UUID("%SERVICE_UID%") I%SERVICE_NAME% : public %SERVICE_ANCESTOR_NAME% -{ -public: - // <%%% START FUNCTION_OPERATIONS %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - virtual %OPERATION_RESULT% __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - virtual %OPERATION_RESULT%* __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - virtual void __fastcall %OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END PROCEDURE_OPERATIONS %%%> -}; - -class DELPHICLASS T%SERVICE_NAME%_Proxy; -class T%SERVICE_NAME%_Proxy : public %SERVICE_PROXY_ANCESTOR_NAME%, I%SERVICE_NAME% -{ - typedef %SERVICE_PROXY_ANCESTOR_NAME% inherited; - -protected: - virtual AnsiString __fastcall __GetInterfaceName() - { return "%SERVICE_NAME%"; } - - // <%%% START FUNCTION_OPERATIONS %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - virtual %OPERATION_RESULT% __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - virtual %OPERATION_RESULT%* __fastcall %OPERATION_NAME%( - // <%%% END IF_RESULT_COMPLEX %%%> - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ); - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - virtual void __fastcall %OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ); - // <%%% END PROCEDURE_OPERATIONS %%%> - -public: - #pragma option push -w-inl - /* TROProxy.Create */ inline __fastcall virtual T%SERVICE_NAME%_Proxy(const Uroclientintf::_di_IROMessage aMessage, const Uroclientintf::_di_IROTransportChannel aTransportChannel)/* overload */ : - %SERVICE_PROXY_ANCESTOR_NAME%(aMessage, aTransportChannel) {} - #pragma option pop - - virtual HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj) { - return inherited::QueryInterface(IID, (void *)Obj); } - - virtual ULONG __stdcall AddRef() { - return inherited::_AddRef(); } - - virtual ULONG __stdcall Release() { - return inherited::_Release(); } -}; - -// Co%SERVICE_NAME% -class DELPHICLASS Co%SERVICE_NAME%; -class Co%SERVICE_NAME% : public System::TObject -{ - typedef System::TObject inherited; - -public: - static _di_I%SERVICE_NAME% __fastcall Create(const Uroclientintf::_di_IROMessage aMessage, - Uroclientintf::_di_IROTransportChannel aTransportChannel) - { - _di_I%SERVICE_NAME% result; - T%SERVICE_NAME%_Proxy* proxy = new T%SERVICE_NAME%_Proxy(aMessage, aTransportChannel); - if (proxy->QueryInterface(I%SERVICE_NAME%_IID, reinterpret_cast(&result)) != S_OK) - { - delete proxy; - throw EIntfCastError::EIntfCastError("I%SERVICE_NAME% not supported"); - } - return result; - }; - - static _di_I%SERVICE_NAME% __fastcall Create(const Uroclient::TROMessage* aMessage, - Uroclient::TROTransportChannel *aTransportChannel) - { - _di_IROMessage __Message; - _di_IROTransportChannel __TransportChannel; - - if (aMessage->GetInterface(__Message)) - { - if (aTransportChannel->GetInterface(__TransportChannel)) - return Create(__Message, __TransportChannel); - else - throw EIntfCastError::EIntfCastError("IROTransportChannel not supported"); - } - else - { - throw EIntfCastError::EIntfCastError("IROMessage not supported"); - } - }; -}; - -// <%%% END SERVICES %%%> -// <%%% START EVENT_SINKS %%%> -/* I%EVENT_SINK_NAME% */ -// <%%% START DOCUMENTATION %%%> - -/* Description: - %CONTENT% */ -// <%%% END DOCUMENTATION %%%> -__interface I%EVENT_SINK_NAME%; -typedef System::DelphiInterface _di_I%EVENT_SINK_NAME%; -__interface INTERFACE_UUID("%EVENT_SINK_UID%") I%EVENT_SINK_NAME% : public %EVENT_SINK_ANCESTOR_NAME% -{ -public: - // <%%% START OPERATIONS %%%> - virtual void __fastcall %OPERATION_NAME%( - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END OPERATIONS %%%> -}; - -/* I%EVENT_SINK_NAME%_Writer */ -// <%%% START DOCUMENTATION %%%> - -/* Description: - %CONTENT% */ -// <%%% END DOCUMENTATION %%%> -__interface I%EVENT_SINK_NAME%_Writer; -typedef System::DelphiInterface _di_I%EVENT_SINK_NAME%_Writer; -__interface INTERFACE_UUID("%EVENT_SINK_UID%") I%EVENT_SINK_NAME%_Writer : public I%EVENT_SINK_WRITER_ANCESTOR_NAME% -{ -public: - // <%%% START OPERATIONS %%%> - virtual void __fastcall %OPERATION_NAME%(GUID __Sender - // <%%% START PARAMS %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - , %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME% - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS %%%> - ) = 0; // pure virtual function - interface only - // <%%% END OPERATIONS %%%> -}; - -// <%%% END EVENT_SINKS %%%> -} // namespace %NAMESPACE_NAME% - -using namespace %NAMESPACE_NAME%; -#pragma pack(pop) -#pragma option pop - -#pragma delphiheader end. -#endif // %UNIT_NAME%_H - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.pas deleted file mode 100644 index 1c62467..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.intf.pas +++ /dev/null @@ -1,1435 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - // required units - // <%%% START REQUIRED_UNITS %%%> - %REQUIRED_UNIT_NAME%, - // <%%% END REQUIRED_UNITS %%%> - {vcl:} Classes, TypInfo, - {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf; - -const - { Library ID } - LibraryUID = '%LIBRARY_UID%'; - TargetNamespace = '%NAMESPACE_NAME%'; - - { Service Interface ID's } - // <%%% START SERVICES %%%> - I%SERVICE_NAME%_IID : TGUID = '%SERVICE_UID%'; - // <%%% END SERVICES %%%> - - { Event ID's } - // <%%% START EVENT_SINKS %%%> - EID_%EVENT_SINK_NAME% = '%EVENT_SINK_NAME%'; - // <%%% END EVENT_SINKS %%%> - -type - { Forward declarations } - // <%%% START SERVICES %%%> - I%SERVICE_NAME% = interface; - // <%%% END SERVICES %%%> - // <%%% START ARRAYS %%%> - %ARRAY_NAME% = class; - // <%%% END ARRAYS %%%> - // <%%% START STRUCTS %%%> - %STRUCT_NAME% = class; - // <%%% END STRUCTS %%%> - // <%%% START EXCEPTIONS %%%> - %EXCEPTION_NAME% = class; - // <%%% END EXCEPTIONS %%%> - // <%%% START EVENT_SINKS %%%> - I%EVENT_SINK_NAME% = interface; - // <%%% END EVENT_SINKS %%%> - - { Enumerateds } - // <%%% START ENUMS %%%> - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - %ENUM_NAME% = ( - // <%%% START VALUES %%%> - %VALUE_NAME%, - // <%%% END VALUES %%%> - ); - - // <%%% END ENUMS %%%> - // <%%% START STRUCTS %%%> - { %STRUCT_NAME% } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - %STRUCT_NAME% = class(%STRUCT_ANCESTOR_NAME%) - private - FDestroying: Boolean; - - // <%%% START FIELDS_NO_STRIP %%%> - f%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END FIELDS_NO_STRIP %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - function Get%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - public - procedure Assign(iSource: TPersistent); override; - destructor Destroy; override; - // <%%% START IF_HAS_FIELDS %%%> - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - // <%%% END IF_HAS_FIELDS %%%> - published - // Fields must be published for the ancestor destructor to find and destroy them. - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - property %FIELD_NAME%:%FIELD_TYPE% read f%FIELD_NAME% write f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - property %FIELD_NAME%:%FIELD_TYPE% read Get%FIELD_NAME% write f%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - end; - - { %STRUCT_COLLECTION_NAME% } - %STRUCT_COLLECTION_NAME% = class(%STRUCT_ANCESTOR_COLLECTION_NAME%) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(aIndex: integer): %STRUCT_NAME%; - procedure SetItems(aIndex: integer; const Value: %STRUCT_NAME%); - public - constructor Create; overload; - function Add: %STRUCT_NAME%; reintroduce; - // <%%% START ARRAYS_IS_FOUND %%%> - procedure SaveToArray(anArray: %ARRAY_NAME%); overload; - procedure LoadFromArray(anArray: %ARRAY_NAME%); overload; - // <%%% END ARRAYS_IS_FOUND %%%> - property Items[Index: integer]:%STRUCT_NAME% read GetItems write SetItems; default; - end; - - // <%%% END STRUCTS %%%> - // <%%% START ARRAYS %%%> - { %ARRAY_NAME% } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - %ARRAY_NAME%_%ARRAY_TYPE% = array of %ARRAY_TYPE%; - %ARRAY_NAME% = class(TROArray) - private - fCount: Integer; - fItems : %ARRAY_NAME%_%ARRAY_TYPE%; - protected - procedure Grow; virtual; - function GetItems(aIndex: integer): %ARRAY_TYPE%; - procedure SetItems(aIndex: integer; const Value: %ARRAY_TYPE%); - function GetCount: integer; override; - public - class function GetItemType: PTypeInfo; override; - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - class function GetItemClass: TClass; override; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - class function GetItemSize: integer; override; - function GetItemRef(aIndex: integer): pointer; override; - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - procedure SetItemRef(aIndex: integer; Ref: pointer); override; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - procedure Clear; override; - procedure Delete(aIndex: integer); override; - procedure Resize(ElementCount: integer); override; - - procedure Assign(iSource:TPersistent); override; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - function Add: %ARRAY_TYPE%; overload; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - function Add(const Value: %ARRAY_TYPE%):integer; overload; - - property Count : integer read GetCount; - property Items[Index: integer]:%ARRAY_TYPE% read GetItems write SetItems; default; - property InnerArray: %ARRAY_NAME%_%ARRAY_TYPE% read fItems; - end; - - // <%%% END ARRAYS %%%> - { Exceptions } - // <%%% START EXCEPTIONS %%%> - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - %EXCEPTION_NAME% = class(%EXCEPTION_ANCESTOR_NAME%) - private - // <%%% START FIELDS_NO_STRIP %%%> - f%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END FIELDS_NO_STRIP %%%> - public - constructor Create(anExceptionMessage : string - // <%%% START ANCESTOR_FIELDS %%%> - ; a%FIELD_NAME%: %FIELD_TYPE% - // <%%% END ANCESTOR_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - ; a%FIELD_NAME%: %FIELD_TYPE% - // <%%% END FIELDS_NO_STRIP %%%> - ); - // <%%% START IF_HAS_FIELDS %%%> - procedure ReadException(ASerializer: TObject); override; - procedure WriteException(ASerializer: TObject); override; - // <%%% END IF_HAS_FIELDS %%%> - published - // <%%% START FIELDS_NO_STRIP %%%> - property %FIELD_NAME%: %FIELD_TYPE% read f%FIELD_NAME% write f%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> - end; - - // <%%% END EXCEPTIONS %%%> - // <%%% START SERVICES %%%> - { I%SERVICE_NAME% } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - I%SERVICE_NAME% = interface%SERVICE_ANCESTOR_NAME% - ['%SERVICE_UID%'] - // <%%% START FUNCTION_OPERATIONS %%%> - function %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); - // <%%% END PROCEDURE_OPERATIONS %%%> - end; - - { Co%SERVICE_NAME% } - Co%SERVICE_NAME% = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): I%SERVICE_NAME%; - end; - - { T%SERVICE_NAME%_Proxy } - T%SERVICE_NAME%_Proxy = class(%SERVICE_PROXY_ANCESTOR_NAME%, I%SERVICE_NAME%) - protected - function __GetInterfaceName:string; override; - - // <%%% START FUNCTION_OPERATIONS %%%> - function %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); - // <%%% END PROCEDURE_OPERATIONS %%%> - end; - - // <%%% END SERVICES %%%> - // <%%% START EVENT_SINKS %%%> - { I%EVENT_SINK_NAME% } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - I%EVENT_SINK_NAME% = interface%EVENT_SINK_ANCESTOR_NAME% - ['%EVENT_SINK_UID%'] - // <%%% START OPERATIONS %%%> - procedure %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); - // <%%% END OPERATIONS %%%> - end; - - { I%EVENT_SINK_NAME%_Writer } - // <%%% START DOCUMENTATION %%%> - - { Description: - %CONTENT% } - // <%%% END DOCUMENTATION %%%> - I%EVENT_SINK_NAME%_Writer = interface(I%EVENT_SINK_WRITER_ANCESTOR_NAME%) - ['%EVENT_SINK_UID%'] - // <%%% START OPERATIONS %%%> - procedure %OPERATION_NAME%(const __Sender : TGUID - // <%%% START PARAMS %%%> - ; %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE% - // <%%% END PARAMS %%%> - ); - // <%%% END OPERATIONS %%%> - end; - - // <%%% END EVENT_SINKS %%%> -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes, uROSerializer; - -// <%%% START EXCEPTIONS %%%> -{ %EXCEPTION_NAME% } -constructor %EXCEPTION_NAME%.Create(anExceptionMessage : string - // <%%% START ANCESTOR_FIELDS %%%> - ; a%FIELD_NAME%: %FIELD_TYPE% - // <%%% END ANCESTOR_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - ; a%FIELD_NAME%: %FIELD_TYPE% - // <%%% END FIELDS_NO_STRIP %%%> - ); -begin - inherited Create(anExceptionMessage - // <%%% START ANCESTOR_FIELDS %%%> - , a%FIELD_NAME% - // <%%% END ANCESTOR_FIELDS %%%> - ); - - // <%%% START FIELDS_NO_STRIP %%%> - f%FIELD_NAME% := a%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> -end; - -// <%%% START IF_HAS_FIELDS %%%> -procedure %EXCEPTION_NAME%.ReadException(ASerializer: TObject); -var - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited; - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).ReadBinary('%FIELD_NAME%', l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).ReadDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).ReadDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).ReadGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).ReadInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).ReadInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).ReadVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).ReadWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).ReadXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).ReadArray('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).ReadStruct('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% := l_%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> - end else begin - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).ReadBinary('%FIELD_NAME%', l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).ReadDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).ReadDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).ReadGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).ReadInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).ReadInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).ReadVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).ReadWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).ReadXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).ReadArray('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).ReadStruct('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% := l_%FIELD_NAME%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - end; -end; - -procedure %EXCEPTION_NAME%.WriteException(ASerializer: TObject); -var - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited; - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).WriteBinary('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).WriteDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).WriteDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).WriteGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).WriteInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).WriteInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).WriteVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).WriteWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).WriteXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).WriteArray('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).WriteStruct('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END FIELDS_NO_STRIP %%%> - end else begin - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).WriteBinary('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).WriteDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).WriteDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).WriteGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).WriteInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).WriteInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).WriteVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).WriteWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).WriteXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).WriteArray('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).WriteStruct('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - end; -end; - -// <%%% END IF_HAS_FIELDS %%%> -// <%%% END EXCEPTIONS %%%> -// <%%% START ARRAYS %%%> -{ %ARRAY_NAME% } - -procedure %ARRAY_NAME%.Assign(iSource: TPersistent); -var lSource:%ARRAY_NAME%; - i:integer; -begin - if (iSource is %ARRAY_NAME%) then begin - lSource := %ARRAY_NAME%(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - if Assigned(lSource.Items[i]) then begin - Items[i].Assign(lSource.Items[i]); - end; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - Items[i] := lSource.Items[i]; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function %ARRAY_NAME%.GetItemType: PTypeInfo; -begin - result := TypeInfo(%ARRAY_TYPE%); -end; - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -class function %ARRAY_NAME%.GetItemClass: TClass; -begin - result := %ARRAY_TYPE%; -end; - -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -class function %ARRAY_NAME%.GetItemSize: integer; -begin - result := SizeOf(%ARRAY_TYPE%); -end; - -function %ARRAY_NAME%.GetItems(aIndex: integer): %ARRAY_TYPE%; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - result := fItems[aIndex]; -end; - -function %ARRAY_NAME%.GetItemRef(aIndex: integer): pointer; -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - result := fItems[aIndex]; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - // <%%% START IF_ARRAY_TYPE_SIMPLE %%%> - result := @fItems[aIndex]; - // <%%% END IF_ARRAY_TYPE_SIMPLE %%%> -end; - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -procedure %ARRAY_NAME%.SetItemRef(aIndex: integer; Ref: pointer); -begin - if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if Ref <> fItems[aIndex] then begin - if fItems[aIndex] <> nil then fItems[aIndex].Free; - fItems[aIndex] := Ref; - end; -end; - -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -procedure %ARRAY_NAME%.Clear; -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -var i: integer; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -begin - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - for i := 0 to (Count-1) do fItems[i].Free(); - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - SetLength(fItems, 0); - FCount := 0; -end; - -procedure %ARRAY_NAME%.Delete(aIndex: integer); -var i: integer; -begin - if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]); - - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - fItems[aIndex].Free(); - - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - if (aIndex= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]); - if fItems[aIndex] <> Value then begin - // <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - fItems[aIndex].Free; - // <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - fItems[aIndex] := Value; - end; -end; - -procedure %ARRAY_NAME%.Resize(ElementCount: integer); -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -var i: Integer; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -begin - if fCount = ElementCount then Exit; -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - for i := FCount -1 downto ElementCount do - FItems[i].Free; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - SetLength(fItems, ElementCount); -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> - for i := FCount to ElementCount -1 do - FItems[i] := %ARRAY_TYPE%.Create; -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> - FCount := ElementCount; -end; - -function %ARRAY_NAME%.GetCount: integer; -begin - result := FCount; -end; - -procedure %ARRAY_NAME%.Grow; -var - Delta, Capacity: Integer; -begin - Capacity := Length(fItems); - if Capacity > 64 then - Delta := Capacity div 4 - else - if Capacity > 8 then - Delta := 16 - else - Delta := 4; - SetLength(fItems, Capacity + Delta); -end; - -// <%%% START IF_ARRAY_TYPE_COMPLEX %%%> -function %ARRAY_NAME%.Add: %ARRAY_TYPE%; -begin - result := %ARRAY_TYPE%.Create; - Add(Result); -end; - -// <%%% END IF_ARRAY_TYPE_COMPLEX %%%> -function %ARRAY_NAME%.Add(const Value:%ARRAY_TYPE%): integer; -begin - Result := Count; - if Length(fItems) = Result then - Grow; - fItems[result] := Value; - Inc(fCount); -end; - -procedure %ARRAY_NAME%.ReadComplex(ASerializer: TObject); -var - lval: %ARRAY_TYPE%; - i: integer; -begin - for i := 0 to Count-1 do begin - with TROSerializer(ASerializer) do - // <%%% START IF_ARRAY_BINARY_TYPE %%%> - ReadBinary(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_BINARY_TYPE %%%> - // <%%% START IF_ARRAY_BOOLEAN_TYPE %%%> - ReadEnumerated(GetArrayElementName(GetItemType, GetItemRef(i)), TypeInfo(Boolean), lval, i); - // <%%% END IF_ARRAY_BOOLEAN_TYPE %%%> - // <%%% START IF_ARRAY_CURRENCY_TYPE %%%> - ReadDouble(GetArrayElementName(GetItemType, GetItemRef(i)), ftCurr, lval, i); - // <%%% END IF_ARRAY_CURRENCY_TYPE %%%> - // <%%% START IF_ARRAY_DATETIME_TYPE %%%> - ReadDateTime(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_DATETIME_TYPE %%%> - // <%%% START IF_ARRAY_DECIMAL_TYPE %%%> - ReadDecimal(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_DECIMAL_TYPE %%%> - // <%%% START IF_ARRAY_DOUBLE_TYPE %%%> - ReadDouble(GetArrayElementName(GetItemType, GetItemRef(i)), ftDouble, lval, i); - // <%%% END IF_ARRAY_DOUBLE_TYPE %%%> - // <%%% START IF_ARRAY_GUID_TYPE %%%> - ReadGuid(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_GUID_TYPE %%%> - // <%%% START IF_ARRAY_INT64_TYPE %%%> - ReadInt64(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_INT64_TYPE %%%> - // <%%% START IF_ARRAY_INTEGER_TYPE %%%> - ReadInteger(GetArrayElementName(GetItemType, GetItemRef(i)), otSLong, lval, i); - // <%%% END IF_ARRAY_INTEGER_TYPE %%%> - // <%%% START IF_ARRAY_STRING_TYPE %%%> - ReadUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_STRING_TYPE %%%> - // <%%% START IF_ARRAY_UTF8STRING_TYPE %%%> - ReadUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_UTF8STRING_TYPE %%%> - // <%%% START IF_ARRAY_VARIANT_TYPE %%%> - ReadVariant(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_VARIANT_TYPE %%%> - // <%%% START IF_ARRAY_WIDESTRING_TYPE %%%> - ReadWideString(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_WIDESTRING_TYPE %%%> - // <%%% START IF_ARRAY_XML_TYPE %%%> - ReadXml(GetArrayElementName(GetItemType, GetItemRef(i)), lval, i); - // <%%% END IF_ARRAY_XML_TYPE %%%> - // <%%% START IF_ARRAY_ARRAY_TYPE %%%> - ReadArray(GetArrayElementName(GetItemType, GetItemRef(i)), %ARRAY_TYPE%, lval, i); - // <%%% END IF_ARRAY_ARRAY_TYPE %%%> - // <%%% START IF_ARRAY_ENUM_TYPE %%%> - ReadEnumerated(GetArrayElementName(GetItemType, GetItemRef(i)), TypeInfo(%FIELD_TYPE%), lval, i); - // <%%% END IF_ARRAY_ENUM_TYPE %%%> - // <%%% START IF_ARRAY_STRUCT_TYPE %%%> - ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), %ARRAY_TYPE%, lval, i); - // <%%% END IF_ARRAY_STRUCT_TYPE %%%> - Items[i] := lval; - end; -end; - -procedure %ARRAY_NAME%.WriteComplex(ASerializer: TObject); -var - i: integer; -begin - for i := 0 to Count-1 do - with TROSerializer(ASerializer) do - // <%%% START IF_ARRAY_BINARY_TYPE %%%> - WriteBinary(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_BINARY_TYPE %%%> - // <%%% START IF_ARRAY_BOOLEAN_TYPE %%%> - WriteEnumerated(GetArrayElementName(GetItemType, GetItemRef(i)), TypeInfo(Boolean), fItems[i], i); - // <%%% END IF_ARRAY_BOOLEAN_TYPE %%%> - // <%%% START IF_ARRAY_CURRENCY_TYPE %%%> - WriteDouble(GetArrayElementName(GetItemType, GetItemRef(i)), ftCurr, fItems[i], i); - // <%%% END IF_ARRAY_CURRENCY_TYPE %%%> - // <%%% START IF_ARRAY_DATETIME_TYPE %%%> - WriteDateTime(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_DATETIME_TYPE %%%> - // <%%% START IF_ARRAY_DECIMAL_TYPE %%%> - WriteDecimal(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_DECIMAL_TYPE %%%> - // <%%% START IF_ARRAY_DOUBLE_TYPE %%%> - WriteDouble(GetArrayElementName(GetItemType, GetItemRef(i)), ftDouble, fItems[i], i); - // <%%% END IF_ARRAY_DOUBLE_TYPE %%%> - // <%%% START IF_ARRAY_GUID_TYPE %%%> - WriteGuid(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_GUID_TYPE %%%> - // <%%% START IF_ARRAY_INT64_TYPE %%%> - WriteInt64(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_INT64_TYPE %%%> - // <%%% START IF_ARRAY_INTEGER_TYPE %%%> - WriteInteger(GetArrayElementName(GetItemType, GetItemRef(i)), otSLong, fItems[i], i); - // <%%% END IF_ARRAY_INTEGER_TYPE %%%> - // <%%% START IF_ARRAY_STRING_TYPE %%%> - WriteUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_STRING_TYPE %%%> - // <%%% START IF_ARRAY_UTF8STRING_TYPE %%%> - WriteUTF8String(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_UTF8STRING_TYPE %%%> - // <%%% START IF_ARRAY_VARIANT_TYPE %%%> - WriteVariant(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_VARIANT_TYPE %%%> - // <%%% START IF_ARRAY_WIDESTRING_TYPE %%%> - WriteWideString(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_WIDESTRING_TYPE %%%> - // <%%% START IF_ARRAY_XML_TYPE %%%> - WriteXml(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_XML_TYPE %%%> - // <%%% START IF_ARRAY_ARRAY_TYPE %%%> - WriteArray(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_ARRAY_TYPE %%%> - // <%%% START IF_ARRAY_ENUM_TYPE %%%> - WriteEnumerated(GetArrayElementName(GetItemType, GetItemRef(i)), TypeInfo(%ARRAY_TYPE%), fItems[i], i); - // <%%% END IF_ARRAY_ENUM_TYPE %%%> - // <%%% START IF_ARRAY_STRUCT_TYPE %%%> - WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], i); - // <%%% END IF_ARRAY_STRUCT_TYPE %%%> -end; - -// <%%% END ARRAYS %%%> -// <%%% START STRUCTS %%%> -{ %STRUCT_NAME% } - -procedure %STRUCT_NAME%.Assign(iSource: TPersistent); -// <%%% START IF_HAS_FIELDS %%%> -var - lSource: %STRUCT_NAME%; -// <%%% END IF_HAS_FIELDS %%%> -begin - inherited Assign(iSource); - // <%%% START IF_HAS_FIELDS %%%> - if (iSource is %STRUCT_NAME%) then begin - lSource := %STRUCT_NAME%(iSource); - - // <%%% END IF_HAS_FIELDS %%%> - // <%%% START FIELDS_NO_STRIP %%%> - // <%%% START IF_FIELD_TYPE_SIMPLE %%%> - %FIELD_NAME% := lSource.%FIELD_NAME%; - // <%%% END IF_FIELD_TYPE_SIMPLE %%%> - // <%%% START IF_FIELD_TYPE_COMPLEX %%%> - // <%%% START IF_NOT_AUTO_CREATE_FIELDS %%%> - if Assigned(f%FIELD_NAME%) then - %FIELD_NAME%.Assign(lSource.%FIELD_NAME%); - // <%%% END IF_NOT_AUTO_CREATE_FIELDS %%%> - // <%%% START IF_AUTO_CREATE_FIELDS %%%> - %FIELD_NAME%.Assign(lSource.%FIELD_NAME%); - // <%%% END IF_AUTO_CREATE_FIELDS %%%> - // <%%% END IF_FIELD_TYPE_COMPLEX %%%> - // <%%% END FIELDS_NO_STRIP %%%> - // <%%% START IF_HAS_FIELDS %%%> - end; - // <%%% END IF_HAS_FIELDS %%%> -end; - -destructor %STRUCT_NAME%.Destroy; -begin - FDestroying := True; - try - inherited Destroy; - finally - FDestroying := False; - end; -end; - -// <%%% START FIELDS_NO_STRIP %%%> -// <%%% START IF_FIELD_TYPE_COMPLEX %%%> -function %STRUCT_NAME%.Get%FIELD_NAME%: %FIELD_TYPE%; -begin - // <%%% START IF_AUTO_CREATE_FIELDS %%%> - if not Assigned(f%FIELD_NAME%) and not FDestroying then - f%FIELD_NAME% := %FIELD_TYPE%.Create(); - // <%%% END IF_AUTO_CREATE_FIELDS %%%> - Result := f%FIELD_NAME%; -end; -// <%%% END IF_FIELD_TYPE_COMPLEX %%%> -// <%%% END FIELDS_NO_STRIP %%%> - -// <%%% START IF_HAS_FIELDS %%%> -procedure %STRUCT_NAME%.ReadComplex(ASerializer: TObject); -var - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited; - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).ReadBinary('%FIELD_NAME%', l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).ReadDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).ReadDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).ReadGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).ReadInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).ReadInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).ReadVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).ReadWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).ReadXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).ReadArray('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).ReadStruct('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% := l_%FIELD_NAME%; - // <%%% END FIELDS_NO_STRIP %%%> - end else begin - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).ReadBinary('%FIELD_NAME%', l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).ReadDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).ReadDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).ReadDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).ReadGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).ReadInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).ReadInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).ReadUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).ReadVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).ReadWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).ReadXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).ReadArray('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).ReadEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).ReadStruct('%FIELD_NAME%', %FIELD_TYPE%, l_%FIELD_NAME%); - if %FIELD_NAME% <> l_%FIELD_NAME% then %FIELD_NAME%.Free; - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - %FIELD_NAME% := l_%FIELD_NAME%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - end; -end; - -procedure %STRUCT_NAME%.WriteComplex(ASerializer: TObject); -var - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME%: %FIELD_TYPE%; - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> -begin - if TROSerializer(ASerializer).RecordStrictOrder then begin - // <%%% START IF_STRUCT_HAS_ANCESTOR %%%> - inherited; - // <%%% END IF_STRUCT_HAS_ANCESTOR %%%> - // <%%% START FIELDS_NO_STRIP %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).WriteBinary('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).WriteDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).WriteDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).WriteGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).WriteInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).WriteInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).WriteVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).WriteWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).WriteXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).WriteArray('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).WriteStruct('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END FIELDS_NO_STRIP %%%> - end else begin - // <%%% START ENTIRE_HIERARCHY_FIELDS %%%> - l_%FIELD_NAME% := %FIELD_NAME%; - // <%%% START IF_FIELD_BINARY_TYPE %%%> - TROSerializer(ASerializer).WriteBinary('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_BINARY_TYPE %%%> - // <%%% START IF_FIELD_BOOLEAN_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(Boolean), l_%FIELD_NAME%); - // <%%% END IF_FIELD_BOOLEAN_TYPE %%%> - // <%%% START IF_FIELD_CURRENCY_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftCurr, l_%FIELD_NAME%); - // <%%% END IF_FIELD_CURRENCY_TYPE %%%> - // <%%% START IF_FIELD_DATETIME_TYPE %%%> - TROSerializer(ASerializer).WriteDateTime('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DATETIME_TYPE %%%> - // <%%% START IF_FIELD_DECIMAL_TYPE %%%> - TROSerializer(ASerializer).WriteDecimal('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_DECIMAL_TYPE %%%> - // <%%% START IF_FIELD_DOUBLE_TYPE %%%> - TROSerializer(ASerializer).WriteDouble('%FIELD_NAME%', ftDouble, l_%FIELD_NAME%); - // <%%% END IF_FIELD_DOUBLE_TYPE %%%> - // <%%% START IF_FIELD_GUID_TYPE %%%> - TROSerializer(ASerializer).WriteGuid('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_GUID_TYPE %%%> - // <%%% START IF_FIELD_INT64_TYPE %%%> - TROSerializer(ASerializer).WriteInt64('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_INT64_TYPE %%%> - // <%%% START IF_FIELD_INTEGER_TYPE %%%> - TROSerializer(ASerializer).WriteInteger('%FIELD_NAME%', otSLong, l_%FIELD_NAME%); - // <%%% END IF_FIELD_INTEGER_TYPE %%%> - // <%%% START IF_FIELD_STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRING_TYPE %%%> - // <%%% START IF_FIELD_UTF8STRING_TYPE %%%> - TROSerializer(ASerializer).WriteUTF8String('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_UTF8STRING_TYPE %%%> - // <%%% START IF_FIELD_VARIANT_TYPE %%%> - TROSerializer(ASerializer).WriteVariant('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_VARIANT_TYPE %%%> - // <%%% START IF_FIELD_WIDESTRING_TYPE %%%> - TROSerializer(ASerializer).WriteWideString('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_WIDESTRING_TYPE %%%> - // <%%% START IF_FIELD_XML_TYPE %%%> - TROSerializer(ASerializer).WriteXml('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_XML_TYPE %%%> - // <%%% START IF_FIELD_ARRAY_TYPE %%%> - TROSerializer(ASerializer).WriteArray('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_ARRAY_TYPE %%%> - // <%%% START IF_FIELD_ENUM_TYPE %%%> - TROSerializer(ASerializer).WriteEnumerated('%FIELD_NAME%', TypeInfo(%FIELD_TYPE%), l_%FIELD_NAME%); - // <%%% END IF_FIELD_ENUM_TYPE %%%> - // <%%% START IF_FIELD_STRUCT_TYPE %%%> - TROSerializer(ASerializer).WriteStruct('%FIELD_NAME%', l_%FIELD_NAME%); - // <%%% END IF_FIELD_STRUCT_TYPE %%%> - // <%%% END ENTIRE_HIERARCHY_FIELDS %%%> - end; -end; - -// <%%% END IF_HAS_FIELDS %%%> -{ %STRUCT_COLLECTION_NAME% } -constructor %STRUCT_COLLECTION_NAME%.Create; -begin - inherited Create(%STRUCT_NAME%); -end; - -constructor %STRUCT_COLLECTION_NAME%.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function %STRUCT_COLLECTION_NAME%.Add: %STRUCT_NAME%; -begin - result := %STRUCT_NAME%(inherited Add); -end; - -function %STRUCT_COLLECTION_NAME%.GetItems(aIndex: integer): %STRUCT_NAME%; -begin - result := %STRUCT_NAME%(inherited Items[aIndex]); -end; - -// <%%% START ARRAYS_IS_FOUND %%%> -procedure %STRUCT_COLLECTION_NAME%.LoadFromArray(anArray: %ARRAY_NAME%); -var - i : integer; -begin - Clear; - for i := 0 to (anArray.Count-1) do - Add.Assign(anArray[i]); -end; - -procedure %STRUCT_COLLECTION_NAME%.SaveToArray(anArray: %ARRAY_NAME%); -var - i : integer; -begin - anArray.Clear; - anArray.Resize(Count); - for i := 0 to (Count-1) do begin - anArray[i] := %STRUCT_NAME%.Create; - anArray[i].Assign(Items[i]); - end; -end; - -// <%%% END ARRAYS_IS_FOUND %%%> - -procedure %STRUCT_COLLECTION_NAME%.SetItems(aIndex: integer; const Value: %STRUCT_NAME%); -begin - %STRUCT_NAME%(inherited Items[aIndex]).Assign(Value); -end; - -// <%%% END STRUCTS %%%> -// <%%% START SERVICES %%%> -{ Co%SERVICE_NAME% } - -class function Co%SERVICE_NAME%.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): I%SERVICE_NAME%; -begin - result := T%SERVICE_NAME%_Proxy.Create(aMessage, aTransportChannel); -end; - -{ T%SERVICE_NAME%_Proxy } - -function T%SERVICE_NAME%_Proxy.__GetInterfaceName:string; -begin - result := '%SERVICE_NAME%'; -end; - -// <%%% START FUNCTION_OPERATIONS %%%> -function T%SERVICE_NAME%_Proxy.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; -begin - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - Result := nil; - // <%%% END IF_RESULT_COMPLEX %%%> - try - __Message.InitializeRequestMessage(__TransportChannel, '%LIBRARY_NAME%', __InterfaceName, '%OPERATION_NAME%'); - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - __Message.Read('Result', TypeInfo(%OPERATION_RESULT%), result, [%OPERATION_RESULT_ATTRIBUTE%]); - finally - __Message.FreeStream; - end -end; - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -procedure T%SERVICE_NAME%_Proxy.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); -begin - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - try - __Message.InitializeRequestMessage(__TransportChannel, '%LIBRARY_NAME%', __InterfaceName, '%OPERATION_NAME%'); - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - finally - __Message.FreeStream; - end -end; - -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> -// <%%% START EVENT_SINKS %%%> -type - { T%EVENT_SINK_NAME%_Writer } - T%EVENT_SINK_NAME%_Writer = class(T%EVENT_SINK_WRITER_ANCESTOR_NAME%, I%EVENT_SINK_NAME%_Writer) - protected - // <%%% START OPERATIONS %%%> - procedure %OPERATION_NAME%(const __Sender : TGUID - // <%%% START PARAMS %%%> - ; %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE% - // <%%% END PARAMS %%%> - ); - // <%%% END OPERATIONS %%%> - end; - -// <%%% START OPERATIONS %%%> -procedure T%EVENT_SINK_NAME%_Writer.%OPERATION_NAME%(const __Sender : TGUID - // <%%% START PARAMS %%%> - ; %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE% - // <%%% END PARAMS %%%> - ); -var __eventdata : Binary; -begin - __eventdata := Binary.Create; - try - __Message.InitializeEventMessage(NIL, '%LIBRARY_NAME%', EID_%EVENT_SINK_NAME%, '%OPERATION_NAME%'); - // <%%% START PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END PARAMS_NO_STRIP %%%> - __Message.Finalize; - - __Message.WriteToStream(__eventdata); - - Repository.StoreEventData(__Sender, __eventdata, ExcludeSender, ExcludeSessionList, SessionList.CommaText); - finally - __eventdata.Free; - end; -end; - -// <%%% END OPERATIONS %%%> -type - {$M+} - { T%EVENT_SINK_NAME%_Invoker } - T%EVENT_SINK_NAME%_Invoker = class(T%EVENT_SINK_INVOKER_ANCESTOR_NAME%) - published - // <%%% START OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%(__EventReceiver : TROEventReceiver; const __Message : IROMessage; const __Target : IUnknown); - // <%%% END OPERATIONS %%%> - end; - {$M-} - -// <%%% START OPERATIONS %%%> -procedure T%EVENT_SINK_NAME%_Invoker.Invoke_%OPERATION_NAME%(__EventReceiver : TROEventReceiver; const __Message : IROMessage; const __Target : IUnknown); -var - // <%%% START PARAMS_NO_STRIP %%%> - %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer: TROObjectDisposer; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - __%EVENT_SINK_NAME%Instance: I%EVENT_SINK_NAME%; -begin - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - try - // <%%% START PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END PARAMS_NO_STRIP %%%> - - __%EVENT_SINK_NAME%Instance := (__Target as I%EVENT_SINK_NAME%); - __%EVENT_SINK_NAME%Instance.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - finally - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer := TROObjectDisposer.Create(__EventReceiver); - try - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer.Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - finally - __lObjectDisposer.Free(); - end; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - end -end; - -// <%%% END OPERATIONS %%%> -// <%%% END EVENT_SINKS %%%> -initialization - // <%%% START STRUCTS %%%> - RegisterROClass(%STRUCT_NAME%); - // <%%% END STRUCTS %%%> - // <%%% START ARRAYS %%%> - RegisterROClass(%ARRAY_NAME%); - // <%%% END ARRAYS %%%> - // <%%% START EXCEPTIONS %%%> - RegisterExceptionClass(%EXCEPTION_NAME%); - // <%%% END EXCEPTIONS %%%> - // <%%% START SERVICES %%%> - RegisterProxyClass(I%SERVICE_NAME%_IID, T%SERVICE_NAME%_Proxy); - // <%%% END SERVICES %%%> - // <%%% START EVENT_SINKS %%%> - RegisterEventWriterClass(I%EVENT_SINK_NAME%_Writer, T%EVENT_SINK_NAME%_Writer); - RegisterEventInvokerClass(EID_%EVENT_SINK_NAME%, T%EVENT_SINK_NAME%_Invoker); - // <%%% END EVENT_SINKS %%%> - -finalization - // <%%% START STRUCTS %%%> - UnregisterROClass(%STRUCT_NAME%); - // <%%% END STRUCTS %%%> - // <%%% START ARRAYS %%%> - UnregisterROClass(%ARRAY_NAME%); - // <%%% END ARRAYS %%%> - // <%%% START EXCEPTIONS %%%> - UnregisterExceptionClass(%EXCEPTION_NAME%); - // <%%% END EXCEPTIONS %%%> - // <%%% START SERVICES %%%> - UnregisterProxyClass(I%SERVICE_NAME%_IID); - // <%%% END SERVICES %%%> - // <%%% START EVENT_SINKS %%%> - UnregisterEventWriterClass(I%EVENT_SINK_NAME%_Writer); - UnregisterEventInvokerClass(EID_%EVENT_SINK_NAME%); - // <%%% END EVENT_SINKS %%%> - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.cpp b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.cpp deleted file mode 100644 index fde9666..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.cpp +++ /dev/null @@ -1,214 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -// RemObjects: -#include -#include - -// Interface of %LIBRARY_NAME% -#include "%LIBRARY_NAME%_intf.h" - -// Implementation of %LIBRARY_NAME% -#include "%LIBRARY_NAME%_invk.h" - -// <%%% START SERVICES %%%> -// T%SERVICE_NAME%_Invoker - -// <%%% START FUNCTION_OPERATIONS %%%> -void __fastcall T%SERVICE_NAME%_Invoker::Invoke_%OPERATION_NAME%( - const System::_di_IInterface __Instance, - const Uroclientintf::_di_IROMessage __Message, - const Uroclientintf::_di_IROTransport __Transport, - /* out */ Uroserverintf::TROResponseOptions& __oResponseOptions) -{ -// <%%% START IF_RESULT_SIMPLE %%%> -// virtual %OPERATION_RESULT% __fastcall %OPERATION_NAME%( -// <%%% END IF_RESULT_SIMPLE %%%> -// <%%% START IF_RESULT_COMPLEX %%%> -// virtual %OPERATION_RESULT%* __fastcall %OPERATION_NAME%( -// <%%% END IF_RESULT_COMPLEX %%%> -// <%%% START PARAMS %%%> -// <%%% START IF_PARAM_TYPE_SIMPLE %%%> -// %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, -// <%%% END IF_PARAM_TYPE_SIMPLE %%%> -// <%%% START IF_PARAM_TYPE_COMPLEX %%%> -// %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, -// <%%% END IF_PARAM_TYPE_COMPLEX %%%> -// <%%% END PARAMS %%%> -// ); - - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_TYPE% %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_TYPE%* %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - %OPERATION_RESULT% lResult; - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - %OPERATION_RESULT%* lResult; - // <%%% END IF_RESULT_COMPLEX %%%> - try - { - _di_I%SERVICE_NAME% __%SERVICE_NAME%Instance; - if (__Instance->Supports(__%SERVICE_NAME%Instance)) - { - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - - lResult = __%SERVICE_NAME%Instance->%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - __Message->InitializeResponseMessage(__Transport, "%LIBRARY_NAME%", "%SERVICE_NAME%", "%OPERATION_NAME%Response"); - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_SIMPLE %%%> - __Message->Write("Result", __Get%OPERATION_RESULT%Info, &lResult, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_SIMPLE %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - __Message->Write("Result", __typeinfo(%OPERATION_RESULT%), lResult, TParamAttributes(%OPERATION_RESULT_ATTRIBUTE%)); - // <%%% END IF_RESULT_COMPLEX %%%> - __Message->Finalize(); - } - else - { - throw new EIntfCastError("Critical error in Invoker: Instance does not support I%SERVICE_NAME% interface"); - } - } - __finally - { - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - TROObjectDisposer* __lObjectDisposer = new TROObjectDisposer(__Instance); - try - { - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer->Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - __lObjectDisposer->Add(lResult); - // <%%% END IF_RESULT_COMPLEX %%%> - } - __finally - { - delete __lObjectDisposer; - } - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - } -} - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -void __fastcall T%SERVICE_NAME%_Invoker::Invoke_%OPERATION_NAME%( - const System::_di_IInterface __Instance, - const Uroclientintf::_di_IROMessage __Message, - const Uroclientintf::_di_IROTransport __Transport, - /* out */ Uroserverintf::TROResponseOptions& __oResponseOptions) -{ -// virtual void __fastcall %OPERATION_NAME%( -// <%%% START PARAMS %%%> -// <%%% START IF_PARAM_TYPE_SIMPLE %%%> -// %PARAM_FRONT_MODIFIER% %PARAM_TYPE% %PARAM_BACK_MODIFIER% %PARAM_NAME%, -// <%%% END IF_PARAM_TYPE_SIMPLE %%%> -// <%%% START IF_PARAM_TYPE_COMPLEX %%%> -// %PARAM_FRONT_MODIFIER% %PARAM_TYPE%* %PARAM_BACK_MODIFIER% %PARAM_NAME%, -// <%%% END IF_PARAM_TYPE_COMPLEX %%%> -// <%%% END PARAMS %%%> -// ); - - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - %PARAM_TYPE% %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_TYPE%* %PARAM_NAME%; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - try - { - _di_I%SERVICE_NAME% __%SERVICE_NAME%Instance; - if (__Instance->Supports(__%SERVICE_NAME%Instance)) - { - // <%%% START IN_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Read("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Read("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __%SERVICE_NAME%Instance->%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - __Message->InitializeResponseMessage(__Transport, "%LIBRARY_NAME%", "%SERVICE_NAME%", "%OPERATION_NAME%Response"); - // <%%% START OUT_PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_SIMPLE %%%> - __Message->Write("%PARAM_NAME%", __Get%PARAM_TYPE%Info, &%PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_SIMPLE %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __Message->Write("%PARAM_NAME%", __typeinfo(%PARAM_TYPE%), %PARAM_NAME%, TParamAttributes(%PARAM_ATTRIBUTE%)); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END OUT_PARAMS_NO_STRIP %%%> - __Message->Finalize(); - // <%%% START IF_NO_OUT_PARAMS %%%> - - __oResponseOptions = TROResponseOptions() << roNoResponse; - // <%%% END IF_NO_OUT_PARAMS %%%> - } - else - { - throw new EIntfCastError("Critical error in Invoker: Instance does not support %SERVICE_NAME% interface"); - } - } - __finally - { - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - TROObjectDisposer* __lObjectDisposer = new TROObjectDisposer(__Instance); - try - { - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer->Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - } - __finally - { - delete __lObjectDisposer; - } - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - } -} -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.h deleted file mode 100644 index 00fc5a6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.h +++ /dev/null @@ -1,73 +0,0 @@ -// %UNIT_NAME% -// -/*---------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project. } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{---------------------------------------------------------------------------*/ - -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -#pragma delphiheader begin -#pragma option push -#pragma option -w- // All warnings off -#pragma option -Vx // Zero-length empty class member functions -#pragma pack(push,8) - -#include // Pascal unit -#include // Pascal unit -// <%%% START REQUIRED_UNITS %%%> -#include <%REQUIRED_UNIT_NAME%.hpp> -// <%%% END REQUIRED_UNITS %%%> - -#include "%LIBRARY_NAME%_intf.h" - -namespace %NAMESPACE_NAME% -{ -//-- type declarations ------------------------------------------------------- -typedef Classes::TSeekOrigin TSeekOrigin; // Fake declaration - -// <%%% START SERVICES %%%> -class DELPHICLASS T%SERVICE_NAME%_Invoker : public TROInvoker -{ - typedef Uroserver::TROInvoker inherited; - - __published: - // <%%% START FUNCTION_OPERATIONS %%%> - void __fastcall Invoke_%OPERATION_NAME%( - const System::_di_IInterface __Instance, - const Uroclientintf::_di_IROMessage __Message, - const Uroclientintf::_di_IROTransport __Transport, - /* out */ Uroserverintf::TROResponseOptions& __oResponseOptions); - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - void __fastcall Invoke_%OPERATION_NAME%( - const System::_di_IInterface __Instance, - const Uroclientintf::_di_IROMessage __Message, - const Uroclientintf::_di_IROTransport __Transport, - /* out */ Uroserverintf::TROResponseOptions& __oResponseOptions); - // <%%% END PROCEDURE_OPERATIONS %%%> - public: - #pragma option push -w-inl - /* TROInvoker.Create */ inline __fastcall virtual T%SERVICE_NAME%_Invoker(): Uroserver::TROInvoker() {} - #pragma option pop - #pragma option push -w-inl - /* TROInvoker.Destroy */ inline __fastcall virtual ~T%SERVICE_NAME%_Invoker() {} - #pragma option pop - - protected: - private: -}; -// <%%% END SERVICES %%%> - -} // namespace %NAMESPACE_NAME% -using namespace %NAMESPACE_NAME%; -#pragma pack(pop) -#pragma option pop -#pragma delphiheader end. -//-- end H ---------------------------------------------------------------- -#endif // %UNIT_NAME%_H - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.pas deleted file mode 100644 index a39227b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.invk.pas +++ /dev/null @@ -1,174 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I Remobjects.inc} - -interface - -uses - // <%%% START REQUIRED_UNITS %%%> - %REQUIRED_UNIT_NAME%, - // <%%% END REQUIRED_UNITS %%%> - {vcl:} Classes, - {RemObjects:} uROXMLIntf, uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Generated:} %LIBRARY_NAME%_Intf; - -type - TSeekOrigin = Classes.TSeekOrigin; // fake declaration - - // <%%% START SERVICES %%%> - {$M+} - T%SERVICE_NAME%_Invoker = class(T%SERVICE_INVOKER_ANCESTOR_NAME%) - private - protected - published - // <%%% START FUNCTION_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - // <%%% END FUNCTION_OPERATIONS %%%> - // <%%% START PROCEDURE_OPERATIONS %%%> - procedure Invoke_%OPERATION_NAME%(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - // <%%% END PROCEDURE_OPERATIONS %%%> - end; - {$M-} - - // <%%% END SERVICES %%%> -implementation - -uses - {RemObjects:} uRORes, uROClient; - -// <%%% START SERVICES %%%> -{ T%SERVICE_NAME%_Invoker } - -// <%%% START FUNCTION_OPERATIONS %%%> -procedure T%SERVICE_NAME%_Invoker.Invoke_%OPERATION_NAME%(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ): %OPERATION_RESULT%; } -var - // <%%% START PARAMS_NO_STRIP %%%> - %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS_NO_STRIP %%%> - lResult: %OPERATION_RESULT%; - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer: TROObjectDisposer; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - __%SERVICE_NAME%Instance: I%SERVICE_NAME%; -begin - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - try - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __%SERVICE_NAME%Instance := __Instance as I%SERVICE_NAME%; - lResult := __%SERVICE_NAME%Instance.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - __Message.InitializeResponseMessage(__Transport, '%LIBRARY_NAME%', '%SERVICE_NAME%', '%OPERATION_NAME%Response'); - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - __Message.Write('Result', TypeInfo(%OPERATION_RESULT%), lResult, [%OPERATION_RESULT_ATTRIBUTE%]); - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - finally - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer.Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_RESULT_COMPLEX %%%> - __lObjectDisposer.Add(lResult); - // <%%% END IF_RESULT_COMPLEX %%%> - finally - __lObjectDisposer.Free(); - end; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - end; -end; - -// <%%% END FUNCTION_OPERATIONS %%%> -// <%%% START PROCEDURE_OPERATIONS %%%> -procedure T%SERVICE_NAME%_Invoker.Invoke_%OPERATION_NAME%(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure %OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_FRONT_MODIFIER% %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS %%%> - ); } -var - // <%%% START PARAMS_NO_STRIP %%%> - %PARAM_NAME%: %PARAM_TYPE%; - // <%%% END PARAMS_NO_STRIP %%%> - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer: TROObjectDisposer; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - __%SERVICE_NAME%Instance: I%SERVICE_NAME%; -begin - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - %PARAM_NAME% := nil; - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - try - // <%%% START IN_PARAMS_NO_STRIP %%%> - __Message.Read('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END IN_PARAMS_NO_STRIP %%%> - - __%SERVICE_NAME%Instance := __Instance as I%SERVICE_NAME%; - __%SERVICE_NAME%Instance.%OPERATION_NAME%( - // <%%% START PARAMS %%%> - %PARAM_NAME%, - // <%%% END PARAMS %%%> - ); - - __Message.InitializeResponseMessage(__Transport, '%LIBRARY_NAME%', '%SERVICE_NAME%', '%OPERATION_NAME%Response'); - // <%%% START OUT_PARAMS_NO_STRIP %%%> - __Message.Write('%PARAM_NAME%', TypeInfo(%PARAM_TYPE%), %PARAM_NAME%, [%PARAM_ATTRIBUTE%]); - // <%%% END OUT_PARAMS_NO_STRIP %%%> - __Message.Finalize; - __Message.UnsetAttributes(__Transport); - - // <%%% START IF_NO_OUT_PARAMS %%%> - __oResponseOptions := [roNoResponse]; - - // <%%% END IF_NO_OUT_PARAMS %%%> - finally - // <%%% START IF_HAS_COMPLEX_TYPE %%%> - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - // <%%% START PARAMS_NO_STRIP %%%> - // <%%% START IF_PARAM_TYPE_COMPLEX %%%> - __lObjectDisposer.Add(%PARAM_NAME%); - // <%%% END IF_PARAM_TYPE_COMPLEX %%%> - // <%%% END PARAMS_NO_STRIP %%%> - finally - __lObjectDisposer.Free(); - end; - // <%%% END IF_HAS_COMPLEX_TYPE %%%> - end; -end; - -// <%%% END PROCEDURE_OPERATIONS %%%> -// <%%% END SERVICES %%%> -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.h deleted file mode 100644 index cc1b1bb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.h +++ /dev/null @@ -1,15 +0,0 @@ -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -// <%%% START USES %%%> -#include "%USED_UNIT_NAME%.h" -// <%%% END USES %%%> - -#endif diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.pas deleted file mode 100644 index f8fdd7a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_async.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - // <%%% START USES %%%> - %USED_UNIT_NAME%, - // <%%% END USES %%%> - ; - -type - // <%%% START TYPES %%%> - %TYPE_NAME% = %TYPE_UNIT_NAME%.%TYPE_NAME%; - // <%%% END TYPES %%%> - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.h deleted file mode 100644 index cc1b1bb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.h +++ /dev/null @@ -1,15 +0,0 @@ -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -// <%%% START USES %%%> -#include "%USED_UNIT_NAME%.h" -// <%%% END USES %%%> - -#endif diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.pas deleted file mode 100644 index f8fdd7a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_intf.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - // <%%% START USES %%%> - %USED_UNIT_NAME%, - // <%%% END USES %%%> - ; - -type - // <%%% START TYPES %%%> - %TYPE_NAME% = %TYPE_UNIT_NAME%.%TYPE_NAME%; - // <%%% END TYPES %%%> - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.h b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.h deleted file mode 100644 index cc1b1bb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.h +++ /dev/null @@ -1,15 +0,0 @@ -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} -#ifndef %UNIT_NAME%_H -#define %UNIT_NAME%_H - -// <%%% START USES %%%> -#include "%USED_UNIT_NAME%.h" -// <%%% END USES %%%> - -#endif diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.pas deleted file mode 100644 index 57fa4a2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/Templates/template.wrapper_invk.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit %UNIT_NAME%; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - // <%%% START USES %%%> - %USED_UNIT_NAME%, - // <%%% END USES %%%> - ; - -type - // <%%% START TYPES %%%> - %TYPE_NAME%_Invoker = %TYPE_UNIT_NAME%.%TYPE_NAME%_Invoker; - // <%%% END TYPES %%%> - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLAsyncConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLAsyncConverter.pas deleted file mode 100644 index 3bb93de..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLAsyncConverter.pas +++ /dev/null @@ -1,92 +0,0 @@ -unit uRODLAsyncConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODL, uRODLTemplateBasedConverter, uRODLIntfConverter; - -type - TRODLAsyncConverter = class (TRODLIntfConverter) - protected - function GetServicesSectionClass: TServicesSectionClass; override; - end; - - -type - TAsyncServicesSection = class (TIntfServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - function GetProxyAncestorName(const aService: TRODLBaseService): string; override; - function GetProxySuffix: string; override; - - procedure DoReplacements(var curLine: string; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); override; - end; - -implementation - -uses - uROClasses, uRODLTemplateBasedConverterUtils; - -{ TRODLAsyncConverter } - -function TRODLAsyncConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TAsyncServicesSection; -end; - -{ TAsyncServicesSection } - -procedure TAsyncServicesSection.DoReplacements(var curLine: string; - const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -begin - inherited DoReplacements(curLine, aService, aLibrary); - - MacroReplace(curLine, '%', - ['ASYNC_SERVICE_UID', NewGuidAsString - ]); -end; - -function TAsyncServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - - if Length(Result) > 0 then - Result := Result + DEFAULT_ASYNC_SUFFIX - else - Result := DEFAULT_SERVICE_ASYNC_ANCESTOR_NAME; -end; - -function TAsyncServicesSection.GetProxyAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetProxyAncestorName(aService); - - if (Length(Result) = 0) or (Result = DEFAULT_SERVICE_PROXY_ANCESTOR_NAME) then - Result := DEFAULT_SERVICE_ASYNC_PROXY_ANCESTOR_NAME; -end; - -function TAsyncServicesSection.GetProxySuffix: string; -begin - Result := DEFAULT_ASYNC_PROXY_SUFFIX; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLConvertersUtils.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLConvertersUtils.pas deleted file mode 100644 index 54e3069..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLConvertersUtils.pas +++ /dev/null @@ -1,765 +0,0 @@ -unit uRODLConvertersUtils; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, uRODLImplConverter, uRODL; - -const - DEFAULT_DELPHI_INTF_TEMPLATE_FILENAME = 'template.intf.pas'; - DEFAULT_DELPHI_INVK_TEMPLATE_FILENAME = 'template.invk.pas'; - DEFAULT_DELPHI_IMPL_TEMPLATE_FILENAME = 'template.impl.pas'; - DEFAULT_DELPHI_ASYNC_TEMPLATE_FILENAME = 'template.async.pas'; - DEFAULT_DELPHI_INTF_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_intf.pas'; - DEFAULT_DELPHI_INVK_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_invk.pas'; - DEFAULT_DELPHI_ASYNC_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_async.pas'; - - DEFAULT_CPP_INTF_TEMPLATE_FILENAME = 'template.intf.cpp'; - DEFAULT_CPP_INVK_TEMPLATE_FILENAME = 'template.invk.cpp'; - DEFAULT_CPP_IMPL_TEMPLATE_FILENAME = 'template.impl.cpp'; - DEFAULT_CPP_ASYNC_TEMPLATE_FILENAME = 'template.async.cpp'; - DEFAULT_CPP_INTF_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_intf.h'; - DEFAULT_CPP_INVK_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_invk.h'; - DEFAULT_CPP_ASYNC_WRAPPER_TEMPLATE_FILENAME = 'template.wrapper_async.h'; - -{$IFDEF LINUX} - {$R Templates/Templates.res} -{$ELSE} - {$R Templates\Templates.res} -{$ENDIF LINUX} - -type - TROCodeGenLanguage = (cglDelphiWin32, cglCppWin32); - TROCodeGenType = (cgtIntf, cgtInvk, cgtImpl, cgtAsync, cgtRes); - - -// Delphi -procedure GenerateDelphiIntf(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiInvk(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiImpl(const LibraryFileName: string; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateDelphiAsync(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -procedure GenerateDelphiIntf(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiInvk(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiImpl(const aLibrary: TRODLLibrary; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateDelphiAsync(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -procedure GenerateDelphiIntf(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiInvk(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateDelphiImpl(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputDFMStream: TStream; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateDelphiAsync(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -// Cpp -procedure GenerateCppIntf(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppInvk(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppImpl(const LibraryFileName: string; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateCppAsync(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -procedure GenerateCppIntf(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppInvk(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppImpl(const aLibrary: TRODLLibrary; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateCppAsync(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -procedure GenerateCppIntf(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppInvk(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; -procedure GenerateCppImpl(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const OutputDFMStream: TStream; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); overload; -procedure GenerateCppAsync(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); overload; - -procedure GenerateUnitToStream(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aStream, aStream2: TStream; aAncestorName: string = ''; aUnitname: string=''); -procedure GenerateUnitToFile(aLibraryFileName: string; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aAncestorName: string = ''; aFilename: string=''); overload; -procedure GenerateUnitToFile(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aAncestorName: string = ''; aFilename: string=''); overload; -function GetTargetFileName(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage): string; - -implementation - -uses - SysUtils, uRODLToXML, - uRODLTemplateBasedConverterUtils, - uRODLDelphiConverters, uRODLCppConverters; - -// Delphi -procedure GenerateDelphiIntf(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateDelphiIntf(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateDelphiInvk(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateDelphiInvk(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateDelphiImpl(const LibraryFileName: string; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateDelphiImpl(lib, ServiceName, TemplateFileName, AncestorName, OutputFileName, aRequiredUnits); - finally - lib.Free; - end; -end; - -procedure GenerateDelphiAsync(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateDelphiAsync(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateDelphiIntf(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INTF_SUFFIX + '.pas' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - try - GenerateDelphiIntf(aLibrary, outputStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, Entities); - - outputStream.SaveToFile(outputName); - finally - outputStream.Free; - end; -end; - -procedure GenerateDelphiInvk(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INVK_SUFFIX + '.pas' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - try - GenerateDelphiInvk(aLibrary, outputStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, Entities); - - outputStream.SaveToFile(outputName); - finally - outputStream.Free; - end; -end; - -procedure GenerateDelphiImpl(const aLibrary: TRODLLibrary; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - outputName: string; - outputStream: TMemoryStream; - outputDFMStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := ServiceName + DEFAULT_IMPL_SUFFIX + '.pas' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - outputDFMStream := TMemoryStream.Create; - try - GenerateDelphiImpl(aLibrary, outputStream, outputDFMStream, ServiceName, TemplateFileName, AncestorName, OutputFileName, aRequiredUnits); - - outputStream.SaveToFile(outputName); - if outputDFMStream.Size > 0 then - outputDFMStream.SaveToFile(ChangeFileExt(outputName, '.dfm')); - finally - outputDFMStream.Free; - outputStream.Free; - end; -end; - -procedure GenerateDelphiAsync(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_ASYNC_SUFFIX + '.pas' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - try - GenerateDelphiAsync(aLibrary, outputStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - - outputStream.SaveToFile(outputName); - finally - outputStream.Free; - end; -end; - -procedure GenerateDelphiIntf(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - gen: TRODLDelphiIntfConverter; - templateName: string; - outputName: string; - unitName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_DELPHI_INTF_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_DELPHI_INTF_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INTF_SUFFIX + '.pas' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLDelphiIntfConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(OutputStream); - finally - gen.Free; - end; -end; - -procedure GenerateDelphiInvk(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - gen: TRODLDelphiInvkConverter; - templateName: string; - outputName: string; - unitName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_DELPHI_INVK_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_DELPHI_INVK_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INVK_SUFFIX + '.pas' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLDelphiInvkConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(OutputStream); - finally - gen.Free; - end; -end; - -procedure GenerateDelphiImpl(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputDFMStream: TStream; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - gen: TRODLDelphiImplConverter; - templateName: string; - outputName: string; - unitName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_DELPHI_IMPL_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if Length(OutputFileName) = 0 then - outputName := ServiceName + DEFAULT_IMPL_SUFFIX + '.pas' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLDelphiImplConverter.Create(aLibrary, templateName, unitName, AncestorName, ServiceName, aRequiredUnits); - try - gen.SaveResultToStream(OutputStream); - - // If datamodule then generate DFM - if gen.WriteDataModule then - begin - gen.TemplateFileName := ChangeFileExt(templateName, '.dfm'); - gen.FileExtension := '.dfm'; - gen.Convert(aLibrary, ServiceName); - gen.SaveResultToStream(OutputDFMStream); - end; - finally - gen.Free; - end; -end; - -procedure GenerateDelphiAsync(const aLibrary: TRODLLibrary; const OutputStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - gen: TRODLDelphiAsyncConverter; - templateName: string; - outputName: string; - unitName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_DELPHI_ASYNC_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_DELPHI_ASYNC_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_ASYNC_SUFFIX + '.pas' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLDelphiAsyncConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(outputStream); - finally - gen.Free; - end; -end; - -// Cpp -procedure GenerateCppIntf(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateCppIntf(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateCppInvk(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateCppInvk(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateCppImpl(const LibraryFileName: string; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateCppImpl(lib, ServiceName, TemplateFileName, AncestorName, OutputFileName, aRequiredUnits); - finally - lib.Free; - end; -end; - -procedure GenerateCppAsync(const LibraryFileName: string; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - lib: TRODLLibrary; -begin - lib := ReadRODLFromFile(TXMLToRODL, LibraryFileName); - try - GenerateCppAsync(lib, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - finally - lib.Free; - end; -end; - -procedure GenerateCppIntf(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; - outputHStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INTF_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - outputHStream := TMemoryStream.Create; - try - GenerateCppIntf(aLibrary, outputStream, outputHStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - - outputStream.SaveToFile(outputName); - outputHStream.SaveToFile(ChangeFileExt(outputName, '.h')); - finally - outputHStream.Free; - outputStream.Free; - end; -end; - -procedure GenerateCppInvk(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; - outputHStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INVK_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - outputHStream := TMemoryStream.Create; - try - GenerateCppInvk(aLibrary, outputStream, outputHStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - - outputStream.SaveToFile(outputName); - outputHStream.SaveToFile(ChangeFileExt(outputName, '.h')); - finally - outputHStream.Free; - outputStream.Free; - end; -end; - -procedure GenerateCppImpl(const aLibrary: TRODLLibrary; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - outputName: string; - outputStream: TMemoryStream; - outputHStream: TMemoryStream; - outputDFMStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := ServiceName + DEFAULT_IMPL_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - outputHStream := TMemoryStream.Create; - outputDFMStream := TMemoryStream.Create; - try - GenerateCppImpl(aLibrary, outputStream, outputHStream, outputDFMStream, ServiceName, TemplateFileName, AncestorName, OutputFileName, aRequiredUnits); - - outputStream.SaveToFile(outputName); - outputHStream.SaveToFile(ChangeFileExt(outputName, '.h')); - if outputDFMStream.Size > 0 then - outputDFMStream.SaveToFile(ChangeFileExt(outputName, '.dfm')); - finally - outputDFMStream.Free; - outputHStream.Free; - outputStream.Free; - end; -end; - -procedure GenerateCppAsync(const aLibrary: TRODLLibrary; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - outputName: string; - outputStream: TMemoryStream; - outputHStream: TMemoryStream; -begin - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_ASYNC_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - outputStream := TMemoryStream.Create; - outputHStream := TMemoryStream.Create; - try - GenerateCppAsync(aLibrary, outputStream, outputHStream, TemplateFileName, OutputFileName, ASplit, AWrapperTemplateName, entities); - - outputStream.SaveToFile(outputName); - outputHStream.SaveToFile(ChangeFileExt(outputName, '.h')); - finally - outputHStream.Free; - outputStream.Free; - end; -end; - -procedure GenerateCppIntf(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - templateName: string; - gen: TRODLCppIntfConverter; - outputName: string; - unitName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_CPP_INTF_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_CPP_INTF_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INTF_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLCppIntfConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(OutputStream); - gen.TemplateFileName := ChangeFileExt(templateName, '.h'); - gen.FileExtension := '.h'; - gen.Convert(aLibrary); - gen.SaveResultToStream(OutputHStream); - finally - gen.Free; - end; -end; - -procedure GenerateCppInvk(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - gen: TRODLCppInvkConverter; - templateName: string; - unitName: string; - outputName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_CPP_INVK_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_CPP_INVK_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_INVK_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLCppInvkConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(OutputStream); - gen.TemplateFileName := ChangeFileExt(templateName, '.h'); - gen.FileExtension := '.h'; - gen.Convert(aLibrary); - gen.SaveResultToStream(OutputHStream); - finally - gen.Free; - end; -end; - -procedure GenerateCppImpl(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const OutputDFMStream: TStream; const ServiceName: string; const TemplateFileName: string = ''; const AncestorName: string = DEFAULT_IMPL_SERVICE_ANCESTOR; const OutputFileName: string = ''; const aRequiredUnits: string = ''); -var - gen: TRODLCppImplConverter; - templateName: string; - outputName: string; - unitName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_CPP_IMPL_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if Length(OutputFileName) = 0 then - outputName := ServiceName + DEFAULT_IMPL_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLCppImplConverter.Create(aLibrary, templateName, unitName, AncestorName, ServiceName, aRequiredUnits); - try - gen.SaveResultToStream(outputStream); - gen.TemplateFileName := ChangeFileExt(templateName, '.h'); - gen.FileExtension := '.h'; - gen.Convert(aLibrary, ServiceName); - gen.SaveResultToStream(outputHStream); - - // If datamodule then generate DFM - if gen.WriteDataModule then - begin - gen.TemplateFileName := ChangeFileExt(templateName, '.dfm'); - gen.FileExtension := '.dfm'; - gen.Convert(aLibrary, ServiceName); - gen.SaveResultToStream(outputDFMStream); - end; - finally - gen.Free; - end; -end; - -procedure GenerateCppAsync(const aLibrary: TRODLLibrary; const OutputStream: TStream; const OutputHStream: TStream; const TemplateFileName: string = ''; const OutputFileName: string = ''; const ASplit: Boolean = False; const AWrapperTemplateName: string = ''; const entities: string = ''); -var - templateName: string; - gen: TRODLCppAsyncConverter; - outputName: string; - unitName: string; - wrapperTemplateName: string; -begin - if (Length(TemplateFileName) = 0) or not FileExists(TemplateFileName) then - templateName := DEFAULT_CPP_ASYNC_TEMPLATE_FILENAME - else - templateName := TemplateFileName; - - if (Length(AWrapperTemplateName) = 0) or not FileExists(AWrapperTemplateName) then - wrapperTemplateName := DEFAULT_CPP_ASYNC_WRAPPER_TEMPLATE_FILENAME - else - wrapperTemplateName := AWrapperTemplateName; - - if Length(OutputFileName) = 0 then - outputName := aLibrary.Name + DEFAULT_ASYNC_SUFFIX + '.cpp' - else - outputName := OutputFileName; - - unitName := ChangeFileExt(ExtractFileName(outputName), ''); - - ClearAllCaches; - gen := TRODLCppAsyncConverter.Create(aLibrary, templateName, unitName, - ASplit, ExtractFilePath(outputName), - wrapperTemplateName, entities); - try - gen.SaveResultToStream(OutputStream); - gen.TemplateFileName := ChangeFileExt(templateName, '.h'); - gen.FileExtension := '.h'; - gen.Convert(aLibrary); - gen.SaveResultToStream(OutputHStream); - finally - gen.Free; - end; -end; - -procedure GenerateUnitToStream(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aStream, aStream2: TStream; aAncestorName: string = ''; aUnitname: string=''); -begin - if aUnitname = '' then aUnitname := GetTargetFileName(aLibrary, aService, aType, aLanguage); - if aAncestorName = '' then aAncestorName := 'TRORemotable'; - - case aLanguage of - cglDelphiWin32: begin - case aType of - cgtIntf : GenerateDelphiIntf(aLibrary, aStream, '', aUnitname); - cgtInvk : GenerateDelphiInvk(aLibrary, aStream, '', aUnitname); - cgtImpl : GenerateDelphiImpl(aLibrary, aStream,aStream2, aService.Name, '',aAncestorName,aUnitname); - //raise Exception.Create('not supported.'); - cgtAsync: GenerateDelphiAsync(aLibrary, aStream, '', aUnitname); - end; - end; - cglCppWin32: begin - case aType of - cgtIntf : GenerateCppIntf(aLibrary, aStream, aStream2, '', aUnitname); - cgtInvk : GenerateCppInvk(aLibrary, aStream, aStream2, '', aUnitname); - cgtImpl : raise Exception.Create('not supported.'); - cgtAsync: GenerateCppAsync(aLibrary, aStream, aStream2, '', aUnitname); - end; - end; - end; -end; - -procedure GenerateUnitToFile(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aAncestorName: string = ''; aFilename: string=''); -begin - if aFilename = '' then aFilename := GetTargetFileName(aLibrary, aService, aType, aLanguage); - if aAncestorName = '' then aAncestorName := 'TRORemotable'; - - case aLanguage of - cglDelphiWin32: begin - case aType of - cgtIntf : GenerateDelphiIntf(aLibrary, '', aFilename); - cgtInvk : GenerateDelphiInvk(aLibrary, '', aFilename); - cgtImpl : GenerateDelphiImpl(aLibrary, aService.Name, '', aAncestorName, aFilename); - cgtAsync: GenerateDelphiAsync(aLibrary, '', aFilename); - end; - end; - cglCppWin32: begin - case aType of - cgtIntf : GenerateCppIntf(aLibrary, '', aFilename); - cgtInvk : GenerateCppInvk(aLibrary, '', aFilename); - cgtImpl : GenerateCppImpl(aLibrary, aService.Name, '', aAncestorName, aFilename); - cgtAsync: GenerateCppAsync(aLibrary, '', aFilename); - end; - end; - end; -end; - -procedure GenerateUnitToFile(aLibraryFileName: string; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage; aAncestorName: string = ''; aFilename: string=''); -var - lLibrary: TRODLLibrary; -begin - lLibrary := LoadLibraryFromXml(aLibraryFileName); - try - GenerateUnitToFile(lLibrary, aService, aType, aLanguage, aAncestorName, aFileName); - finally - lLibrary.Free(); - end; -end; - -function GetTargetFileName(aLibrary: TRODLLibrary; aService:TRODLService; aType: TROCodeGenType; aLanguage: TROCodeGenLanguage): string; -begin - case aType of - cgtIntf : result := aLibrary.Name+'_Intf'; - cgtInvk : result := aLibrary.Name+'_Invk'; - cgtImpl : result := aService.Name+'_Impl'; - cgtAsync: result := aLibrary.Name+'_Async'; - end; - case aLanguage of - cglDelphiWin32: result := result+'.pas'; - cglCppWin32 : result := result+'.cpp'; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLCppConverters.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLCppConverters.pas deleted file mode 100644 index 5dfda8a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLCppConverters.pas +++ /dev/null @@ -1,472 +0,0 @@ -unit uRODLCppConverters; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODLTemplateBasedConverter, - uRODLImplConverter, uRODLIntfConverter, uRODLInvkConverter, uRODLAsyncConverter, - uRODL, Classes; - -type - TRODLCppImplConverter = class(TRODLImplConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetParamBackModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; const aServerClassName: string; const aTargetEntity: string = ''; const aRequiredUnits: string = ''); override; - end; - - TRODLCppIntfConverter = class(TRODLIntfConverter) - private - FSimpleTypes: TStringList; - procedure PreProcessLibrary(const aLibrary: TRODLLibrary); - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetParamBackModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - function GetEventSinksSectionClass: TEventSinksSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const Split: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - destructor Destroy; override; - - procedure SaveResultToFile(const FileName: string); override; - end; - - TRODLCppInvkConverter = class(TRODLInvkConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetParamBackModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - - procedure SaveResultToFile(const FileName: string); override; - end; - - TRODLCppAsyncConverter = class(TRODLAsyncConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetParamBackModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const Split: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - - procedure SaveResultToFile(const FileName: string); override; - end; - -implementation - -uses - SysUtils, uRODLTemplateBasedConverterUtils, uROTypes; - -const - CppFrontFlagNames : array[TRODLParamFlag] of string = ( - 'const', '', '', 'result'); - CppBackFlagNames : array[TRODLParamFlag] of string = ( - '', '&', '&', 'result'); - - DEFAULT_CPP_INTF_SERVICE_ANCESTOR = 'IInterface'; - DEFAULT_CPP_INVK_SERVICE_ANCESTOR = 'System::TObject'; - DEFAULT_CPP_INTF_EVENT_SINK_ANCESTOR = 'IInterface'; - DEFAULT_CPP_ASYNC_SERVICE_ANCESTOR = 'IInterface'; - - -type - TCppIntfServicesSection = class (TIntfServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - TCppIntfEventSinksSection = class (TIntfEventSinksSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - TCppInvkServicesSection = class (TServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - TCppAsyncServicesSection = class (TAsyncServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - // SIMPLE_TYPES - TSimpleTypesSection = class (TRODLGeneratorSection) - protected - procedure DoReplacements(var curLine: string; const TypeName: string; const aLibrary: TRODLLibrary); dynamic; - public - constructor Create(AParent: TRODLCppIntfConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - -{ TRODLCppImplConverter } - -constructor TRODLCppImplConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName, aServerClassName, aTargetEntity: string; - const aRequiredUnits: string); -begin - FileExtension := '.cpp'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, aServerClassName, aTargetEntity, aRequiredUnits); -end; - -function TRODLCppImplConverter.GetParamBackModifier( - flag: TRODLParamFlag): string; -begin - Result := CppBackFlagNames[Flag]; -end; - -function TRODLCppImplConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := CppFrontFlagNames[Flag]; -end; - -function TRODLCppImplConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToCppType(originalType, FLibrary); -end; - -{ TRODLCppIntfConverter } - -constructor TRODLCppIntfConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; - const Split: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); -begin - // Call inherited with nil so that convert is not called, allowing us - // to setup the optional sections. Setting up the optional sections before - // calling the inherited Create is not an option, the section list would - // not have been created - inherited Create(nil, aTemplateFileName, aUnitName, Split, AOutputDir, AWrapperTemplateName, aTargetEntity); - - FileExtension := '.cpp'; - - FSimpleTypes := TStringList.Create; - FSimpleTypes.Sorted := True; - FSimpleTypes.Duplicates := dupIgnore; - PreProcessLibrary(aLibrary); - - Sections.Add(TSimpleTypesSection.Create(Self)); - - // Now that everything is done, call convert if need be. - if (aLibrary <> nil) then Convert(aLibrary); -end; - -destructor TRODLCppIntfConverter.Destroy; -begin - FSimpleTypes.Free; - - inherited Destroy; -end; - -function TRODLCppIntfConverter.GetEventSinksSectionClass: TEventSinksSectionClass; -begin - Result := TCppIntfEventSinksSection; -end; - -function TRODLCppIntfConverter.GetParamBackModifier( - flag: TRODLParamFlag): string; -begin - Result := CppBackFlagNames[Flag]; -end; - -function TRODLCppIntfConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := CppFrontFlagNames[Flag]; -end; - -function TRODLCppIntfConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TCppIntfServicesSection; -end; - -function TRODLCppIntfConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToCppType(originalType, FLibrary); -end; - -procedure TRODLCppIntfConverter.PreProcessLibrary(const aLibrary: TRODLLibrary); -var - I, J, K: Integer; - DataType: string; - CurInterface: TRODLServiceInterface; - CurOp: TRODLOperation; -begin - // In order to fill the SIMPLE_TYPES section, we need to go through all - // potential types and note if they are simple or complex (implemented as - // a class). - - for I := 0 to aLibrary.StructCount - 1 do - begin - for J := 0 to aLibrary.Structs[I].Count - 1 do - begin - DataType := aLibrary.Structs[I].Items[J].DataType; - if not SameText(DataType, DataTypeNames[rtXML]) and not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - end; - - for I := 0 to aLibrary.ArrayCount - 1 do - begin - DataType := aLibrary.Arrays[I].ElementType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - - for I := 0 to aLibrary.ServiceCount - 1 do - begin - CurInterface := aLibrary.Services[I].Default; - - for J := 0 to CurInterface.Count - 1 do - begin - CurOp := CurInterface.Items[J]; - if Assigned(CurOp.Result) and (Length(CurOp.Result.DataType) > 0) then - begin - DataType := CurOp.Result.DataType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - for K := 0 to CurOp.Count - 1 do - begin - DataType := CurOp.Items[K].DataType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - end; - end; - - for I := 0 to aLibrary.ExceptionCount - 1 do - begin - for J := 0 to aLibrary.Exceptions[I].Count - 1 do - begin - DataType := aLibrary.Exceptions[I].Items[J].DataType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - end; - - for I := 0 to aLibrary.EventSinkCount - 1 do - begin - CurInterface := aLibrary.EventSinks[I].Default; - - for J := 0 to CurInterface.Count - 1 do - begin - CurOp := CurInterface.Items[J]; - if Assigned(CurOp.Result) and (Length(CurOp.Result.DataType) > 0) then - begin - DataType := CurOp.Result.DataType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - for K := 0 to CurOp.Count - 1 do - begin - DataType := CurOp.Items[K].DataType; - if not CachedIsImplementedAsClass(DataType, aLibrary) then - FSimpleTypes.Add(DataType); - end; - end; - end; -end; - -procedure TRODLCppIntfConverter.SaveResultToFile(const FileName: string); -begin - if Split then - inherited SaveResultToFile(ChangeFileExt(FileName, '.h')) - else - inherited SaveResultToFile(FileName); -end; - -{ TRODLCppInvkConverter } - -constructor TRODLCppInvkConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; const ASplit: Boolean = False; - const AOutputDir: string = ''; const AWrapperTemplateName: string = ''; - const aTargetEntity: string = ''); -begin - FileExtension := '.cpp'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntity); -end; - -function TRODLCppInvkConverter.GetParamBackModifier( - flag: TRODLParamFlag): string; -begin - Result := CppBackFlagNames[Flag]; -end; - -function TRODLCppInvkConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := CppFrontFlagNames[Flag]; -end; - -function TRODLCppInvkConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TCppInvkServicesSection; -end; - -function TRODLCppInvkConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToCppType(originalType, FLibrary); -end; - -procedure TRODLCppInvkConverter.SaveResultToFile(const FileName: string); -begin - if Split then - inherited SaveResultToFile(ChangeFileExt(FileName, '.h')) - else - inherited SaveResultToFile(FileName); -end; - -{ TCppIntfServicesSection } - -function TCppIntfServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) = 0 then - Result := DEFAULT_CPP_INTF_SERVICE_ANCESTOR; -end; - -{ TCppInvkServicesSection } - -function TCppInvkServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) = 0 then - Result := DEFAULT_CPP_INVK_SERVICE_ANCESTOR; -end; - -{ TCppEventSinksSection } - -function TCppIntfEventSinksSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) = 0 then - Result := DEFAULT_CPP_INTF_EVENT_SINK_ANCESTOR; -end; - -{ TRODLCppAsyncConverter } - -constructor TRODLCppAsyncConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; const Split: Boolean; - const AOutputDir, AWrapperTemplateName, aTargetEntity: string); -begin - FileExtension := '.cpp'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, Split, AOutputDir, AWrapperTemplateName, aTargetEntity); -end; - -function TRODLCppAsyncConverter.GetParamBackModifier( - flag: TRODLParamFlag): string; -begin - Result := CppBackFlagNames[Flag]; -end; - -function TRODLCppAsyncConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := CppFrontFlagNames[Flag]; -end; - -function TRODLCppAsyncConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TCppAsyncServicesSection; -end; - -function TRODLCppAsyncConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToCppType(originalType, FLibrary); -end; - -procedure TRODLCppAsyncConverter.SaveResultToFile(const FileName: string); -begin - if Split then - inherited SaveResultToFile(ChangeFileExt(FileName, '.h')) - else - inherited SaveResultToFile(FileName); -end; - -{ TCppAsyncServicesSection } - -function TCppAsyncServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) = 0 then - Result := DEFAULT_CPP_ASYNC_SERVICE_ANCESTOR; -end; - -{ TSimpleTypesSection } - -constructor TSimpleTypesSection.Create(AParent: TRODLCppIntfConverter); -begin - inherited Create(AParent, 'SIMPLE_TYPES'); -end; - -procedure TSimpleTypesSection.DoReplacements(var curLine: string; - const TypeName: string; const aLibrary: TRODLLibrary); -begin - MacroReplace(curLine, '%', - ['TYPE_NAME', CachedDataTypeToCppType(TypeName, aLibrary) - ]); -end; - -procedure TSimpleTypesSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -var - I: Integer; - curLine: string; -begin - for I := 0 to (Parent as TRODLCppIntfConverter).FSimpleTypes.Count - 1 do - begin - curLine := sectionText; - - DoReplacements(curLine, (Parent as TRODLCppIntfConverter).FSimpleTypes[I], aLibrary); - Write(curLine); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLDelphiConverters.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLDelphiConverters.pas deleted file mode 100644 index a093e38..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLDelphiConverters.pas +++ /dev/null @@ -1,233 +0,0 @@ -unit uRODLDelphiConverters; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODLTemplateBasedConverter, - uRODLImplConverter, uRODLIntfConverter, uRODLInvkConverter, uRODLAsyncConverter, - uRODL; - -type - TRODLDelphiImplConverter = class(TRODLImplConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; const aServerClassName: string; const aTargetEntity: string = ''; const aRequiredUnits: string = ''); override; - end; - - TRODLDelphiIntfConverter = class(TRODLIntfConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - function GetEventSinksSectionClass: TEventSinksSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - end; - - TRODLDelphiInvkConverter = class(TRODLInvkConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - end; - - TRODLDelphiAsyncConverter = class(TRODLAsyncConverter) - protected - function GetParamFrontModifier(flag: TRODLParamFlag): string; override; - function GetTypeIdentifier(const originalType: string): string; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); override; - end; - -implementation - -uses - uRODLGenTools, uRODLTemplateBasedConverterUtils; - -type - TDelphiIntfServicesSection = class (TIntfServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - TDelphiIntfEventSinksSection = class (TIntfEventSinksSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - TDelphiAsyncServicesSection = class (TAsyncServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - - -{ TRODLDelphiConverter } - -constructor TRODLDelphiImplConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName, aServerClassName, aTargetEntity: string; - const aRequiredUnits: string); -begin - FileExtension := '.pas'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, aServerClassName, aTargetEntity, aRequiredUnits); -end; - -function TRODLDelphiImplConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := DelphiFlagNames[Flag]; -end; - -function TRODLDelphiImplConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToDelphiType(originalType, FLibrary); -end; - -{ TRODLDelphiIntfConverter } - -constructor TRODLDelphiIntfConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntity: string = ''); -begin - FileExtension := '.pas'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntity); -end; - -function TRODLDelphiIntfConverter.GetEventSinksSectionClass: TEventSinksSectionClass; -begin - Result := TDelphiIntfEventSinksSection; -end; - -function TRODLDelphiIntfConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := DelphiFlagNames[Flag]; -end; - -function TRODLDelphiIntfConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TDelphiIntfServicesSection; -end; - -function TRODLDelphiIntfConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToDelphiType(originalType, FLibrary); -end; - -{ TRODLDelphiInvkConverter } - -constructor TRODLDelphiInvkConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; const ASplit: Boolean = False; - const AOutputDir: string = ''; const AWrapperTemplateName: string = ''; - const aTargetEntity: string = ''); -begin - FileExtension := '.pas'; - - inherited Create(aLibrary, aTemplateFileName, aUnitName, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntity); -end; - -function TRODLDelphiInvkConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := DelphiFlagNames[Flag]; -end; - -function TRODLDelphiInvkConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToDelphiType(originalType, FLibrary); -end; - -{ TDelphiIntfServicesSection } - -function TDelphiIntfServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) > 0 then - Result := '(' + Result + ')'; -end; - -{ TDelphiIntfEventSinksSection } - -function TDelphiIntfEventSinksSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) > 0 then - Result := '(' + Result + ')'; -end; - -{ TRODLDelphiAsyncConverter } - -constructor TRODLDelphiAsyncConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; const ASplit: Boolean; - const AOutputDir, AWrapperTemplateName, aTargetEntity: string); -begin - FileExtension := '.pas'; - - inherited Create(aLibrary, aTemplateFileName, aUnitNAme, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntity); -end; - -function TRODLDelphiAsyncConverter.GetParamFrontModifier( - flag: TRODLParamFlag): string; -begin - Result := DelphiFlagNames[Flag]; -end; - -function TRODLDelphiAsyncConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TDelphiAsyncServicesSection; -end; - -function TRODLDelphiAsyncConverter.GetTypeIdentifier( - const originalType: string): string; -begin - Result := CachedDataTypeToDelphiType(originalType, FLibrary); -end; - -{ TDelphiAsyncServicesSection } - -function TDelphiAsyncServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - if Length(Result) > 0 then - Result := '(' + Result + ')'; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLImplConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLImplConverter.pas deleted file mode 100644 index 588a9d9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLImplConverter.pas +++ /dev/null @@ -1,163 +0,0 @@ -unit uRODLImplConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODLTemplateBasedConverter, uRODL; - -const - DEFAULT_IMPL_SERVICE_ANCESTOR = 'TRORemotable'; - -type - TRODLImplConverter = class (TRODLTemplateBasedConverter) - private - FService: TRODLService; - FAncestorService: TRODLService; - function GetAncestorUnitName: string; - - property AncestorUnitName: string read GetAncestorUnitName; - protected - procedure IntConvert(const aLibrary : TRODLLIbrary; const aTargetEntity : string = ''); override; - procedure SetupServices(const aLibrary: TRODLLibrary; const aTargetEntity : string = ''); override; - procedure SetupRequiredUnits; override; - function ValidateTargetEntity(const aLibrary : TRODLLIbrary; const aTargetEntity : string) : boolean; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; const aServerClassName: string; const aTargetEntity: string = ''; const aRequiredUnits: string = ''); reintroduce; virtual; - end; - -implementation - -uses - SysUtils, uRODLTemplateBasedConverterUtils, uROServer; - -type - TImplServicesSection = class (TServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - -{ TRODLDelphiImplConverter } - -constructor TRODLImplConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName: string; const aUnitName: string; const aServerClassName: string; - const aTargetEntity: string; const aRequiredUnits: string); -begin - // Call inherited with nil so that convert is not called, allowing us - // to setup the optional sections. Setting up the optional sections before - // calling the inherited Create is not an option, the section list would - // not have been created - inherited Create(nil, aTemplateFileName, aUnitName, aTargetEntity); - - FServerClassName := aServerClassName; - FRequiredUnits := aRequiredUnits; - - // Now that everything is done, call convert if need be. - if (aLibrary <> nil) then Convert(aLibrary, aTargetEntity); -end; - -function TRODLImplConverter.GetAncestorUnitName: string; -begin - Result := ''; - if Assigned(FService) then - begin - if FService.Ancestor <> '' then - begin - if Assigned(FAncestorService) and (FAncestorService.ImplUnit <> '') then - Result := FAncestorService.ImplUnit - else - Result := FService.Ancestor+'_Impl'; - end; - end; -end; - -function TRODLImplConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TImplServicesSection; -end; - -procedure TRODLImplConverter.IntConvert(const aLibrary: TRODLLIbrary; - const aTargetEntity: string); -begin - if Assigned(fService) and Assigned(fService.Default) then - inherited IntConvert(aLibrary, aTargetEntity); -end; - -procedure TRODLImplConverter.SetupRequiredUnits; -var - ancestorUnit: string; -begin - inherited SetupRequiredUnits; - - ancestorUnit := AncestorUnitName; - if Pos(ancestorUnit, RequiredUnits) = 0 then - RequiredUnits := RequiredUnits + ',' + ancestorUnit; -end; - -procedure TRODLImplConverter.SetupServices(const aLibrary: TRODLLibrary; - const aTargetEntity: string); -begin - inherited SetupServices(aLibrary, aTargetEntity); - - // For the impl section, only one service is of interest, the one - // indicated to us - FOrderedServices.Clear; - FOrderedServices.AddObject(FService.Name, FService); -end; - -function TRODLImplConverter.ValidateTargetEntity( - const aLibrary: TRODLLIbrary; const aTargetEntity: string): boolean; -var - i : integer; -begin - Result := FALSE; - - for i := 0 to (aLibrary.ServiceCount-1) do - if (CompareText(aLibrary.Services[i].Info.Name, aTargetEntity)=0) then - begin - FService := aLibrary.Services[i]; // Will be used later - if FService.Ancestor <> '' then - FAncestorService := aLibrary.FindService(FService.Ancestor); - Result := TRUE; - Exit; - end; -end; - -{ TImplServicesSection } - -function TImplServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - - if Result = '' then - begin - if not (Parent as TRODLImplConverter).UseDefaultAncestor then - Result := (Parent as TRODLImplConverter).ServerClassName - else - Result := DEFAULT_IMPL_SERVICE_ANCESTOR; - end; -end; - - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLIntfConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLIntfConverter.pas deleted file mode 100644 index 7f3e443..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLIntfConverter.pas +++ /dev/null @@ -1,219 +0,0 @@ -unit uRODLIntfConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, IniFiles, Contnrs, uRODLTemplateBasedConverter, uRODLSplitableConverter, uRODL, uROClasses, uRODLLineStream; - -type - TRODLIntfConverter = class (TRODLSplitableConverter) - private - protected - function GetSplitFilesSuffix: string; override; - procedure AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; const AEntity: TRODLEntity; const unitName: string); override; - procedure SetupFiles(const aLibrary: TRODLLibrary); override; - function ValidateTargetEntity(const aLibrary: TRODLLibrary; const aTargetEntity: string): boolean; override; - - function GetServicesSectionClass: TServicesSectionClass; override; - function GetEventSinksSectionClass: TEventSinksSectionClass; override; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntities: string = ''); override; - end; - - TIntfServicesSection = class (TServicesSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - function GetProxyAncestorName(const aService: TRODLBaseService): string; override; - end; - - TIntfEventSinksSection = class (TEventSinksSection) - protected - function GetAncestorName(const aService: TRODLBaseService): string; override; - end; - -implementation - -uses - SysUtils, uRODLTemplateBasedConverterUtils; - -{ TRODLIntfConverter } - -procedure TRODLIntfConverter.AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - const AEntity: TRODLEntity; const unitName: string); -{var - enum: TRODLEnum; - I: Integer;} -begin - if AEntity is TRODLService then - begin - Types.Values['I' + AEntity.Name] := unitName; - Types.Values['T' + AEntity.Name + '_Proxy'] := unitName; - Types.Values['Co' + AEntity.Name] := unitName; - end - else - if AEntity is TRODLEnum then - begin - Types.Values[AEntity.Name] := unitName; - // Not sure if there is a way to do something here for the enums -{ enum := AEntity as TRODLEnum; - for I := 0 to enum.Count - 1 do - begin - Types.Values[GetEnumsSectionClass.GetEnumValueName(enum, I)] := unitName; - end;} - end - else - begin - inherited AddEntityTypes(Types, AEntity, unitName); - end; -end; - -constructor TRODLIntfConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntities: string = ''); -begin - // Call inherited with nil so that convert is not called, allowing us - // to setup the optional sections. Setting up the optional sections before - // calling the inherited Create is not an option, the section list would - // not have been created - inherited Create(nil, aTemplateFileName, aUnitName, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntities); - - // Setup the optional section - Sections.Add(TIfWSDLSection.Create(Self)); - - // Now that everything is done, call convert if need be. - if (aLibrary <> nil) then Convert(aLibrary); -end; - -function TRODLIntfConverter.GetEventSinksSectionClass: TEventSinksSectionClass; -begin - Result := TIntfEventSinksSection; -end; - -function TRODLIntfConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TIntfServicesSection; -end; - -function TRODLIntfConverter.GetSplitFilesSuffix: string; -begin - Result := DEFAULT_INTF_SUFFIX; -end; - -procedure TRODLIntfConverter.SetupFiles(const aLibrary: TRODLLibrary); -var - I: Integer; - newFile: TRODLSplitableConverterFile; -begin - FFiles.Clear; - - // one file per service - for I := 0 to FOrderedServices.Count - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.Services.Add(FOrderedServices.Objects[I]); - FFiles.Add(newFile); - end; - - // one file for all enums - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - for I := 0 to aLibrary.EnumCount - 1 do - newFile.Enums.Add(aLibrary.Enums[I]); - if newFile.Enums.Count > 0 then - begin - FFiles.Add(newFile); - // because we put all enums in one file, we set the file name to "Enums" - newFile.UnitName := FLibrary.Name + '_Enums' + SplitFilesSuffix; - end; - - // one file per array - for I := 0 to aLibrary.ArrayCount - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.Arrays.Add(aLibrary.Arrays[I]); - FFiles.Add(newFile); - end; - - // one file per struct - for I := 0 to aLibrary.StructCount - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.Structs.Add(aLibrary.Structs[I]); - FFiles.Add(newFile); - end; - - // one file per event sink - for I := 0 to aLibrary.EventSinkCount - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.EventSinks.Add(aLibrary.EventSinks[I]); - FFiles.Add(newFile); - end; - - // one file per exception - for I := 0 to aLibrary.ExceptionCount - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.Exceptions.Add(aLibrary.Exceptions[I]); - FFiles.Add(newFile); - end; -end; - -function TRODLIntfConverter.ValidateTargetEntity(const aLibrary: TRODLLibrary; - const aTargetEntity: string): boolean; -begin - Result := True; -end; - -{ TIntfServicesSection } - -function TIntfServicesSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - - if Length(Result) > 0 then - Result := 'I' + Result; -end; - -function TIntfServicesSection.GetProxyAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetProxyAncestorName(aService); - - if (Length(Result) > 0) and (Result <> DEFAULT_SERVICE_PROXY_ANCESTOR_NAME) then - Result := 'T' + Result; -end; - -{ TIntfEventSinksSection } - -function TIntfEventSinksSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := inherited GetAncestorName(aService); - - if Length(Result) > 0 then - Result := 'I' + Result; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLInvkConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLInvkConverter.pas deleted file mode 100644 index 239ca02..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLInvkConverter.pas +++ /dev/null @@ -1,110 +0,0 @@ -unit uRODLInvkConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, IniFiles, uRODLTemplateBasedConverter, uRODLSplitableConverter, uRODLLineStream, uRODL; - -type - TRODLInvkConverter = class (TRODLSplitableConverter) - private - function GetLibrary: TRODLLibrary; - protected - procedure SetupFiles(const aLibrary: TRODLLibrary); override; - function GetSplitFilesSuffix: string; override; - procedure AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; const AEntity: TRODLEntity; const unitName: string); override; - function ValidateTargetEntity(const aLibrary: TRODLLibrary; const aTargetEntity: string): boolean; override; - property ROLibrary: TRODLLibrary read GetLibrary; - published - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntities: string = ''); override; - end; - -implementation - -uses - Contnrs, uROTypes, uROClasses, uRODLTemplateBasedConverterUtils; - -{ TRODLInvkConverter } - -procedure TRODLInvkConverter.AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - const AEntity: TRODLEntity; const unitName: string); -begin - if AEntity is TRODLService then - begin - Types.Values['T' + AEntity.Name] := unitName; - end - else - inherited AddEntityTypes(Types, AEntity, unitName); -end; - -constructor TRODLInvkConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntities: string = ''); -begin - // Call inherited with nil so that convert is not called, allowing us - // to setup the optional sections. Setting up the optional sections before - // calling the inherited Create is not an option, the section list would - // not have been created - inherited Create(nil, aTemplateFileName, aUnitName, ASplit, AOutputDir, AWrapperTemplateName, aTargetEntities); - - // Setup the optional sections - - // Now that everything is done, call convert if need be. - if (aLibrary <> nil) then Convert(aLibrary); -end; - -function TRODLInvkConverter.GetLibrary: TRODLLibrary; -begin - Result := FLibrary; -end; - -function TRODLInvkConverter.GetSplitFilesSuffix: string; -begin - Result := DEFAULT_INVK_SUFFIX; -end; - -procedure TRODLInvkConverter.SetupFiles(const aLibrary: TRODLLibrary); -var - I: Integer; - newFile: TRODLSplitableConverterFile; -begin - FFiles.Clear; - - // For the invoker, we only want files for the services. - for I := 0 to FOrderedServices.Count - 1 do - begin - newFile := TRODLSplitableConverterFile.Create(aLibrary, Self); - newFile.Services.Add(FOrderedServices.Objects[I]); - FFiles.Add(newFile); - end; -end; - -function TRODLInvkConverter.ValidateTargetEntity(const aLibrary: TRODLLibrary; - const aTargetEntity: string): boolean; -begin - Result := True; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLLineStream.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLLineStream.pas deleted file mode 100644 index 8a44e19..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLLineStream.pas +++ /dev/null @@ -1,78 +0,0 @@ -unit uRODLLineStream; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes; - -type - TLineStream = class(TStringStream) - private - function GetEof: Boolean; - public - function ReadLine: string; - procedure WriteLine(const line: string); - - procedure Clear; - - property Eof: Boolean read GetEof; - end; - -implementation - -{ TLineStream } - -procedure TLineStream.Clear; -begin - Size := 0; -end; - -function TLineStream.GetEof: Boolean; -begin - Result := Position = Size; -end; - -function TLineStream.ReadLine: string; -var - I: Integer; -begin - I := Position; - - while (I < Size-1) and (DataString[I+1] <> #13) and (DataString[I+2] <> #10) do - Inc(I); - - if I = Size-1 then - begin - Result := ReadString(I-Position+1); - end - else - begin - Result := ReadString(I-Position); // Do not eat the carriage return - Position := Position + 2; - end; -end; - -procedure TLineStream.WriteLine(const line: string); -begin - WriteString(line + #13#10); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLSplitableConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLSplitableConverter.pas deleted file mode 100644 index 1347978..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLSplitableConverter.pas +++ /dev/null @@ -1,569 +0,0 @@ -unit uRODLSplitableConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, IniFiles, Contnrs, uRODL, uROClasses, uRODLLineStream, uRODLTemplateBasedConverter; - -type - TRODLSplitableConverterFileList = class; - - TRODLSplitableConverter = class (TRODLTemplateBasedConverter) - private - FTargetEntities: TStringList; - FOutputDir: string; - protected - FWrapperTemplateName: string; - FSplit: Boolean; - FFiles: TRODLSplitableConverterFileList; - - procedure ProcessTemplate(const aLibrary: TRODLLibrary; template: TLineStream); override; - procedure SetupFiles(const aLibrary: TRODLLibrary); virtual; abstract; - procedure WriteWrapper(TypesList: TStringList; UsesList: TStringList); virtual; - function GetSplitFilesSuffix: string; virtual; abstract; - procedure AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; const AEntity: TRODLEntity; const unitName: string); virtual; - procedure ResolveRequiredUnits; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; - const ASplit: Boolean = False; const AOutputDir: string = ''; - const AWrapperTemplateName: string = ''; const aTargetEntities: string = ''); reintroduce; virtual; - destructor Destroy; override; - - property Split: Boolean read FSplit; - property SplitFilesSuffix: string read GetSplitFilesSuffix; - property OutputDir: string read FOutputDir; - end; - - TRODLSplitableConverterFile = class - private - FEnums: TObjectList; - FArrays: TObjectList; - FStructs: TObjectList; - FEventSinks: TObjectList; - FExceptions: TObjectList; - FUnitName: string; - FServices: TObjectList; - FLibrary: TRODLLibrary; - FActiveList: TObjectList; - FLibraryList: IROStrings; - FConverter: TRODLSplitableConverter; - FRequiredUnits: TStringList; - function GetServices: TObjectList; - function GetUnitName: string; - function GetExceptions: TObjectList; - function GetEventSinks: TObjectList; - function GetStructs: TObjectList; - function GetArrays: TObjectList; - function GetEnums: TObjectList; - procedure SetupLists; - public - constructor Create(const aLibrary: TRODLLibrary; const aConverter: TRODLSplitableConverter); - destructor Destroy; override; - - function GetActiveList: TObjectList; - function GetLibraryList: IROStrings; - - property Services: TObjectList read GetServices; - property Enums: TObjectList read GetEnums; - property Arrays: TObjectList read GetArrays; - property Structs: TObjectList read GetStructs; - property EventSinks: TObjectList read GetEventSinks; - property Exceptions: TObjectList read GetExceptions; - - property UnitName: string read GetUnitName write FUnitName; - property RequiredUnits: TStringList read FRequiredUnits write FRequiredUnits; - end; - - TRODLSplitableConverterFileList = class (TObjectList) - private - function GetItem(Index: Integer): TRODLSplitableConverterFile; - procedure SetItem(Index: Integer; const Value: TRODLSplitableConverterFile); - public - property Items[Index: Integer]: TRODLSplitableConverterFile read GetItem write SetItem; default; - end; - - -implementation - -uses - SysUtils, uRODLTemplateBasedConverterUtils; - -{ TRODLSplitableConverter } - -procedure TRODLSplitableConverter.AddEntityTypes(Types: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - const AEntity: TRODLEntity; const unitName: string); -begin - Types.Values[AEntity.Name] := unitName; -end; - -constructor TRODLSplitableConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName, aUnitName: string; const ASplit: Boolean; - const AOutputDir, AWrapperTemplateName, aTargetEntities: string); -begin - // Call inherited with nil so that convert is not called, allowing us - // to setup the optional sections. Setting up the optional sections before - // calling the inherited Create is not an option, the section list would - // not have been created - inherited Create(nil, aTemplateFileName, aUnitName, ''); - FSplit := ASplit; - FFiles := TRODLSplitableConverterFileList.Create(True); - FOutputDir := AOutputDir; - if Length(FOutputDir) = 0 then - FOutputDir := '.'; - FWrapperTemplateName := AWrapperTemplateName; - FTargetEntities := TStringList.Create; - FTargetEntities.Sorted := True; - FTargetEntities.Delimiter := ','; - FTargetEntities.DelimitedText := aTargetEntities; - - // Setup the optional sections - - // Now that everything is done, call convert if need be. - if (aLibrary <> nil) then Convert(aLibrary); -end; - -destructor TRODLSplitableConverter.Destroy; -begin - FTargetEntities.Free; - FFiles.Free; - - inherited Destroy; -end; - -procedure TRODLSplitableConverter.ProcessTemplate(const aLibrary: TRODLLibrary; - template: TLineStream); -var - I: Integer; - curFile: TRODLSplitableConverterFile; - J: Integer; - UsesList: TStringList; - TypesList: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - curEntity: TRODLEntity; - originalUnitName: string; - originalRequiredUnits: string; - oneEntitySelected: Boolean; -begin - if Split then - begin - SetupFiles(aLibrary); - ResolveRequiredUnits; - - UsesList := TStringList.Create; - TypesList := {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}.Create; - originalUnitName := UnitName; - originalRequiredUnits := RequiredUnits; - try - for I := 0 to FFiles.Count - 1 do - begin - curFile := FFiles[I]; - - UsesList.Add(curFile.UnitName); - - FOrderedServices.Clear; - FOrderedArrays.Clear; - FOrderedStructs.Clear; - FOrderedEnums.Clear; - FOrderedExceptions.Clear; - FOrderedEventSinks.Clear; - - oneEntitySelected := False; - for J := 0 to curFile.GetActiveList.Count - 1 do - begin - curEntity := curFile.GetActiveList[J] as TRODLEntity; - curFile.GetLibraryList.AddObject(curEntity.Name, curEntity); - AddEntityTypes(TypesList, curEntity, curFile.UnitName); - oneEntitySelected := oneEntitySelected or (FTargetEntities.IndexOf(curEntity.Name) > -1); - end; - - // Only generate if no entities were indicated or if at least one - // of the entities in the current file was found earlier in the list. - if (FTargetEntities.Count = 0) or oneEntitySelected then - begin - Buffer.Clear; - template.Position := 0; - UnitName := curFile.UnitName; - RequiredUnits := originalRequiredUnits; - if curFile.RequiredUnits.Count > 0 then - begin - if Length(RequiredUnits) > 0 then - RequiredUnits := RequiredUnits + ','; - RequiredUnits := RequiredUnits + curFile.RequiredUnits.DelimitedText; - end; - inherited ProcessTemplate(aLibrary, template); - Buffer.SaveToFile(StrEnsureSuffix('\', OutputDir)+ curFile.UnitName + FileExtension); - end; - end; - - UnitName := originalUnitName; - RequiredUnits := originalRequiredUnits; - WriteWrapper(TypesList, UsesList); - finally - UsesList.Free; - TypesList.Free; - end; - end - else - begin - inherited ProcessTemplate(aLibrary, template); - end; -end; - -procedure TRODLSplitableConverter.ResolveRequiredUnits; -var - curFileIndex: Integer; - curFile: TRODLSplitableConverterFile; - curEntityIndex: Integer; - curEntity: TRODLEntity; - curService: TRODLBaseService; - curArray: TRODLArray; - curStruct: TRODLBaseStruct; - typesCache: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - curFieldIndex: Integer; - curOpIndex: Integer; - curOp: TRODLOperation; - curParamIndex: Integer; - notFounds: TStringList; - - procedure AddRequiredUnits(const typeName: string); - var - resultIndex: Integer; - begin - resultIndex := notFounds.IndexOf(typeName); - if resultIndex = -1 then - begin - unitName := typesCache.Values[typeName]; - if Length(unitName) > 0 then - begin - if unitName <> curFile.UnitName then - curFile.RequiredUnits.Add(unitName); - end - else - begin - notFounds.Add(typeName); - end; - end; - end; - -begin - // In order to find out if a splitted file requires other files, we need - // to know which types are where. So we fill in the typesCache list with - // Name/Value pairs, where the name is the type and the value the unit - // where it is located. - // Once this is done, we go look at all the types in all the files, and - // we look for them in the cache. If the type is found, then the unit it - // resides in is added to the list of required units. If it is not found - // it is added to the notFounds list. This second list allows to speed - // the process a lot because looking through the typesCache list is slow - // and many regular types (Integer, String...) are used a lot but there are - // not many of them. Hence the second list allows to know very fast for these - // that they were not found in any unit. - typesCache := {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}.Create; - notFounds := TStringList.Create; - try - notFounds.Sorted := True; - - for curFileIndex := 0 to FFiles.Count - 1 do - begin - curFile := FFiles[curFileIndex]; - - for curEntityIndex := 0 to curFile.GetActiveList.Count - 1 do - begin - curEntity := curFile.GetActiveList[curEntityIndex] as TRODLEntity; - typesCache.Values[curEntity.Name] := curFile.UnitName; - end; - end; - - for curFileIndex := 0 to FFiles.Count - 1 do - begin - curFile := FFiles[curFileIndex]; - - curFile.RequiredUnits.Clear; - for curEntityIndex := 0 to curFile.GetActiveList.Count - 1 do - begin - curEntity := curFile.GetActiveList[curEntityIndex] as TRODLEntity; - if curEntity is TRODLBaseService then - begin - curService := curEntity as TRODLBaseService; - - AddRequiredUnits(curService.Ancestor); - - for curOpIndex := 0 to curService.Default.Count - 1 do - begin - curOp := curService.Default.Items[curOpIndex]; - if Assigned(curOp.Result) then - AddRequiredUnits(curOp.Result.DataType); - - for curParamIndex := 0 to curOp.Count - 1 do - AddRequiredUnits(curOp.Items[curParamIndex].DataType); - end; - end - else - if curEntity is TRODLArray then - begin - curArray := curEntity as TRODLArray; - AddRequiredUnits(curArray.ElementType); - end - else - if curEntity is TRODLBaseStruct then - begin - curStruct := curEntity as TRODLBaseStruct; - - AddRequiredUnits(curStruct.Ancestor); - - for curFieldIndex := 0 to curStruct.Count - 1 do - AddRequiredUnits(curStruct.Items[curFieldIndex].DataType); - end; - end; - curFile.RequiredUnits.Delimiter := ','; - end; - finally - notFounds.Free; - typesCache.Free; - end; -end; - -procedure TRODLSplitableConverter.WriteWrapper(TypesList, - UsesList: TStringList); -var - template: TLineStream; - content: TStringList; - curLine: string; - sectionContent: string; - I: Integer; - typeUnitName: string; -begin - template := TLineStream.Create(''); - try - content := TStringList.Create; - try - if FileExists(FWrapperTemplateName) then - content.LoadFromFile(FWrapperTemplateName) - else - LoadTemplateFromResource(content, FWrapperTemplateName); - - template.WriteString(content.Text); - template.Position := 0; - finally - content.Free; - end; - - Buffer.Clear; - while not template.Eof do - begin - curLine := template.ReadLine; - - MacroReplace(curLine, '%', - ['UNIT_NAME', FLibrary.Name + SplitFilesSuffix - ]); - - if SectionStart(curLine, 'USES') then - begin - sectionContent := FinishSection('USES', template); - - for I := 0 to UsesList.Count - 1 do - begin - curLine := sectionContent; - MacroReplace(curLine, '%', - ['USED_UNIT_NAME', UsesList[I] - ]); - - if I = UsesList.Count-1 then - curLine := StrEnsureNoSuffix(',', curLine); - Write(curLine); - end; - end - else - if SectionStart(curLine, 'TYPES') then - begin - sectionContent := FinishSection('TYPES', template); - - for I := 0 to TypesList.Count - 1 do - begin - curLine := sectionContent; - typeUnitName := TypesList[I]; - typeUnitName := Copy(typeUnitName, Pos('=', typeUnitName)+1, MAXINT); - MacroReplace(curLine, '%', - ['TYPE_UNIT_NAME', typeUnitName, - 'TYPE_NAME', TypesList.Names[I] - ]); - Write(curLine); - end; - end - else - begin - Write(curLine); - end; - end; - finally - template.Free; - end; -end; - -{ TRODLIntfConverterFileList } - -function TRODLSplitableConverterFileList.GetItem( - Index: Integer): TRODLSplitableConverterFile; -begin - Result := inherited Items[Index] as TRODLSplitableConverterFile; -end; - -procedure TRODLSplitableConverterFileList.SetItem(Index: Integer; - const Value: TRODLSplitableConverterFile); -begin - inherited Items[Index] := Value; -end; - -{ TRODLIntfConverterFile } - -constructor TRODLSplitableConverterFile.Create(const aLibrary: TRODLLibrary; const aConverter: TRODLSplitableConverter); -begin - inherited Create; - - FLibrary := aLibrary; - FConverter := aConverter; - FRequiredUnits := TStringList.Create; - FRequiredUnits.Sorted := True; - FRequiredUnits.Duplicates := dupIgnore; -end; - -destructor TRODLSplitableConverterFile.Destroy; -begin - FRequiredUnits.Free; - FEnums.Free; - FArrays.Free; - FStructs.Free; - FEventSinks.Free; - FExceptions.Free; - FServices.Free; - - inherited Destroy; -end; - -function TRODLSplitableConverterFile.GetActiveList: TObjectList; -begin - if FActiveList = nil then - begin - SetupLists; - end; - Result := FActiveList; -end; - -procedure TRODLSplitableConverterFile.SetupLists; -begin - if Services.Count > 0 then - begin - FActiveList := Services; - FLibraryList := FConverter.OrderedServices; - end - else if Arrays.Count > 0 then - begin - FActiveList := Arrays; - FLibraryList := FConverter.OrderedArrays; - end - else if Structs.Count > 0 then - begin - FActiveList := Structs; - FLibraryList := FConverter.OrderedStructs; - end - else if Enums.Count > 0 then - begin - FActiveList := Enums; - FLibraryList := FConverter.OrderedEnums; - end - else if EventSinks.Count > 0 then - begin - FActiveList := EventSinks; - FLibraryList := FConverter.OrderedEventSinks; - end - else if Exceptions.Count > 0 then - begin - FActiveList := Exceptions; - FLibraryList := FConverter.OrderedExceptions; - end; -end; - -function TRODLSplitableConverterFile.GetArrays: TObjectList; -begin - if not Assigned(FArrays) then - FArrays := TObjectList.Create(False); - Result := FArrays; -end; - -function TRODLSplitableConverterFile.GetEnums: TObjectList; -begin - if not Assigned(FEnums) then - FEnums := TObjectList.Create(False); - Result := FEnums; -end; - -function TRODLSplitableConverterFile.GetEventSinks: TObjectList; -begin - if not Assigned(FEventSinks) then - FEventSinks := TObjectList.Create(False); - Result := FEventSinks; -end; - -function TRODLSplitableConverterFile.GetExceptions: TObjectList; -begin - if not Assigned(FExceptions) then - FExceptions := TObjectList.Create(False); - Result := FExceptions; -end; - -function TRODLSplitableConverterFile.GetLibraryList: IROStrings; -begin - if FLibraryList = nil then - begin - SetupLists; - end; - Result := FLibraryList; -end; - -function TRODLSplitableConverterFile.GetServices: TObjectList; -begin - if not Assigned(FServices) then - FServices := TObjectList.Create(False); - Result := FServices; -end; - -function TRODLSplitableConverterFile.GetStructs: TObjectList; -begin - if not Assigned(FStructs) then - FStructs := TObjectList.Create(False); - Result := FStructs; -end; - -function TRODLSplitableConverterFile.GetUnitName: string; -var - list: TObjectList; - I: Integer; -begin - if FUnitName = '' then - begin - list := GetActiveList; - for I := 0 to list.Count - 1 do - FUnitName := FUnitName + (list[i] as TRODLEntity).Name + '_'; - FUnitName := FLibrary.Name + '_' + Copy(FUnitName, 1, Length(FUnitName)-1) + FConverter.SplitFilesSuffix; - end; - Result := FUnitName; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverter.pas deleted file mode 100644 index 4bb088b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverter.pas +++ /dev/null @@ -1,3703 +0,0 @@ -unit uRODLTemplateBasedConverter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODLLineStream, uRODL, uROClasses, Classes, Contnrs; - -type - // forward declarations - TRODLTemplateBasedConverter = class; - TServicesSectionClass = class of TServicesSection; - TEventSinksSectionClass = class of TEventSinksSection; - TBaseServiceSection = class; - TBaseOperationSection = class; - TParamsSection = class; - TBaseStructSection = class; - TFieldsSection = class; - TArraysSection = class; - TOutParamsSection = class; - TOutParamsNoStripSection = class; - TFieldSubSectionList = class; - TProcedureOperationsSectionClass = class of TProcedureOperationsSection; - TFunctionOperationsSectionClass = class of TFunctionOperationsSection; - TOperationsSectionClass = class of TOperationsSection; - TParamsNoStripSectionClass = class of TParamsNoStripSection; - TStructsSectionClass = class of TStructsSection; - TExceptionsSectionClass = class of TExceptionsSection; - - TRODLGeneratorSection = class - private - FParent: TRODLTemplateBasedConverter; - protected - FName: string; - - procedure Write(const line: string); - procedure ProcessDocumentation(entity: TRODLEntity; const template: string); - class procedure DoRODLEntityReplacements(var curLine: string; const aEntity: TRODLEntity; const Prefix: string); - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AName: string); virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); virtual; - - property Name: string read FName; - property Parent: TRODLTemplateBasedConverter read FParent; - end; - - TRODLGeneratorSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TRODLGeneratorSection; - procedure SetItem(Index: Integer; const Value: TRODLGeneratorSection); - public - function Add(AObject: TRODLGeneratorSection): Integer; - property Items[Index: Integer]: TRODLGeneratorSection read GetItem write SetItem; default; - end; - - TRODLTemplateBasedConverter = class (TRODLConverter) - private - FTemplateFileName: string; - FSections: TRODLGeneratorSectionList; - FUnitName: string; - FFileExtension: string; - - function GetService(Index: Integer): TRODLService; - function InternalSectionStart(const line: string; var section: TRODLGeneratorSection): Boolean; - procedure SetupOrderedLists(const aLibrary: TRODLLibrary); - function GetWriteDataModule: boolean; - function GetUseDefaultAncestor: Boolean; - protected - FOrderedServices: IROStrings; - FOrderedStructs: IROStrings; - FOrderedExceptions: IROStrings; - FOrderedEventSinks: IROStrings; - FOrderedArrays: IROStrings; - FOrderedEnums: IROStrings; - - FGlobalOrderedArrays: IROStrings; - FGlobalOrderedEnums: IROStrings; - FGlobalOrderedStructs: IROStrings; - - FLibrary: TRODLLibrary; - - FServerClassName: string; - FRequiredUnits: string; - - procedure IntConvert(const aLibrary : TRODLLIbrary; const aTargetEntity : string = ''); override; - - function GetParamFrontModifier(flag: TRODLParamFlag): string; virtual; abstract; - function GetParamBackModifier(flag: TRODLParamFlag): string; virtual; - function GetTypeIdentifier(const originalType: string): string; virtual; abstract; - - procedure LoadTemplateFromResource(aTemplateStrings: TStrings; const AlternateTemplateName: string = ''); - function GetTemplateResourceName(const aFileName: string): string; virtual; - function GetUnitName: string; virtual; - function GetNamespaceName(const aLibrary: TRODLLibrary): string; virtual; - function GetFileExtension: string; virtual; - - function GetServicesSectionClass: TServicesSectionClass; virtual; - function GetEventSinksSectionClass: TEventSinksSectionClass; virtual; - function GetStructsSectionClass: TStructsSectionClass; virtual; - function GetExceptionsSectionClass: TExceptionsSectionClass; virtual; - - procedure DoDefaultReplacements(var curLine: string; const aLibrary: TRODLLibrary); virtual; - procedure SetupServices(const aLibrary: TRODLLibrary; const aTargetEntity : string = ''); virtual; - procedure SetupRequiredUnits; virtual; - procedure ProcessTemplate(const aLibrary: TRODLLibrary; template: TLineStream); virtual; - - property Sections: TRODLGeneratorSectionList read FSections; - property Services[Index: Integer]: TRODLService read GetService; - public - constructor Create(const aLibrary: TRODLLibrary; const aTemplateFileName: string; const aUnitName: string; const aTargetEntity: string = ''); reintroduce; virtual; - destructor Destroy; override; - - procedure SaveResultToFile(const FileName: string); virtual; - procedure SaveResultToStream(const Stream: TStream); virtual; - - property TemplateFileName: string read FTemplateFileName write FTemplateFileName; - property UnitName: string read GetUnitName write FUnitName; - property FileExtension: string read GetFileExtension write FFileExtension; - property RequiredUnits: string read FRequiredUnits write FRequiredUnits; - property WriteDataModule: Boolean read GetWriteDataModule; - property UseDefaultAncestor: Boolean read GetUseDefaultAncestor; - property ServerClassName: string read FServerClassName write FServerClassName; - - // These ones apply to the current file. In split mode, they may well be empty - property OrderedServices: IROStrings read FOrderedServices; - property OrderedStructs: IROStrings read FOrderedStructs; - property OrderedExceptions: IROStrings read FOrderedExceptions; - property OrderedEventSinks: IROStrings read FOrderedEventSinks; - property OrderedArrays: IROStrings read FOrderedArrays; - property OrderedEnums: IROStrings read FOrderedEnums; - - // These ones apply to the entire library. In split mode, they may contain more than what's in the currently generated file - property GlobalOrderedArrays: IROStrings read FGlobalOrderedArrays; - property GlobalOrderedEnums: IROStrings read FGlobalOrderedEnums; - property GlobalOrderedStructs: IROStrings read FGlobalOrderedStructs; - end; - - TTemplatedSection = class (TRODLGeneratorSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); virtual; abstract; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - TBaseServiceSubSection = class (TRODLGeneratorSection) - private - FParentSection: TBaseServiceSection; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); reintroduce; virtual; - - property ParentSection: TBaseServiceSection read FParentSection; - end; - - TTemplatedBaseServiceSubSection = class (TBaseServiceSubSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); virtual; abstract; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); override; - end; - - TBaseServiceSubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TBaseServiceSubSection; - procedure SetItem(Index: Integer; const Value: TBaseServiceSubSection); - public - function Add(AObject: TBaseServiceSubSection): Integer; - property Items[Index: Integer]: TBaseServiceSubSection read GetItem write SetItem; default; - end; - - TBaseProcedureSubSection = class (TRODLGeneratorSection) - private - FParentSection: TBaseOperationSection; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); reintroduce; virtual; - - property ParentSection: TBaseOperationSection read FParentSection; - end; - - TTemplatedBaseProcedureSubSection = class (TBaseProcedureSubSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); virtual; abstract; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - end; - - TBaseProcedureSubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TBaseProcedureSubSection; - procedure SetItem(Index: Integer; const Value: TBaseProcedureSubSection); - public - function Add(AObject: TBaseProcedureSubSection): Integer; - property Items[Index: Integer]: TBaseProcedureSubSection read GetItem write SetItem; default; - end; - - TParamSubSection = class (TRODLGeneratorSection) - private - FParentSection: TParamsSection; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TParamsSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aParameter: TRODLOperationParam; const IsLastParam: Boolean); reintroduce; virtual; - - property ParentSection: TParamsSection read FParentSection; - end; - - TParamSubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TParamSubSection; - procedure SetItem(Index: Integer; const Value: TParamSubSection); - public - function Add(AObject: TParamSubSection): Integer; - property Items[Index: Integer]: TParamSubSection read GetItem write SetItem; default; - end; - - TBaseStructSubSection = class (TRODLGeneratorSection) - private - FParentSection: TBaseStructSection; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aStruct: TRODLBaseStruct); reintroduce; virtual; - - property ParentSection: TBaseStructSection read FParentSection; - end; - - TTemplatedBaseStructSubSection = class (TBaseStructSubSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); virtual; abstract; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - end; - - TBaseStructSubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TBaseStructSubSection; - procedure SetItem(Index: Integer; const Value: TBaseStructSubSection); - public - function Add(AObject: TBaseStructSubSection): Integer; - property Items[Index: Integer]: TBaseStructSubSection read GetItem write SetItem; default; - end; - - TArraySubSection = class (TRODLGeneratorSection) - private - FParentSection: TArraysSection; - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; virtual; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TArraysSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aArray: TRODLArray); reintroduce; virtual; - - property ParentSection: TArraysSection read FParentSection; - end; - - TArraySubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TArraySubSection; - procedure SetItem(Index: Integer; const Value: TArraySubSection); - public - function Add(AObject: TArraySubSection): Integer; - property Items[Index: Integer]: TArraySubSection read GetItem write SetItem; default; - end; - - TFieldSubSection = class (TRODLGeneratorSection) - private - FParentSection: TFieldsSection; - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; virtual; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TFieldsSection; const AName: string); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const IsLastField: Boolean); reintroduce; virtual; - - property ParentSection: TFieldsSection read FParentSection; - end; - - TTemplatedFieldSubSection = class (TFieldSubSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; - const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const IsLastField: Boolean); virtual; abstract; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const IsLastField: Boolean); override; - end; - - TFieldSubSectionList = class (TObjectList) - private - function GetItem(Index: Integer): TFieldSubSection; - procedure SetItem(Index: Integer; const Value: TFieldSubSection); - public - function Add(AObject: TFieldSubSection): Integer; - property Items[Index: Integer]: TFieldSubSection read GetItem write SetItem; default; - end; - - // Base classes - TBaseStructSection = class (TTemplatedSection) - private - protected - FSections: TBaseStructSubSectionList; - - property Sections: TBaseStructSubSectionList read FSections; - function InternalSectionStart(const line: string; var section: TBaseStructSubSection): Boolean; - - function GetAncestorName(const aStruct: TRODLBaseStruct): string; virtual; abstract; - function GetEntityPrefix: string; virtual; abstract; - function GetStructList: IROStrings; virtual; abstract; - - function GetAncestorCollectionName(const aStruct: TRODLBaseStruct): string; - - procedure DoReplacements(var curLine: string; const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); virtual; - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AName: string); override; - destructor Destroy; override; - end; - - TBaseServiceSection = class (TTemplatedSection) - protected - FSections: TBaseServiceSubSectionList; - function InternalSectionStart(const line: string; var section: TBaseServiceSubSection): Boolean; - property Sections: TBaseServiceSubSectionList read FSections; - - function GetAncestorName(const aService: TRODLBaseService): string; virtual; - function GetEntityPrefix: string; virtual; abstract; - function GetServiceList: IROStrings; virtual; abstract; - - procedure DoReplacements(var curLine: string; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); virtual; - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AName: string); override; - destructor Destroy; override; - end; - - TBaseOperationSection = class (TTemplatedBaseServiceSubSection) - protected - FSections: TBaseProcedureSubSectionList; - - function InternalSectionStart(const line: string; var section: TBaseProcedureSubSection): Boolean; - property Sections: TBaseProcedureSubSectionList read FSections; - function GetParamsNoStripSectionClass: TParamsNoStripSectionClass; virtual; - - function OperationApplies(aOperation: TRODLOperation): Boolean; virtual; abstract; - - procedure DoReplacements(var curLine: string; const aOperation: TRODLOperation; - const aService: TRODLBaseService; const aLibrary: TRODLLibrary); virtual; - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection; const AName: string); override; - destructor Destroy; override; - end; - - // REQUIRED_UNITS - TRequiredUnitsSection = class (TRODLGeneratorSection) - protected - procedure DoReplacements(var curLine: string; const unitName: string; const aLibrary: TRODLLibrary); dynamic; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - // USED_RODLS - TUsedRODLsSection = class (TRODLGeneratorSection) - protected - procedure DoReplacements(var curLine: string; unitName: string; const aLibrary: TRODLLibrary); dynamic; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - // SERVICES - TServicesSection = class (TBaseServiceSection) - protected - function GetEntityPrefix: string; override; - function GetServiceList: IROStrings; override; - - function IsSOAPService(const aService : TRODLBaseService) : Boolean; - function GetProxyAncestorName(const aService: TRODLBaseService): string; virtual; - function GetInvokerAncestorName(const aService: TRODLBaseService): string; virtual; - function GetProxySuffix: string; virtual; - function GetProcedureOperationsSectionClass: TProcedureOperationsSectionClass; virtual; - function GetFunctionOperationsSectionClass: TFunctionOperationsSectionClass; virtual; - - procedure DoReplacements(var curLine: string; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - end; - - // ENUMS - TEnumsSection = class (TTemplatedSection) - protected - procedure ProcessValues(enum: TRODLEnum; const template: string); - procedure DoReplacements(var curLine: string; aEnum: TRODLEnum; const aLibrary: TRODLLibrary); dynamic; - - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - class function GetEnumValueName(const enum: TRODLEnum; const ValueIndex: Integer): string; - end; - - // EVENT_SINKS - TEventSinksSection = class (TBaseServiceSection) - protected - function GetEntityPrefix: string; override; - function GetServiceList: IROStrings; override; - - function GetEventSinkWriterAncestorName(const aEventSink: TRODLEventSink): string; dynamic; - function GetEventSinkInvokerAncestorName(const aEventSink: TRODLEventSink): string; dynamic; - function GetOperationsSectionClass: TOperationsSectionClass; virtual; - - procedure DoReplacements(var curLine: string; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - end; - - // ARRAYS - TArraysSection = class (TTemplatedSection) - protected - FSections: TArraySubSectionList; - - function InternalSectionStart(const line: string; var section: TArraySubSection): Boolean; - property Sections: TArraySubSectionList read FSections; - - procedure DoReplacements(var curLine: string; const aArray: TRODLArray; const aLibrary: TRODLLibrary); virtual; - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - destructor Destroy; override; - end; - - // STRUCTS - TStructsSection = class (TBaseStructSection) - protected - function GetEntityPrefix: string; override; - function GetAncestorName(const aStruct: TRODLBaseStruct): string; override; - function GetStructList: IROStrings; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - end; - - // EXCEPTIONS - TExceptionsSection = class (TBaseStructSection) - protected - function GetEntityPrefix: string; override; - function GetAncestorName(const aStruct: TRODLBaseStruct): string; override; - function GetStructList: IROStrings; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - end; - - // OPERATIONS - TOperationsSection = class (TBaseOperationSection) - protected - function OperationApplies(aOperation: TRODLOperation): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); reintroduce; virtual; - end; - - // PROCEDURE_OPERATIONS - TProcedureOperationsSection = class (TBaseOperationSection) - protected - function OperationApplies(aOperation: TRODLOperation): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); reintroduce; virtual; - end; - - // FUNCTION_OPERATIONS - TFunctionOperationsSection = class (TBaseOperationSection) - protected - function OperationApplies(aOperation: TRODLOperation): Boolean; override; - procedure DoReplacements(var curLine: string; const aOperation: TRODLOperation; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); reintroduce; virtual; - end; - - // PARAMS - TParamsSection = class (TTemplatedBaseProcedureSubSection) - private - protected - FSections: TParamSubSectionList; - - function InternalSectionStart(const line: string; var section: TParamSubSection): Boolean; - property Sections: TParamSubSectionList read FSections; - - procedure EnsureStripping(var curLine: string; IsLastParam: Boolean); - - procedure DoReplacements(var curLine: string; const aParameter: TRODLOperationParam; - const aLibrary: TRODLLibrary); virtual; - - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; function CanStrip: Boolean; virtual; - function CanUse(const AParam: TRODLOperationParam): Boolean; virtual; - class function GetAttributeReplacement(const dataType: string): string; virtual; - public - class procedure DoAttributeReplacements(var curLine: string; const dataType: string; const prefix: string); - - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // PARAMS_NO_STRIP - TParamsNoStripSection = class (TParamsSection) - protected - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); override; - end; - - // IF_PARAM_TYPE_COMPLEX - TIfParamTypeComplexSection = class (TParamSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aParameter: TRODLOperationParam; const IsLastParam: Boolean); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); reintroduce; virtual; - end; - - // IF_PARAM_TYPE_SIMPLE - TIfParamTypeSimpleSection = class (TParamSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aParameter: TRODLOperationParam; const IsLastParam: Boolean); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); reintroduce; virtual; - end; - - // IF_PARAM_XXXX_TYPE - TIfParamXXXTypeSection = class (TParamSubSection) - protected - FDataType: string; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aParameter: TRODLOperationParam; const IsLastParam: Boolean); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection; const DataType: string); reintroduce; virtual; - end; - - // IF_PARAM_OTHER_TYPE - TIfParamOtherTypeSection = class (TParamSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aParameter: TRODLOperationParam; const IsLastParam: Boolean); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); reintroduce; virtual; - end; - - // IF_STRUCT_HAS_ANCESTOR - TIfStructHasAncestor = class(TBaseStructSubSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; - const aStruct: TRODLBaseStruct); override; - end; - - // FIELDS - TFieldsSection = class (TTemplatedBaseStructSubSection) - private - protected - FSections: TFieldSubSectionList; - - function InternalSectionStart(const line: string; var section: TFieldSubSection): Boolean; - property Sections: TFieldSubSectionList read FSections; - - function CanStrip: Boolean; virtual; - procedure EnsureStripping(var curLine: string; IsLastField: Boolean); - - procedure DoReplacements(var curLine: string; curField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); - - procedure ProcessField(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; AField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; IsLastField: Boolean); virtual; - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // FIELDS_NO_STRIP - TFieldsNoStripSection = class (TFieldsSection) - protected - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); override; - end; - - // ANCESTOR_FIELDS - TAncestorFieldsSection = class (TFieldsSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); override; - end; - - // ENTIRE_HIERARCHY_FIELDS - TEntireHierarchyFieldsSection = class (TFieldsSection) - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); override; - end; - - // IF_FIELD_XXXX_TYPE - TIfFieldXXXTypeSection = class (TFieldSubSection) - protected - FDataType: string; - - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection; const DataType: string); reintroduce; virtual; - end; - - // IF_FIELD_ARRAY_TYPE - TIfFieldArrayTypeSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_FIELD_ENUM_TYPE - TIfFieldEnumTypeSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_FIELD_STRUCT_TYPE - TIfFieldStructTypeSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_FIELD_TYPE_COMPLEX - TIfFieldTypeComplexSection = class (TTemplatedFieldSubSection) - protected - FSections: TFieldSubSectionList; - - function InternalSectionStart(const line: string; var section: TFieldSubSection): Boolean; - property Sections: TFieldSubSectionList read FSections; - - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; - const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const IsLastField: Boolean); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // IF_AUTO_CREATE_FIELDS - TIfAutoCreateFieldsSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_NOT_AUTO_CREATE_FIELDS - TIfNotAutoCreateFieldsSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_FIELD_TYPE_SIMPLE - TIfFieldTypeSimpleSection = class (TFieldSubSection) - protected - function CanUse(const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_STRING_FIELD - TIfStringFieldSection = class (TIfFieldXXXTypeSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_CURRENCY_FIELD - TIfCurrencyFieldSection = class (TIfFieldXXXTypeSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_DECIMAL_FIELD - TIfDecimalFieldSection = class (TIfFieldXXXTypeSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_VARIANT_FIELD - TIfVariantFieldSection = class (TIfFieldXXXTypeSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); reintroduce; virtual; - end; - - // IF_HAS_FIELDS - TIfHasFieldsSection = class (TTemplatedBaseStructSubSection) - private - FSections: TBaseStructSubSectionList; - function InternalSectionStart(const line: string; var section: TBaseStructSubSection): Boolean; - protected - procedure DoReplacements(var curLine: string; const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // IF_DATA_MODULE - TIfDataModuleSection = class (TRODLGeneratorSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - // IF_DATA_MODULE (inside a SERVICES section) - TIfDataModuleServiceSection = class (TBaseServiceSubSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); override; - end; - - // IF_HYDRA - TIfHydraSection = class (TRODLGeneratorSection) - private - FIsHydraModule: Boolean; - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - // IF_WSDL - TIfWSDLSection = class (TRODLGeneratorSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary); override; - end; - - // ANCESTOR_SERVICES - TAncestorServicesSection = class (TBaseServiceSubSection) - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); reintroduce; virtual; - - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aService: TRODLBaseService); override; - end; - - // IF_HAS_COMPLEX_TYPE - TIfHasComplexTypeSection = class (TTemplatedBaseProcedureSubSection) - private - FSections: TBaseProcedureSubSectionList; - - function InternalSectionStart(const line: string; var section: TBaseProcedureSubSection): Boolean; - property Sections: TBaseProcedureSubSectionList read FSections; - - function OperationHasComplexType(const aOperation: TRODLOperation; const aLibrary: TRODLLibrary): Boolean; - protected - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // IF_ARRAY_TYPE_SIMPLE - TIfArrayTypeSimpleSection = class (TArraySubSection) - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TArraysSection); reintroduce; virtual; - end; - - // IF_ARRAY_TYPE_COMPLEX - TIfArrayTypeComplexSection = class (TArraySubSection) - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TArraysSection); reintroduce; virtual; - end; - - // IF_ARRAY_XXXX_TYPE - TIfArrayXXXTypeSection = class (TArraySubSection) - protected - FDataType: string; - - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection; const DataType: string); reintroduce; virtual; - end; - - // IF_ARRAY_ARRAY_TYPE - TIfArrayArrayTypeSection = class (TArraySubSection) - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection); reintroduce; virtual; - end; - - // IF_ARRAY_ENUM_TYPE - TIfArrayEnumTypeSection = class (TArraySubSection) - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection); reintroduce; virtual; - end; - - // IF_ARRAY_STRUCT_TYPE - TIfArrayStructTypeSection = class (TArraySubSection) - protected - function CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection); reintroduce; virtual; - end; - - // IN_PARAMS - TInParamsSection = class (TParamsSection) - protected - function CanUse(const AParam: TRODLOperationParam): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); override; - end; - - // IN_PARAMS_NO_STRIP - TInParamsNoStripSection = class (TInParamsSection) - protected - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); override; - end; - - // OUT_PARAMS - TOutParamsSection = class (TParamsSection) - protected - function CanUse(const AParam: TRODLOperationParam): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); override; - end; - - // OUT_PARAMS_NO_STRIP - TOutParamsNoStripSection = class (TOutParamsSection) - protected - function CanStrip: Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; const AParentSection: TBaseOperationSection); override; - end; - - // IF_OUT_PARAMS - TIfOutParamsSection = class (TTemplatedBaseProcedureSubSection) - protected - FSections: TBaseProcedureSubSectionList; - - function InternalSectionStart(const line: string; var section: TBaseProcedureSubSection): Boolean; - property Sections: TBaseProcedureSubSectionList read FSections; - - function CanUse(const aOperation: TRODLOperation): Boolean; virtual; - - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); reintroduce; virtual; - destructor Destroy; override; - end; - - // IF_NO_OUT_PARAMS - TIfNoOutParamsSection = class (TIfOutParamsSection) - protected - function CanUse(const aOperation: TRODLOperation): Boolean; override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); override; - end; - - // IF_RESULT_COMPLEX - TIfResultComplexSection = class (TBaseProcedureSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); reintroduce; virtual; - end; - - // IF_RESULT_SIMPLE - TIfResultSimpleSection = class (TBaseProcedureSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); reintroduce; virtual; - end; - - // IF_RESULT_XXXX_TYPE - TIfResultXXXTypeSection = class (TBaseProcedureSubSection) - protected - FDataType: string; - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection; const DataType: string); reintroduce; virtual; - end; - - // IF_RESULT_OTHER_TYPE - TIfResultOtherTypeSection = class (TBaseProcedureSubSection) - public - procedure Process(const sectionText: string; const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); override; - - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); reintroduce; virtual; - end; - - // ARRAYS_IS_FOUND - TArraysIsFound = class (TTemplatedBaseStructSubSection) - protected - procedure DoReplacements(var curLine: string; const aArray: TRODLArray; const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); - procedure ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); override; - public - constructor Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); reintroduce; virtual; - end; - -implementation - -uses - {$IFDEF MSWINDOWS}Windows,{$ENDIF} - {$IFDEF LINUX}Types,Libc,{$ENDIF} - {$IFDEF HYDRA_DESIGNTIME}uEWOTAHelpers,{$ENDIF} - uRODLTemplateBasedConverterUtils, SysUtils, - uROServer, uROTypes, uROSerializer; - -function IsHydraModule : boolean; -{$IFDEF HYDRA_DESIGNTIME} -var - lSource: string; -{$ENDIF HYDRA_DESIGNTIME} -begin - Result := False; - {$IFDEF HYDRA_DESIGNTIME} - if (CurrentProject<>NIL) then begin - lSource := UpperCase(ReadModuleSource(CurrentProject)); - Result := Pos('{#HYDRAMODULE}', lSource)>0; - end; - {$ENDIF HYDRA_DESIGNTIME} -end; - -{ TRODLTemplateBasedConverter } - -constructor TRODLTemplateBasedConverter.Create(const aLibrary: TRODLLibrary; - const aTemplateFileName: string; const aUnitName: string; const aTargetEntity: string); -begin - inherited Create(aLibrary, aTargetEntity); - - FTemplateFileName := ATemplateFileName; - FUnitName := aUnitName; - FSections := TRODLGeneratorSectionList.Create(True); - - // Adding the generic sections - FSections.Add(TRequiredUnitsSection.Create(Self)); - FSections.Add(TUsedRODLsSection.Create(Self)); - FSections.Add(GetServicesSectionClass.Create(Self)); - FSections.Add(TEnumsSection.Create(Self)); - FSections.Add(GetEventSinksSectionClass.Create(Self)); - FSections.Add(TArraysSection.Create(Self)); - FSections.Add(GetStructsSectionClass.Create(Self)); - FSections.Add(GetExceptionsSectionClass.Create(Self)); - FSections.Add(TIfDataModuleSection.Create(Self)); - FSections.Add(TIfHydraSection.Create(Self)); -end; - -destructor TRODLTemplateBasedConverter.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TRODLTemplateBasedConverter.ProcessTemplate(const aLibrary: TRODLLibrary; template: TLineStream); -var - curLine: string; - section: TRODLGeneratorSection; -begin - while not Template.Eof do - begin - curLine := Template.ReadLine; - DoDefaultReplacements(curLine, aLibrary); - - // Line that start a section - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, template), aLibrary); - end - else - // regular line - begin - Write(curLine); - end; - end; -end; - -procedure TRODLTemplateBasedConverter.DoDefaultReplacements(var curLine: string; const aLibrary: TRODLLibrary); -begin - // Default macros - TRODLGeneratorSection.DoRODLEntityReplacements(curLine, aLibrary, 'LIBRARY'); - MacroReplace(curLine, '%', - ['UNIT_NAME', GetUnitName, - 'NAMESPACE_NAME', GetNamespaceName(aLibrary) - ]); -end; - -function TRODLTemplateBasedConverter.InternalSectionStart(const line: string; - var section: TRODLGeneratorSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TRODLTemplateBasedConverter.LoadTemplateFromResource(aTemplateStrings: TStrings; const AlternateTemplateName: string = ''); -var - templateStream: TResourceStream; - usedTemplateName: string; -begin - if Assigned(aTemplateStrings) then - begin - if Length(AlternateTemplateName) > 0 then - usedTemplateName := AlternateTemplateName - else - usedTemplateName := TemplateFileName; - - templateStream := TResourceStream.Create(hInstance, GetTemplateResourceName(usedTemplateName), RT_RCDATA); - try - aTemplateStrings.LoadFromStream(templateStream); - finally - templateStream.Free; - end; - end; -end; - -function TRODLTemplateBasedConverter.GetEventSinksSectionClass: TEventSinksSectionClass; -begin - Result := TEventSinksSection; -end; - -function TRODLTemplateBasedConverter.GetExceptionsSectionClass: TExceptionsSectionClass; -begin - Result := TExceptionsSection; -end; - -function TRODLTemplateBasedConverter.GetFileExtension: string; -begin - Result := FFileExtension; -end; - -function TRODLTemplateBasedConverter.GetNamespaceName( - const aLibrary: TRODLLibrary): string; -begin - Result := aLibrary.Namespace; - if Length(Result) = 0 then - Result := aLibrary.Name; -end; - -function TRODLTemplateBasedConverter.GetParamBackModifier( - flag: TRODLParamFlag): string; -begin - Result := ''; -end; - -function TRODLTemplateBasedConverter.GetService(Index: Integer): TRODLService; -begin - Result := FOrderedServices.Objects[Index] as TRODLService; -end; - -function TRODLTemplateBasedConverter.GetServicesSectionClass: TServicesSectionClass; -begin - Result := TServicesSection; -end; - -function TRODLTemplateBasedConverter.GetStructsSectionClass: TStructsSectionClass; -begin - Result := TStructsSection; -end; - -function TRODLTemplateBasedConverter.GetTemplateResourceName( - const aFileName: string): string; -begin - // By default, return the file name without its path part replacing dots - // and spaces by an underscore, all this uppercased - Result := ExtractFileName(aFileName); - Result := StringReplace(Result, '.', '_', [rfReplaceAll]); - Result := StringReplace(Result, ' ', '_', [rfReplaceAll]); - Result := UpperCase(Result); -end; - -function TRODLTemplateBasedConverter.GetUnitName: string; -begin - Result := FUnitName; -end; - -function TRODLTemplateBasedConverter.GetUseDefaultAncestor: Boolean; -begin - Result := SameText(ServerClassName, TRORemotable.ClassName); -end; - -function TRODLTemplateBasedConverter.GetWriteDataModule: boolean; -begin - Result := not UseDefaultAncestor; -end; - -procedure TRODLTemplateBasedConverter.IntConvert(const aLibrary: TRODLLIbrary; - const aTargetEntity: string); -var - templateContent: TStringList; - template: TLineStream; -begin - FLibrary := aLibrary; - - SetupServices(aLibrary); - SetupOrderedLists(aLibrary); - - template := TLineStream.Create(''); - try - // Read template content - templateContent := TStringList.Create; - try - if FileExists(TemplateFileName) then - templateContent.LoadFromFile(TemplateFileName) - else - LoadTemplateFromResource(templateContent); - template.WriteString(templateContent.Text); - template.Position := 0; - finally - templateContent.Free; - end; - - // Process it - ProcessTemplate(aLibrary, template); - finally - template.Free; - end; -end; - -procedure TRODLTemplateBasedConverter.SaveResultToFile(const FileName: string); -begin - Buffer.SaveToFile(FileName); -end; - -procedure TRODLTemplateBasedConverter.SaveResultToStream(const Stream: TStream); -begin - Buffer.SaveToStream(Stream); -end; - -procedure TRODLTemplateBasedConverter.SetupOrderedLists(const aLibrary: TRODLLibrary); -var - I: Integer; -begin - FOrderedStructs := aLibrary.CalcStructOrder; - FOrderedExceptions := aLibrary.CalcExceptionOrder; - FOrderedEventSinks := aLibrary.CalcEventSinkOrder; - - //ToDo : This should use a CalcArraysOrder method which is currently not present in uRODL.pas - FOrderedArrays := NewROStrings(); - for I := 0 to aLibrary.ArrayCount-1 do - begin - if not aLibrary.Arrays[i].IsFromUsedRodl then - FOrderedArrays.AddObject(aLibrary.Arrays[i].Info.Name, aLibrary.Arrays[i]); - end; - - //ToDo : This should use a CalcEnumsOrder method which is currently not present in uRODL.pas - FOrderedEnums := NewROStrings(); - for I := 0 to aLibrary.EnumCount-1 do - begin - if not aLibrary.Enums[i].IsFromUsedRodl then - FOrderedEnums.AddObject(aLibrary.Enums[i].Info.Name, aLibrary.Enums[i]); - end; - - FGlobalOrderedStructs := NewROStrings(); - FGlobalOrderedStructs.AddStrings(FOrderedStructs.Strings); - FGlobalOrderedArrays := NewROStrings(); - FGlobalOrderedArrays.AddStrings(FOrderedArrays.Strings); - FGlobalOrderedEnums := NewROStrings(); - FGlobalOrderedEnums.AddStrings(FOrderedEnums.Strings); -end; - -procedure TRODLTemplateBasedConverter.SetupRequiredUnits; -begin - // nothing to do by default. -end; - -procedure TRODLTemplateBasedConverter.SetupServices( - const aLibrary: TRODLLibrary; const aTargetEntity : string = ''); -var - I: Integer; - orderedServices: IROStrings; - curService: TRODLService; -begin - if not Assigned(FOrderedServices) then - FOrderedServices := NewROStrings() - else - FOrderedServices.Clear; - - // By default, all the services of the library are of interest to us - orderedServices := aLibrary.CalcServiceOrder; - for I := 0 to orderedServices.Count - 1 do - begin - curService := orderedServices.Objects[I] as TRODLService; - if not curService.IsFromUsedRodl then - FOrderedServices.AddObject(curService.Name, curService); - end; -end; - -{ TRODLGeneratorSection } - -constructor TRODLGeneratorSection.Create(AParent: TRODLTemplateBasedConverter; - const AName: string); -begin - inherited Create; - - FParent := AParent; - FName := AName; -end; - -class procedure TRODLGeneratorSection.DoRODLEntityReplacements(var curLine: string; - const aEntity: TRODLEntity; const Prefix: string); -begin - MacroReplace(curLine, '%', - [Prefix + '_NAME', aEntity.Name, - Prefix + '_UID', GUIDToString(aEntity.UID) - ]); -end; - -procedure TRODLGeneratorSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -begin - Write(sectionText); -end; - -procedure TRODLGeneratorSection.ProcessDocumentation(entity: TRODLEntity; - const template: string); -var - curLine: string; - content: string; -begin - content := Trim(entity.Documentation); - if Length(content) > 0 then - begin - curLine := template; - MacroReplace(curLine, '%', - ['CONTENT', content - ]); - Write(curLine); - end; -end; - -procedure TRODLGeneratorSection.Write(const line: string); -begin - Parent.Write(line); -end; - -{ TRODLGeneratorSectionList } - -function TRODLGeneratorSectionList.Add(AObject: TRODLGeneratorSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TRODLGeneratorSectionList.GetItem(Index: Integer): TRODLGeneratorSection; -begin - Result := inherited Items[Index] as TRODLGeneratorSection; -end; - -procedure TRODLGeneratorSectionList.SetItem(Index: Integer; - const Value: TRODLGeneratorSection); -begin - inherited Items[Index] := Value; -end; - -{ TTemplatedSection } - -procedure TTemplatedSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -var - sectionTemplate: TLineStream; -begin - sectionTemplate := TLineStream.Create(sectionText); - try - ProcessTemplate(sectionTemplate, aLibrary); - finally - sectionTemplate.Free; - end; -end; - -{ TServiceSection } - -constructor TBaseServiceSubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseServiceSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TBaseServiceSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aService: TRODLBaseService); -begin - inherited Process(sectionText, aLibrary); -end; - -{ TTemplatedServiceSection } - -procedure TTemplatedBaseServiceSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aService: TRODLBaseService); -var - sectionTemplate: TLineStream; -begin - sectionTemplate := TLineStream.Create(sectionText); - try - ProcessTemplate(sectionTemplate, aLibrary, aService); - finally - sectionTemplate.Free; - end; -end; - -{ TServiceSectionList } - -function TBaseServiceSubSectionList.Add(AObject: TBaseServiceSubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TBaseServiceSubSectionList.GetItem(Index: Integer): TBaseServiceSubSection; -begin - Result := inherited Items[Index] as TBaseServiceSubSection; -end; - -procedure TBaseServiceSubSectionList.SetItem(Index: Integer; - const Value: TBaseServiceSubSection); -begin - inherited Items[Index] := Value; -end; - -{ TProcedureSubSection } - -constructor TBaseProcedureSubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TBaseProcedureSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -begin - inherited Process(sectionText, aLibrary); -end; - -{ TTemplatedProcedureSubSection } - -procedure TTemplatedBaseProcedureSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -var - sectionTemplate: TLineStream; -begin - sectionTemplate := TLineStream.Create(sectionText); - try - ProcessTemplate(sectionTemplate, aLibrary, aOperation, aService); - finally - sectionTemplate.Free; - end; -end; - -{ TProcedureSubSectionList } - -function TBaseProcedureSubSectionList.Add(AObject: TBaseProcedureSubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TBaseProcedureSubSectionList.GetItem(Index: Integer): TBaseProcedureSubSection; -begin - Result := inherited Items[Index] as TBaseProcedureSubSection; -end; - -procedure TBaseProcedureSubSectionList.SetItem(Index: Integer; - const Value: TBaseProcedureSubSection); -begin - inherited Items[Index] := Value; -end; - -{ TParamSubSection } - -constructor TParamSubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TParamsSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TParamSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aParameter: TRODLOperationParam; const IsLastParam: Boolean); -var - curLine: string; -begin - curLine := sectionText; - - ParentSection.DoReplacements(curLine, aParameter, aLibrary); - - ParentSection.EnsureStripping(curLine, IsLastParam); - inherited Process(curLine, aLibrary); -end; - -{ TParamSubSectionList } - -function TParamSubSectionList.Add(AObject: TParamSubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TParamSubSectionList.GetItem(Index: Integer): TParamSubSection; -begin - Result := inherited Items[Index] as TParamSubSection; -end; - -procedure TParamSubSectionList.SetItem(Index: Integer; - const Value: TParamSubSection); -begin - inherited Items[Index] := Value; -end; - -{ TStructSubSection } - -constructor TBaseStructSubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TBaseStructSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -begin - inherited Process(sectionText, aLibrary); -end; - -{ TTemplatedStructSubSection } - -procedure TTemplatedBaseStructSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -var - sectionTemplate: TLineStream; -begin - sectionTemplate := TLineStream.Create(sectionText); - try - ProcessTemplate(sectionTemplate, aLibrary, aStruct); - finally - sectionTemplate.Free; - end; -end; - -{ TStructSubSectionList } - -function TBaseStructSubSectionList.Add(AObject: TBaseStructSubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TBaseStructSubSectionList.GetItem(Index: Integer): TBaseStructSubSection; -begin - Result := inherited Items[Index] as TBaseStructSubSection; -end; - -procedure TBaseStructSubSectionList.SetItem(Index: Integer; - const Value: TBaseStructSubSection); -begin - inherited Items[Index] := Value; -end; - -{ TFieldSubSection } - -function TFieldSubSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := True; -end; - -constructor TFieldSubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TFieldsSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TFieldSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct; const IsLastField: Boolean); -var - curLine: string; -begin - if CanUse(aField, aStruct) then - begin - curLine := sectionText; - - ParentSection.DoReplacements(curLine, aField, aStruct, aLibrary); - - ParentSection.EnsureStripping(curLine, IsLastField); - inherited Process(curLine, aLibrary); - end; -end; - -{ TTemplatedFieldSubSection } - -procedure TTemplatedFieldSubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct; const IsLastField: Boolean); -var - sectionTemplate: TLineStream; -begin - if CanUse(aField, aStruct) then - begin - sectionTemplate := TLineStream.Create(sectionText); - try - ProcessTemplate(sectionTemplate, aLibrary, aField, aStruct, IsLastField); - finally - sectionTemplate.Free; - end; - end; -end; - -{ TFieldSubSectionList } - -function TFieldSubSectionList.Add(AObject: TFieldSubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TFieldSubSectionList.GetItem(Index: Integer): TFieldSubSection; -begin - Result := inherited Items[Index] as TFieldSubSection; -end; - -procedure TFieldSubSectionList.SetItem(Index: Integer; - const Value: TFieldSubSection); -begin - inherited Items[Index] := Value; -end; - -{ TArraySubSection } - -function TArraySubSection.CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; -begin - Result := True; -end; - -constructor TArraySubSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TArraysSection; const AName: string); -begin - inherited Create(AParent, AName); - - FParentSection := AParentSection; -end; - -procedure TArraySubSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aArray: TRODLArray); -var - curLine: string; -begin - if CanUse(aArray, aLibrary) then - begin - curLine := sectionText; - - ParentSection.DoReplacements(curLine, aArray, aLibrary); - - inherited Process(curLine, aLibrary); - end; -end; - -{ TArraySubSectionList } - -function TArraySubSectionList.Add(AObject: TArraySubSection): Integer; -begin - Result := inherited Add(AObject); -end; - -function TArraySubSectionList.GetItem(Index: Integer): TArraySubSection; -begin - Result := inherited Items[Index] as TArraySubSection; -end; - -procedure TArraySubSectionList.SetItem(Index: Integer; - const Value: TArraySubSection); -begin - inherited Items[Index] := Value; -end; - -{ TBaseStructSection } - -constructor TBaseStructSection.Create(AParent: TRODLTemplateBasedConverter; const AName: string); -begin - inherited Create(AParent, AName); - - FSections := TBaseStructSubSectionList.Create(True); - - FSections.Add(TIfStructHasAncestor.Create(AParent, Self)); - FSections.Add(TFieldsSection.Create(AParent, Self)); - FSections.Add(TFieldsNoStripSection.Create(AParent, Self)); - FSections.Add(TIfHasFieldsSection.Create(AParent, Self)); - FSections.Add(TAncestorFieldsSection.Create(AParent, Self)); - FSections.Add(TEntireHierarchyFieldsSection.Create(AParent, Self)); -end; - -destructor TBaseStructSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -function TBaseStructSection.InternalSectionStart(const line: string; - var section: TBaseStructSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TBaseStructSection.DoReplacements(var curLine: string; - const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - DoRODLEntityReplacements(curLine, aStruct, GetEntityPrefix); - - MacroReplace(curLine, '%', - [GetEntityPrefix + '_ANCESTOR_NAME', GetAncestorName(aStruct) - ]); - - // Note: this might be better moved to the "Delphi" classes as Collection - // is a Delphi specific, AFAIK - MacroReplace(curLine, '%', - [GetEntityPrefix + '_COLLECTION_NAME', aStruct.Name + COLLECTION_SUFFIX, - GetEntityPrefix + '_ANCESTOR_COLLECTION_NAME', GetAncestorCollectionName(aStruct) - ]); -end; - -function TBaseStructSection.GetAncestorCollectionName( - const aStruct: TRODLBaseStruct): string; -begin - Result := aStruct.Ancestor; - if Length(Result) = 0 then - Result := DEFAULT_STRUCT_COLLECTION_ANCESTOR - else - Result := Result + COLLECTION_SUFFIX; -end; - -procedure TBaseStructSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary); -var - I: Integer; - curStruct: TRODLBaseStruct; - curLine: string; - section: TBaseStructSubSection; -begin - for I := 0 to GetStructList.Count - 1 do - begin - curStruct := GetStructList.Objects[I] as TRODLBaseStruct; - if not curStruct.IsFromUsedRodl then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, curStruct, aLibrary); - - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, curStruct); - end - else - if SectionStart(curLine, 'DOCUMENTATION') then - ProcessDocumentation(curStruct, FinishSection('DOCUMENTATION', sectionTemplate)) - else - Write(curLine); - end; - end; - end; -end; - -{ TBaseServiceSection } - -constructor TBaseServiceSection.Create(AParent: TRODLTemplateBasedConverter; const AName: string); -begin - inherited Create(AParent, AName); - - FSections := TBaseServiceSubSectionList.Create(True); - - // Adding the sub sections - FSections.Add(TIfDataModuleServiceSection.Create(AParent, Self)); - FSections.Add(TAncestorServicesSection.Create(AParent, Self)); -end; - -destructor TBaseServiceSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TBaseServiceSection.DoReplacements(var curLine: string; - const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - DoRODLEntityReplacements(curLine, aService, GetEntityPrefix); - - MacroReplace(curLine, '%', - [GetEntityPrefix + '_ANCESTOR_NAME', GetAncestorName(aService) - ]); -end; - -function TBaseServiceSection.GetAncestorName( - const aService: TRODLBaseService): string; -begin - Result := aService.Ancestor; -end; - -function TBaseServiceSection.InternalSectionStart(const line: string; - var section: TBaseServiceSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TBaseServiceSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary); -var - I: Integer; - curService: TRODLBaseService; - curLine: string; - section: TBaseServiceSubSection; -begin - for I := 0 to GetServiceList.Count - 1 do - begin - curService := GetServiceList.Objects[I] as TRODLBaseService; - if Assigned(curService.Default) then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, curService, aLibrary); - - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, curService); - end - else - if SectionStart(curLine, 'DOCUMENTATION') then - begin - ProcessDocumentation(curService, FinishSection('DOCUMENTATION', sectionTemplate)) - end - else - begin - Write(curLine); - end; - end; - end; - end; -end; - -{ TBaseOperationSection } - -constructor TBaseOperationSection.Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection; const AName: string); -var - DataType: TRODataType; -begin - inherited Create(AParent, AParentSection, AName); - - FSections := TBaseProcedureSubSectionList.Create(True); - - // Add subsections - FSections.Add(TParamsSection.Create(AParent, Self)); - FSections.Add(GetParamsNoStripSectionClass.Create(AParent, Self)); - FSections.Add(TInParamsSection.Create(AParent, Self)); - FSections.Add(TInParamsNoStripSection.Create(AParent, Self)); - FSections.Add(TOutParamsSection.Create(AParent, Self)); - FSections.Add(TOutParamsNoStripSection.Create(AParent, Self)); - FSections.Add(TIfHasComplexTypeSection.Create(AParent, Self)); - FSections.Add(TIfOutParamsSection.Create(AParent, Self)); - FSections.Add(TIfNoOutParamsSection.Create(AParent, Self)); - FSections.Add(TIfResultComplexSection.Create(AParent, Self)); - FSections.Add(TIfResultSimpleSection.Create(AParent, Self)); - FSections.Add(TIfResultOtherTypeSection.Create(Parent, Self)); - for DataType := Low(DataTypeNames) to High(DataTypeNames) do - FSections.Add(TIfResultXXXTypeSection.Create(Parent, Self, DataTypeNames[DataType])); -end; - -destructor TBaseOperationSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TBaseOperationSection.DoReplacements(var curLine: string; - const aOperation: TRODLOperation; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -begin - DoRODLEntityReplacements(curLine, aOperation, 'OPERATION'); - // Next call will also call Parent.DoDefaultReplacements - ParentSection.DoReplacements(curLine, aService, aLibrary); -end; - -function TBaseOperationSection.GetParamsNoStripSectionClass: TParamsNoStripSectionClass; -begin - Result := TParamsNoStripSection; -end; - -function TBaseOperationSection.InternalSectionStart(const line: string; - var section: TBaseProcedureSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TBaseOperationSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aService: TRODLBaseService); -var - curOpIndex: Integer; - curOp: TRODLOperation; - curLine: string; - section: TBaseProcedureSubSection; -begin - for curOpIndex := 0 to aService.Default.Count - 1 do - begin - curOp := aService.Default.Items[curOpIndex]; - - if OperationApplies(curOp) then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, curOp, aService, aLibrary); - - if InternalSectionStart(curLine, section) then - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, curOp, aService) - else - Write(curLine); - end; - end; - end; -end; - -{ TRequiredUnitsSection } - -constructor TRequiredUnitsSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'REQUIRED_UNITS'); -end; - -procedure TRequiredUnitsSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -var - tmpStringList: TStringList; - curLine: string; - I: Integer; -begin - tmpStringList := TStringList.Create; - try - tmpStringList.Delimiter := ','; - tmpStringList.DelimitedText := Parent.RequiredUnits; - for I := 0 to tmpStringList.Count - 1 do - begin - curLine := sectionText; - DoReplacements(curLine, tmpStringList[I], aLibrary); - Write(curLine); - end; - finally - tmpStringList.Free; - end; -end; - -procedure TRequiredUnitsSection.DoReplacements(var curLine: string; const unitName: string; const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - MacroReplace(curLine, '%', - ['REQUIRED_UNIT_NAME', unitName - ]); -end; - -{ TUsedRODLsSection } - -constructor TUsedRODLsSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'USED_RODLS'); -end; - -procedure TUsedRODLsSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -var - i: Integer; - unitName: string; - curLine: string; -begin - for i := 0 to aLibrary.UseCount-1 do - begin - if aLibrary.Use[i].LoadedRodlLibraryName <> '' then - unitName := aLibrary.Use[i].LoadedRodlLibraryName + '_Intf' - else - unitName := ChangeFileExt(ExtractFilename(aLibrary.Use[i].RodlFile),'')+'_Intf'; - - curLine := sectionText; - DoReplacements(curLine, unitName, aLibrary); - Write(curLine); - end; -end; - -procedure TUsedRODLsSection.DoReplacements(var curLine: string; unitName: string; const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - MacroReplace(curLine, '%', - ['USED_RODL_UNIT_NAME', unitName - ]); -end; - -{ TServicesSection } - -constructor TServicesSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'SERVICES'); - - FSections.Add(GetProcedureOperationsSectionClass.Create(AParent, Self)); - FSections.Add(GetFunctionOperationsSectionClass.Create(AParent, Self)); -end; - -procedure TServicesSection.DoReplacements(var curLine: string; - const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -var - urn: string; -begin - inherited DoReplacements(curLine, aService, aLibrary); - - MacroReplace(curLine, '%', - ['SERVICE_PROXY_ANCESTOR_NAME', GetProxyAncestorName(aService), - 'SERVICE_INVOKER_ANCESTOR_NAME', GetInvokerAncestorName(aService) - ]); - - // Write additional SOAP information - if IsSOAPService(aService) then - begin - MacroReplace(curLine, '%', - [GetEntityPrefix + '_LOCATION', aService.Info.Attributes.Values['Location'] - ]); - - if (aService.Default.Count>0) then - begin - urn := aService.Default.Items[0].Info.Attributes.Values['Action']; - if (urn='') then - urn := aService.Default.Items[0].Info.Attributes.Values['InputNamespace']; // Apache ones... - - if (Pos('#', urn)>0) then - Delete(urn, Pos('#', urn), Length(urn)); - MacroReplace(curLine, '%', - [GetEntityPrefix + '_URN', urn - ]); - end; - end; -end; - -function TServicesSection.GetEntityPrefix: string; -begin - Result := 'SERVICE'; -end; - -function TServicesSection.GetFunctionOperationsSectionClass: TFunctionOperationsSectionClass; -begin - Result := TFunctionOperationsSection; -end; - -function TServicesSection.GetInvokerAncestorName( - const aService: TRODLBaseService): string; -begin - if Length(aService.Ancestor) = 0 then - Result := DEFAULT_SERVICE_INVOKER_ANCESTOR_NAME - else - Result := aService.Ancestor + SERVICE_INVOKER_SUFFIX; -end; - -function TServicesSection.GetProcedureOperationsSectionClass: TProcedureOperationsSectionClass; -begin - Result := TProcedureOperationsSection; -end; - -function TServicesSection.GetProxyAncestorName( - const aService: TRODLBaseService): string; -begin - if Length(aService.Ancestor) = 0 then - Result := DEFAULT_SERVICE_PROXY_ANCESTOR_NAME - else - Result := aService.Ancestor + GetProxySuffix; -end; - -function TServicesSection.GetProxySuffix: string; -begin - Result := SERVICE_PROXY_SUFFIX;; -end; - -function TServicesSection.GetServiceList: IROStrings; -begin - Result := Parent.FOrderedServices; -end; - -function TServicesSection.IsSOAPService(const aService: TRODLBaseService): Boolean; -begin - Result := aService.Attributes.Values['Type'] = 'SOAP'; -end; - -{ TEnumsSection } - -constructor TEnumsSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'ENUMS'); -end; - -procedure TEnumsSection.DoReplacements(var curLine: string; aEnum: TRODLEnum; - const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - DoRODLEntityReplacements(curLine, aEnum, 'ENUM'); -end; - -class function TEnumsSection.GetEnumValueName(const enum: TRODLEnum; - const ValueIndex: Integer): string; -begin - Result := enum[ValueIndex].Name; - if enum.PrefixEnumValues then - Result := enum.Name + '_' + Result; -end; - -procedure TEnumsSection.ProcessTemplate(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary); -var - I: Integer; - curEnum: TRODLEnum; - curLine: string; -begin - for I := 0 to Parent.FOrderedEnums.Count - 1 do - begin - curEnum := Parent.FOrderedEnums.Objects[I] as TRODLEnum; - if not curEnum.IsFromUsedRodl then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - DoReplacements(curLine, curEnum, aLibrary); - - if SectionStart(curLine, 'VALUES') then - ProcessValues(curEnum, FinishSection('VALUES', sectionTemplate)) - else - if SectionStart(curLine, 'DOCUMENTATION') then - ProcessDocumentation(curEnum, FinishSection('DOCUMENTATION', sectionTemplate)) - else - Write(curLine); - end; - end; - end; -end; - -procedure TEnumsSection.ProcessValues(enum: TRODLEnum; const template: string); -var - I: Integer; - curLine: string; -begin - for I := 0 to enum.Count - 1 do - begin - curLine := template; - - MacroReplace(curLine, '%', - ['VALUE_NAME', GetEnumValueName(enum, I) - ]); - - if I = enum.Count - 1 then - begin - curLine := StrEnsureNoSuffix(';', TrimRight(curLine)); - curLine := StrEnsureNoSuffix(',', TrimRight(curLine)); - end; - Write(curLine); - end; -end; - -{ TEventSinksSection } - -constructor TEventSinksSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'EVENT_SINKS'); - - FSections.Add(GetOperationsSectionClass.Create(AParent, Self)); -end; - -procedure TEventSinksSection.DoReplacements(var curLine: string; - const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -var - eventSink: TRODLEventSink; -begin - inherited DoReplacements(curLine, aService, aLibrary); - - eventSink := aService as TRODLEventSink; - MacroReplace(curLine, '%', - ['EVENT_SINK_WRITER_ANCESTOR_NAME', GetEventSinkWriterAncestorName(eventSink), - 'EVENT_SINK_INVOKER_ANCESTOR_NAME', GetEventSinkInvokerAncestorName(eventSink) - ]); -end; - -function TEventSinksSection.GetEntityPrefix: string; -begin - Result := 'EVENT_SINK'; -end; - -function TEventSinksSection.GetEventSinkInvokerAncestorName( - const aEventSink: TRODLEventSink): string; -begin - Result := aEventSink.Ancestor; - if Length(Result) = 0 then - Result := DEFAULT_EVENT_SINK_INVOKER_ANCESTOR_NAME - else - Result := Result + EVENT_SINK_INVOKER_SUFFIX; -end; - -function TEventSinksSection.GetEventSinkWriterAncestorName( - const aEventSink: TRODLEventSink): string; -begin - Result := aEventSink.Ancestor; - if Length(Result) = 0 then - Result := DEFAULT_EVENT_SINK_WRITER_ANCESTOR_NAME - else - Result := Result + EVENT_SINK_WRITER_SUFFIX; -end; - -function TEventSinksSection.GetOperationsSectionClass: TOperationsSectionClass; -begin - Result := TOperationsSection; -end; - -function TEventSinksSection.GetServiceList: IROStrings; -begin - Result := Parent.FOrderedEventSinks; -end; - -{ TArraysSection } - -constructor TArraysSection.Create(AParent: TRODLTemplateBasedConverter); -var - DataType: TRODataType; -begin - inherited Create(AParent, 'ARRAYS'); - - FSections := TArraySubSectionList.Create(True); - - FSections.Add(TIfArrayTypeSimpleSection.Create(AParent, Self)); - FSections.Add(TIfArrayTypeComplexSection.Create(AParent, Self)); - FSections.Add(TIfArrayArrayTypeSection.Create(AParent, Self)); - FSections.Add(TIfArrayEnumTypeSection.Create(AParent, Self)); - FSections.Add(TIfArrayStructTypeSection.Create(AParent, Self)); - for DataType := Low(TRODataType) to High(TRODataType) do - FSections.Add(TIfArrayXXXTypeSection.Create(AParent, Self, DataTypeNames[DataType])); - FSections.Add(TIfArrayXXXTypeSection.Create(AParent, Self, 'Utf8String')); -end; - -destructor TArraysSection.Destroy; -begin - FSections.Free; - - inherited; -end; - -procedure TArraysSection.DoReplacements(var curLine: string; - const aArray: TRODLArray; const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - DoRODLEntityReplacements(curLine, aArray, 'ARRAY'); - MacroReplace(curLine, '%', - ['ARRAY_TYPE', Parent.GetTypeIdentifier(aArray.ElementType) - ]); -end; - -function TArraysSection.InternalSectionStart(const line: string; - var section: TArraySubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TArraysSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary); -var - I: Integer; - curArray: TRODLArray; - curLine: string; - section: TArraySubSection; -begin - for I := 0 to FParent.FOrderedArrays.Count - 1 do - begin - curArray := FParent.FOrderedArrays.Objects[I] as TRODLArray; - if not curArray.IsFromUsedRodl then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, curArray, aLibrary); - - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, curArray) - end - else - if SectionStart(curLine, 'DOCUMENTATION') then - begin - ProcessDocumentation(curArray, FinishSection('DOCUMENTATION', sectionTemplate)) - end - else - begin - Write(curLine); - end; - end; - end; - end; -end; - -{ TStructsSection } - -constructor TStructsSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'STRUCTS'); - - FSections.Add(TArraysIsFound.Create(AParent, Self)); -end; - -function TStructsSection.GetAncestorName( - const aStruct: TRODLBaseStruct): string; -begin - Result := aStruct.Ancestor; - if Length(Result) = 0 then - Result := DEFAULT_STRUCT_ANCESTOR; -end; - -function TStructsSection.GetEntityPrefix: string; -begin - Result := 'STRUCT'; -end; - -function TStructsSection.GetStructList: IROStrings; -begin - Result := Parent.FOrderedStructs; -end; - -{ TExceptionsSection } - -constructor TExceptionsSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'EXCEPTIONS'); -// FSections.Add(TSerializerSection.Create(AParent, Self)); -end; - -function TExceptionsSection.GetEntityPrefix: string; -begin - Result := 'EXCEPTION'; -end; - -function TExceptionsSection.GetStructList: IROStrings; -begin - Result := Parent.FOrderedExceptions; -end; - -function TExceptionsSection.GetAncestorName( - const aStruct: TRODLBaseStruct): string; -begin - Result := aStruct.Ancestor; - if Length(Result) = 0 then - Result := DEFAULT_EXCEPTION_ANCESTOR; -end; - -{ TOperationsSection } - -constructor TOperationsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseServiceSection); -begin - inherited Create(AParent, AParentSection, 'OPERATIONS'); -end; - -function TOperationsSection.OperationApplies( - aOperation: TRODLOperation): Boolean; -begin - Result := True; -end; - -{ TProcedureOperationsSection } - -constructor TProcedureOperationsSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); -begin - inherited Create(AParent, AParentSection, 'PROCEDURE_OPERATIONS'); -end; - -function TProcedureOperationsSection.OperationApplies( - aOperation: TRODLOperation): Boolean; -begin - Result := not Assigned(aOperation.Result) or (aOperation.Result.DataType = ''); -end; - -{ TFunctionOperationsSection } - -constructor TFunctionOperationsSection.Create(AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); -begin - inherited Create(AParent, AParentSection, 'FUNCTION_OPERATIONS'); -end; - -procedure TFunctionOperationsSection.DoReplacements(var curLine: string; - const aOperation: TRODLOperation; const aService: TRODLBaseService; const aLibrary: TRODLLibrary); -begin - inherited DoReplacements(curLine, aOperation, aService, aLibrary); - - GetParamsNoStripSectionClass.DoAttributeReplacements(curLine, aOperation.Result.DataType, 'OPERATION_RESULT'); - - MacroReplace(curLine, '%', - ['OPERATION_RESULT', Parent.GetTypeIdentifier(aOperation.Result.DataType) - ]); -end; - -function TFunctionOperationsSection.OperationApplies( - aOperation: TRODLOperation): Boolean; -begin - Result := Assigned(aOperation.Result) and (aOperation.Result.DataType <> ''); -end; - -{ TParamsSection } - -function TParamsSection.CanStrip: Boolean; -begin - Result := True; -end; - -function TParamsSection.CanUse(const AParam: TRODLOperationParam): Boolean; -begin - Result := True; -end; - -constructor TParamsSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -var - DataType: TRODataType; -begin - inherited Create(AParent, AParentSection, 'PARAMS'); - - FSections := TParamSubSectionList.Create(True); - - FSections.Add(TIfParamTypeComplexSection.Create(Parent, Self)); - FSections.Add(TIfParamTypeSimpleSection.Create(Parent, Self)); - FSections.Add(TIfParamOtherTypeSection.Create(Parent, Self)); - for DataType := Low(DataTypeNames) to High(DataTypeNames) do - FSections.Add(TIfParamXXXTypeSection.Create(Parent, Self, DataTypeNames[DataType])); -end; - -destructor TParamsSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TParamsSection.EnsureStripping(var curLine: string; IsLastParam: Boolean); -begin - if IsLastParam and CanStrip then - begin - curLine := StrEnsureNoSuffix(';', TrimRight(curLine)); - curLine := StrEnsureNoSuffix(',', TrimRight(curLine)); - end; -end; - -class function TParamsSection.GetAttributeReplacement(const dataType: string): string; -begin - Result := ''; - if LowerCase(dataType) = 'datetime' then - Result := 'paIsDateTime'; -end; - -class procedure TParamsSection.DoAttributeReplacements(var curLine: string; - const dataType, prefix: string); -var - replacement: string; -begin - replacement := GetAttributeReplacement(dataType); - - MacroReplace(curLine, '%', - [prefix + '_ATTRIBUTE', replacement - ]) -end; - -procedure TParamsSection.DoReplacements(var curLine: string; - const aParameter: TRODLOperationParam; - const aLibrary: TRODLLibrary); -begin - Parent.DoDefaultReplacements(curLine, aLibrary); - DoRODLEntityReplacements(curLine, aParameter, 'PARAM'); - DoAttributeReplacements(curLine, aParameter.DataType, 'PARAM'); - MacroReplace(curLine, '%', - ['PARAM_FRONT_MODIFIER', Parent.GetParamFrontModifier(aParameter.Flag), - 'PARAM_BACK_MODIFIER', Parent.GetParamBackModifier(aParameter.Flag), - 'PARAM_TYPE', Parent.GetTypeIdentifier(aParameter.DataType) - ]); -end; - -function TParamsSection.InternalSectionStart(const line: string; - var section: TParamSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TParamsSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -var - I, J: Integer; - curLine: string; - curParam: TRODLOperationParam; - section: TParamSubSection; - IsLastParam: Boolean; -begin - for I := 0 to aOperation.Count - 1 do - begin - curParam := aOperation.Items[I]; - if CanUse(curParam) then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, curParam, aLibrary); - - IsLastParam := (I = aOperation.Count-1); - // it may happen that no parameters after the current one is usable, - // hence making it effectively the last one. - if not IsLastParam then - begin - J := I + 1; - while (J < aOperation.Count) and not CanUse(aOperation.Items[J]) do - Inc(J); - - IsLastParam := J = aOperation.Count; - end; - - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, curParam, IsLastParam); - end - else - begin - EnsureStripping(curLine, sectionTemplate.Eof and IsLastParam); - - Write(curLine); - end; - end; - end; - end; -end; - -{ TParamsNoStripSection } - -function TParamsNoStripSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TParamsNoStripSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'PARAMS_NO_STRIP'; -end; - -{ TIfParamTypeComplexSection } - -constructor TIfParamTypeComplexSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); -begin - inherited Create(AParent, AParentSection, 'IF_PARAM_TYPE_COMPLEX'); -end; - -procedure TIfParamTypeComplexSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aParameter: TRODLOperationParam; const IsLastParam: Boolean); -begin - if CachedIsImplementedAsClass(aParameter.DataType, aLibrary) then - inherited Process(sectionText, aLibrary, aParameter, IsLastParam); -end; - -{ TIfParamTypeSimpleSection } - -constructor TIfParamTypeSimpleSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); -begin - inherited Create(AParent, AParentSection, 'IF_PARAM_TYPE_SIMPLE'); -end; - -procedure TIfParamTypeSimpleSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aParameter: TRODLOperationParam; const IsLastParam: Boolean); -begin - if not CachedIsImplementedAsClass(aParameter.DataType, aLibrary) then - inherited Process(sectionText, aLibrary, aParameter, IsLastParam); -end; - -{ TIfStructHasAncestor } - -constructor TIfStructHasAncestor.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection, 'IF_STRUCT_HAS_ANCESTOR'); -end; - -procedure TIfStructHasAncestor.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -begin - if aStruct.Ancestor <> '' then - inherited Process(sectionText, aLibrary, aStruct); -end; - -{ TFieldsSection } - -function TFieldsSection.CanStrip: Boolean; -begin - Result := True; -end; - -constructor TFieldsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -var - DataType: TRODataType; -begin - inherited Create(AParent, AParentSection, 'FIELDS'); - - FSections := TFieldSubSectionList.Create(True); - - FSections.Add(TIfFieldTypeComplexSection.Create(AParent, Self)); - FSections.Add(TIfFieldTypeSimpleSection.Create(AParent, Self)); - FSections.Add(TIfStringFieldSection.Create(AParent, Self)); - FSections.Add(TIfCurrencyFieldSection.Create(AParent, Self)); - FSections.Add(TIfDecimalFieldSection.Create(AParent, Self)); - FSections.Add(TIfVariantFieldSection.Create(AParent, Self)); - FSections.Add(TIfFieldArrayTypeSection.Create(AParent, Self)); - FSections.Add(TIfFieldEnumTypeSection.Create(AParent, Self)); - FSections.Add(TIfFieldStructTypeSection.Create(AParent, Self)); - for DataType := Low(DataType) to High(DataType) do - FSections.Add(TIfFieldXXXTypeSection.Create(AParent, Self, DataTypeNames[DataType])); - FSections.Add(TIfFieldXXXTypeSection.Create(AParent, Self, 'Utf8String')); -end; - -destructor TFieldsSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TFieldsSection.ProcessField(sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; AField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; IsLastField: Boolean); -var - section: TFieldSubSection; - curLine: string; -begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - DoReplacements(curLine, AField, aStruct, aLibrary); - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, AField, aStruct, IsLastField); - end - else - begin - EnsureStripping(curLine, sectionTemplate.Eof and IsLastField); - Write(curLine); - end; - end; -end; - -procedure TFieldsSection.DoReplacements(var curLine: string; - curField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); -begin - DoRODLEntityReplacements(curLine, curField, 'FIELD'); - MacroReplace(curLine, '%', ['FIELD_TYPE', Parent.GetTypeIdentifier(curField.DataType)]); - - ParentSection.DoReplacements(curLine, aStruct, aLibrary); -end; - -procedure TFieldsSection.EnsureStripping(var curLine: string; - IsLastField: Boolean); -begin - if IsLastField and CanStrip then - begin - curLine := StrEnsureNoSuffix(';', TrimRight(curLine)); - curLine := StrEnsureNoSuffix(',', TrimRight(curLine)); - end; -end; - -function TFieldsSection.InternalSectionStart(const line: string; - var section: TFieldSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TFieldsSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -var - I: Integer; -begin - for I := 0 to aStruct.Count - 1 do - begin - ProcessField(sectionTemplate, aLibrary, aStruct.Items[I], aStruct, I = aStruct.Count - 1); - end; -end; - -{ TFieldsNoStripSection } - -function TFieldsNoStripSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TFieldsNoStripSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'FIELDS_NO_STRIP'; -end; - -{ TAncestorFieldsSection } - -function TAncestorFieldsSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TAncestorFieldsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'ANCESTOR_FIELDS'; -end; - -procedure TAncestorFieldsSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -var - I: Integer; - ancestorStruct: TRODLBaseStruct; -begin - ancestorStruct := aLibrary.FindBaseStruct(aStruct.Ancestor); - if Assigned(ancestorStruct) then - begin - for I := 0 to ancestorStruct.Count - 1 do - begin - ProcessField(sectionTemplate, aLibrary, ancestorStruct.Items[I], ancestorStruct, I = ancestorStruct.Count - 1); - end; - end; -end; - -{ TEntireHierarchyFieldsSection } - -function TEntireHierarchyFieldsSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TEntireHierarchyFieldsSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'ENTIRE_HIERARCHY_FIELDS'; -end; - -procedure TEntireHierarchyFieldsSection.ProcessTemplate( - sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; - const aStruct: TRODLBaseStruct); -var - I: Integer; - List: IROStrings; -begin - List := aStruct.CalcItemsMarshalingOrder(True); - - // remove duplicates - I := 0; - while I < List.Count - 1 do - begin - if List[I] = List[I + 1] then - List.Delete(I) - else - Inc(I); - end; - - // process - for I := 0 to List.Count - 1 do - ProcessField(sectionTemplate, aLibrary, TRODLTypedEntity(List.objects[i]), aStruct, I = List.Count - 1); - List:=nil; -end; - -{ TIfFieldXXXTypeSection } - -function TIfFieldXXXTypeSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := SameText(aField.DataType, FDataType); -end; - -constructor TIfFieldXXXTypeSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection; const DataType: string); -begin - FDataType := DataType; - inherited Create(AParent, AParentSection, 'IF_FIELD_' + UpperCase(FDataType) + '_TYPE'); -end; - -{ TIfFieldArrayTypeSection } - -function TIfFieldArrayTypeSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := Parent.GlobalOrderedArrays.Find(aField.DataType) >= 0; -end; - -constructor TIfFieldArrayTypeSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_FIELD_ARRAY_TYPE'); -end; - -{ TIfFieldEnumTypeSection } - -function TIfFieldEnumTypeSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := Parent.GlobalOrderedEnums.Find(aField.DataType) >= 0; -end; - -constructor TIfFieldEnumTypeSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_FIELD_ENUM_TYPE'); -end; - -{ TIfFieldStructTypeSection } - -function TIfFieldStructTypeSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := Parent.GlobalOrderedStructs.Find(aField.DataType) >= 0; -end; - -constructor TIfFieldStructTypeSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_FIELD_STRUCT_TYPE'); -end; - -{ TIfFieldTypeComplexSection } - -constructor TIfFieldTypeComplexSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_FIELD_TYPE_COMPLEX'); - - FSections := TFieldSubSectionList.Create(True); - FSections.Add(TIfAutoCreateFieldsSection.Create(Parent, ParentSection)); - FSections.Add(TIfNotAutoCreateFieldsSection.Create(Parent, ParentSection)); -end; - -destructor TIfFieldTypeComplexSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -function TIfFieldTypeComplexSection.InternalSectionStart(const line: string; - var section: TFieldSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TIfFieldTypeComplexSection.ProcessTemplate( - sectionTemplate: TLineStream; const aLibrary: TRODLLibrary; - const aField: TRODLTypedEntity; const aStruct: TRODLBaseStruct; - const IsLastField: Boolean); -var - curLine: string; - section: TFieldSubSection; -begin - if CachedIsImplementedAsClass(aField.DataType, aLibrary) then - begin - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - ParentSection.DoReplacements(curLine, aField, aStruct, aLibrary); - ParentSection.EnsureStripping(curLine, IsLastField); - - if InternalSectionStart(curLine, section) then - begin - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, aField, aStruct, IsLastField); - end - else - begin - Write(curLine); - end; - end; - end; -end; - -{ TIfAutoCreateFieldsSection } - -function TIfAutoCreateFieldsSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := aStruct.AutoCreateParams; -end; - -constructor TIfAutoCreateFieldsSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_AUTO_CREATE_FIELDS'); -end; - -{ TIfNotAutoCreateFieldsSection } - -function TIfNotAutoCreateFieldsSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := not aStruct.AutoCreateParams; -end; - -constructor TIfNotAutoCreateFieldsSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_NOT_AUTO_CREATE_FIELDS'); -end; - -{ TIfFieldTypeSimpleSection } - -function TIfFieldTypeSimpleSection.CanUse(const aField: TRODLTypedEntity; - const aStruct: TRODLBaseStruct): Boolean; -begin - Result := not CachedIsImplementedAsClass(aField.DataType, Parent.FLibrary); -end; - -constructor TIfFieldTypeSimpleSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, 'IF_FIELD_TYPE_SIMPLE'); -end; - -{ TIfStringFieldSection } - -constructor TIfStringFieldSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, DataTypeNames[rtString]); - FName := 'IF_STRING_FIELD'; -end; - -{ TIfCurrencyFieldSection } - -constructor TIfCurrencyFieldSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, DataTypeNames[rtCurrency]); - FName := 'IF_CURRENCY_FIELD'; -end; - -{ TIfDecimalFieldSection } - -constructor TIfDecimalFieldSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, DataTypeNames[rtDecimal]); - FName := 'IF_DECIMAL_FIELD'; -end; - -{ TIfVariantFieldSection } - -constructor TIfVariantFieldSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TFieldsSection); -begin - inherited Create(AParent, AParentSection, DataTypeNames[rtVariant]); - FName := 'IF_VARIANT_FIELD'; -end; - -{ TIfHasFieldsSection } - -constructor TIfHasFieldsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection, 'IF_HAS_FIELDS'); - - FSections := TBaseStructSubSectionList.Create(True); - - FSections.Add(TIfStructHasAncestor.Create(AParent, AParentSection)); - FSections.Add(TFieldsSection.Create(AParent, AParentSection)); - FSections.Add(TFieldsNoStripSection.Create(AParent, AParentSection)); - FSections.Add(TAncestorFieldsSection.Create(AParent, AParentSection)); - FSections.Add(TEntireHierarchyFieldsSection.Create(AParent, AParentSection)); -end; - -destructor TIfHasFieldsSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -procedure TIfHasFieldsSection.DoReplacements(var curLine: string; - const aStruct: TRODLBaseStruct; const aLibrary: TRODLLibrary); -begin - ParentSection.DoReplacements(curLine, aStruct, aLibrary); -end; - -function TIfHasFieldsSection.InternalSectionStart(const line: string; - var section: TBaseStructSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < FSections.Count) and not Result do - begin - if SectionStart(line, FSections[I].Name) then - begin - Result := True; - section := FSections[I]; - end; - Inc(I); - end; -end; - -procedure TIfHasFieldsSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -var - curLine: string; - section: TBaseStructSubSection; -begin - if aStruct.Count > 0 then - begin - sectionTemplate.Position := 0; - - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - DoReplacements(curLine, aStruct, aLibrary); - - if InternalSectionStart(curLine, section) then - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, aStruct) - else - Write(curLine); - end; - end; -end; - -{ TIfDataModuleSection } - -constructor TIfDataModuleSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'IF_DATA_MODULE'); -end; - -procedure TIfDataModuleSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -begin - if Parent.WriteDataModule then - inherited Process(sectionText, aLibrary); -end; - -{ TIfDataModuleServiceSection } - -constructor TIfDataModuleServiceSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); -begin - inherited Create(AParent, AParentSection, 'IF_DATA_MODULE'); -end; - -procedure TIfDataModuleServiceSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aService: TRODLBaseService); -begin - if Parent.WriteDataModule then - ParentSection.Process(sectionText, aLibrary); -end; - -{ TIfHydraSection } - -constructor TIfHydraSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(AParent, 'IF_HYDRA'); - - FIsHydraModule := IsHydraModule; // put value in cache -end; - -procedure TIfHydraSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -begin - if FIsHydraModule then - inherited Process(sectionText, aLibrary); -end; - -{ TIfWSDLSection } - -constructor TIfWSDLSection.Create(AParent: TRODLTemplateBasedConverter); -begin - inherited Create(APArent, 'IF_WSDL'); -end; - -procedure TIfWSDLSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary); -var - curLine: string; -begin - if aLibrary.Info.Attributes.Values['Wsdl'] <> '' then - begin - curLine := sectionText; - MacroReplace(curLine, '%', - ['WSDL_LOCATION', aLibrary.Info.Attributes.Values['Wsdl'] - ]); - end; - Write(curLine); -end; - -{ TAncestorServicesSection } - -constructor TAncestorServicesSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TBaseServiceSection); -begin - inherited Create(AParent, AParentSection, 'ANCESTOR_SERVICES'); -end; - -procedure TAncestorServicesSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aService: TRODLBaseService); -var - ancestors: TStringList; - curService: TRODLBaseService; - I: Integer; - curLine: string; -begin - ancestors := TStringList.Create; - try - // build the ancestor's list - curService := aService; - while Assigned(curService) and (Length(curService.Ancestor) > 0) do - begin - ancestors.Add(curService.Ancestor); - curService := aLibrary.FindService(curService.Ancestor); - end; - - // process it - for I := 0 to ancestors.Count - 1 do - begin - curLine := sectionText; - - MacroReplace(curLine, '%', - ['ANCESTOR_SERVICE_NAME', ancestors[I] - ]); - - inherited Process(curLine, aLibrary, aService); - end; - finally - ancestors.Free; - end; -end; - -{ TIfHasComplexTypeSection } - -constructor TIfHasComplexTypeSection.Create( - AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection, 'IF_HAS_COMPLEX_TYPE'); - - FSections := TBaseProcedureSubSectionList.Create(True); - - FSections.Add(TIfResultComplexSection.Create(AParent, AParentSection)); - FSections.Add(TIfResultSimpleSection.Create(AParent, AParentSection)); - FSections.Add(TParamsNoStripSection.Create(AParent, AParentSection)); - FSections.Add(TOutParamsNoStripSection.Create(AParent, AParentSection)); -end; - -destructor TIfHasComplexTypeSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -function TIfHasComplexTypeSection.InternalSectionStart(const line: string; - var section: TBaseProcedureSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -function TIfHasComplexTypeSection.OperationHasComplexType( - const aOperation: TRODLOperation; const aLibrary: TRODLLibrary): Boolean; -var - I: Integer; -begin - Result := (Assigned(aOperation.Result) and CachedIsImplementedAsClass(aOperation.Result.DataType, aLibrary)); - I := 0; - while not Result and (I < aOperation.Count) do - begin - Result := CachedIsImplementedAsClass(aOperation.Items[I].DataType, aLibrary); - Inc(I); - end; -end; - -procedure TIfHasComplexTypeSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -var - curLine: string; - section: TBaseProcedureSubSection; -begin - if OperationHasComplexType(aOperation, aLibrary) then - begin - sectionTemplate.Position := 0; - - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - if InternalSectionStart(curLine, section) then - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, aOperation, aService) - else - Write(curLine); - end; - end; -end; - -{ TIfArrayTypeSimple } - -function TIfArrayTypeSimpleSection.CanUse(const aArray: TRODLArray; const aLibrary: TRODLLibrary): Boolean; -begin - Result := not CachedIsImplementedAsClass(aArray.ElementType, aLibrary); -end; - -constructor TIfArrayTypeSimpleSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TArraysSection); -begin - inherited Create(AParent, AParentSection, 'IF_ARRAY_TYPE_SIMPLE'); -end; - -{ TIfArrayTypeComplex } - -function TIfArrayTypeComplexSection.CanUse(const aArray: TRODLArray; - const aLibrary: TRODLLibrary): Boolean; -begin - Result := CachedIsImplementedAsClass(aArray.ElementType, aLibrary); -end; - -constructor TIfArrayTypeComplexSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TArraysSection); -begin - inherited Create(AParent, AParentSection, 'IF_ARRAY_TYPE_COMPLEX'); -end; - -{ TIfArrayXXXTypeSection } - -function TIfArrayXXXTypeSection.CanUse(const aArray: TRODLArray; - const aLibrary: TRODLLibrary): Boolean; -begin - Result := SameText(aArray.ElementType, FDataType); -end; - -constructor TIfArrayXXXTypeSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TArraysSection; const DataType: string); -begin - FDataType := DataType; - inherited Create(AParent, AParentSection, 'IF_ARRAY_' + UpperCase(DataType) + '_TYPE'); -end; - -{ TIfArrayArrayTypeSection } - -function TIfArrayArrayTypeSection.CanUse(const aArray: TRODLArray; - const aLibrary: TRODLLibrary): Boolean; -begin - Result := Parent.GlobalOrderedArrays.Find(aArray.ElementType) >= 0; -end; - -constructor TIfArrayArrayTypeSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection); -begin - inherited Create(AParent, AParentSection, 'IF_ARRAY_ARRAY_TYPE'); -end; - -{ TIfArrayEnumTypeSection } - -function TIfArrayEnumTypeSection.CanUse(const aArray: TRODLArray; - const aLibrary: TRODLLibrary): Boolean; -begin - Result := Parent.GlobalOrderedEnums.Find(aArray.ElementType) >= 0; -end; - -constructor TIfArrayEnumTypeSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TArraysSection); -begin - inherited Create(AParent, AParentSection, 'IF_ARRAY_ENUM_TYPE'); -end; - -{ TIfArrayStructTypeSection } - -function TIfArrayStructTypeSection.CanUse(const aArray: TRODLArray; - const aLibrary: TRODLLibrary): Boolean; -begin - Result := Parent.GlobalOrderedStructs.Find(aArray.ElementType) >= 0; -end; - -constructor TIfArrayStructTypeSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TArraysSection); -begin - inherited Create(AParent, AParentSection, 'IF_ARRAY_STRUCT_TYPE'); -end; - -{ TInParamsSection } - -function TInParamsSection.CanUse(const AParam: TRODLOperationParam): Boolean; -begin - Result := AParam.Flag in IN_FLAGS; -end; - -constructor TInParamsSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'IN_PARAMS'; -end; - -{ TInParamsNoStripSection } - -function TInParamsNoStripSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TInParamsNoStripSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'IN_PARAMS_NO_STRIP'; -end; - -{ TOutParamsSection } - -function TOutParamsSection.CanUse(const AParam: TRODLOperationParam): Boolean; -begin - Result := AParam.Flag in OUT_FLAGS; -end; - -constructor TOutParamsSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'OUT_PARAMS'; -end; - -{ TOutParamsNoStripSection } - -function TOutParamsNoStripSection.CanStrip: Boolean; -begin - Result := False; -end; - -constructor TOutParamsNoStripSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'OUT_PARAMS_NO_STRIP'; -end; - -{ TIfOutParamsSection } - -function TIfOutParamsSection.CanUse(const aOperation: TRODLOperation): Boolean; -var - I: Integer; -begin - Result := False; - I := 0; - while not Result and (I < aOperation.Count) do - begin - if aOperation.Items[I].Flag in OUT_FLAGS then - Result := True; - Inc(I); - end; -end; - -constructor TIfOutParamsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection, 'IF_OUT_PARAMS'); - - FSections := TBaseProcedureSubSectionList.Create(True); - - FSections.Add(TOutParamsSection.Create(AParent, AParentSection)); - FSections.Add(TOutParamsNoStripSection.Create(AParent, AParentSection)); -end; - -destructor TIfOutParamsSection.Destroy; -begin - FSections.Free; - - inherited Destroy; -end; - -function TIfOutParamsSection.InternalSectionStart(const line: string; - var section: TBaseProcedureSubSection): Boolean; -var - I: Integer; -begin - I := 0; - Result := False; - while (I < Sections.Count) and not Result do - begin - if SectionStart(line, Sections[I].Name) then - begin - Result := True; - section := Sections[I]; - end; - Inc(I); - end; -end; - -procedure TIfOutParamsSection.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -var - curLine: string; - section: TBaseProcedureSubSection; -begin - if CanUse(aOperation) then - begin - sectionTemplate.Position := 0; - - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - - ParentSection.DoReplacements(curLine, aOperation, aService, aLibrary); - - if InternalSectionStart(curLine, section) then - section.Process(FinishSection(section.Name, sectionTemplate), aLibrary, aOperation, aService) - else - Write(curLine); - end; - end; -end; - -{ TIfNoOutParamsSection } - -constructor TIfNoOutParamsSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection); - - FName := 'IF_NO_OUT_PARAMS'; -end; - -function TIfNoOutParamsSection.CanUse(const aOperation: TRODLOperation): Boolean; -begin - Result := not inherited CanUse(aOperation); -end; - -{ TResultSection } - -constructor TIfResultComplexSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection, 'IF_RESULT_COMPLEX'); -end; - -procedure TIfResultComplexSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; const aService: TRODLBaseService); -var - curLine: string; -begin - if Assigned(aOperation.Result) and CachedIsImplementedAsClass(aOperation.Result.DataType, aLibrary) then - begin - curLine := sectionText; - ParentSection.DoReplacements(curLine, aOperation, aService, aLibrary); - Write(curLine); - end; -end; - -{ TIfResultSimpleSection } - -constructor TIfResultSimpleSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection, 'IF_RESULT_SIMPLE'); -end; - -procedure TIfResultSimpleSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; - const aService: TRODLBaseService); -var - curLine: string; -begin - if not Assigned(aOperation.Result) or not CachedIsImplementedAsClass(aOperation.Result.DataType, aLibrary) then - begin - curLine := sectionText; - ParentSection.DoReplacements(curLine, aOperation, aService, aLibrary); - Write(curLine); - end; -end; - -{ TArraysIsFound } - -constructor TArraysIsFound.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseStructSection); -begin - inherited Create(AParent, AParentSection, 'ARRAYS_IS_FOUND'); -end; - -procedure TArraysIsFound.DoReplacements(var curLine: string; - const aArray: TRODLArray; const aStruct: TRODLBaseStruct; - const aLibrary: TRODLLibrary); -begin - MacroReplace(curLine, '%', - ['ARRAY_NAME', aArray.Name - ]); - ParentSection.DoReplacements(curLine, aStruct, aLibrary); -end; - -procedure TArraysIsFound.ProcessTemplate(sectionTemplate: TLineStream; - const aLibrary: TRODLLibrary; const aStruct: TRODLBaseStruct); -var - curIndex: Integer; - curAr: TRODLArray; - curLine: string; - aList: TList; -begin - aList := TList.Create; - try - aLibrary.GetArraysByElement(AStruct.Name,aList); - for curIndex := 0 to aList.Count - 1 do - begin - curAr := TRODLArray(AList[curIndex]); - sectionTemplate.Position := 0; - while not sectionTemplate.Eof do - begin - curLine := sectionTemplate.ReadLine; - DoReplacements(curLine, curAr, aStruct, aLibrary); - Write(curLine); - end; - end; - finally - aList.Free; - end; -end; - -{ TIfParamTypeSection } - -constructor TIfParamXXXTypeSection.Create(AParent: TRODLTemplateBasedConverter; - const AParentSection: TParamsSection; const DataType: string); -begin - FDataType := DataType; - inherited Create(AParent, AParentSection, 'IF_PARAM_' + UpperCase(FDataType) + '_TYPE'); -end; - -procedure TIfParamXXXTypeSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aParameter: TRODLOperationParam; - const IsLastParam: Boolean); -begin - if SameText(aParameter.DataType, FDataType) then - inherited Process(sectionText, aLibrary, aParameter, IsLastParam); -end; - -{ TIfParamOtherTypeSection } - -constructor TIfParamOtherTypeSection.Create( - AParent: TRODLTemplateBasedConverter; const AParentSection: TParamsSection); -begin - inherited Create(AParent, AParentSection, 'IF_PARAM_OTHER_TYPE'); -end; - -procedure TIfParamOtherTypeSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aParameter: TRODLOperationParam; - const IsLastParam: Boolean); -var - DataType: TRODataType; - Found: Boolean; -begin - Found := False; - DataType := Low(DataTypeNames); - while not Found and (DataType <> High(DataTypeNames)) do - begin - Found := SameText(DataTypeNames[DataType], aParameter.DataType); - DataType := Succ(DataType); - end; - - if not Found then - inherited Process(sectionText, aLibrary, aParameter, IsLastParam); -end; - -{ TIfResultXXXTypeSection } - -constructor TIfResultXXXTypeSection.Create(AParent: TRODLTemplateBasedConverter; - AParentSection: TBaseOperationSection; const DataType: string); -begin - FDataType := DataType; - - inherited Create(AParent, AParentSection, 'IF_RESULT_' + UpperCase(FDataType) + '_TYPE'); -end; - -procedure TIfResultXXXTypeSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; - const aService: TRODLBaseService); -var - curLine: string; -begin - if Assigned(aOperation.Result) and SameText(aOperation.Result.DataType, FDataType) then - begin - curLine := sectionText; - - ParentSection.DoReplacements(curLine, aOperation, aService, aLibrary); - - inherited Process(curLine, aLibrary, aOperation, aService); - end; -end; - -{ TIfResultOtherTypeSection } - -constructor TIfResultOtherTypeSection.Create( - AParent: TRODLTemplateBasedConverter; AParentSection: TBaseOperationSection); -begin - inherited Create(AParent, AParentSection, 'IF_RESULT_OTHER_TYPE'); -end; - -procedure TIfResultOtherTypeSection.Process(const sectionText: string; - const aLibrary: TRODLLibrary; const aOperation: TRODLOperation; - const aService: TRODLBaseService); -var - DataType: TRODataType; - Found: Boolean; - curLine: string; -begin - if Assigned(aOperation.Result) then - begin - Found := False; - DataType := Low(DataTypeNames); - while not Found and (DataType <> High(DataTypeNames)) do - begin - Found := SameText(DataTypeNames[DataType], aOperation.Result.DataType); - DataType := Succ(DataType); - end; - - if not Found then - begin - curLine := sectionText; - - ParentSection.DoReplacements(curLine, aOperation, aService, aLibrary); - - inherited Process(curLine, aLibrary, aOperation, aService); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverterUtils.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverterUtils.pas deleted file mode 100644 index 4202b51..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/CodeGen2/uRODLTemplateBasedConverterUtils.pas +++ /dev/null @@ -1,706 +0,0 @@ -unit uRODLTemplateBasedConverterUtils; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen2 } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - uRODLLineStream, uRODL; - -const - COLLECTION_SUFFIX = 'Collection'; - - DEFAULT_STRUCT_ANCESTOR = 'TROComplexType'; - DEFAULT_STRUCT_COLLECTION_ANCESTOR = 'TROCollection'; - DEFAULT_EXCEPTION_ANCESTOR = 'EROException'; - DEFAULT_SERVICE_PROXY_ANCESTOR_NAME = 'TROProxy'; - DEFAULT_SERVICE_INVOKER_ANCESTOR_NAME = 'ROInvoker'; - DEFAULT_EVENT_SINK_WRITER_ANCESTOR_NAME = 'ROEventWriter'; - DEFAULT_EVENT_SINK_INVOKER_ANCESTOR_NAME = 'ROEventInvoker'; - DEFAULT_SERVICE_ASYNC_ANCESTOR_NAME = 'IROAsyncInterface'; - DEFAULT_SERVICE_ASYNC_PROXY_ANCESTOR_NAME = 'TROAsyncProxy'; - - SERVICE_PROXY_SUFFIX = '_Proxy'; - SERVICE_INVOKER_SUFFIX = '_Invoker'; - EVENT_SINK_WRITER_SUFFIX = '_Writer'; - EVENT_SINK_INVOKER_SUFFIX = '_Invoker'; - - DEFAULT_INTF_SUFFIX = '_Intf'; - DEFAULT_INVK_SUFFIX = '_Invk'; - DEFAULT_IMPL_SUFFIX = '_Impl'; - DEFAULT_ASYNC_SUFFIX = '_Async'; - DEFAULT_ASYNC_PROXY_SUFFIX = '_AsyncProxy'; - - IN_FLAGS = [fIn, fInOut]; - OUT_FLAGS = [fOut, fInOut, fResult]; - -function MacroReplace(var Text: string; MacroChar: Char; - const Macros: array of string; CaseSensitive: Boolean = True): Boolean; -function SectionStart(const Line: string; SectionName: string): Boolean; -function SectionEnd(const Line: string; SectionName: string): Boolean; -function FinishSection(const SectionName: string; SourceTemplate: TLineStream): string; overload; -procedure FinishSection(const SectionName: string; SourceTemplate: TLineStream; DestTemplate: TLineStream); overload; -function StrEnsureNoSuffix(const Suffix, Text: string): string; -function StrEnsureSuffix(const Suffix, Text: string): string; - -// The functions below should be moved to uRODLGenTools -function CachedIsImplementedAsClass(const aTypeName: string; aLibrary: TRODLLibrary): Boolean; -function CachedDataTypeToCSharpType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function CachedDataTypeToDelphiType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function CachedDataTypeToDelphiDotNetType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function CachedDataTypeToCppType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function CachedArrayExists(const aArrayName: string; aLibrary:TRODLLibrary): Boolean; - -procedure ClearIsImplementedAsClassCache(aLibrary: TRODLLibrary = nil); -procedure ClearArrayExistsCache(aLibrary:TRODLLibrary = nil); -procedure ClearDataTypeCaches(aLibrary: TRODLLibrary = nil); -procedure ClearAllCaches(aLibrary: TRODLLibrary = nil); - -function DataTypeToCSharpType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function DataTypeToCppType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function DataTypeToDelphiType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -function ArrayExists(const aArrayName: string; aLibrary:TRODLLibrary): Boolean; - - -implementation - -uses - SysUtils, Classes, Contnrs, IniFiles, uROTypes, uRODLGenTools; - -type - TBooleanCacheElement = class - private - FLibrary: TRODLLibrary; - FCachedTypes: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - protected - function GetUncachedIsSet(const aTypeName: string): Boolean; virtual; abstract; - public - constructor Create(aLibrary: TRODLLibrary); - destructor Destroy; override; - - function IsSet(const aTypeName: string): Boolean; - procedure Clear; - end; - - TBooleanCacheElementClass = class of TBooleanCacheElement; - - TBooleanCacheList = class(TObjectList) - private - function GetItemByLibrary( - aLibrary: TRODLLibrary): TBooleanCacheElement; - function GetItem(Index: Integer): TBooleanCacheElement; - protected - function GetElementType: TBooleanCacheElementClass; virtual; abstract; - public - property ItemsByLibrary[aLibrary: TRODLLibrary]: TBooleanCacheElement read GetItemByLibrary; - property Items[Index: Integer]: TBooleanCacheElement read GetItem; default; - end; - - TIdentifierTypeCacheList = class; - TIdentifierTypeCacheElement = class - private - FLibrary: TRODLLibrary; - FCachedTypes: {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}; - FParent: TIdentifierTypeCacheList; - public - constructor Create(aParent: TIdentifierTypeCacheList; aLibrary: TRODLLibrary); - destructor Destroy; override; - - function TypeIdentifier(const aTypeName: string; const AForNew: Boolean): string; - procedure Clear; - end; - - TGetTypeIdentifier = function (const iType:string; iLibrary:TRODLLibrary=nil; iForNew:boolean=false):string; - TIdentifierTypeCacheList = class (TObjectList) - private - FGetTypeIdentifier: TGetTypeIdentifier; - - function GetItem(Index: Integer): TIdentifierTypeCacheElement; - function GetItemByLibrary( - aLibrary: TRODLLibrary): TIdentifierTypeCacheElement; - public - constructor Create(aGetTypeIdentifier: TGetTypeIdentifier; AOwnsObjects: Boolean = True); - - property ItemsByLibrary[aLibrary: TRODLLibrary]: TIdentifierTypeCacheElement read GetItemByLibrary; - property Items[Index: Integer]: TIdentifierTypeCacheElement read GetItem; default; - end; - - TIsImplementedAsClassCacheElement = class(TBooleanCacheElement) - protected - function GetUncachedIsSet(const aTypeName: string): Boolean; override; - end; - - TIsImplementedAsClassCacheList = class(TBooleanCacheList) - protected - function GetElementType: TBooleanCacheElementClass; override; - end; - - TArrayExistsCacheElement = class(TBooleanCacheElement) - protected - function GetUncachedIsSet(const aTypeName: string): Boolean; override; - end; - - TArrayExistsCacheList = class(TBooleanCacheList) - protected - function GetElementType: TBooleanCacheElementClass; override; - end; - -var - FIsImplementedAsClassCache: TIsImplementedAsClassCacheList; - FArrayExistsCache: TArrayExistsCacheList; - FDataTypeToCSharpTypeCache: TIdentifierTypeCacheList; - FDataTypeToDelphiTypeCache: TIdentifierTypeCacheList; - FDataTypeToDelphiDotNetTypeCache: TIdentifierTypeCacheList; - FDataTypeToCppTypeCache: TIdentifierTypeCacheList; - -type - CmpFunc = function(const Str1, Str2: PChar; MaxLen: {$IFDEF FPC}LongInt{$ELSE}Cardinal{$ENDIF}): Integer; - -function MacroReplace(var Text: string; MacroChar: Char; - const Macros: array of string; CaseSensitive: Boolean = True): Boolean; -const - Delta = 1024; -var - Index, i, Count, Len, SLen, MacroHigh: Integer; - S: string; - Found: Boolean; - Cmp: CmpFunc; -begin - Result := False; - if CaseSensitive then - Cmp := {$IFDEF FPC}@{$ENDIF}StrLComp - else - Cmp := {$IFDEF FPC}@{$ENDIF}StrLIComp; - - MacroHigh := Length(Macros) div 2 - 1; - Len := Length(Text); - i := 1; - SetLength(S, Delta); - SLen := 0; - while i <= Len do - begin - Count := 0; - // add normal chars in one step - while (i <= Len) and (Text[i] <> MacroChar) do - begin - Inc(Count); - Inc(i); - end; - if Count > 0 then - begin - if SLen + Count > Length(S) then - SetLength(S, SLen + Count + Delta); - Move(Text[i - Count], S[SLen + 1], Count); - Inc(SLen, Count); - end; - - if i <= Len then - begin - // replace macros - Found := False; - for Index := 0 to MacroHigh do - begin - Count := Length(Macros[Index * 2]) + 1; // Plus one to eat the trailing macro char - if Cmp(PChar(Pointer(Text)) + i, PChar(Macros[Index * 2] + MacroChar), Count) = 0 then - begin - Inc(i, Count); - Count := Length(Macros[Index * 2 + 1]); - if Count > 0 then - begin - if SLen + Count > Length(S) then - SetLength(S, SLen + Count + Delta); - Move(Macros[Index * 2 + 1][1], S[SLen + 1], Count); - Inc(SLen, Count); - end; - Result := True; - Found := True; - Break; - end; - end; - if not Found then - begin - // copy macro-text - if Macros[0][Length(Macros[0])] = MacroChar then - begin - Count := 1; - while (i + Count <= Len) and (Text[i + Count] <> MacroChar) do - Inc(Count); - end - else - begin - Count := 0; - end; - - Inc(Count); - if SLen + Count > Length(S) then - SetLength(S, SLen + Count + Delta); - Move(Text[i], S[SLen + 1], Count); - Inc(SLen, Count); - Inc(i, Count - 1); - end; - end; - Inc(i); - end; - SetLength(S, SLen); - Text := S; -end; - -function SectionStart(const Line: string; SectionName: string): Boolean; -begin - Result := Trim(Line) = '// <%%% START ' + SectionName + ' %%%>'; -end; - -function SectionEnd(const Line: string; SectionName: string): Boolean; -begin - Result := Trim(Line) = '// <%%% END ' + SectionName + ' %%%>'; -end; - -function FinishSection(const SectionName: string; SourceTemplate: TLineStream): string; overload; -var - curLine: string; - prevLine: string; -begin - Result := ''; - prevLine := ''; - curLine := SourceTemplate.ReadLine; - while not SourceTemplate.Eof and not SectionEnd(curLine, SectionName) do - begin - Result := Result + curLine + #13#10; - prevLine := curLine; - curLine := SourceTemplate.ReadLine; - end; - if SourceTemplate.Eof and not SectionEnd(curLine, SectionName) then - Result := Result + curLine + #13#10; - - if Length(prevLine) <> 0 then - Result := StrEnsureNoSuffix(#13#10, Result); -end; - -procedure FinishSection(const SectionName: string; SourceTemplate: TLineStream; DestTemplate: TLineStream); overload; -var - content: string; -begin - content := FinishSection(SectionName, SourceTemplate); - - DestTemplate.Position := 0; - DestTemplate.Size := Length(content); - DestTemplate.WriteString(content); - DestTemplate.Position := 0; -end; - -// Extracted from the JCL (under MPL licence) -function StrEnsureNoSuffix(const Suffix, Text: string): string; -var - SuffixLen : Integer; - StrLength : Integer; -begin - SuffixLen := Length(Suffix); - StrLength := Length(Text); - if Copy(Text, StrLength - SuffixLen + 1, SuffixLen) = Suffix then - Result := Copy(Text, 1, StrLength - SuffixLen) - else - Result := Text; -end; - -// Extracted from the JCL (under MPL licence) -function StrEnsureSuffix(const Suffix, Text: string): string; -var - SuffixLen: Integer; -begin - SuffixLen := Length(Suffix); - if Copy(Text, Length(Text) - SuffixLen + 1, SuffixLen) = Suffix then - Result := Text - else - Result := Text + Suffix; -end; - -{ TBooleanCacheElement } - -procedure TBooleanCacheElement.Clear; -begin - FCachedTypes.Clear; -end; - -constructor TBooleanCacheElement.Create(aLibrary: TRODLLibrary); -begin - inherited Create; - - FLibrary := aLibrary; - FCachedTypes := {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}.Create; - FCachedTypes.CaseSensitive := True; - FCachedTypes.Capacity := 20; - FCachedTypes.Sorted := True; -end; - -destructor TBooleanCacheElement.Destroy; -begin - FCachedTypes.Free; - - inherited Destroy; -end; - -function TBooleanCacheElement.IsSet( - const aTypeName: string): Boolean; -var - typeNameIndex: Integer; -begin - typeNameIndex := FCachedTypes.IndexOf(aTypeName); - if typeNameIndex > -1 then - begin - Result := Boolean(cardinal(FCachedTypes.Objects[typeNameIndex])); - end - else - begin - Result := GetUncachedIsSet(aTypeName); - FCachedTypes.AddObject(aTypeName, TObject(Result)); - end; -end; - -{ TBooleanCacheList } - -function TBooleanCacheList.GetItemByLibrary( - aLibrary: TRODLLibrary): TBooleanCacheElement; -var - I: Integer; -begin - I := 0; - Result := nil; - while not Assigned(Result) and (I < Count) do - begin - if Items[I].FLibrary = aLibrary then - Result := Items[I]; - Inc(I); - end; - - if not Assigned(Result) then - begin - Result := GetElementType.Create(aLibrary); - Add(Result); - end; -end; - -function TBooleanCacheList.GetItem( - Index: Integer): TBooleanCacheElement; -begin - Result := inherited Items[Index] as TBooleanCacheElement; -end; - -{ TIdentifierTypeCacheElement } - -procedure TIdentifierTypeCacheElement.Clear; -begin - FCachedTypes.Clear; -end; - -constructor TIdentifierTypeCacheElement.Create(aParent: TIdentifierTypeCacheList; aLibrary: TRODLLibrary); -begin - inherited Create; - - FLibrary := aLibrary; - FParent := aParent; - FCachedTypes := {$IFDEF FPC}TStringList{$ELSE}THashedStringList{$ENDIF}.Create; - FCachedTypes.CaseSensitive := True; - FCachedTypes.Capacity := 20; -end; - -destructor TIdentifierTypeCacheElement.Destroy; -begin - FCachedTypes.Free; - - inherited Destroy; -end; - -function TIdentifierTypeCacheElement.TypeIdentifier( - const aTypeName: string; const AForNew: Boolean): string; -begin - Result := FCachedTypes.Values[aTypeName + ',' + BoolToStr(AForNew)]; - - if Length(Result) = 0 then - begin - Result := FParent.FGetTypeIdentifier(aTypeName, FLibrary, AForNew); - FCachedTypes.Values[aTypeName + ',' + BoolToStr(AForNew)] := Result; - end; -end; - -{ TIdentifierTypeCacheList } - -constructor TIdentifierTypeCacheList.Create( - aGetTypeIdentifier: TGetTypeIdentifier; AOwnsObjects: Boolean); -begin - inherited Create(AOwnsObjects); - - FGetTypeIdentifier := aGetTypeIdentifier; -end; - -function TIdentifierTypeCacheList.GetItem( - Index: Integer): TIdentifierTypeCacheElement; -begin - Result := inherited Items[Index] as TIdentifierTypeCacheElement; -end; - -function TIdentifierTypeCacheList.GetItemByLibrary( - aLibrary: TRODLLibrary): TIdentifierTypeCacheElement; -var - I: Integer; -begin - I := 0; - Result := nil; - while not Assigned(Result) and (I < Count) do - begin - if Items[I].FLibrary = aLibrary then - Result := Items[I]; - Inc(I); - end; - - if not Assigned(Result) then - begin - Result := TIdentifierTypeCacheElement.Create(Self, aLibrary); - Add(Result); - end; -end; - -{ TIsImplementedAsClassCacheElement } - -function TIsImplementedAsClassCacheElement.GetUncachedIsSet( - const aTypeName: string): Boolean; -begin - Result := IsImplementedAsClass(aTypeName, FLibrary); -end; - -{ TIsImplementedAsClassCacheList } - -function TIsImplementedAsClassCacheList.GetElementType: TBooleanCacheElementClass; -begin - Result := TIsImplementedAsClassCacheElement; -end; - -{ TArrayExistsCacheElement } - -function TArrayExistsCacheElement.GetUncachedIsSet( - const aTypeName: string): Boolean; -begin - Result := ArrayExists(aTypeName, FLibrary); -end; - -{ TArrayExistsCacheList } - -function TArrayExistsCacheList.GetElementType: TBooleanCacheElementClass; -begin - Result := TArrayExistsCacheElement; -end; - -function CachedIsImplementedAsClass(const aTypeName:string; aLibrary:TRODLLibrary):boolean; -begin - if not Assigned(FIsImplementedAsClassCache) then - begin - FIsImplementedAsClassCache := TIsImplementedAsClassCacheList.Create(True); - end; - - Result := FIsImplementedAsClassCache.ItemsByLibrary[aLibrary].IsSet(aTypeName); -end; - -procedure ClearIsImplementedAsClassCache(aLibrary: TRODLLibrary); -begin - if Assigned(FIsImplementedAsClassCache) then - begin - if Assigned(aLibrary) then - FIsImplementedAsClassCache.ItemsByLibrary[aLibrary].Clear - else - FIsImplementedAsClassCache.Clear; - end; -end; - -function CachedDataTypeToCSharpType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -begin - if not Assigned(FDataTypeToCSharpTypeCache) then - begin - FDataTypeToCSharpTypeCache := TIdentifierTypeCacheList.Create(DataTypeToCSharpType, True); - end; - - Result := FDataTypeToCSharpTypeCache.ItemsByLibrary[aLibrary].TypeIdentifier(aTypeName, aForNew); -end; - -function CachedDataTypeToDelphiType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -begin - if not Assigned(FDataTypeToDelphiTypeCache) then - begin - FDataTypeToDelphiTypeCache := TIdentifierTypeCacheList.Create(DataTypeToDelphiType, True); - end; - - Result := FDataTypeToDelphiTypeCache.ItemsByLibrary[aLibrary].TypeIdentifier(aTypeName, aForNew); -end; - -function DataTypeToDelphiType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -begin - case StrToDataType(aTypeName) of - rtXML: Result:= 'IXmlNode'; - else - Result := aTypeName; - end; -end; - -function CachedDataTypeToDelphiDotNetType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -begin - if not Assigned(FDataTypeToDelphiDotNetTypeCache) then - begin - FDataTypeToDelphiDotNetTypeCache := TIdentifierTypeCacheList.Create(uRODLGenTools.DataTypeToDelphiDotNetType, True); - end; - - Result := FDataTypeToDelphiDotNetTypeCache.ItemsByLibrary[aLibrary].TypeIdentifier(aTypeName, aForNew); -end; - -function CachedDataTypeToCppType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -begin - if not Assigned(FDataTypeToCppTypeCache) then - begin - FDataTypeToCppTypeCache := TIdentifierTypeCacheList.Create(DataTypeToCppType, True); - end; - - Result := FDataTypeToCppTypeCache.ItemsByLibrary[aLibrary].TypeIdentifier(aTypeName, aForNew); -end; - -function DataTypeToCppType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; - -const - CppSimpleTypes: array[TRODataType] of string = - ('int', 'TDateTime', 'double', 'Currency', 'WideString', 'AnsiString', '__int64', 'bool', 'Variant', 'Binary', '_di_IXMLNode', 'TGuidString','TDecimalVariant',''); - - // TRODataType = - // (rtInteger, rtDateTime, rtDouble, rtCurrency, rtWidestring, rtString, rtInt64, rtBoolean, rtVariant, rtBinary, rtUserDefined); - -// TODO: Need to finish these if possible - in their proper place - if needed- else we need something -// in the Macros like %IFCONST% that is replaced by "const" and %IFVAR% and/or %IFOUT% that is replaced with "&" -// PasFlagNames : array[TRODLParamFlag] of string = -// ('const', 'out', 'var', 'result'); - -// Also these must be translated to "False" and "True" - case sensitively -// BoolStr : array[boolean] of string = ('false','true'); - -var - aType: TRODataType; - -begin - for aType := Low(DataTypeNames) to High(DataTypeNames) do - if SameText(aTypeName, DataTypeNames[aType]) and (aType in [Low(CppSimpletypes)..High(CppSimpleTypes)]) then - begin - Result:= CppSimpleTypes[aType]; - exit; - end; - - // Not found case - Result:= aTypeName; -end; - -function DataTypeToCSharpType(const aTypeName:string; aLibrary:TRODLLibrary=nil; aForNew:boolean=false):string; -const - CSharpSimpleTypes: array[TRODataType] of string = - ('int', 'System.DateTime', 'double', 'decimal', 'string', 'string', 'Int64', 'bool', 'Variant', 'Binary', 'IXMLNode', 'TGuidString','TDecimalVariant', ''); -var - aType: TRODataType; -begin - for aType := Low(DataTypeNames) to High(DataTypeNames) do - if SameText(aTypeName, DataTypeNames[aType]) and (aType in [Low(CSharpSimpleTypes)..High(CSharpSimpleTypes)]) then - begin - Result := CSharpSimpleTypes[aType]; - Exit; - end; - - // Not found case - Result := uRODLGenTools.DataTypeToCSharpType(aTypeName, aLibrary, aForNew); -end; - -function ArrayExists(const aArrayName: string; aLibrary:TRODLLibrary): Boolean; -begin - Result := Assigned(aLibrary.FindArray(aArrayName)); -end; - -function CachedArrayExists(const aArrayName: string; aLibrary:TRODLLibrary): Boolean; -begin - if not Assigned(FArrayExistsCache) then - begin - FArrayExistsCache := TArrayExistsCacheList.Create(True); - end; - - Result := FArrayExistsCache.ItemsByLibrary[aLibrary].IsSet(aArrayName); -end; - -procedure ClearArrayExistsCache(aLibrary:TRODLLibrary = nil); -begin - if Assigned(FArrayExistsCache) then - begin - if Assigned(aLibrary) then - FArrayExistsCache.ItemsByLibrary[aLibrary].Clear - else - FArrayExistsCache.Clear; - end; -end; - -procedure ClearDataTypeCaches(aLibrary: TRODLLibrary = nil); -begin - if Assigned(FDataTypeToCSharpTypeCache) then - begin - if Assigned(aLibrary) then - FDataTypeToCSharpTypeCache.ItemsByLibrary[aLibrary].Clear - else - FDataTypeToCSharpTypeCache.Clear; - end; - - if Assigned(FDataTypeToDelphiTypeCache) then - begin - if Assigned(aLibrary) then - FDataTypeToDelphiTypeCache.ItemsByLibrary[aLibrary].Clear - else - FDataTypeToDelphiTypeCache.Clear; - end; - - if Assigned(FDataTypeToDelphiDotNetTypeCache) then - begin - if Assigned(aLibrary) then - FDataTypeToDelphiDotNetTypeCache.ItemsByLibrary[aLibrary].Clear - else - FDataTypeToDelphiDotNetTypeCache.Clear; - end; - - if Assigned(FDataTypeToCppTypeCache) then - begin - if Assigned(aLibrary) then - FDataTypeToCppTypeCache.ItemsByLibrary[aLibrary].Clear - else - FDataTypeToCppTypeCache.Clear; - end; -end; - -procedure ClearAllCaches(aLibrary: TRODLLibrary = nil); -begin - ClearDataTypeCaches(aLibrary); - ClearIsImplementedAsClassCache(aLibrary); - ClearArrayExistsCache(aLibrary); -end; - -initialization - -finalization - FIsImplementedAsClassCache.Free; - FArrayExistsCache.Free; - FDataTypeToCSharpTypeCache.Free; - FDataTypeToDelphiTypeCache.Free; - FDataTypeToDelphiDotNetTypeCache.Free; - FDataTypeToCppTypeCache.Free; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.bdsproj deleted file mode 100644 index fd0dc20..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.bdsproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - - RemObjects_DataSnap_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - DataSnap Integration Pack - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - - REMOBJECTS_DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - - False - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.cfg deleted file mode 100644 index f67d1c8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.cfg +++ /dev/null @@ -1,53 +0,0 @@ --$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 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\;..\..\Dcu\D10" --O"..\;..\..\Dcu\D10" --I"..\;..\..\Dcu\D10" --R"..\;..\..\Dcu\D10" --DREMOBJECTS_DESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dpk deleted file mode 100644 index 3ec74a0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dpk +++ /dev/null @@ -1,53 +0,0 @@ -package RemObjects_DataSnap_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - DataSnap Integration Pack'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE REMOBJECTS_DESIGNTIME} - -requires - rtl, - designide, - dbrtl, - dsnap, - vcl, - inet, - RemObjects_Core_D10; - -contains - uRODataSnapConnection in 'uRODataSnapConnection.pas', - RemObjects_DataSnap_Reg in 'RemObjects_DataSnap_Reg.pas', - uRODataSnap_Async in 'uRODataSnap_Async.pas', - uRODataSnap_Intf in 'uRODataSnap_Intf.pas', - uRODataSnap_Invk in 'uRODataSnap_Invk.pas', - uRODataSnapBaseAppServer in 'uRODataSnapBaseAppServer.pas', - uRODataSnapProviderManager in 'uRODataSnapProviderManager.pas', - uRODataSnapProviderPublisher in 'uRODataSnapProviderPublisher.pas', - uRODataSnapModule in 'uRODataSnapModule.pas', - uRODataSnapNewServerModuleWizard in 'uRODataSnapNewServerModuleWizard.pas', - uRODataSnapPublishedProvidersCollection in 'uRODataSnapPublishedProvidersCollection.pas', - uRODataSnapRes in 'uRODataSnapRes.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dproj deleted file mode 100644 index 77332cb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.dproj +++ /dev/null @@ -1,127 +0,0 @@ - - - {c00123bd-dbb4-4671-b2ea-4cb563880662} - RemObjects_DataSnap_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\RemObjects_DataSnap_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - REMOBJECTS_DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - REMOBJECTS_DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - DataSnap Integration Pack - False - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - RemObjects_DataSnap_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dof deleted file mode 100644 index 34bc30c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dof +++ /dev/null @@ -1,97 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - DataSnap Integration Pack -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;ibxpress;dsnap;cds;dsnapcrba;dsnapcon;VclSmp;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;webdsnap;websnap;soaprtl;dbexpress;dbxcds;indy;dclOffice2k;CDK;ES_CodeSite20;CDKSmp;ESDelphiCommandCompiler;ESFileSearch;ESVisualCompositeExpert;EaglWk;ESGraphUtils;ESBase;CDKDesignTimeSupport;ESVsCp;bdertl;vcldbx;CDKHCC60;addict3_d6;addict3db_d6;dxdborD6;dxorgcD6;dxdbtrD6;dxEdtrD6;dxELibD6;dxExELD6;EQGridD6;dxExRwD6;dxcomnd6;dxDBEdD6;dxInsD6;dxFlowChartD6;dxForumLibD6;dxGrEdD6;ECQDBCD6;EQTLD6;EQDBTLD6;dxMasterViewD6;dxmdsd6;dxObjInsD6;dxPageControlD6;dxPSCoreD6;dxsbD6;dxtrmdD6;delphiwarnexpert;eBrazilClientComponents_60;eBrazilContentEditor1_60;tb2kComplete;Rz252N60;eDebugServer2_60;SynEdit_D6;CR_Designer;eBrazilDesigntime_60;eBrazilHtmlEdit2_60;eKorzhQueryPackEnhancements;sq6;kprocs6;Rz252D60;ThemeManager;TravityDevComponents;ESSampleCompositeEditors6;ESSampleComposites60;cxWebD6;cxWebSnapD6;cxWebTeeChartD6;tee;teedb;teeui;DXSockD6;DXAddonsD6;AstaIOD6;Asta_SOAPD6 -Conditionals=REMOBJECTS_DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -L:\Packages\addict3db_d6.bpl=Addict 3.2 for Delphi 6 (DB Aware Components) -L:\Packages\X255PD60.bpl=TurboPower XMLPartner Professional 2.55 Designtime package - VCL60 -l:\Packages\dclcxLibraryVCLD6.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxEditorsVCLD6.bpl=ExpressEditors Library 4 (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridUtilsVCLD6.bpl=ExpressQuantumGrid 4 Utils (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridVCLD6.bpl=ExpressQuantumGrid 4 (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxSpreadSheetVCLD6.bpl=ExpressSpreadSheet (VCL Edition) by Developer Express Inc. -[HistoryLists\hlConditionals] -Count=1 -Item0=Development -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dpk deleted file mode 100644 index 1d877bd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.dpk +++ /dev/null @@ -1,53 +0,0 @@ -package RemObjects_DataSnap_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - DataSnap Integration Pack'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE REMOBJECTS_DESIGNTIME} - -requires - rtl, - designide, - RemObjects_Core_D6, - dbrtl, - dsnap, - vcl, - inet; - -contains - uRODataSnapConnection in 'uRODataSnapConnection.pas', - RemObjects_DataSnap_Reg in 'RemObjects_DataSnap_Reg.pas', - uRODataSnap_Async in 'uRODataSnap_Async.pas', - uRODataSnap_Intf in 'uRODataSnap_Intf.pas', - uRODataSnap_Invk in 'uRODataSnap_Invk.pas', - uRODataSnapBaseAppServer in 'uRODataSnapBaseAppServer.pas', - uRODataSnapProviderManager in 'uRODataSnapProviderManager.pas', - uRODataSnapProviderPublisher in 'uRODataSnapProviderPublisher.pas', - uRODataSnapModule in 'uRODataSnapModule.pas', - uRODataSnapNewServerModuleWizard in 'uRODataSnapNewServerModuleWizard.pas', - uRODataSnapPublishedProvidersCollection in 'uRODataSnapPublishedProvidersCollection.pas', - uRODataSnapRes in 'uRODataSnapRes.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dof deleted file mode 100644 index 274862e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dof +++ /dev/null @@ -1,139 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - DataSnap Integration Pack -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\ -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;cxWebD7;cxWebTeeChartD7;cxWebSnapD7 -Conditionals=REMOBJECTS_DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=2 -MinorVer=0 -Release=0 -Build=122 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.122 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -L:\Packages\eBrazil_70.bpl=elitedevelopments Library - Brazil - FOR INTERNAL USE ONLY -L:\Packages\eBrazilComponents_70.bpl=elitedevelopments Library - Brazil Components - FOR INTERNAL USE ONLY -L:\Packages\eBrazilContentEditor_70.bpl=elitedevelopments Library - Brazil Content Editor 2.0 - FOR INTERNAL USE ONLY diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dpk deleted file mode 100644 index 57f695b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.dpk +++ /dev/null @@ -1,53 +0,0 @@ -package RemObjects_DataSnap_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - DataSnap Integration Pack'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE REMOBJECTS_DESIGNTIME} - -requires - rtl, - designide, - RemObjects_Core_D7, - dbrtl, - dsnap, - vcl, - inet; - -contains - uRODataSnapConnection in 'uRODataSnapConnection.pas', - RemObjects_DataSnap_Reg in 'RemObjects_DataSnap_Reg.pas', - uRODataSnap_Async in 'uRODataSnap_Async.pas', - uRODataSnap_Intf in 'uRODataSnap_Intf.pas', - uRODataSnap_Invk in 'uRODataSnap_Invk.pas', - uRODataSnapBaseAppServer in 'uRODataSnapBaseAppServer.pas', - uRODataSnapProviderManager in 'uRODataSnapProviderManager.pas', - uRODataSnapProviderPublisher in 'uRODataSnapProviderPublisher.pas', - uRODataSnapModule in 'uRODataSnapModule.pas', - uRODataSnapNewServerModuleWizard in 'uRODataSnapNewServerModuleWizard.pas', - uRODataSnapPublishedProvidersCollection in 'uRODataSnapPublishedProvidersCollection.pas', - uRODataSnapRes in 'uRODataSnapRes.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Glyphs.res deleted file mode 100644 index 0578e6e..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.dpk deleted file mode 100644 index 7bdbdd2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.dpk +++ /dev/null @@ -1,51 +0,0 @@ -package RemObjects_DataSnap_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - DataSnap Integration Pack'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE REMOBJECTS_DESIGNTIME} - -requires - rtl, - vcl, - designide, - RemObjects_Core_K3, - dataclx; - -contains - uRODataSnapConnection in 'uRODataSnapConnection.pas', - RemObjects_DataSnap_Reg in 'RemObjects_DataSnap_Reg.pas', - uRODataSnap_Async in 'uRODataSnap_Async.pas', - uRODataSnap_Intf in 'uRODataSnap_Intf.pas', - uRODataSnap_Invk in 'uRODataSnap_Invk.pas', - uRODataSnapBaseAppServer in 'uRODataSnapBaseAppServer.pas', - uRODataSnapProviderManager in 'uRODataSnapProviderManager.pas', - uRODataSnapProviderPublisher in 'uRODataSnapProviderPublisher.pas', - uRODataSnapModule in 'uRODataSnapModule.pas', - uRODataSnapNewServerModuleWizard in 'uRODataSnapNewServerModuleWizard.pas', - uRODataSnapPublishedProvidersCollection in 'uRODataSnapPublishedProvidersCollection.pas', - uRODataSnapRes in 'uRODataSnapRes.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.kof deleted file mode 100644 index 25a7534..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.kof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects - DataSnap Package -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../../Dcu/K3 -PackageDLLOutputDir=../../Dcu/K3 -PackageDCPOutputDir=../../Dcu/K3 -SearchPath=../../Dcu/K3:../ -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=../Dcu/K3 - -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME - -[HistoryLists\hlSearchPath] -Count=4 -Item0=../../Dcu/K3:../ -Item1=../Dcu/K3 -Item2=../../Dcu/K3;../ -Item3=../../Dcu/K3 - -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - -[HistoryLists\hlBPLOutput] -Count=3 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 -Item2=../../Bin/K3 - -[HistoryLists\hlDCPOutput] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Reg.pas deleted file mode 100644 index da604ee..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/RemObjects_DataSnap_Reg.pas +++ /dev/null @@ -1,51 +0,0 @@ -unit RemObjects_DataSnap_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - CodeGen -{ -{ compiler: Delphi 5 and up, Kylix 2 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -{$R RemObjects_DataSnap_Glyphs.res} - -interface - -procedure Register; - -implementation - -uses Classes, uROClasses, - {$IFNDEF DELPHI5}DesignIntf, DesignEditors, DMForm, {$ELSE} DsgnIntf, DmDesigner, {$ENDIF} - uRORes, - uRODataSnapModule, - uRODataSnapConnection, uRODataSnapProviderPublisher; - -procedure Register; -begin - RegisterComponents(str_ProductName,[TRODataSnapConnection, - TRODataSnapProviderPublisher]); - - { if we don't register this, we get a property editor registered for - TCustomRemoteServer that's useless to us. } - RegisterPropertyEditor(TypeInfo(string), TRODataSnapConnection, 'ServerName', TStringProperty); - - {$IFDEF DELPHI5} - RegisterCustomModule(TRODataSnapModule,TDataModuleDesignerCustomModule); - {$ELSE} - RegisterCustomModule(TRODataSnapModule,TCustomModule); - {$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap.rodl b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap.rodl deleted file mode 100644 index 5271bf2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap.rodl +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapBaseAppServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapBaseAppServer.pas deleted file mode 100644 index 520f57d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapBaseAppServer.pas +++ /dev/null @@ -1,188 +0,0 @@ -unit uRODataSnapBaseAppServer; - -interface - -uses Classes, Provider, - {$IFDEF MSWINDOWS} - Windows, { for InterlocIncrement/Decrement } - {$ENDIF MSWINDOWS} - uROTypes, uRORemoteDataModule, uRODataSnap_Intf; - -type TRODataSnapBaseAppServer = class(TRORemoteDataModule, IUnknown, uRODataSnap_Intf.IAppServer) - private - fRefCount: Integer; - - protected { uRODataSnap_Intf.IAppServer } - function AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary; - function AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary; - function AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary; - function AS_GetProviderNames: TProviderNames; - function AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary; - function AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary; - procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String); - - { we need to reimplement AdRef/Release to provide reference counting } - function _AddRef: Integer; override; stdcall; - function _Release: Integer; override; stdcall; - function IUnknown._AddRef = _AddRef; - function IUnknown._Release = _Release; - - protected - function GetProviderByName(const iProviderName:string):TCustomProvider; virtual; abstract; - function GetProviderNames:TProviderNames; virtual; abstract; - end; - -implementation - -uses SysUtils, - {$IFDEF DEBUG_REMOBJECTS_DATASNAP}eDebugServer,{$ENDIF} - uROBinaryHelpers; - -function TRODataSnapBaseAppServer.AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary; -var - lProvider:TCustomProvider; - lOwnerData:OleVariant; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_ApplyUpdates(ProviderName=%s,MaxErrors=%d)',[ProviderName,MaxErrors]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - lProvider := GetProviderByName(ProviderName); - lOwnerData := OwnerData; - result := BinaryFromVariant(lProvider.ApplyUpdates(VariantFromBinary(Delta),MaxErrors,ErrorCount,lOwnerData)); - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_ApplyUpdates(ErrorCount=%s)',[ErrorCount]); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer.AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary; -var lProvider:TCustomProvider; - lOwnerData,lParams:OleVariant; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_GetRecords(ProviderName=%s,Count=%d,Options=%d,CommandText=%s)',[string(ProviderName),Count,Options,CommandText]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - lProvider := GetProviderByName(ProviderName); - //result := BinaryFromVariant(lProvider.GetRecords(Count, RecsOut, Options)); - lOwnerData := OwnerData; - lParams := VariantFromBinary(Params); - result := BinaryFromVariant(lProvider.GetRecords(Count, RecsOut, Options, CommandText, lParams, lOwnerData)); - FreeAndNil(Params); - Params := BinaryFromVariant(lParams); - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_GetRecords(RecsOut=%d)',[RecsOut]); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer.AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary; -var lProvider:TCustomProvider; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_DataRequest(ProviderName=%s)',[ProviderName]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - lProvider := GetProviderByName(ProviderName); - result := BinaryFromVariant(lProvider.DataRequest(VariantFromBinary(Data))); - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_DataRequest()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer.AS_GetProviderNames: TProviderNames; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_GetProviderNames()'); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - result := GetProviderNames(); - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_GetProviderNames()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer.AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary; -var lProvider:TCustomProvider; - lOwnerData:OleVariant; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_GetParams(ProviderName=%s)',[ProviderName]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - lProvider := GetProviderByName(ProviderName); - lOwnerData := OwnerData; - result := BinaryFromVariant(lProvider.GetParams(lOwnerData)); - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_GetParams()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer.AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary; -var lProvider:TCustomProvider; - lOwnerData:OleVariant; -begin - lProvider := GetProviderByName(ProviderName); - lOwnerData := OwnerData; - result := BinaryFromVariant(lProvider.RowRequest(VariantFromBinary(Row),RequestType,lOwnerData)); - OwnerData := lOwnerData; -end; - -procedure TRODataSnapBaseAppServer.AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String); -var lProvider:TCustomProvider; - lParams,lOwnerData:OleVariant; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'IAppServer.AS_Execute(ProviderName=%s,CommandText=%s)',[string(ProviderName),CommandText]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - lProvider := GetProviderByName(ProviderName); - lOwnerData := OwnerData; - lParams := VariantFromBinary(Params); - lProvider.Execute(Commandtext,lParams,lOwnerData); - FreeAndNil(Params); - Params := BinaryFromVariant(lParams); - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'IAppServer.AS_Execute()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TRODataSnapBaseAppServer._AddRef: Integer; -begin - if not (csDesigning in ComponentState) then begin - result := InterlockedIncrement(fRefCount); - end - else Result := 0; { To keep the warning away } -end; - -function TRODataSnapBaseAppServer._Release: Integer; -begin - if not (csDesigning in ComponentState) then begin - result := InterlockedDecrement(fRefCount); - if result = 0 then Destroy; - end - else Result := 0; { To keep the warning away } -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapConnection.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapConnection.pas deleted file mode 100644 index 48be8db..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapConnection.pas +++ /dev/null @@ -1,422 +0,0 @@ -unit uRODataSnapConnection; - -interface - -uses DBClient, Classes, Midas, - {$IFDEF MSWINDOWS} - ActiveX, ComObj,{ for ISupportErrorInfo } - {$ENDIF MSWINDOWS} - uROClient, - uRODataSnap_Intf; - -type TROCustomDataSnapConnection = class; - - TRODataSnapConnectionAssignProxyEvent = procedure(Sender : TROCustomDataSnapConnection; var aProxy: IAppServer) of object; - - TROCustomDataSnapConnection = class(TCustomRemoteServer, Midas.IAppServer{$IFDEF MSWINDOWS}, ISupportErrorInfo{$ENDIF MSWINDOWS}) - private - fMessage: TROMessage; - fChannel: TRoTransportChannel; - fStoreConnected: boolean; - fProxy:uRODataSnap_Intf.IAppServer; - fServerName: string; - - fOnAssignProxy: TRODataSnapConnectionAssignProxyEvent; - procedure SetMessage(const Value: TROMessage); - procedure SetChannel(const Value: TRoTransportChannel); - procedure SetServerName(const Value: string); - - procedure TriggerAfterConnect; - - private - - { IAppServer } - function AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant; MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; safecall; - function AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; safecall; - procedure AS_Execute(const ProviderName, CommandText: WideString; var Params, OwnerData: OleVariant); safecall; - function AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; safecall; - function AS_GetProviderNames: OleVariant; safecall; - function AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer; Options: Integer; const CommandText: WideString; var Params, OwnerData: OleVariant): OleVariant; safecall; - function AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer; var OwnerData: OleVariant): OleVariant; safecall; - - { ISupportErrorInfo } - {$IFDEF MSWINDOWS} - function InterfaceSupportsErrorInfo(const iid: TIID): HResult; stdcall; - {$ENDIF MSWINDOWS} - - protected - function GetConnected: boolean; override; - procedure SetConnected(Value: boolean); override; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure DoAssignProxy; virtual; - public - constructor Create(iOwner:TComponent); override; - function GetServer: Midas.IAppServer; override; - - procedure GetProviderNames(Proc: TGetStrProc); override; - - property StoreConnected:boolean read fStoreConnected write fStoreConnected default false; - - { ToDo: Connected property is not always properly set to "false"? } - property Connected:boolean read GetConnected write SetConnected stored fStoreConnected default false; - property Message:TROMessage read fMessage write SetMessage; - property Channel:TRoTransportChannel read fChannel write SetChannel; - - { ToDo: create a proper property editor for this } - property ServerName:string read fServerName write SetServerName; - - - {$IFDEF MSWINDOWS} - function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override; - {$ENDIF} - property OnAssignProxy: TRODataSnapConnectionAssignProxyEvent read fOnAssignProxy write fOnAssignProxy; - end; - - TRODataSnapConnection = class(TROCustomDataSnapConnection) - published - property Message; - property Channel; - property StoreConnected; - property Connected; - property ServerName; - - property OnAssignProxy; - end; - -implementation - -uses DB, SysUtils, Variants, - {$IFDEF REMOBJECTS_DESIGNTIME}Forms, Controls, {$ENDIF} - {$IFDEF DEBUG_REMOBJECTS_DATASNAP}eDebugServer,{$ENDIF} - uROTypes, uROBinaryHelpers; - -{ TROCustomDataSnapConnection } - -constructor TROCustomDataSnapConnection.Create(iOwner: TComponent); -begin - inherited; - ServerName := 'IAppServer'; -end; - -function TROCustomDataSnapConnection.AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant; MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; -var lDelta,lResult:Binary; - lOwnerData:string; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_ApplyUpdates(ProviderName=%s,MaxErrors=%d)',[ProviderName,MaxErrors]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lOwnerData := OwnerData; - lDelta := BinaryFromVariant(Delta); - try - lResult := fProxy.AS_ApplyUpdates(ProviderName,lDelta,MaxErrors,ErrorCount,lOwnerData); - try - result := VariantFromBinary(lResult); - finally - FreeAndNil(lResult); - end; - finally - FreeAndNil(lDelta); - end; - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_ApplyUpdates(ErrorCount=%d)',[ErrorCount]); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; -var lResult, tmp:Binary; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_DataRequest(ProviderName=%s)',[ProviderName]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - tmp:=BinaryFromVariant(Data); - try - lResult := fProxy.AS_DataRequest(ProviderName,tmp); - finally - FreeAndNil(tmp); - end; - - try - result := VariantFromBinary(lResult); - finally - FreeAndNil(lResult); - end; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_DataRequest()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -procedure TROCustomDataSnapConnection.AS_Execute(const ProviderName,CommandText: WideString; var Params, OwnerData: OleVariant); -var lParams,lInParams:Binary; - lOwnerData:string; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_Execute(ProviderName=%s,CommandText=%s)',[ProviderName,CommandText]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lOwnerData := OwnerData; - lParams := BinaryFromVariant(Params); - lInParams := lParams; - try - fProxy.AS_Execute(ProviderName,CommandText,lParams,lOwnerData); - finally - if (lParams <> lInParams) then FreeAndNil(lParams); - freeAndNil(lInParams); - end; - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_Execute()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; -var lResult:Binary; - lOwnerData:string; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_GetParams(ProviderName=%s)',[ProviderName]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lOwnerData := OwnerData; - lResult := fProxy.AS_GetParams(ProviderName,lOwnerData); - try - result := VariantFromBinary(lResult); - finally - FreeAndNil(lResult); - end; - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_GetParams()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.AS_GetProviderNames: OleVariant; -var lProviderNames:TProviderNames; - i:integer; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_GetProviderNames()'); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lProviderNames := fProxy.AS_GetProviderNames(); - try - result := VarArrayCreate([0,lProviderNames.Count-1],varString); - for i := 0 to lProviderNames.Count-1 do begin - result[i] := lProviderNames[i]; - end; { for } - finally - lProviderNames.Free(); - end; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_GetProviderNames()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer; Options: Integer; const CommandText: WideString; var Params, OwnerData: OleVariant): OleVariant; -var lParams,lInParams,lResult:Binary; - lOwnerData:string; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_GetRecords(ProviderName=%s,Count=%d,Options=%d)',[ProviderName,Count,Options]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lOwnerData := OwnerData; - lParams := BinaryFromVariant(Params); - lInParams := lParams; - try - lResult := fProxy.AS_GetRecords(ProviderName,Count,RecsOut,Options,CommandText,lParams,lOwnerData); - try - result := VariantFromBinary(lResult); - finally - FreeAndNil(lResult); - end; - finally - if (lParams <> lInParams) then FreeAndNil(lParams); - FreeAndNil(lInParams); - end; - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_GetRecords(RecsOut=%d)',[RecsOut]); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer; var OwnerData: OleVariant): OleVariant; -var lRow,lResult:Binary; - lOwnerData:string; -begin - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - DebugServer.EnterMethodEx(self,'TROCustomDataSnapConnection.AS_RowRequest(ProviderName=%s,RequestType=%d)',[ProviderName,RequestType]); try - try - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} - - Connected := true; - lOwnerData := OwnerData; - lRow := BinaryFromVariant(Row); - try - lResult := fProxy.AS_RowRequest(ProviderName,lRow,RequestType,lOwnerData); - try - result := VariantFromBinary(lResult); - finally - FreeAndNil(lResult); - end; - finally - FreeAndNil(lRow); - end; - OwnerData := lOwnerData; - - {$IFDEF DEBUG_REMOBJECTS_DATASNAP} - except DebugServer.WriteException(); raise; end; - finally DebugServer.ExitMethodEx(self,'TROCustomDataSnapConnection.AS_RowRequest()'); end; - {$ENDIF DEBUG_REMOBJECTS_DATASNAP} -end; - -function TROCustomDataSnapConnection.GetConnected: boolean; -begin - result := Assigned(fProxy); -end; - -function TROCustomDataSnapConnection.GetServer: Midas.IAppServer; -begin - result := self; -end; - -procedure TROCustomDataSnapConnection.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - if Operation = opRemove then begin - if AComponent = fMessage then begin - fMessage := nil; - Connected := False; - end - else if AComponent = Channel then begin - Channel := nil; - Connected := False; - end; - end; -end; - -procedure TROCustomDataSnapConnection.SetChannel(const Value:TRoTransportChannel); -begin - if Value <> fChannel then begin - fChannel := Value; - if Assigned(fChannel) then fChannel.FreeNotification(self); - Connected := False; - end; -end; - -procedure TROCustomDataSnapConnection.SetConnected(Value: boolean); -begin - if Value = Connected then exit; - - if Value then begin - - if not Assigned(fMessage) then raise Exception.Create('Cannot connect: No Message assigned.'); - if not Assigned(fChannel) then raise Exception.Create('Cannot connect: No TransportChannel assigned.'); - DoAssignProxy; - - TriggerAfterConnect(); - - end - else begin - - fProxy := nil; - - end; -end; - -procedure TROCustomDataSnapConnection.SetMessage(const Value:TROMessage); -begin - if Value <> fMessage then begin - fMessage := Value; - if Assigned(fMessage) then fMessage.FreeNotification(self); - Connected := False; - end; -end; - - -procedure TROCustomDataSnapConnection.GetProviderNames(Proc: TGetStrProc); -var lProviderNames:TProviderNames; - i:integer; -begin - { This version is a bit optimized over the default one, because we can - skip converting to a variant array first. } - - {$IFDEF REMOBJECTS_DESIGNTIME} - Screen.Cursor := crHourGlass; - try - {$ENDIF REMOBJECTS_DESIGNTIME} - Connected := True; - lProviderNames := fProxy.AS_GetProviderNames(); - try - for i := 0 to lProviderNames.Count-1 do begin - Proc(lProviderNames[i]); - end; { for } - finally - lProviderNames.Free(); - end; - {$IFDEF REMOBJECTS_DESIGNTIME} - finally - Screen.Cursor := crDefault; - end; { try/finally } - {$ENDIF REMOBJECTS_DESIGNTIME} - -end; - -{$IFDEF MSWINDOWS} -function TROCustomDataSnapConnection.InterfaceSupportsErrorInfo(const iid: TIID): HResult; -begin - if GetInterfaceEntry(iid) <> nil then result := S_OK else result := S_FALSE; -end; - -function TROCustomDataSnapConnection.SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; -const lErrorGuid : TGUID = '{00000000-0000-0000-0000-000000000000}'; -begin - Result := HandleSafeCallException(ExceptObject, ExceptAddr, lErrorGuid, '', ''); -end; -{$ENDIF MSWINDOWS} - -procedure TROCustomDataSnapConnection.SetServerName(const Value: string); -begin - Connected := False; - fServerName := Value; -end; - -procedure TROCustomDataSnapConnection.TriggerAfterConnect; -begin - if Assigned(AfterConnect) then AfterConnect(self); -end; - -procedure TROCustomDataSnapConnection.DoAssignProxy; -begin - if Assigned(fOnAssignProxy) then OnAssignProxy(Self, fProxy); - if not Assigned(fProxy) then fProxy := CoAppServer.Create(fServerName, fMessage, fChannel); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapModule.pas deleted file mode 100644 index 91f2bae..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapModule.pas +++ /dev/null @@ -1,172 +0,0 @@ -unit uRODataSnapModule; - -interface - -uses Classes, Provider, Contnrs, - uRODataSnap_Intf, uRODataSnapPublishedProvidersCollection, - uRODataSnapBaseAppServer; - - -type TRODataSnapModule = class(TRODataSnapBaseAppServer) - private - fProviders: TPublishedProviders; - fInternalRegisteredProviders:TObjectList; - fUseProviders: boolean; - procedure SetProviders(const Value: TPublishedProviders); - protected - function GetProviderByName(const iProviderName:string):TCustomProvider; override; - function GetProviderNames:TProviderNames; override; - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - - procedure RegisterProvider(iProvider:TCustomProvider; const iName:string); overload; - procedure UnRegisterProvider(iProvider:TCustomProvider; const iName:string); overload; - procedure RegisterProvider(iProvider:TCustomProvider); overload; - procedure UnRegisterProvider(iProvider:TCustomProvider); overload; - - published - property Providers:TPublishedProviders read fProviders write SetProviders; - property UseProviders:boolean read fUseProviders write fUseProviders default false; - end; - -implementation - -uses SysUtils, - uRODataSnapRes; - -{ TRODataSnapModule } - -constructor TRODataSnapModule.Create(AOwner: TComponent); -begin - fProviders := TPublishedProviders.Create(self); - fInternalRegisteredProviders := TObjectList.Create(); - fInternalRegisteredProviders.OwnsObjects := False; - inherited; -end; - -destructor TRODataSnapModule.Destroy; -begin - FreeAndNil(fProviders); - FreeAndNil(fInternalRegisteredProviders); - inherited; -end; - -function TRODataSnapModule.GetProviderByName(const iProviderName: string): TCustomProvider; -var lPublishedProvider: TPublishedProvider; - lProvider:TCustomProvider; - i:integer; -begin - if UseProviders then begin - lPublishedProvider := Providers.GetProviderByName(iProviderName); - if not Assigned(lPublishedProvider) then raise Exception.CreateFmt(sProviderNotExported,[iProviderName]); - result := lPublishedProvider.Provider; - if not Assigned(result) then raise Exception.CreateFmt(sProviderNotExported,[iProviderName]); - end - else begin - result := nil; - - { find provider on datamodule } - for i := 0 to ComponentCount-1 do begin - if Components[i] is TCustomProvider then begin - lProvider := TCustomProvider(Components[i]); - if lProvider.Exported and (lProvider.Name = iProviderName) then begin - result := lProvider; - Exit; - end; - end; - end; - - { if not, find it in list of explicitely registered list } - for i := 0 to fInternalRegisteredProviders.Count-1 do begin - lProvider := (fInternalRegisteredProviders[i] as TCustomProvider); - if lProvider.Exported and (lProvider.Name = iProviderName) then begin - result := lProvider; - Exit; - end; - end; - - if not Assigned(result) then raise Exception.CreateFmt(sProviderNotExported,[iProviderName]); - end; -end; - -function TRODataSnapModule.GetProviderNames: TProviderNames; -var i:integer; -begin - result := TProviderNames.Create(); - - if UseProviders then begin - for i := 0 to Providers.Count-1 do begin - if (Providers[i].Name <> '') and Assigned(Providers[i].Provider) then result.Add(Providers[i].Name); - end; - end - else begin - { list providers on form } - for i := 0 to ComponentCount-1 do begin - if Components[i] is TCustomProvider then with TCustomProvider(Components[i]) do begin - if Exported then result.Add(Name); - end; - end; - { list explicitely regsitered providers } - for i := 0 to fInternalRegisteredProviders.Count-1 do begin - with (fInternalRegisteredProviders[i] as TCustomProvider) do begin - if Exported then result.Add(Name); - end; - end; - end; -end; - -procedure TRODataSnapModule.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited; - if Operation = opRemove then begin - if (AComponent is TCustomProvider) and Assigned(Providers) then begin - Providers.UnlinkProvider(AComponent as TCustomProvider); - fInternalRegisteredProviders.Remove(AComponent); - end; - end; -end; - -procedure TRODataSnapModule.RegisterProvider(iProvider:TCustomProvider; const iName:string); -begin - if not Assigned(iProvider) then Exit; - - if not fProviders.ContainsProvider(iProvider) then - with fProviders.Add() as TPublishedProvider do begin - Provider := iProvider; - if iName <> '' then Name := iName; - end; - - if fInternalRegisteredProviders.IndexOf(iProvider) = -1 then - fInternalRegisteredProviders.Add(iProvider); - -end; - -procedure TRODataSnapModule.UnRegisterProvider(iProvider:TCustomProvider; const iName:string); -begin - if not Assigned(iProvider) then Exit; - fProviders.RemoveProvider(iProvider); - - fInternalRegisteredProviders.Remove(iProvider); -end; - - -procedure TRODataSnapModule.RegisterProvider(iProvider: TCustomProvider); -begin - RegisterProvider(iProvider,''); -end; - -procedure TRODataSnapModule.UnRegisterProvider(iProvider: TCustomProvider); -begin - UnRegisterProvider(iProvider,''); -end; - - -procedure TRODataSnapModule.SetProviders(const Value: TPublishedProviders); -begin - fProviders.Assign(Value); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.pas deleted file mode 100644 index 7569e2c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.pas +++ /dev/null @@ -1,373 +0,0 @@ -unit uRODataSnapNewServerModuleWizard; - -{$I RemObjects.inc} - -interface - -uses DesignEditors, ToolsAPI, Windows, ActnList, Menus, Classes; - -const CRLF = #13#10; // Carriage-return line-feed. - -resourcestring - sBasicDfmSource = - 'object %0:s: T%0:s' + crlf + - ' Left = 200' + crlf + - ' Top = 200' + crlf + - ' Height = 300' + crlf + - ' Width = 300' + crlf + - 'end'; - - - sBasicFormSource = - 'unit %0:s;' + crlf + - crlf + - 'interface' + crlf + - crlf + - 'uses {vcl:} SysUtils, Classes, DB, DBClient, ' + crlf + - ' {RemObjects:} %3:s;' + crlf + - crlf + - 'type' + crlf + - ' T%1:s = class(%2:s)' + crlf + - ' private' + crlf + - ' { Private declarations }' + crlf + - ' public' + crlf + - ' { Public declarations }' + crlf + - ' end;' + crlf + - crlf + - 'var' + crlf + - ' %1:s: T%1:s;' + crlf + - crlf + - 'implementation' + crlf + - crlf + - 'uses {RemObjects:} uROServer, uRODataSnap_Invk;' + crlf + - crlf + - '{$R *.DFM}' + crlf + - crlf + - 'procedure Create_DataSnapModule(out oInstance:IUnknown);' + crlf + - 'begin' + crlf + - ' oInstance := T%1:s.Create(nil);' + crlf + - 'end;' + crlf + - crlf + - 'initialization' + crlf + - ' { To adjust scalability of the DataSnapModule and avoid recreation of' + crlf + - ' instances for each roundtrip, you might want to choose a different' + crlf + - ' ClassFactory type.' + crlf + - crlf + - ' Make sure to check the following url for more information:'+ crlf+ - ' http://www.remobjects.com?ro16 }'+ crlf + - crlf + - ' //TROPooledClassFactory.Create(''IAppServer'', Create_DataSnapModule, TAppServer_Invoker, 25);' + crlf + - ' TROClassFactory.Create(''IAppServer'', Create_DataSnapModule, TAppServer_Invoker);' + crlf + - 'end.' + crlf; - -type TSourceFile = class(TInterfacedObject, IOTAFile) - private - fAge: TDateTime; - fSource:string; - public - function GetSource: string; - function GetAge: TDateTime; - constructor Create(const iSource:string); - end; - - TBaseFormCreator = class(TInterfacedObject, IOTAModuleCreator) - public - function GetCreatorType: string; - function GetExisting: Boolean; - function GetFileSystem: string; - function GetOwner: IOTAModule; - function GetUnnamed: Boolean; - - function GetAncestorName: string; - function GetImplFileName: string; - function GetIntfFileName: string; - function GetFormName: string; - function GetMainForm: Boolean; - function GetShowForm: Boolean; - function GetShowSource: Boolean; - function NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile; - function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; - function NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; - - procedure FormCreated(const FormEditor: IOTAFormEditor); - end; { TBaseFormCreator } - - TNewModuleExpert = class(TInterfacedObject, - IOTAWizard, - IOTARepositoryWizard, - IOTAFormWizard, - {$IFDEF BDS} - IOTARepositoryWizard80, - {$ENDIF} - IOTARepositoryWizard60) - public - - constructor Create(); - destructor Destroy(); override; - - procedure AfterSave; - procedure BeforeSave; - procedure Destroyed; - procedure Modified; - - procedure Execute; - function GetAuthor: String; - function GetComment: String; - function GetGlyph: Cardinal; - function GetIDString: String; - function GetName: String; - function GetPage: String; - function GetState: TWizardState; - function GetDesigner: String; - - {$IFDEF BDS} - function GetGalleryCategory: IOTAGalleryCategory; - function GetPersonality: string; - {$ENDIF} - - end; - -procedure Register; - -implementation - -uses SysUtils, Graphics, - uRORes; - -{ TBaseFormCreator } - -procedure TBaseFormCreator.FormCreated(const FormEditor: IOTAFormEditor); -begin - -end; - -function TBaseFormCreator.GetAncestorName: string; -begin - result := 'TRODataSnapModule'; -end; - -function TBaseFormCreator.GetCreatorType: string; -begin - result := sForm; -end; - -function TBaseFormCreator.GetExisting: Boolean; -begin - result := false; -end; - -function TBaseFormCreator.GetFileSystem: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetFormName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetImplFileName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetIntfFileName: string; -begin - result := ''; -end; - -function TBaseFormCreator.GetMainForm: Boolean; -begin - result := false; -end; - -function TBaseFormCreator.GetOwner: IOTAModule; -var - ModuleServices: IOTAModuleServices; - Module: IOTAModule; - NewModule: IOTAModule; -begin - Result := nil; - if BorlandIDEServices.QueryInterface(IOTAModuleServices, ModuleServices) = -S_OK then - begin - Module := ModuleServices.CurrentModule; - if Module <> nil then - if Module.GetOwnerCount > 0 then - begin - NewModule := Module.GetOwner(0); - if NewModule <> nil then - if NewModule.QueryInterface(IOTAProject, Result) <> S_OK then - Result := nil; - end; - end; -end; - -function TBaseFormCreator.GetShowForm: Boolean; -begin - result := true; -end; - -function TBaseFormCreator.GetShowSource: Boolean; -begin - result := true; -end; - -function TBaseFormCreator.GetUnnamed: Boolean; -begin - result := true; -end; - -function RemoveInitialT(const iString:string):string; -begin - result := iString; - if (result <> '') and (result[1] = 'T') then Delete(result,1,1); - //ShowMessage(iString+' '+result); -end; - -function TBaseFormCreator.NewFormFile(const FormIdent, - AncestorIdent: string): IOTAFile; -begin - result := TSourceFile.Create(Format(sBasicDfmSource,[RemoveInitialT(FormIdent)])); -end; - -function TBaseFormCreator.NewImplSource(const ModuleIdent, FormIdent, - AncestorIdent: string): IOTAFile; -begin - result := TSourceFile.Create(Format(sBasicFormSource,[ModuleIdent,RemoveInitialT(FormIdent),AncestorIdent,'uRODataSnapModule'])); -end; - -function TBaseFormCreator.NewIntfSource(const ModuleIdent, FormIdent, - AncestorIdent: string): IOTAFile; -begin - -end; - -{ TSourceFile } - -constructor TSourceFile.Create(const iSource: string); -begin - inherited Create(); - fSource := iSource; - fAge := Now; -end; - -function TSourceFile.GetAge: TDateTime; -begin - result := fAge; -end; - -function TSourceFile.GetSource: string; -begin - result := fSource; -end; - -{ TNewModuleExpert } - -constructor TNewModuleExpert.Create; -begin - inherited; -end; - -destructor TNewModuleExpert.Destroy; -begin - inherited; -end; - -procedure TNewModuleExpert.Execute; -var - ModuleServices: IOTAModuleServices; - ModuleCreator: IOTAModuleCreator; -begin - if BorlandIDEServices.QueryInterface(IOTAModuleServices, ModuleServices) = S_OK then - begin - ModuleCreator := TBaseFormCreator.Create; - ModuleServices.CreateModule(ModuleCreator); - end; -end; - -function TNewModuleExpert.GetAuthor: String; -begin - result := 'RemObjects Software'; -end; - -function TNewModuleExpert.GetComment: String; -begin - result := 'RemObjects DataSnap Server Module'; -end; - -function TNewModuleExpert.GetGlyph: Cardinal; -begin - result := LoadIcon(hInstance,'NewDataSnapModule'); -end; - -function TNewModuleExpert.GetIDString: String; -begin - result := 'RemObjectsDataSnapModule'; -end; - -function TNewModuleExpert.GetName: String; -begin - result := 'RemObjects DataSnap Server Module'; -end; - -function TNewModuleExpert.GetPage: String; -begin - result := 'RemObjects SDK'; -end; - -{$IFDEF BDS} -function TNewModuleExpert.GetGalleryCategory: IOTAGalleryCategory; -var - lGalleryManager: IOTAGalleryCategoryManager; -begin - lGalleryManager := BorlandIDEServices as IOTAGalleryCategoryManager; - result := lGalleryManager.FindCategory('RemObjectsSdkDelphi'); -end; - -function TNewModuleExpert.GetPersonality: string; -begin - result := sDelphiPersonality; -end; -{$ENDIF} - -function TNewModuleExpert.GetState: TWizardState; -begin - result := [wsEnabled]; -end; - -procedure TNewModuleExpert.AfterSave; -begin - -end; - -procedure TNewModuleExpert.BeforeSave; -begin - -end; - -procedure TNewModuleExpert.Destroyed; -begin - -end; - -procedure TNewModuleExpert.Modified; -begin - -end; - -procedure Register; -begin - RegisterPackageWizard(TNewModuleExpert.Create as IOTAFormWizard); -end; - -{$R 'uRODataSnapNewServerModuleWizard.res' 'uRODataSnapNewServerModuleWizard.rc'} - -function TNewModuleExpert.GetDesigner: String; -begin - Result := dAny; -end; - -initialization -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.res deleted file mode 100644 index e3a9d19..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapNewServerModuleWizard.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderManager.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderManager.pas deleted file mode 100644 index 98c0e81..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderManager.pas +++ /dev/null @@ -1,72 +0,0 @@ -unit uRODataSnapProviderManager; - -interface - -uses Contnrs, Provider, - uRODataSnapProviderPublisher, uRODataSnap_Intf; - -type TProviderManager = class(TObjectList) - public - constructor Create(); - procedure RegisterPublisher(iPublisher:TROCustomDataSnapProviderPublisher); - procedure UnregisterPublisher(iPublisher:TROCustomDataSnapProviderPublisher); - function GetProviderNames:TProviderNames; - function GetProviderByName(const iProviderName:string):TCustomProvider; - end; - -var ProviderManager:TProviderManager; - -implementation - -uses SysUtils, Classes, - uRODataSnapRes; - -{ TProviderManager } - -constructor TProviderManager.Create; -begin - inherited Create(false); -end; - -function TProviderManager.GetProviderByName(const iProviderName:string): TCustomProvider; -var i:integer; -begin - //ToDo: protect by CriticalSection; - - result := nil; - for i := 0 to Count-1 do begin - result := (Items[i] as TRODataSnapProviderPublisher).GetProviderByName(iProviderName); - if Assigned(result) then break; - end; { for } - if not Assigned(result) then raise Exception.CreateFmt(sProviderNotExported,[iProviderName]); -end; - -function TProviderManager.GetProviderNames: TProviderNames; -var i:integer; -begin - //ToDo: protect by CriticalSection; - result := TProviderNames.Create(); - for i := 0 to Count-1 do begin - (Items[i] as TRODataSnapProviderPublisher).AddNamesToTProviderNames(result); - end; { for } -end; - -procedure TProviderManager.RegisterPublisher(iPublisher: TROCustomDataSnapProviderPublisher); -begin - //ToDo: protect by CriticalSection; - if IndexOf(iPublisher) = -1 then Add(iPublisher); -end; - -procedure TProviderManager.UnregisterPublisher(iPublisher: TROCustomDataSnapProviderPublisher); -var lIndex:integer; -begin - lIndex := IndexOf(iPublisher); - if IndexOf(iPublisher) <> -1 then Delete(lIndex); -end; - -initialization - ProviderManager := TProviderManager.Create(); -finalization - FreeAndNil(ProviderManager); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.dfm deleted file mode 100644 index 63c080f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.dfm +++ /dev/null @@ -1,2 +0,0 @@ -object RODataSnapSimpleAppServer: TRODataSnapSimpleAppServer -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.pas deleted file mode 100644 index 927534a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.pas +++ /dev/null @@ -1,112 +0,0 @@ -unit uRODataSnapProviderPublisher; - -interface - -uses Classes, Provider, - uRODataSnap_Intf, - uRODataSnapPublishedProvidersCollection; - -type TROCustomDataSnapProviderPublisher = class(TComponent) - private - fProviders: TPublishedProviders; - procedure SetProviders(const Value: TPublishedProviders); - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure AddNamesToTProviderNames(iProviderNames:TProviderNames); - function GetProviderByName(const iProviderName:string):TCustomProvider; - property Providers:TPublishedProviders read fProviders write SetProviders; - end; - - TRODataSnapProviderPublisher = class(TROCustomDataSnapProviderPublisher) - published - property Providers; - end; - -implementation - -uses - SysUtils, - uROServer, uRODataSnapProviderManager, uRODataSnapBaseAppServer, uRODataSnap_Invk; - -type TRODataSnapSimpleAppServer = class(TRODataSnapBaseAppServer) - function GetProviderByName(const iProviderName:string):TCustomProvider; override; - function GetProviderNames:TProviderNames; override; - end; - -procedure Create_AppServer(out anInstance : IUnknown); -begin - anInstance := TRODataSnapSimpleAppServer.Create(nil); -end; - -{ TROCustomDataSnapProviderPublisher } - -procedure TROCustomDataSnapProviderPublisher.AddNamesToTProviderNames(iProviderNames: TProviderNames); -var i:integer; -begin - //ToDo: protect by CriticalSection; - - for I := 0 to Providers.Count-1 do begin - if (Providers[i].Name <> '') and Assigned(Providers[i].Provider) then - iProviderNames.Add(Providers[i].Name); - end; { for } -end; - -constructor TROCustomDataSnapProviderPublisher.Create(AOwner: TComponent); -begin - inherited; - fProviders := TPublishedProviders.Create(self); - ProviderManager.RegisterPublisher(self); - if not IsClassFactoryRegistered('IAppServer') then - TROClassFactory.Create('IAppServer', Create_AppServer, TAppServer_Invoker); -end; - -destructor TROCustomDataSnapProviderPublisher.Destroy; -begin - ProviderManager.UnregisterPublisher(self); - FreeAndNil(fProviders); - inherited; -end; - -function TROCustomDataSnapProviderPublisher.GetProviderByName(const iProviderName:string): TCustomProvider; -var lPublishedProvider:TPublishedProvider; -begin - //ToDo: protect by CriticalSection; - lPublishedProvider := fProviders.GetProviderByName(iProviderName); - if Assigned(lPublishedProvider) then result := lPublishedProvider.Provider - else result := nil; -end; - -procedure TROCustomDataSnapProviderPublisher.Notification( - AComponent: TComponent; Operation: TOperation); -begin - inherited; - if Operation = opRemove then begin - if AComponent is TCustomProvider then Providers.UnlinkProvider(AComponent as TCustomProvider); - end; -end; - -procedure TROCustomDataSnapProviderPublisher.SetProviders( - const Value: TPublishedProviders); -begin - fProviders.Assign(Value); -end; - -function TRODataSnapSimpleAppServer.GetProviderByName(const iProviderName:string):TCustomProvider; -begin - result := ProviderManager.GetProviderByName(iProviderName); -end; - -function TRODataSnapSimpleAppServer.GetProviderNames: TProviderNames; -begin - result := ProviderManager.GetProviderNames(); -end; - -{$R *.dfm} - -initialization - //ToDo: maybe postpone this registration and move it to the constructor of the component? - //TROClassFactory.Create('AppServer', Create_AppServer, TAppServer_Invoker); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapPublishedProvidersCollection.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapPublishedProvidersCollection.pas deleted file mode 100644 index 8000d40..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapPublishedProvidersCollection.pas +++ /dev/null @@ -1,123 +0,0 @@ -unit uRODataSnapPublishedProvidersCollection; - -interface - -uses Classes, Provider; - -type TPublishedProvider = class(TCollectionItem) - private - fProvider:TCustomProvider; - fName: string; - procedure SetProvider(const iValue:TCustomProvider); - procedure SetName(const iValue:string); - protected - function GetDisplayName: string; override; - published - property Provider:TCustomProvider read fProvider write SetProvider; - property Name:string read fName write SetName; - end; - - TPublishedProviders = class(TCollection) - private - fOwner:TComponent; - function GetItems(iIndex: integer): TPublishedProvider; - protected - function GetOwner: TPersistent; override; - public - constructor Create(iOwner:TComponent); - property Items[iIndex:integer]:TPublishedProvider read GetItems; default; - function GetProviderByName(iName:string):TPublishedProvider; - procedure UnlinkProvider(iProvider:TCustomProvider); - procedure RemoveProvider(iProvider:TCustomProvider); - function ContainsProvider(iProvider:TCustomProvider):Boolean; - end; - -implementation - -{ TPublishedProviders } - -constructor TPublishedProviders.Create(iOwner: TComponent); -begin - inherited Create(TPublishedProvider); - fOwner := iOwner; -end; - -function TPublishedProviders.GetItems(iIndex: integer): TPublishedProvider; -begin - result := (inherited Items[iIndex]) as TPublishedProvider; -end; - -function TPublishedProviders.GetOwner: TPersistent; -begin - result := fOwner; -end; - -function TPublishedProviders.GetProviderByName(iName:string):TPublishedProvider; -var i:Integer; -begin - result := nil; - i := 0; - while (i < Count) and (result = nil) do begin - if Items[i].Name = iName then result := Items[i]; - Inc(i); - end; { while } -end; - -function TPublishedProviders.ContainsProvider(iProvider: TCustomProvider): Boolean; -var i:Integer; -begin - Result := False; - for i := 0 to Count-1 do begin - if Items[i].Provider = iProvider then begin - Result := True; - break; - end; - end; -end; - -procedure TPublishedProviders.RemoveProvider(iProvider: TCustomProvider); -var i:Integer; -begin - for i := 0 to Count-1 do - if Items[i].Provider = iProvider then begin - Delete(i); - break; - end; -end; - -procedure TPublishedProviders.UnlinkProvider(iProvider: TCustomProvider); -var i:Integer; -begin - for i := 0 to Count-1 do - if Items[i].Provider = iProvider then begin - Items[i].Provider := nil; - break; - end; -end; - -{ TPublishedProvider } - -function TPublishedProvider.GetDisplayName: string; -begin - if Name <> '' then result := Name - else if Assigned(fProvider) then result := fProvider.Name - else result := ClassName; -end; - -procedure TPublishedProvider.SetName(const iValue: string); -begin - fName := iValue; -end; - -procedure TPublishedProvider.SetProvider(const iValue: TCustomProvider); -begin - fProvider := iValue; - if (fName = '') and Assigned(iValue) then fName := iValue.Name; - - if Assigned(iValue) and (Collection.Owner is TComponent) then - iValue.FreeNotification(Collection.Owner as TComponent); -end; - - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapRes.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapRes.pas deleted file mode 100644 index c02ec8d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapRes.pas +++ /dev/null @@ -1,11 +0,0 @@ -unit uRODataSnapRes; - -interface - -resourcestring - sProviderNotExported = 'Provider "%s" is not exported.'; - -implementation - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Async.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Async.pas deleted file mode 100644 index 5e8d6fc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Async.pas +++ /dev/null @@ -1,257 +0,0 @@ -unit uRODataSnap_Async; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROTypes, uROClientIntf, uROAsync, - {Project:} uRODataSnap_Intf; - -type - { IAppServer_Async } - IAppServer_Async = interface(IROAsyncInterface) - ['{4F6AC4BD-0AAA-4621-9868-D26D32CC9E27}'] - procedure Invoke_AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; const OwnerData: String); - procedure Invoke_AS_GetRecords(const ProviderName: WideString; const Count: Integer; const Options: Integer; const CommandText: WideString; const Params: Binary; const OwnerData: String); - procedure Invoke_AS_DataRequest(const ProviderName: WideString; const Data: Binary); - procedure Invoke_AS_GetProviderNames; - procedure Invoke_AS_GetParams(const ProviderName: WideString; const OwnerData: String); - procedure Invoke_AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; const OwnerData: String); - procedure Invoke_AS_Execute(const ProviderName: WideString; const CommandText: WideString; const Params: Binary; const OwnerData: String); - function Retrieve_AS_ApplyUpdates(out ErrorCount: Integer; out OwnerData: String): binary; - function Retrieve_AS_GetRecords(out RecsOut: Integer; out Params: Binary; out OwnerData: String): binary; - function Retrieve_AS_DataRequest: binary; - function Retrieve_AS_GetProviderNames: TProviderNames; - function Retrieve_AS_GetParams(out OwnerData: String): binary; - function Retrieve_AS_RowRequest(out OwnerData: String): binary; - procedure Retrieve_AS_Execute(out Params: Binary; out OwnerData: String); - end; - - { CoAppServer_Async } - CoAppServer_Async = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IAppServer_Async; - end; - - { TAppServer_AsyncProxy } - TAppServer_AsyncProxy = class(TROAsyncProxy, IAppServer_Async) - private - protected - function __GetInterfaceName:string; override; - - procedure Invoke_AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; const OwnerData: String); - procedure Invoke_AS_GetRecords(const ProviderName: WideString; const Count: Integer; const Options: Integer; const CommandText: WideString; const Params: Binary; const OwnerData: String); - procedure Invoke_AS_DataRequest(const ProviderName: WideString; const Data: Binary); - procedure Invoke_AS_GetProviderNames; - procedure Invoke_AS_GetParams(const ProviderName: WideString; const OwnerData: String); - procedure Invoke_AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; const OwnerData: String); - procedure Invoke_AS_Execute(const ProviderName: WideString; const CommandText: WideString; const Params: Binary; const OwnerData: String); - function Retrieve_AS_ApplyUpdates(out ErrorCount: Integer; out OwnerData: String): binary; - function Retrieve_AS_GetRecords(out RecsOut: Integer; out Params: Binary; out OwnerData: String): binary; - function Retrieve_AS_DataRequest: binary; - function Retrieve_AS_GetProviderNames: TProviderNames; - function Retrieve_AS_GetParams(out OwnerData: String): binary; - function Retrieve_AS_RowRequest(out OwnerData: String): binary; - procedure Retrieve_AS_Execute(out Params: Binary; out OwnerData: String); - end; - -implementation - -uses - {vcl:} SysUtils; - -{ CoAppServer } - -class function CoAppServer_Async.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IAppServer_Async; -begin - result := TAppServer_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TAppServer_AsyncProxy } - -function TAppServer_AsyncProxy.__GetInterfaceName:string; -begin - result := 'AppServer'; -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; const OwnerData: String); -begin - __AssertProxyNotBusy('AS_ApplyUpdates'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_ApplyUpdates'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('Delta', TypeInfo(Binary), Delta, []); - __Message.Write('MaxErrors', TypeInfo(Integer), MaxErrors, []); - __Message.Write('OwnerData', TypeInfo(String), OwnerData, []); - __DispatchAsyncRequest('AS_ApplyUpdates',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_ApplyUpdates(out ErrorCount: Integer; out OwnerData: String): binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('AS_ApplyUpdates'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(binary), Result, []); - __Message.Read('ErrorCount', TypeInfo(Integer), ErrorCount, []); - __Message.Read('OwnerData', TypeInfo(String), OwnerData, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_GetRecords(const ProviderName: WideString; const Count: Integer; const Options: Integer; const CommandText: WideString; const Params: Binary; const OwnerData: String); -begin - __AssertProxyNotBusy('AS_GetRecords'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_GetRecords'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('Count', TypeInfo(Integer), Count, []); - __Message.Write('Options', TypeInfo(Integer), Options, []); - __Message.Write('CommandText', TypeInfo(WideString), CommandText, []); - __Message.Write('Params', TypeInfo(Binary), Params, []); - __Message.Write('OwnerData', TypeInfo(String), OwnerData, []); - __DispatchAsyncRequest('AS_GetRecords',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_GetRecords(out RecsOut: Integer; out Params: Binary; out OwnerData: String): binary; -var __response:TStream; -begin - Params := nil; - result := nil; - __response := __RetrieveAsyncResponse('AS_GetRecords'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(binary), Result, []); - __Message.Read('RecsOut', TypeInfo(Integer), RecsOut, []); - __Message.Read('Params', TypeInfo(Binary), Params, []); - __Message.Read('OwnerData', TypeInfo(String), OwnerData, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_DataRequest(const ProviderName: WideString; const Data: Binary); -begin - __AssertProxyNotBusy('AS_DataRequest'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_DataRequest'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('Data', TypeInfo(Binary), Data, []); - __DispatchAsyncRequest('AS_DataRequest',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_DataRequest: binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('AS_DataRequest'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(binary), Result, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_GetProviderNames; -begin - __AssertProxyNotBusy('AS_GetProviderNames'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_GetProviderNames'); - __DispatchAsyncRequest('AS_GetProviderNames',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_GetProviderNames: TProviderNames; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('AS_GetProviderNames'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(TProviderNames), Result, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_GetParams(const ProviderName: WideString; const OwnerData: String); -begin - __AssertProxyNotBusy('AS_GetParams'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_GetParams'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('OwnerData', TypeInfo(String), OwnerData, []); - __DispatchAsyncRequest('AS_GetParams',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_GetParams(out OwnerData: String): binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('AS_GetParams'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(binary), Result, []); - __Message.Read('OwnerData', TypeInfo(String), OwnerData, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; const OwnerData: String); -begin - __AssertProxyNotBusy('AS_RowRequest'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_RowRequest'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('Row', TypeInfo(Binary), Row, []); - __Message.Write('RequestType', TypeInfo(Integer), RequestType, []); - __Message.Write('OwnerData', TypeInfo(String), OwnerData, []); - __DispatchAsyncRequest('AS_RowRequest',__Message); -end; - -function TAppServer_AsyncProxy.Retrieve_AS_RowRequest(out OwnerData: String): binary; -var __response:TStream; -begin - result := nil; - __response := __RetrieveAsyncResponse('AS_RowRequest'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(binary), Result, []); - __Message.Read('OwnerData', TypeInfo(String), OwnerData, []); - - __response.Free(); -end; - -procedure TAppServer_AsyncProxy.Invoke_AS_Execute(const ProviderName: WideString; const CommandText: WideString; const Params: Binary; const OwnerData: String); -begin - __AssertProxyNotBusy('AS_Execute'); - - __Message.InitializeRequestMessage(__TransportChannel, 'uRODataSnap', __InterfaceName, 'AS_Execute'); - __Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []); - __Message.Write('CommandText', TypeInfo(WideString), CommandText, []); - __Message.Write('Params', TypeInfo(Binary), Params, []); - __Message.Write('OwnerData', TypeInfo(String), OwnerData, []); - __DispatchAsyncRequest('AS_Execute',__Message); -end; - -procedure TAppServer_AsyncProxy.Retrieve_AS_Execute(out Params: Binary; out OwnerData: String); -var __response:TStream; -begin - Params := nil; - __response := __RetrieveAsyncResponse('AS_Execute'); - __Message.ReadFromStream(__response); - - __Message.Read('Params', TypeInfo(Binary), Params, []); - __Message.Read('OwnerData', TypeInfo(String), OwnerData, []); - - __response.Free(); -end; - - -initialization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Intf.pas deleted file mode 100644 index 05dbfd1..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Intf.pas +++ /dev/null @@ -1,319 +0,0 @@ -unit uRODataSnap_Intf; - -interface - -uses Classes, TypInfo, uROClient, uROTypes, uROClientIntf; - -const - LibraryUID = '{9EC7C50C-DAC2-48A9-9A0F-CBAA29A11EF7}'; - - IAppServer_IID : TGUID = '{1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}'; - -type - { Forward declarations } - IAppServer = interface; - TProviderNames = class; - - { TProviderNames } - TProviderNames = class(TROArray) - private - fItems : array of string; - protected - function GetItems(Index : integer) : string; - procedure SetItems(Index : integer; const Value : string); - function GetCount : integer; override; - public - class function GetItemType : PTypeInfo; override; - class function GetItemSize : integer; override; - function GetItemRef(Index : integer) : pointer; override; - procedure Clear; override; - procedure Delete(Index : integer); override; - procedure Resize(ElementCount : integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add(const Value:string):integer; - - property Count : integer read GetCount; - property Items[Index : integer] : string read GetItems write SetItems; default; - end; - - { IAppServer } - IAppServer = interface - ['{1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}'] - function AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary; - function AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary; - function AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary; - function AS_GetProviderNames: TProviderNames; - function AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary; - function AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary; - procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String); - end; - - { CoIAppServer } - CoAppServer = class - class function Create(const iAppServerName:string; const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IAppServer; - end; - - TAppServer_Proxy = class(TROProxy, IAppServer) - private - fIAppServerName:string; - protected - constructor Create(const iAppServerName:string; const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); reintroduce; overload; - constructor Create(const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); reintroduce; overload; - // Internal - function __GetInterfaceName:string; override; - - // IAppServer - function AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary; virtual; - function AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary; virtual; - function AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary; virtual; - function AS_GetProviderNames: TProviderNames; virtual; - function AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary; virtual; - function AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary; virtual; - procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String); virtual; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uRORes, uROClasses; - -{ TProviderNames } - -procedure TProviderNames.Assign(iSource:TPersistent); -var lSource:TProviderNames; - i:integer; -begin - if (iSource is TProviderNames) then begin - lSource := TProviderNames(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - Items[i] := lSource.Items[i]; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TProviderNames.GetItemType : PTypeInfo; -begin - result := TypeInfo(string); -end; - -class function TProviderNames.GetItemSize : integer; -begin - result := SizeOf(string); -end; - -function TProviderNames.GetItems(Index : integer) : string; -begin - if (Index < 0) or (Index >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[Index]); - result := fItems[Index]; -end; - -function TProviderNames.GetItemRef(Index : integer) : pointer; -begin - result := @fItems[Index]; -end; - -procedure TProviderNames.Clear; -begin - SetLength(fItems, 0); -end; - -procedure TProviderNames.Delete(Index : integer); -var i : integer; -begin - if (Index>=Count) then RaiseError(err_InvalidIndex, [Index]); - - if (Index - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/ModelSupport_RemObjects_IDE_D10/default.txaPackage b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/ModelSupport_RemObjects_IDE_D10/default.txaPackage deleted file mode 100644 index e69de29..0000000 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/NewRORemoteDataModule.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/NewRORemoteDataModule.ico deleted file mode 100644 index 863d859..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/NewRORemoteDataModule.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.bdsproj deleted file mode 100644 index 8177724..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.bdsproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - - RemObjects_IDE_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - IDE Integration for Win32 - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - - HYDRA_DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - - True - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.cfg deleted file mode 100644 index 9309b0b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.cfg +++ /dev/null @@ -1,53 +0,0 @@ --$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 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10" --O"..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10" --I"..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10" --R"..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10" --DHYDRA_DESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dpk deleted file mode 100644 index 9b51098..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dpk +++ /dev/null @@ -1,82 +0,0 @@ -package RemObjects_IDE_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - IDE Integration for Win32'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE HYDRA_DESIGNTIME} -{%File '..\RemObjects.inc'} -{%TogetherDiagram 'ModelSupport_RemObjects_IDE_D10\default.txaPackage'} - -requires - designide, - vclx, - inet, - vcl, - rtl, - RemObjects_Core_D10, - RemObjects_Everwood_D10, - dbrtl; - -contains - uROIDEPrjWizard in 'uROIDEPrjWizard.pas', - uROIDEMenu in 'uROIDEMenu.pas', - uRORODLNotifier in 'uRORODLNotifier.pas', - uROIDETools in 'uROIDETools.pas', - uRODLGenTools in '..\CodeGen\uRODLGenTools.pas', - uRODLToPascalImpl in '..\CodeGen\uRODLToPascalImpl.pas', - uRODLToPascalIntf in '..\CodeGen\uRODLToPascalIntf.pas', - uRODLToPascalInvk in '..\CodeGen\uRODLToPascalInvk.pas', - fServerProjectOptions in 'fServerProjectOptions.pas' {ServerProjectOptions}, - fCustomIDEMessagesForm in 'fCustomIDEMessagesForm.pas' {CustomIDEMessagesForm}, - RemObjects_IDE_Reg in 'RemObjects_IDE_Reg.pas', - uROResWriter in 'uROResWriter.pas', - fDispatchersEditorForm in 'fDispatchersEditorForm.pas' {DispatchersEditorForm}, - uROIDEData in 'uROIDEData.pas' {IdeData: TDataModule}, - uRODLToPascal in '..\CodeGen\uRODLToPascal.pas', - fROAbout in 'fROAbout.pas' {AboutForm}, - uROIDEEditors in 'uROIDEEditors.pas', - uROProductVersionInfoForm in 'uROProductVersionInfoForm.pas' {ProductVersionInfoForm}, - uROProductVersionInfo in 'uROProductVersionInfo.pas', - uROProductVersionInfo_Intf in 'uROProductVersionInfo_Intf.pas', - fROServerClassForm in 'fROServerClassForm.pas' {ROServerClassForm}, - uRODECReg in '..\RODEC\uRODECReg.pas', - uROEncKeyPropEditor in '..\RODEC\uROEncKeyPropEditor.pas' {CryptoKeyGenForm}, - uROExtraEditors in 'uROExtraEditors.pas', - fNewProjectForm in 'fNewProjectForm.pas' {NewProjectForm}, - uRODLToPascalAsync in '..\CodeGen\uRODLToPascalAsync.pas', - uROLoginNeededForm in 'uROLoginNeededForm.pas' {ROLoginNeededForm}, - uRODLTemplateBasedConverterUtils in '..\CodeGen2\uRODLTemplateBasedConverterUtils.pas', - uRODLAsyncConverter in '..\CodeGen2\uRODLAsyncConverter.pas', - uRODLConvertersUtils in '..\CodeGen2\uRODLConvertersUtils.pas', - uRODLCppConverters in '..\CodeGen2\uRODLCppConverters.pas', - uRODLDelphiConverters in '..\CodeGen2\uRODLDelphiConverters.pas', - uRODLImplConverter in '..\CodeGen2\uRODLImplConverter.pas', - uRODLIntfConverter in '..\CodeGen2\uRODLIntfConverter.pas', - uRODLInvkConverter in '..\CodeGen2\uRODLInvkConverter.pas', - uRODLSplitableConverter in '..\CodeGen2\uRODLSplitableConverter.pas', - uRODLTemplateBasedConverter in '..\CodeGen2\uRODLTemplateBasedConverter.pas', - uRODLLineStream in '..\CodeGen2\uRODLLineStream.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dproj deleted file mode 100644 index 01ed718..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.dproj +++ /dev/null @@ -1,178 +0,0 @@ - - - {fe71e26f-b3f6-4155-b226-b778db554247} - RemObjects_IDE_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\RemObjects_IDE_D10.bpl - - - 7.0 - False - False - True - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - HYDRA_DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - ..\;..\..\Dcu\D10;..\..\..\Everwood\Dcu\D10 - HYDRA_DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - IDE Integration for Win32 - False - True - False - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - RemObjects_IDE_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CryptoKeyGenForm
-
- - - - -
CustomIDEMessagesForm
-
- -
DispatchersEditorForm
-
- -
NewProjectForm
-
- -
AboutForm
-
- -
ROServerClassForm
-
- -
ServerProjectOptions
-
- - - -
IdeData
-
- - - - - -
ROLoginNeededForm
-
- - -
ProductVersionInfoForm
-
- - - -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dof deleted file mode 100644 index 8ba533b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dof +++ /dev/null @@ -1,108 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - IDE Integration -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D5 -PackageDLLOutputDir=..\..\Dcu\D5 -PackageDCPOutputDir=..\..\Dcu\D5 -SearchPath=..\..\Dcu\D5;..\ -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=2 -MinorVer=0 -Release=0 -Build=106 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.0.106 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -L:\Others\Async Professional 4.0\A405_D50.BPL=Async Professional components -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 -[HistoryLists\hlUnitOutputDirectory] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 -[HistoryLists\hlBPLOutput] -Count=2 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -[HistoryLists\hlDCPOutput] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dpk deleted file mode 100644 index 9a3ed4d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.dpk +++ /dev/null @@ -1,67 +0,0 @@ -package RemObjects_IDE_D5; - -{$R *.RES} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - IDE Integration'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - Vcl50, - Vclx50, - Inet50, - RemObjects_Core_D5, - dsnide50; - -{%File '..\RemObjects.inc'} - -contains - uROIDEPrjWizard in 'uROIDEPrjWizard.pas', - uROIDEMenu in 'uROIDEMenu.pas', - uRORODLNotifier in 'uRORODLNotifier.pas', - uROIDETools in 'uROIDETools.pas', - uRODLGenTools in '..\CodeGen\uRODLGenTools.pas', - uRODLToPascalImpl in '..\CodeGen\uRODLToPascalImpl.pas', - uRODLToPascalIntf in '..\CodeGen\uRODLToPascalIntf.pas', - uRODLToPascalInvk in '..\CodeGen\uRODLToPascalInvk.pas', - fServerProjectOptions in 'fServerProjectOptions.pas' {ServerProjectOptions}, - fCustomIDEMessagesForm in 'fCustomIDEMessagesForm.pas' {CustomIDEMessagesForm}, - RemObjects_IDE_Reg in 'RemObjects_IDE_Reg.pas', - uROResWriter in 'uROResWriter.pas', - fDispatchersEditorForm in 'fDispatchersEditorForm.pas' {DispatchersEditorForm}, - uROIDEData in 'uROIDEData.pas' {IdeData: TDataModule}, - uRODLToPascal in '..\CodeGen\uRODLToPascal.pas', - fROAbout in 'fROAbout.pas' {AboutForm}, - uROIDEEditors in 'uROIDEEditors.pas', - uROProductVersionInfoForm in 'uROProductVersionInfoForm.pas' {ProductVersionInfoForm}, - uROProductVersionInfo in 'uROProductVersionInfo.pas', - uROProductVersionInfo_Intf in 'uROProductVersionInfo_Intf.pas', - fROServerClassForm in 'fROServerClassForm.pas' {ROServerClassForm}, - uRODECReg in '..\RODEC\uRODECReg.pas', - uROEncKeyPropEditor in '..\RODEC\uROEncKeyPropEditor.pas' {CryptoKeyGenForm}, - uROExtraEditors in 'uROExtraEditors.pas', - fNewProjectForm in 'fNewProjectForm.pas' {NewProjectForm}, - uRODLToPascalAsync in '..\CodeGen\uRODLToPascalAsync.pas', - uROLoginNeededForm in 'uROLoginNeededForm.pas' {ROLoginNeededForm}; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.res deleted file mode 100644 index a2de886..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dof deleted file mode 100644 index 29ede00..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dof +++ /dev/null @@ -1,127 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -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=RemObjects SDK - IDE Integration -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50 -Conditionals=HYDRA_DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -C:\WINDOWS\System32\CrTb2k_60.bpl=Toolbar 2000 and TBX for CodeRush 6 -L:\Packages\dcldxLayoutControlD6.bpl=ExpressLayout Control by Developer Express Inc. -L:\Packages\dclcxSpreadSheetVCLD6.bpl=ExpressSpreadSheet (VCL Edition) by Developer Express Inc. -l:\Packages\dclcxLibraryVCLD6.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridUtilsVCLD6.bpl=ExpressQuantumGrid 4 Utils (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxEditorsVCLD6.bpl=ExpressEditors Library 4 (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridVCLD6.bpl=ExpressQuantumGrid 4 (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSLnksD6.bpl=ExpressPrinting System ReportLinks (Standard) by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSTLLnkD6.bpl=ExpressPrinting System ReportLink for ExpressQuantumTreeList by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxDBTLLnkD6.bpl=ExpressPrinting System ReportLink for ExpressQuantumDBTreeList by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxDBGrLnkD6.bpl=ExpressPrinting System ReportLink for ExpressQuantumGrid by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSTeeChartD6.bpl=ExpressPrinting System ReportLink for TeeChart by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSDBTeeChartD6.bpl=ExpressPrinting System ReportLink for DBTeeChart by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxDBTVLnkD6.bpl=ExpressPrinting System ReportLink for ExpressDBTree by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxInsLnkD6.bpl=ExpressPrinting System ReportLink for ExpressInspector by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxOILnkD6.bpl=ExpressPrinting System ReportLink for ExpressRTTIInspector by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxMVLnkD6.bpl=ExpressPrinting System ReportLink for ExpressMasterView by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxOCLnkD6.bpl=ExpressPrinting System ReportLinks for ExpressOrgChart by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxDBOCLnkD6.bpl=ExpressPrinting System ReportLinks for ExpressDBOrgChart by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSdxFCLnkD6.bpl=ExpressPrinting System ReportLinks for ExpressFlowChart by Developer Express Inc. -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPScxSSLnkD6.bpl=ExpressPrinting System ReportLink for ExpressSpreadSheet by Developer Express Inc. -C:\Raize\BizComps\Bin\RzBizDcl60.bpl=Raize Business Component Architecture v4.0 -L:\Packages\CR_SuperPalette6.bpl=Super Palette -l:\Others\DevEx\ExpressPrinting System\Delphi 6\Lib\dxPSPrVwAdvD6.bpl=ExpressPrinting System Advanced Preview Window by Developer Express Inc. -[HistoryLists\hlConditionals] -Count=1 -Item0=xDEBUG_EVERWOOD_SHOW_NEW_MODULE_CODE -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\..\Dcu\D6 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=..\..\Dcu\D6 -[HistoryLists\hlDCPOutput] -Count=1 -Item0=..\..\Dcu\D6 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dpk deleted file mode 100644 index 141dfec..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.dpk +++ /dev/null @@ -1,79 +0,0 @@ -package RemObjects_IDE_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - IDE Integration'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE HYDRA_DESIGNTIME} - -requires - vcl, - designide, - RemObjects_Core_D6, - RemObjects_Everwood_D6, - vclx; - -{%File '..\RemObjects.inc'} - -contains - uROIDEPrjWizard in 'uROIDEPrjWizard.pas', - uROIDEMenu in 'uROIDEMenu.pas', - uRORODLNotifier in 'uRORODLNotifier.pas', - uROIDETools in 'uROIDETools.pas', - uRODLGenTools in '..\CodeGen\uRODLGenTools.pas', - uRODLToPascalImpl in '..\CodeGen\uRODLToPascalImpl.pas', - uRODLToPascalIntf in '..\CodeGen\uRODLToPascalIntf.pas', - uRODLToPascalInvk in '..\CodeGen\uRODLToPascalInvk.pas', - fServerProjectOptions in 'fServerProjectOptions.pas' {ServerProjectOptions}, - fCustomIDEMessagesForm in 'fCustomIDEMessagesForm.pas' {CustomIDEMessagesForm}, - RemObjects_IDE_Reg in 'RemObjects_IDE_Reg.pas', - uROResWriter in 'uROResWriter.pas', - fDispatchersEditorForm in 'fDispatchersEditorForm.pas' {DispatchersEditorForm}, - uROIDEData in 'uROIDEData.pas' {IdeData: TDataModule}, - uRODLToPascal in '..\CodeGen\uRODLToPascal.pas', - fROAbout in 'fROAbout.pas' {AboutForm}, - uROIDEEditors in 'uROIDEEditors.pas', - uROProductVersionInfoForm in 'uROProductVersionInfoForm.pas' {ProductVersionInfoForm}, - uROProductVersionInfo in 'uROProductVersionInfo.pas', - uROProductVersionInfo_Intf in 'uROProductVersionInfo_Intf.pas', - fROServerClassForm in 'fROServerClassForm.pas' {ROServerClassForm}, - uRODECReg in '..\RODEC\uRODECReg.pas', - uROEncKeyPropEditor in '..\RODEC\uROEncKeyPropEditor.pas' {CryptoKeyGenForm}, - uROExtraEditors in 'uROExtraEditors.pas', - fNewProjectForm in 'fNewProjectForm.pas' {NewProjectForm}, - uRODLToPascalAsync in '..\CodeGen\uRODLToPascalAsync.pas', - uROLoginNeededForm in 'uROLoginNeededForm.pas' {ROLoginNeededForm}, - uRODLTemplateBasedConverterUtils in '..\CodeGen2\uRODLTemplateBasedConverterUtils.pas', - uRODLAsyncConverter in '..\CodeGen2\uRODLAsyncConverter.pas', - uRODLConvertersUtils in '..\CodeGen2\uRODLConvertersUtils.pas', - uRODLCppConverters in '..\CodeGen2\uRODLCppConverters.pas', - uRODLDelphiConverters in '..\CodeGen2\uRODLDelphiConverters.pas', - uRODLImplConverter in '..\CodeGen2\uRODLImplConverter.pas', - uRODLIntfConverter in '..\CodeGen2\uRODLIntfConverter.pas', - uRODLInvkConverter in '..\CodeGen2\uRODLInvkConverter.pas', - uRODLSplitableConverter in '..\CodeGen2\uRODLSplitableConverter.pas', - uRODLTemplateBasedConverter in '..\CodeGen2\uRODLTemplateBasedConverter.pas', - uRODLLineStream in '..\CodeGen2\uRODLLineStream.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dof deleted file mode 100644 index 53b6208..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dof +++ /dev/null @@ -1,160 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - IDE Integration -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7;..\ -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50 -Conditionals=HYDRA_DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=2 -Build=284 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.2.284 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -l:\Packages\SchemaModelerUtils_d7.bpl=RemObjects Data Abstract - Schema Modeler Components (PRIVATE) -R:\NexusDB Pack\Dcu\D7\RemObjects_NexusDB_IDE_D7.bpl=RemObjects SDK - NexusDB IDE Integration -R:\Data Abstract\Dcu\D7\DataAbstract_IDE_D7.bpl=RemObjects Data Abstract - IDE Package -R:\Data Abstract\Dcu\D7\DataAbstract_DBXDriver_D7.bpl=RemObjects Data Abstract - dbExpress Driver -R:\Data Abstract\Dcu\D7\DataAbstract_IBXDriver_D7.bpl=RemObjects Data Abstract - InterBase Express Driver -R:\Data Abstract\Dcu\D7\DataAbstract_ADODriver_D7.bpl=RemObjects Data Abstract - ADOExpress/dbGo Driver -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlDCPOutput] -Count=1 -Item0=..\Dcu\D7 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dpk deleted file mode 100644 index d880190..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.dpk +++ /dev/null @@ -1,82 +0,0 @@ -package RemObjects_IDE_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - IDE Integration'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE HYDRA_DESIGNTIME} - -requires - designide, - vclx, - inet, - vcl, - rtl, - RemObjects_Core_D7, - RemObjects_Everwood_D7, - dbrtl; - -{%File '..\RemObjects.inc'} - -contains - uROIDEPrjWizard in 'uROIDEPrjWizard.pas', - uROIDEMenu in 'uROIDEMenu.pas', - uRORODLNotifier in 'uRORODLNotifier.pas', - uROIDETools in 'uROIDETools.pas', - uRODLGenTools in '..\CodeGen\uRODLGenTools.pas', - uRODLToPascalImpl in '..\CodeGen\uRODLToPascalImpl.pas', - uRODLToPascalIntf in '..\CodeGen\uRODLToPascalIntf.pas', - uRODLToPascalInvk in '..\CodeGen\uRODLToPascalInvk.pas', - fServerProjectOptions in 'fServerProjectOptions.pas' {ServerProjectOptions}, - fCustomIDEMessagesForm in 'fCustomIDEMessagesForm.pas' {CustomIDEMessagesForm}, - RemObjects_IDE_Reg in 'RemObjects_IDE_Reg.pas', - uROResWriter in 'uROResWriter.pas', - fDispatchersEditorForm in 'fDispatchersEditorForm.pas' {DispatchersEditorForm}, - uROIDEData in 'uROIDEData.pas' {IdeData: TDataModule}, - uRODLToPascal in '..\CodeGen\uRODLToPascal.pas', - fROAbout in 'fROAbout.pas' {AboutForm}, - uROIDEEditors in 'uROIDEEditors.pas', - uROProductVersionInfoForm in 'uROProductVersionInfoForm.pas' {ProductVersionInfoForm}, - uROProductVersionInfo in 'uROProductVersionInfo.pas', - uROProductVersionInfo_Intf in 'uROProductVersionInfo_Intf.pas', - fROServerClassForm in 'fROServerClassForm.pas' {ROServerClassForm}, - uRODECReg in '..\RODEC\uRODECReg.pas', - uROEncKeyPropEditor in '..\RODEC\uROEncKeyPropEditor.pas' {CryptoKeyGenForm}, - uROExtraEditors in 'uROExtraEditors.pas', - fNewProjectForm in 'fNewProjectForm.pas' {NewProjectForm}, - uRODLToPascalAsync in '..\CodeGen\uRODLToPascalAsync.pas', - uROLoginNeededForm in 'uROLoginNeededForm.pas' {ROLoginNeededForm}, - uRODLTemplateBasedConverterUtils in '..\CodeGen2\uRODLTemplateBasedConverterUtils.pas', - uRODLAsyncConverter in '..\CodeGen2\uRODLAsyncConverter.pas', - uRODLConvertersUtils in '..\CodeGen2\uRODLConvertersUtils.pas', - uRODLCppConverters in '..\CodeGen2\uRODLCppConverters.pas', - uRODLDelphiConverters in '..\CodeGen2\uRODLDelphiConverters.pas', - uRODLImplConverter in '..\CodeGen2\uRODLImplConverter.pas', - uRODLIntfConverter in '..\CodeGen2\uRODLIntfConverter.pas', - uRODLInvkConverter in '..\CodeGen2\uRODLInvkConverter.pas', - uRODLSplitableConverter in '..\CodeGen2\uRODLSplitableConverter.pas', - uRODLTemplateBasedConverter in '..\CodeGen2\uRODLTemplateBasedConverter.pas', - uRODLLineStream in '..\CodeGen2\uRODLLineStream.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.dpk deleted file mode 100644 index 7670a5e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.dpk +++ /dev/null @@ -1,52 +0,0 @@ -package RemObjects_IDE_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - IDE Integration'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - designide, - RemObjects_Core_K3, - vcl, - rtl, - designhooks, - visualclx, - netclx, - indy; - -contains - uRORODLNotifier in 'uRORODLNotifier.pas', - uROIDETools in 'uROIDETools.pas', - uRODLGenTools in '../CodeGen/uRODLGenTools.pas', - uRODLToPascalImpl in '../CodeGen/uRODLToPascalImpl.pas', - uRODLToPascalIntf in '../CodeGen/uRODLToPascalIntf.pas', - uRODLToPascalInvk in '../CodeGen/uRODLToPascalInvk.pas', - uRODLToPascalAsync in '../CodeGen/uRODLToPascalAsync.pas', - fCustomIDEMessagesFormKylix in 'fCustomIDEMessagesFormKylix.pas' {CustomIDEMessagesForm}, - RemObjects_IDE_Reg in 'RemObjects_IDE_Reg.pas', - uROResWriter in 'uROResWriter.pas', - uRODLToPascal in '../CodeGen/uRODLToPascal.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.kof deleted file mode 100644 index fd84ced..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.kof +++ /dev/null @@ -1,63 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - IDE Integration -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../../Dcu/K3 -PackageDLLOutputDir=../../Dcu/K3 -PackageDCPOutputDir=../../Dcu/K3 -SearchPath=../../Dcu/K3:../ -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_Reg.pas deleted file mode 100644 index 31a8464..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/RemObjects_IDE_Reg.pas +++ /dev/null @@ -1,159 +0,0 @@ -unit RemObjects_IDE_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -procedure Register; - -implementation - -uses - {vcl:}Classes, - {components:} - uROSOAPMessage, - uRODynamicRequest, - {$IFDEF MSWINDOWS} - uROWinMessageChannel, - uROWinMessageServer, - uROWinInetHttpChannel, - uRODLLChannel, - uRONamedPipeChannel, uRONamedPipeServer, - {$ENDIF MSWINDOWS} - uROBinMessage, - uROPostMessage, - {$IFDEF VER140UP} - uROSessions, - uRORemoteService, - {$ENDIF} - uROPoweredByRemObjectsButton, - uROEventRepository, - uRODBSessionManager, - uROMasterServerSessionManager, - uROMasterServerEventRepository, - - uROClient, uROServer, uRORemoteDataModule, - {Designtime:}fROAbout, uROIDEEditors, uRODLGenTools, uROExtraEditors, - {$IFDEF MSWINDOWS}uROProductVersionInfo,{$ENDIF MSWINDOWS} - {$IFDEF DELPHI5}DsgnIntf, DMDesigner, DesignIntf{$ELSE}DesignIntf, DesignEditors{$ENDIF}; - -{ Register } - -procedure Register; -begin - RegisterPropertyEditor(TypeInfo(TROMessageDispatchers), TROServer, prop_Dispatchers, TDispatchersProperty); - RegisterPropertyEditor(TypeInfo(string), TRORemoteService, prop_ServiceName, TROServiceNameProperty); - {$IFDEF VER140UP} - RegisterComponentEditor(TRORemoteService, TRORemoteServiceEditor); - RegisterComponentEditor(TROServer, TROServerEditor); - RegisterPropertyEditor(TypeInfo(string), TRODynamicRequest, prop_ServiceName, TRODynRequestServiceNameProperty); - RegisterPropertyEditor(TypeInfo(string), TRODynamicRequest, prop_OperationName, TRODynRequestOperationNameProperty); - RegisterComponentEditor(TRODynamicRequest, TRODynamicRequestEditor); - {$ENDIF VER140UP} - - {$IFDEF KYLIX} - RegisterCustomModule(TRORemoteDataModule,TCustomModule); - {$ELSE} - {$IFDEF DELPHI6UP} - RegisterCustomModule(TRORemoteDataModule,TCustomModule); - {$ELSE} - RegisterCustomModule(TRORemoteDataModule,TDataModuleDesignerCustomModule); - {$ENDIF} - {$ENDIF} - - RegisterRODataModuleClass(TRORemoteDataModule, - 'RemObjects SDK &Remote Datamodule', - 'Standard RemObjects SDK datamodule. '+ - 'This is the preferred server type when you need to use Delphi components (i.e. datasets, database connections) at design time.', - 'uRORemoteDataModule' - ); - - { TROBinMessage } - RegisterPropertiesInCategory('Message', TROBinMessage, ['UseCompression', 'CompressionBufferSize', 'MinSizeForCompression']); - RegisterPropertiesInCategory('Message', TROPostMessage, ['BinaryType']); - RegisterPropertiesInCategory('Message', TROSoapMessage, ['SerializationOptions', 'CustomLocation']); - - { TROTransportChannel } - RegisterPropertiesInCategory('Load Balancing', TROTransportChannel, ['ProbeFrequency', 'ProbeServers', 'ServerLocators', 'SynchronizedProbing', 'DispatchOptions']); - RegisterPropertiesInCategory('Connection', TROTransportChannel, ['Encryption', 'Busy']); - - { TROWinInetHTTPChannel } - RegisterPropertiesInCategory('Client', TROWinInetHTTPChannel, ['UserAgent', 'TargetURL', 'Login']); - RegisterPropertiesInCategory('Connection', TROWinInetHTTPChannel, ['StoreConnected', 'Connected', 'KeepConnection']); - - { TROWinMessageChannel } - RegisterPropertiesInCategory('Client', TROWinMessageChannel, ['ServerID']); - RegisterPropertiesInCategory('AutoStart', TROWinMessageChannel, ['DefaultDirectory', 'Filename', 'Parameters', 'StartServer', 'Delay']); - - { TRODLLChannel } - RegisterPropertiesInCategory('Client', TRODLLChannel, ['DLLName', 'KeepDLLLoaded']); - - { TRONamedPipeChannel } - RegisterPropertiesInCategory('Client', TRONamedPipeChannel, ['ActivateOnDemand', 'Active', 'ServerID', 'ServerName']); - - - { TROServer } - RegisterPropertiesInCategory('Server', TROServer, ['Dispatchers']); - RegisterPropertiesInCategory('Connection', TROServer, ['Encryption', 'Active', 'StoreActive']); - - { TROWinMessageServer } - RegisterPropertiesInCategory('Server', TROWinMessageServer, ['ServerID']); - - { TRONamedPipeServer } - RegisterPropertiesInCategory('Server', TRONamedPipeServer, ['ServerID']); - - - { TROCustomSessionManager } - RegisterPropertiesInCategory('Sessions', TROCustomSessionManager, ['MaxSessions', 'SessionDuration']); - - { TRODBSessionManager } - RegisterPropertiesInCategory('Sessions', TRODBSessionManager, ['ClearSessionsOnCreate', 'ClearSessionsOnDestroy', - 'FieldNameCreated', 'FieldNameData', 'FieldNameLastAccessed', 'FieldNameSessionID']); - - { TRODynamicRequest } - RegisterPropertiesInCategory('Request', TRODynamicRequest, ['OperationName', 'ServiceName', 'Params']); - - { TROEventReceiver } - RegisterPropertiesInCategory('EventReceiver', TROEventReceiver, ['Active', 'Interval', 'ServiceName', 'SynchronizedProbing']); - - { TROPoweredByButton } - RegisterPropertiesInCategory('Powered By Button', TROPoweredByRemObjectsButton, ['ApplicationType']); - - - - { TROEmailChannel } - //RegisterPropertiesInCategory('Client', TROEmailChannel, ['ClientEmail', 'DeleteOldResponses', 'ServerEmail', 'Pp3ServerAddress', 'SmtpServerAddress']); - - { TROIndyHTTPChannel } - //RegisterPropertiesInCategory('Client', TROIndyHTTPChannel, ['KeepAlive', 'TargetURL']); - - { TROIndyTCPChannel } - //RegisterPropertiesInCategory('Client', TROIndyTCPChannel, ['DisableNagle', 'Host', 'Port', 'KeepAlive']); - - { TROIndyUDPChannel } - //RegisterPropertiesInCategory('Client', TROIndyUDPChannel, ['AsyncTimeout', 'Host', 'Port', 'Retrys']); //todo -end; - -{$IFDEF MSWINDOWS} -initialization - RegisterProduct('{154FA67E-DC1B-4784-BF27-EC81D5AEBCF2}',VersionBuildNo(hInstance)); -finalization - UnregisterProduct('{154FA67E-DC1B-4784-BF27-EC81D5AEBCF2}'); -{$ENDIF MSWINDOWS} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/Resources.BDS.RES b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/Resources.BDS.RES deleted file mode 100644 index 5b50694..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/Resources.BDS.RES and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.dfm deleted file mode 100644 index 1224c66..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.dfm +++ /dev/null @@ -1,189 +0,0 @@ -object CustomIDEMessagesForm: TCustomIDEMessagesForm - Left = 570 - Top = 352 - Width = 472 - Height = 169 - ActiveControl = ListView - Caption = 'RemObjects Preprocessor' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [] - OldCreateOrder = True - OnClose = FormClose - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object ListView: TListView - Left = 0 - Top = 0 - Width = 464 - Height = 142 - Align = alClient - Columns = < - item - AutoSize = True - Caption = 'Message' - end> - ColumnClick = False - ReadOnly = True - PopupMenu = PopupMenu1 - SmallImages = ImageList - TabOrder = 0 - ViewStyle = vsReport - end - object ImageList: TImageList - Left = 40 - Top = 64 - Bitmap = { - 494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000001000000001002000000000000010 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000DFBCAD00CCB6AD00C4ABA200D5B2A400000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000E1BCAC00D9CDCA00C7CACE00B2B0B400B3A39D00E1BCAC000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E3E003E3E - 3E00000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000E1C0AF00E8DCD900E3E5E800D0A79600C49B8A00B4AFB100B4A49F00D4B2 - A300000000000000000000000000000000000000000000000000000000003E3E - 3E003A3A3B003737380036363600363736003738370037383700373838003839 - 39003B3B3B003E3E3E0000000000000000000000000000000000000000000000 - 00000000000000000000000000000975A700075C84000C6F9D00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000E1BC - AC00EFE6E200F5FEFF00D3957800BA3C0800BC3D0A00C27F6300B6B3B600B2A1 - 9E00E1BCAC000000000000000000000000000000000000000000000000003838 - 380046463F00535348005A594D005B5A4E005F5B4F0059564A0057544900514F - 440046453D003A3B380000000000000000000000000000000000000000000000 - 000000000000000000000670A4003F9AB8006E533B001521260018769F000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000E1BCAC00F3E8 - E200FEFFFF00D99E8400C55C2E00E5B39A00E5B29900C85D2E00C1795A00B5B2 - B600B2A29E00D3B1A2000000000000000000000000000000000000000000726F - 6B00828086006C6B97006461A00056529D004C4699004F499600585295005D58 - 8B00706A7B006762610000000000000000000000000000000000000000000000 - 0000000000000670A40031CDFF0050A8BF00FFDAA0007C5F45001B3B4C000000 - 0000005286000052860000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000E1BCAC00F5E9E500FFFF - FF00DFA58B00BA421000BF502000F8EBE400F7E8E000BF502000BE461300C27C - 5E00B6B2B500B2A19E00E1BCAC00000000000000000000000000000000008D8A - A6003838AF001615A6000807A6000000A5000000A5000000A6000504A700100F - A8002926A7007B72950000000000000000000000000000000000000000000670 - A4002FBFF00028ACDF0059D2FE0078C9E700E3BB8F00D7A87900283239001D7B - AB0000528600005286000A587E00000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000E1BCAB00F5E8E300FFFFFF00E8B9 - 9F00C4552000C14F1F00C0501F00F5E1D800F4DED400BF4C1D00BE4A1B00BF46 - 1300C1795A00B4ADB000AE9F9C00D4B2A2000000000000000000000000000000 - 00000018E100001FE7000020E900001EE400001ADC000012CE00000ABD000002 - AC000001AB0000000000000000000000000000000000000000000670A40043D0 - FE006CDEFF005CB4DB00AEDDF300F1FFFF00DEDBD5009B8873002C5F76005FBD - E60065BFE000837561001716150004557F000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000E7C9BC00FFFFFF00F6E2D200D378 - 3E00CE6F3800CA653000C65C2A00F6E4DA00F4DFD500BF4D1E00BE4B1C00BF4E - 1E00BF441200C4978400B3B2B500C2AAA2000000000000000000000000000000 - 0000002AF6000130FF000030FF00002EFF000029F8000021E8000016D5000009 - BC000004AE000000000000000000000000000C7BAE002998C80077DDFF00A3E5 - FF00CFF1FF00DBF0F9005AA9C800B1D8E9008BCAE500379AC6001AABDA004AD0 - FF002EB8E700D0BE9D007C563900023B57000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000E7C9BC00FFFFFF00F8E6D700DD8F - 5000D8834800D3784000CE6F3800F8EAE100F5E3D900C0512000BE4B1B00BE4B - 1C00BD471500D0AC9E00C8CACE00CFB6AD000000000000000000000000000000 - 00000C3DFE00174CFF001246FF000A40FF000236FF00002CFB000021E9000013 - CC000009B900000000000000000000000000086C9F000670A400CDEBF900FAFF - FF00F2FCFF00DBF5FF0060BDE0000697C600008EBC000089B8000BA9D50034C7 - FA0033CFFF007EB8BF008B6B4C00014262000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000E1BCAB00F5E8E200FFFFFF00F3D7 - BA00DF955500D9894A00DD946100F5DECD00EDC9B300C8602D00C1511F00BC46 - 1400D69F8700E3E8EB00DACBC600DFBAA9000000000000000000000000000000 - 00002354FF003666FF003363FF002759FF001248FF000237FF000029F900001A - DC00000DC3000000000000000000000000000670A400BCDBEA000670A400A1D2 - E60093D9F70072DBFF0053D6FF0033C0F100189CCE00058CBC0000A0CB001FB5 - E40037CBFC0023B1E5001A668700025F8F000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000E1BCAC00F3E5DF00FFFF - FF00F6DEC300E4A16000DF965800E1A07000DB926300CE6F3700CA622B00E0AF - 9700F4FEFF00E7DAD500E1BCAC00000000000000000000000000000000000000 - 0000517AFF007097FD005985FD003F6EFF002156FF00073FFF00002DFE00001E - E6000010C900000000000000000000000000000000000670A4000670A4000670 - A40026A1D20026ADE00031C2F50037C9FB0034C4F7002AB5E700128DBE000172 - A1000F7BAF000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000E0BAA900F2E5 - DE00FFFFFF00F8E0C600E7A86500FBEFE300F9E7DB00D57E4000E8B79A00FEFF - FF00EEE4E000E0BCAC0000000000000000000000000000000000000000000000 - 00005F85FE00A2C0FD007AA1FD005681FE00265AFF000A42FF00002FFE000020 - EA000011CA000000000000000000000000000000000000000000000000000000 - 0000000000000E85B8000C7EB2001393C5000B8DC000006C9F00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000000000E1BC - AC00F2E3DB00FFFFFF00F8E4CA00F4D2A500EFC19200F0CBA900FFFFFF00F4E9 - E300E1BCAC000000000000000000000000000000000000000000000000000000 - 0000000000007698FD0092B1FE00638CFF001D55FF00063EFF00002EFC00001D - E300000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000E0B9A700F2E2DB00FFFFFF00FBEFDD00F8E7D300FFFFFF00F7EBE600E1BF - AE00000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000587DFE00254FFE000A38FC00002BF4000025F0000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000E1BCAC00F2E2DA00FFFFFF00FFFFFF00F6ECE700E1BCAC000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000E1BCAB00E7C9BC00E7C9BC00E1BCAB00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000424D3E000000000000003E000000 - 2800000040000000100000000100010000000000800000000000000000000000 - 000000000000000000000000FFFFFF00FC3FFFFFFFFF0000F81FF80FFFFF0000 - F00FE003FE3F0000E007E003FC1F0000C003E003F81300008001E003E0010000 - 0000F007C00000000000F007000000000000F007000000000000F00700000000 - 8001F00780070000C003F007F83F0000E007F80FFFFF0000F00FFC1FFFFF0000 - F81FFFFFFFFF0000FC3FFFFFFFFF000000000000000000000000000000000000 - 000000000000} - end - object PopupMenu1: TPopupMenu - Left = 88 - Top = 16 - object CopytoClipboard1: TMenuItem - Caption = 'Copy to Clipboard' - OnClick = CopytoClipboard1Click - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.pas deleted file mode 100644 index 3282f6f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesForm.pas +++ /dev/null @@ -1,137 +0,0 @@ -unit fCustomIDEMessagesForm; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -uses - {$IFDEF KYLIX} - SysUtils, Classes, QGraphics, QMenus, QTypes, QImgList, - QControls, QComCtrls, QForms, QDialogs, uROIDETools, Menus, ImgList, - Controls, ComCtrls - {$ELSE} - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - ComCtrls, ImgList, uROIDETools, Menus - {$ENDIF}; - -type - TCustomIDEMessagesForm = class(TForm) - ListView: TListView; - ImageList: TImageList; - PopupMenu1: TPopupMenu; - CopytoClipboard1: TMenuItem; - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure FormShow(Sender: TObject); - procedure CopytoClipboard1Click(Sender: TObject); - private - - public - destructor Destroy; override; - - procedure FillList(aMessageList : TIDEMessageList); - end; - -var DisplayIDEMessageForm : boolean = TRUE; - -function IDEMessageForm : TCustomIDEMessagesForm; - -implementation - -uses ClipBrd; - -{$R *.DFM} - -var - _CustomIDEMessagesForm: TCustomIDEMessagesForm; - -function IDEMessageForm : TCustomIDEMessagesForm; -begin - if (_CustomIDEMessagesForm=NIL) - then _CustomIDEMessagesForm := TCustomIDEMessagesForm.Create(Application); - - if DisplayIDEMessageForm - then _CustomIDEMessagesForm.Show; - - result := _CustomIDEMessagesForm; -end; - -destructor TCustomIDEMessagesForm.Destroy; -begin - _CustomIDEMessagesForm := NIL; - inherited; -end; - -procedure TCustomIDEMessagesForm.FillList(aMessageList: TIDEMessageList); -var i : integer; - item : TListItem; - s : string; -begin - Caption := 'RemObjects Preprocessor'; - ListView.Items.Clear; - if (aMessageLIst=NIL) then Exit; - - with aMessageList do begin - for i := 0 to (Count-1) do begin - item := ListView.Items.Add; - with Items[i] do begin - if (PrefixStr<>'') then s := PrefixStr+': ' else s := ''; - if (FileName<>'') then s := s+'('+Filename+')'; - s := s+MessageStr; - - item.Caption := s; - item.ImageIndex := Ord(MessageType); - {$IFNDEF KYLIX} - item.StateIndex := Ord(MessageType); - {$ENDIF} - end; - end; - - if (Count>0) then ListView.Items[Count-1].Selected := TRUE; - Caption := Caption+' ('+ IntToStr(Count)+' messages)'; - end; -end; - -procedure TCustomIDEMessagesForm.FormClose(Sender: TObject; - var Action: TCloseAction); -begin - Action := caFree; -end; - -procedure TCustomIDEMessagesForm.FormShow(Sender: TObject); -begin - Height := 150; - Width := 400; - Left := Screen.Width-Width; - Top := Screen.Height-Height; -end; - -procedure TCustomIDEMessagesForm.CopytoClipboard1Click(Sender: TObject); -var i : integer; - s : string; -begin - s := ''; - for i := 0 to (ListView.Items.Count-1) do - s := s+ListView.Items[i].Caption+#13#10; - - Clipboard.AsText := s; -end; - -initialization - _CustomIDEMessagesForm := NIL; - -finalization - _CustomIDEMessagesForm.Free; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.dfm deleted file mode 100644 index 53d17ca..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.dfm +++ /dev/null @@ -1,54 +0,0 @@ -object CustomIDEMessagesForm: TCustomIDEMessagesForm - Left = 433 - Top = 247 - Width = 472 - Height = 169 - ActiveControl = ListView - Caption = 'RemObjects Preprocessor' - Color = clButton - Font.Color = clText - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [] - Font.Weight = 0 - ParentFont = False - OnClose = FormClose - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - TextWidth = 5 - object ListView: TListView - Left = 0 - Top = 0 - Width = 472 - Height = 169 - Align = alClient - ColumnClick = False - ColumnMove = False - Columns = < - item - AllowClick = False - AutoSize = True - Caption = 'Message' - Tag = 0 - Width = 50 - end> - PopupMenu = PopupMenu1 - ReadOnly = True - TabOrder = 0 - ViewStyle = vsReport - end - object ImageList: TImageList - Left = 40 - Top = 64 - end - object PopupMenu1: TPopupMenu - Left = 88 - Top = 16 - object CopytoClipboard1: TMenuItem - Caption = 'Copy to Clipboard' - OnClick = CopytoClipboard1Click - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.pas deleted file mode 100644 index 5fc3228..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fCustomIDEMessagesFormKylix.pas +++ /dev/null @@ -1,128 +0,0 @@ -unit fCustomIDEMessagesFormKylix; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ../eDefines.inc} - -interface - -uses - SysUtils, Classes, QGraphics, QMenus, QTypes, QImgList, - QControls, QComCtrls, QForms, QDialogs, uROIDETools, Menus, ImgList; - -type - TCustomIDEMessagesForm = class(TForm) - ListView: TListView; - ImageList: TImageList; - PopupMenu1: TPopupMenu; - CopytoClipboard1: TMenuItem; - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure FormShow(Sender: TObject); - procedure CopytoClipboard1Click(Sender: TObject); - private - - public - destructor Destroy; override; - - procedure FillList(aMessageList : TIDEMessageList); - end; - -function IDEMessageForm : TCustomIDEMessagesForm; - -var - DisplayIDEMessageForm: Boolean = TRUE; - -implementation - -uses ClipBrd; - -{$R *.dfm} - -var - _CustomIDEMessagesForm: TCustomIDEMessagesForm; - -function IDEMessageForm : TCustomIDEMessagesForm; -begin - if (_CustomIDEMessagesForm=NIL) - then _CustomIDEMessagesForm := TCustomIDEMessagesForm.Create(Application); - if DisplayIDEMessageForm - then _CustomIDEMessagesForm.Show; - - result := _CustomIDEMessagesForm; -end; - -destructor TCustomIDEMessagesForm.Destroy; -begin - _CustomIDEMessagesForm := NIL; - inherited; -end; - -procedure TCustomIDEMessagesForm.FillList(aMessageList: TIDEMessageList); -var i : integer; - item : TListItem; - s : string; -begin - Caption := 'RemObjects Preprocessor'; - ListView.Items.Clear; - if (aMessageLIst=NIL) then Exit; - - with aMessageList do begin - for i := 0 to (Count-1) do begin - item := ListView.Items.Add; - with Items[i] do begin - if (PrefixStr<>'') then s := PrefixStr+': ' else s := ''; - if (FileName<>'') then s := s+'('+Filename+')'; - s := s+MessageStr; - - item.Caption := s; - item.ImageIndex := Ord(MessageType); - end; - end; - - if (Count>0) then ListView.Items[Count-1].Selected := TRUE; - Caption := Caption+' ('+ IntToStr(Count)+' messages)'; - end; -end; - -procedure TCustomIDEMessagesForm.FormClose(Sender: TObject; - var Action: TCloseAction); -begin - Action := caFree; -end; - -procedure TCustomIDEMessagesForm.FormShow(Sender: TObject); -begin - Height := 150; - Width := 400; - Left := Screen.Width-Width; - Top := Screen.Height-Height; -end; - -procedure TCustomIDEMessagesForm.CopytoClipboard1Click(Sender: TObject); -var i : integer; - s : string; -begin - s := ''; - for i := 0 to (ListView.Items.Count-1) do - s := s+ListView.Items[i].Caption+#13#10; - - Clipboard.AsText := s; -end; - -initialization - _CustomIDEMessagesForm := NIL; - -finalization - _CustomIDEMessagesForm.Free; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.dfm deleted file mode 100644 index 4dd1c81..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.dfm +++ /dev/null @@ -1,242 +0,0 @@ -object DispatchersEditorForm: TDispatchersEditorForm - Left = 433 - Top = 253 - BorderStyle = bsToolWindow - Caption = 'Dispatchers Editor' - ClientHeight = 276 - ClientWidth = 342 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 4 - Top = 207 - Width = 46 - Height = 13 - Caption = 'Message:' - end - object Label3: TLabel - Left = 8 - Top = 231 - Width = 42 - Height = 13 - Caption = 'Enabled:' - end - object lblPathInfo: TLabel - Left = 4 - Top = 255 - Width = 49 - Height = 13 - Caption = 'Path Info:' - end - object ListView: TListView - Left = 4 - Top = 5 - Width = 332 - Height = 156 - Anchors = [akLeft, akTop, akRight] - Columns = < - item - Caption = 'Enabled' - Width = 70 - end - item - Caption = 'Message' - Width = 150 - end - item - AutoSize = True - Caption = 'Path Info' - end> - ColumnClick = False - HideSelection = False - ReadOnly = True - RowSelect = True - TabOrder = 0 - ViewStyle = vsReport - OnSelectItem = ListViewSelectItem - end - object bAdd: TBitBtn - Left = 181 - Top = 170 - Width = 75 - Height = 25 - Action = ac_Add - Anchors = [akTop, akRight] - Caption = '&Add' - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF035D05035D05FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF68 - 6868686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF791058C0D035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF808080686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79105950E035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF848484686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79105920D035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF838383686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79106950F035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF858585686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 035D05035D05035D05035D05035D055BF7910C9C18035D05035D05035D05035D - 05035D05FF00FFFF00FFFF00FFFF00FF686868686868686868686868686868DF - DFDF8C8C8C686868686868686868686868686868FF00FFFF00FFFF00FF035D05 - 5BF7913BDA6930CF572AC64D21B83C17A62B119F210D9E1C0A9A1506920E0593 - 0D058B0D035D05FF00FFFF00FF686868DFDFDFC4C4C4B9B9B9B2B2B2A7A7A799 - 99999292928F8F8F8A8A8A8383838383837F7F7F686868FF00FFFF00FF035D05 - 5BF7915BF7915BF7915BF7915BF7915BF79118A92F5BF7915BF7915BF7915BF7 - 915BF791035D05FF00FFFF00FF686868DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDF9B9B9BDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF686868FF00FFFF00FFFF00FF - 035D05035D05035D05035D05035D055BF79125BC42035D05035D05035D05035D - 05035D05FF00FFFF00FFFF00FFFF00FF686868686868686868686868686868DF - DFDFABABAB686868686868686868686868686868FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79130CE57035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFB9B9B9686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF7913BD968035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFC3C3C3686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79148EB7F035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFD1D1D1686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF7915BF791035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFDFDFDF686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF035D05035D05FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF68 - 6868686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object bDelete: TBitBtn - Left = 260 - Top = 170 - Width = 75 - Height = 25 - Action = ac_Remove - Caption = '&Remove' - TabOrder = 2 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF0104A20104A20104A20104A20104A20104A20104A20104A20104A20104 - A2FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF79797979797979797979797979 - 7979797979797979797979797979797979FF00FFFF00FFFF00FFFF00FFFF00FF - 0104A25983FF0026FF0030FF0030FB002FF2002FE9002EE10030D80031D00034 - CB0104A2FF00FFFF00FFFF00FFFF00FF797979D4D4D4A7A7A7A7A7A7A5A5A5A1 - A1A19C9C9C9898989494949090908D8D8D797979FF00FFFF00FFFF00FFFF00FF - 0104A2ABC2FF6480FF6688FF6688FF6687FA6787F56787F05779E94D70E44D74 - E20104A2FF00FFFF00FFFF00FFFF00FF797979FDFDFDD9D9D9DADADADADADAD8 - D8D8D6D6D6D3D3D3C8C8C8C0C0C0BFBFBF797979FF00FFFF00FFFF00FFFF00FF - FF00FF0104A20104A20104A20104A20104A20104A20104A20104A20104A20104 - A2FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF79797979797979797979797979 - 7979797979797979797979797979797979FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object cbMessage: TComboBox - Left = 57 - Top = 203 - Width = 280 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 13 - TabOrder = 3 - OnChange = cbMessageChange - end - object ePathInfo: TEdit - Left = 57 - Top = 251 - Width = 280 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 4 - Text = 'ePathInfo' - OnChange = ePathInfoChange - end - object cbEnabled: TComboBox - Left = 57 - Top = 227 - Width = 280 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 13 - TabOrder = 5 - OnChange = cbEnabledChange - Items.Strings = ( - 'False' - 'True') - end - object ActionList1: TActionList - OnUpdate = ActionList1Update - Left = 48 - Top = 168 - object ac_Add: TAction - Caption = '&Add' - OnExecute = bAddClick - end - object ac_Remove: TAction - Caption = '&Remove' - OnExecute = bDeleteClick - end - object ac_Close: TAction - Caption = 'ac_Close' - ShortCut = 27 - OnExecute = ac_CloseExecute - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.pas deleted file mode 100644 index 959e26c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorForm.pas +++ /dev/null @@ -1,260 +0,0 @@ -unit fDispatchersEditorForm; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library -{ -{ compiler: Delphi 5 and up, Kylix 2 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, ComCtrls, - uROClient, uROServer, uROHTTPDispatch, ActnList; - -type - TDispatchersEditorForm = class(TForm) - ListView: TListView; - bAdd: TBitBtn; - bDelete: TBitBtn; - cbMessage: TComboBox; - Label1: TLabel; - Label3: TLabel; - lblPathInfo: TLabel; - ePathInfo: TEdit; - cbEnabled: TComboBox; - ActionList1: TActionList; - ac_Add: TAction; - ac_Remove: TAction; - ac_Close: TAction; - procedure bDeleteClick(Sender: TObject); - procedure bAddClick(Sender: TObject); - procedure ListViewSelectItem(Sender: TObject; Item: TListItem; - Selected: Boolean); - procedure cbMessageChange(Sender: TObject); - procedure cbEnabledChange(Sender: TObject); - procedure ePathInfoChange(Sender: TObject); - procedure ActionList1Update(Action: TBasicAction; - var Handled: Boolean); - procedure ac_CloseExecute(Sender: TObject); - private - fInChange: boolean; - fServer : TROServer; - fShowPathInfo, - fSelectingItem : boolean; - - procedure LoadMessages; - procedure RefreshDispatchers; - procedure SetShowPathInfo(const Value: boolean); - function GetDispatchers: TROMessageDispatchers; - procedure SetServer(const Value: TROServer); - function GetDispatcher: TROMessageDispatcher; - - public - constructor Create(aServer : TROServer); reintroduce; - destructor Destroy; override; - - property Server : TROServer read fServer write SetServer; - property Dispatchers : TROMessageDispatchers read GetDispatchers; - property Dispatcher : TROMessageDispatcher read GetDispatcher; - end; - -var - DispatchersEditorForm: TDispatchersEditorForm; - -implementation - -{$R *.dfm} - -const BoolStrs : array[boolean] of string = ('False', 'True'); - -{ TDispatchersEditorForm } - -constructor TDispatchersEditorForm.Create(aServer : TROServer); -begin - inherited Create(NIL); - - fSelectingItem := FALSE; - Server := aServer; - RefreshDispatchers; - - if ListView.Items.Count > 0 then - ListView.Items[0].Selected := true; -end; - -destructor TDispatchersEditorForm.Destroy; -begin - inherited; -end; - -procedure TDispatchersEditorForm.RefreshDispatchers; -var idx, i : integer; - item : TListItem; -begin - if fSelectingItem then Exit; - - if (ListView.Selected<>NIL) - then idx := ListView.Selected.Index - else idx := -1; - - ListView.Items.Clear; - for i := 0 to (Dispatchers.Count-1) do begin - item := ListView.Items.Add; - item.Caption := BoolStrs[Dispatchers[i].Enabled]; - item.SubItems.Add(Dispatchers[i].Name); - - if fShowPathInfo - then item.SubItems.Add(TROHTTPDispatcher(Dispatchers[i]).PathInfo); - end; - - if (idx>=0) and (idx0) and not Dispatchers.SupportsMultipleDispatchers - then MessageDlg(Server.ClassName+' only supports one dispatcher', mtWarning, [mbOK],0) - - else begin - Dispatchers.Add; - RefreshDispatchers; - ListView.Items[ListView.Items.Count-1].Selected := true; - end; -end; - -procedure TDispatchersEditorForm.ListViewSelectItem(Sender: TObject; - Item: TListItem; Selected: Boolean); -begin - fSelectingItem := TRUE; - try - if (Dispatcher<>NIL) then - with Dispatcher do begin - cbEnabled.ItemIndex := Ord(Enabled); - - if (Message<>NIL) - then cbMessage.ItemIndex := cbMessage.Items.IndexOf(Message.Name) - else cbMessage.ItemIndex := 0; - - if fShowPathInfo - then ePathInfo.Text := TROHTTPDispatcher(Dispatcher).PathInfo; - end; - - finally - fSelectingItem := FALSE; - end; -end; - -function TDispatchersEditorForm.GetDispatchers: TROMessageDispatchers; -begin - result := fServer.Dispatchers; -end; - -procedure TDispatchersEditorForm.LoadMessages; -var i : integer; -begin - cbMessage.Items.Clear; - - cbMessage.Items.Add('-'); - with fServer.Owner do - for i := 0 to (ComponentCount-1) do begin - if (Components[i] is TROMessage) then cbMessage.Items.Add(TROMessage(Components[i]).Name); - end; -end; - -procedure TDispatchersEditorForm.SetServer(const Value: TROServer); -begin - fServer := Value; - if (Value=NIL) then Exit; // Just in case... - - Caption := fServer.Name+' Dispatchers'; - - SetShowPathInfo(Dispatchers is TROHTTPMessageDispatchers); - LoadMessages; -end; - -procedure TDispatchersEditorForm.cbMessageChange(Sender: TObject); -begin - if (Dispatcher=NIL) then Exit; - - if (cbMessage.Text<>'-') - then Dispatcher.Message := TROMessage(fServer.Owner.FindComponent(cbMessage.Text)) - else Dispatcher.Message := NIL; - - RefreshDispatchers; -end; - -procedure TDispatchersEditorForm.cbEnabledChange(Sender: TObject); -begin - if (Dispatcher=NIL) then Exit; - - Dispatcher.Enabled := boolean(Ord(cbEnabled.ItemIndex)); - - RefreshDispatchers; -end; - -procedure TDispatchersEditorForm.ePathInfoChange(Sender: TObject); -begin - if fInChange then exit; - - fInChange := true; - try - - if (Dispatcher=NIL) then Exit; - TROHTTPDispatcher(Dispatcher).PathInfo := ePathInfo.Text; - //ePathInfo.Text := TROHTTPDispatcher(Dispatcher).PathInfo; - //1.0.4: read back PathInfo value, because the Dispatcher might adjust it. - - RefreshDispatchers; - finally - fInChange := false; - end; -end; - -function TDispatchersEditorForm.GetDispatcher: TROMessageDispatcher; -begin - if (ListView.Selected=NIL) - then result := NIL - else result := Dispatchers[ListView.Selected.Index]; -end; - -procedure TDispatchersEditorForm.ActionList1Update(Action: TBasicAction; - var Handled: Boolean); -begin - ac_Remove.Enabled := Assigned(ListView.Selected); - cbMessage.Enabled := ac_Remove.Enabled; - ePathInfo.Enabled := ac_Remove.Enabled; - cbEnabled.Enabled := ac_Remove.Enabled; -end; - -procedure TDispatchersEditorForm.ac_CloseExecute(Sender: TObject); -begin - Close(); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.dfm deleted file mode 100644 index b68ed91..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.dfm +++ /dev/null @@ -1,248 +0,0 @@ -object DispatchersEditorForm: TDispatchersEditorForm - Left = 353 - Top = 257 - Width = 348 - Height = 292 - HorzScrollBar.Range = 335 - VertScrollBar.Range = 272 - ActiveControl = ListView - Caption = 'Dispatchers Editor' - Color = clBackground - Font.Color = clBlack - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [] - Font.Weight = 0 - ParentFont = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - TextWidth = 5 - object Label1: TLabel - Left = 4 - Top = 207 - Width = 43 - Height = 13 - Caption = 'Message:' - end - object Label3: TLabel - Left = 8 - Top = 231 - Width = 40 - Height = 13 - Caption = 'Enabled:' - end - object lblPathInfo: TLabel - Left = 4 - Top = 255 - Width = 47 - Height = 13 - Caption = 'Path Info:' - end - object ListView: TListView - Left = 4 - Top = 5 - Width = 338 - Height = 156 - Anchors = [akLeft, akTop, akRight] - ColumnClick = False - ColumnMove = False - Columns = < - item - AllowClick = False - Caption = 'Enabled' - Tag = 0 - Width = 70 - end - item - AllowClick = False - Caption = 'Message' - Tag = 0 - Width = 150 - end - item - AllowClick = False - AutoSize = True - Caption = 'Path Info' - Tag = 0 - Width = 50 - end> - RowSelect = True - ReadOnly = True - TabOrder = 0 - ViewStyle = vsReport - OnSelectItem = ListViewSelectItem - end - object bAdd: TBitBtn - Left = 187 - Top = 170 - Width = 75 - Height = 25 - Action = ac_Add - Anchors = [akTop, akRight] - Caption = '&Add' - TabOrder = 1 - Glyph.Data = { - 3A060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF035D05035D05FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF68 - 6868686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF791058C0D035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF808080686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79105950E035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF848484686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79105920D035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF838383686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79106950F035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDF858585686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 035D05035D05035D05035D05035D055BF7910C9C18035D05035D05035D05035D - 05035D05FF00FFFF00FFFF00FFFF00FF686868686868686868686868686868DF - DFDF8C8C8C686868686868686868686868686868FF00FFFF00FFFF00FF035D05 - 5BF7913BDA6930CF572AC64D21B83C17A62B119F210D9E1C0A9A1506920E0593 - 0D058B0D035D05FF00FFFF00FF686868DFDFDFC4C4C4B9B9B9B2B2B2A7A7A799 - 99999292928F8F8F8A8A8A8383838383837F7F7F686868FF00FFFF00FF035D05 - 5BF7915BF7915BF7915BF7915BF7915BF79118A92F5BF7915BF7915BF7915BF7 - 915BF791035D05FF00FFFF00FF686868DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDF9B9B9BDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF686868FF00FFFF00FFFF00FF - 035D05035D05035D05035D05035D055BF79125BC42035D05035D05035D05035D - 05035D05FF00FFFF00FFFF00FFFF00FF686868686868686868686868686868DF - DFDFABABAB686868686868686868686868686868FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79130CE57035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFB9B9B9686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF7913BD968035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFC3C3C3686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF79148EB7F035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFD1D1D1686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FF035D055BF7915BF791035D05FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF686868DF - DFDFDFDFDF686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FF035D05035D05FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF68 - 6868686868FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object bDelete: TBitBtn - Left = 260 - Top = 170 - Width = 75 - Height = 25 - Action = ac_Remove - Caption = '&Remove' - TabOrder = 2 - Glyph.Data = { - 3A060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000220B0000220B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF0104A20104A20104A20104A20104A20104A20104A20104A20104A20104 - A2FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF79797979797979797979797979 - 7979797979797979797979797979797979FF00FFFF00FFFF00FFFF00FFFF00FF - 0104A25983FF0026FF0030FF0030FB002FF2002FE9002EE10030D80031D00034 - CB0104A2FF00FFFF00FFFF00FFFF00FF797979D4D4D4A7A7A7A7A7A7A5A5A5A1 - A1A19C9C9C9898989494949090908D8D8D797979FF00FFFF00FFFF00FFFF00FF - 0104A2ABC2FF6480FF6688FF6688FF6687FA6787F56787F05779E94D70E44D74 - E20104A2FF00FFFF00FFFF00FFFF00FF797979FDFDFDD9D9D9DADADADADADAD8 - D8D8D6D6D6D3D3D3C8C8C8C0C0C0BFBFBF797979FF00FFFF00FFFF00FFFF00FF - FF00FF0104A20104A20104A20104A20104A20104A20104A20104A20104A20104 - A2FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF79797979797979797979797979 - 7979797979797979797979797979797979FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object cbMessage: TComboBox - Left = 57 - Top = 203 - Width = 286 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 15 - TabOrder = 3 - OnChange = cbMessageChange - end - object ePathInfo: TEdit - Left = 57 - Top = 251 - Width = 286 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 4 - Text = 'ePathInfo' - OnChange = ePathInfoChange - end - object cbEnabled: TComboBox - Left = 57 - Top = 227 - Width = 286 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 15 - Items.Strings = ( - 'False' - 'True') - TabOrder = 5 - OnChange = cbEnabledChange - end - object ActionList1: TActionList - OnUpdate = ActionList1Update - Left = 48 - Top = 168 - object ac_Add: TAction - Caption = '&Add' - OnExecute = bAddClick - end - object ac_Remove: TAction - Caption = '&Remove' - OnExecute = bDeleteClick - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.pas deleted file mode 100644 index e5bb616..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fDispatchersEditorFormKylix.pas +++ /dev/null @@ -1,252 +0,0 @@ -unit fDispatchersEditorFormKylix; -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library -{ -{ compiler: Delphi 5 and up, Kylix 2 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ../RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, Classes, QGraphics, QControls, QForms, - QDialogs, QStdCtrls, QButtons, QComCtrls, - uROClient, uROServer, uROHTTPDispatch, ActnList, QActnList; - -type - TDispatchersEditorForm = class(TForm) - ListView: TListView; - bAdd: TBitBtn; - bDelete: TBitBtn; - cbMessage: TComboBox; - Label1: TLabel; - Label3: TLabel; - lblPathInfo: TLabel; - ePathInfo: TEdit; - cbEnabled: TComboBox; - ActionList1: TActionList; - ac_Add: TAction; - ac_Remove: TAction; - procedure bDeleteClick(Sender: TObject); - procedure bAddClick(Sender: TObject); - procedure ListViewSelectItem(Sender: TObject; Item: TListItem; - Selected: Boolean); - procedure cbMessageChange(Sender: TObject); - procedure cbEnabledChange(Sender: TObject); - procedure ePathInfoChange(Sender: TObject); - procedure ActionList1Update(Action: TBasicAction; - var Handled: Boolean); - private - fInChange: boolean; - fServer : TROServer; - fShowPathInfo, - fSelectingItem : boolean; - - procedure LoadMessages; - procedure RefreshDispatchers; - procedure SetShowPathInfo(const Value: boolean); - function GetDispatchers: TROMessageDispatchers; - procedure SetServer(const Value: TROServer); - function GetDispatcher: TROMessageDispatcher; - - public - constructor Create(aServer : TROServer); reintroduce; - destructor Destroy; override; - - property Server : TROServer read fServer write SetServer; - property Dispatchers : TROMessageDispatchers read GetDispatchers; - property Dispatcher : TROMessageDispatcher read GetDispatcher; - end; - -var - DispatchersEditorForm: TDispatchersEditorForm; - -implementation - -{$R *.dfm} - -const BoolStrs : array[boolean] of string = ('False', 'True'); - -{ TDispatchersEditorForm } - -constructor TDispatchersEditorForm.Create(aServer : TROServer); -begin - inherited Create(NIL); - - fSelectingItem := FALSE; - Server := aServer; - RefreshDispatchers; - - if ListView.Items.Count > 0 then - ListView.Items[0].Selected := true; -end; - -destructor TDispatchersEditorForm.Destroy; -begin - inherited; -end; - -procedure TDispatchersEditorForm.RefreshDispatchers; -var idx, i : integer; - item : TListItem; -begin - if fSelectingItem then Exit; - - if (ListView.Selected<>NIL) - then idx := ListView.Selected.Index - else idx := -1; - - ListView.Items.Clear; - for i := 0 to (Dispatchers.Count-1) do begin - item := ListView.Items.Add; - item.Caption := BoolStrs[Dispatchers[i].Enabled]; - item.SubItems.Add(Dispatchers[i].Name); - - if fShowPathInfo - then item.SubItems.Add(TROHTTPDispatcher(Dispatchers[i]).PathInfo); - end; - - if (idx>=0) and (idx0) and not Dispatchers.SupportsMultipleDispatchers - then MessageDlg(Server.ClassName+' only supports one dispatcher', mtWarning, [mbOK],0) - - else begin - Dispatchers.Add; - RefreshDispatchers; - ListView.Items[ListView.Items.Count-1].Selected := true; - end; -end; - -procedure TDispatchersEditorForm.ListViewSelectItem(Sender: TObject; - Item: TListItem; Selected: Boolean); -begin - fSelectingItem := TRUE; - try - if (Dispatcher<>NIL) then - with Dispatcher do begin - cbEnabled.ItemIndex := Ord(Enabled); - - if (Message<>NIL) - then cbMessage.ItemIndex := cbMessage.Items.IndexOf(Message.Name) - else cbMessage.ItemIndex := 0; - - if fShowPathInfo - then ePathInfo.Text := TROHTTPDispatcher(Dispatcher).PathInfo; - end; - - finally - fSelectingItem := FALSE; - end; -end; - -function TDispatchersEditorForm.GetDispatchers: TROMessageDispatchers; -begin - result := fServer.Dispatchers; -end; - -procedure TDispatchersEditorForm.LoadMessages; -var i : integer; -begin - cbMessage.Items.Clear; - - cbMessage.Items.Add('-'); - with fServer.Owner do - for i := 0 to (ComponentCount-1) do begin - if (Components[i] is TROMessage) then cbMessage.Items.Add(TROMessage(Components[i]).Name); - end; -end; - -procedure TDispatchersEditorForm.SetServer(const Value: TROServer); -begin - fServer := Value; - if (Value=NIL) then Exit; // Just in case... - - Caption := fServer.Name+' Dispatchers'; - - SetShowPathInfo(Dispatchers is TROHTTPMessageDispatchers); - LoadMessages; -end; - -procedure TDispatchersEditorForm.cbMessageChange(Sender: TObject); -begin - if (Dispatcher=NIL) then Exit; - - if (cbMessage.Text<>'-') - then Dispatcher.Message := TROMessage(fServer.Owner.FindComponent(cbMessage.Text)) - else Dispatcher.Message := NIL; - - RefreshDispatchers; -end; - -procedure TDispatchersEditorForm.cbEnabledChange(Sender: TObject); -begin - if (Dispatcher=NIL) then Exit; - - Dispatcher.Enabled := boolean(Ord(cbEnabled.ItemIndex)); - - RefreshDispatchers; -end; - -procedure TDispatchersEditorForm.ePathInfoChange(Sender: TObject); -begin - if fInChange then exit; - - fInChange := true; - try - - if (Dispatcher=NIL) then Exit; - TROHTTPDispatcher(Dispatcher).PathInfo := ePathInfo.Text; - //ePathInfo.Text := TROHTTPDispatcher(Dispatcher).PathInfo; - //1.0.4: read back PathInfo value, because the Dispatcher might adjust it. - - RefreshDispatchers; - finally - fInChange := false; - end; -end; - -function TDispatchersEditorForm.GetDispatcher: TROMessageDispatcher; -begin - if (ListView.Selected=NIL) - then result := NIL - else result := Dispatchers[ListView.Selected.Index]; -end; - -procedure TDispatchersEditorForm.ActionList1Update(Action: TBasicAction; - var Handled: Boolean); -begin - ac_Remove.Enabled := Assigned(ListView.Selected); - cbMessage.Enabled := ac_Remove.Enabled; - ePathInfo.Enabled := ac_Remove.Enabled; - cbEnabled.Enabled := ac_Remove.Enabled; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.dfm deleted file mode 100644 index 85822ce..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.dfm +++ /dev/null @@ -1,3389 +0,0 @@ -object NewProjectForm: TNewProjectForm - Left = 338 - Top = 184 - BorderIcons = [biSystemMenu] - BorderStyle = bsDialog - Caption = 'New RemObjects SDK Server' - ClientHeight = 412 - ClientWidth = 500 - Color = clBtnFace - Constraints.MinHeight = 238 - Constraints.MinWidth = 300 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Bevel1: TBevel - Left = 4 - Top = 372 - Width = 494 - Height = 2 - Anchors = [akLeft, akRight, akBottom] - end - object Image2: TImage - Left = 0 - Top = 0 - Width = 500 - Height = 64 - Align = alTop - AutoSize = True - Picture.Data = { - 07544269746D617036770100424D36770100000000003600000028000000F401 - 000040000000010018000000000000770100C01E0000C01E0000000000000000 - 0000858585858585858585858585858585858585858585858585858585858585 - 8585858484848484848484848484848484848484848484848484848484848484 - 8484848483838383838383838383838383838383838383838383838383838383 - 8383838383838383838383828282828282828282828282828282828282828282 - 8282828282828282828282828181818181818181818181818181818181818181 - 8181818181818181818181818181818180808081818181818180808080808080 - 80808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F - 7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E - 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D - 7C7C7C7C7C7C7B7B7B7A7A7A7979797979797878787878787777777676767575 - 757575757474747575757474747474747474746A7CC3677FDD677FDD6880DC69 - 80DD6981DD6A81DC6A81DC6B82DC6B82DC6C82DC6C83DC6E83D6808495878787 - 8B8B8B8D8D8D8F8F8F9090909191919292929292929292929292929191919191 - 919090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F90909091919191 - 9191929292929292929292949494949494959595969696969696979797979797 - 9898989A9A9A9A9A9A9A9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9F9F9FA0A0 - A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A5A5A5A5A5A5A6A6A6A7A7A7A8A8A8A8 - A8A8A9A9A9A9A9A9ABABABACACACACACACAEAEAEAFAFAFB0B0B0B2B2B2B3B3B3 - B5B5B5B6B6B6B7B7B7B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBEBFBFBFBFBF - BFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C4 - C4C4C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C8C8C8C9C9C9CACACA - CBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1D1 - D1D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4 - D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8 - D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECEDEDEDECECECEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78686 - 8685858585858585858585858585858585858585858585858585858585858585 - 8585848484848484848484848484848484848484848484848484848484848484 - 8484848383838383838383838383838383838383838383838383838383838383 - 8383838383838383838382828282828283838382828282828282828282828282 - 8282828282828282828282818181818181818181818181818181818181818181 - 8181818181818181818181818181818181818181818080808080808080808080 - 808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F80 - 80808080807F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8080808080807F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7E7E - 7E7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7C - 7C7C7C7C7C7B7B7B7A7A7A7A7A7A797979797979787878777777767676767676 - 7575757676767676767575757575757377896880DD6880DD6981DD6981DD6A81 - DD6A82DD6B82DD6A82DD6C83DD6D83DD6D83DC6E84DC7084D77F87A88C8C8C8E - 8E8E919191919191939393939393949494949595959696969797959797969898 - 9698989596969495959394949293939191919191919191919292929292929393 - 939393939393939494949595959595959797979797979898989898989999999A - 9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA0A0A0A0A0A0A1A1A1 - A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAA - AAABABABACACACADADADADADADAEAEAEAFAFAFB1B1B1B1B2BAB0B3C1AFB3C7B0 - B4C9B2B6CAB2B6CAB4B7CAB5B8CAB8BAC6BBBCC3BFBFC0C0C0C0C0C0C0C1C1C1 - C1C1C1C3C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6C5C5C5C6C6 - C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9C9C9C9CACACACCCCCCCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D3D3D3D3D3D3 - D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADADAD9D9D9DADADADADADADADADADADA - DADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDBDBDBDCDCDCDCDCDCDCDCDCDD - DDDDDCDCDCDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7868686868686 - 8686868686868686868585858585858686868686868686868585858585858585 - 8585858585858585858585858585858584848485858585858584848484848484 - 8484848484848484848484848484848484848484848484848484838383838383 - 8383838383838383838383838383838383838383838383838383838282828282 - 8282828282828282828282828282828282828282828282828282828281818181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181818080808080808080808080808080808080808080 - 808080807F7F7F8080808080808080807F7F7F8080808080808080807F7F7F7F - 7F7F7F7F7F7F7F7F8080808080807F7F7F8080808080808080808080807F7F7F - 8080808080807F7F7F7F7F7F7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7B7B7B7B7B7B7A7A7A79797979797979797978787877777777777776 - 76767676767676767676767676766E7CB06981DE6980DD6A82DE6B82DD6B82DD - 6B82DD6C83DD6C83DE6D84DC6E84DD6E85DD6F85DD6F85DC8089AF8F8F8F9191 - 919393939393939494949797979899999A9C9C9B9E9E9EA1A19FA3A39FA3A39E - A2A29C9F9F999B9B969898949595929393919191919191929292939393939393 - 9494949595959595959696969797979797979898989898989A9A9A9B9B9B9B9B - 9B9C9C9C9C9C9C9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A3A3A3A3 - A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9ACACAC - ACACACADADADAEAEAEAEAFB3ABAFC3AAAFCDABB1D0ACB2CFAEB3CFAEB3CFB0B5 - D0B1B6CFB2B6CFB2B7CFB3B8CFB4B8CFB6BAD0BABCCBBEBFC5C1C1C1C2C2C2C2 - C2C2C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9C8C8C8CACACACACACACACACACCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D1D1D1D3D3D3D3D3D3D3D3D3D3 - D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6 - D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADA - DADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3 - E3E3E3E3E2E2E2E3E3E3E4E4E4E3E3E3E4E4E4E3E3E3E3E3E3E5E5E5E4E4E4E4 - E4E4E5E5E5E4E4E4E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECEC - ECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7 - F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F787878787878787878786 - 8686868686868686868686868686868686868686868686858585858585858585 - 8585858585858585858585858585858585858585858585858484848484848484 - 8484848484848484848484848484848484848484848484848483838383838383 - 8383838383838383838383838383838383838383838383838383838383828282 - 8282828282828282828282828282828282828282828282828282828181818181 - 8181818182828282828281818181818181818181818181818181818181818181 - 8181818181818181828282808080808080808080808080808080808080808080 - 8080808080808080808080808080808080808080808080808080808080808181 - 8181818180808080808081818181818181818181818181818181818181818181 - 81818080808080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C7C7C - 7C7C7C7B7B7B7B7B7B7A7A7A7979797979797878787777777878787777777777 - 7776767676767677777777787E6A80D76A81DD6B82DE6B83DD6B83DD6C83DD6D - 84DE6E84DD6E84DD6E84DD6F85DD6F85DD7086DC7086DC7C8ABF919191939393 - 9494949697979899999C9E9EA0A4A4A5ABABA9B1B1ACB5B5ACB5B5ACB4B4A7AF - AFA3A9A99EA3A39A9D9D96989895969694949493939394949494949495959595 - 95959696969797979797979898989999999999999A9A9A9B9B9B9C9C9C9C9C9C - 9D9D9D9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A2A2A2A3A3A3A4A4A4A4A4 - A4A5A5A5A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAAAAAAAACACACADADADAD - AEB2AAAFC4A9AFD0AAB0D0AAB0D0ACB2D0AEB3D0AEB3D0AFB4D0B0B5D0B2B7D0 - B3B7D0B3B8D0B4B8D0B5B9D0B6BAD0B7BAD0B7BBD0BABDCEBFC0C5C2C2C2C3C3 - C3C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7 - C7C7C9C9C9CACACACACACACACACACBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D3D3D4D4D4D4D4 - D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADA - DADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78787878787878787878787878686 - 8686868686868686868686868686868686868686868686868686868686868685 - 8585858585858585858585858585858585858585858585858585858585858585 - 8484848484848484848585858585858484848484848484848484848484848484 - 8484848484848484848483838384848483838383838383838383838383838383 - 8383838383838383828282838383838383828282828282828282828282828282 - 8282828383838282828282828282828282828181818181818181818282828181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181808080818181818181828282828282818181828282 - 8282828282828282828282828282828282828282828282828282828282828282 - 828181818181818080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A797979787878787878777777777777 - 787878777777787878727CA56B82DE6B83DE6C83DE6C83DE6C84DE6E84DE6E84 - DD6E85DE6F85DD6F85DD7086DD7086DD7086DC7287DC7889CE91929894949497 - 97979A9C9C9FA3A3A6ACACAFB8B8B5C0C0BAC7C7BCCACABBC9C9B7C3C3B0BBBB - A9B1B1A2A7A79B9E9E9698989494949393939494949595959595959595959696 - 969797979797979898989999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9D9D9D9F - 9F9F9F9F9F9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5 - A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAABABABACACACAAADBDA8AECEA8AF - D0AAB0D0AAB0D0ABB1D0ADB3D0AEB3D0AEB4D0AFB4D0B1B6D1B2B7D0B3B7D0B3 - B8D0B4B9D0B5B9D0B7BBD1B8BCD1B8BCD1BABDD0BBBED0BEC0CDC4C4C5C5C5C5 - C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8CACA - CACACACACBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5 - D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D6D6D6D7D7 - D7D8D8D8D8D8D8D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADA - DADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECEDEDEDECECECEDEDEDEDEDEDECECECEDEDEDED - EDEDEDEDEDECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7888888888888878787878787888888878787 - 8787878787878787878787878787878787878787878686868686868686868686 - 8686868686868686868686868686868686868686868685858585858585858585 - 8585858585858585858585858585858585858585858585848484848484848484 - 8484848484848484848484848484848484848484848484848383838383838383 - 8383838383838383838383838383838383838383838383838382828282828283 - 8383838383838383828282828282828282828282828282828282828282828282 - 8282828282828282828181818181818282828181818181818181818181818181 - 8181818181818182828281818182828282828283838382828282828282828283 - 8383838383848484848484838383838383838383848484838383838383838383 - 8383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D7C7C - 7C7C7C7C7B7B7B7A7A7A7A7A7A79797979797979797978787878787878787878 - 78787878787979796D82D26C83DE6C84DE6C83DE6C84DE6D84DE6F85DE6F85DE - 7086DD7086DD7187DD7187DD7287DD7287DC7388DD778AD38D91A19697979B9D - 9DA3A7A7ACB4B44F446B41335E41335E41335E41335E5A52769095A6B7C4C4AC - B5B5A2A8A89B9E9E979898959595959595959595969696979797979797989898 - 9999999999999A9A9A9A9A9A9C9C9C9C9C9C9D9D9D9E9E9E9E9E9E9F9F9FA0A0 - A0A0A0A0A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A8 - A8A8A8A8A8A9A9A9AAAAAAABABABABABABA8ADC3A7AED2A7AED1A8AFD0AAB1D1 - AAB1D0ABB1D0ADB3D0AEB4D1AFB5D1B0B5D1B1B6D1B3B8D1B3B8D1B5B9D1B5B9 - D1B6BAD0B7BBD1B8BCD1B9BDD0BABDD0BBBED0BBBED0BEC0CFC4C4C7C6C6C6C5 - C5C5C6C6C6C7C7C7C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C9C9C9CACACACACACA - CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1 - D1D1D1D1D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADA - DADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFDEDEDEDEDE - DEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2 - E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F788888888888888888888888888888888888888888888 - 8888888888878787878787878787878787878787878787878787878787868686 - 8686868787878787878787878686868686868686868686868686868686868686 - 8686868686868686868686868685858585858585858585858585858585858585 - 8585858585848484858585848484848484848484848484838383848484838383 - 8383838484848484848484848484848383838484848383838383838383838383 - 8383838383838383838383838382828282828283838382828283838382828282 - 8282828282828282818181828282828282818181818181828282828282828282 - 8181818282828383838282828383838383838383838484848484848484848484 - 8484848485858585858585858585858585858585858585858584848484848483 - 83838383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D - 7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797979797979797878787979 - 797A7A7A777D936C84DF6D84DF6D85DE6E85DE6E85DE6F85DE7086DE7087DE71 - 87DE7187DD7187DD7388DD7388DE7489DD7489DD778AD88C93AD9C9E9EA4A9A9 - AEB7B73F32603F32603F32603F32603F32603F32603F3260716F8DB9C6C6ABB3 - B3A1A6A69A9C9C9797979696969696969797979898989898989898989999999A - 9A9A9A9A9A9A9A9A9C9C9C9D9D9D9D9D9D9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0 - A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A8A8A8A9A9 - A9A9A9A9AAAAAAAAAAADA6ACCAA6AED2A7AED2A9B0D2A9B0D1AAB1D1ABB1D1AC - B2D1AEB3D1AEB4D1AFB5D1B0B5D1B2B7D2B3B8D1B4B9D1B4B9D1B6BAD1B7BBD1 - B7BBD1B9BDD2BABED1BBBED1BCBFD1BDC0D2BEC1D2BFC2D1C5C6C9C7C7C7C7C7 - C7C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9CACACAC9C9C9CBCBCBCBCBCBCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D3D3D3 - D3D3D3D4D4D4D5D5D5D5D5D5D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADA - DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2E2E3 - E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEC - ECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78989898989898989898989898888888989898888888888888888 - 8888888888888888888888888888888888888887878787878787878787878786 - 8686878787878787878787878787868686878787868686868686878787868686 - 8686868686868686868686868686868686868585858585858585858585858686 - 8685858585858585858585858585858584848484848484848484848484848484 - 8484848484848484848484848484838383848484838383838383838383838383 - 8383838383838383838383838383838383838383838383838383838383838282 - 8282828283838382828282828282828282828283838382828282828282828282 - 8282838383848484838383848484848484858585858585858585868686868686 - 8686868787878787878787878787878787878787878686868585858585858585 - 858383838383838282828181818080807F7F7F7F7F7F7F7F7F7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A - 7A7A7A7181BF6D84DF6E85DF6F86DF6F85DE7086DF7087DF7187DE7188DE7288 - DE7288DE7389DE7489DD7489DD748ADD758ADD788EDE8E9ABAA1A6A6ACB4B43E - 30633E30633E30633E30633E30633E30633E30633E3063898DA3B5C0C0A7AEAE - 9EA1A19899999696969696969797979898989999999999999A9A9A9A9A9A9B9B - 9B9B9B9B9D9D9D9E9E9E9E9E9E9E9E9EA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3 - A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAA - ABABABA7ACC6A6ADD2A7AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2ADB3D2AFB4 - D2AFB5D2B0B6D2B2B7D2B3B8D2B3B8D2B5BAD2B5BAD1B7BBD2B7BBD1B8BCD2B9 - BDD2BABED1BBBED1BCBFD1BDC1D2BEC1D2BFC2D2C0C3D1C6C6C8C7C7C7C7C7C7 - C9C9C9C8C8C8C9C9C9C9C9C9CACACACACACACBCBCBCCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5 - D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7898989898989898989898989898989898989898989898989888888898989 - 8989898888888888888888888888888888888888888888888888888787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686868686868686868686858585858585868686868686 - 8686868585858585858585858585858585858585858484848484848585858585 - 8585858584848484848484848484848484848484848484848484848484848484 - 8484848484838383838383848484838383838383838383838383838383838383 - 8383838383838383838383838383838282828383838383838383838383838484 - 8484848485858585858585858586868686868687878788888888888889898988 - 8888898989898989898989898989888888888888888888878787878787868686 - 8585858484848383838181818080807F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7C7C - 7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A7A7A7A7A - 7D886E85DF6E85DF6F86DF7086DE7086DF7087DF7188DE7288DE7288DE7389DE - 7389DE758ADE758BDE768BDD768BDD7A8EDE8095E08F9FCAA6ADAD7D7D94B2BD - C1C5D5D5B3C1CB58517D3C2F653C2F653C2F65453A6DBECCCCAEB7B7A2A6A69B - 9D9D9797979898989898989898989999999A9A9A9A9A9A9B9B9B9B9B9B9D9D9D - 9D9D9D9E9E9E9F9F9F9F9F9FA1A1A1A0A0A0A2A2A2A2A2A2A3A3A3A2A2A2A4A4 - A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAAA7ABC1A6 - ADD3A6AED2A8AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2AEB4D3AFB5D2B0B6D2 - B1B6D2B2B7D2B3B9D3B4B9D2B5BAD2B6BAD2B7BBD2B8BCD2B9BDD3BABED3BBBF - D2BCBFD2BDC0D2BDC1D2BFC2D3C0C3D3C1C3D3C3C5D1C7C8C9C8C8C8CACACAC9 - C9C9CACACACACACACBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECECFCFCF - CFCFCFD0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5 - D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9 - E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECEC - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78A8A - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8989898989898A8A8A89898989898989 - 8989888888888888888888898989888888888888888888888888878787888888 - 8888888888888888888888888888888787878787878787878787878787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848585858585858484848484848484848484 - 8484848484848484848484848484848484848484848484848484848483838384 - 8484848484838383838383838383838383838383838383848484858585858585 - 8585858686868686868787878888888888888A8A8A8989898A8A8A8A8A8A8A8A - 8A8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A89898988888888888887878786 - 86868484848383838181818181818080807F7F7F7F7F7F7E7E7E7D7D7D7D7D7D - 7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7A7A7A7B7B7B7B7B7B7B7B7B7681 - AE6F86DF7086DF7187DF7188DF7288DF7288DF7289DF7389DF7489DE748ADE75 - 8BDE768BDE778CDE778CDE7A8EDF7E93E08499E199A3B8A7AEAEAEB7B7B8C4C4 - C4D4D4C6D9DC4E45773B2E673B2E673B2E6799A1B2B4BFBFA6ACAC9EA0A09999 - 999898989898989999999999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9E9E9E9E - 9E9E9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5 - A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAA9ABB5A5ADD4A6ADD3A7AF - D3A8AFD3AAB1D4AAB1D3ABB2D3ACB3D3ADB3D3AFB5D3AFB5D3B1B7D3B2B7D3B3 - B8D3B4B9D3B5BAD3B6BBD3B7BBD3B8BCD3B8BDD3B9BDD3BABED3BCBFD3BDC0D3 - BDC0D2BEC1D3BFC2D3C1C4D4C1C3D3C2C4D3C5C6CEC9C9C9C9C9C9C9C9C9CACA - CACACACACACACACCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6 - D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9DA - DADADBDBDBDADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2 - E2E3E3E3E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A - 8A89898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888898989888888888888888888888888888888 - 8888888888888888888787878787878787878787878787878787878787878787 - 8787878787878787878786868686868686868685858586868686868686868686 - 8686858585858585868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848484848484848484848484848484848484 - 8484848483838384848483838383838384848484848485858586868685858587 - 87878787878787878989898A8A8A8B8B8B8B8B8B8B8B8B8C8C8C8D8D8D8C8C8C - 8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8A8A8A8989898888888686 - 868585858383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7C7C7C7B7B7B7C7C7C7B7B7B7B7B7B7B7B7B7C7C7C7B7F897087E0 - 7087E07187DF7288DF7389E07389E07389DF748ADF7489DE758ADF768BDE768B - DE778CDF778CDE798EDE7C91DF7F94E0939AA79DA1A1A1A7A7AAB2B2B5C1C1C3 - D4D4979FB6392D69392D69392D698184A2B9C5C5AAB1B19FA2A29A9B9B989898 - 9999999A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9F9F9F9F9F9FA0A0 - A0A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A7 - A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAA6ADD0A6AED4A6AED3A8B0D4A9B0D4 - AAB1D4AAB2D4ABB2D3ACB3D3AEB4D3AFB5D3B0B6D3B1B7D3B2B7D3B3B8D3B3B9 - D3B5BAD3B6BBD3B8BCD3B8BCD3B9BDD3BABED4BBBFD4BCBFD3BDC1D3BDC1D3BF - C2D3C0C3D4C1C4D4C2C4D4C2C5D4C3C6D4C8C8CBCACACACBCBCBCBCBCBCBCBCB - CBCBCBCCCCCCCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D1D1D1D2D2 - D2D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7 - D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDDDDDDDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E4E4E4E5E5 - E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B8B8B8B8B - 8B8B8B8B8B8A8A8A8B8B8B8B8B8B8B8B8B8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A - 8989898A8A8A8989898989898989898989898989898989898989898989898989 - 8989898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888888888888888888888888888888888888888 - 8787878888888888888888888787878787878787878787878686868686868686 - 8686868686868686868686868686868686868685858585858585858585858585 - 8585858585858585858585848484848484848484848484848484848484848484 - 8484848383838484848484848484848484848585858686868686868787878888 - 888989898A8A8A8A8A8A8C8C8C8D8D8D8D8D8D8E8E8E8E8E8E8F8F8F8F8F8F8F - 8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8D8E8E8B8C8C8A8B8B888888 - 8686868383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7C7C7C7C7C7C7583BB7188E07187E072 - 88E07289E07389E0748AE0748AE0748AE0758ADF758ADF768CDF778CDF778CDF - 788DDE798DDE7A8FDE7D91DF939494949696989A9A9FA4A4AAB2B2BAC7C7C2D2 - D6382C6C382C6C382C6C5D5989BCCACAACB4B4A2A5A59C9D9D9999999A9A9A9A - 9A9A9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA2A2A2A2A2A2A1A1A1 - A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A7A7A7A8A8 - A8A8A8A8A9A9A9AAAAAAA9ACBBA6AED5A6AED5A7AFD4A8B0D4A9B0D4AAB2D5AB - B2D4ADB4D4AEB4D4AFB5D4AFB5D4B1B7D4B2B8D4B3B8D4B3B9D4B5BAD5B7BCD4 - B8BCD4B8BCD4B9BED4B9BED4BABED4BDC0D4BDC1D4BEC2D4BFC2D4C0C3D4C1C4 - D4C2C5D5C4C7D5C3C6D5C4C7D5C6C9D3CACACACACACACBCBCBCBCBCBCBCBCBCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D2D2D2 - D2D2D2D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D7D7D7D7D7D7D8D8D8D8D8D8D8D8 - D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8C8C8C8C8C8C8C8C8C8B8B - 8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8B8B8B8B - 8C8C8C8D8D8C8D8D8C8D8D8C8D8D8B8C8C8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A - 8A8A8A8A8A8A8989898B8B8B8B8C8C8B8B8B8C8D8D8D8E8E8C8D8D8C8D8D8C8D - 8D8B8C8C8B8B8B8A8A8A8A8A8A8B8B8B8A8B8B8B8C8C8C8E8E8E8F8F8E8F8F8F - 91918F91918E90908E8F8F8D8E8E8B8D8D898A8A888989888888878787878787 - 8686868888888989898889898889898889898888888788888787878686868686 - 8685858586868686878787888887888887888887888886878785858584848484 - 8484848484848484858585868686878888888989898A8A8A8A8A898A8A8B8B8B - 8B8B8B8B8B8B8D8D8D8E8E8E8F8F8F9090909090909191919292929292929394 - 949495959495959496969596969698989598989496969295959092928D8F8F8A - 8B8B8889898586868384848181818080808080807F7F7F7E7E7E7E7E7E7C7C7C - 7C7C7C7C7C7C7C7C7C7C7D7D7C7D7D7983A9738BE1748BE1748BE1758BE1758D - E1768DE1778DE17990E17A90E17C92E17C92E17D93E27D93E17C91E07C90E07B - 90E07C90DF7C8FDA909090929292939393999B9BA3A9A9B2BDBDC5D5D5362A6E - 362A6E362A6E5C588BBECCCCAFB7B7A3A7A79C9D9D9B9B9B9B9B9B9A9A9A9B9B - 9B9D9D9D9E9F9F9FA0A0A1A2A2A2A4A4A5A6A6A6A8A8A6A8A8A7A8A8A6A7A7A6 - A7A7A6A7A7A5A6A6A6A6A6A5A5A5A6A6A6A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9 - AAAAAAABABABA7B0D2A8B2D7AAB2D7ACB4D7AEB6D9AEB7D9AFB8D9B1B8D7B1B8 - D7B1B8D6B0B7D6B2B8D5B2B8D5B4B9D5B4B9D5B5BAD5B6BBD5B8BDD5BABED5BA - C0D6BBC1D6BCC1D6BEC2D7BFC2D5BEC2D5BFC3D5C0C3D5C2C6D6C4C8D7C5C9D8 - C6CAD8C8CCD8C8CCD8C8CBD8CCCDCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECE - CECFCFCFCFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D5 - D5D5D6D6D6D7D7D7D8D9D9D9DADAD9DADAD9DADADADBDBDADBDBDADADAD9DADA - DADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9DADADADADBDBDBDBDBDBDBDBDBDB - DBDCDCDCDCDDDDDCDDDDDCDDDDDCDCDCDCDCDCDDDDDDDDDDDDDCDDDDDCDCDCDD - DDDDDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDE - DEDEDEDEDEDEDFDFDFDFDFDFDEDFDFDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C - 8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8E8F8F9092929295 - 959396969396969194949092928D8E8E8C8D8D8B8B8B8A8A8A8A8A8A8A8A8A8A - 8A8A8B8C8C8C8D8D8F91919294949497979498989498989395959093938E9090 - 8C8D8D8C8C8C8C8D8D8D8F8F909292939595969A9A989D9D9AA0A09BA1A19BA1 - A19AA0A0999E9E969A9A9396969093938E8F8F8B8C8C8A8A8A898A8A8A8B8B8A - 8C8C8D8F8F8E91918F92928F91918C8F8F8A8C8C888989878787878787878888 - 898A8A8B8D8D8C8E8E8D90908D90908C8F8F8A8C8C8889898586868585858585 - 858687878889898A8C8C8C8F8F8D90908F91918E90908D8F8F8C8D8D8C8C8C8D - 8D8D8E8E8E909090919191929292939393949494969696979898999B9B9C9E9E - 9EA1A1A0A4A4A1A6A6A2A7A7A2A8A8A2A8A8A0A6A69DA3A39AA0A0959A9A9094 - 948D9090898B8B8687878383838181818080807F7F7F7E7E7E7E7E7E7D7D7D7D - 7D7D7C7D7D7E7E7E7E86A0778FE37B93E37C94E47C95E47C94E47C94E37D95E4 - 8097E48299E4859DE5889FE589A2E689A1E5899FE5879DE4849AE28297E17F95 - E18393CC919191919191919191989999A1A6A6B0B9B9C2D1D15C588D35297035 - 29705C588DC0CECEB0B8B8A4A8A89D9E9E9A9A9A9B9B9B9C9C9C9E9F9FA1A2A2 - A3A5A5A6A9A9A9ADADACB0B0AEB3B3AFB3B3B0B4B4B0B4B4AFB3B3ADB0B0ACAF - AFAAACACA9AAAAA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A9A9A9AAAAAAACACACAE - B0B8ABB5DAAEB9DBB1BBDCB3BDDCB5C0DDB7C2DEB7C1DDB7C0DCB6BFDBB5BDD9 - B3BBD8B3BAD7B4BAD6B4BAD5B5BAD5B6BCD6BABFD7BCC2D8BFC4DAC0C7DBC1C8 - DBC2C8DBC3C9DBC3C7D9C2C7D8C2C7D8C4C8D8C6CAD9C9CEDBCBD0DDCCD2DECE - D4DFCFD4DFD0D4DED1D4DAD1D3D3CFD0D0CFD0D0CFD0D0CECECECECECECFCFCF - CFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D4D4D5D5D5D6D6D6D8D9 - D9D9DBDBDBDDDDDCDEDEDEDFDFDFE1E1DFE1E1DEE0E0DEE0E0DDDFDFDDDEDEDC - DDDDDBDCDCDBDBDBDADBDBDADBDBDCDCDCDCDDDDDDDEDEDEDFDFDEE0E0DEDFDF - DFE0E0DFE0E0DFE0E0DFE0E0DFE0E0DEDFDFDFDFDFDEDFDFDDDEDEDEDEDEDDDE - DEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDFDFDFDFDFDFE0E0E0E1E1E0 - E1E1E1E2E2E1E2E2E0E1E1E0E0E0DFE0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1 - E2E2E2E2E3E3E3E3E3E3E4E4E2E3E3E2E3E3E2E3E3E2E2E2E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F78D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C - 8C8C8D8D8D8D8D8D8C8C8C8C8C8C8D8D8D8F9191929595979A9A9A9F9F9CA2A2 - 9CA2A29A9F9F969A9A9194948E90908C8C8C8B8B8B8B8B8B8B8B8B8C8D8D8E90 - 90929595969A9A9CA1A19FA5A59FA6A69FA6A69DA2A2989C9C94969691939391 - 92929295959699999B9F9FA0A6A6A3ABABA7B1B1AAB4B4ABB6B6ABB7B7AAB5B5 - A8B2B2A5AEAE9FA7A79AA0A09599998F92928C8E8E8B8D8D8D8E8E9092929498 - 98989D9D989E9E979D9D9498989093938C8E8E888989888989898A8A8D8F8F90 - 9494949999979D9D969C9C949A9A9094948C8E8E898A8A858686858686888A8A - 8C8F8F919595959B9B969C9C969C9C9599999295959091918E8F8F8E8E8E8F8F - 8F9090909292929393939596969899999C9D9D9FA2A2A3A8A8A7ADADABB2B2AF - B8B8B1BBBBB3BEBEB4BFBFB4C0C0B2BEBEAFBABAABB5B5A6B0B09FA7A7999F9F - 9297978D9191898B8B8586868182828080807F7F7F7E7E7E7E7E7E7D7D7D7F7F - 7F7F84947A91DE7F97E6859DE788A1E789A2E78AA3E789A3E78AA3E78EA7E892 - ABE996B0EA99B4EB9CB6EB9CB5EB9AB3EA97AFE991A8E78DA3E5879DE48999CF - 939494929393929292969898A0A4A4AEB7B7C0CECE5A57903328733328735A57 - 8FC0CECEB1B9B9A4A8A89FA0A09C9C9C9D9E9E9FA0A0A3A5A5A7ABABABB0B0B1 - B7B7B5BCBCB8C0C0BBC4C4BCC5C5BCC5C5BDC5C5BAC2C2B7BEBEB4B9B9B1B5B5 - AEB1B1AAACACA9A9A9A8A8A8A8A8A8A9A9A9ABABABACADADB0B2B2B1B8CCB3BE - DFB7C4E1BBC8E2BFCCE4C1CEE5C3D0E6C3CFE5C1CDE3BFC9E1BBC5DEB8C1DBB6 - BED9B6BCD8B6BCD7B7BDD7BAC0D9BEC4DBC2C9DDC5CEE0C8D1E2CAD2E2CAD2E2 - C9D1E0C8CEDEC6CCDCC7CDDCC9CEDDCBD1DFCFD5E1D1D8E3D4DBE5D6DDE6D6DD - E6D6DDE5D6DCE3D6DADAD4D7D7D2D4D4D0D1D1D0D0D0D0D0D0D0D0D0D0D0D0D1 - D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D8D8D8D9DADADCDDDDDEE0E0 - E0E3E3E2E5E5E3E6E6E3E7E7E4E8E8E3E7E7E3E6E6E1E4E4E1E3E3DFE0E0DDDE - DEDCDCDCDBDBDBDBDCDCDCDDDDDEDFDFE0E1E1E1E3E3E2E5E5E4E6E6E4E7E7E4 - E7E7E4E7E7E4E6E6E3E6E6E4E6E6E3E5E5E2E3E3E1E2E2E0E0E0DFDFDFDFDFDF - DEDFDFDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFE0E0E0E1E2E2E2E4E4E3E5E5E3E5 - E5E3E5E5E2E3E3E1E1E1E0E0E0DFE0E0E0E0E0E1E1E1E1E2E2E3E3E3E4E5E5E5 - E7E7E6E8E8E6E8E8E6E7E7E5E6E6E3E4E4E3E4E4E3E3E3E2E2E2E2E2E2E2E2E2 - E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8E8E8E8D8D8D8D8D - 8D8D8D8D8D8D8D8D8D8D8F8F8F929494989C9C9FA5A5A6AEAEAAB4B4AAB4B4A6 - AEAE9FA5A5979B9B9294948E8E8E8C8C8C8C8C8C8D8D8D8F9090939595999D9D - A1A8A8A8B1B1ADB8B8AEBABAACB7B7A6AFAF9FA6A6999E9E969A9A979A9A9BA0 - A0A0A7A7A8B1B1AFBABAB4C2C2B9C8C8AAB6C09AA3B79AA3B798A2B6B8C8C8B4 - C2C2AEBABAA6B0B09DA4A4969A9A9093938F9090919393969B9B9DA4A4A3ABAB - A5AFAFA4ADAD9EA6A6979D9D9194948B8C8C898A8A8C8E8E919595989E9E9FA7 - A7A3ADADA4AEAE9FA8A8989E9E9195958B8D8D8788888788888B8E8E93979799 - A0A0A0A9A9A4AEAEA2ABAB9DA5A5989D9D9395959091918F8F8F8E8F958D909C - 9494949798989A9C9C9FA1A1A4A9A9AAB0B0B1B9B9B7C1C1BCC8C8C0CECEB1BC - C6A0A9BDA1AABE7B7FA69FA9BD9DA7BBACB9C3B9C8C8B2C0C0A9B5B5A1ABAB9A - A1A19297978C8F8F8789898484848181817F7F7F7F7F7F7F7F7F7E81877A8FD8 - 819AE689A3E892ADEB99B3EC9CB7ED9DB8ED9CB7EC9DB8EDA0BBEEA4C0EEAAC5 - F0A6C0E990A3D3A0B7E2AEC9F0AAC5EFA4BDED9CB4EA94ABE792A2CB989A9A95 - 96969494949799999FA4A4AEB7B7BFCDCD5A56913227753227755A5691C1CECE - B2BABAA6AAAA9FA0A09E9F9FA0A1A1A5A8A8ABAFAFB2B8B8B8C0C0BEC8C8C3CF - CFC6D3D3ACB5C4A4ABBFA4ABBFB6C0CAC7D3D3C3CDCDBEC7C7B9BFBFB3B7B7AE - B0B0ABACACA9A9A9AAAAAAACACACAEAFAFB2B5B5B7BBBBB9C4DDBECCE6C4D2E8 - C8D7EBCCDBECB0BBD7A8B1D0BBC6DECDDAEBC9D6E8C4D0E4BEC7E0BBC3DCB8BF - D9B8BED9B9C0D9BFC5DDC3CBDFCAD2E3CED9E7D2DDE9D4DFEAD3DDE9D0DAE6CE - D6E3CCD3E1CCD3E0CED4E1D2D9E5D6DEE8D9E2EAB1B6CFA8ABC89393B9B3B7CF - C8CEDDDDE3E4DBDFDFD7DADAD4D6D6D3D4D4D0D1D1D0D1D1D1D1D1D1D1D1D2D2 - D2D2D2D2D3D3D3D4D4D4D4D5D5D5D6D6D8D9D9DBDDDDDFE2E2E2E6E6E5E9E9E7 - ECECBABCD0BBBDD1BCBDD1BCBDD1C6C8D7E8ECECE5E9E9E3E6E6E1E3E3DFE0E0 - DDDEDEDDDEDEDFE0E0E1E3E3E4E6E6E6E9E9E8ECECE9EDEDE9EEEEE9EEEEE9EE - EEE9EDEDE9EDEDE8ECECE7EBEBE6E9E9E4E7E7E3E5E5E2E3E3E0E1E1DFE0E0DF - DFDFDEDEDEDEDEDEDEDFDFE1E1E1E2E3E3E4E6E6E6E9E9E7EAEAE8EAEAE7E9E9 - E5E6E6E3E4E4E1E2E2E1E1E1E1E1E1E2E2E2E3E4E4E5E7E7E7E9E9E8EBEBEAED - EDE9ECECE8EBEBE6E8E8E4E6E6E4E5E5E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F78F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E - 8E8E8E8E8E8E9192929598989EA3A3A9B2B2514C8A524E8B524E8B514C89A8B2 - B29DA3A39497979091918D8D8D8D8D8D8F90909395959A9E9EA3ABABAEBABA8E - 95AF54508D54508D534E8C514B89656290A1A7A79DA2A2A0A6A6A6AFAFAFBABA - B8C7C78990AF5F5D96302677302677302677302677302677302677423B836464 - 97898FA9979FA99CA2A2959898929595969A9A9EA5A59298A8504C89514D8A51 - 4C8A7D7F9E9FA7A79599998E8F8F8A8C8C8F9292969C9CA2ABAB5F5D90514C8A - 514D8A504B88A2ACAC979D9D8E9191898A8A8A8B8B8F93939AA1A18F96A5504B - 89514C8A504C897B7F9EA0A8A8979B9B919393848EAF7289DE7189E38091C796 - 9BA5A1A4A4A8ADADB1B8B8B8C3C3C0CDCDA2AABF6B6B9E443D85302677302677 - 302677302677302677302677302677433C8468699C9AA5BAB4C4C4A9B6B6A0A9 - A9969C9C8E9292888A8A8485858181818080807E8085788BD27D95E688A1E890 - A8E54D4C954F4F965150966A71AEB3D1F3B2D0F39BB1DD6368A639307F302677 - 3026773026773026775353978492C5AEC9F0A4BDECA0B0CC9FA4A4999C9C9698 - 98989A9AA1A5A5AEB6B6BFCDCD585592302677302677585692C1CFCFB2BABAA8 - ACACA1A3A3A2A3A3A6A9A9ADB2B2B6BDBDBEC9C9BDC8CD7E80AA4E498B302677 - 3026773026773026773026773026775753907C7CA59CA1B5B8BEBEB2B5B5ADAE - AEABACACACACACAEB0B0B3B6B6B9BDBDC0C7C7C5D4EAB8C5DF8184B44F4A8E30 - 2677302677302677302677302677443D86575294C3CDE3BEC7DEBAC2DBBAC1DB - BDC5DCC4CCE1CCD6E6C9D3E4706EA53B317F3026773026773026776E6BA2D2DA - E6D2D9E5CAD1E08E8EB866629C3026773026773026773026773026773026775D - 5795B4B7CCDCE1E1D8DBDBD5D7D7D2D3D3D2D2D2D1D1D1D2D2D2D2D2D2D4D4D4 - D4D4D4D5D5D5D6D6D6D7D8D8DADCDCDFE2E2C1C2D2807CAA534B8E3026773026 - 77302677302677302677302677483F878D8BB4DCE0E6E5E8E8E1E3E3DFE1E1DF - E0E0E0E2E2E4E6E67570A35F58955F5996605997605997605997605997605997 - 6059967873A6A6A5C5D4D7E2EAEEEEE8EBEBE6E8E8E4E5E5E2E3E3E1E1E1E0E0 - E0DFDFDFE0E0E0E1E2E2E4E5E5E7E9E95F57955F58955F58955F5795E7EAEAE4 - E6E6E2E3E3E2E3E3E2E3E3E4E5E5E6E8E8E9ECECE0E2E8605896605996605896 - 5F58955E5794C5C4D4E5E6E6E4E4E4E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78F8F - 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E - 8E8E929393999D9DA4ABABB2BEBE2F257A2F257A2F257A2F257AB1BDBDA2AAAA - 979B9B9192928E8E8E8E8F8F929393999D9DA3AAAAB0BCBCABB8C33830802F25 - 7A2F257A2F257A382F7EA6AFB4A7AEAEA6ADADABB4B4B4C1C1A5B0C04B478C2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A - 6E6F99A1A8A8989D9D9599999A9F9FA4ADAD9199AE2F257A2F257A2F257A7274 - 9FA7B1B1999F9F9093938D8E8E9295959CA3A3AAB6B6514E8E2F257A2F257A2F - 257AACB9B99DA5A59195958A8B8B8B8D8D949999A0A9A98F97AC2F257A2F257A - 2F257A71749FA7B1B196A0AE8094D1738CE5728AE4738DE57892E6809AE896A9 - D4B1BCC4BFCCCCA2ABC05754942F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A54529398A4BAB1C0C0A4AFAF - 99A1A1909595888A8A8485858282827588D17790E48099E78FA9EAA1BDEF2F25 - 7A2F257A2F257A54549AC3E3F87078B12F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A403B8A95A6D5AFC3D8AAB2B2A1A7A79B9E9E9B9D9D - A1A5A5AEB6B6BFCDCD5755942F257A2F257A585595C2CFCFB3BBBBA8ADADA4A7 - A7A6A9A9AEB3B3B8C0C0C2CDCD878AB03830812F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257ABCC3C3B4B8B8AFB1B1ADAEAE - AFB0B0B3B6B6BABFBFC2CACACBD6DA7F83B52F257A2F257A2F257A2F257A2F25 - 7A2F257A2F257A2F257A2F257A2F257AC7D1E5C0C9E0BDC5DEBEC5DEC2CBE0CB - D5E6B6BDD73930822F257A2F257A2F257A2F257A2F257A595597D5DEE9D6DDE8 - AEB2CE2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F25 - 7A9F9FBFDDE2E2D8DBDBD5D7D7D3D4D4D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6 - D6D6D7D7D7DADADADCDEDEE1E4E45D56962F257A2F257A2F257A2F257A2F257A - 2F257A2F257A2F257A2F257A2F257A524B91DDE1E7E5E8E8E2E4E4E1E3E3E4E6 - E6E7EAEA5E58982F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A6B66A1BDBED4EAEEEEE7EAEAE4E6E6E2E3E3E1E1E1E0E0E0 - E1E2E2E3E4E4E6E8E8EAEDED2F257A2F257A2F257A2F257AEAEDEDE7E9E9E4E5 - E5E3E4E4E4E5E5E6E8E8EAEDEDE1E4EA534B912F257A2F257A2F257A2F257AA4 - A2C1E8E9E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - ECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7909090909090 - 9090908F8F8F8F8F8F8F8F8F9090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9395 - 959CA0A0A8B1B1B8C7C72D237C2D237C2D237C2D237CB7C5C5A6AFAF9A9E9E92 - 93938F8F8F929393979A9AA0A7A7AEB9B9BDCDCD4B478F2D237C2D237C2D237C - 372E82A0AABAB0BBBBACB5B5AFB9B9B8C5C58B91B32D237C2D237C2D237C2D23 - 7C2D237C2D237C413B895552945552942D237C2D237C2D237C2D237C6E6F9BA2 - AAAA9A9E9E989D9D9DA3A3AAB4B497A0B62D237C2D237C2D237C7578A5ACB8B8 - 9CA3A39295958E8F8F949898A0A8A8B0BEBE5250922D237C2D237C2D237CB3C2 - C2A1AAAA9398988A8C8C8B8D8D969C9CA5B1B1949FB52D237C2D237C2D237C74 - 79A7A2B9DA89A5EA7C96E7758EE5748DE57993E6819BE88CA8EB9BB7EFA1BEEC - 6E74AE2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C2D237C2D237C2D237C6E72A4ADBDC2A8B4B49C - A4A4909595898B8B7B8AC1748CE47891E5849DE894AEECA9C6F22D237C2D237C - 2D237C53539B666BAB2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C8893BDB7C3C3AAB2B2A0A5A59EA1A1A3A8A8AF - B8B8BFCDCD5653962D237C2D237C565396C2CFCFB4BCBCAAAEAEA7ABABACB1B1 - B6BEBEC3CFCF6A69A12D237C2D237C2D237C2D237C2D237C2D237C5754965754 - 96423B892D237C2D237C2D237C2D237CBDC4C4B6BABAB1B3B3B0B2B2B3B5B5B9 - BEBEC1C9C9C2CCD15754972D237C2D237C2D237C2D237C2D237C2D237C2D237C - 2D237C2D237C2D237C2D237CC7D2E5C1CAE1C0C8DFC2CAE0C8D1E4D2DEEB4E48 - 922D237C2D237C2D237C2D237C2D237C2D237C585398D5DEE8D6DEE8AEB1CE2D - 237C2D237C2D237C5B5699898AB88A8BB85C579A2D237C2D237C2D237C393083 - D7DCE1DBDFDFD7D9D9D5D6D6D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6D6D6D7D7 - D7DADBDBDDDFDFE2E5E55B55982D237C2D237C2D237C5D589A827FB17672A945 - 3D8B2D237C2D237C2D237C2D237C5D579AE9EDEDE5E8E8E4E6E6E5E8E8E9EDED - 5D579A2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C827FB1ECF0F0E8EBEBE5E7E7E3E4E4E1E2E2E2E2E2E4 - E5E5E7E9E9EBEFEF2D237C2D237C2D237C453D8BECF0F0E8EAEAE5E7E7E6E7E7 - E7E9E9EAEDEDEEF2F27772AA2D237C2D237C2D237C2D237CA5A4C5EAEDEDE7E9 - E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F791919191919191919190 - 90909090909090909090909090909090909090909090908F8F8F9495959DA2A2 - ABB5B5BDCDCD2C227E2C227E2C227E403A8BBBCBCBA9B2B29B9F9F9394949091 - 919699999EA3A3ABB4B4BAC9C97174A82C227E2C227E2C227E2C227E959EBAB8 - C5C5B2BCBCB1BBBBB8C4C4A6B2C32C227E2C227E2C227E2C227E413A8B9098BB - BBCBD0C1D1D1BECDCDBDCDCDBECECEA2ADBE7275A33D36866B6B99A0A7A79A9E - 9E989D9DA0A6A6AEB9B99AA5BC2C227E2C227E2C227E777BA9AFBCBC9FA6A692 - 95958F9090959A9AA3ABABB5C4C45351962C227E2C227E2C227EB7C8C8A4AEAE - 949A9A8A8D8D8C8F8F989F9FA9B5B598A4BB2C227E2C227E2C227E727DB9A1BF - F08CA8EB7E98E77891E57992E7809AE98CA7EC9BB9EFA4C1ED4645952C227E2C - 227E2C227E2C227E2C227E61609F9299BBB8C5D0C9D8D8C8D7D7C7D7D7B4C2CD - 8F97B95F5F9E2C227E2C227E2C227E2C227E2C227E484590AFBFC4A9B6B69AA3 - A38799C97B92E7768EE57B93E6869FE998B3EDAFCCF32C227E2C227E2C227E2C - 227E2C227E2C227E2C227E646AAC98ACD8B8D6F5BAD6F4ABC3E6818EC2362E86 - 2C227E2C227E2C227E2C227E8A91B4B5C1C1A9B0B0A3A8A8A6ABABAFB8B8C0CE - CE5553982C227E2C227E565398C2CFCFB5BEBEADB2B2ADB2B2B4BBBBC0CBCB68 - 68A22C227E2C227E2C227E2C227E5754999EA6C2CEDCDCCBD8D8CBD7D7CCD8D8 - CCD8D8999EBB66649E2C227EBBC1C1B6BABAB1B4B4B2B4B4B7BBBBC0C7C7CBD5 - D5615F9E2C227E2C227E2C227E2C227E58559CA2ABCFCBD9EBD5E4F1D4E2F0A8 - B0D26A68A82C227EC4CFE4C2CAE2C1C9E1C5CDE3CCD7E8A1A7CC2C227E2C227E - 2C227E2C227E9396C0D3DDEBB8BED79FA2C6D3DBE6D4DBE7ACB0CE2C227E645F - A1C8CEE0DFE8EFE1EAF0E4EDF1E8F3F57371AB2C227E2C227E2C227E9494BCDE - E3E3D9DCDCD6D7D7D5D5D5D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8DADBDB - DDDFDFE2E5E55B5499382F858B88B6DEE2E8EAEFEFEAEFEFECF1F1EEF5F5A6A6 - C92C227E2C227E2C227E2C227EAFB0CDE7EBEBE5E8E8E6EAEAEBEFEF5D579C2C - 227E2C227E2C227E8E8CBA8E8CBA8E8CBA8E8CBA7672AB453D8D2C227E2C227E - 2C227E2C227E2C227E504A95E0E3E9E8EBEBE5E7E7E3E3E3E3E4E4E5E6E6E8EB - EBEDF2F22C227E2C227E2C227E5E579CEEF2F2EAECECE8EAEAE8EAEAEAEDEDEE - F2F27672AB2C227E2C227E2C227E2C227EA6A5C8ECEFEFE9EBEBE7E8E8E5E6E6 - E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7E8E8E8E7E7E7 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79292929191919191919191919191 - 919191919191919191919191919090909090909090909597979FA4A4AEB8B8C0 - D0D02A21802A21802A2180535299BCCCCCAAB3B39CA1A19597979496969B9F9F - A6AFAFB5C2C29FABC32A21802A21802A21802A21807A80AFBFCDCDB5C0C0B2BB - BBB6C1C1C1D0D03F398C2A21802A21802A2180686BA6C0D0D6C1CFCFB9C5C5B3 - BEBEB0BABAB0BABAB0BBBBB0BABAAEB8B8A3ABB18D92A49CA1A1989B9B9A9E9E - A1A8A8B0BCBC9CA7BF2A21802A21802A21808A92B6B1BEBE9FA6A69396969092 - 92969A9AA4AEAEB7C7C75251982A21802A21802A2180BACCCCA5B1B1959B9B8C - 8E8E8C8F8F989F9FABB8B899A6C02A21802A21802A2180737EBBA4C3F18FAAEC - 819AE87B94E77F99E88AA6EB9AB7EFA4C1EC4645972A21802A21802A21802A21 - 8050519EB1C5DDC7D5D8C2CECEBDC8C8BAC5C5B9C3C3B8C3C3BAC5C5BCC9C9C1 - D1D1B4C3CF5D5E9F2A21802A21802A21802A2180484592AFBEC4A0B7D98DA7EB - 819AE87A92E67D95E788A1EA9AB6EEB2D0F42A21802A21802A21802A21802A21 - 80342D889AAFD9B4D1F4ACC7F1A7C2EFA8C1EFACC7F0B4D0F3B6D0EF5B5EA52A - 21802A21802A2180342D86B7C4CAB1BABAA9AFAFA9AFAFB2BBBBC0CECE545299 - 2A21802A2180545299C3D0D0B7BFBFB1B7B7B2B9B9BCC6C6A2AAC22A21802A21 - 802A21802A2180969DC1CFDDDDC7D3D3C2CCCCC0C8C8BFC7C7C0C8C8C1C9C9C1 - C9C9BFC6C6A1A5B6B7BBBBB3B6B6B2B5B5B5B8B8BDC2C2C7D0D0898DB72A2180 - 2A21802A2180352E8798A0CAD3E3F1CEDCEECAD7EBC9D6EAC9D6EAC9D5E9C8D3 - E8A8AFD2C1CAE2C0C8E0C2CAE1C7D0E4D0DBEA7879B22A21802A21802A218092 - 95C2E0ECF3D8E3EDD3DBE8D0D7E5CFD5E4D1D7E4A8ACCC6A68A7D7DEE8D8DFE9 - D9E1E9DBE3EADFE7EEE6F0F3DDE6EF2A21802A21802A2180726FAAE1E6E6DBDE - DED7D8D8D5D5D5D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D9D9D9DADBDBDDDFDFE0 - E2E2645FA0C2C3D5E6E9E9E6E9E9E7EAEAE7EAEAE8ECECECF1F1F0F6F67571AC - 2A21802A21802A2180817EB3EAEEEEE8EBEBE8ECECECF0F05C579E2A21802A21 - 802A2180F1F7F7F0F6F6EDF2F2ECF0F0ECF0F0EEF3F3BEC1D84F49962A21802A - 21802A21802A21807571ADECF0F0E8EBEBE5E6E6E4E5E5E5E7E7E9ECECEEF2F2 - 2A21802A21802A21805C579EEFF3F3EBEEEEEAEDEDEBEEEEEEF2F28E8BBB2A21 - 802A21802A21802A2180A6A6CAEEF2F2EBEDEDE8EAEAE6E7E7E5E5E5E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7929292929292929292929292929292929292 - 929292929292929292929292919191919191969797A0A5A5AEB8B8C0D1D12820 - 8328208328208352519BBDCDCDABB4B49DA2A2979A9A989C9CA4AAAAB2BDBDB7 - C7CD322B892820832820832820835C5DA1C1D0D0B5C0C0AFB8B8B1BABABBC7C7 - 8C94B92820832820832820835D5EA2D0E3E3C3D2D2B8C3C3B0B8B8AAB2B2A7AE - AEA6ACACA6ACACA5ABABA3AAAAA3A8A89DA2A2999C9C969898989C9CA1A8A8B1 - BDBD9CA8C02820832820832820839DA9C2B1BEBEA0A7A79395958F9191979B9B - A5AEAEB8C8C851509B282083282083282083BACCCCA5B1B1959B9B8B8D8D8C8F - 8F97A0A9A4BBDA94A8D8282083282083282083727EBDA6C3F190ACEC829DE980 - 9AE887A2EB97B4EFAAC8F34D4FA02820832820832820832820837D8CC4B1D0F5 - A3C2F29BB6EDA3B4D4AEB5BAAEB3B3ACB1B1ABB1B1ABB1B1ADB5B5B2BCBCB7C4 - C4C1D2D28E98BD282083282083282083282083454397ABC9F399B4EF8AA3EA7E - 97E77F97E789A2EA9AB6EEB4D1F4282083282083282083282083282083A7BEE2 - B2CEF3A4BEEF9AB3EC95ADEB95ADEB99B1EBA2BBEEB3C7DBC5D9DB4745952820 - 832820832820836566A4B9C5C5AEB7B7ACB4B4B3BDBDC1CFCF52519B28208328 - 208353519CC4D1D1B9C2C2B4BCBCB9C1C1C3CFCF53509B282083282083282083 - 959DC2D2E2E2C8D4D4C1C9C9BBC1C1B8BDBDB8BDBDB7BCBCB8BDBDB8BDBDB7BC - BCB6BABAB3B6B6B2B4B4B3B5B5B8BCBCC2C9C9C4CED5332C8928208328208328 - 2083A2ACD2D1E0F0C9D6EBC2CEE7BFCAE5BEC9E3BFC8E3C0CAE3BFC9E2BFC8E1 - BDC5DEBDC5DEC2CAE1C9D2E6D3DEEC56539F282083282083282083D6E2EEDAE4 - EED2DBE7CED4E3CCD1E1CBD0E0CCD1E0C3C9DBD1D6E3D2D7E4D3D9E4D5DAE5D8 - DEE7DDE5EBE5EEF2DDE6EF28208328208328208358549FE2E7E7DCDFDFD7D9D9 - D6D6D6D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D8D9D9DADBDBDCDDDDDFE0E0D5D7 - DDE2E4E4E2E4E4E2E4E4E3E5E5E4E6E6E6E9E9EAEEEEEFF5F58C8BBD28208328 - 20832820835A55A0EBEFEFE8EBEBE9EDEDEDF1F15A56A0282083282083282083 - F1F7F7EDF2F2EAEDEDE8EBEBE8EBEBEAEDEDECF1F1EFF4F47471AE2820832820 - 83282083282083A4A4C9EAEEEEE7E9E9E6E7E7E7E8E8EAEDEDEFF3F328208328 - 20832820835B56A0F1F5F5EEF1F1EDF1F1EFF2F2A5A5CB282083282083282083 - 2820838D8BBDEFF2F2EBEEEEE8EAEAE6E7E7E5E5E5E5E6E6E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F793939393939393939392929292929293939393939392 - 9292929292929292929292929292979898A1A6A6AEB8B8C1D1D1271F85271F85 - 271F8551509DBDCDCDABB4B49FA4A49B9F9FA0A5A5ADB6B6BCCBCB5B5BA2271F - 85271F85271F853C3891BACAD0B6C1C1ADB5B5ABB2B2B2BBBBC0CDCD47439727 - 1F85271F85322B8BBDCDDACFE1E1C2D0D0B7C2C2B0B8B8ABB1B1A8ADADA6ABAB - A4A9A9A4A9A9A2A7A7A0A4A49CA0A0989B9B9799999A9D9DA3A9A9B2BEBE9CA7 - C1271F85271F85271F859CA8C2B1BDBD9FA6A6939696909292979B9BA5AEAEB8 - C8C850509C271F85271F85271F85BACCCCA5B1B1959B9B8B8D8D8893B18DA7EC - A0BDF093A9DA271F85271F85271F85727EBEA6C4F292AEED87A2EB86A0EA91AD - EDA5C2F2707BBE271F85271F85271F85271F858597CDADCCF49DBAF191ACEE87 - A2EC809BEA8098E5909EC8A1A4A9A2A4A4A1A4A4A2A6A6A5AAAAAAB1B1B2BDBD - BCCCCC8B96BC271F85271F85271F85271F85707BBEA6C3F293AEED859EEA839B - E98AA4EB9CB6EEB4D1F5271F85271F85271F85271F857581BEB7D3F5A4BEF095 - ADEC8CA3E8889FE7889EE790A0CB9CA5ADAAB4B4B9C8C8B6C7D4271F85271F85 - 271F85322A8BC0CECEB4BEBEB0B8B8B5BFBFC2D0D052509D271F85271F855251 - 9DC5D2D2BBC5C5B9C1C1BEC8C8ABB6C9271F85271F85271F855E5EA4D7E8E8D0 - DFDFC6D1D1BFC7C7BAC0C0B7BCBCB6BBBBB6BABAB5B9B9B6BABAB6B9B9B5B8B8 - B3B5B5B3B5B5B6B9B9BEC3C3C8D0D09398BF271F85271F85271F856A6CB0D2E3 - F1C8D5EBBFCAE5B9C3E2B7C1E0B8C0DFB9C1DFB9C2DFB9C1DFBAC2DEBAC1DDBD - C4DFC2C9E2CAD3E7D5E1ED5653A1271F85271F853F3993DEEAF2D5DEEACDD4E3 - C8CEDFC7CCDEC8CCDEC9CEDECCD0DFCDD2E1CFD4E1D1D6E3D4D9E5D9DFE8DFE7 - EDE7F0F49495C4271F85271F85271F857C7BB4E2E6E6DCDFDFD8D9D9D6D6D6D6 - D6D6D6D6D6D8D8D8D9D9D9D9D9D9D9D9D9DBDBDBDBDCDCDEDFDFDFE0E0E0E1E1 - E0E1E1E0E1E1E1E2E2E2E4E4E5E8E8EAEEEEEFF5F5807DB7271F85271F85271F - 855955A1EBEFEFE9ECECEAEDEDEDF2F25A55A2271F85271F85271F85EFF4F4EA - EEEEE7E9E9E5E6E6E4E5E5E6E8E8E8EBEBEBEFEFEFF4F47370B0271F85271F85 - 271F85342C8CEEF2F2E9ECECE7E9E9E7E9E9EAEDEDEFF3F3271F85271F85271F - 855A55A2F2F7F7F0F5F5F0F5F5A6A5CC271F85271F85271F85271F857370B0EF - F3F3EBEEEEE9EBEBE6E7E7E5E5E5E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8 - E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79494949494949494949494949393939393939393939393939393 - 93939393939393939393979898A1A6A6AFB9B9C1D1D1251D87251D87251D874F - 4F9EBECDCDACB6B6A3A9A9A0A5A5A8B0B0B7C4C4949FC0251D87251D87251D87 - 251D879FAAC4BAC6C6ADB5B5A7ADADA9B0B0B5BEBEBAC8CE251D87251D87251D - 876769ABD3E6E6D1E3E3C7D5D5BDC9C9B7C1C1B4BCBCB1B9B9AEB6B6ACB4B4AA - B1B1A8AEAEA5AAAAA1A6A69EA1A19A9D9D9DA1A1A6ADADB3BFBF9CA8C2251D87 - 251D87251D879BA7C1B0BDBDA0A6A6949696909292979B9BA5AFAFB8C8C84F4E - 9E251D87251D87251D87BACCCCA5B1B1959B9B8B8D8D8595C78DA8ECA1BEF193 - A8DA251D87251D87251D87717DBFA7C5F394AFED8BA6EC8EA9ED9CB8F0A0BAE7 - 2F298E251D87251D87251D877C8BC7AFCDF59DB9F08EA8ED829DEA7C95E97791 - E8758EE8748DE8768EE38995C39A9CA29B9C9C9D9F9F9FA3A3A5ABABAEB9B9BB - CCCC828BBA251D87251D87251D87251D87A1BAE79EB9F08EA7EB88A0EA8DA6EB - 9DB7F0B4D1F5251D87251D87251D87251D87B8D3F0ABC5F198B1EC8BA2E98499 - E78494CF8990A38E9090959898A0A6A6B0BBBBC2D3D36568AA251D87251D8725 - 1D879DA7C1B9C4C4B4BDBDB7C2C2C3D1D1504F9F251D87251D87514F9FC6D3D3 - BDC7C7BCC5C5C2CECE858AB9251D87251D87251D87B5C2D6D7E9E9D2E1E1CAD6 - D6C4CDCDC1C9C9BEC5C5BDC4C4BCC2C2BBC0C0BBC1C1BABFBFB9BDBDB7BABAB6 - B9B9BABEBEC2C8C8CDD7D75E5DA5251D87251D87251D87C2D0E5CBDAEEC0CCE7 - B8C3E2B4BCDFB3BBDEB5BCDEB5BDDEB6BDDEB7BFDEB8C0DDB9BFDDBDC3DFC2CA - E1CBD4E7D6E1EE5452A3251D87251D875552A3DBE6F0D2DAE8CBD1E1C8CDDEC7 - CADDC7CBDDC9CDDDCBCEDECED2E0D0D4E2D4D9E4D8DEE8DDE5ECE4EDF1A0A2CD - 251D87251D87251D87251D87A9ACCDE0E4E4DCDEDED9D9D9D6D7D7D7D7D7D8D8 - D8D9D9D9DADADADADADADADADADBDCDCDCDCDCDDDDDDDEDFDFDEDFDFDFDFDFDF - E0E0E2E3E3E4E6E6E8EBEBECF0F0E4E9F0322B8E251D87251D87251D877E7CB7 - EBEFEFE9ECECEAEDEDEDF2F25854A3251D87251D87251D87EEF3F3E9ECECE6E7 - E7E3E4E4E2E3E3E3E4E4E6E7E7E9EBEBEDF0F0E4E8EF322B8E251D87251D8725 - 1D87A4A4CCEBEEEEE9EBEBE9EBEBEBEEEEEFF3F3251D87251D87251D875954A3 - F3F8F8F3F8F8CCCFE3322B8E251D87251D87251D87726FB1EFF3F3ECEEEEE9EB - EBE7E8E8E6E7E7E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7959595959595949494949494949494949494949494949494949494949494 - 939393939393989999A1A6A6AFB9B9C1D2D2241C8A241C8A241C8A4F4EA0BFCF - CFB0BABAA8B0B0A9B1B1B2BEBEB8C8CE2F2890241C8A241C8A241C8A777DB3BD - CBCBAFB8B8A5AAAAA3A7A7AAAFAFB6C0C09FA8C4241C8A241C8A241C8A45429C - 7C81B8868DBEA2ADC9B2BECCC3D0D0C1CDCDBECACABCC8C8B9C5C5B8C2C2B4BF - BFB1BABAACB3B3A5ACACA0A5A5A1A6A6A8B0B0B5C1C19CA7C3241C8A241C8A24 - 1C8A9BA7C2B1BDBDA0A7A7959797919393989C9CA5AFAFB8C8C84E4DA0241C8A - 241C8A241C8ABACCCCA5B1B1959A9A8B8D8D8397D28EA8ECA1BEF193A8DB241C - 8A241C8A241C8A717DC1A8C5F396B3EF90ABED96B1EFA7C5F35E65B3241C8A24 - 1C8A241C8A4C4EA5B4D2F6A0BCF28EAAEE819CEB7B94E9778FE9758DE8748DE8 - 748CE8748CE8738CE8768DE38794C197999E999A9A9CA0A0A3AAAAADBBBEB5D2 - EF4C4EA5241C8A241C8A241C8A5E65B3A9C5F394AFEE8CA5EC90A8EC9EBAF0B4 - D1F5241C8A241C8A241C8A4C4EA6B9D5F5A3BCF092A9EB879BDD898FA98B8B8B - 8B8B8B8E8E8E9294949CA1A1AAB2B2BCCACA99A5C7241C8A241C8A241C8A767B - B2BCC8C8B7C0C0BAC4C4C4D2D2504EA1241C8A241C8A504EA1C7D4D4BEC9C9BE - C8C8C5D2D26667AC241C8A241C8A241C8A6869AE7E82B99FA8CBA5AECAC1CCD3 - CAD5D5C8D3D3C8D2D2C7D0D0C6CFCFC5CDCDC3CBCBC1C8C8BEC4C4BDC2C2BFC5 - C5C6CECED1DCDC3B3696241C8A241C8A47439CD5E4EDC6D4EBBCC8E5B6C0E1B2 - BBDFB4BBDEB4BBDDB5BDDEB6BDDEB7BEDDB8BFDDBAC0DDBCC4E0C3CAE3CBD4E8 - D7E2EE5351A5241C8A241C8A5451A5DAE5EFD2D9E8CBD1E1C8CDDFC6CADDC7CC - DDC9CEDECCD0DFCFD4E2D4D9E4D8DEE8DEE5EDCCD3E5625FAC241C8A241C8A24 - 1C8A241C8A49449DE4E9E9DEE2E2DBDCDCD9D9D9D7D7D7D8D8D8D9D9D9D9D9D9 - DADADADADADADADADADBDBDBDDDDDDDDDEDEDFDFDFDFE0E0E0E1E1E2E4E4E5E7 - E7E8EBEBECF0F0E3E8EF4B459F241C8A241C8A241C8A241C8AAFB0D2EAEDEDE8 - EBEBEAEDEDEDF2F25753A5241C8A241C8A241C8AEFF3F3EAECECE6E7E7E3E4E4 - E2E2E2E3E3E3E4E4E4E6E8E8EAECECEEF2F28B8AC0241C8A241C8A241C8A6561 - ACEDF0F0EAECECEAECECEBEEEEF0F4F4241C8A241C8A241C8A5853A6F3F8F8CC - CFE3312A91241C8A241C8A241C8A4B459EF0F4F4EDEFEFEAEBEBE8E8E8E6E7E7 - E6E7E7E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0 - F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79595 - 9595959595959595959595959595959595959595959595959595959594949494 - 9494999A9AA2A7A7B0BABAC2D2D2221B8C221B8C221B8C4D4DA2C4D6D6B7C4C4 - B1BCBCB4C0C0BFCECE5859A7221B8C221B8C221B8C4D4DA2C0D0D0B2BCBCA6AC - AC9FA2A2A1A5A5A9AFAFB7C2C2A0AAC6221B8C221B8C221B8C221B8C221B8C22 - 1B8C221B8C221B8C221B8C3733964C4BA06C6EAE7579B2939CC09BA5C1BFCECE - BAC6C6B2BCBCA9B1B1A6ADADAAB3B3B7C3C39CA8C4221B8C221B8C221B8C9BA7 - C3B2BEBEA0A7A7949797919393999D9DA6AFAFB9C9C94C4DA1221B8C221B8C22 - 1B8CBACCCCA5B0B0959A9A8A8C8C8398D98FA9ECA2BFF193A8DC221B8C221B8C - 221B8C707CC2A9C6F399B5F096B1EF9DBAF1A7C4EE221B8C221B8C221B8C221B - 8C96ACDDA7C5F393AFEF849EEB7B95E9778FE8758DE8748DE8748DE8748DE974 - 8DE9758DE8748DE8748DE8778EE38693BF979898979FAE96AEE2A6C4F3A9C3EA - 221B8C221B8C221B8C221B8CAAC5EE9CB8F092ABED93ACED9FBAF0B4D1F5221B - 8C221B8C221B8C747FC2B4D1F59FB7EB94A0BA8F91918B8B8B8C8C8C8D8D8D8E - 8E8E9393939A9D9DA8AFAFB9C6C6A1AFCB221B8C221B8C221B8C777CB5BFCCCC - B8C2C2BBC5C5C5D2D24E4EA2221B8C221B8C4F4EA3C8D5D5C0CBCBC0CACAC8D5 - D54F4EA3221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C4E - 4DA14E4CA17A7DB68588BBA5ADCAB9C3D1CDD7D7C9D1D1C6CECEC6CDCDCAD3D3 - D4E0E0221B8C221B8C221B8C514FA4D5E1E6C5D2EBBBC6E5B6BFE1B3BCDEB4BB - DEB4BCDEB6BDDFB7BEDEB8BFDEB9BFDEBAC1DEBDC4DFC3CBE3CCD6E8D7E2EF52 - 50A7221B8C221B8C5250A7DBE5EFD2D9E8CCD1E2C8CCDFC6CADDC8CCDECACFDF - CFD3E2D2D8E4D9E0E9DFE7EE8F91C62E2993221B8C221B8C221B8C221B8C2F29 - 92C1C5DAE1E5E5DDDFDFDADBDBD8D9D9D8D8D8D8D8D8DADADADBDBDBDBDBDBDB - DBDBDBDBDBDCDCDCDEDEDEDEDFDFE0E1E1E1E2E2E3E4E4E5E8E8E9ECECEDF1F1 - BCBFDC3C3799221B8C221B8C221B8C221B8C4944A0ECF0F0E9EBEBE8EAEAE9EC - ECEEF2F25652A7221B8C221B8C221B8CEFF3F3EAECECE6E7E7E3E4E4E2E2E2E3 - E3E3E4E4E4E6E6E6E9EAEAEDF0F0D8DBEA221B8C221B8C221B8C3C379AEEF2F2 - EBEEEEEAEDEDECEFEFF0F4F4221B8C221B8C221B8C5652A7E6EAF13C379A221B - 8C221B8C221B8C4945A0E3E7EEEDF0F0EAECECE8E9E9E7E8E8E7E7E7E6E6E6E6 - E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7969696969696 - 969696969696959595969696969696959595959595959595959595949494999A - 9AA2A7A7B1BABAC2D2D2211A8E211A8E211A8E4C4CA3CDE2E2C2D3D3BECECEC3 - D3D396A3C7211A8E211A8E211A8E2C2793BCCCD3B6C2C2A8AFAF9BA4B4989DA6 - 9FA1A1A9AFAFB7C2C2A0AAC7211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E49 - 479E989FB5AEB7B7AEB8B8B8C5C59DA8C5211A8E211A8E211A8E9CA8C5B3BFBF - A2A9A9959898929494999E9EA6B0B0B9C9C94C4CA3211A8E211A8E211A8EBBCD - CDA6B1B1959A9A8A8C8C829BEA8FAAEDA3C0F293A8DD211A8E211A8E211A8E70 - 7BC3AAC7F39CB8F09AB7F0A6C2F38090CF211A8E211A8E211A8E4A4CA9B2D1F6 - 9CB9F18AA5ED7F98EB7991EA758EE9758EE9758EE9758EE9758EE9758EE9758E - E9758EE9768EE9768EE9768EE97D92DF8198E68AA4EC9CB8F1B2D0F65459B021 - 1A8E211A8E211A8E8091CFA4C0F298B1EF96B0EEA0BBF1B5D1F5211A8E211A8E - 211A8E737FC3B8CDE0A6B2B5999E9E9091918C8C8C8E8E8E8F8F8F9090909393 - 939C9F9FA8B0B0B9C6C6A1AECB211A8E211A8E211A8E777CB6C0CCCCB9C3C3BB - C6C6C5D3D34E4DA4211A8E211A8E4E4DA4C8D5D5C1CBCBC1CBCBC9D5D54E4DA4 - 211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E3733984D4AA1CCD5D5CED8D8D6E2E221 - 1A8E211A8E211A8E504FA6D6E1E1C6D3EABDC7E6B7C0E2B3BDDFB4BCDFB5BDDF - B6BDDFB7BEDFB9C0DEBAC0DEBAC1DEBEC5E0C4CCE4CDD7E8D8E3EF5150A8211A - 8E211A8E5250A8DBE5EFD2DAE8CCD2E3C8CDDFC7CBDEC9CEDFCDD2E1D1D7E4D8 - DEE9DFE7EF6B6AB4211A8E211A8E211A8E211A8E211A8E4743A1CED3E1E3E7E7 - DDE0E0DBDCDCDADADAD9D9D9D9D9D9DADADADBDBDBDCDCDCDCDCDCDCDCDCDDDD - DDDDDDDDDEDFDFDFDFDFE1E2E2E3E5E5E6E9E9EAEEEEE1E5ED6F6DB6211A8E21 - 1A8E211A8E211A8E211A8E2E2895C8CAE0E9ECECE7E9E9E8E9E9EAECECEEF2F2 - 5552A9211A8E211A8E211A8EEFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E3E3 - E3E5E5E5E8E9E9ECEFEFF1F5F5211A8E211A8E211A8E211A8EEFF3F3ECEFEFEB - EEEEEDF0F0F0F4F4211A8E211A8E211A8E4944A24944A2211A8E211A8E211A8E - 4944A2E6E9F0EFF2F2ECEEEEE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F797979797979797979797 - 9797979797969696979797969696969696969696959595959595999A9AA2A7A7 - B1BABAC3D3D31F19911F19911F19914B4CA6CEE3E3CEE3E3CCE0E0C3D6DE3531 - 9B1F19911F19911F199197A4C9C0D0D0AFB9B999ABD28AA2E9859DE889A0E498 - ACDCADC0DC99A7D01F19911F19911F19919CA6CCA8B4D29DA7CC787DB96163AD - 4B4AA335329A1F19911F19911F19911F19911F19911F19911F19911F1991959C - BAB3BDBDB2BCBCBAC6C69CA8C61F19911F19911F19919EAAC8B5C2C2A3AAAA97 - 9A9A939595999E9EA7B1B1BACBCB4A4BA51F19911F19911F1991BCCFCFA7B2B2 - 969C9C8B8E8E849DEB91ACEEA4C0F294AADD1F19911F19911F19916E7BC4AAC8 - F49FBBF19FBBF1ABC8F45C63B81F19911F19911F19918396D1A9C7F495B0EF85 - 9FEC7B94EA7790E9778FE9768FE9768EE9768EE9768EEA768EEA768FE9768EE9 - 768EE9778FEA778FE97790E97C95EA849EEC95B0EFAAC7F48495D11F19911F19 - 911F19915257B2ABC6F39CB6F099B3EFA1BDF1B5D2F51F19911F19911F199155 - 57ABBFD1D1ABB6B69DA2A29395958F90908F8F8F9090909292929798989FA3A3 - ACB4B4BECCCC98A3C91F19911F19911F1991767BB7BFCBCBB8C2C2BCC6C6C6D3 - D34C4CA61F19911F19914D4CA6C9D6D6C1CBCBC1CACAC8D4D45859AB1F19911F - 1991423FA2C2CFDEABB5D3878DC17A7DB95757A94C4BA42A26951F19911F1991 - 1F19911F19911F19911F19911F19912A2695D0DBDBD1DCDCD7E3E32B26961F19 - 911F19914340A2D8E4E4CBD5E1C0CAE8B8C2E3B5BDE1B5BDE0B6BEE0B7BEE0B9 - C0DFB9C0DFBAC1DFBBC2DFBEC5E1C5CDE5CED7E9D9E3F0504FAA1F19911F1991 - 504FAADBE5F0D2DAE8CCD3E3C9CDE0C8CDDFCCD1E1D0D4E4D6DBE8DEE5EE6A69 - B61F19911F19911F19911F19912C27968585C1E5EBEBE1E6E6DEE1E1DCDDDDDA - DBDBDADADAD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDCDCDCDDDDDDDDDDDD - E0E0E0E2E3E3E4E5E5E7E9E9EBEEEEBBBDDB2C26971F19911F19911F19911F19 - 911F19912C2797C8CAE0EBEEEEE8EAEAE6E7E7E7E8E8EAECECEEF2F25451AB1F - 19911F19911F1991EFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E4E4E4E6E6E6 - E8EAEAECEFEFF1F5F55451AB1F19911F19911F1991F0F4F4ECEFEFECEEEEEDF0 - F0F0F4F41F19911F19911F19911F19911F19911F19911F19912C2797CCCFE5F2 - F6F6EEF0F0EAECECE8E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEAEAEAEBEBEB - EBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79898989898989797979797979797 - 979898989797979797979797979696969696969696969A9B9BA3A8A8B1BABAC3 - D3D31E17931E17931E179334319D767DBB767DBB767DBB5557AC1E17931E1793 - 1E1793767DBBCEE3E3BECDCDA8BAD493ACEC8AA2EA859EE989A1EA92ABECA2BD - F0A3BCE91E17931E17931E17937D8BCCCBE6F5C5DFF2BBD4EEBCCFE0C5D0D0C6 - D2D2C8D6D6B8C4D4A7B3D2858CC24C4BA81E17931E17931E1793A2ABC2B6C0C0 - B3BEBEBAC7C79DA9C81E17931E17931E1793757BB9B9C7C7A7AFAF9A9E9E9699 - 999CA1A1A9B3B3BDCECE494AA71E17931E17931E1793C0D3D3AAB6B6989F9F8C - 94A287A0EC93AFEFA7C4F396ABDF1E17931E17931E17936D79C5ABC8F4A0BCF2 - A2BFF3AFCDF53D3DA61E17931E17931E1793A7C2EBA4C0F390ABEF819BEC7993 - EA7790EA778FEA778FEA768FEA778FEA778FEA768FEA778FEA768FEA768FEA78 - 90EA7890EA7890EA7A92EA839CEC90AAEFA3C0F3B1CDF11E17931E17931E1793 - 3331A0AECBF5A0BBF19CB6F0A4BFF1B6D3F61E17931E17931E1793292498C7DA - DAB3C0C0A3ABAB999D9D9495959192929293939696969B9E9EA5ABABB3BEBEC4 - D4D46D71B71E17931E17931E1793949DC4BEC9C9B8C1C1BCC5C5C6D3D34C4BA8 - 1E17931E17934C4BA8C9D5D5C0CACABFC8C8C6D1D1787CBA1E17931E17931E17 - 93CDDCE4D9EAEAD3E0E0CDD8D8CAD5D5CBD5D5CDD8D8D1DDDDA9B2D0ACB6D57D - 81BE2A24991E17931E17934D4BA8D2DDDDD1DBDBD5E0E05A5AAF1E17931E1793 - 1E1793C4CFDED1DBDCC4CFE8BCC7E5B7C0E2B6BFE1B9C0E1BAC1E0BAC2E0BBC2 - E0BCC3E1BDC4E0C0C7E2C7CEE5CFD7EAD9E4F04F4DAC1E17931E1793504EACDC - E6F0D3DBE9CDD4E4CACEE0CACEE1CED2E2D3D8E6DAE1EBB2B6DA1E17931E1793 - 1E17931E1793514EABD0D6E6E5EBEBE2E5E5DEE0E0DCDEDEDBDCDCD9DADADADA - DADADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDDDDDDDEDEDEDFE0E0E1E1E1E3 - E4E4E6E9E9EBEEEEA0A1CF1E17931E17931E17931E17931E17931E1793615DB2 - E2E5EDECEFEFE9EBEBE6E8E8E6E7E7E7E8E8EAECECEEF2F2534FAC1E17931E17 - 931E1793F0F4F4EBEEEEE8E9E9E5E6E6E4E4E4E4E4E4E5E5E5E7E7E7E9EBEBED - F0F0F1F6F61E17931E17931E17931E1793F0F3F3EDF0F0ECEEEEEEF0F0F1F5F5 - 1E17931E17931E17933933A02B25991E17931E17932B2599E7EBF3F2F6F6EEF1 - F1EBECECE9E9E9E8E8E8E7E7E7E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7989898989898999999989898989898989898 - 9898989797979797979797979696969696969B9C9CA3A8A8B1BBBBC3D3D31C16 - 951C16951C16951C16951C16951C16951C16951C16951C16951C16951C169580 - 89C1C3D6DEBED3DFA7C2F198B2ED8DA6EB889FE989A0E990A9EB9EB8EFB1CDF4 - 3130A21C16951C1695474AAEC8E5F9BCD9F7B0CCF4A8C3F2B8C6D2C0C9C9C4CE - CECBD8D8D4E5E5D5E7E75658AF1C16951C169527239AC1CECEB7C1C1B4BEBEBB - C8C89EAAC91C16951C16951C1695757CBCC0D0D0AEB8B8A1A7A79CA1A1A2A9A9 - B0BCBCC2D5D53D3CA31C16951C16951C1695BACED6AFBEBE9EA7A7939DAF8EA9 - EE9BB6F1AECBF58FA2DA1C16951C16951C16957583CDA9C6F4A0BDF2A4C1F3B2 - D0F61C16951C16951C16951C1695B7D5F79FBBF28DA8EE8099EC7992EB7891EB - 7891EB7891EA7890EB7790EB7790EB7790EB7790EA7790EA7890EA7890EB7991 - EB7891EB7A92EA809AEC8DA7EEA0BBF2B7D5F727239B1C16951C16951C1695B3 - CFF6A3BEF29EB9F1A5C0F2B7D4F61C16951C16951C16951C16958A96C6BECECE - AFB9B9A3A9A99CA0A0999B9B9A9C9C9DA0A0A5AAAAB0B8B8BECBCBC2D2DA2723 - 9A1C16951C16951C1695B2BDCDBBC5C5B7BFBFBCC5C5C6D3D34A4AA91C16951C - 16954B4AAAC9D5D5BFC8C8BDC5C5C3CDCDACB7CF1C16951C16951C1695929ACA - D7E7E7D0DCDCC9D2D2C6CECEC4CDCDC8D0D0CDD7D7D5E1E1DCEBEBD0DEE61C16 - 951C16951C16956F71B9D1DBDBCED7D7D2DCDC878BC21C16951C16951C169572 - 74BCD8E3E3CDD6DDC2CEE9BDC7E6BDC5E5BDC5E4BDC6E3BEC7E3BFC7E3C0C8E3 - C1C7E3C3CAE4C9D1E7D1DAEBDAE6F14E4DAE1C16951C16954E4DAEDFE8F1D6DE - EBD0D6E6CED2E4CDD2E3D1D5E5D6DCE9DEE5EE6868B91C16951C16951C16956A - 6ABAEAF3F5E5EBEBE2E6E6DFE2E2DEDFDFDCDDDDDBDCDCDADBDBDBDBDBDADADA - DBDBDBDCDCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE1E1E1E2E3E3E6E7E7E9EC - ECB9BBDB1C16951C16951C16951C16951C16953732A1BCBEDDEEF2F2ECEEEEE9 - EBEBE7E8E8E6E6E6E6E6E6E7E8E8EAEDEDEFF3F3524FAE1C16951C16951C1695 - F0F4F4ECEEEEE8EAEAE6E7E7E5E5E5E5E5E5E6E6E6E7E8E8EAECECEEF1F1D8DB - EB1C16951C16951C16953732A2F0F3F3EDEFEFECEEEEEEF0F0F1F5F51C16951C - 16951C1695524FAEB0B2DA1C16951C16951C16954541A8E6E9F1EFF2F2ECEEEE - EAEAEAE9E9E9E8E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F799999999999999999999999999999999999998989898 - 98989797979797979797979696969B9C9CA4A9A9B1BBBBC3D3D31B15971B1597 - 1B15971B15971B15971B15971B15971B15971B15971B15971B15971B15972622 - 9C8EA0DAB2CDF4A2BCF095ADED8CA4EB89A2EB8EA7EC9AB4EFABC6F26C78C71B - 15971B15971B15979DB2E1BDDAF7B0CCF4A6C1F2A8BEE5BDC5C5C2CCCCCAD7D7 - D4E4E4BFCEDE1B15971B15971B15975F61B2C0CCCCB7C0C0B5BFBFBDCACAA0AC - CC1B15971B15971B15973D3CA5C8DBDBB8C5C5ACB5B5A8B0B0ADB8B8B9C8C8C0 - D3DB1B15971B15971B15971B159792A1CAB9CACAA8B5B59EADC09CB6F1A7C3F3 - B9D6F76670C21B15971B15971B159790A5DFA7C3F4A0BCF3A4C1F3B4D2F71B15 - 971B15971B15974549B0B4D3F79DB9F28BA6EF7F99EC7992EB7991EB7991EB78 - 91EB7891EB7891EB7891EB7890EB7891EB7890EB7991EB7992EB7991EB7991EB - 7A92EB8099EC8CA6EF9EB9F2B4D2F74549B01B15971B15971B1597B5D1F6A4BF - F2A0BAF1A6C1F3B7D4F61B15971B15971B15971B159726229CBFD1DABCCACAB0 - BABAA8AFAFA5ABABA6ACACA9B0B0B1BABABDC9C9CADBDB5457B01B15971B1597 - 1B15974948AAC2CECEB8C0C0B6BDBDBDC6C6C8D6D64A4AAB1B15971B15974A4A - ABC9D5D5BFC7C7BBC2C2BFC7C7CAD5D5332FA11B15971B15973330A1D8E8E8D0 - DCDCC8D2D2C4CCCCC2CACAC6CECECCD5D5D4E0E0DCEBEB7C80C21B15971B1597 - 1B1597B3BBD4CED6D6CBD2D2CDD5D5CAD3DB27239C1B15971B15971B1597AEB6 - D7D7E1E1CED8E7C7D2EBC5CFEAC4CEE9C4CEE8C5CEE8C6CFE8C6CFE7C6CEE7C8 - D0E8CDD6E9D5DFEEDEEAF34E4CAF1B15971B15974E4CAFE2EDF4DAE4EFD5DCEA - D1D7E6D1D6E5D3D8E7D8DEEAE0E7F04E4CAF1B15971B15971B1597DEE6F1E9F1 - F1E4EAEAE2E6E6E0E2E2DFE1E1DFE0E0DCDDDDDCDDDDDBDBDBDBDCDCDCDCDCDD - DDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E4E5E5E7E9E9EBEFEF514DAF - 1B15971B15971B15971B15976C6ABCE4E8F0EEF1F1EBEDEDE9EAEAE7E8E8E6E6 - E6E5E5E5E5E6E6E7E8E8EBEDEDEFF3F3514EAF1B15971B15971B1597F0F4F4EC - EEEEE8EAEAE6E7E7E5E5E5E7E7E7E8E8E8EAEBEBEDEFEFF1F4F49595CE1B1597 - 1B15971B15975F5CB5EFF2F2EDEFEFECEEEEEEF0F0F2F5F51B15971B15971B15 - 97514EB0F4F9F9A2A3D41B15971B15971B15975F5DB6F1F5F5EEF1F1ECEDEDEA - EBEBE9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999898 - 989898989898989797979C9D9DA3A8A8B1BBBBC3D3D319149A19149A19149A30 - 2EA2747BBE747BBE747BBE747BBE5255B019149A19149A19149A19149A19149A - 8090D4AEC9F39FB9F093ABED8CA5EC8DA6EC96AFEEA4BEF1ABC4EF24219F1914 - 9A19149A2F2EA6B8D3F3B7D3F6AECAF3A9C4F3BCCAD5C6D1D1CDDBDBCADAE23D - 3CA919149A19149A19149AB3BFCFBBC6C6B4BDBDB5BEBEBFCDCDA2AED019149A - 19149A19149A19149AA1B0D1C3D5D5BAC8C8B7C4C4BBCACAC6D9D97D88C21914 - 9A19149A19149A19149A3A3BA7C2D7D7B6C7C7ADC3D9ADC9F5B6D4F7BAD7F42F - 2EA619149A19149A19149AA9C4F0A3BFF39DB9F2A3C0F3B4D2F719149A19149A - 19149A4448B2B4D3F79DB9F28CA6EF809AED7A92EC7A92EC7992EC7992EC7992 - EC7991EC7991EC7891EC7991EB7991EB7991EB7A92EC7A92EC7B92EB7B92EB81 - 99EC8CA6EE9DB9F2B5D2F74448B219149A19149A19149AB5D2F6A5C0F3A0BAF1 - A7C2F3B8D4F719149A19149A19149A19149A19149A3B3BA8BECED7BFCECEB8C4 - C4B6C1C1B7C1C1BAC6C6C2CFCFCBDCDC5F63B719149A19149A19149A19149A9D - A8C9BDC7C7B6BDBDB6BDBDBFC8C8CCD9D94949AE19149A19149A4949AECAD6D6 - BFC6C6B9BFBFBBC1C1C4CDCD8B91C319149A19149A19149A6265B8D4E2E2CED9 - D9C9D2D2C8D0D0CAD3D3CFDADAD7E4E4B8C3DD19149A19149A19149A4A49ADD1 - DADAC9CFCFC5CBCBC8CECED0D8D8797DBF19149A19149A19149A25229FAEB6D8 - DAE4E6D3DFEDCFDBEFCEDAEECFDAEECED9EDCFDAEDC3CCE7C2CAE6CFD8EBD3DD - EDDAE5F1E3EFF74C4BB219149A19149A4C4CB2E7F2F8E0EBF3DBE3EFD7DEEBD6 - DCEAD7DDEADBE1ECE1E9F14D4CB119149A19149A19149AECF5F5EBF2F2E7ECEC - E4E8E8E2E6E6E2E5E5BBBCD5DFE1E1DEDFDFDEDEDEDDDDDDDDDDDDDEDEDEDFDF - DFDFDFDFDFDFDFE0E0E0E0E0E0E2E3E3E5E6E6E9EBEBD3D6E719149A19149A19 - 149A19149A7978C3F1F6F6EEF1F1EAEDEDE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6 - E6E7E7E8E9E9EBEDEDEFF3F3504DB219149A19149A19149AF1F5F5EDF0F0EAEB - EBE8E9E9E7E8E8E8E8E8E9EAEAECEEEEEFF2F2E5E9F12722A019149A19149A19 - 149AA0A1D3EEF1F1ECEEEEECEEEEEEF0F0F2F5F519149A19149A19149A504DB2 - F5F9F9F5F9F96C6ABD19149A19149A19149A6B6ABDF1F4F4EFF1F1ECEEEEEBEB - EBEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEAEAEA - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F79C9C9C9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999 - 9898989797979C9D9DA4A9A9B1BBBBC3D3D318139C18139C18139C4647AECEE3 - E3C9DCDCC1D2D2BFCFCFC1D3D3B4C5D65155B418139C18139C18139C18139C92 - A5E0A8C3F299B3EF90A9EC8DA5EC91A9ED9CB5EFABC6F3879ADA18139C18139C - 18139C2E2DA898ACE2BAD7F7B5D2F6BBD3EECEDBDBBBC9DA3C3AAA18139C1813 - 9C18139C676CB9C1CCCCB7BFBFB2B9B9B6BFBFC1CECEA3B0D218139C18139C18 - 139C18139C231FA1A0AED1C6D9D9C5D7D7C9DDDD9FAFD1231FA018139C18139C - 18139C2320A018139C5B60B6B6CAD2BCD5E4BEDCF9BAD7F45A61BF18139C1813 - 9C18139C4246B3ABC7F59DB8F29AB4F2A1BDF3B4D1F718139C18139C18139C2E - 2CA8B6D4F79FBBF38DA7F0829AED7A93EC7A93EC7A93EC7A92EC7A92EC7992EC - 7A92ED7A92EC7A93EC7A92EC7A92EC7B93EC7B93EC7B93EC7B93EC829BED8EA8 - F0A0BBF3B7D4F7393AAE18139C18139C18139CB5D2F6A5C0F3A1BBF2A7C2F3B9 - D5F718139C18139C18139C18139C18139C18139C241FA18891C6BCCBD3C5D4D4 - C6D5D5CADADA97A1CC3B3AAA18139C18139C18139C18139C686DB9C2CECEB8C0 - C0B2B8B8B5BCBCC0C9C9CEDCDC4848AF18139C18139C4848AFC9D5D5BDC5C5B7 - BCBCB7BCBCBEC4C4C9D3D34747AE18139C18139C18139C6163B9CAD6DFD2DDDD - D0DBDBD2DDDDD5E2E29199CD2420A118139C18139C18139CB1B9D2CBD2D2C4C9 - C9C2C5C5C4C8C8CAD0D0D4DDDD3D3BAA18139C18139C18139C18139C6465BBB9 - C2DDDBE9F3DBE9F5DAE7F4CDD9EE8F96D2302CA7A5ACDAD5DFEFD9E4F1E0ECF5 - E5F2F84B4BB318139C18139C4C4BB3E7F3F8E6F1F7E1EAF3DDE5F0DBE2EDDBE1 - EDDDE3EEE1E9F17374C418139C18139C18139CAAAED9EDF4F4EBF1F1E8EEEEE7 - ECECB2B4D7251FA1E2E4E4E0E1E1DEDFDFDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E3E4E4E6E7E7EAEDEDB9BCDE18139C18139C18139C2621 - A2F3F8F8F0F4F4EDEFEFEAECECE8E9E9E7E8E8E7E8E8E8E8E8E6E7E7E7E7E7E8 - E9E9EBEDEDF0F3F34F4DB318139C18139C18139CF2F6F6EFF1F1ECEEEEEAEBEB - EAEBEBEAECECEDEFEFEFF2F2F2F6F66B69BF18139C18139C18139C3430A8F1F4 - F4EEF0F0ECEDEDECEEEEEEF1F1F2F5F518139C18139C18139C4F4DB3F5F9F9F4 - F8F8F4F8F84F4DB318139C18139C18139CA1A1D5F1F4F4EEF0F0ECEDEDEBEBEB - EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEAEA - EAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEB - EBEBECECECECECECECECECEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F2F2F2F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7 - F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79C9C - 9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A99999999999998 - 98989D9E9EA4A9A9B2BBBBC3D3D316129E16129E16129E4447B0CBDFDFBDCCCC - B3BEBEAEB8B8B2BDBDBAC9CCC3DEF65A62C116129E16129E16129E2C2BA9B3CE - F5A1BBF194ADEE8DA5ED8DA5ED95AEEEA1BBF1AFCAF4555DC016129E16129E16 - 129E16129E3739AF6D79CC6D79CC5254B616129E16129E16129E16129E3939AA - C5D1D1B9C2C2B2B8B8B1B6B6ACB3BC979FC37E86C416129E16129E16129E2D2C - A716129E16129E3939AB4446AF3939AB16129E16129E16129E16129E2D2CA670 - 79BF16129E16129E211EA24246B44246B5211EA416129E16129E16129E16129E - 8DA3E1A2BDF396B1F195B0F19FBAF3B1CFF6211FA416129E16129E16129EBBD8 - F9A4BFF491ABF1839DEF7D96ED7B94ED7B93ED7B93ED7A93ED7A93ED7A93ED7B - 93ED7B93ED7B94ED7B93ED7C94ED7B93ED7C94ED7E97EC849DEE92ABF0A4BFF4 - BBD8F816129E16129E16129E16129EB4D0F6A5BFF3A0BAF2A7C2F4B9D5F71612 - 9E16129E16129E4547B05C61B916129E16129E16129E16129E4546B04546B016 - 129E16129E16129E16129E16129E16129E3939ABC5D2D2BAC3C3B3B8B8B2B6B6 - B6BCBCA1A7C2A0A9CD3B3AAC16129E16129E4647B0C7D2D2BDC3C3B5B9B9B4B8 - B8B9BDBDC2CACAC2CCD43A3AAB16129E16129E16129E221FA36062BA777CC36C - 70BF2F2CA816129E16129E16129E16129E8E93C8CED6D6C7CBCBC1C3C3BEC0C0 - C0C2C2C5C9C9CDD4D4C9D2DB3C3BAC16129E16129E16129E16129E16129E1612 - 9E302DA916129E16129E16129E16129EA9B1DEDAE5F24848B416129E16129E16 - 129E16129E16129E16129E16129E16129E16129E16129E16129EACAFDBDDE4EE - E0E7F0B1B6DE16129E16129E16129E16129E7475C48283CA8182C93E3BAE1612 - 9E16129EE4E7E7E1E3E3E0E1E1DFDFDFDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2 - E2E2E2E2E2E4E5E5E7E8E8EAEDEDB9BBDE16129E16129E16129E4E4CB5F4F9F9 - F1F5F5EEF0F0ECEDEDEAECECEAEBEBEAEBEBE9EAEAE8E9E9E8E9E9EAEBEBECEE - EEF1F4F44E4CB516129E16129E16129EF4F9F9F1F5F5EFF1F1EDEFEFEDEFEFEE - F1F1F1F4F4F3F7F76A68C016129E16129E16129E16129EA0A0D5EFF2F2ECEEEE - ECEDEDEDEEEEEFF1F1F2F6F616129E16129E16129E4E4CB5F4F8F8F2F6F6F2F5 - F5E5E9F1403DAF16129E16129E16129EAEAFDBF1F4F4EFF1F1EDEEEEEBECECEB - EBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79D9D9D9C9C9C - 9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9999999999999C9D - 9DA5AAAAB2BBBBC3D3D31510A11510A11510A14345B2C3D5D5B3BEBEA7AEAEA0 - A6A6A2AAAEA8BFE7B5D0F5BBD5F3201DA61510A11510A11510A19CB2E7A8C2F3 - 98B1F08FA7EE8CA4ED8FA8EE98B1F0A3BDF2B0CBF57280D11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A15B5DB7BCC6CFBCC4C4B4 - B9B9AEB2B2AEB3B3ACB2BB2B28A61510A11510A11510A11510A196A2CF3838AD - 1510A11510A11510A11510A11510A11510A11510A11510A1A9BBD6CBE1E13737 - AC1510A11510A11510A11510A11510A11510A11510A11510A1535BC1A9C5F599 - B4F290AAF090ABF19BB6F3AECBF64145B71510A11510A11510A195ABE3A9C6F5 - 96B1F288A1EF7F97EE7C94ED7B94ED7B94ED7B94ED7B93ED7B94EE7B94ED7B94 - ED7C94ED7C94ED7C94ED7C94ED7D95ED8098EE88A1EF97B0F2ABC6F5A0B7E815 - 10A11510A11510A14145B7B1CDF6A3BCF39FB8F2A7C1F4B9D5F71510A11510A1 - 1510A14445B2D2E5E55C60BA1510A11510A11510A11510A11510A11510A11510 - A11510A11510A11510A1676BBCC6D2D2BDC5C5B5BABAB0B3B3B1B4B4B6BBBB6B - 6CB41510A11510A11510A11510A12C2AA9C4CDCDBBC0C0B4B7B7B2B4B4B4B7B7 - BCC1C1C4CCCCC1CCD44545B11510A11510A11510A11510A11510A11510A11510 - A11510A11510A1211EA58D93C9CFD7D7C8CDCDC2C5C5BEC0C0BCBDBDBEBFBFC1 - C3C3C8CCCCCED5D5CAD2DB6D6FC01510A11510A11510A11510A11510A11510A1 - 1510A11510A11510A11510A1AAB3DFDDE8F44847B61510A11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A1ACB0DCDCE3EEDEE5EFE2 - E9EF7172C31510A11510A11510A11510A11510A11510A11510A11510A11510A1 - E5E8E8E1E3E3E0E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E3E3E3E3E3 - E3E4E5E5E7E8E8EBEDEDC7C8E31510A11510A11510A11510A1E6EAF3F2F6F6F0 - F3F3EEF1F1EDF0F0EDF0F0EDEFEF9B9AD1EAECECEAEBEBEBECECEDEFEFF1F4F4 - 4D4AB71510A11510A11510A1F5F9F9F4F8F8F2F6F6F1F5F5F1F5F5F2F6F6BCBE - E23E3CB21510A11510A11510A11510A16967C1F1F4F4EEF0F0ECEDEDEBECECEC - EDEDEFF1F1F2F6F61510A11510A11510A14D4BB7F4F7F7F1F4F4F1F3F3F2F4F4 - CACCE7231FA61510A11510A1221FA7CACCE7F2F4F4EFF1F1EDEEEEECECECEBEC - ECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79E9E9E9E9E9E9D9D9D9D - 9D9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999999999D9E9EA5AAAA - B2BBBBC3D3D3130FA3130FA3130FA34244B3BECECEACB6B69EA4A4979A9A94A8 - DE9DB5F0ACC5F3BDD9F7646EC9130FA3130FA3130FA36A76CDADC8F49CB5F090 - A8EE8AA3ED8CA4ED91AAEE99B1F0A3BCF2ACC7F4A2BAEB535BC3130FA3130FA3 - 130FA3130FA3130FA3130FA34F50B69EA6CAC5CFCFBDC5C5B5BABAAFB2B2ACAF - AFADB1B1B3B9B99297BC130FA3130FA3130FA3130FA39EABD0BFCFD8585CB813 - 0FA3130FA3130FA3130FA3130FA32A29AAA1B0CBBDCECEB9CACAB0BFC8686EB8 - 1E1BA6130FA3130FA3130FA3130FA32929AE6F7DD2AAC6F69CB8F391AAF18BA4 - F08DA6F097B2F2A9C6F66976CE130FA3130FA3130FA3626DCAB2CFF79DB8F48D - A7F1839CEF7E97EE7C95EE7C95EE7C94EE7C95EE7C94EE7C95EE7C95EE7D95EE - 7D95EE7D95EE7D95EE8098EE849DEE8EA7F09DB8F3B2CEF7626DC9130FA3130F - A3130FA3606AC9ADC7F59FB9F39DB7F2A8C1F4B9D5F8130FA3130FA3130FA343 - 45B4D2E6E6D2E4E49FABD04243B2130FA3130FA3130FA3130FA3130FA3130FA3 - 4F51B69EA6CBC4CFCFBEC5C5B6BBBBB1B4B4AEB1B1B1B3B3B6BABABFC6C62A27 - A9130FA3130FA3130FA3130FA3C0C7C7B9BDBDB3B5B5B1B2B2B1B3B3B6B9B9BD - C2C2C4CBCBCCD5D58A8FC73837AF130FA3130FA3130FA3130FA3130FA31F1DA7 - 5D5FBBBBC3D6CED5D5C8CECEC3C6C6BFC1C1BCBDBDBCBDBDBDBDBDBFC0C0C4C6 - C6C9CDCDCED4D4D5DDDDAAAFD46163BF201DA8130FA3130FA3130FA3130FA313 - 0FA3130FA32D2BAEB5BEE4DBE6F34646B8130FA3130FA3130FA3130FA3130FA3 - 130FA3130FA3130FA3130FA3130FA3130FA3AAAEDBDBE0ECDCE1E6E0E4E4E4E8 - E8A5A7D52E2BAD130FA3130FA3130FA3130FA3130FA3201DA84846B5E4E7E7E3 - E5E5E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E3E5E5E5 - E8E9E9EAECECEFF2F22F2CAE130FA3130FA3130FA35A58BEE6EAF4F3F7F7F2F5 - F5F1F4F4C6C8E44A48B74A47B6ECEDEDEBECECEBECECEDEFEFF1F4F44C4AB913 - 0FA3130FA3130FA38484CE8484CE8484CE8384CE7676C92F2CAE130FA3130FA3 - 130FA3130FA3130FA34B49B8E3E7F0EFF1F1ECEEEEEBEBEBECECECEDEEEEEFF1 - F1F3F6F6130FA3130FA3130FA34C4AB9F3F6F6F0F2F2EFF1F1F0F1F1F2F4F4BC - BDE2130FA3130FA3130FA3211EA8E5E8F1F0F2F2EEEFEFEDEDEDECECECEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEEEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9E9E9E9E9E9E9D9D - 9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC3 - D3D3120EA5120EA5120EA54143B5BDCCCCA9B2B29CA0A091A0CC8EA7EE97B0F0 - A5BEF3B8D3F791A3DF120EA5120EA5120EA56B77CFB1CBF59EB8F292AAEF8BA3 - EE8AA2ED8DA4EE90A9EF97B0F09EB8F2A6C1F3ADC8F5B3CEF68DA1E28EA2E28E - A2E28DA0E2ADC3EBC6D0D0C1C9C9BBC2C2B5B9B9AFB2B2ABADADAAABABABAEAE - AFB3B3B5BCBCBBC3C3BEC8C8C0CBCBBFCBCBBDC9C9BCC8C8BBC8C8B2BFC9949E - C3949FC5949FC59CA7C4B6C4C4B1BDBDABB6B6A9B3B3AAB5B5ADB9B9B2C0C08A - 9FE28CA1E28CA1E395ABE7ADC9F6A5C1F59BB5F392ABF18AA3F0879FEF89A3F0 - 93ADF2A4BFF59AB1E8120EA5120EA5120EA51C1BAAB0CCF4A7C3F695B0F388A2 - F0829AF07E96EE7D96EF7C95EE7D95EF7D95EF7D95EE7D95EE7D96EE7D95EE7E - 96EE7F98EE829AEF89A2F095AFF2A7C3F5BCD9F91C1BAA120EA5120EA5120EA5 - 9CB2E9A6C1F59CB5F39CB5F2A6C0F4B9D5F7120EA5120EA5120EA54244B5D2E4 - E4C8D7D7C4D0D0C3CFCFBAC5CE9CA4C99DA5CB9DA6CC9DA6CCC9D5D5C6D0D0C1 - C9C9BBC2C2B5B9B9B2B4B4AEB0B0AEAFAFB1B3B3B4B7B7BBC0C0C2CACAC7D0D0 - C9D3D3C8D1D1C3CBCBBCC2C2B7BABAB2B4B4B0B1B1B0B1B1B3B5B5B8BBBBBCC1 - C1C2C8C8C8D0D0CCD5D5B8C0D3A2A8CEA3A9CFA3AACFAEB5D1D0D9D9CED5D5CB - D1D1C6CBCBC2C5C5BFC1C1BEBEBEBCBCBCBBBBBBBDBDBDBEBEBEC1C2C2C4C6C6 - C9CCCCCED3D3D4DBDBDBE4E4E3EEEEBCC5E24747B8120EA5120EA5120EA5888D - CFDEE8EDD8E1EED6E0F0DAE5F2E0ECF6E6F2F94747BA120EA5120EA54847BAE9 - F3F9E9F2F8E4EDF5DFE7F1DDE3EDDBDFE6DADCDDDBDDDDDDDFDFDFE2E2E3E6E6 - E6EAEAC0C3DFB3B6DBB4B7DCB4B7DCC1C3DFE7EBEBE6E9E9E3E5E5E2E3E3E1E2 - E2E0E1E1E1E1E1E1E1E1E1E1E1E3E3E3E4E4E4E4E4E4E5E5E5E6E6E6E7E8E8EA - EBEBEDF0F0ABACDB120EA5120EA5120EA5120EA51F1DAA4A49BA4A49BA2D2BAF - 120EA5120EA54A47B8EDEFEFECEDEDECEDEDEDEFEFF0F3F34B49BA120EA5120E - A5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA512 - 0EA57575C9F2F5F5F0F2F2EEEFEFECEDEDEBEBEBEBEBEBEDEDEDEFF0F0F2F4F4 - 120EA5120EA5120EA52E2BAFF2F5F5F0F1F1EEF0F0EEF0F0F0F1F1F2F5F59FA0 - D9120EA5120EA5120EA53C3AB4E4E6EFF0F1F1EDEEEEEDEDEDECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D9D9D - 9D9D9D9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC2D2D2100D - A8100DA8100DA84043B7BDCCCCA9B2B29AAAD18FA8EE8FA7EE97AFF0A5BEF2B6 - D1F69CB0E5100DA8100DA8100DA83E43BDB2CCF5A1B9F293ABEF8BA3ED89A1ED - 8BA3EE8DA4EF90A8EF95ADF09AB3F19FB9F2A4BDF3A7C1F4A8C2F4A8C2F4A7C1 - F3A4BDF3B1BED3B8BCBCB4B7B7AFB1B1ADAEAEAAABABAAAAAAAAACACACAFAFAF - B3B3B2B7B7B3BABAB3BABAB3BABAB0B7B7AFB6B6AFB7B7AFB8B8B1BABAB1BBBB - AFB9B9ACB5B5A6AFAFA2A9A99FA5A59CA2A29DA4A49FA7A7A3ABABA1BDF4A4BF - F5A4BFF5A1BCF49CB6F496B0F390A9F28AA3F1859EF0839DF0869FF08FA9F29E - B9F4B1CEF73235B7100DA8100DA8100DA86B79D1B3D0F8A1BCF591ABF287A1F1 - 829BF08098EF7E96EF7D96EF7E96EF7E96EF7E96EF7E96EF7E96EF8098EF849C - F088A0F091ABF1A0BBF4B3D0F86B79D1100DA8100DA8100DA82728B2B4D0F7A1 - BAF399B1F29AB3F2A7C0F4BAD5F8100DA8100DA8100DA84144B8CDDCDCC1CCCC - BCC5C5BAC1C1BBC2C2BEC6C6C1C9C9C1C9C9C1C9C9BEC5C5BBC1C1B8BDBDB4B8 - B8B2B4B4AFB0B0AEAEAEAFAFAFB0B2B2B5B7B7BABEBEBFC5C5C3CBCBC5CDCDC4 - CCCCC1C7C7BBC0C0B6B9B9B3B4B4B0B1B1B1B1B1B2B2B2B4B5B5B8BABABBBFBF - BFC4C4C3C8C8C6CDCDC9D0D0C9D1D1CAD1D1C9CFCFC8CDCDC5CACAC3C6C6C0C2 - C2BFC1C1BCBDBDBCBCBCBBBBBBBCBCBCBEBEBEBEBFBFBFC0C0C2C3C3C5C6C6C7 - CACACDD2D2D5DCDCDEE7E7CAD4E7100DA8100DA8100DA87A7FCCE2EBEBDBE1E1 - D6DADAD4D9DBD8DEE6DEE7EFE6F1F74647BC100DA8100DA84647BCE9F3F8E4EC - F3DFE6EBDDE1E4DBDEDEDADCDCD9DADAD9DADADADCDCDDDEDEDFE1E1E2E4E4E3 - E6E6E4E7E7E5E8E8E6E9E9E6E9E9E5E7E7E4E6E6E2E3E3E2E3E3E2E2E2E1E1E1 - E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E8E8E9EAEAECEE - EEEFF2F29D9ED8100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA810 - 0DA84847BBEEF0F0ECEEEEECEDEDEDEFEFEFF2F24947BC100DA8100DA8100DA8 - 100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA85857C0C8CAE7F1F4 - F4EFF1F1EEEFEFECEDEDEBEBEBEAEBEBECECECEDEEEEEFF0F0F1F4F4100DA810 - 0DA8100DA8100DA8F1F3F3EFF0F0EDEEEEEEEFEFEFF0F0F1F2F2F3F5F55857C0 - 100DA8100DA8100DA84947BBF0F1F1EEEFEFEDEDEDECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEEEEEEEFEFEFEEEEEEEFEFEFEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D - 9D9D9C9C9C9B9B9B9B9B9B9A9A9A9D9E9EA5AAAAB2BBBBC3D3D30F0CAA0F0CAA - 0F0CAA3F42B8BCCBCBA8B8CE99B2F191A9EF92A9EF9AB3F1A8C2F4BBD6F78495 - DD0F0CAA0F0CAA0F0CAA6A77D2B2CCF69FB9F293ACF08CA5EE8AA1EE89A1EE8A - A2EE8CA4EF8EA6EF91A8EF94ACF096AFF198B2F19AB3F19AB3F199B1F196AFF1 - 97ADE9B1B3B3AFB0B0ADAEAEABABABAAAAAAAAAAAAAAABABABACACACAEAEACAE - AEACAFAFABAEAEA9ADADA7ABABA6A9A9A4A8A8A5A9A9A4A9A9A4A9A9A2A7A7A0 - A4A49CA0A0989B9B959898949696949696959999959FB193ADF294AEF294AEF2 - 92ABF28FA9F18CA5F188A1F0859EF0839BEF829AEF859DF08CA5F197B2F3A9C4 - F67B8CDB0F0CAA0F0CAA0F0CAA1A19AF9EB6EBAECAF79EB9F591AAF388A1F184 - 9CF18099F07F98F07E97EF7E97EF7F97EF8098EF8199EF839CF089A2F191ABF2 - 9EB8F4AFCAF7AAC3F01A19AF0F0CAA0F0CAA0F0CAA7D8DDBACC7F69BB3F394AD - F299B1F2A7C0F4BAD5F80F0CAA0F0CAA0F0CAA4043BBCAD7D7BEC6C6B6BCBCB3 - B7B7B2B5B5B5BABAB8BCBCB8BCBCB8BCBCB7BABAB5B8B8B3B5B5B2B3B3B1B2B2 - B0B0B0AEAFAFB0B0B0B1B2B2B4B6B6BABDBDBFC4C4C4CACAC5CCCCC5CCCCC2C8 - C8BCC0C0B7BABAB3B5B5B1B1B1B0B0B0B1B2B2B3B4B4B5B6B6B7B8B8B9BBBBBC - BFBFBEC1C1C0C4C4C1C5C5C2C5C5C1C4C4C1C4C4BFC2C2BEC0C0BEBEBEBCBDBD - BCBCBCBCBCBCBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C5C7C7CACC - CCD1D6D6DAE2E2A1A7D90F0CAA0F0CAA0F0CAAD9E3ECDEE6E6D7DCDCD2D5D5D2 - D5D5D6D9D9DDE3E3E5EDED4646BC0F0CAA0F0CAA4646BCE7EEEEE1E6E6DCDFDF - DADCDCD9DADAD9D9D9D8D8D8D8D9D9D9DADADBDCDCDDDEDEDFE0E0E0E1E1E0E2 - E2E1E3E3E2E4E4E2E4E4E3E4E4E2E3E3E1E1E1E2E2E2E1E1E1E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7EAEAEAEBECECEDEFEF - F0F2F2C7C9E76564C60F0CAA0F0CAA0F0CAA0F0CAA0F0CAA1D1BAF4846BC9B9B - D7EDEFEFECEDEDECECECECEDEDEFF0F06463C54847BC4947BD4947BD4948BD49 - 47BD4947BD4947BD4947BD6665C79E9FDAD6D9ECF2F5F5F1F3F3EFF1F1EEEFEF - EDEDEDECECECEBECECEBEBEBECECECECEDEDEEEFEFF0F2F24846BC4846BC4846 - BC4846BCF0F2F2EFF0F0EEEEEEEDEEEEEEEEEEEFF0F0F1F2F2E4E5EF5755C148 - 47BC4847BC4846BC9B9BD7EFF0F0EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9D9D - 9D9C9C9C9B9B9B9A9A9A9D9F9FA5AAAAB2BBBBC3D3D30D0AAC0D0AAC0D0AAC3D - 40BABED3DEACC5F59EB7F298B1F19AB2F1A4BCF3B1CCF6C3DEF9555ECA0D0AAC - 0D0AAC0D0AAC7381D7AFC9F69EB8F393ABF18DA4EF8AA2EF8AA2EF8AA2EF8AA2 - EF8BA2EF8BA4EF8CA5F08EA6F08FA7F090A7F090A7F08EA7F08DA6F08CA4F0A1 - AAC8AEAEAEADAEAEACACACABABABABABABAAABABAAAAAAAAAAAAA8A9A9A8A9A9 - A6A7A7A5A6A6A3A4A4A1A2A29FA0A09D9F9F9C9E9E9C9E9E9A9C9C989A9A9697 - 979393939192929090908F90908F91918D95A989A2F189A2F189A2F189A1F188 - A0F1859FF1849CF0839BF0829AF0829AF0839CF088A2F192ACF3A0BBF5B2CFF8 - 3B40C00D0AAC0D0AAC0D0AAC3033BBB3CEF5ADC9F79FBAF593AEF38CA6F287A1 - F1859EF1839CF1839CF1849CF1869EF188A1F18DA6F294AFF39FBAF5AEC9F7B3 - CEF53033BB0D0AAC0D0AAC0D0AAC3033BBB5D0F8A3BCF495ADF291A8F198B0F2 - A6C0F5BBD6F80D0AAC0D0AAC0D0AAC3E41BECAD6D6BDC4C4B4B8B8AFB1B1AFB0 - B0B0B2B2B2B3B3B2B4B4B3B4B4B2B3B3B1B2B2B2B2B2B1B1B1B0B1B1B0B0B0B0 - B0B0B0B0B0B2B2B2B6B8B8BCBFBFC1C6C6C7CFCF9BA1C9A6ACCBC5CDCDBFC4C4 - BABDBDB5B6B6B2B3B3B2B2B2B2B2B2B3B3B3B3B4B4B5B5B5B7B7B7B8B8B8B9BB - BBBABBBBBABBBBBCBDBDBCBDBDBCBDBDBCBDBDBBBCBCBCBCBCBCBCBCBDBDBDBD - BDBDBEBEBEBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C4C5C5C8CACACFD3D3 - D7DEDE777ACB0D0AAC0D0AAC0D0AACE5EFEFDDE4E4D6DADAD1D4D4D2D4D4D6D9 - D9DDE2E2E6EEEE4444BE0D0AAC0D0AAC4444BEE4EAEADEE2E2D9DBDBD7D8D8D7 - D8D8D8D8D8D7D8D8D8D8D8D9DADADBDBDBDCDCDCDDDEDEDEDEDEDFE0E0DFE0E0 - E0E0E0E1E1E1E1E2E2E1E1E1E1E1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E4E4E5E5 - E5E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAECEDEDEDEFEFF0 - F1F1F1F3F3F2F5F5C8C9E7BABBE3BABBE3D5D8ECF1F4F4F0F2F2EFF0F0EDEEEE - ECEDEDECECECECEDEDEDEEEEEFF0F0F0F2F2F1F3F3F2F5F5F3F5F5F3F5F5F3F5 - F5F2F5F5F2F5F5F2F4F4F1F3F3F0F2F2EFF1F1EEEFEFEEEFEFEDEEEEEDEDEDEC - ECECECECECECECECECECECEDEDEDEEEEEEEFF0F0F0F2F2F1F2F2F1F2F2F0F2F2 - EFF0F0EEEEEEEDEDEDEDEDEDEEEEEEEFEFEFF0F1F1F1F2F2F1F3F3F2F3F3F1F3 - F3F1F2F2EFF0F0EEEFEFEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7A2A2A2A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9E9E9E9D9D9D - 9B9B9B9A9A9A9D9F9FA6ABABB2BBBBC3D3D30C09AE0C09AE0C09AE3D40BDC3DF - F9B3CDF6A8C1F4A3BCF3A6BFF4B0CAF6BED9F8A8BEED0C09AE0C09AE0C09AE0C - 09AE9CB1EAABC4F59CB4F292AAF08CA4EF8BA3EF8BA3EF8BA2EF8BA3F08BA3F0 - 8BA2F08AA2EF8AA2F08BA3F08BA3F08BA2F08BA2F089A1F089A1F08DA2E7ADAD - ADADADADADADADADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A3 - A3A3A1A1A19F9F9F9C9C9C9A9A9A999999989898969696959595939393919191 - 9090908F8F8F8E8E8E8D8D8D8992B1859DF0859DF0859DF0849DF0839CF0839B - F0839BF0839BF0829BF0829BF0839BF0869EF18DA5F299B3F4A8C3F798AFEB18 - 17B30C09AE0C09AE0C09AE2E32BCB3CFF5B0CDF8A5C0F69BB5F594AEF490AAF3 - 8EA7F28DA7F28EA8F290A9F395AFF39CB6F5A5C0F6B1CDF8B4CFF52F33BC0C09 - AE0C09AE0C09AE1817B39AB0EBAAC4F69BB4F491A8F28FA6F298AFF3A7C0F5BC - D6F80C09AE0C09AE0C09AE3D41C1CAD6D6BDC4C4B5B8B8AFB0B0ADADADAEAFAF - AFB0B0B0B1B1B1B2B2B1B1B1B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3B3B3B3B3B3 - B3B5B5B5B9BABABFC2C2C6CCCC3C3CB80C09AE0C09AE5F62BFC4CACABDC1C1B8 - BABAB4B5B5B3B3B3B3B3B3B4B4B4B4B4B4B5B5B5B5B5B5B6B6B6B7B7B7B7B8B8 - B8B9B9B8B9B9BABBBBBABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBF - BFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C9CACACFD2D2D6DCDC90 - 95D30C09AE0C09AE0C09AED8E2ECDFE7E7D9DEDED5D8D8D5D8D8D9DDDDE0E6E6 - E8F0F00C09AE0C09AE0C09AE4443BFE3E8E8DDE0E0D9DADAD7D7D7D7D7D7D8D8 - D8D8D8D8D9D9D9DADADADBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDEDEDEDFDFDFE0 - E0E0E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9EAEAEAEBECECECEDEDEDEEEEEEEF - EFEFF1F1F0F1F1F0F2F2F0F2F2F0F1F1F0F1F1EFF0F0EEEFEFEDEDEDECECECEC - ECECECECECEDEDEDEEEEEEEEF0F0EFF0F0EFF1F1F0F1F1F0F1F1F0F1F1EFF1F1 - EFF1F1EFF0F0EFF0F0EFF0F0EEEFEFEDEEEEEDEDEDECEDEDECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEFEFEFEFF0F0EFF0F0F0F1F1EFF0F0EFEFEFEE - EEEEEEEEEEEDEDEDEDEDEDEEEEEEEEEFEFEFF0F0EFF0F0F0F1F1F1F1F1EFF0F0 - EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3 - F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A3A3 - A3A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C9A - 9A9A9D9F9FA6ABABB2BCBCC3D3D30A08B10A08B10A08B13B40C3CDE9FBBFD9F9 - B6D0F7B3CCF6B6D1F7C0DBF8A7BDED1616B60A08B10A08B10A08B13A3FC3B6D0 - F7A6BFF498B1F291A9F18DA5F08CA3F08CA3F08CA4F08CA3F08BA3F08BA3F08B - A3F08BA3F08BA2F08BA2F08AA2F08AA2F08AA2F08AA2F08AA1F0A0A9C6AEAEAE - AEAEAEAEAEAEADADADACACACABABABAAAAAAAAAAAAA8A8A8A6A6A6A4A4A4A2A2 - A2A0A0A09E9E9E9B9B9B99999998989897979795959594949493939391919190 - 90908F8F8F8E8E8E8995BF859DF1859DF1849DF1849CF1849CF1849CF1849CF1 - 839CF1839BF1839BF1839BF1859DF189A2F291AAF39DB8F5ACC8F77A8BDE0A08 - B10A08B10A08B10A08B11616B695AAE8B8D4F9AECAF8A6C2F7A1BCF69EB9F59C - B7F59EB9F5A1BCF6A6C2F6AFCAF8B7D4F994AAE82224BA0A08B10A08B10A08B1 - 0A08B17B8CDEAEC9F7A0B8F494ACF28DA4F18EA5F197AFF3A8C1F5BCD7F90A08 - B10A08B10A08B13A40C4C9D7DBBFC5C5B5B8B8B1B1B1AFAFAFB0B0B0B1B1B1B2 - B2B2B2B2B2B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B7B8B8 - BABDBDC1C5C5A5ABCB0A08B10A08B10A08B10A08B1C7CECEBFC3C3B9BBBBB6B6 - B6B4B4B4B5B5B5B4B4B4B5B5B5B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B9B9B9BA - BABABABABABBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1 - C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C6C6C6C9CACACED0D0D6DBDBB7BDDD0A08 - B10A08B10A08B1868BD5E4ECECDFE5E5DCE1E1DCE1E1E0E5E5E6EDED969BDA0A - 08B10A08B10A08B16C6DCCE2E7E7DCDFDFD9DADAD8D8D8D8D8D8D9D9D9D9D9D9 - DADADADADADADBDBDBDDDDDDDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E1E1E1E2E2 - E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E7 - E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBECECECECECECEDEDEDEDEDEDEEEE - EEEFEFEEEFEFEEEFEFEEEFEFEDEEEEEDEDEDECEDEDECECECECECECEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEE - EEEEEDEEEEEDEDEDEDEDEDECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEEEEEEEEEEEDEEEEEDED - EDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFF0F0EFF0F0EFF0F0EFEFEFEFEFEFEF - EFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A5A5A5A4A4A4 - A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09E9E9E9D9D9D9C9C9C9B9B9B9D9F - 9FA5AAAAB2BBBBC2D1D10907B30907B30907B33A40C5CEE9FBCBE5FBC4DFF9C2 - DDF9AEC6F16A78D71415B80907B30907B30907B30907B39CB1ECAEC7F6A0B8F4 - 96AEF290A7F08DA5F18DA5F18DA4F18DA4F18CA4F18CA4F18CA4F18CA4F18CA3 - F18BA3F18BA3F18BA3F18BA3F18BA2F18BA2F18AA2F18FA3E8AEAEAEAEAEAEAE - AEAEAEAEAEAEAEAEADADADACACACABABABA9A9A9A8A8A8A6A6A6A4A4A4A2A2A2 - 9F9F9F9D9D9D9B9B9B9999999898989696969595959393939292929191919090 - 908F8F8F8997C5859DF1859DF1859DF1859DF1859DF2859DF2859DF2849CF184 - 9DF2849CF2849CF2859DF2879FF28BA5F394AEF4A0BAF6AFCAF87A8BDF0907B3 - 0907B30907B30907B30907B3383FC593A9E9BAD7FAB5D1F9B1CEF8B0CDF8B1CD - F8B5D1F9B9D6F993A8E8505BCE0907B30907B30907B30907B30907B37B8CDFB1 - CCF8A3BCF596AFF48FA6F28AA2F28FA6F299B1F4AAC4F6BED9F90907B30907B3 - 0907B33A3FC5C6D6E4BFC6C6B7BABAB3B3B3B0B0B0B2B2B2B3B3B3B4B4B4B4B4 - B4B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B8B9B9BCBEBEC2 - C7C7B2B8CD0907B30907B30907B31514B5C8CFCFC0C4C4BABCBCB7B7B7B5B5B5 - B6B6B6B6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B8B8B8B9B9B9BABABABABABABBBB - BBBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C2C2C2C3 - C3C3C4C4C4C4C4C4C5C5C5C7C7C7C9CACACED0D0D4D8D8DCE3E32424BA0907B3 - 0907B31616B7BFC6E6E5EDEDE3EAEAE4EAEAE7EEEEBFC6E71616B70907B30907 - B30907B3BCC2E2E1E5E5DCDEDED9DADAD7D8D8D9D9D9DADADADADADADBDBDBDC - DCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E2E2E2 - E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEBECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDECEDEDECECECECECECECECECECECECECECEC - ECEDEDECEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEEEEEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFF0F0EFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A5A5A5A4A4A4A3 - A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9E9E9E9C9C9C9B9B9B9E9F9FA4A9A9 - B0B8B8BFCECE0706B50706B50706B51313B9393EC7393EC7393EC72022BE0706 - B50706B50706B50706B50706B50706B57B8BE0B3CDF7A6BEF59AB3F393ACF28F - A7F18EA5F18EA5F18EA5F18DA5F18DA5F18DA5F18DA4F18CA4F18CA4F18CA4F1 - 8CA4F18CA3F18CA4F18BA3F18BA3F18BA3F18BA3F2A1AAC8AEAEAEAFAFAFAFAF - AFAEAEAEAEAEAEADADADACACACABABABA9A9A9A7A7A7A6A6A6A3A3A3A0A0A09E - 9E9E9C9C9C9A9A9A999999979797969696949494939393929292919191909090 - 899AD9869EF2869EF2869EF2869EF2869EF2869EF2859EF2859EF2859DF2859D - F2859DF2849DF2859FF288A0F38DA6F396AFF5A2BCF6AFCBF88497E41314B907 - 06B50706B50706B50706B50706B51313B9434BCB6573D86573D86573D8434BCB - 1F21BE0706B50706B50706B50706B50706B51314B98597E4B1CCF8A3BEF698B1 - F591A8F28CA3F28BA2F191A8F29CB4F4AEC7F7C2DDFA0706B50706B50706B539 - 3FC7C0D6EFC1C7C7B8BBBBB4B4B4B1B1B1B3B3B3B4B4B4B5B5B5B6B6B6B5B5B5 - B6B6B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9B9BCBEBEC1C5C5C8CD - CD6A6EC50706B51413B78386C8C6CCCCC0C3C3BBBDBDB8B9B9B6B6B6B6B6B6B7 - B7B7B7B7B7B7B7B7B8B8B8B8B8B8B9B9B9BABABABABABABABABABBBBBBBDBDBD - BDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C3C3C3C4C4C4C4C4C4C5C5 - C5C5C5C5C6C6C6C7C7C7C9CACACDCECED2D5D5D9DEDE9CA2D90706B50706B507 - 06B50706B55C5FCCA3A8DFA3A8E05C5FCC0706B50706B50706B50706B54E4FC8 - E3E8E8DFE1E1DBDDDDD9D9D9D9D9D9DADADADBDBDBDBDBDBDBDBDBDDDDDDDEDE - DEDFDFDFDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E5E5E5E7E7E7E7E7E7E6E6E6E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEA - EAEAEAEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A6A6A6A5A5A5A4A4A4A3A3 - A3A3A3A3A2A2A2A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9FA0A0A4A7A7ADB4B4BA - C7C70605B80605B80605B80605B80605B80605B80605B80605B80605B80605B8 - 0605B80605B81F21C091A5E9B4CEF8A8C1F69DB6F496AFF392A9F290A7F28FA6 - F28EA6F28EA6F28EA6F28EA5F28EA5F28DA5F28DA5F28DA5F28DA5F28DA4F28C - A4F28CA4F28CA4F28CA4F28CA4F28CA4F290A5EAB0B0B0AFAFAFB0B0B0AFAFAF - AFAFAFAEAEAEADADADABABABABABABA8A8A8A6A6A6A4A4A4A2A2A29F9F9F9D9D - 9D9B9B9B9A9A9A989898979797969696949494939393929292919191899CD987 - 9FF2879FF2869EF2869EF2879FF3869EF2869EF3859EF2869EF3869EF3859EF3 - 859DF3859DF3879FF38AA2F48EA8F496B0F5A1BBF7ACC7F8A3BBF2414ACC0605 - B80605B80605B80605B80605B80605B80605B80605B80605B80605B80605B806 - 05B80605B80605B80605B8363CC8A3BBF1AEC9F8A3BCF698B1F492AAF38DA4F3 - 8AA2F28CA2F294AAF39FB7F5B1CAF8C5DFFB0605B80605B80605B8383EC9BBD3 - F9B3C3E1AAB6D7A4AFD3A2ACD2ABB0C3ACB1C4ADB2C4B1B4BDB7B7B7B7B7B7B7 - B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B9BABABCBDBDBFC1C1C4C8C8C8CDCD - CAD0D0CAD0D0C7CCCCC3C6C6BEC0C0BABBBBB8B8B8B7B7B7B8B8B8B8B8B8B8B8 - B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBCBCBCBDBDBDBDBDBDBFBFBFBF - BFBFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9CCCDCDD0D2D2D5D9D9DDE3E3595CCB0605B80605B80605 - B80605B80605B80605B80605B80605B80605B80605B83131C2D8DDE8E1E4E4DE - E0E0DBDCDCD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A4A4A4 - A3A3A3A2A2A2A1A1A19F9F9F9E9E9E9D9D9D9E9F9FA3A5A5AAAFAFB4BEBE0403 - BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA353BCA7B - 8BE2BBD5F9B2CBF7A7C1F69FB7F498B1F394ABF391A8F28FA7F28FA7F28FA7F2 - 8FA6F28FA6F28FA6F28FA6F38EA6F28EA6F28EA6F38DA5F28DA5F28DA5F28DA5 - F28DA4F28DA4F28DA5F38DA4F38DA4F3A2ABC9B0B0B0B0B0B0B0B0B0AFAFAFAF - AFAFAEAEAEADADADABABABAAAAAAA8A8A8A6A6A6A3A3A3A0A0A09E9E9E9C9C9C - 9B9B9B9A9A9A98989897979796969694949494949491949E889FED88A0F388A0 - F388A0F3879FF2879FF3879FF3879FF3879FF3869FF3869FF3869EF3869EF386 - 9EF3859EF387A0F38AA2F48EA7F495AEF59EB8F6A7C3F8B2CDF98EA3EA4049CE - 0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403 - BA4049CE8EA4EAB3CEF9A9C3F8A0B9F697B0F591A8F48DA4F48BA2F38BA1F28E - A5F395ACF4A2BAF5B2CCF8C6E0FB0403BA0403BA0403BA363CCAB8D1F8A8BFF6 - 9BB1F494A9F392A6F293A7F293A7F294A8F295A8F296A9F296A9F197AAF19DAD - E6A0AEE3A1AEE3A1AFE3AAB3D4ABB4D5ADB7D7B8BDC8C0C2C2C2C5C5C3C6C6C3 - C7C7C1C4C4BEC1C1BCBDBDBABABAB8B9B9B9B9B9B8B8B8B9B9B9B9B9B9B9B9B9 - BABABABABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0 - C0C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C8C8C8C8C8C8C9 - C9C9CACACACCCCCCCFD0D0D3D6D6D9DDDDDEE4E48F93D81212BD0403BA0403BA - 0403BA0403BA0403BA0403BA0403BA696BD1D7DCE7E2E5E5DEE0E0DCDEDEDBDB - DBDADBDBDBDBDBDCDCDCDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E1 - E1E1E1E1E1E2E2E2E3E3E3E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E8E8E8 - E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A9A9A9A7A7A7A6A6A6A6A6A6A5A5A5A4A4A4A3A3A3A2 - A2A2A1A1A1A0A0A09F9F9F9D9D9D9E9F9FA0A2A2A5A9A9ACB3B38890BE8E97C5 - 919ED193A7EA94A7EA93A6EA92A5EA91A5EA9CB1EEBDD7F9B8D2F9B3CCF8ACC5 - F7A4BDF69EB6F598B0F495ACF491A9F390A8F390A8F390A7F390A7F390A7F38F - A7F38FA7F390A7F38FA6F38FA7F38FA7F38EA6F38EA6F38EA6F38EA5F38EA6F3 - 8EA5F38DA5F38DA5F38DA5F392A6EBB0B0B0B0B0B0B0B0B0B0B0B0AFAFAFAFAF - AFAEAEAEACACACABABABA9A9A9A6A6A6A4A4A4A2A2A29F9F9F9D9D9D9C9C9C9A - 9A9A999999989898949AAE8F9CCA8B9FE189A1F489A1F488A0F388A1F488A0F3 - 88A0F4879FF388A0F488A0F487A0F4879FF4879FF4879FF4879FF4869FF4869E - F4869EF487A0F48AA2F48DA6F593ACF599B3F6A1BBF7A9C4F8B1CDF9ADC7F677 - 88E35663D8333ACC333ACC343ACC343ACC333ACC5663D87789E3ADC7F6B2CDF9 - ABC6F8A4BDF79CB4F695ADF591A8F48CA4F48AA1F38AA1F38BA2F38EA6F497AE - F5A4BBF6191BC40302BC0302BC0302BC0302BC3439CCB3CCF8A5BCF59BB0F495 - A9F393A7F394A7F294A8F295A9F295A9F296AAF297AAF297AAF298ABF299ABF2 - 9AACF29BADF29BADF29DAEF19EB0F1A8B5E4BCBDBDBDBFBFBEC0C0BEC0C0BDBE - BEBBBCBCBBBBBBBABABAB8B8B8B9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBB - BBBBBCBCBCBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2 - C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C7C7C7C9C9C9C9C9C9CACACACBCB - CBCDCDCDCECFCFD1D2D2D5D7D7D9DCDCDEE2E2D3D9E49094DA676AD23C3DC93D - 3EC95A5CD08386D8C9CEE5E3E8E8E1E4E4DEE0E0DDDEDEDBDCDCDBDBDBDADADA - DCDCDCDDDDDDDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3 - E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9 - E9E9E9E9E9EBEBEBECECECECECECECECECECECECEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7AAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2 - A2A1A1A19F9F9F9E9E9E9E9F9F9FA0A0A0A3A3A5A9A9AAB0B0ADB6B6B0BABAB2 - C4DAB5CDF8B3CDF8B3CDF8B2CBF8B0C9F7ADC6F7AAC2F6A4BDF6A0B8F59CB4F5 - 98B0F595ADF493AAF492A9F491A9F491A9F491A9F491A8F490A8F391A8F490A7 - F390A8F490A8F490A7F490A7F48FA7F48FA7F48FA7F48FA7F48FA6F48EA6F48E - A6F48EA6F48EA6F48EA5F4A3ACC9B0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAE - ACACACABABABA9A9A9A7A7A7A5A5A5A3A3A3A0A0A09B9EA8979EB8939FC78EA0 - DD8AA2F48AA2F48AA2F48AA2F48AA2F489A2F489A1F489A1F489A1F489A1F489 - A1F488A0F488A0F488A0F488A0F488A0F487A0F487A0F4879FF4879FF4879FF4 - 869FF487A1F489A1F48CA4F590A8F594AEF69AB4F7A0BAF7A5C0F8AAC5F9AEC9 - F9B1CCF9B2CEF9B3CFFAB3CFF9B1CDF9AFCAF9ACC7F9A8C1F8A1BBF79CB5F797 - B0F691AAF58FA6F58CA3F48AA1F48AA1F48BA1F48CA3F48FA6F598AEF5A2B9F6 - 8496E90101BE0101BE0101BE0101BE3036CDAFC6F7A3B9F699AFF494A8F393A7 - F394A8F294A8F295A9F396AAF397AAF398ABF398ABF399ACF39BADF29AADF29C - AEF29DAEF29DAFF29EB0F2A0B1F2B4B8C9BABBBBBABBBBBBBCBCBABBBBBABABA - B9BABAB9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBBBBBBBCBCBCBCBCBCBDBD - BDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C4C4C4C4 - C4C4C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACCCCCCCBCBCBCDCDCD - CFCFCFCFD0D0D3D4D4D6D8D8D8DBDBDCE0E0DFE3E3E1E5E5E2E7E7E3E8E8E3E7 - E7E2E6E6E0E4E4DFE2E2DDDFDFDCDDDDDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDD - DDDDDEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5 - E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEAEA - EAEBEBEBEBEBEBECECECECECECECECECEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2 - A1A1A19F9F9F9E9E9E9E9F9F9E9F9F9FA1A1A1A5A5A2A7A7A3A8A8A3AAAAA6BB - E8A6BEF6A5BDF6A4BCF6A3BBF6A0B9F69EB6F59BB4F599B1F596AFF495ACF494 - ABF493AAF492AAF492AAF492AAF492A9F492A9F491A9F491A9F491A9F491A8F4 - 91A8F491A8F490A8F490A8F490A8F490A7F48FA7F48FA7F48FA7F48FA7F48FA6 - F48FA6F48EA6F493A7ECB0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAEADADADAC - ACACA2A8BC9DA6C499A5CD92A4E08DA4EF8CA4F58BA3F48BA3F48BA3F48BA3F4 - 8BA3F58BA3F58BA3F58AA2F58AA2F58AA2F58AA2F58AA2F589A2F589A1F589A1 - F589A1F589A1F589A1F588A1F588A0F588A0F588A0F588A0F587A0F5879FF587 - 9FF588A0F588A1F58AA3F58CA5F68FA8F693ACF697B0F79AB4F79DB7F89FB9F7 - A1BBF8A2BCF8A2BCF8A0BAF89FB9F89BB5F798B2F796AEF691AAF68FA7F58CA5 - F48CA3F48BA2F48BA1F48BA1F48BA2F48DA3F490A7F495ACF59DB5F6A8C0F764 - 72E05D69DD5E6ADD5C69DC6F7EE3A7BEF69FB5F699AEF496AAF394A8F395A9F3 - 95A9F397ABF397ABF398ABF398ABF399ACF39BADF39BAEF39CAEF39DAFF39DAF - F39EB0F39FB0F3A0B1F3A5B3E8BABABABABABABABABABABABAB9B9B9B9B9B9BA - BABABABABABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBE - BFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C6C6C6C7C7 - C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACACACACCCCCCCCCCCCCDCDCDCECECECF - CFCFD1D1D1D3D4D4D6D7D7D8DADAD9DCDCDBDEDEDDE0E0DEE1E1DEE0E0DEE0E0 - DCDEDEDCDDDDDBDCDCDADBDBDBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDF - DFE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7 - E7E7E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBECECEC - ECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7ADAD - ADABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0 - A0A09E9E9E9E9E9E9C9D9D9C9D9D9C9D9D9B9D9D9A9C9C9A9C9C999EA69CB2EF - 9CB3F59AB3F599B2F598B1F597AFF496AEF595ACF495ACF594ABF594ABF593AB - F593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9F592A9F591A9F591 - A9F591A9F591A8F591A8F590A8F590A8F590A8F590A8F590A7F58FA7F58FA7F5 - 8FA7F58FA7F5A0ABD2A3ACCA9FABD29FABD296A8E396A7E38EA5F58DA5F58DA5 - F58DA5F58DA5F58CA4F58CA4F58CA4F58CA4F58CA4F58CA4F58BA3F58CA4F58C - A4F58BA3F58BA3F58BA3F58BA3F58AA3F58AA2F58AA2F58AA2F58AA2F58AA2F5 - 89A1F589A1F589A1F589A1F589A1F588A1F588A1F588A0F588A0F588A0F587A0 - F587A0F588A0F588A1F58AA2F58CA4F68CA6F68EA7F690A9F692ABF693ACF694 - ADF694ADF693ABF692ABF690A9F68FA7F68DA6F68CA4F58BA2F58CA3F58AA2F5 - 8BA2F58CA2F58BA2F58CA3F58CA3F58FA6F594AAF599B1F59FB7F6A7BFF7ACC4 - F8AEC5F8ACC3F8A7BEF7A1B6F69BB1F598ACF595AAF494A9F496AAF496AAF497 - ABF399ACF499ACF399ACF39BADF49BAEF49CAEF49DAFF49EB0F39EB0F39FB1F3 - A0B1F3A0B2F3A2B3F3B0B6CFB9B9B9BABABABABABABABABABABABABABABABABA - BABBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C5C5C5C7C7C7C7C7C7C8C8C8 - C9C9C9CACACACBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECFCFCFCFCFCFD1D2 - D2D2D2D2D3D4D4D5D6D6D6D7D7D8D9D9D9DADAD9DADAD9DBDBDADBDBD9DADAD9 - DADADBDBDBDADBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1 - E1E1E1E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7E7E7E7E7E7E7 - E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2 - F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7AEAEAEACACAC - ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A1A1A19F9F - 9F9E9E9E9C9C9C9B9B9B999999989898969696969797949595959EB897AEF597 - AEF596AEF595ADF595ADF595ACF595ACF595ACF594ACF594ACF594ABF594ABF5 - 94ABF593ABF593ABF593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9 - F592A9F591A9F591A9F591A9F591A8F590A8F590A8F590A8F590A8F590A7F590 - A7F58FA7F58FA7F58FA7F58FA7F58FA7F68EA6F58EA6F58EA6F58EA6F68EA6F6 - 8EA6F68DA5F58DA5F58DA5F58DA5F58DA5F68CA4F58CA4F58CA4F68CA4F68CA4 - F68CA4F68CA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA3F68AA2F68AA2F68A - A2F68AA2F68AA2F689A2F689A1F689A1F689A1F689A1F688A1F688A0F688A0F6 - 88A0F688A0F687A0F688A1F688A1F689A1F689A2F68AA2F58BA4F58BA3F58BA4 - F58BA3F58AA3F58BA3F58BA2F68BA2F68AA1F68BA2F68BA2F58BA2F58BA3F58C - A3F58DA4F58DA3F58DA4F58FA5F592A9F595ACF69AB1F69EB4F7A2B8F7A2B8F7 - A1B7F79EB5F69BB1F698ADF596ABF496AAF496AAF497ABF497ABF498ACF499AC - F49AACF49AADF49BAEF49BAEF49CAFF49EB0F49EB0F39FB1F49FB1F3A1B2F3A1 - B2F3A3B4F4A5B5F0B8B9BDB9B9B9B9B9B9BABABABABABABABABABBBBBBBBBBBB - BBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC1C1C1C1C1C1C2C2 - C2C2C2C2C3C3C3C3C3C3C4C4C4C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8CACACACB - CBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFCFCFCFD1D1D1D2D2D2D2D2D2 - D3D3D3D5D5D5D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9DADAD9D9D9DADA - DADBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3 - E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9 - EAEAEAEAEAEAEBEBEBEBEBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4 - F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AEAEAEADADADAB - ABABAAAAAAA9A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A2A2A2A0A0A09F9F9F - 9D9D9D9B9B9B9A9A9A98989896969696969694949493939395A3D096AEF696AE - F696ADF696ADF696ADF695ADF695ADF695ADF695ACF695ACF695ACF694ACF694 - ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693AAF692AAF692AAF6 - 92AAF692A9F692A9F691A9F691A9F691A9F691A9F691A8F690A8F690A8F690A8 - F690A8F690A7F690A7F68FA7F68FA7F68FA7F68FA6F68FA6F68FA7F58EA6F68E - A6F68EA6F68EA6F68DA5F68DA5F68DA5F58DA5F68DA5F68DA5F68DA5F68DA5F6 - 8CA4F68CA4F68CA4F68CA4F68BA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA2 - F68AA2F68AA2F68AA2F68AA2F689A2F689A2F689A1F689A1F689A1F688A1F688 - A1F688A0F688A0F688A0F688A0F688A0F688A0F688A0F688A0F689A1F689A1F6 - 89A1F68AA1F68AA1F68AA2F68AA2F68BA2F68CA3F58CA3F58CA3F58DA4F68EA4 - F68EA5F68FA5F68FA5F690A7F692A8F695ABF696ACF698AFF699AFF69AAEF698 - ADF697ADF597ABF596ABF596AAF597ABF597ABF598ACF599ACF599ADF59AADF5 - 9BAEF49CAEF49CAFF49DAFF49EB0F49FB0F49FB1F4A1B2F4A1B2F4A2B3F4A3B4 - F4A4B4F4ADB6D9B8B8B8B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBD - BDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCC - CCCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D5 - D5D5D5D5D5D7D7D7D7D7D7D8D8D8D8D8D8DADADADADADADADADADCDCDCDCDCDC - DDDDDDDEDEDEDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4 - E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8EAEAEAEBEBEBEB - EBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AFAFAFAEAEAEACACACABAB - ABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9D - 9D9D9C9C9C9A9A9A98989897979796969694949493949996A9E397AEF697AEF6 - 96AEF696AEF696AEF696ADF696ADF696ADF695ADF695ADF695ACF695ACF695AC - F694ACF694ACF694ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693 - AAF692AAF692AAF692AAF692A9F691A9F691A9F691A9F691A9F691A8F691A8F6 - 90A8F690A8F690A8F690A8F690A7F68FA7F68FA7F68FA7F68FA7F68FA6F68EA6 - F68FA7F68EA6F68EA6F68EA6F68DA5F68EA6F78EA6F78DA5F78DA5F78DA5F78D - A5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA4F78BA3F78BA3F78BA3F7 - 8BA3F78BA3F78AA3F78AA2F78AA2F78AA2F78AA2F789A2F789A1F789A1F789A1 - F789A1F788A1F788A1F789A1F688A1F689A1F689A1F68AA2F68AA1F68AA2F68B - A2F68AA2F68BA2F68CA3F68BA3F68CA3F68DA4F68CA3F68DA4F68EA5F68FA5F6 - 90A6F68FA5F690A6F691A7F692A8F693A9F695AAF696AAF696ABF695AAF696AA - F695AAF696AAF697ABF697ACF598ACF599ACF59AADF59AADF59BAEF59CAFF59D - AFF59EB0F59EB0F59EB1F59FB1F5A1B2F5A2B3F5A2B4F5A3B4F4A4B5F4A5B5F4 - A5B6F4B3B7C7B8B8B8B9B9B9B9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBEBE - BEBFBFBFBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C5C5C5C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCD - CECECECFCFCFCFCFCFD1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D6D6 - D6D7D7D7D8D8D8D7D7D7D9D9D9DADADADADADADBDBDBDDDDDDDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E6E6E6 - E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBECECECECEC - ECECECECEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7B2B2B2B1B1B1B0B0B0AFAFAFACACACABABAB - AAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9C9C - 9C9B9B9B9999999898989797979696969595959599A697ADF197AFF797AFF797 - AEF797AEF797AEF796AEF796AEF796AEF796ADF796ADF796ADF795ADF795ADF7 - 95ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF793ABF793ABF793AB - F793AAF793AAF792AAF792AAF792AAF792AAF792A9F791A9F791A9F791A9F791 - A9F791A8F791A8F790A8F790A8F790A8F790A7F790A7F78FA7F78FA7F78FA7F7 - 8FA7F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78DA5 - F78DA5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA3F78CA4F78BA3F78B - A3F78BA3F78BA3F78BA3F78AA3F78AA3F78AA2F78AA2F78AA2F789A2F789A2F7 - 89A1F789A1F789A2F789A1F78AA2F78AA1F78AA2F78BA3F78BA2F78BA3F78BA3 - F78BA3F78CA4F78CA4F78DA4F78DA4F68DA4F68EA4F68FA5F68FA6F690A6F691 - A7F691A7F691A7F691A7F693A8F794A9F694A9F694A9F696AAF695AAF696ABF6 - 97ABF697ABF698ACF698ACF59AADF69AADF59BAEF69DAFF69DB0F69DB0F69FB1 - F69FB1F6A0B2F5A1B3F5A2B3F5A3B4F5A3B4F5A4B5F5A4B5F5A5B6F5A7B7F5AA - B8EDB7B8BCB9B9B9B9B9B9BABABABBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBE - BFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7 - C7C8C8C8C9C9C9C9C9C9CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCFCFCFCFCFCFD0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D6D6D6D6D6D6D7D7D7D8D8D8 - D8D8D8D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0 - E0E0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7E7E7E8 - E8E8E7E7E7E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDED - EEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7B3B3B3B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAA - AAAAA9A9A9A8A8A8A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D - 9A9A9A999999989898979797969696959595969FB998AFF798AFF798AFF797AF - F797AFF797AFF797AEF797AEF797AEF796AEF796AEF796ADF796ADF796ADF795 - ADF795ADF795ADF795ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF7 - 93ABF793ABF793ABF793AAF792AAF792AAF792AAF792AAF792A9F792A9F791A9 - F791A9F791A9F791A9F791A8F790A8F790A8F790A8F790A8F790A7F78FA7F78F - A7F78FA7F78FA7F78FA7F78FA7F88EA6F78EA6F78EA6F78EA6F78EA6F78DA5F7 - 8DA5F78DA5F88DA5F78DA5F88CA4F78DA5F88CA4F78CA4F78CA4F78BA3F78CA4 - F88CA4F88BA4F88BA3F88BA3F88BA3F88BA3F88AA3F88AA2F88AA2F88AA2F88A - A2F88AA2F78AA2F78BA2F78AA2F78BA3F78BA3F78BA3F78CA3F78CA3F78CA4F7 - 8DA4F78EA5F78EA5F78EA5F78FA5F78FA5F78FA6F790A6F790A7F791A7F791A7 - F792A7F792A8F793A9F794A9F695A9F695AAF696AAF697ABF698ACF797ABF697 - ACF699ADF79AADF69BAEF69BAEF69CAFF69CB0F69EB0F69DB0F6A0B2F6A0B2F6 - A1B3F6A2B4F6A2B4F6A3B5F6A4B5F6A5B6F6A5B6F6A7B7F6A8B8F6A9B8F6B2B8 - CFB9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFC0C0C0C1 - C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C8C8C8 - CACACACACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1 - D1D2D2D2D2D2D2D3D3D3D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9D9D9DA - DADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E8E8E8E8E8 - E8EAEAEAEAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7B5B5B5B3B3B3B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAA - AAA9A9A9A8A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A19F9F9F9E9E9E9C9C9C9B - 9B9B9A9A9A98989897979796969695959596A4CB99B0F898AFF798B0F898AFF8 - 98AFF898AFF897AFF897AFF897AFF897AEF897AEF897AEF896AEF896AEF896AD - F896ADF895ADF895ADF895ADF895ACF895ADF795ACF894ACF894ACF894ACF894 - ABF894ABF893ABF893ABF893ABF893ABF893AAF892AAF892AAF892AAF892AAF8 - 92A9F892A9F891A9F891A9F891A9F891A8F891A8F890A8F890A8F890A8F890A8 - F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6F88EA6F88EA6F88E - A6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA5F88CA4F88CA4F88CA4F88CA4F8 - 8CA4F88BA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88AA3F88AA3F88BA3 - F88BA3F88BA3F88CA4F88CA4F88CA4F88CA4F88DA4F88DA4F88DA4F88EA5F88E - A5F88EA5F88FA6F88FA6F78FA6F790A7F791A7F791A7F792A8F793A8F793A8F7 - 93A9F794A9F794AAF795AAF796ABF796ABF797ACF798ACF798ACF799ADF79AAE - F79AADF79CAFF69BAFF69CAFF69DB0F69EB1F69FB1F6A0B2F6A0B3F6A1B3F6A2 - B4F6A3B4F6A3B5F6A4B5F6A5B6F6A6B7F6A7B8F6A8B8F6AAB9F2B7B8BCB9B9B9 - BABABABCBCBCBCBCBCBCBCBCBDBDBDBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C8C8C8C9C9C9CACACACACACACB - CBCBCCCCCCCCCCCCCECECECECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D2D2D2 - D3D3D3D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9DADADADADADADBDB - DBDCDCDCDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1E3E3E3E3 - E3E3E5E5E5E4E4E4E6E6E6E6E6E6E8E8E8E7E7E7E8E8E8E8E8E8E9E9E9EBEBEB - EBEBEBEBEBEBECECECEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4 - F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAEAEAEADADADABABABAAAAAA - A9A9A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A19F9F9F9E9E9E9C9C9C9B9B - 9B9A9A9A98989898989897979796969698A8D999B0F899B0F899B0F898B0F898 - B0F898B0F898AFF898AFF898AFF897AFF897AFF897AEF897AEF897AEF896AEF8 - 96AEF896AEF896ADF896ADF895ADF895ADF895ADF895ACF895ACF895ACF894AC - F894ACF894ACF894ABF893ABF893ABF893ABF893ABF893AAF893AAF892AAF892 - AAF892AAF892AAF892A9F891A9F891A9F891A9F891A9F891A8F890A8F890A8F8 - 90A8F890A8F890A8F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6 - F88EA6F88EA6F88DA6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA4F88CA4F88C - A4F88CA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88BA3F88BA3F88BA3F8 - 8BA3F88BA3F88DA4F88CA4F88CA4F88DA5F88DA5F88EA5F88EA6F88FA6F890A6 - F890A6F890A7F891A7F891A7F892A8F892A8F893A9F893A9F893A9F895AAF894 - AAF895AAF896ABF897ABF897ACF798ADF799ADF799ADF79AAEF79BAEF79BAFF7 - 9CAFF79DB0F79DB1F79EB1F79FB2F7A0B2F7A1B3F7A1B3F7A2B4F7A3B4F7A4B6 - F7A4B6F7A5B6F6A6B7F6A7B8F6A8B8F6A9B9F6B0B8D7B8B8B8B9B9B9BABABABB - BBBBBCBCBCBDBDBDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3 - C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9C9C9C9CACACACBCBCBCBCBCBCCCC - CCCCCCCCCFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5D5D5D6 - D6D6D6D6D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDDDDDD - DDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5 - E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEB - EBEBECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F3F3F3F2F2F2F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B8B8 - B8B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAAAAAAA9 - A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09E9E9E9C9C9C9B9B9B - 9A9A9A98989897979797979796979C99ACE69AB1F999B0F899B1F999B0F998B0 - F898B0F898AFF898B0F998AFF898AFF998AFF997AEF897AEF897AEF897AEF996 - AEF896AEF996AEF996ADF896ADF996ADF995ADF895ACF895ADF995ADF995ACF9 - 95ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993ABF993ABF993AA - F993AAF992AAF992AAF992AAF992A9F992A9F991A9F991A9F991A9F991A9F990 - A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98FA7F98FA7F98FA7F9 - 8EA6F98EA6F98EA6F98EA6F98EA6F98DA6F98DA5F98DA5F98DA5F98DA5F98DA5 - F98CA5F98CA4F98CA4F98CA4F98CA4F98BA4F98CA4F88BA4F88CA4F88CA4F88D - A5F88DA5F88DA5F88EA5F88EA5F88EA5F88FA6F88FA6F88FA6F890A7F890A6F8 - 90A7F892A8F992A8F892A8F892A8F893A9F894A9F894AAF895AAF895AAF895AA - F896ABF897ACF898ADF899ADF899ADF799ADF79AAEF79BAEF79CB0F89CB0F79E - B1F89EB1F89FB2F8A0B2F8A0B3F7A1B4F7A2B4F7A3B5F7A3B5F7A4B6F7A6B7F7 - A7B8F7A7B8F7A8B9F7A9B9F7A9BAF7B6B8C0B9B9B9BABABABBBBBBBCBCBCBDBD - BDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3C5C5C5C6C6C6C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6 - D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADBDBDBDBDBDBDEDEDEDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E0E0E0E2E2E2E2E2E2E2E2E2E3E3E3E5E5E5E5E5E5E6E6E6 - E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECECECECEDED - EDEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B9B9B9B8B8B8 - B6B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9 - A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9C9C9C9B9B9B9A - 9A9A999999989898979797979AA39AB0F39AB1F999B1F999B1F999B0F999B0F9 - 99B0F998B0F998B0F998B0F998AFF998AFF998AFF998AFF997AFF997AEF997AF - F997AFF997AEF996AEF996ADF996ADF996ADF996ADF995ADF996ADF995ADF895 - ADF995ADF995ACF994ACF994ACF994ABF994ACF993ABF994ABF993ABF993AAF9 - 93ABF993ABF993AAF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9 - F991A9F991A9F990A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98F - A7F98FA7F98EA7F98EA6F98EA6F98EA6F98EA6F98EA6F98DA5F98DA5F98DA5F9 - 8DA5F98DA5F98CA5F98CA5F98CA4F98CA5F98CA4F98DA5F98DA5F98EA5F98DA5 - F98EA6F98FA6F98EA6F98FA6F98FA7F990A7F990A7F991A7F991A8F991A8F992 - A8F993A9F893A9F893A9F894AAF894AAF895ABF895ABF895ABF897ACF897ACF8 - 98ACF898ADF899ADF89AAEF89AAEF89BAFF89CAFF89CB0F89DB0F89EB1F89EB1 - F89FB2F8A1B3F7A1B3F7A1B4F7A2B4F7A4B5F7A4B6F7A5B7F7A6B7F7A7B8F7A8 - B9F8A8B9F7AABBF8B0BADFB8B8B8B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBE - C0C0C0C0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C5C5C5C5C5C5C6C6C6C7C7C7C8C8 - C8C8C8C8CACACACACACACBCBCBCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D0 - D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8 - D9D9D9D9D9D9DBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0 - E0E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8 - E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEEEEEE - EFEFEFEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F3F3F3F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F5F5F5F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BBBBBBB9B9B9B8B8B8B6 - B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9A9 - A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D9C9C9C9A9A - 9A999999989898989898989CAA9AB0F39AB1F99AB1F99AB1F999B1F999B1F999 - B1F999B0F999B0F999B0F998B0F998B0F998AFF998AFF998AFF997AFF997AFF9 - 97AFF997AEF997AEF996AEF996AEF996AEF996ADF996ADF996ADF995ADF995AD - F995ADF995ACF994ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993 - ABF993ABF993ABF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9FA - 91A9F991A9F990A8F990A8F991A9FA90A8FA90A8FA90A8FA8FA7F98FA7F98FA7 - F98FA7F98FA7FA8EA6F98EA6F98EA6F98EA6F98EA6FA8DA5F98DA5F98DA5F98D - A5F98DA5F98CA5F98DA5F98DA5F98DA5F98DA5F98DA5F98EA6F98EA6F98EA6F9 - 8FA7F98FA6F990A7F990A7F991A8F991A8F992A8F992A9F992A9F992A9F993A9 - F994AAF994AAF995ABF995ABF996ABF996ACF997ACF998ADF999ADF998ADF99A - AEF999AEF99BAFF89BAFF89CB0F89CB0F89DB1F89EB1F89FB2F89FB2F8A1B3F8 - A1B3F8A1B4F8A3B5F8A4B6F8A4B6F8A5B7F8A6B7F8A7B8F8A8B8F8A8B9F8A9BA - F8AABBF8B5B7BFB9B9B9BABABABABABABBBBBBBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C9C9C9C9C9C9 - CACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2 - D2D3D3D3D3D3D3D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8D8DADADADADADADB - DBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E9E9E9E9E9E9E9E9 - E9EAEAEAEBEBEBECECECECECECECECECEDEDEDEEEEEEEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5 - F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BCBCBCBBBBBBBABABAB8B8B8B6B6 - B6B5B5B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8 - A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B - 9A9A9A99999998989899A0B69BB2FA9BB2FA9AB2FA9AB2FA9AB1FA9AB1FA9AB1 - FA99B1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98AFFA98AFFA97 - AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AEFA96ADFA96ADFA - 95ADFA95ADFA95ADFA95ADFA95ACFA94ACFA94ACFA94ACFA94ACFA94ABFA94AB - FA93ABFA93ABFA93ABFA93AAFA93AAFA92AAFA92AAFA92AAFA92AAFA91A9FA91 - A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90A8FA90A8FA8FA7FA - 8FA7FA8FA7FA8FA7FA8FA7FA8EA7FA8EA6FA8EA6FA8EA6FA8EA6FA8EA6FA8DA6 - FA8DA5FA8DA6F98DA6F98DA5F98EA6F98EA5F98EA6F98FA7F98FA6F98FA7F98F - A7F990A7F990A8F991A8F991A8F992A8F992A9F992A9F993A9F993A9F994ABFA - 95ABF994AAF997ACF996ACF996ACF998ADF998ADF999ADF999AEF99AAEF99AAE - F99AAFF99CB0F89DB1F99EB2F99EB1F89FB2F8A0B3F9A0B3F8A1B4F8A2B4F8A3 - B5F9A4B6F9A5B6F9A5B7F9A6B8F9A7B8F8A7B9F8A9BAF8AABAF8ABBBF8B0BAE0 - B8B8B8B9B9B9BABABABBBBBBBCBCBCBEBEBEBFBFBFC0C0C0C0C0C0C1C1C1C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9CACACACACACACBCBCBCC - CCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4 - D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D9D9D9DADADADADADADBDBDBDCDC - DCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4 - E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEA - EBEBEBECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0 - F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7BDBDBDBCBCBCBABABAB9B9B9B8B8B8B6B6B6 - B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8 - A8A7A7A7A6A6A6A5A5A5A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A - 9A9A9999999999999AA2BD9BB2FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA - 9AB1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0 - FA98AFFA98AFFA97AEFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96 - AEFA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA - 94ACFA94ABFA93ABFA93ABFA93ABFA93ABFA93AAFA92AAFA92AAFA92AAFA92AA - FA92AAFA91A9FA91A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90 - A8FA8FA8FA8FA7FA8FA7FA8FA7FA8FA7FA8FA7FA8EA6FA8EA6FA8EA6FA8EA6FA - 8EA6FA8EA6FA8EA6FA8FA6FA8EA6FA8FA7FA8FA7FA8FA7FA90A7FA91A8FA91A8 - FA91A8FA92A9FA92A8FA92A9FA93AAFA94AAFA93AAFA94AAFA94ABFA95ABF996 - ACF997ACF997ACF997ADF998ADF999AEF999AEF99AAFF99BAFF99BAFF99CB0F9 - 9DB1F99DB1F99EB2F99FB2F9A0B3F9A0B3F9A1B4F9A2B4F9A2B5F9A3B5F9A4B6 - F9A5B7F9A5B7F9A6B8F9A7B8F8A9B9F8A9BAF8AABBF8ABBBF8B4B8C7B8B8B8B9 - B9B9BBBBBBBCBCBCBDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C5C5C5C6C6C6C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCD - CDCECECECFCFCFD0D0D0D0D0D0D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D5 - D5D5D7D7D7D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDCDCDC - DDDDDDDEDEDEDFDFDFDFDFDFE1E1E1E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4 - E4E5E5E5E6E6E6E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2 - F3F3F3F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7BEBEBEBDBDBDBCBCBCBBBBBBB9B9B9B8B8B8B6B6B6B5 - B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8A8 - A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A9A - 9A9999999898989AA2BD9BB3FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA9A - B1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0FA - 98AFFA98AFFA97AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AE - FA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA94 - ACFA94ABFA93ABFA93ABFA94ABFB93ABFB93AAFA93ABFB92AAFA92AAFA92AAFB - 92AAFA92AAFB92AAFB92AAFB91A9FB91A9FA91A9FB91A9FB90A8FA90A8FA90A8 - FB90A8FB90A8FB8FA7FA8FA8FB8FA7FA8FA7FA8FA7FB8FA7FB8EA6FA8FA7FA8E - A6FA8FA7FA8FA7FA90A8FA8FA7FA90A7FA8FA7FA91A8FA91A8FA92A9FA91A9FA - 92A9FA93A9FA93A9FA93AAFA94AAFA95AAFA95ABFA95ACFA95ABF996ACF998AD - FA97ACF998ADFA98ADF999AEFA9AAEF99AAFF99BAFF99CB0F99CB0F99EB1FA9D - B1F99FB2FAA0B3FAA0B3F9A1B4F9A2B5F9A2B5F9A3B6F9A4B6F9A5B7F9A6B7F9 - A6B8F9A8B9F9A8BAF9A9BAF9AABBF9ABBBF9AFBBE8B8B8B8B9B9B9BBBBBBBCBC - BCBCBCBCBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C4C4C4C4C4C4C5C5C5C7 - C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCDCFCFCFD0D0D0 - D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8 - D8D8D8D8D9D9D9D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDF - DFDFDFDFDFE0E0E0E2E2E2E2E2E2E2E2E2E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAECECECECECECEDEDEDEDED - EDEEEEEEEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7BFBFBFBEBEBEBEBEBEBCBCBCBBBBBBBABABAB9B9B9B7B7B7B5B5 - B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8A8A8A7 - A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9E9E9E9C9C9C9C9C9C9A9A9A - 9999999999999AA2BD9CB3FB9CB3FB9BB3FB9BB3FB9BB2FB9BB2FB9BB2FB9AB2 - FB9AB2FB9AB2FB9AB1FB9AB1FB9AB1FB99B1FB99B1FB99B0FB99B0FB98B0FB98 - B0FB98B0FB98AFFB98AFFB98AFFB97AFFB97AFFB97AFFB97AEFB97AEFB96AEFB - 96AEFB96AEFB96AEFB96ADFB95ADFB95ADFB95ADFB95ADFB95ACFB95ACFB94AC - FB94ACFB94ACFB94ABFB94ABFB93ABFB93ABFB93ABFB93ABFB92AAFB92AAFB92 - AAFB92AAFB92AAFB92AAFB91A9FB91A9FB91A9FB91A9FB91A9FB90A8FB90A8FB - 90A8FB90A8FB90A8FB8FA8FB8FA7FB8FA7FB8FA7FB8FA7FB8FA7FA8FA7FA8FA7 - FA8FA7FA90A8FA91A8FA90A8FA90A8FA91A8FA92A9FA92A9FA92A9FA93AAFA94 - AAFA93AAFA94AAFA94ABFA95ABFA95ABFA95ACFA96ACFA97ACFA98ADFA98ADFA - 98ADFA99AEFA9AAFFA9AAFFA9BB0FA9BB0FA9CB0FA9DB1FA9EB1FA9EB2FA9FB3 - FAA0B3FAA1B4F9A1B4F9A2B5F9A3B5F9A3B6F9A4B6F9A5B7F9A6B8F9A7B9F9A8 - B9F9A8B9F9A9BAF9AABBF9ABBBF9B4B8C8B8B8B8BABABABBBBBBBCBCBCBDBDBD - BEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C8C8 - C8C9C9C9CACACACACACACCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1 - D1D1D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D8D8D8 - D9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEE0E0E0E0E0 - E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E7 - E7E7E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEDEDEDEDEDEDEEEEEEEEEEEE - EFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7} - end - object Bevel2: TBevel - Left = 0 - Top = 64 - Width = 500 - Height = 2 - Align = alTop - Shape = bsTopLine - end - object Bevel3: TBevel - Left = 0 - Top = 369 - Width = 500 - Height = 2 - Align = alBottom - Shape = bsTopLine - end - object Label1: TLabel - Left = 8 - Top = 80 - Width = 295 - Height = 13 - Caption = 'You are about to create your RemObjects SDK Server Project' - end - object lbl_CreateClientAndGroup: TLabel - Left = 44 - Top = 225 - Width = 383 - Height = 26 - Caption = - 'In addition to the Server project, RemObjects SDK will create a ' + - 'client project to connect to your server.' - WordWrap = True - end - object lbl_GuideWizard: TLabel - Left = 44 - Top = 289 - Width = 384 - Height = 26 - Caption = - 'After creating your project(s), a template-specific wizard will ' + - 'guide you through the further steps needed to complete your appl' + - 'ication.' - WordWrap = True - end - object Label5: TLabel - Left = 16 - Top = 99 - Width = 82 - Height = 13 - Caption = 'Project Folder:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label2: TLabel - Left = 16 - Top = 147 - Width = 79 - Height = 13 - Caption = 'Project Name:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Panel1: TPanel - Left = 0 - Top = 371 - Width = 500 - Height = 41 - Align = alBottom - BevelOuter = bvNone - TabOrder = 6 - DesignSize = ( - 500 - 41) - object btn_Ok: TBitBtn - Left = 341 - Top = 8 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 0 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object btn_Cancel: TBitBtn - Left = 420 - Top = 8 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - end - object cb_CreateClientAndGroup: TCheckBox - Left = 16 - Top = 203 - Width = 369 - Height = 17 - Caption = 'Also create a matching client application and a project group' - Checked = True - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - State = cbChecked - TabOrder = 3 - OnClick = cb_CreateClientAndGroupClick - end - object cb_GuideWizard: TCheckBox - Left = 16 - Top = 267 - Width = 441 - Height = 17 - Caption = - 'Run the New Server Wizard to guide you though the setup of your ' + - 'project' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 4 - end - object btn_AdvancedOptions: TBitBtn - Left = 16 - Top = 336 - Width = 177 - Height = 25 - Caption = 'Advanced Project Options...' - TabOrder = 5 - OnClick = btn_AdvancedOptionsClick - Glyph.Data = { - 36050000424D3605000000000000360400002800000010000000100000000100 - 0800000000000001000000000000000000000001000000010000FF00FF002423 - 25002D2A2A00383435003A3A3A00413B3B00413D3D003733470021346A002A3B - 6900273F7300484343004D4948005C47420045465B005A5757005B5959005F5E - 5E007E5F5800737373007676770089575300895754009A7E65009C7F6600AD70 - 6B00B4766D00BB7D6E0082807F0091847800AC8C6F00C4866F00CA8C7200D193 - 7300D7997400DA9D7500E7AB7900244283003B5781003B528E0041628E00787D - 83004F7EAF004074B7003481DC007FB1CE004397E2004398E3004399E50053AC - EA0053AFED0062B4E000918B80008890A400D19D8000D79F8000D8A18100C1AF - 9D00D4B79700C6B6A700EEC29800F3C99F00F6CA9D00D4C2B100D1C9B700F6CB - A200F8CBA100F3CFAA00E1CAB500E1CDB900E2CFBC00E7D5BD00EED5BA00F7D5 - B200F6D5B500F3D7B800F3D9BC008FE2F000B4E5F300BCEAF300E1D4C600E7D5 - C400EDDDC700EDDECA00F4DAC000F6DCC200EFE1CE00F0E3CB00F6E2CC00F3E6 - CE00F6E7CE00EFE3D300F2E6D700F8EEDD00EDEDED00F7EFE300F6EBE600F8EE - E700F7F3EA00FAF6EE00FBF7F200FBFBFA00FBFBFC00FEFEFE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000015151515151515151515000000000000155146464444 - 44444715000000000000195D5C5B565352525A150000000000001A5F49424141 - 3E435A150000000000001B625A55554B4B4856150000000000001F63493E4142 - 3C3A40150000000000002064513B3F46391D341200000000000021663517171E - 26280E0D000000060202226626261C26332609070014040601062366264F2633 - 2633260A081429060306246666264F263326332F2C145E060C0B24635F5F264D - 2633312E2C145E060F102437373737262D4E312F25145E061414000000000000 - 002A2B2700141406141000000000000000000000000000060406} - end - object ed_ProjectFolder: TComboBox - Left = 44 - Top = 118 - Width = 367 - Height = 21 - Anchors = [akLeft, akTop, akRight] - ItemHeight = 13 - TabOrder = 0 - OnChange = ed_ProjectFolderChange - end - object btn_Browse: TBitBtn - Left = 417 - Top = 116 - Width = 75 - Height = 25 - Anchors = [akTop, akRight] - Caption = '&Browse' - TabOrder = 1 - OnClick = btn_BrowseClick - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF1C99CE2BA5D51C9DD10A8AC6FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFBFA5A34D5A72FF00FFFF00FF249CCFA6EEF7 - 6CEBF85DD9F04AC7E739B8E020A0D40F91CA0F91C9FF00FFFF00FFBFA5A35766 - 831276E23C91DCFF00FF0C8CC799DDEF8BFFFF80FCFF82FBFF7FFAFF79F3FF65 - E1F74ECEED3CBAE07591A05B66811170D833A1FF2A9AFEFF00FF1296CC59BADE - 9FFEFF75F7FF78F6FF77F2FC89D9E087D7DE7BE2EA91BCC05168891370D531A0 - FF319EFBFF00FFFF00FF26A5D448C1E69FEFF879F6FB87D8DCBACABCDABCA5D0 - B59EAF9A8C817A734179AF32A3FF3DACFE1B9CD4FF00FFFF00FF27AFDE8B97A1 - 88CFE28BD1D3CBB4ADF7F0DDFFFFD8FFFFD9FAF8C5CFB08CC4A9A34DC1FC55D0 - FB41C1E3FF00FFFF00FF25AFE1AD706B5DBCDDB5A69EF7F4EEFFFFFFFFFFE3FF - FFD4FFF7C1FFE6A5D8A0826FD4EB59D7FB68E2F80E90C9FF00FF26AFE1B5776D - A4CFD9CEB69EFFFFEAFFFFF3FFFFEAFFFFD7F7DCA9F6C986E1B89191C0C753D3 - FB7EF3FF28AAD8FF00FF28B0E0BC7F6EFFF4EBD5BCA1FFFFDDFFFFDDFFFFE0FF - FACAEFBD81F4BD77E7C49A93C0C44FD3FB7DF4FF56D5EFFF00FF28AFE1C58870 - FFFCF8CAAA99FEFFCEFFFFC9F8E1ADF0C78CF3CA96FFEBB5D5AF959AC9D37AE0 - FE9DFBFF96F8FF23A1D328B0E1CE9173FFFAF7D8C4BDDCC59EFCE5A7FAC782FB - D08BFFF7E0E7DCCE8CA5AA6BC9E65FBCE060BBDE6CC4E329A1D12DB2E2D59975 - FFF8F3FCFBFAE5D1C9E9CAA6E7C599E1C298CCB59FB18B8875E7F86DEDFE179D - D1FF00FFFF00FFFF00FF1FA1D9DDA077FFFBF6FFFFFFFFFFFFFFFFFEFBF4EBB4 - 8379BF7849B16F5350C0E550C4E71C9DD0FF00FFFF00FFFF00FFFF00FFE2A678 - FFFFFFFFFFFFFFFFFFFFFFFFF8FAFCB6877AE29955FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFE7AB79D1926DD1926DD1926DD1926DD1926DB4 - 7E6FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - end - object ed_ProjectName: TEdit - Left = 44 - Top = 166 - Width = 367 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 2 - OnChange = ed_ProjectNameChange - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.pas deleted file mode 100644 index 51bae51..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fNewProjectForm.pas +++ /dev/null @@ -1,203 +0,0 @@ -unit fNewProjectForm; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, - {$IFDEF DELPHI6UP} Variants, {$ENDIF} - Classes, Graphics, Controls, Forms, ExtCtrls, - Dialogs, StdCtrls, Buttons, ComCtrls, ImgList, - uROIDEPrjWizard, fServerProjectOptions; - -type - TNewProjectForm = class(TForm) - Bevel1: TBevel; - Image2: TImage; - Bevel2: TBevel; - Panel1: TPanel; - btn_Ok: TBitBtn; - btn_Cancel: TBitBtn; - Bevel3: TBevel; - cb_CreateClientAndGroup: TCheckBox; - Label1: TLabel; - cb_GuideWizard: TCheckBox; - btn_AdvancedOptions: TBitBtn; - lbl_CreateClientAndGroup: TLabel; - lbl_GuideWizard: TLabel; - Label5: TLabel; - ed_ProjectFolder: TComboBox; - btn_Browse: TBitBtn; - Label2: TLabel; - ed_ProjectName: TEdit; - procedure btn_AdvancedOptionsClick(Sender: TObject); - procedure cb_CreateClientAndGroupClick(Sender: TObject); - procedure ed_ProjectFolderChange(Sender: TObject); - procedure btn_BrowseClick(Sender: TObject); - procedure ed_ProjectNameChange(Sender: TObject); - private - fOptions: TServerProjectOptions; - public - constructor Create(const aTemplateDir : string); reintroduce; - destructor Destroy; override; - end; - -var - NewProjectForm: TNewProjectForm; - -function PromptProjectOptions( - const aTemplateDir : string; - out someProjectOptions : TROIDEProjectOptions) : boolean; - -implementation - -uses IniFiles, uRODLGenTools, uROClient, uROServer, uROIDETools, uEWHelpers; - -{$R *.dfm} - -const MAX_FOLDER_HISTORY = 10; - -function PromptProjectOptions(const aTemplateDir : string; out someProjectOptions : TROIDEProjectOptions) : boolean; -var - i: integer; -begin - with TNewProjectForm.Create(aTemplateDir) do try - cb_GuideWizard.Enabled := fOptions.fWizardAvailable; - cb_GuideWizard.Checked := fOptions.fWizardAvailable; - lbl_GuideWizard.Enabled := fOptions.fWizardAvailable; - - cb_CreateClientAndGroup.Enabled := fOptions.cbCreateClientAndGroup.Enabled; - lbl_CreateClientAndGroup.Enabled := fOptions.cbCreateClientAndGroup.Enabled; - if not cb_CreateClientAndGroup.Enabled then cb_CreateClientAndGroup.Checked := false; - - ed_ProjectFolder.Text := fOptions.ePrjDir.Text; - ed_ProjectFolder.Items := fOptions.fProjectFolders; - ed_ProjectName.Text := fOptions.ePrjName.Text; - ed_ProjectFolderChange(nil); - ed_ProjectNameChange(nil); - - result := (ShowModal=mrOK); - - if result then with someProjectOptions do begin - TemplateDir := aTemplateDir; - - ServiceLibraryName := StringReplace(fOptions.eSvcLibName.Text, ' ', '_', [rfReplaceAll]); - ServiceName := StringReplace(fOptions.eSvcName.Text, ' ', '_', [rfReplaceAll]); - ProjectName := StringReplace(ChangeFileExt(ExtractFileName(fOptions.ePrjName.Text), ''), ' ', '_', [rfReplaceAll]); - - ProjectDir := IncludeTrailingBackslash(fOptions.ePrjDir.Text); - MessageClassName := Copy(fOptions.cbMessageClass.Text,4,Length(fOptions.cbMessageClass.Text)); - ServerClassName := Copy(fOptions.cbServerClass.Text,4,Length(fOptions.cbServerClass.Text)); - - with TMemIniFile.Create(GetTemplateOptionsFileName) do - try - if fOptions.fFixedChannel <> '' then begin - ChannelClassName := fOptions.fFixedChannel; - end - else begin - ChannelClassName := StringReplace(someProjectOptions.ServerClassName, 'Server', 'Channel', []); - ChannelClassName := ReadString('ServerToChannelMapping',ServerClassName,ChannelClassName); - end; - ServerUnitName := ReadString('ComponentToUnitMapping', ServerClassName, 'uRO'+ServerClassName); - ChannelUnitName := ReadString('ComponentToUnitMapping', ChannelClassName, 'uRO'+ChannelClassName); - MessageUnitName := ReadString('ComponentToUnitMapping', MessageClassName, 'uRO'+MessageClassName); - finally - Free; - end; - - CreateClientAndGroup := cb_CreateClientAndGroup.Checked; - WizardEnabled := cb_GuideWizard.Checked; - - // Update Project Folder History - i := fOptions.fProjectFolders.IndexOf(ed_ProjectFolder.Text); - case i of - -1: begin - if fOptions.fProjectFolders.Count >= MAX_FOLDER_HISTORY then - fOptions.fProjectFolders.Delete(fOptions.fProjectFolders.Count-1); - fOptions.fProjectFolders.Insert(0, ed_ProjectFolder.Text); - end; - 0: { noop } - else begin - fOptions.fProjectFolders.Delete(i); - fOptions.fProjectFolders.Insert(0, ed_ProjectFolder.Text); - end; - end; - - // Saves last path entered - with TIniFile.Create(GetTemplateConfigFileName) do try - WriteString(sect_ProjectGeneration, id_PrjDir, ExtractFilePath(ProjectDir)); - EraseSection(sect_ProjectFolderHistory); - for i := 0 to fOptions.fProjectFolders.Count-1 do - WriteString(sect_ProjectFolderHistory, fOptions.fProjectFolders[i], IntToStr(i)); - finally - Free; - end; - - end; - finally - Free; - end; -end; - -{ TNewProjectForm } -constructor TNewProjectForm.Create(const aTemplateDir: string); -begin - inherited Create(nil); - fOptions := TServerProjectOptions.Create(aTemplateDir); -end; - -destructor TNewProjectForm.Destroy; -begin - FreeAndnil(fOptions); - inherited; -end; - -procedure TNewProjectForm.btn_AdvancedOptionsClick(Sender: TObject); -begin - fOptions.ShowModal(); - cb_CreateClientAndGroup.Checked := fOptions.cbCreateClientAndGroup.Checked; - ed_ProjectFolder.Text := fOptions.ePrjDir.Text; - ed_ProjectName.Text := fOptions.ePrjName.Text; -end; - -procedure TNewProjectForm.cb_CreateClientAndGroupClick(Sender: TObject); -begin - fOptions.cbCreateClientAndGroup.Checked := cb_CreateClientAndGroup.Checked; -end; - -procedure TNewProjectForm.ed_ProjectFolderChange(Sender: TObject); -begin - fOptions.ePrjDir.Text := ed_ProjectFolder.Text; - btn_Ok.Enabled := (ed_ProjectFolder.Text <> '') and (ed_ProjectName.Text <> ''); -end; - -procedure TNewProjectForm.ed_ProjectNameChange(Sender: TObject); -begin - fOptions.ePrjName.Text := ed_ProjectName.Text; - btn_Ok.Enabled := (ed_ProjectFolder.Text <> '') and (ed_ProjectName.Text <> ''); -end; - -procedure TNewProjectForm.btn_BrowseClick(Sender: TObject); -var dir : string; -begin - dir := ed_ProjectFolder.Text; - if SelectDirectory(Application.Handle, 'Select Project Folder','', Dir) then - ed_ProjectFolder.Text := Dir; - ed_ProjectFolderChange(nil); -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.dfm deleted file mode 100644 index 6d31487..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.dfm +++ /dev/null @@ -1,14171 +0,0 @@ -object AboutForm: TAboutForm - Left = 366 - Top = 242 - BorderIcons = [] - BorderStyle = bsNone - Caption = 'About RemObjects SDK' - ClientHeight = 300 - ClientWidth = 500 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poMainFormCenter - OnClick = OnCloseClick - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Image1: TImage - Left = 0 - Top = 0 - Width = 500 - Height = 300 - AutoSize = True - Picture.Data = { - 07544269746D617006DE0600424D06DE0600000000003600000028000000F401 - 00002C0100000100180000000000D0DD0600C01E0000C01E0000000000000000 - 0000303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030302F2F302F302F30302F302F30 - 30303030302F2F302F302F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2E2F2F2E2E2E2F2F2E2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D - 2D2D2D2D2D2E2E2D2E2D2D2E2D2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2D2C2D2C - 2D2C2C2C2C2C2C2D2D2C2C2C2C2C2C2C2B2C2C2C2C2C2C2B2B2B2B2B2C2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A - 2A292A2A2A2A2A2A2A2A2A292929292929292929292A29292928292929292829 - 2829292829282828282828282828282827272727272728282827272827272728 - 2727272727272727272727272B2B2B2F2F2F3131313333333434342D2C2D2626 - 262625262625262625262626272C2A2B2B2A2A2C2B2A2B2A2A2B2A2A2B2A2A2A - 2A2A2A2A2A2A292A292A29292929292929292928292929282929282928282829 - 2828282828282828282728282827272727272727272727272627262627272727 - 27262626262626262626252626262626252525252525222222202020201F201F - 201F2020202120212D2D2D343434363535353536353434303030222222222222 - 1E1E1F1D1D1E1E1D1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1D1D1C1D1C1C1C1C - 1C1C1C1C1C1B1B1F1F202525252525252626262827272929292A2B2A2120211A - 1A1B1A1A1B1A191A1A1A1B1A1A1A1A191A1B1B1B1D1D1C1D1C1D1D1C1D1C1D1C - 1C1C1C1C1C1C1C1B1C1C1B1B1B1C1C1B1B1B1B1B1B1A1B1B1B1A1B1B1A1B1A1B - 1A1A1A1A1A1A1A1A1A191A191A191919191A1919191919191919191918181818 - 1819181818181818181818181717171717171716151414141414141314131314 - 1615152525263232323838383D3D3D4243422827271111111111111111111110 - 10101110101111101010101011101010101010100F101010100F0F0F0F0F0F0F - 0F0F0F0F0F0F0E0F0F0F0E0E0E0F0F0E0F0E0E0E0E0E0E0E0E0E0D0D0E0D0E0D - 0D0D0D0D0D0D0D0D0C0D0D0D0D0C0C0D0D0D0C0D0C0C0D0C0C0C0C0C0C0C0C0C - 0B0C0B0C0B0C0C0B0B0B0B0B0B0B0B0B0A0B0B0B0B0B0B0B0B0A0B0B0A0A0A0A - 0A0A0A0A0A0A0A0A090A090909090909090A0A09090909090909080909080909 - 0908090808080808080808080808080807080808070808070808070807070707 - 0707070707070607070607070606070706070706060606060606060606060606 - 0606060606050606060506050505050506050505050505050504040505040504 - 0405040505040405040404040404040404040404040404040404030404040304 - 0403040303030303030303030303030303020303030302030302030202030203 - 0202030202020202020202020202020202020202010201020102020201020202 - 0102020101010201020101010101010101010101010101010101000001000000 - 0100000000000100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979767976797976797679797976 - 7679767979767676767676797976767676767676767676737676767676737676 - 7676767676767673737373737673737373737373737373737373737373737373 - 737371737171717171717371717171717171717171717171717171716E716E6E - 6E6E716E6E6E71716E6E6E6E6E6E6E6E6E6C6E6C6C6E6E6C6C6E6C6E6C6C6C6E - 6C6E6E6C6C6C6C6C6C6C6969696C6C6C6C6C69696C6C69696969696969696969 - 6769676967696767676769676967676767676767676767676767676567676567 - 6765656765656565676565656565656565656565626262626262626262626562 - 62626262626262626E6E6E7676767B7B7B808080838383676969606060605D62 - 605D60605D606565656E6C6C6C6C6C6C69696C6C696C69696C69696C69696969 - 6969676967676969676967696767676767676767676765676567656765656565 - 6565656562656262626565656265626562626262626262626262606262606262 - 6260606060605D6060605D5D606060605D5D605D5D505053505050505050504E - 5050505058585B8080808380837E80807E7E8079797B7676797173737171716E - 6C6E6C6E6C6262626262625D5B5D5B585B5053534B4B4E464946464646434646 - 4B4B495D5D5D6060606262626565656767676C6C6C555555434343414143413E - 43414143414141413E4343434649494949494946494949494646464946464646 - 4646464643464646464643434343434343434343414341434143414343414141 - 4141414141413E4141413E4141413E3E413E41413E3D3E3E3E3E3D3D3D3E3E3D - 3E3D3D3D3D3D3D3D3A3A3D3A3A3838383532323232323232323032323A3A3865 - 67678380808F8F909C9C9CA9A9A94B4E4E2D2B2D2B2B2B2D2B2B2B2B2B2B2828 - 2B2B2B282B28282B282B28282828282828282826282826262626282626262626 - 2626232626262623232623232323232326232323232320232323232023202020 - 202020202020202020201E20201E1E201E1E1E1E1E1E1E1E1E1E1E1E1B1E1E1E - 1E1B1E1B1B1E1B1B1B1B1B1B1B1B1B1B1B1B1B1B191B1B1919191919191B1919 - 1919191919191916161919161616161616161616161616161614141416141614 - 1414141414141414141414141414121412141414121412121412121412121412 - 12121212121212121212120F0F0F1212120F0F0F120F0F120F0F0F0F0F0F0F0F - 0F0D0F0F0F0D0F0D0F0D0D0D0D0D0D0D0D0D0D0D0D0A0D0D0D0A0D0D0A0A0D0A - 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A080A0A080808080A0A - 0808080A08080808080808080808080805080808080508080508050508080508 - 0805080505050505080805050505050305050505030503050305050303050503 - 0303050303030503050303030303030303030303030303030303030003000300 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030302F30302F30302F2F2F30 - 302F2F302F2F2F2F2F2F2F30302F2F2F302F2F2F2F2F2E2F2F2F2F2E2E2E2F2F - 2E2F2F2F2E2F2F2E2E2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D2E2E2E2E - 2D2E2D2D2D2D2D2E2E2E2D2D2D2E2E2D2D2D2D2D2D2D2D2C2C2C2D2D2C2D2C2C - 2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C2C2B2B2B2C2C2C2C2B2B2B2B - 2B2B2B2B2B2B2B2B2B2A2A2B2B2B2B2B2A2B2B2A2B2A2A2A2B2A2A2A2A2A2A29 - 2A292A2A2A292A292A29292929292A2929292A29292929292928292929292928 - 2828282829282828282828282828282727272828282727282827272727272727 - 272727272C2C2C2F2F2F3131313333333535352A2A2A26262626262726262626 - 25272A29292C2B2B2C2B2B2C2A2B2C2B2B2B2A2A2B2A2A2B2A2A2A292A2A2A2A - 292A29292A2A2929292929292929282829292929282829292929282828292828 - 2827282828282828272827282727272727272727272727262727262626272626 - 2726262626262626262626262625252526232223202020201F20201F1F202120 - 2021212929293232323132323131303031312F2F2F2E2E2E2E2E2E2D2D2C2C2D - 2C2B2B2B2B2B2B2B2B2B2B2B2B2A2B2B2A292A2A292926262723232326262628 - 2828282827282828292A2A2B2B2B2525251B1A1C1B1A1C1B1A1B1A1A1C1A1A1B - 1A1A1B1B1A1A1D1D1E1D1D1D1D1D1D1D1D1D1D1D1D1D1C1D1D1D1C1C1C1C1C1C - 1C1C1C1C1C1C1C1B1B1C1B1C1C1B1B1B1B1B1B1B1B1A1B1B1B1A1A1B1A1A1B1B - 1A1A1A1A1A1A1A1A1A191A19191A191919191919191919191818181919181819 - 1818181818181817171716171415151414141414141515151818182F2E2F3434 - 343A3A3A40404045454515141512121211111111111211111211111111111111 - 1010111111101110101010101010100F100F0F0F0F0F100F0F0F0F100F0F0F0F - 0E0F0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0E0D0D0D0D0D - 0D0E0D0D0D0D0D0C0C0D0D0D0D0D0C0C0C0D0D0C0C0C0C0C0C0C0C0C0C0C0B0C - 0B0B0C0C0C0B0B0B0B0B0B0B0B0B0A0A0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A - 0A0A0A0A090A090A090909090A090909090A0909090909090909090909080808 - 0808090809080808080808080808080708080708080807070707070708070707 - 0707070707070706070607060707060707060706060606060606060506060606 - 0605060606050506060506060505050505050505050505050505050404050504 - 0505040404040505040404040404040404040403040404040404030403040303 - 0303030303030303030303020203030303030302030203030202030203030203 - 0202020203020202020202020202020101020102020201020201010202010101 - 0101010101010201010101010101010101010101000100010101010001000000 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F30302F303030303030302F2F2F30 - 2F2F2F2F2F2F2F2F2F2F2F302F2F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2E2E - 2E2F2F2F2E2F2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D2E2D2D2E2D - 2E2D2D2E2D2E2E2D2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2D2C2C2C2D2D2E33 - 33322F2F2F2C2C2C2C2C2C2C2C2B2B2C2C2C2B2B2B2B2C2C2C2B2B2B2C2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2A2B2B2A2A2A2A2A2A2A2A2A2A - 292A2A2A2A292A292A2929292929292929292929292929292929292829282929 - 2829282928282828282828282728272828272727282827272727272727272727 - 2E2E2E2F2F2F3131313333333535352726272626272625272626262625272A29 - 292C2B2B2C2B2B2C2A2B2C2B2B2C2A2B2B2B2A2B2B2B2B2B2A2A2A292A2A2A29 - 292A292929292929292929292929292829282828282929282828282928282828 - 2827282828282828272828282727282727272727272627272727262627272626 - 26262626262626262526262525262525202021202020202020201F2020212021 - 21213030313031313130303031312F2F302E2E2E2E2E2F2E2E2E2D2D2D2C2D2D - 2C2C2D2C2C2C2C2C2C2B2B2B2A2B2B2A2B2A2A2A29292A292929292929282A2A - 2A2A2A2B2C2B2B2625251B1B1C1B1B1C1A1A1B1B1B1B1A1B1B1A1B1B1B1B1B1E - 1E1D1E1E1E1E1D1D1D1D1D1D1D1D1D1D1C1D1D1D1D1C1D1D1C1C1D1C1C1C1C1C - 1C1C1C1C1C1B1B1C1B1B1C1C1B1B1B1B1B1B1B1B1B1A1A1A1B1B1B1A1B1A1A1A - 1A1A1A191A191A1A1A1A19191A1A191919191919191918191818181918181818 - 18181817171615151415141415141414141516151A1A1A2F2F2E3435353A3B3A - 4040414242421212121212121212121211111112121211111111111111101110 - 11101110101111101010101010101010100F0F0F0F100F100F0F0F100F0F0F0F - 0F0F0F0E0F0E0F0E0F0E0E0F0E0F0E0E0E0E0D0E0E0D0E0D0E0E0E0D0D0D0D0D - 0D0D0D0C0D0D0D0D0D0D0C0C0D0C0C0C0C0C0C0C0D0C0C0C0C0C0B0C0B0C0C0B - 0C0C0B0B0B0C0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0B0A0A0A0A0A0A09 - 0A0A0A090A0A0909090A090909090A0909090909080809090909080808080908 - 0808080809080808080808070808080708070808070708070707070707070707 - 0707070606070607060607060606060706070606060606060606060606050606 - 0605060505050506060605050505050505050505050505040405050504040405 - 0405040504040404050404040404040404040404040304030303030304030303 - 0303040303030303030303030303020302020302020303030302030203020202 - 0202030202020202020202020201020202020202020202020101020101010201 - 0101010101010101010101010101010001000001010001010100010001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F3030303030302F30303030302F30 - 3030302F2F30302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2E2F2F2E - 2E2E2F2E2F2E2E2F2E2E2E2E2F2E2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D - 2D2D2D2D2D2E2D2D2D2E2D2D2D2D2D2D2D2D2D2D2C2E2D2E3333343535353737 - 373535353030302C2C2C2B2B2C2B2C2B2B2C2C2B2B2B2B2C2C2B2C2B2B2B2C2B - 2B2B2B2B2B2B2B2B2A2B2A2B2B2A2A2A2B2B2B2A2A2B2B2A2A2A2A2A2A292A2A - 292A2A2A2A2A2A292929292A2929292929292929292928292928292928292828 - 282928282928282828272728282827272728282727272727272727272E2E2E2F - 2F2F3131313333333535352525262626272626262626272625262B2A2B2C2B2B - 2C2C2B2C2B2B2B2A2B2C2B2B2C2A2B2B2A2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A - 29292A2A292A2A29292929292928292928292929292828282828282828282827 - 2828282827272727272827282727272727272626262727262726272727262626 - 2626262526252526262626262323232020202020202020202020201F20202829 - 283131313131313030312F2F302F30302E2E2E2E2F2E2E2E2E2D2E2E2D2D2E2D - 2D2D2D2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C - 2929291C1C1D1C1C1C1B1B1C1B1A1C1B1B1B1B1B1B1C1B1C1E1E1E1E1E1E1D1E - 1E1E1E1E1E1D1D1D1E1D1D1D1D1D1D1C1D1C1D1D1C1D1C1C1D1C1C1C1C1C1C1C - 1C1C1B1C1C1B1C1C1B1B1B1C1B1B1B1B1B1B1A1B1B1A1B1A1A1A1B1A1A1A1A1A - 1A1A1A191A19191A1A191A191919191919191819181919191818181818181818 - 171616161514151415151415151515151D1D1E3030303636363B3C3B41414138 - 3838121212121212121212111112121211111111111111111111111011101010 - 1111111011101010101010101010100F10100F0F0F10100F0F100F0F0F0F0F0F - 0F0E0E0F0F0E0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0D0D0E0D0D0D - 0D0D0D0D0D0D0D0C0D0C0C0C0D0C0D0C0D0C0C0C0C0C0C0C0C0C0C0B0C0B0B0B - 0B0B0C0C0B0C0B0B0B0B0B0A0B0B0B0A0A0B0B0A0A0A0A0A0A0A0B0A0A0A0A09 - 0A0A0A0A0A090A0A09090A090909090909090909090908080809080809080809 - 0808080808080808080808070807080708070807080707070708070707070707 - 0607070706070707070707060606060706060606060606060606060606050605 - 0606060506050605050505050505050505040505050405050504040504050404 - 0404050404040404040404030404030304040304040404030304030403030303 - 0303030403030303030303030303030302030302030202020203030303030202 - 0202020202020202020202020201020102020202010202010202020201010201 - 0201010201010101010101010101010101010101000000010000000001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030302F2F30303030302F2F302F - 2F2F2F30302F302F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2F2F2F2F2E - 2E2E2E2F2E2F2E2E2E2E2E2F2E2E2E2F2E2E2E2E2E2E2E2E2E2E2D2E2E2D2E2D - 2E2D2D2D2D2D2E2D2D2D2D2D2D2D2F2F2F333333343434363636373737393939 - 3A3A3A3737373030302C2C2C2C2B2C2C2C2C2B2C2B2C2C2C2C2C2B2B2B2B2B2C - 2B2B2B2B2B2B2B2B2A2B2B2A2B2A2B2A2B2B2A2B2A2A2A2A2A2A2A2A29292A2A - 2A292A2929292A2A292929292929292929292929292929292829282828292829 - 2828292828282827282728272827282728282727272828282F2E2E3030303232 - 323434343434342525262626272626272626272625262B2B2B2C2C2B2C2B2B2C - 2B2B2C2B2B2B2B2B2C2B2B2B2A2B2B2B2A2B2A2A2A2A2A292A2A29292A29292A - 29292A2929292929292929292928292929292928282828282828292828272828 - 2828272827272727272727272727272727272726272626272627272626272626 - 2626262626252526252525202021202020202020202020201F1F202020292928 - 2B2A2A2C2C2C2A2A2B2A2A2B2F2F302F2F302F2F2F2F2E2F2E2F2F2E2E2E2D2D - 2D2D2E2D2D2D2D2C2D2C2D2D2D2D2D2C2C2C2C2C2C2C2D2D2D2A2A291D1C1E1B - 1B1C1B1B1C1B1B1C1B1B1B1B1B1C1B1C1B1F1E1E1E1E1F1E1E1E1E1E1E1D1E1E - 1E1D1E1D1D1D1E1D1D1D1D1D1C1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C - 1C1B1B1C1B1B1C1B1B1B1B1B1B1B1B1B1A1B1B1A1B1B1A1B1B1A1A1B1A1A1A19 - 1A1A191A1A191A19191919191919191919191919181819191818181818161616 - 1515151514151414141516162323233131313737373E3E3E4343423333321312 - 1213121211121212111212111111121111121111111111111111111011101010 - 1010101010101010101010100F10101010100F100F0F0F100F100F0F0F0F0F0F - 0E0E0F0E0F0E0F0E0E0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0E0D0D0D0D0D0D - 0E0D0D0D0D0D0D0D0C0C0D0C0D0C0D0D0C0C0C0C0C0C0C0C0C0B0C0B0B0B0C0C - 0B0B0C0B0C0B0B0B0B0B0B0B0A0B0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A090A - 0A090A0A0A0A0A09090A0909090A090909090909090809090809080909080808 - 0809080808080808080807080707080807070807080707070708070707070707 - 0707070607060606060607060606070706060606060606060606050605060505 - 0605060606060505050505050505050505050405040405040505050504040405 - 0404040504040404040404040404040403040404030403030304030303030303 - 0403030303030303030303030303030302020302030302020202030202020202 - 0202020302020202020202020202020202020202010101010101020102010102 - 0101010101010101010201010001010100010100010100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030302F30303030302F2F2F302F2F - 2F2F30302F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2F2F2F2E2F2E2E2E2F - 2E2F2E2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2D2E2E2D2E2E2E2D2D2E2D2D2D2D - 2D2E2D2D2D2D2E2F2F2F3232323333333535353737373838383939393A3A3A3B - 3B3B3B3B3B3737373030302C2C2C2C2C2C2C2B2B2B2B2C2C2B2B2B2C2B2B2B2B - 2B2B2B2A2B2B2A2B2A2A2A2A2A2B2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29 - 2A2A292A292A292A292929292929292929292929292929292929292928282928 - 2828282828282828272728272827282727292A2A2E2E2E303030323232343434 - 3232322525262626272626272626272626272C2C2B2D2C2C2C2B2B2C2C2B2C2B - 2B2C2B2B2C2B2B2C2A2B2B2B2B2B2B2B2A2A2A2A2A2A292A2A2A2A2A29292A29 - 292929292A2A2929292929292929292929282829282829282828282828272828 - 2828282827272728272827272727272727262726262626272627262626262626 - 262626252626262322232121202020212020201F20201F201F201F1F201F201F - 201F1F1F1F1F1F1E1E1E1E1E1F1E1F1F202322232222232525252726272A2929 - 2E2E2D2E2E2E2D2D2E2E2E2D2D2D2D2E2D2D2C2D2C1D1D1E1B1C1D1C1C1C1B1C - 1C1C1B1C1B1B1C1C1C1C1F1F1E1E1E1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D - 1E1D1E1E1D1D1E1D1E1D1D1C1D1C1C1D1D1D1D1D1D1C1D1C1C1D1C1C1C1C1C1C - 1C1C1B1B1B1C1B1C1C1B1B1B1B1A1B1B1B1B1A1A1B1A1A1B1B1B1A1A1A1A1A1A - 1A19191A191A191919191A191919191919181919181819181815161515151515 - 15151514141616162525253232323939393E3E3E4443432D2C2D121212121312 - 1213121212121212121211111112111212111112111111111111111010101011 - 101010101011101010100F101010100F100F1010100F0F0F0F0E0F0F0E0F0F0F - 0F0E0E0F0F0E0E0E0E0E0E0E0E0E0E0D0E0E0E0D0D0D0D0D0E0E0D0D0D0D0D0D - 0D0D0D0D0D0C0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0C0B0B - 0C0B0B0B0B0C0B0B0B0B0B0B0B0B0A0A0B0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A - 090A0A0A09090A0A090909090909090909090908080809080808090808080908 - 0908080808080807080808080707080707070807070707070707070707070707 - 0707070706070707060706060606060606060606060506060606060505050506 - 0605060505050605050605050505050505040505050404040404050504050504 - 0404050404040404040404040403030403040404040404040403040403030303 - 0303030303030303030302020303030202030203030302020302030202020202 - 0302030202020202020202020201020201010202020102010101010101010101 - 0101010101010101010101010001010000010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030302F303030303030302F2F302F - 302F2F2F2F302F2F2F2F2F2F2F2F2F2F2F2E2F2F2E2F2F2E2F2F2F2E2F2F2F2F - 2E2E2E2E2E2E2F2F2E2E2E2E2E2E2E2E2E2E2E2D2E2D2E2E2D2D2D2E2D2D2D2D - 2F30303232323333333434343636363838383939393A3A3A3B3B3B3B3B3B3C3C - 3C3B3B3B3B3B3B3635362E2D2E2B2C2B2B2B2C2B2C2C2C2B2B2B2B2C2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2B2B2A2A2A2A2A2A2A292A2A2A2A2A - 29292A292929292A2A2929292929292929292929292928292929292829282828 - 282828282728282727282828272929292F2E2F30303133323234343432323226 - 26272626272626272626272626272D2C2C2C2C2B2D2B2B2C2C2B2C2B2C2C2B2B - 2C2B2B2C2B2A2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A292A2929292929 - 2929292929292929292829292928292928282828282928282828282728272728 - 2727272827282727272827272727272727272727272627262626272626262626 - 252626262525202121202120202020202020201F1F201F1F20201F1F1F201F1F - 1F1F1E1F1F1F1F1E1F1E1E1E1E1F1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1E - 1E1F222222252524272827292A292020201C1D1D1C1C1D1C1B1D1C1B1C1B1C1D - 1C1B1C1E1E1E1F1F1F1F1F1E1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D1E1E1D1D - 1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1D1C1D1C1C1C1C1C1C1C1B1B1C1B1B - 1C1B1B1C1C1C1B1B1B1B1B1B1B1B1B1B1A1B1B1A1A1A1B1A1A1A1A1A1A1A1A1A - 1A1A1A1A1A191A19191919191919191918181818171615151515151516151515 - 1518181729282834343439393940404045444520202012121212131313131212 - 1212121212121212111211121111121211111111111111111111111111101111 - 101011101010100F0F0F101010101010100F0F100F0F0F0F0F0F0F0F0F0F0F0F - 0F0E0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0E0D0D0D0D0D0E0D0D0D0D - 0D0D0C0C0C0D0D0C0D0C0D0C0C0D0C0C0C0C0C0C0B0C0C0C0B0C0C0C0B0C0B0B - 0B0B0B0B0B0B0B0A0B0B0B0B0A0A0B0A0A0A0B0A0A0A0A0A0A0A0A090A0A0A0A - 09090A0A09090A0909090A090909090908090908090908090908090908090808 - 0808080808070808080708070808070708070707070707070707070707070707 - 0707060706070607060606060606060606060606060606060606060506060506 - 0506050506050505060505050505050505050505050504050504050405040404 - 0404040404040404040403040404040404030403030303040303030404030304 - 0303030303030303030303030303030302020303020202030202020202030202 - 0202020202020202020202020202020201020201020101020102020101010101 - 0101010102010101000101000000010001000001000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030302F3030303030303030303030302F302F3030303030 - 2F2F2F2F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2F2E2E2F2F2E - 2E2E2F2E2E2E2F2F2E2E2E2E2E2E2E2E2E2E2D2D2E2E2D2E2D302F3032323234 - 33333534343636363838383939393B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C - 3C3C3C3B3B3B3B3B3B3535342E2E2E2C2C2C2B2C2B2B2B2B2B2B2B2B2C2B2B2B - 2B2B2B2A2A2A2B2B2B2A2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A292A2929 - 29292A292A2929292A2929292929292929292929282929282928292829282828 - 2828282828282827282B2A2B2E2E2F3031303332333434342D2D2D2626272626 - 272626272626272727272D2C2C2C2C2B2D2B2C2D2B2B2C2B2B2D2B2B2C2B2B2C - 2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2B2A2A2A2A292A2A292A2A2929292929 - 2929292929292929292929292828292829292828282828282828282827282827 - 2728272727272727272827272727262727272726262626262627262626252626 - 25252322232021212020202120212020201F202020202020201F201F1F1F1F1F - 1F1F1F1F1F1F1E1E1F1F1F1F1E1F1F1E1E1E1E1E1D1D1E1D1D1E1D1D1D1E1D1D - 1E1D1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1D1C1C1D1C1C1C1B1B1C1E1E1F1F - 20201F1F201F1F1F1F1F1E1F1F1F1F1E1E1F1E1F1E1E1E1E1E1E1E1E1D1E1E1E - 1E1D1D1D1D1E1D1D1D1C1D1D1D1C1D1C1C1C1C1C1D1C1C1C1C1C1C1C1B1C1C1C - 1C1C1C1B1B1C1C1B1B1B1A1B1B1B1B1A1B1B1A1B1B1B1A1A1B1A1A1A1A191A1A - 1A1A191919191919191919191919181818161516161515151515161617191919 - 2E2D2E3434343A3A3A4040404545451919191213131313131213131212121212 - 1212121212121212111111121111121111111111111110101010111110101011 - 101010101010101010101010101010100F0F0F100F0F0F0F0F0F0E0F0F0F0F0E - 0F0F0E0E0E0E0E0E0E0D0E0E0E0E0D0D0D0E0D0D0E0E0D0E0D0E0D0D0D0D0D0D - 0C0D0D0D0D0C0C0C0C0C0D0C0C0C0C0C0C0C0C0C0B0C0B0C0B0B0C0B0B0B0B0B - 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A - 0A0A0A090A090A090A0909090909090909090909090908090909090808080808 - 0808080808080808070707080707080707080807070807070706070707060707 - 0606070707060707060706060706060606060606060606050605050605050505 - 0606060505050605050504050404040505050405050504050505040404050404 - 0404040504040404040403040304030304040404030304040403040303040303 - 0304030302020303030203030303030202030303030203020202020302030203 - 0202020202020202020202020202010202020102010101020201010101010101 - 0101010101010100010100010101000001000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030302F30302F2F30302F30303030302F3030 - 2F2F2F302F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2F2F2F2E2E2F - 2F2E2F2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D3131303333323334343534343636 - 373938383B3A3A3737373231323A3A3A3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C - 3C3C3C3C3C3A3B3B3B3B3B3534342E2E2E2B2B2B2B2B2C2C2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2A2A2A2B2A2A2A2A2B2A2A2A2A2A2A2A2A2A2A2A2929292A - 2A292A2A292929292A2929292929292929292929292928282928282828282828 - 28282828282B2B2B2F2F2F3131313333333434342E2E2E262627262627262627 - 2626272828282D2C2C2D2C2C2D2C2C2C2C2B2C2C2C2C2B2B2C2B2C2C2B2B2C2B - 2A2B2B2A2B2B2A2A2A2A2B2A2A2B2A2A2A2A2A2A29292A292A292A2A2A2A2929 - 2A29292929292929282829282828282828292928282828282828282828282827 - 2828272828282727272727272726272726262627262626262626262626262625 - 252121212020202020212020202020202020201F202020201F1F1F1F1F20201F - 1F1F1F1E1E1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1E1D1D1D - 1D1D1D1D1C1D1D1D1D1C1C1D1C1D1D1C1C1D1C1C1D1E1D1E2020201F1F1F1F1F - 1F1F1F1F1F1F1F1F1F1F1F1F1E1F1E1E1F1E1E1E1E1E1E1E1E1D1E1E1E1D1E1D - 1E1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1D1D1C1C1C1C1C1C1C1C1B1B1C1C1B - 1C1B1B1B1B1C1B1B1B1B1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A1A1A - 191A1A1919191919191A1717171516161615161616161617161A1B1A2F2F2F35 - 35353B3B3B404040454545131313121313121313131213121213121212121312 - 1212121211121112121112111112111112111110111111111011101010101011 - 111010101010100F10100F100F100F10100F100F0F0F0F0F0F0F0F0F0E0E0F0E - 0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0E0E0D0E0E0E0D0D0D0D0D0D0D0C0D0D - 0D0D0D0D0C0C0C0C0D0C0C0C0C0C0C0C0C0C0B0C0C0B0C0B0B0B0C0B0C0B0B0B - 0B0B0B0B0B0B0A0B0B0B0B0B0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A - 090A0A0909090909090A09090909090808090908090809090908080908080808 - 0808080707080708070708070807080707070707070707070707070707070707 - 0606060607060706070606060606060606060506050605060606060606050605 - 0506050506050505050505050505050404050504040504040404040505040404 - 0404040404040304040304040404040304030304040304040303030303030303 - 0302030303030303030303030202020203020302030202030203030302020202 - 0202020201020202020201020202020201010201010102010101020201010101 - 0101010101010101010101000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030302F2F302F2F30302F2F302F2F - 2F2F2F2F2F2F302F2F2F2E2F2F2F2F2E2E2F2F2F2F2F2F2F2F2F2E2F2E2E2E2F - 2E2F2E2E2E2E2E2E2E2E2E3131303233333433343535353737373938383A3A3A - 3535362B2B2B2C2C2C2C2C2C3232323B3B3A3D3D3D3D3D3D3C3C3C3C3C3C3C3C - 3C3C3C3C3C3C3C3B3A3B3B3A3A3535352E2D2D2B2C2B2B2B2B2B2B2B2A2B2B2B - 2B2B2B2B2B2B2A2B2A2B2A2A2A2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292A - 2929292929292929292929292929292929292828292928282828292828282828 - 282C2C2B302F303132323333343636362C2C2C26262726262726262726262728 - 28282D2C2C2D2C2C2D2C2C2C2C2C2D2C2B2C2B2C2C2B2C2C2B2B2C2B2B2B2B2B - 2B2B2B2B2A2B2A2B2A2A2A2A2A2A2A2A2A292A292A2A292A292A292A292A292A - 2929292929292928292928292928292928292828282927282828282827282827 - 2827272727272827272727272727272726262727262726262626262626242324 - 222122222122212121212121202021202020201F201F1F1F1F1F1F1F1F1F1E1E - 1F1F1E1F1E1F1E1E1E1E1F1E1E1E1E1E1E1E1E1E1E1D1D1D1E1D1E1D1D1D1E1D - 1D1D1C1D1D1C1C1D1D1D1D1D1D1D1E1E1E2020201F202020201F1F1F1F1F201F - 1F1F1F1F1F1F1F1F1F1E1F1F1F1E1E1F1E1E1E1E1E1E1E1E1D1E1E1E1D1D1D1D - 1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1D1C1D1D1D1C1C1C1C1C1C1B1C1B1C1C1B - 1C1C1B1B1C1B1B1B1B1B1A1B1A1A1A1A1B1B1B1A1A1A1A1A1A1A1A1A191A1A1A - 1A191A19191A1718171616161616151515151617171E1E1E3131303636363C3C - 3C4242423C3C3C14141313131313131212131313131312121312121212121212 - 1212111212111211121212111111111111111111101110111011101010101110 - 1010101010100F10100F10100F0F0F0F100F0F0F0F0F0F0F0F0F0E0E0F0E0F0E - 0E0E0E0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0C0D - 0D0D0D0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0C0B0C0C0B0B0B0B0B - 0B0B0B0B0A0B0B0A0B0A0B0A0B0A0B0A0A0A0A0A0A0A0A0A090A0A0A09090909 - 0A090A090A090909090909090909090908090908080908080809090808080808 - 0808080808080708080808080707070707070807070707070707070707060607 - 0706060606070606060606060606060606060606050605050606060506050505 - 0505050505050505050505050504050405040405050404040404040404040404 - 0404040404040404040304040304040403030304030403030303030404030303 - 0303030303030303030303020203020203020202020202030202030202020202 - 0202020202020202020102020101020101020201010101010101010101010101 - 0100000101000000000001000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F30302F302F2F2F2F2F2F302F3030 - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2E2E2F2F2E2F2E2F2F2E2F2E2F - 2E2F2E2F3131313333333434343636363737373839393B3B3B3434332B2B2C2C - 2C2C2C2C2C2C2C2C2B2C2C2C2C2C3232333A3B3A3D3D3D3D3D3D3C3C3C3C3C3C - 3C3C3C3C3C3C3B3B3B3A3A3A3B3A3B3434352D2D2D2B2B2B2B2B2B2B2B2B2A2B - 2B2B2A2A2B2B2A2A2B2A2B2A2B2A2B2A2A2A2A292A2A29292A292A2A292A2A2A - 2A29292A292A29292929292929292928282929282828292828282828282D2D2D - 3131313332323435343636362B2B2A2626282626272626272626272A292A2D2C - 2C2D2C2C2D2C2C2D2C2C2C2C2C2D2B2B2C2C2B2C2B2B2C2B2B2B2B2B2B2B2B2B - 2B2B2B2B2A2A2B2A2A2B2A2B2A2A2A2A2A2A2A2A2A2A292A2A292A2A29292A29 - 2929292929292929292828282828292929292828282728282828282828272727 - 2827272727282727272726262626262626272626262726272626262625262626 - 2526262626252526252525252525242525242424242223232223222222212121 - 202021201F201E1F1E1E1E1E1E1E1E1E1D1E1E1D1E1E1D1D1E1D1D1D1D1D1D1D - 1D1D1D1D1C1C1D1F1E1F2020202020202020201F1F201F1F201F1F201F20201F - 1F1F1F1F1F1E1F1F1F1F1F1E1F1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1E1D1D1D - 1D1D1D1D1D1C1C1C1D1C1D1D1C1C1D1C1C1D1C1C1D1C1C1C1C1C1C1C1C1B1B1B - 1C1C1B1B1B1B1B1B1B1B1B1B1B1A1B1B1A1A1A1A1A1A1A1A1A1A191A1A191A19 - 191A1716181616161616161616161717172322223132313837373D3D3D434343 - 3636361314131313131313131313131212121212131312131312121212121212 - 1211111212111212121111111111111111111011101010111111101010101010 - 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0F0E0E - 0E0E0E0E0E0E0E0E0E0E0E0E0D0E0D0D0D0E0D0D0E0D0D0D0D0D0D0D0D0D0D0C - 0D0C0D0C0C0C0D0C0C0C0C0C0D0C0C0C0C0B0C0C0C0C0C0B0C0C0B0B0B0B0B0B - 0B0B0B0B0B0A0B0B0B0B0A0B0A0A0A0A0B0A0A0A0A0A0A0A0A0A0A09090A0A09 - 09090909090A0A09090909090909090909080809080908080809080808080808 - 0808070808080807070708070808070707070807070707070707070707070706 - 0607060607060606060606060606060606060606060505050606050605050606 - 0605050505050505050504050505050505040504050405050504040404040404 - 0404040404040404040403040304040303040304030404030303030303030303 - 0303030303030302020302020302030203020202020302020302030202020202 - 0202020202010202020202020101010101020101010101010101010101010101 - 0101000101000101000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030302F30302F3030302F30302F30302F3030302F2F2F3030302F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2F2F2F2F2F2F2E2F2E2E2E2E313131 - 3333333535343636363838383939383B3B3A3232322C2B2C2D2D2D2D2D2C2C2C - 2C2C2C2C2C2C2C2B2B2C2C2C2C2C2C2C3332323A3B3B3D3D3D3C3C3C3C3C3C3C - 3C3B3C3C3C3C3C3C3B3B3A3A3A3A3A3B3A3434352D2D2D2B2B2B2B2B2A2B2B2B - 2B2B2A2B2A2A2A2A2B2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2929292929292A - 292A292A2A29292929292929292929292928292928282C2C2C2F2F2F31313134 - 34333534353736362B2A2A2727272626272626272626272A2A2A2D2C2C2D2C2C - 2D2C2C2D2C2C2D2C2C2D2B2C2C2B2B2C2C2C2C2C2C2C2C2C2B2C2B2B2B2B2B2A - 2A2B2B2B2A2B2A2A2A2A2A2A2A2A2A2A2A292A2A2A29292A2A29292A292A2929 - 2929292829292829282929282928282828282828282828282828282827272728 - 2727272727272727272727262727262626262626262626262626252626262626 - 2525262525262525252525252525252524252524242424252424242424242423 - 23232323232222232221212121212020201F1F1F1E1D1E1D1E1D1D1E1D1D1D1D - 1E1D1D202121202120202020202021202020201F201F1F201F1F1F1F1F1F1F1F - 1F1F1F1E1F1F1E1E1F1E1E1E1E1E1F1E1E1E1E1E1E1D1D1D1D1D1E1D1E1E1D1D - 1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1D1C1C1D1C1C1B1C1C1B1B1B1B1B1B1C - 1B1C1B1B1B1B1B1A1B1B1B1B1B1B1B1A1A1A1B1B1A1A1A1A1A1A1A19191A1616 - 161616161616161616161818182524253233323838383E3E3E4444442D2D2D13 - 1414131314131313131313131313121312121312121212131312121212121212 - 1111121211111212111111121111111011111111101111111011101011101010 - 1010101010100F0F100F0F0F10100F0F0F0F0F0F0F0F0F0F0E0E0F0F0E0E0E0F - 0F0E0E0E0E0E0E0E0E0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C - 0D0C0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0C0B0B0C0B0B0B0B0B0B - 0B0B0B0B0A0A0B0B0A0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A0A090A0A0A090A0A - 0A0A090909090909090909080909080909080808090908080908080808080808 - 0807070808070707080707070708070707070707070707070706060707070707 - 0707070606060706060606060605050606060606060505050605060605060505 - 0505050506050505050505040405050404040405050405050404040404040404 - 0403040404030403040403040403040404030303040303030303030303030303 - 0203030202030303030303020302020303030302030203020202020202020202 - 0202010201020202010202010202010102020101010101010101010101010101 - 0001000000000000010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 2F30303030303030303030302F30302F2F2F2F2F302F302F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2E2F2F2E2F2F2E2F2F2E2E2E32323133333334343436 - 37363838383A3A3A3A3A3A3231332C2C2C2D2D2D2C2C2D2C2D2C2C2C2C2C2C2D - 2D2C2C2C2C2C2B2C2C2C2C2C2C2B2B2C2B2B3333333B3B3B3D3D3D3C3C3C3C3C - 3C3C3C3B3B3C3C3C3C3C3C3C3B3A3A3B3B3A3A3333332C2C2C2B2B2A2B2B2A2A - 2A2A2A2B2B2A2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A29292A2A2A29292929292A - 2929292A29292929292928292D2D2D2F2F303030303131313333333535353636 - 363736372727272627282627272726272626272A2A2A2D2D2C2D2C2C2D2C2C2D - 2C2C2D2C2C2D2C2C2D2B2B2D2C2C2C2C2C2C2B2B2B2C2B2B2B2B2B2B2B2B2B2B - 2A2B2B2A2A2B2A2A2A2A2A2B292A292A292A292A292A292A2929292929292929 - 2929282929292928282828282829282928282928272828282828282827272827 - 2727272727272727272627272726262726262627262626262625262625252626 - 2525252525252525252525252524242525242524242424242424242423232423 - 23232323242223232222232222232221222221212121201F20201F1F21212121 - 2120212121202120202020202020202020201F201F1F201F1F201F1F1F1F1F1F - 1F1F1F1F1F1F1E1F1E1F1E1F1E1E1E1E1E1E1E1E1E1E1E1D1E1D1D1D1E1D1D1D - 1D1D1D1D1C1C1D1C1C1C1C1D1D1C1C1C1C1C1C1C1C1C1C1B1C1C1C1C1B1B1B1B - 1B1B1B1B1B1B1B1B1A1B1A1A1A1A1B1A1A1B1A1A1A1A1A191919161617161617 - 1616161616161919192A2A2A3334343A3A393F3F3F4545452423241314141414 - 1313141313131313131313131313131312131312131212121212121212121212 - 1212121111121211111111111111111111101010111110111111101010101010 - 10101010100F100F100F10100F100F0F0F0F0F0F0F0E0F0F0E0F0E0E0F0F0E0F - 0E0E0E0E0E0E0E0E0E0E0D0D0E0D0E0D0D0D0E0D0D0D0D0D0D0C0D0D0D0C0D0C - 0D0D0C0D0C0D0C0C0C0C0C0B0C0C0C0C0B0C0C0B0B0C0B0B0B0B0B0B0C0B0B0B - 0A0B0B0B0B0A0B0A0A0B0A0A0B0A0B0A0A0A0A0A0A0A090A09090A090A0A0A09 - 0909090909090909090908090909080908090808080908080908090808080808 - 0808070808070808070708080807070707070707070607070707060707060606 - 0606070606060606060706060606060606060506060505050605050505050505 - 0505050505050504050504050504040404040505040504040504040404040404 - 0404040404030404030403040303040304030404030303030303030303030303 - 0303030203030303030202030302020202030202020202020202020202020201 - 0202020201020102020201020201010101020101010101010100010101010101 - 0100010000000101000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F3030302F302F2F302F302F2F302F302F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2E2F2F3132323333333534353637373838383A3A - 3B3A3A3A2F2F2F2C2C2C2C2C2D2D2D2D2C2D2C2C2C2D2D2C2C2C2D2C2D2D2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C2B2C2D2C2C3434353B3C3C3D3D3D3C3C3C - 3C3C3C3C3C3B3B3C3C3C3B3B3B3B3C3B3A3A39393A3333332C2C2C2B2B2A2B2B - 2A2B2B2B2A2B2B2A2A2A2A2A2A2A2A2A2A2A292A2A292A2A2A29292A2A2A2929 - 292A2D2D2E303030303030313030313131333333353535363637373737383838 - 2727282627282727282626272626282B2B2B2D2D2C2D2C2C2D2C2C2D2C2C2D2C - 2C2D2C2C2D2C2C2D2B2C2C2C2C2C2B2C2B2B2C2B2B2B2B2B2B2B2B2A2B2B2A2A - 2A2B2A2B2B2A2B2B2A2A2A2A2A2A2A2A2A292A292929292A2A2A292929282929 - 2928292828292829292828282828282828282828282828282827272828272727 - 2827272727272727272727262626262626262626262626262626262626252626 - 2625252525252525252525242525252424242424242424242323242323242323 - 2423232422222322222322222322222322222222212221212221212120212121 - 212121202120202021202020202020201F20201F1F201F2020201F1F1F1F1F1F - 1F1F1F1E1F1F1E1E1E1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1E1D1E1D1D - 1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1D1C1C1C1C1B1B1C1C1C1B1B1B1B1B1B - 1C1B1B1B1B1A1A1B1B1B1A1A1B1A1A1A1A1A1A19191916161617161717161617 - 1717191A192D2D2D3435353A3A3A4041404545451D1D1D141414141414141413 - 1413131313131313131313121313131313131212121212121212121212121112 - 1111121111111112111111111111111111111010111010101010101010101010 - 10100F0F0F0F10101010100F0F0F0F0F0F0F0F0E0E0F0F0F0E0F0E0E0E0F0E0E - 0E0E0E0E0E0E0E0D0E0E0D0E0D0E0D0E0E0E0D0D0D0D0D0D0D0C0D0C0C0D0C0C - 0C0C0D0D0C0C0C0C0C0C0C0C0C0C0C0B0B0C0C0B0B0B0C0B0B0C0B0B0B0B0B0B - 0B0A0B0B0B0B0A0B0A0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A090A0A0A09090A09 - 09090909090A0909090909090809090908080908080808080808090808080807 - 0807080808080708070707070707070707070707070707060707070607060706 - 0706060606060606060606060606060506060606050506060606050505050506 - 0505050505050505050405040404040405040404050504050404040404040404 - 0404040404040404030304040303040303030404030303030303030303030303 - 0203020203020303020203030202020202020302020202020202020202020202 - 0201020202020101010101010201010102010101010101010101010101010000 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030302F302F302F303030302F2F302F2F302F2F302F - 2F2F2F2F2F2F2F2F3232323333333534343736363838383A3A3A3A3B3A2F302F - 2C2D2C2D2D2D2D2D2D2D2D2D2D2D2C2D2D2C2D2E2D2D2D2D2C2C2D2C2D2C2C2C - 2C2C2C2C2C2C2C2C2C2C2B2C2C2C2B2C2B2B2B2D2C2D3435343B3B3B3D3D3D3C - 3C3C3C3B3C3B3B3C3C3B3B3B3C3B3B3C3C3A3A3B3939393333332C2C2C2A2A2B - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29292A292A2A2D2D2D2F30303130 - 3031323132323133333233343336353637373737373838393831313127272826 - 27272727272627282726272B2B2B2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C - 2D2C2C2D2C2C2C2C2C2C2B2C2C2C2C2C2B2C2B2B2B2B2B2B2B2B2B2A2B2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292A292A29292A2929292929292929 - 2929292828282828282828282828282828282828272727272728282727272727 - 2727272627272727272727262626262626272626262626262626262525262525 - 2525252525252525242525252524242524242424242424232324232324232324 - 2222242222232222232222232222232122222222222122212121212121212021 - 2120212020202020212021201F20202020201F201F1F1F20201F201F1F1F1F1F - 1F1F1E1E1F1F1F1F1E1E1E1E1E1E1D1E1E1E1E1D1E1D1D1E1D1D1D1D1D1D1D1C - 1D1D1D1D1C1D1D1D1D1C1C1C1C1D1D1C1C1C1C1C1B1C1C1B1B1C1B1B1B1B1B1B - 1B1B1B1B1B1B1B1A1A1A1B1A1A1A1A1919191717171717171717171717181B1A - 1A2F2F2F3435353B3C3C40404046454515141514141514141414141313141313 - 1413131313131313131312131313121312121313121212121212121212121211 - 1111121211111111111111111111111111111111101010101010101010101010 - 100F0F100F10100F0F100F0F0F0F0F0F0F0F0F0E0F0E0F0F0F0F0E0F0E0E0E0E - 0E0E0E0D0E0E0E0E0E0D0E0D0D0D0D0E0D0E0D0D0D0D0D0D0D0C0D0D0C0D0D0C - 0C0D0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0B0C0B0B0C0B0B0B0C0B0B0B0A0B0B - 0B0A0B0B0B0A0B0A0A0B0A0A0A0A0A0A090A0A090A0A0A0A0909090A09090A09 - 0909090909090809090909090909080809080809090808080808080808070807 - 0708080708080808070707070708070707070707060607060707070607060706 - 0707060706060606060606060606050605050605050505050606060606050505 - 0505050405050504050405050505040505040404050404040404040404040404 - 0404040404040404040403030403030304030303030303030303030302030303 - 0303030302030303030202020203030303020202020203020202020202020201 - 0202010201020101010101020102010101010101010001000100010100000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030302F3030302F30302F302F302F302F302F2F2F302F2F30302F2F2F2F2F2F - 2F3232323333333534343637373939383B3B3A3B3A3A302F302C2C2C2D2D2D2D - 2D2D2D2D2D2C2D2C2D2D2D2D2E2F3433333534343131312E2E2E2C2C2C2C2C2C - 2C2C2B2C2C2C2B2C2C2C2C2B2B2B2B2B2B2B2B2C2B2C2C2C3434343B3B3B3D3D - 3D3D3D3D3B3B3C3C3C3B3C3B3C3B3B3B3A3A3A3A3A3A3938393332332C2B2B2A - 2A2B2A2B2A2A2B2A2A2A2A2A2A2A2C2C2C2F2E2F303030323132323232333333 - 3434343535353636353636373737383131322A292A2727282727282727282627 - 282727272727272D2D2C2D2D2C2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D - 2C2C2D2C2C2C2C2B2C2B2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2B2B - 2A2A2B2A2A2A2A2A2A2A292A2A2A2A292A2A2A29292A292A2929292929292928 - 2929292928292928282828282828282828282827272727272727282827272727 - 2727262727272626272726262626262726262626262626262526252526252525 - 2525252525252525252525252524242424242424232423232423232423232422 - 2323232223222223212223222222222122222222222121212121212120202121 - 212020202120202020202020201F201F201F1F201F201F1F1F1F1F1F1F1F1F1F - 1F1F1E1E1F1F1E1E1F1E1F1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D - 1D1D1C1C1D1C1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1B1C1C1C1C1B1C1B1B - 1B1B1A1B1B1A1B1B1A1A1B1918181717171716171716171717171E1E1F313030 - 3737373C3C3B4343433F40401514141414141514141414141414131414131313 - 1413131313131313131313121212121312131212121212121212121112121212 - 1212111112111111111111111111101111101011111010111010101010101010 - 100F0F0F0F0F0F0F0F0F0F100F0F0F0F0F0F0F0F0F0E0F0E0F0E0E0F0F0E0E0E - 0E0E0D0E0E0E0D0E0E0D0D0D0E0D0D0D0D0D0D0D0D0D0D0D0D0C0D0D0D0D0D0D - 0C0D0C0C0D0C0C0C0C0C0C0C0C0C0C0C0B0C0C0C0C0B0B0B0B0B0B0B0B0B0B0A - 0A0B0A0A0B0A0A0B0A0A0A0A0B0A0A0A0A0A0A090A090A09090A0A0A090A0909 - 0A09090909090909080909080908080909080809080808090808080807080807 - 0707070808070808080707070707070707070707070607070607070606060607 - 0607060606060606060605060605050506050605060506050506060505050505 - 0505050505040505040505050405050505040505040405040404040404040403 - 0304040403040404030304030303030303030303030303030303030303030303 - 0302030203020202030202030302030202020203020202020202020202020102 - 0201010102010201020101010101010201010101000101000101010101000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030303030302F3030 - 302F302F303030303030302F30302F2F2F2F2F2F2F2F2F2F2F30323232333333 - 3535353636373938393B3A3B3B3B3B2F302F2C2C2D2E2D2E2E2D2D2D2D2D2D2D - 2D2D2D2D2E2E2F3534343434353435353535343435353232312E2E2D2C2C2C2C - 2C2C2C2C2C2C2C2C2B2C2B2B2B2C2C2B2B2B2B2C2B2C2B2D2C2C3434343B3B3B - 3C3D3D3B3C3B3B3C3B3C3B3B3B3B3B3B3B3B3A3A3A3A3A3A3738373231322C2C - 2C2A2B2A2B2C2B2F2F2F32323232323132323233333234343436353536363638 - 3737383838303030282828272828282728272728272728272728272628262728 - 2726282E2D2C2E2D2C2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C - 2C2C2C2B2C2C2C2C2B2B2B2C2C2B2B2B2B2B2C2B2B2B2B2B2B2B2B2B2B2B2B2B - 2A2B2B2B2A2A2A2A2A2A2A2A2A2A292A2A29292A29292929292A282929292828 - 2928292828282829282828282828282828282828282728272727272827272727 - 2727272726272727262626262627272626262625262625262525252526262526 - 2525252525252524252424252424252424252323242323242323242323232322 - 2322222322222322222221222222222222212122212121212121212121212021 - 21202021202121202020202020201F20202020201F1F201F201F1F1F1F1F1F1F - 1E1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1D1E1E1E1D1E1D1D1D1D1D1E1D1D1D1D - 1D1C1C1C1D1D1C1D1D1C1C1D1C1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1B1B1B - 1B1B1B1A1B1A1B1717191717181717171717171818172122223233323737373E - 3E3E4444443A3A3A141515141414141414141414141413131414131314131313 - 1313131313131313121312121212121212131212131212121112121211121112 - 1111111111121111111111111111101111111010111011101010101010101010 - 10100F100F0F0F100F0F0F0F0F0F0F0F0F0E0F0F0F0F0F0E0F0E0F0E0E0E0E0E - 0E0E0E0E0D0D0D0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0C0C0C0D0D0C0C0D0C0C - 0C0C0C0C0C0C0C0C0C0C0B0B0C0C0C0B0B0C0B0B0C0C0B0B0B0B0B0B0B0B0B0B - 0B0B0B0B0A0A0A0A0B0A0A0A0A0A0A0A0A090A0A09090A0A0A0A090909090909 - 0909090908090909090809090909080908080809080808080808080808070808 - 0707070708070807080707070707070707070606070706060706060607060606 - 0606060606060606060606060606050606060506050505060505050505050505 - 0504050504050504040504040405050404050404040404040404040404040304 - 0404040404030403030404040303030303030303030303030303030303020203 - 0203020303030203020202020202020202020202020202020202020202010202 - 0102020201010101020101010101010101010101000000010100000101000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F2F30302F2F3030302F2F30302F32323233333435353537373739 - 39393B3B3B3B3B3A3030302D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2D2E2D2F2F2F - 3534343535343435353535353534343434353434353434343231312E2D2D2C2C - 2C2C2C2C2C2C2C2C2C2B2C2C2C2B2B2B2B2B2B2B2C2C2B2B2B2C2C2C3434343B - 3B3B3D3C3D3C3B3C3B3B3B3B3B3C3B3B3B3A3A3A393939383838363636313030 - 3333333333333333333433343433343435353535353738383737373131312929 - 2A2828282828292728292727282728292727282727292727282727282928292D - 2D2C2D2D2D2D2D2C2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C - 2C2C2B2C2C2C2C2C2C2B2B2C2B2C2B2B2B2B2B2B2B2B2B2B2B2A2B2B2A2A2B2A - 2A2A2A2A2A2B2A292A2A2A2A2A29292A2A292929292929292929292929292928 - 2928292928292828282828282828282828272827272728282728272727272727 - 2627272626272726262726262726262626262626262626252625252525252525 - 2525252525242425242425242424232324232324232323232324232323222223 - 2222232222222222222222222222212122212221222121212121212121212121 - 20202120202020202020202020202020201F1F20201F1F1F1F1F1F1F1F1F1F1F - 1E1E1E1F1F1F1E1E1E1E1E1E1E1E1D1E1E1E1E1D1E1D1E1D1D1D1D1D1D1D1C1D - 1D1D1C1C1C1D1D1C1C1C1C1C1C1C1C1B1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B - 1A1B1A1817181817171717171717171919192625263333323939393F3F3F4444 - 442E2D2D15151415151414141414151414141414141413141413141313141313 - 1314131313131313131313131312121213121212121212121112121211111212 - 1211111111111111111111111010111010101010101010101010101010101010 - 10100F100F0F0F0F0F0F0F0E0F0F0F0F0F0F0E0F0E0E0F0E0F0E0E0F0E0E0E0E - 0E0E0E0E0E0D0D0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0D0C0C0D0C0C0D - 0C0D0C0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B - 0B0B0A0B0A0A0A0A0A0A0A0A0A090A0A09090A09090A09090A0A0A0909090909 - 0909090908080808080809090908080809080808090808070807080707080808 - 0707080808070708070807080707070707070706070607070707070606070606 - 0606070606060606050506060606050505060505060605050505050505050505 - 0505050505050504050405040505040405040404040404040404040403040404 - 0404040404040403030403030303040303030303030303030303030202030303 - 0202020203030303030202020302020202020202020202020202020202020202 - 0102010101010101010101010101010100010000010100000001000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303030303030302F - 2F3030302F3030302F302F303132323334343534353737373939393B3B3B3B3B - 3B3030302D2D2D2E2E2E2E2E2E2D2E2D2E2D2D2D2E2D30313036353535353535 - 35353534353535343535353434353535353434343434333434333131312D2C2D - 2C2C2C2B2C2C2C2C2B2C2B2C2B2C2B2B2B2B2B2B2C2B2B2B2A2B2B2C2C2C3334 - 343D3D3C3D3D3D3B3B3C3C3C3B3A3A3A3A3A3A39393938373836373735363635 - 353535363536363636363637363738383833333229292B272828282829282829 - 2728292828292827282728282728292728282727292928292C2C2B2D2D2D2E2D - 2C2E2D2D2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C - 2C2C2C2C2C2B2B2C2C2B2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2A2A2A - 2A2A2A2A2A2A2A292A292A2A292A292929292A292A2929292929292928292828 - 2929282928282928282828272828282828272727282727272727272727272727 - 2727262727272626262726262726252626262626262625252525252525252525 - 2525252524242524242523242524232423242423232423222322222322222322 - 2323222222222222222222212221212121222221212121212121202020202120 - 2020202120202020202020201F201F1F201F1F1F1F1F1F1F1F1F1F1F1F1F1E1F - 1E1E1E1F1E1E1E1F1E1E1E1E1D1D1E1E1E1E1D1D1E1E1D1D1D1D1D1D1D1D1D1D - 1D1C1C1D1C1C1D1C1D1C1C1C1C1C1B1B1B1C1C1C1B1C1B1B1B1B1B1B1B1B1B18 - 1818171818171717181717191A192A2A2A3534353A3B3B404040454545282828 - 1514151415151414151515141414141414141414141314141413131313131313 - 1313131312121313121312131212121213121212121212121211121112111111 - 111111111110111111101111111110111010101010101010101010100F101010 - 0F0F0F0F0F0F0F100F0F0F0F0F0F0F0E0F0F0F0F0F0E0E0E0E0E0F0E0E0E0D0E - 0E0E0E0E0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0D0D0D0C0D0D0C0D0C - 0D0C0C0C0C0C0C0C0B0C0B0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0B0A - 0A0A0A0A0B0A0A0A0B0A0A0A09090A0A090A0A0A09090A090909090909090909 - 0909090909090908090808090908080808090808080808080808070808070708 - 0807070707070708080707070707070707070707070606060706060606060607 - 0606060606060605060606060505060505050606050505050505050505050505 - 0505050505050505050505050405050504040404040404040404040404040404 - 0404030403030304040303030403030303030303030303030303030203020203 - 0202020303030302030202030202020202030202020202020202020101020101 - 0101010102010201010101010101010100010001000101000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030302F3131313333333434353636373838383A3A3A3B3B3B3030302D2D2D - 2E2E2E2E2E2E2E2E2E2E2D2E2D2E2D3031313635363535353535353535353535 - 353534353535353535353435353535353534333434333434333433333030302C - 2C2D2C2B2C2C2C2C2C2B2B2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2B2B2B2D2C2D - 3536353C3C3D3B3B3C3B3B3B3A3A3A3A3A3A3939383838383838383737383737 - 373838383838383535352D2D2D28272829292928282928292929282928282928 - 28292728292828292829282A2A2B2D2E2D2E2E2D2E2E2D2E2D2D2D2D2D2E2D2C - 2D2D2C2E2C2D2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C - 2C2C2B2C2C2C2B2B2C2B2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2B2A - 2A2B2A2A2A2A2A2A2A292A2929292A29292929292A292A292929292929282929 - 2829292828282828282828272727282828272728282828272728272726272727 - 2727262627272726262726262626262626262626262526262525252525252525 - 2424252424242424242423242324242323242323232223232223232323232222 - 2322222222222222222121222122212221212121212121212121202020212021 - 202121202020201F201F1F20202020201F201F1F201F1F1F1F1F1F1F1F1E1F1E - 1F1F1F1E1E1E1E1E1E1E1E1D1D1E1D1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1C1D - 1C1D1C1C1C1C1C1C1D1C1C1C1B1C1C1C1B1C1B1C1B1B1B1B1A1B1B1818181818 - 181817181717171A1B1A2D2E2D3535353B3B3B41404147474723222215151515 - 1515151414151415151515141414141314141414131314131314131313131313 - 1313131313131312131212131213121212121212121212121211111111111111 - 11111111111111101111111011101111101110101010101010100F1010101010 - 0F0F100F100F0F0F0F0F0F0F0F0F0E0F0E0E0F0E0E0E0E0E0E0E0E0E0E0E0D0E - 0E0E0E0E0D0E0E0E0D0D0D0D0D0D0D0D0C0D0D0D0D0D0C0D0C0C0D0C0D0C0C0C - 0C0C0C0C0C0C0C0C0B0B0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0B0A0A0A - 0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0909090A09090A0909090A09090909 - 0909090809090809090908080808090808080908080708080708080808080707 - 0807080807070807070707070707060707070706070706070706070606060606 - 0607060606060506050606060506050606060605050505050505050505050505 - 0505050504050405050404050404040404040404040404040404030404040403 - 0403040404030304030303030303030303040303030303030303030302030302 - 0303030203020302020202020203020202020202020202020202020201010101 - 0201010101010101010101010101000001010000010000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030302F2F30303131 - 313433343535343737373838393B3A3A3C3D3C3131312E2D2D2E2E2E2E2E2E2D - 2E2E2E2E2D2E2D2E313031353636353535353535353536353535353635353534 - 3535343535343435353534353534343434333434343433333433333333333030 - 302C2C2D2B2C2B2C2B2C2C2B2B2B2B2B2B2C2B2B2B2B2A2B2B2A2B2B2A2B2A2C - 2C2D3635353C3B3B3B3B3C3B3B3B3A3A3A3A3A393839383938383A3A39383839 - 3130302828282928292928292928292929292828292828292828292828292929 - 292C2B2C2E2E2D2E2E2E2E2E2E2E2E2D2E2E2D2E2D2D2E2D2D2D2D2C2D2D2D2D - 2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2B2C2C2B2B2C2B2C2C2B2C2B2B2B2B2A2B2B2B2B2B2B2B2B2B2A2B2B2A2A2A2A - 2A2A2A2A2A292A2A2A2929292A29292A29292929292929282928292829292929 - 2828282828282828282828282827282827272827272728272727272727272727 - 2727262627272727262626262626262626252525252525252525252525252524 - 2425242425232324232424232324232324232223232224222323232223222222 - 2222222222212222212122212221212122212121212121202021212120202020 - 202020202020202020201F20201F1F1F201F201F1F1F1F1F1F1E1E1F1F1F1E1E - 1E1E1E1E1E1E1E1E1E1E1E1D1E1D1E1E1D1D1D1D1D1D1D1D1D1D1D1C1C1D1D1C - 1C1D1C1C1C1C1D1D1C1C1C1C1C1C1B1C1B1C1B1C1B1A1A181819181818181818 - 1818191C1C1B3030303636363C3C3B4141424747461918181516151515151515 - 1414151414151414141414141414141413131414141413141313131313131313 - 1313131313131312131212121213131312121212121212111211111212111111 - 1111111011111111101010111011101010101010110F1010101010100F0F100F - 100F0F0F0F0F0F0F0F0E0F0F0F0E0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D - 0E0E0E0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0C0D0C0D0D0D0C0C0C0C0C0C0C0D - 0C0C0B0B0C0C0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A - 0B0A0B0A0A0A0B0A0A0A0A0A090A090A090A0A090A0909090909090909090909 - 0909090909080808080908090908080808080808080808080708080808070807 - 0808080707070807070707070707070707060706060607070606070606060606 - 0606060606060606060505060605050605050605060505050505050505050505 - 0504040505050504050405040505040404040404040404040404040403040404 - 0304030303030303030403030303040303040203030303030202030303020302 - 0303020302020203020202020202020202020202020202020101010101010101 - 0101010101010101010101010101010000000100000001000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030313030343433353535 - 3637373938393B3B3B3D3D3D3333342D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2D2E - 2E31313136353636363535353535353536363535363535363535353535353534 - 3534353435353535343434343434343433353433343333343333333333323333 - 30302F2C2B2C2C2B2C2B2B2B2B2B2B2C2B2B2B2B2B2B2B2A2A2B2A2A2B2B2B2A - 2B2C2D2D3535353B3B3B3B3B3B3B3B3B3A3A3B3B3B3B3433332A292A29292A29 - 2A292A292929292928292929282928282928282929292A2C2C2C2E2E2E2F2F2F - 2F2F2F2F2E2E2E2E2E2F2E2E2F2E2D2E2E2D2E2D2D2E2D2D2E2D2C2D2D2D2D2C - 2C2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C - 2C2C2C2C2C2B2B2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2B2B2B2A2A2A2A - 2A2A2A2A2A2A2A292A2A2A2A29292A2A29292929292929292829292829282928 - 2828282828282828282828282828272727272827282727272827262726272727 - 2626262726262626272626262626252525252525262525252525262424252424 - 2524232424242423242423232423232423232422232323232322232322222223 - 2222212222222222212121212121212121212121212121212021202020202020 - 20202020202020202020201F201F1F1F1F1F1F1F1F1F1F1E1F1F1F1F1F1E1E1E - 1E1E1E1E1E1F1E1E1E1E1D1D1E1E1D1D1D1D1D1E1D1D1D1D1D1C1C1D1C1D1C1C - 1D1C1C1C1C1C1C1C1C1C1C1C1C1B1C1B191A191918191818181817181918191F - 1F1E3232313737373D3D3D434342444443161516161615161615151515151414 - 1415151414151414141415141414141414131414141414141314141313131313 - 1212121312121212131312121312121212121211121212121111121112111111 - 1111111110111111101011101010101010101010101010101010100F10100F0F - 0F0F0F0F100F0F0F0F0F0F0E0F0E0F0F0E0E0E0F0E0E0E0E0E0E0E0E0E0E0E0E - 0E0D0D0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0C0D0D0C0C0D0C0C0D0C0C0C0C0C - 0B0C0C0C0C0B0C0C0C0B0C0C0B0B0B0B0B0B0B0B0B0B0B0A0B0B0A0A0A0B0A0A - 0A0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0909090909090909090909090909 - 0909090808080808080809080808080808080808080808080807080808070807 - 0807080807070707070707060707070707060707060607060606060606060606 - 0606060605060606050606060506050505050505050605050505050505050405 - 0504050504050504050504040404050404040404040404040403040403040404 - 0404040303030304030303030303030303030302030303030203020303030303 - 0303030302030202020203020202020202020202020201020101020201010102 - 0101010101010100010101010100000100010000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303131313333333434343636363838383B - 3A3B3C3C3D3434342E2D2D2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E313131363635 - 3636363635363635363636363536353535363535353535353535353535353535 - 3535353435353434353435343434343335343334333334333334333333333332 - 33332F30302C2C2C2B2B2B2C2B2C2B2B2B2B2B2B2B2B2B2B2A2B2B2B2B2A2B2B - 2B2A2B2D2C2D3535353C3C3C39393A2F2E2F2929292A29292A29292A2A29292A - 292A29292929292829292929292C2B2C2F2F2E2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2E2E2E2E2F2E2E2F2E2D2E2E2D2E2D2D2E2D2D2E2D2C2E2D2C2D2D2C2E2C2C - 2D2C2D2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C - 2C2C2C2B2B2B2B2C2B2B2B2B2B2B2B2B2A2A2B2B2A2A2A2B2B2A2A2A2A2A2B2A - 2A2A2A2A2A2A2A2A292A292A2A29292929292929292929292929292829292929 - 2928282828282828282828282828272727272727272727272727272727262727 - 2727262726262626262626262526262525252525252525252525242425242425 - 2324242324242323242323242323242323242223232222232322222222222222 - 2222222122222122222221212222212121212121212120202121212120202020 - 211F20201F2020201F1F201F1F201F1F1F1F1F1F1F1F1F1F1F1E1F1E1E1F1F1E - 1E1E1E1E1E1E1D1E1E1E1E1D1E1E1E1D1E1D1D1D1D1D1D1D1C1D1D1C1C1D1C1D - 1C1C1C1C1C1C1C1C1C1C1B1B1A191A191818181818181818191919201F203333 - 323838383D3D3D4343433A3B3A16161615161516151616161615151515151514 - 1514141414141514151514141414131314141313131314131314131313131313 - 1312131213121312121213121212121212121212111112121111111112111111 - 111111101110111110111111111010101010110F101010101010100F100F0F0F - 0F0F0F0F0F0F0E0E0F0E0F0F0F0E0F0E0E0E0F0E0E0E0E0E0E0D0E0E0E0E0E0E - 0D0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0D0C0C0C0C0C0C0C0C0C - 0C0B0C0B0B0C0C0B0B0C0B0B0B0B0C0B0B0B0B0A0B0B0B0A0A0B0A0B0B0A0A0A - 0A0B0A0A0A0A0A0A0A0A0A0A0A09090A0A090A090A09090A0909080909090909 - 0809090809080908080809080808080808080708080808070708080707070708 - 0707070707070707070707060707060706060707070707060606060606060606 - 0505060606060506060606050506060505050605050505050505050505050405 - 0504040505040504050504040405040504040404040404040403040304040404 - 0303030404040303030303030403030303030302030303030302030303030202 - 0203020302030302020202020202020202010201020201020102010201010101 - 0101010101000100010101010001010000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303333333434343635363838383A3A3A3C3C3C3838 - 382D2D2E2F2F2E2E2E2F2E2E2E2E2F2F2F2F2E2F2F3036363636363636363635 - 3636363635353536363536363636353535353535353535353535353535343435 - 3535343535343434343534333433333433333434343433333333333333333333 - 33333332302F302C2B2C2B2B2B2B2B2B2B2B2B2B2A2B2B2B2B2B2B2A2A2B2A2B - 2B2A2A2A2A2C2C2D2B2B2B2A2A292A2A29292A2A29292A2A2A2A2A29292A2929 - 2929292B2B2B2F2F2F302F30302F2F2F2F2F2F2F2F2F302F2F2F2F2F2F2F2E2E - 2E2F2F2E2F2E2E2F2E2E2E2E2D2E2D2D2D2D2D2E2D2C2D2D2C2D2C2C2D2C2D2D - 2C2C2D2C2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2B - 2C2B2C2B2C2B2B2B2B2B2B2B2B2B2B2B2B2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2929292A2A2A29292929292929292929292929282928282928 - 2828282828282828282728272828272727272728272827272727272626262726 - 2626262726262626252626252525252625252525252524242524242524242424 - 2324242424242324232324232424232323232223232222232322222222222322 - 2222222222222221212122212121212121212120212121212120202120202020 - 2020201F201F1F2020202020201F1F1F1F1F1F1F1F1F1E1F1F1F1F1F1E1F1E1E - 1E1E1E1E1E1D1E1E1D1E1E1E1E1E1E1D1D1E1D1D1D1D1D1D1D1D1D1C1C1C1D1C - 1C1C1C1D1C1C1C1C181919181919181819191918191919242425333332393939 - 3E3D3D4243423131311616161616161515151615151516151514151515151514 - 1515141514141514141413141414141414131413141413131413131313131313 - 1313131212121312121312121212121212111212121112111112121111111111 - 10111110101010101010101010101010101010101010100F0F0F1010100F0F0F - 100F0F0F0F0F0F0F0F0F0E0F0E0E0E0E0E0E0E0E0E0E0D0D0E0E0E0E0D0E0E0D - 0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0D0D0D0C0C0C0C0C0C0C0C0C0C - 0C0B0C0B0C0B0B0B0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0A0B0A0A0A0A0A - 0A0A0A0A0A0A0A0A0A090A090A090A0A09090909090909090909090808080808 - 0909080908090908080808080808080808080808080708070808080707070808 - 0707080707070607060607070606070707060707060606060706060606060606 - 0606060505050606050506060506060505060505050505050505050504050505 - 0505050404040405040404040404040404040404040404030304040303030303 - 0404030303030303030303030303030303030302030303030302020202020302 - 0302020202020202020202020202020201010202020201010102010101010101 - 0101010101010101000101000000000001000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303232323434343636363838383A3A3A3C3C3C3837382E2E2E2E2F2F - 2F2F2E2F2F2F2F2E2E2E2E2E2F2F303636363636363636363636363636363636 - 3636353636353535363635353635353535363536353535353535353535353535 - 3534343433353433343434343333343333343333343333333333333333323332 - 33323233323230302F2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2B2A2B2B2A2B - 2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29292A2A29292A2B2B2E2E2E30 - 3030303030302F30302F2F2F2F302F2F2F30302F2F2F2F2F2F2F2F2F2E2F2F2E - 2F2E2E2E2E2E2E2E2D2E2D2D2E2D2D2E2D2D2E2D2D2D2D2C2D2C2C2D2C2C2D2C - 2C2D2C2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2B2B - 2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2B2A2A2B2B2B2A2A2B2B2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2929292A292A292929292929292829292928282828282828 - 2828282828282827282827272728272828272727272727272727272727262726 - 2726262626262625262625252525252525252524262424252424252424252424 - 2424242423242423232423232323232323222323222222222222222222222222 - 2222222222212122212121212120212121212121212120212020202021212020 - 20201F2020201F1F20201F1F1F201F1F201F1F1F1F1F1F1F1F1F1F1E1E1E1E1F - 1E1E1E1E1E1D1E1E1D1D1E1E1E1D1E1D1D1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C - 1C1C1C1C191919191919191919191818191A1A2727273232323737373C3C3B41 - 42422A2A2A161616161616151616161616151516151515151515151515141415 - 1514151414141414141414141414131313141314131313131313141313131213 - 1213131213121212121212121212121212111111121212111111121111111111 - 101110111110111011101110101010101010101010101010100F0F100F100F0F - 0F0F0F0F0F0F0F0F0F0F0E0F0F0E0F0E0E0E0E0E0E0D0E0D0E0E0E0D0E0E0D0E - 0E0D0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C - 0C0C0B0C0B0B0B0B0B0B0B0B0B0B0B0A0B0B0A0B0A0B0A0B0A0B0B0A0B0A0A0B - 0A0A0A090A0A0A0A090A0A0A0A0A0A0909090909090909090909090908090908 - 0909090909080808080808080808080808080807080707070808080807070707 - 0707070707070707070707060606060606060607060606060607060606060606 - 0606060606060506060606050506050505050505050505050404050505040405 - 0405040404040405040404040404050404040404040304040404040303030404 - 0303030303040304030303040304030303030303030302030302020302020203 - 0202020202020302020202020202010201020201010201010101010001010101 - 0101010001010100000101000001000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303232 - 323434343535353737373A3A3A3C3C3C3B3B3B2F2F2F2F2F2F2F2E2F2F2F2F2E - 2F2E2E2E2F302F31363636363636363636363736363636363636363636363635 - 3636363535353635363535353535353535353535353535353535353535353534 - 3434343334343435343334343334343334333333333333323333323332323332 - 32323333323233322E2E2E2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A - 2A2B2A2A2A2A2A2A2A2A292A292A2A2B2A2A2E2E2E3131313131303030303030 - 303030303030302F302F2F2F302F2F2F2F2F2F302F2F2F2F2F2E2E2E2F2F2E2E - 2E2E2E2E2D2E2D2D2E2E2D2E2D2D2D2D2D2D2C2D2E2D2D2D2C2D2D2C2C2D2C2C - 2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C - 2C2B2B2B2B2C2B2B2B2B2B2B2B2B2A2B2A2A2A2A2A2B2B2A2A2A2A2B2A2A2A2A - 2929292A2A292929292929292929292929292929282929292928292928282828 - 2828282828282827282727272827282727272727272727272727272726262726 - 2626262526262526252525252526252526242425242425242425242424232424 - 2423242323242324242323232323232222232223222222222222222222222222 - 2122212122222122212121212121212121212121202021212020202020202020 - 201F201F1F20201F20201F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1F1F1F1F1E1E - 1F1E1E1D1E1E1E1D1E1E1D1D1E1E1E1D1D1D1D1D1D1D1D1D1C1D1C1C1C1B1B1C - 19191918191919191918191919191A2A29293132313636363B3B3B3F3F3F2121 - 2117161616161616161615161516161515151515151515141514151514141515 - 1515151414141414141413131414141313131313131314131313131313121313 - 1313131212131212121212121212111212111112121111111111111111111111 - 111111111011111110101110101010101010100F100F0F0F100F0F0F100F100F - 0F0F0F0F0E0E0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0E0D0E - 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0D0D0C0C0D0C0C0C0C0C0C0C0C0B0C0C0C - 0B0B0C0B0C0B0B0C0C0B0B0B0B0B0B0B0A0B0B0B0B0A0B0B0B0A0A0A0B0A0A0A - 0A0B0A0A0A090A0A0A090A090A09090A09090909090909090909090809080908 - 0808080908080808080808080808080808080807070807070708070807070807 - 0707070707070707070707070707070606060706060607060606060606060606 - 0605060605060605050505050505050505050505050505050505040505040505 - 0405050404040405040504050404050404040303040404030303040404030304 - 0304030303030304030303030303030303030203030303020202030202020202 - 0303020202020202020202010202020202010202010101010101010101010101 - 0101010000000001010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030313131343434353535 - 3737373939393B3B3B3C3C3C2F2F2F2E2E2E2F2F2F2F2F2F2F2E2F2F2F2F2F2F - 2F35353537363637373636363636363636363636363636353636363636363635 - 3635363635363636353636353535353535353635353535353535353534343434 - 3534343434343433333433333433333333333333333333333233333333333332 - 323333333332323131322E2E2E2B2B2B2A2B2B2B2A2B2B2B2B2B2A2A2B2A2A2B - 2B2A2A2A2B2A2A2A2C2C2C302F30313131313130303130303031303030303030 - 30303030303030302F2F30302F30302F2F2F2F2F2F2F2E2E2F2F2E2F2E2E2F2E - 2D2E2E2D2E2D2E2E2D2D2E2D2D2E2D2D2E2D2C2E2D2D2D2C2C2D2C2C2D2C2C2D - 2C2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C2B2B - 2B2B2C2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2A2B2A2A2A2A2A2A2A2A2A29 - 2A292A2929292929292929292929292929292828282829292929282928282828 - 2828282728282828282728272727272827272727262727272726272726272625 - 2626252625252625252625252625242525252524252524242424242423242423 - 2424232324232323232323232323222223232222222222222222222222222222 - 2222222121222121212121212121212121212121202121202020202020201F20 - 2020202020201F1F201F1F201F1F1F1F1F1E1F1F1F1F1E1F1E1E1E1E1E1E1E1E - 1E1E1E1E1E1E1D1E1D1E1E1E1E1D1D1D1C1D1D1D1C1D1C1D1D1B1B1C1A191919 - 1919191919191819191A192C2C2C3131323434343838383B3B3B1C1B1B161616 - 1717161616161616161616161616161515161615151515141515151415151515 - 1514141414141414141414131314131313131413131313131313131212131312 - 1312121313121212121212121212111112121211111111111111111111111111 - 101110111111101111101010101010100F101010100F0F0F0F0F100F0F0F0F0F - 0F0E0F0F0F0F0E0F0F0E0F0E0F0E0E0E0F0E0E0E0D0E0E0E0E0E0D0E0D0D0D0D - 0D0E0E0D0D0D0D0D0D0C0D0D0D0D0C0C0D0C0C0C0D0D0C0C0C0C0C0C0C0B0C0B - 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0A0A0A0A0A0A0A0B0A0A - 0A0A0A0A09090A09090A09090909090909090909090909090908090909090908 - 0909090808080908090808080808070808070808070707070708080708080707 - 0707070707070707070607070607060607070706060607060606060605060606 - 0605060505060506050505050505060505050505050504050405050405040504 - 0404050404040405040404040404040404040404040404040404040303040304 - 0303030303040303030303030303030303020303030202030202020202030203 - 0202020302020202020202010101010202010101010101010101010101000101 - 0101000001000000000100000000000001000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303131313333333434343636363939393B - 3B3B3D3D3D3131312E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2E2F30363635373736 - 3736363736363636363636363636363636363636363636363536363636363635 - 3636353535353535363635363536353536363535353535353535343335343435 - 3434343434353433343333343333333333333333333233333333333333323332 - 3333323232323232323131312E2E2E2B2B2B2B2B2A2B2A2B2A2B2A2A2A2A2C2A - 2B2F2F2F31313131313131313130313130313030303030303030313030303030 - 302F3030302F2F302F30302F2F2F2F2F2F2F2F2F2F2F2E2F2E2E2F2E2E2F2E2E - 2F2D2D2F2D2D2E2D2D2E2D2D2E2D2D2D2D2D2E2C2C2D2D2D2D2C2D2D2C2C2D2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2B2C2B2B2B2B2B2B2C - 2C2B2B2C2C2B2B2B2B2B2B2B2B2B2A2B2B2B2B2A2A2A2A2A2A2B2A2A2A2A2A2A - 2A2A2A2929292929292929292929292829292928282828292928292828282828 - 2828282827282727282728282727282727272727272726272627272626262627 - 2625262525262525262525262524252425252524252424242324242424242424 - 2424242323232323232323232323222322232322222222222222222222222222 - 2222212121212121212121212121212121202021212120202020202020202020 - 202020201F1F201F201F1F1F1F1F1F1F1E1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E - 1E1D1E1E1E1D1E1D1D1D1D1D1E1D1D1D1D1D1D1C1D1B1A1B19191A1919191919 - 191919191C1C1C2D2C2D2F2F303231313434343737372C2C2C19191916171617 - 1616161616161615161516151515161515151615151515151515151414141415 - 1415141414141414131414141314131413141314131313131313131213121313 - 1212121313131312121212121211121112111211111111111111111111111111 - 1110101011111110111110101010101010100F1010100F0F0F0F0F0F0F0F0F0F - 0F0F0F0F0F0F0F0E0E0E0E0F0E0E0F0E0E0E0E0D0E0E0D0D0E0D0D0D0E0D0D0D - 0E0D0D0D0D0D0D0D0D0C0D0C0D0C0C0C0D0D0C0C0C0C0C0D0C0C0C0C0C0C0B0C - 0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0A0A0A0B0A0B0A0A0A - 0A0A0A0A0A090A0A0A09090A09090A090A0A0909090909090809090909080808 - 0908080808080909080808080807080808080808080808070807070807070707 - 0707060706070607070707070607060607060706060607060606060606060506 - 0506060605060505050505060605060605050505050405050505050504040405 - 0505040404040504040404040404040303040403030304040403030403040304 - 0303030403030303030303030303030303020303030303030302020202020202 - 0202020202020201020101010202020101010102020101010101010101010101 - 0100000101000000010001000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303333333434343636363838383A3A3A3D3D3D3434 - 342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F34343438363737363637373737 - 3737363636363637363636363636363636363636363636363636363636353636 - 3635363635353635353535353635353535353535353535343434343534343434 - 3435343334343434333434343333333333333333323232333332333332323232 - 32323333333232323232323131312E2E2D2B2B2A2B2A2B2D2C2D313130313232 - 313131313131313131313130313131313131303130303031303030303030302F - 30303030302F2F302F2F2F302F2F302F2F2F2E2F2F2E2F2E2E2F2E2E2F2E2E2F - 2D2D2F2D2E2E2D2D2E2D2D2E2D2D2E2C2D2D2C2C2D2C2C2D2D2C2D2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C2C2C2C2B2C2C2B2B2B2B - 2B2C2B2B2B2B2B2B2A2B2A2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A - 292A292A292A292A292929292929292929292928282928282929282828282828 - 2828282728272827272828272728272727272727262627262626262626262626 - 2526252526252526252525242525242425252424242424242324242424232424 - 2424232323232323232323232223232223222222232322212222222222212122 - 2221212221212121212121212121212120212120212021202120202020201F1F - 201F1F1F2020201F1F1F1F1F1F1F1F1E1E1F1E1F1F1F1E1E1E1E1E1E1E1E1E1E - 1E1E1E1D1E1D1E1D1D1D1D1D1D1D1D1D1D1A1A1B1A191A1A1A1A1A1A1A1A1A1A - 1F1F1F2D2D2D2D2E2E303031323233353535353635302F30191A191817171817 - 1717171617171717171716161616171616161615161616161616161615161615 - 1515151515141515141414141415141414151414141415141414141313141313 - 1413141414131313131312131312131212131213121213121212121212121112 - 1111111010101010111010101010101010100F0F10100F100F0F100F0F0F0F0F - 0F0F0F0E0E0E0E0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0E0E0E - 0D0D0E0D0D0D0D0D0D0D0C0D0D0C0D0C0D0C0C0C0D0C0C0C0C0B0C0C0C0C0B0C - 0B0B0C0B0B0C0C0B0B0B0B0B0B0A0B0B0A0A0A0B0B0A0B0A0B0B0B0A0A0A0A0A - 0A0A090A0A0A090A090A09090A09090A09090909090809090809090909080908 - 0909080809080808080808070708070808080708070808080707070707070807 - 0707070707070707060606060706070706060606070606060606060605060606 - 0606050505050505050505050605050505050505040405050405050404040405 - 0505050404040404040404040404040304040304040403030304030304040303 - 0303040303030303030303030303030303030303030202020202020202020202 - 0202010202020202020202020201010102010101010101010101010101010000 - 0001010000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303232323434343535353737373A3A3A3C3C3C3838382E2E2E2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3434343737373837373837373736363736363736 - 3636363636363737363736373636373636363636363636353636363536363635 - 3635353535353536363535353535353535353534353434343434353433353434 - 3533333433343333333333333333333333333333333333333333333333323232 - 3232323232323232323232323230313130303032323231323232313231313231 - 31313131313131313031313131313131313031313030303130303030302F302F - 3030302F302F302F2F302F2F2F2F2E2F2F2E2F2E2E2F2E2E2E2E2D2F2D2E2F2E - 2D2E2E2D2E2D2E2E2D2D2E2D2C2D2D2D2D2C2C2D2C2D2D2C2C2D2C2D2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2B2B2C2C2C2B2C2C2C2B2C2C2B - 2B2B2B2B2B2B2B2A2B2A2A2B2A2B2A2C2B2B2B2B2B2B2B2B2B2B2B2D2C2B2C2B - 2C2D2B2C2D2B2B2D2B2B2C2B2B2C2C2B2B2C2A2B2A2B2A2929292A2929292929 - 2828282728272727282727272727272726272726272626272625272626262525 - 2625252625252625242524242525242424242424242423242423232423242324 - 2323232423232323232323232323222323222222222222222222222222222222 - 21222121212121212121212121212020212021212120212020201F2020201F20 - 201F202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1F1E1E1F1F1F1F1F1F1F1F - 1F1E1F1E1E1E1F1E1E1E1E1E1F1B1B1B1B1A1B1B1A1B1B1A1B1A1A1B1C1C1C27 - 26272E2E2E2E2D2E3130303131313232323232322C2C2D1D1D1C181717181717 - 1717171617171616171717171616161616161616161516161615161515161516 - 1515151514151514151414151515141415141514141414141413141414131413 - 1313131313131313131313121313121212121213121312121112121212121211 - 1111111111111111111111111111111010101111111011100F0F0F0F0F0F0F0F - 0F0F0F0F0F0F0E0E0F0F0E0E0F0E0E0E0D0E0E0D0D0E0E0D0E0D0E0D0D0D0D0D - 0D0D0D0D0D0D0C0D0C0C0D0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B - 0B0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0B0A0A0A0A0A0A0A0A0A0A09 - 0A0A090A09090909090909090909090909090909090909080809090908080908 - 0908080909080808080808070807070707080807070807070707070707070707 - 0706070607070707060707070606060606060607060606060605060605050606 - 0505050606050506060505050605050505050504050405040505050405040405 - 0405040404040404040404040404040404040404030404040303030303030303 - 0303030303030303030303030302030303030303020203030203020202020202 - 0202020202010202010101010101010101010101010101010101010100010101 - 0001000100000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303232 - 323434343535353737373939393B3B3B3B3B3B2E2E2E2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F323232373737383737383737383737383636373737373736363636 - 3736373636363636363637363636363636363636363636363636363535353635 - 3635353535363535363535363535353535343435343435343435333435343434 - 3333343334333433333334333333333333333333323333333332323232323233 - 3232323333323232323232323132323232313231313232313131313131313131 - 313131313130313031303131303130313131313030313030303030302F30302F - 2F2F2F302F2F2F2F302F2E2F2F2F2F2F2E2F2E2E2F2E2E2E2E2E2E2E2E2E2D2E - 2F2E2E2E2D2D2E2D2D2E2D2D2D2D2C2D2D2D2D2C2C2D2C2C2D2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C2C2B2D2D2D2E2D2D2D2D2D2E - 2E2E2E2E2E2F2E2E302F2F302E2F2F2F2E2F2F2E2F2F2E2F2F2F2F2F2F2F2E2F - 2E2E2F2E2E2F2E2E2E2E2E2E2F2D2E2F2E2E2E2D2E2E2E2E2E2F2D2E2E2D2E2E - 2E2E2D2D2C2B2B2C2C2C2A2A2A29292928282827262626262527252526252526 - 2525262525262524252525252425242424242424242424242423242323242423 - 2323232323232223232323232222222223222222222222222222222122212122 - 212122212121212121212121212021212120212020202020211F201F201F1F21 - 21202020202120202020202020201F2020201F20201F201F1F1F1F1F1F1E1F1F - 1F1E1E1E1F1E1F1E1F1B1A1B1B1A1B1B1A1B1B1A1A1B1A1B1A1A1A1B1B1B2323 - 232F2F2F2F2F2F2F2F2F3031303131313131312F2E2E1D1E1E18181819181818 - 1818181718181818181717181717171717171717171716171616161716161617 - 1616161616161616161515161516151515151515151515141514151415151514 - 1415141414141413131213121212131212131213121312121213121316161619 - 1A1A1E1D1E212122222222121212111011101010101010101010101010101010 - 100F0F100F100F100F0F0E0E0E0E0E0E0E0E0D0D0E0E0D0D0D0D0D0D0D0D0D0D - 0E0D0D0D0D0D0D0D0D0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B - 0B0C0B0B0B0B0B0B0B0B0B0B0A0B0B0B0B0B0B0A0A0A0A0B0B0A0A0A0A0A0A0A - 0A090909090A0909090909090909090909090909090909090808090808090809 - 0808080808080808080807080708080808070707070808080807070707070707 - 0707060707070607070607060706070606060606060606060606060606060605 - 0505060506050506050505050505050505050405040504050405040404040504 - 0404040405040404040404040404040404030403040404030304030304040303 - 0403040303030303030303030303030202030302020202020202020202020202 - 0202010201020101010101010101010101010101010101000101000001000100 - 0000010100000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030313131343434353535 - 3636363838383A3A3A3C3C3C3030302E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3030 - 3137373738373738373738373738373738363737373637363737363736373636 - 3636363636363637363636363636363636353635363536353636363636363635 - 3635363536353536353636353535343534343534343433343534343433343434 - 3433343334333333333333333333333333333333323333323232333232323333 - 3232323232323332323232313232313232323132313131323232313131313131 - 3131313131313131303031303131303130303030303031303030302F30302F30 - 2F302F2F30302F2F2F2E2F2F2E2F2E2E2F2E2E2E2E2E2F2E2D2E2E2E2E2E2E2F - 2D2D2E2D2D2E2D2D2D2D2D2D2D2D2D2C2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2D2D2D2E2E2E2F2E2E302F2F3030302F30303030302F302F302F2F2F2F - 2F2F2F2F2F2F2F302F2F302F2E2F2F2E302F2E2F2F2E2F2F2F2E2E2F2E2F2F2E - 2F2F2E2F2F2F2E2E2E2E2E2F2D2D2E2D2E2F2D2E2F2E2D2E2E2D2E2D2D2E2E2E - 2E2E2D2E2D2E2D2E2E2D2E2E2D2D2D2D2D2D2B2B2B2B2A2B2928292827272625 - 2526252525252525242424252524242424242424232424242423232423232423 - 2323232323222323232223222322222223222222222222222222222222222121 - 2121212121212121212021212121222222222221222121212120212121212020 - 202020212020202020201F20202020201F1F1F1F1F1F201F201E1F1F1F1E1E1F - 20201F1F1F1D1C1C1C1B1C1C1B1C1C1B1B1B1B1C1B1B1C1C1C1D1C1C1C212222 - 2D2E2E2E2E2E2F2F2E2E2E2E2F2F2F302F302F2F2F1E1F1E1A19191919191919 - 1919191919181918181919181918191818181817181817171718171817171817 - 1717171617171716171716161717161616161616151616161615161615151515 - 1515141414141414131718171919191D1D1E1F20202121202222222221212222 - 232322222323231F1F1F1011111010101110101011101010100F101010101010 - 0F100F0F0F100F0F0F0F0F0F0F0F0F0F0F0E0E0E0D0E0E0E0D0D0D0E0D0D0D0D - 0D0D0D0C0D0D0C0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0C0C0C0C0C0B0C0B - 0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0A0A0B0B0B0A0B0A0A0A0A0A0A090A090A - 090A090A0A09090A0A0909090A09090909090909090908080908080908090908 - 0808080808090808080808080808080708080707070708070707070707070707 - 0706070706070607060606060706060607060606050605060606060505050606 - 0505060506050605060505050505050505050505050405040504040404040404 - 0405040404040404040403040404040303040403030403030304030403030303 - 0303030303030303030303030203020202020303020202020202020202020201 - 0101010102010102010101010101010101010101010001010000000100000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303034343435353536363637373739 - 39393B3B3B3333332E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F30373736383837 - 3837373837373837373837373837373737373736363737363736373737373637 - 3636373636363737363636363636363636363636363635353636353636353635 - 3635353535363535353534353434353434353434353434353434343333343333 - 3333333333333333333333333333333233333333333333323232333332333232 - 3332323232323332323232323132313231323132313131313131313131313131 - 31313031303131313031313130313131303130303030303030303030302F302F - 30302F2F2F2F2F2F2E2F2E2E2F2E2E2F2E2E2E2E2E2F2E2E2F2E2D2E2D2D2E2D - 2D2E2D2D2E2D2D2D2D2C2D2D2D2D2C2C2D2C2C2D2E2D2E2F2E2F2F2E302F2F30 - 302F30302F30302F3030303030303030302F303030303030302F2F30302F2F2F - 2F2F2F2F2F2F302F2F2F2E2E2F2F2E2F2F2E2F302E2F2F2F2F2F2F2E2F2F2E2F - 2E2F2E2E2E2E2E2E2E2E2F2E2E2F2E2E2E2D2D2F2E2D2E2E2D2E2E2D2E2E2E2E - 2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2D2C2C2D2C2C2A2A2A - 2928282626262424252524252424242424242424242424242424232323242323 - 2323232323232322232323222322232222222222222222222222222123232322 - 2322222322222122222221222221212121212121212121202121202121202120 - 20202020202020202021212121212021202020202120212020202020201F2020 - 202021211E1E1E1D1C1D1D1C1D1D1C1D1C1C1C1C1C1D1C1C1D1E1E1E2020202C - 2D2C2F2E2F302F2F2F2F2F302F303131313030301F1F1F1B1A1A1A1A1A1A1A1A - 1A1A191919191A191A1919191919191919191918191919191818181818181818 - 18181718181818181818181718171718171617171717191A1A1B1B1C1E1E1E20 - 2120232223232223222322222222232423232323232323232323242324242524 - 2625262828281A1A1A111212121212111010101010101111101010101010100F - 100F0F0F100F100F0F0F0F0F0F0E0F0F0F0E0F0E0F0E0F0F0E0E0E0E0D0D0D0D - 0D0D0D0C0D0C0D0D0D0D0C0C0C0D0D0C0C0C0C0C0C0C0B0B0C0C0C0C0B0C0B0B - 0B0B0B0B0B0B0B0B0B0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A - 0A0A0A090909090A090909090909090909090909090908080809080909080808 - 0809080808080808080808080807080708080808070708070707070707070707 - 0707070707060606060606060606060606060606060506060505060606060606 - 0605050506060505050505050504050504050505050405050505040404040404 - 0404040404040404040404040404040404040303030303040403040303030303 - 0403040303030303030302030302020302020303020202020202020101010202 - 0102020101020101010101010101010101010100010101010101000100000001 - 0000000001000000000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303131313636363737373838383A3A3A3C3C - 3C3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F30303038383738383738383738 - 3737383737383737383737383737373737373737363637373736363637363636 - 3636363636363636363636363636363636363635363536353635363536363535 - 3535353535353535353435343435343435343435343334333434343333333434 - 3334333334333333333333333333323333333333333232333232323332333232 - 3233323232323232323232313232323131323231323131313231313131313131 - 31313131303131303130313030313030303030313030302F3030302F2F2F2F30 - 2F2E302F2E2F2F2E2F2E2F2F2E2E2F2E2E2F2D2E2F2D2D2E2E2D2E2E2D2E2D2D - 2E2D2D2D2D2D2E2E2E2F2F2E30302F2F302F302F2F302F2F302F2F302F2F3030 - 2F30302F30302F30303030303030303030303030302F30302F2F2F2F2F2F2F2F - 2F2F2F2F2F302E2F2F2E2F302F2E2F2F2E2F2F2E2F2F2F2F2E2F2E2E2E2F2E2F - 2E2E2E2E2E2E2E2E2E2F2E2E2F2D2E2E2D2D2E2E2E2E2E2D2E2E2D2E2E2D2D2E - 2D2D2D2D2D2E2D2D2D2E2D2D2C2C2C2D2D2D2C2D2C2D2D2C2D2D2C2C2D2C2C2D - 2D2C2B2C2C2A2829262726242424242424242424232423232424232323232323 - 2323232222232323222222222324232323232323232323232223232222222222 - 2222222222222221222121212121222121212121212122222221222121222221 - 2222212221212121222222222221222221212121212121212120212121202121 - 202020201F201E1E1E1E1D1E1D1D1D1D1D1E1E1D1D1E1D1D1D1D1D2020202B2C - 2C2E2E2E2F2F2F2F303030302F3130303031311E1F1E1B1B1B1B1B1B1B1B1A1A - 1B1A1A1B1A1A1A1A1B1A1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1919191A191919 - 1817171818181B1B1B1E1F1E2020202323232423242324232324232424242424 - 242424242324232424242424242425242424242425252525242526262727282A - 2B2A2C2C2D151515121212121111111111111211111111111111101010101010 - 0F100F0F0F100F100F0F0F0F0E0F0F0F0E0E0E0F0F0F0E0E0E0E0E0E0E0E0E0E - 0E0E0E0E0C0C0C0C0C0D0C0C0C0C0C0C0C0C0C0B0C0B0C0C0C0B0C0C0B0B0B0B - 0B0B0B0B0B0B0B0A0A0B0A0A0A0A0A0B0A0B0A0A0A0B0A0A0A0A090A0A0A0A0A - 0A090A090909090A0A090A090909090909090808090809090908090808080808 - 0808080908080808080708080807080707070707070807070707070707070707 - 0707070707070707070606060606060606060606060606050506060505050505 - 0606050505050605050505050505050505050504050405040404040405040405 - 0404040404040404040403030404040304040403030404030303030303030303 - 0403030303030303030203030303020202020202020202020101010101020201 - 0202010201010101010101010101010101010001010100010000000001000000 - 0100000100010001000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303434343737373939393A3A3A3C3C3C3D3D3D - 3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3333333838373838373837373837 - 3738373738373738373737363737373737373737363737363737373736363636 - 3637363637363637363636363636363636353635363635363636353536353535 - 3636353535343534343534343533343534343433343434343333333334343333 - 3434343333333334333333333332333332333233323332333232323232323332 - 3232323232323231323232313132313232313131313132313132313131313131 - 31313131313130313130303030303030303030303030303030302F2F302F2F2F - 2F2F2F2E2F2E2E2F2E2E2F2E2E2F2E2E2F2D2E2F2E2E2F2E2D2E2F2F2F2F2F30 - 30303030303030302F2F30302F302F2F2F303030302F2F302F2F302F2F30302F - 30302F30302F3030303030303030302F2F302F30302F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F302E2F2F2F2E2F2F2E2F2F2E2F2F2E2E2E2E2F2E2F2F2E2F2F2F2E2E - 2E2E2E2E2E2E2D2E2E2E2E2E2E2D2E2D2D2F2E2D2E2E2E2E2E2D2D2E2E2E2D2D - 2D2D2D2E2D2E2D2D2D2D2D2D2C2D2D2C2D2D2D2D2C2D2C2D2D2C2C2D2C2C2D2D - 2C2D2C2C2D2D2C2B2C2B29292826262624232424242324232323232323232324 - 2424242324232424242323232324232323232323222323232323232223222322 - 2222222222222323232323222222232222222222222221222323222322232322 - 2322222222222222212222212221222221212121212121212121202021212020 - 20202020201E1E1E1E1D1E1E1D1E1E1D1E1E1D1E1D1D1D1E1D1E1F1F202D2D2D - 3031313131313131313232323130302F30301F1E1E1B1B1B1B1B1B1B1B1B1B1A - 1B1B1B1A1B1B1B1A1A1B1A1A1A1A1A1A1A1A1A1D1C1D1F1F1F21212124242426 - 2626262626262626262626262626262626262626262626262626272626262626 - 252525242425242525262525262526262626262626262726292A292E2D2D3031 - 3028282813131313131313121212121211111111111110111111111110111111 - 10101010110F0F0F0F0F0F0E0F0E0E0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0D0E - 0D0D0E0E0D0D0E0D0E0C0C0C0C0C0D0C0C0C0B0C0C0C0C0B0B0B0C0C0C0B0B0B - 0B0B0B0B0B0B0B0B0B0A0B0B0B0A0B0A0A0A0B0A0A0A0A0A0A0A0A0909090A09 - 0A0A09090909090A090909090909080909090808090909080908080808080808 - 0808080808080807080708080707070807080707080707070707070706070707 - 0707060706070706070606060706060606060606050606060605060505050505 - 0605050505050505050505050505050405050405050405040504040404040404 - 0404040404040404040404040304030304030403030303040303030403030303 - 0303030303020302020303030202020202020202020202020201010202010101 - 0102010202010101010101010101010100010001010000010000000001000000 - 0000010000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303737373939393A3A3A3C3C3C3D3D3D3D3D3D2E - 2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F30373737383837383737383737383737 - 3837373837373737373736373737373737363737373736373736363737373637 - 3736373636363636363636363636363636363636363635353536363535363535 - 3534363434353434353434343434353434343434343334333433333334333333 - 3333333433333333333333323233333333333233333232333232323232333232 - 3232323232323132313232323232313232313131323232313131313131313131 - 303131313130313031313030303031313030303030302F30302F302F2F302F2E - 2F2F2F302E2E2F2F2E2F2E2E2F2F2F303030312F303030313030303130303030 - 303030302F3030303030302F2F2F2F2F302F2F302F30302F2F302F2F30302F30 - 302F30302F303030303030303030303030302F2F2F2F2F2F2F302E2E2D2E2E2E - 2D2D2E2D2C2D2C2B2B2B2C2B2B2B2B2C2B2B2B2B2B2A2A2B2A2B2B2B2B2B2C2C - 2C2C2C2C2D2D2D2F2E2E2E2E2D2F2D2E2E2E2D2E2F2D2E2E2D2D2D2E2D2E2D2E - 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2D2C2C2D2C2C2D2C2C2D2C2C - 2D2D2C2D2C2C2C2C2C2D2C2C2B2B2B2828272625262424252424242424242324 - 2423242424242324232423242323232323232323232323242323232323232323 - 2323232323242423232324242323232323232323222223232323222322222222 - 2222222222222222222221212121212223222222222222222221212222212223 - 222221211F1F1F1F1E1F1F1E1F1F1F1F1F1F1F1F1F1F2020202121212E2E2E31 - 32313233323232323232323030302D2E2D1F201F1C1C1D1C1C1C1B1C1C1C1C1C - 1E1D1D2020202222222424242828282827282827272828272727272828282828 - 2828282828282828282829292929292929292928272828282929282828292828 - 28282726272727272323231F1F1F242323282828292A2A2E2F2E323231333333 - 2121211414141314131413141312131212121212121212111112121111101010 - 101011101010101010100F0E0F0F0F0F0E0F0E0E0E0E0E0E0E0E0E0E0E0D0E0E - 0E0E0D0D0D0D0E0E0E0D0D0D0D0D0C0C0C0C0C0C0C0C0B0B0B0C0C0C0B0B0B0B - 0B0B0B0B0B0B0B0A0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A - 0909090A0A0909090A0909090908090908090808090909090809080808080808 - 0808070808080808070807070807080707070708070707070706070707060707 - 0607060607060607070607060606060606060606060506050605060506060505 - 0505050505050505050505050505050404050504040404040404040404040404 - 0404040404040404040404040304030404030303030304030303030303030303 - 0303030203020303030302030203020202020202020202020201020101010101 - 0101010101010101010101010001010100010100000101000001010000000101 - 0001000001000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303333333939393A3A3A3B3B3B3D3D3D3E3E3E3736372F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F32323238383738383738373738373738373738 - 3737383737373737373737363637373736373637373637373637373637363736 - 3636363636363636363636363635353636363535363635353535353635353535 - 3435343435343435343435343435333434343333333334343433333433333333 - 3433333334333333333333333333333333323233323332323232323232323232 - 3232323232323231323232323131323232313131313131313131313130313131 - 3131313131313031303030313030303030302F30302F30302F302F2F302F2F30 - 2E2F2F2F2F30303031302F313130303030303130313130313030313030303030 - 30303030302F302F2F2F2F2F2F302F302F2F302F2F302F2F302F2F30302F2F2F - 2F2E2E2E2D2D2D2D2C2C2B2B2A2B2B2B29292A2A292929292929292929292928 - 2829292929282829292828292828282828282728272727272627272626272626 - 2726262626262625262727272727272A292A2A2A2A2C2B2A2D2E2E2D2E2E2D2D - 2E2D2D2D2D2D2D2D2D2D2D2D2C2C2D2C2D2C2C2D2D2D2D2C2C2D2C2C2D2D2B2D - 2C2C2D2D2C2E2D2E2D2D2D2D2D2D2D2D2C2A2929272626242424242424242424 - 2424232424242424252425242424242323242423242423242424252425242424 - 2424232424232423232323232423232323232323232322222222232324232323 - 2323232323232322232323232324232323232323242424242324242424242323 - 232222212121201F20201F1F2120212020202020202121212221222E2E2F3332 - 32333333313131302F302F2F2F2F2E2E2323242626262828282A29292A2A2A2A - 2B2B2B2A2A2A2A2A2A2A2A2A2B2B2A2B2A2A2B2A2A2A2B2B2B2B2A2A2A2A2A2A - 2A2A2A2A2A2A2B2B2B2B2B2B2A2A2A292A292B2A2B2728282524242020211D1D - 1D1919191818181818181818192A2A2A2C2C2C2E2E2F32323233333432323316 - 1616141414131413141313141314131314131413121212121111111211111212 - 1110101010101010100F0F101010100F100F0E0E0F0E0E0E0E0E0E0D0E0E0E0D - 0D0D0D0E0D0D0D0D0D0E0D0D0D0D0D0D0D0D0C0C0B0C0C0C0C0C0B0B0B0B0B0B - 0B0B0B0B0A0A0A0B0B0B0B0B0A0A0A0A0B0A0A0B0A0A0A0A0A0A0A090909090A - 09090A0909090A0A090909090908090909080808090908080908080809080808 - 0808080708080808080707070707070707080707070707070707070607070606 - 0707060607070706070606060606060506060606060506060606060506050605 - 0506060506050505050505050505050504040404050404040404050404040404 - 0404040404040403040304040304040403030303040403030303030303030303 - 0303020203020302020202020302020202020202020101020102020202010102 - 0101010101010001010101010100010101000101000000010100010000000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303737373939393A3A3A3C3C3C3D3D3D3E3E3E2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3635353838373837373837373837373837373837 - 3737373737373737373737373736373736373637373636363736363636363636 - 3636363636363636363536363636363636353536353635363635353535353435 - 3535343534343534343534343434343434343433343334343434333334343334 - 3333333333333333323332333333333232323333323232333232323232323232 - 3232323232313232323131323131313231313231313131323131313131313031 - 30303031303030303030303030303030302F30302F302F2F302F303030313130 - 3131303131303031303031313030313030303131303030313030313030303030 - 2F30303030303030302F2F302F302E2F2F2D2D2D2C2C2C2B2B2B2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A292A2A292A2A292A2929292929292929292928 - 2929282928292929282829282828282828282828272727262727262627272626 - 2626262525262526252626252625252525252526252525262625282827292A29 - 2B2B2B2D2D2D2D2D2D2C2C2D2D2D2C2D2D2D2E2C2C2E2C2C2D2C2C2D2E2C2E2D - 2D2E2D2D2E2E2E2D2D2D2D2D2D2D2D2D2C2D2D2B2B2B27282724242425252525 - 2525252425242524252525252525252525242525252425242424252424242424 - 2424232423232423242423242524242424242324242525242424242524242525 - 2525252525242425242424242424242424242425252525252425242524242425 - 2525232323222122222122222223222222222222232323232324303030323333 - 32323231313130303030302F2F2E2F2E2E2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2C2C2C2C2C2C2C2D - 2D2D2D2D2D2828282425242121211E1E1E1A1B1B1A1A1B1A1B1A1A1A1A191919 - 191919181918191A192021202D2D2D3030303232323334343637362C2B2C1515 - 1515151514141414141313131313131313131413131313131211111111121212 - 11111111111111110F100F101010100F100F0F0F0E0E0E0E0E0E0D0E0D0D0E0E - 0D0D0D0D0E0E0D0E0D0D0D0D0D0D0D0D0C0D0D0D0C0B0C0B0B0B0B0B0B0B0B0B - 0B0B0B0B0B0A0A0B0B0B0A0A0B0A0A0A0A0A0A0A0A0A0A090A0A0A090A090A0A - 09090909090A0909090909090909090808090809080908080908080808080808 - 0808070707080808080807070808080707070707070707070707070706070706 - 0607070706060607060706060606060506060605050605060606050606050606 - 0505050505050505050505050504040505040404040405040404040404040404 - 0404040404040404040404040403040303030303040303030303030303030303 - 0303020202020302020202020202020202020202020101010101010101010101 - 0101010101000101010100010101000000010100000001010000000000010000 - 0001000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303232323939393A3A3A3B3B3B3C3C3C3E3E3E3939392F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F313131383837383737383737383737383737383737373737 - 3737373737373637363737373637363637373737373736373636373736363636 - 3636363636363636363636363536353536363535353536363536353536343535 - 3534353434353434343334343434343334343334343333343334333433333334 - 3333333333333333333332333332323332333332323232323232323232323232 - 3232323232323232323232313131323132323131323131313131313130303031 - 3130313130303130313030303030303030313131313131313130303131313030 - 3131303130313130303131303131303130313131303030303031303030302F2F - 2F2E2E2E2D2C2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29292A292A2A2929292929292929282929 - 2928282929282829292828282827282828282826272726272726262726262626 - 2626262626262625252525262625252625252525242525252524252424242525 - 25252727282929292C2B2C2C2C2D2D2D2C2F2D2D2E2D2D2E2D2D2E2E2C2D2D2D - 2E2E2D2D2D2D2D2D2D2C2D2D2C2C2D2E2D2D2D2D2E2D2C2C2828282525252626 - 2625262626252625252525252525242425242525242524242424242425252525 - 2425252525262626262525252525262625252625262626252526252625252525 - 2626262626262626262627262626262626262727272726272626262626262625 - 2624242424232424232323232323232323232325252526252631313233343433 - 33343232323232323132323231323030313030303030303030303030302F2F2F - 2F2E2F2F2F2F2F2F2F2F2F2F2E2F2F2F2F2F2C2C2C2929292524252222221F1F - 1E1F1E1E1D1D1E1D1D1D1D1D1D1C1D1C1D1D1C1D1C1C1B1C1B1B1B1B1B1B1B1A - 191A1A1A1B1A1B1B2727272E2E2E313131333332363536383837202021161616 - 1616161515151514151414151313131313131313131312121213131312121112 - 111111111111111110100F0F10100F100F100F0F0F0F0F0F0F0E0D0E0E0E0E0D - 0E0D0D0E0E0D0D0D0D0D0D0D0D0C0D0C0D0D0D0C0D0C0C0B0B0B0B0B0B0B0B0B - 0B0B0B0B0A0B0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A0A0A0A0A0A0A09 - 0A0A0A0909090909090909090909090909090908080908090808080808080808 - 0708080707080808070708080808070708070707070707060607060607060706 - 0606060607070607060606060606060606060506050606060605060506050605 - 0505050505050504050504050504050404040404040404040504040404040404 - 0404040403030403040404030303030403030303030303030303030303030303 - 0302020302020202020202020202010202020201020102010101010101010101 - 0101010001010101010101010001010100000000010001000100000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303535353939393A3A3A3C3C3C3D3D3D3E3E3E3232322F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F34343438383738373738373738373738373738373737373737 - 3637373637373737373737373737373737363736373737363636373636363636 - 3636363636363636363636363636353636353636353535353534343634343534 - 3435343435343434343434333434343434333434343334333333333333343333 - 3333333333333333323232323233333232333233333232323232323232323232 - 3232323231323232323132313231313232313131313131313131313131303131 - 3030303130313132313131313131313131313131313130313131303131313031 - 30313130303130303031303131303131312F302F2E2E2E2C2C2C2C2B2B2B2B2B - 2B2B2B2A2A2A2B2B2A2B2A2B2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A292A2A2A2A29292A2929292A292929292929292928292929 - 2928282929282829282828282828272728272727272727272726272626262626 - 2626262625262526252625262525262525252524252525252524242524242524 - 252424242424242726272828282C2B2B2E2D2D2E2D2D2E2D2D2E2E2D2D2E2D2D - 2E2D2F2E2E2E2E2E2E2E2E2E2E2D2D2E2E2E2D2E2D2D2E2C2C2C282929262625 - 2526262525262525262525252525252626262526252525252726262626262727 - 2726262727262726272626262627272727272727272627272827272728282927 - 2828272728272728272828282829282828282828282727282727272727292728 - 2626262625252525262525252525252525252626262626263332323535363535 - 3534343434343433323333323332323232323232323232313232323132313231 - 30302D2D2D2A2A2A252525212122212221222121212121212121212121202020 - 202021201F201F1F1F1F1F1E1D1D1D1E1E1E1D1D1E1C1C1C1C1C1C1B1C1C1B1C - 1B1C1C1C1D1C1D2E2E2E30303034343435353537383736363618181816161616 - 1616151616161515141414141414141414131313121213121312131212121213 - 121212111111101111101011101110100F0F0F0F0F0F0F0F0F0F0F0F0F0F0D0D - 0D0D0D0E0E0D0D0D0D0D0D0D0D0D0D0D0C0D0D0C0D0C0C0C0C0B0B0B0B0B0B0B - 0B0A0A0B0A0B0B0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A09090A0A090A0A09 - 09090A090A090909090908090809080809080808090808090808080808080708 - 0808070807070807070807070707080708070707070707060707060606070706 - 0706060706060606060606060606060606060606060506050505060605050505 - 0506050505050505050404050404040504050404040404040404040404040404 - 0403040404040404040403040304030403030303030303030303030303020302 - 0303020203020202020202020202010202020101010102020102010101010101 - 0101010001010100010100010101000001000000010000000000000000010100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303031 - 31313838383A3A3A3B3B3B3C3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F303737373837373837373837373837373837373737373737373737 - 3737373736363736373636373637363736363637363736363636363636363636 - 3636363636363636363635353535353635363534363535353435353434353435 - 3534343434343434343334343333333434343433343433333333333333343433 - 3333333333333233323333333333323332323332323233333232333232313232 - 3232323232323132323131313231313231323131313131313130313131313131 - 3231313132313131313132323131313131303030313030313030313130313130 - 303131303030302E2E2E2C2D2D2D2C2B2C2B2B2C2B2C2C2B2C2C2B2B2B2B2A2B - 2B2A2B2B2B2A2A2A2A2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A29292A2A292929292929292929292929292829 - 2929292828292829282828282827272827262728272727262727272626262626 - 2626262526252526252525252525252525252525242425252424242424252525 - 2525252525252525252425242526252929292C2C2C2E2D2D2E2F2E2E2F2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2D2E2D2D2D2F2F2E2E2F2F2E2E2E2E2D2D28282926 - 2625262727262626262626262726272626272828282727282728272726262727 - 2728282828272829292828282929292928292929292928292929292929292929 - 292929292929292A292A2929292929292929292928282929292A292829282828 - 2828272627272627262626272727272727272727282828333334363736353535 - 3535353535353435353534353434343131312D2C2D2929292727272524242424 - 2424242424242424242423242323242424232323232323232322222221212222 - 2221202021202021201F2020202020201F1E1F1E1E1E1E1D1D1D1C1D1D1C1C1D - 1C1C1D2423242F302F3232323433343636363738382B2B2B1616161616161616 - 1616161616161615151515151514141414141414141412131313121312121212 - 12121212121212121110111010101010101010100F0F0F0F0E0F0E0F0E0E0E0F - 0D0D0D0E0D0D0D0D0D0D0D0D0D0C0C0C0C0D0C0C0C0C0D0C0C0C0C0B0B0B0B0B - 0B0B0A0A0A0A0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A090A0A0A0A0A090A0909 - 090A090909090909090909080908080809080808080808080808070808080808 - 0708080808080707080707070707070707070607070707070707060707060607 - 0606060606060606060706060606060606060506060605060605050505050505 - 0505050505050405040404040504050404040404040404040404040404040404 - 0404040404040404030303030303030303030403030303030202020302020203 - 0202020202020202020202020102010201010201020201010101010101010101 - 0101000001010100010100010101010000010001010001000000000001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303434 - 343939393A3A3A3B3B3B3D3D3D3E3E3E3434342F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F333333383737383737383737383737383737383737373737373737373737 - 3737373736373737373737373737373636363737363636363636363636363636 - 3636363636363636363536353536363535353435353435343535343435343535 - 3434343434343434333434333434333434343334343434333433343433333333 - 3333333333333333333333333232333232323232333332333232323232323232 - 3232323232313231323131323131323131323132313132313131323132323232 - 3232323131323131313131313131313131313031303031313131302F302D2D2D - 2D2D2D2D2D2C2D2D2C2D2C2C2D2C2B2C2B2C2C2B2C2C2B2B2C2B2B2B2B2B2B2B - 2B2A2B2A2B2A2A2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A292A2A2A2A2A2A292929292929292929292929292929292829 - 2928292928282828282828282727282826272727272726272727262626262625 - 2526262625252525252525262525252525242425262526262525252526252525 - 25252424252525252525242525252525252828282C2A2B2E2F2E2F2F2E2F2E2E - 2E2E2F2E2E2E2F2F2F2E2E2E2E2F2E2E2E2E2F2E2E2F2F2F302E2F2D2D2D2929 - 292728272828282828282728282828282829282829282929292929292A2A292A - 2A2A2929292929292929292929292A2A2A2A292A2A2B2A2A2A2A2A2B2A2A2A2A - 2B2A2B2A2A2A2A2A2A2C2B2B2B2B2B2C2B2B2C2B2B2C2A2B2B2B2A2B2A2A2A2A - 2A2828282828282828282929292929292929292A2B2A3737373A3A3A36363633 - 33332F2F2F2C2C2C282828292828282828282828282728262727262727262626 - 2626262626262525252424252424252524242323232323232323232323232323 - 232322232222222121212121222222211F1F1F201F201F1F1F1F1F1F1F1E1F1E - 1F1E2B2B2A3232333434343737363A3A393A3B3B1F1F1F181918171717171716 - 1616161616161616161616161515151515151414141314131313131213121212 - 121212111212111211121010101010101110101010100F0F0E0F0F0F0F0F0F0E - 0F0E0D0D0D0D0D0D0D0D0D0C0D0D0D0D0C0C0C0D0C0D0C0C0D0C0C0C0C0B0B0B - 0A0A0B0B0B0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A090A0A090A0A090909090909 - 0909090909090909090908080908080808080908080808080808080808080808 - 0808080807070708080708070807070707070607070607060606060706070606 - 0706060606060606060605060506060606050506060606060606050505060605 - 0505040505050505050504040404040404040404040404040404040404040404 - 0404030404030403030303030403030303030303030303030303020302020202 - 0202020202020201010102020202020201020102020101010101010101010101 - 0101010101010101000000010000000000000000000100000100010000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030373737 - 3A3A3A3B3B3B3C3C3C3D3D3D3D3D3D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F37363638373738373738373738373738373737373737373737373737373737 - 3737363736373736363737373737363737363737373637363637363636363636 - 3636363636353636353636353635343634353635343534343534343535343434 - 3434343434343434343433343433343333333333343434333434343333333333 - 3333323333333332333332333332323232323233333233323232323232323232 - 3231323132323132313232323231313231323231313231313231313132313232 - 313231313131313131313131313131302E2F2F2E2E2E2E2D2E2D2D2D2D2E2D2D - 2D2D2D2D2D2D2D2C2D2C2B2D2C2C2C2B2B2C2B2B2C2B2B2C2B2B2B2A2A2B2B2A - 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A292A29292A292A2929292A29292929292928292928292929282828 - 2828282928282828282828282828282727272627272626272626262626262526 - 2526252625262625252626272626262626252526262626262526262526252525 - 252525252625262525252525252525252626262727272A2A2A2F2F2F2F302F2F - 2F2F2F2F2F2F2F2F2F2F2F30302F2F2F2F3130303030303230313131302D2E2D - 2928282929292929292A292A2A292A2B2B2A2A2A2B2A2A2A2A292A2A2A2A2929 - 292A2B2B2B2C2B2B2B2B2B2B2B2B2B2A2C2C2B2B2B2B2C2C2D2D2D2D2D2D2D2C - 2D2C2D2D2C2D2D2D2E2D2D2D2C2C2E2D2D2E2D2D2E2E2E2E2D2E2E2D2D2C2B2C - 2B2A2B2B2A2B2B2B2B2B2B2B2B2B2B2B2B2B2E2D2E2B2B2C2B2B2B2B2B2C2B2B - 2B2B2B2B2B2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29292829292828292828 - 2828262727272627272726262627262626262626252525252525242525242424 - 2424242323242323232323232323232122212120212020201F1E1F2020202222 - 233131313434343636363939393A393A32323219191919191918181817181717 - 1716171616161616161616161616161616151514141414141313141313121212 - 1212121211121212121211111111111010101010101010100F0E0E0F0F0F0E0E - 0E0E0E0F0D0D0D0D0D0D0D0C0D0C0C0C0D0C0D0C0C0C0C0C0C0C0C0C0B0C0B0B - 0B0A0A0A0A0A0B0B0A0A0A0A0A0A0A0A0A090A090A0A0909090A0A0A09090A09 - 0909090909090909090909080808090908080808080808080708080807080808 - 0708080708070808080707070707070707070707070606060607070706060606 - 0607060606060606060606060605060605050605050505060505060505050505 - 0504050504050504050404050405040404040404040404040404040404040304 - 0404040304040303030303030303030303020302030303030202020202020202 - 0202020202010201010202020201010202010101010101010101010101010101 - 0101010101000100000101000000000100010000010001000001010000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303232323939393A - 3A3A3B3B3B3D3D3D3E3E3E3736372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F313131 - 3837373837373837373837373837373737373737373737373737373736373736 - 3637363737373636363636373736363737363737373736363637373736363636 - 3636363535363635363535363535353535363534353435353434343434343434 - 3434343333343334343434343434343434343333333334333433333333333333 - 3333333333333333323233323233333232323232323232323232323132323232 - 3231313132323132323231323131323131323131323131313231323132323132 - 3131313130312F2F2F2E2E2E2D2E2D2E2D2E2E2D2E2D2E2D2D2D2E2D2D2D2D2D - 2D2D2C2D2D2D2C2D2C2C2C2C2B2C2C2B2C2B2C2C2B2B2C2B2A2B2B2B2B2B2B2B - 2A2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A292A2A292A2A2A2A292A292929292A2929292929292929292928282929 - 2828282828282828282828282828272728272727262627262626262626262627 - 2627272627262627262626262626262625262526252626252526262726262626 - 2526262625262626262726262626262626262625262625252829292E2E2D3031 - 31303030302F2F3031313030313231323132313131313231313331313132312D - 2D2D2B2B2B2B2B2B2B2B2B2A2B2A2B2B2A2B2B2B2B2B2C2C2C2C2B2C2B2C2B2B - 2D2C2C2D2C2C2D2E2D2D2E2D2D2E2D2E2D2E2E2E2E2E2F2E2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2E2E2F2E2E302F2E2F2E2F2F2F2F2F2F2F2E2E2E2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2C2D2C2D2D2C2D2C2C2D2C2C2C2C2C2C2C2C2C2C2C2B2B2A2A2B2A2A2B2A2A2B - 2A2A2A29292A2A2B2A2B292A292A292929282929282927272827272726272726 - 27272525252425252424242323232222222222232222222021212021202A2A2B - 3433333636373939393C3C3C3D3D3D272727191A191A191A1919191819191817 - 1816161616161716161615161616161616161614141414151513131313131313 - 1313111111111211111112111111111111101010100F10100F0F0F0F0E0F0E0E - 0E0E0E0E0E0E0C0D0D0C0C0D0D0D0D0D0C0D0C0C0D0C0C0C0C0C0C0C0C0C0C0B - 0C0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A09090909090A090A0909090909 - 0909090908080909090808080808080808090808080808080708080808080807 - 0807080707070707070707070707070607070707070606070607070606060606 - 0606060606060605060606060606050606050505060505050505050505050505 - 0505050505040505040505040404040404040404040404040404040404040404 - 0404040403040403040303030303030303030203030303030202020202030202 - 0201020201020202010101010101020102010201010101010101010101010100 - 0101010000010101000100000000000101010101000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303636363939393A3A - 3A3C3C3C3D3D3D3E3E3E3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F35353538 - 3737383737383737383737383737373737373737373737373737373737373737 - 3737363637363737373737373737363736373637373636363636363636363636 - 3536363536363536353536353436353535353435353435343535343434343434 - 3434343434333334333433343433343334333433333333333333333333333333 - 3333333332333332323332323233323232323232323232323232323232323232 - 323131323231313232313231323232313231313231303232313131313030302E - 2E2F2E2E2F2F2E2E2E2E2E2D2D2E2E2E2D2D2E2E2D2D2E2E2D2D2D2D2E2D2D2D - 2D2D2D2D2D2C2D2C2B2D2C2B2C2C2B2C2B2B2C2B2B2C2B2B2B2B2B2B2B2B2A2A - 2A2B2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A29292A2A2929292929292929292929292929292929282929292829 - 2929282828282828282828282727272727272726262726262727272726262626 - 2727262626272626262726262626262627272727272627262626262627272727 - 27272727262726272627272626262626262625262726262625272A2B2A30302F - 3232323232323131323132313232323332323232323331323432333333333030 - 302C2B2B2C2C2C2C2B2C2D2C2C2D2C2D2C2C2C2D2D2E2E2E2E2E2D2E2F2E2E2F - 2F2E2F2F2F2F2F2F303030302F302F2F30303030303030303030313131313131 - 3131313131313130303130303231313131303231313231313232323131312F2F - 2F2F2F2F2F2F302F2F2F2F2F2F2F2F2F2F30302F2F30302F2F2F2F2F2F2F2F2E - 2E2F2F2F2F2F2E2F2D2D2D2D2E2D2D2D2D2D2D2D2D2D2E2E2D2D2D2D2D2E2E2E - 2D2D2D2D2D2D2C2C2D2C2C2C2B2A2B2B2A2B2A2A2B2A2A2B2829292929292727 - 2727272726262626262624252523232323232323232323232323232332313236 - 36363838383A3A3A3D3D3D3A3A3A1E1D1E1B1B1B1A1A1B191919191919181919 - 1717171818181716161616161516161616161615151515151514141414151313 - 131213131112121112111111111112111111111010100F0F0F100F100E0E0F0E - 0E0E0E0E0E0D0E0E0D0C0D0C0D0D0D0C0C0C0C0C0C0C0C0C0B0C0C0C0C0B0B0C - 0A0A0B0A0A0A0A0A0B0A0A0A0A0A0A090A090A090A090A090909090909090909 - 0909090908080908080908080908080808080808080808080808080808070808 - 0808070807070707070707070707070607070607070707060707060606060706 - 0606060606060606060606060606060605050506050506050505050505050505 - 0505050505050404040404040404040404040404040404040404040404040404 - 0403030403030403030303030303030302020303030202020203020202020202 - 0202020202020201020202010201020101020101010101010101010101010101 - 0001000100010001000001010100000100000000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303131313939393A3A3A3B3B3B - 3C3C3C3E3E3E3A3A3A2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3030303837373837 - 3738373738373738373737373737373737373737373737373737373737373736 - 3736373737363637363636363737363636363636363637373636363636363635 - 3536353635353635353535343534343635343534353434343435343434353434 - 3434343334343433333434343433343434343333333333333333333333333333 - 3333333332333332323232333332333233323232323232323232323132323231 - 323232323131323231323131323131313131302F2F2F2F2E2F2F2F2E2E2F2E2E - 2E2E2E2E2E2E2E2E2E2E2D2E2E2D2E2E2D2E2D2E2D2D2D2D2E2D2D2D2D2D2D2D - 2D2D2D2D2C2D2C2B2D2C2C2C2B2B2C2B2B2C2B2B2C2B2B2B2B2B2B2B2B2B2A2B - 2A2B2B2A2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A292A2A292A292A29292A292929292A29292929292929282928282928292928 - 2828282828282828282827272727292728282827282727272727272727272727 - 2727272627262727272727272727272727272728282727272828282727272627 - 272627272626272627262827272727272827282727282827282827282C2C2C31 - 3131333332333233323332333334333333333333353334363435353534353535 - 3030302D2D2D2D2E2E2E2F2E302F2F302F302F2F2F2F30303030303030303031 - 3030303031313131313131313233323232323332323233333333333334333335 - 3434343434343334343333343433343333343534343434353535343333333233 - 3232333232333332323232323132323132323332333233323332323232323131 - 313131313232313131313232333232323232323232313231313030303030302F - 2F2E2F2E2E2D2D2E2D2D2E2D2D2E2D2D2D2C2C2D2B2A2C2B2A2B29292A2A2929 - 2929292828282627262626262425242424252323232424242828293535363939 - 383B3B3B3E3E3E3E3E3E2E2D2D1C1D1D1D1D1C1C1B1B1B1B1B1A1A1919181819 - 1918191819171817171717161616151616161615151515151516141414141413 - 1313131212121111121111111111111111111111110F100F0F0F0F0F100F0E0E - 0E0E0E0E0E0E0D0E0E0D0D0C0D0D0C0C0C0C0C0C0C0D0B0C0C0B0C0C0C0C0C0C - 0C0C0B0A0A0B0A0A0A0A0A0A0A090A0A0A0A0A0A09090A0A0909090909090909 - 0909090809090909080809080908080908080808080808070808080808070808 - 0807070707070707070707070707060607070707060707060606060606060706 - 0606060606050606050606060505060605050505050505050505050505040505 - 0505050504040405040404040404040404040404040404040404040404040404 - 0403030303030303030303030303030302030302020202020202020202020202 - 0201020102020102010101020101010102010202010101010101010001010100 - 0000000001010100000001000000010101000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303535353939393A3A3A3C3C3C3D - 3D3D3E3E3E3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F343434383737383737 - 3837373837373737373737373737373737373737373737373737373737373736 - 3737373737363637373736373637363637373636363636363636363536363535 - 3535353535363434363535353435353535343435343434343434343434343434 - 3434343434343334343334343433333334333333333333343333333333333333 - 3333333232333332323232323232333233323232323232323232323232323131 - 32313132313131313130302F2F2F2F2F2F2F2F2E2F2F2E2E2E2F2F2E2F2F2F2F - 2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2E2D2D2D2D2E2D2D2D2D2D2D2D2D2D - 2D2D2D2C2D2C2C2C2C2C2C2B2B2C2B2B2C2C2C2C2B2B2B2B2B2B2A2B2A2A2A2A - 2A2A2A2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A292A2A2A2A292A292A2A2A29292929292929292929292928292928282829 - 2828282828282828292929272828282828272728272727272727272727272627 - 2728272728282727282828272828272827282827272727282727272727272727 - 27282727272828282828292829292929282929282928272829292A2A2A2A2F2F - 2F34343434343434343434343435353536363637363637363637373637373634 - 3434303030303030313030313130313231313131313131323232333333333333 - 3333333333333334343434353635353535353535353636363635353636363636 - 3636353636363536353537353636363637363636363737373735353635353535 - 3535353535353535353535353435353535353535353535353535353535353535 - 3535353535353535353535353535343534353433333333333232323232323131 - 31313030313031312F312F2E2F2D2D2E2D2D2E2D2D2D2C2D2D2C2C2C2B2B2B2A - 2A2A2929282727282728272626262525252525252525253233333839383B3B3C - 3C3C3C4040403F3F3F2021211D1E1D1C1D1C1C1C1C1C1C1C1B1A1A1A1A1A1919 - 1918181818181817171717171716151515151615161515151515151514131414 - 14131212121212131212121111111111101011111111110F100F0F0F100F0F0F - 0E0E0E0E0E0D0E0E0D0D0D0C0C0C0C0C0C0D0C0C0C0C0C0C0C0C0B0C0B0C0C0B - 0C0B0A0A0A0A0A0A0A0A09090A0909090A090A09090A09090909090909090908 - 0908080808080908080908090808080808080808080808080807080707070707 - 0707080708070707070707060707070706070606070706060706070707060606 - 0606060606060606060506060505050505050605050505050505050505040404 - 0504040405040404040404040404040404040404040404040304030303040304 - 0303030303030303030303020303030303020202030203020202020202020102 - 0202020201010201020201010101010201010101010101010101010101010100 - 0101000101000001010000000000000000000100010000010000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303131313838383A3A3A3B3B3B3C3C3C3D3D - 3D3D3D3D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3037373738373738373738 - 3737383737373737373737373737373737373737373737363737373636373736 - 3637373737363737373736363636373736363636363636363636353636353535 - 3536353436353536343435353435343434353434343434343434343434343434 - 3334343433333434333334333333343333343334333334343333333332333332 - 3333323332323332333332323332323232323232323232323231323232323231 - 302F2F30302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2F2E2E2F2E2E2F2F2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D2D2D2D2D2D2D2E2E2E2E2D2D2D2D2D - 2D2D2C2D2C2C2C2C2B2D2B2C2C2B2B2C2B2B2C2B2B2B2A2B2B2B2A2B2B2A2A2B - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292A - 2A2A292A2A2A292929292A292929292928282929282929292928282828292929 - 2929292928292928292927282928282827282827272828282828282828272727 - 2728282828282828282828282828282728272827282728282828282828292829 - 28292A292A292929292A292929292A292A2A2A2B2A292A2B2A2B2B2B2B2C2C2C - 3232313635353737363636363737373737373737373937373938373939383838 - 3834333332323233333333323233333334343433343434353535363636363636 - 36363636363636363737363737373838383837373838383938383938383A3838 - 3939383938383A3939393939393A393A393A3A3A3A3B3A3A3837373838373838 - 383838393939393939393A3A3A3A3A3939393A3A393939383838383838383838 - 3838373737373737373737373737363636363636353535353535343434343334 - 3333343232333231333131312F2F302F2F2F2E2F2F2E2D2E2D2D2D2C2C2C2C2C - 2C2C2C2C29292928282827272727272727272729292A3939393B3B3C3D3D3D40 - 414141404134343420201F1E1E1F1D1D1D1D1D1D1C1C1C1B1B1C1A1B1A191A19 - 19191A1818181818181717171716171616151515161515161515151514151413 - 141313141213131213121111111111111111101011111110100F0F0F0F0F0F0D - 0E0E0E0D0E0D0E0D0E0E0D0D0C0C0D0D0D0C0C0C0C0B0C0C0B0C0C0B0B0B0B0B - 0B0B0B0A0A0A0A0A0A0A0A0A09090A09090A09090A090A090A09090909090908 - 0909080908090909090909080809080808080808080807080708070807070707 - 0708070808070807070707070707070607070707060607070707070607060606 - 0606060606050606050606050505060505050505060505050505050505050405 - 0404040504040404040404040404040404040404040404040403030403030303 - 0303030303030303030303030303020303020202020202010202010202020102 - 0201010202020101010101010101010201010101010100010101010001000001 - 0101010101000101010101000000010001010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303333333939393A3A3A3B3B3B3D3D3D3E3E3E - 3535362F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3232323837373837373837373837 - 3737373737373737373737373737373737373737373737373737373736363736 - 3636373636363637373637363736363736373736363635363635363535353535 - 3535353534353535353535353534343434343434353534343434343434343433 - 3434343333333334343433333434333333333334333333333333333333333333 - 33333233333333333332323332323232333232323232323031312F302F303030 - 3030302F2F302F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2F2E2E2F2F2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2D2E2E2E2D2E2E2D2E2E2D2E2D2D2D2E2D2D2D2D2D2D - 2D2C2C2C2B2C2C2B2D2B2B2C2B2B2C2B2B2C2A2A2B2B2B2B2B2A2A2B2B2A2B2A - 2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 29292A29292A29292A29292929292929282829292829292A2929292A29292A29 - 2929292829282929292728282728292829292828282828292929292829282829 - 2828282829282728282828272829292829282A292A2929292A2A2A2A292A292A - 2A2A2A292A2A2A2B2B2C2C2C2C2C2B2B2B2B2B2C2A2C2C2B2C2B2B2C2C2C2C30 - 2F303736363737373838383938383939393B393A3C3B3B3C3B3A3B3B3B3A3A3A - 3636373535343535353535363636363636363636363736363737383838383938 - 38393939393A3A39393A3A3A3B3B3A3A3B3B3B3C3B3B3C3B3B3C3C3C3C3C3C3C - 3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3C3C3D3C3D3D3C3D3D - 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3D3D3C3D3C3C3C3C3B3B3B3B3B3B3A3A - 3B3A3B3A3A3B3A3A3A3A38393939393838373837373836363636363636363636 - 35363634363434343232333232333131313131312F30302E2E2E2E2E2E2D2D2D - 2C2C2D2B2B2B2B2A2B29292A2929292828273332333B3B3B3E3D3D3F3F3F4242 - 424343432525262021201F201F1F201F1E1E1E1D1D1D1C1C1C1C1C1B1B1B1A1A - 1B1A191919181818181818181717161716151515151615151515151515151415 - 1413141314131213121212121111111110111010111110100F0F0F0F0F0F0F0F - 0F0E0E0E0E0E0E0E0E0D0C0C0D0C0C0C0C0C0C0C0C0C0B0C0C0B0C0C0B0C0B0B - 0B0C0A0A0A0A0A0A0A0A0A0A090A0A0A090A0909090A09090A09090909090909 - 0908090909090909090908080808080808080708080808080807080807080707 - 0708080707070707070707070607070706060706060606060606070606060706 - 0506060605060605050505050505050505050505050505040405050404040404 - 0404040404040404040404040404040404040404040404040303030303040303 - 0303030303030303030303020202020202030302020202020202020202020201 - 0202010102020101010101010101010101010101010101010100000101010000 - 0000000000000001010000000000000001000001000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303737373A3A3A3A3A3A3C3C3C3D3D3D3E3E3E2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F363636383737383737383737373737 - 3737373737373737373737373737373737373737373637373737373737373737 - 3737363636373736373736363736363636363636363536363536343436353536 - 3535363534353434353435343435343434353435353434343434343433343434 - 3433333434343334343333343333333333333333323333323233333333333233 - 32323333333333333332323232313131303030303030302F302F2F30302F302F - 302F2F302F2F302F2F2F2F2F2F2F2F2E2F2F2F2F2E2F2F2F2E2F2F2E2E2E2E2E - 2E2E2E2E2E2E2E2D2E2D2D2E2D2D2D2E2E2E2D2D2E2D2E2D2D2D2D2D2D2C2D2D - 2C2D2C2B2C2C2B2C2C2B2C2B2B2C2B2B2C2B2B2B2A2B2B2A2A2A2A2B2A2A2B2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292A2A2A2A2A - 2A2A2A2A2A292929292A29292929292A2A2A292A2A29292A292A2A2929292929 - 292929292A29292A29292929292A29292A292929292829292829282929292828 - 29282828282929292929292A2A2A2A2B2B2A2A2A2A2A2A2A2A2A2B2B2A2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2D2C2D2D2D2E2E2C2E2D2C2D2E2D2E2E2E2E3030 - 2F3535363A393A3A3A3A3B3B3B3B3B3B3C3B3B3C3B3B3D3D3C3D3D3C3E3E3E3A - 3B3B373737373637373737383938393939393939393A393A3A3B3C3B3B3B3B3B - 3C3C3C3C3C3C3D3C3D3C3C3C3D3D3D3E3D3D3E3D3D3F3E3E3F3D3D3E3D3D3F3F - 3E403F3F3E3F3F40403F3F3F403F3F3F403F403F3F3F404040403F3F3F3F403F - 3F3F403F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3F3F3E3E3E3E3E3E3D3D3D3D3D3D - 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3A3A3B393A3939393A3938393837383737 - 383736363535363535363434343333333131313231313030312F2F2F2E2E2E2D - 2D2D2D2C2C2C2C2B2A2A2A2B2B2B2C2C2C3939393E3D3D404040434443444444 - 373737232323212221212020201F1F1F1F1F1D1E1E1D1D1D1B1B1C1B1B1B1C1B - 1B1A1A1A19191918181818171818171717171615161515151515151415141514 - 15141413131212121212121111111111111010111011101010110F0F0F0F0F0F - 0F0F0F0D0D0E0D0D0E0D0D0D0C0C0D0C0C0C0C0C0C0C0C0B0C0C0C0B0C0B0C0B - 0C0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A09090909090909090909090909 - 0809090909090809080808080808080808080808080807080708070708080707 - 0707070707070707060707070707070607070707060606070606060606060506 - 0605060606050606060605050505050505050505050505050505050404040404 - 0405040404040404040404040404040404040403040303030404040303030303 - 0303030303020302030203020202020202020202020202020202020202010102 - 0101020102010201010101010101020101010100010101010101010101010000 - 0101010001000000010101000000000101000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303232323939393A3A3A3B3B3B3D3D3D3E3E3E3838382F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F31313138373738373738373738373737373737 - 3737373737373737373737373737373737373737373737373636373737373736 - 3737373636363737363636363636353736353636363635353635353635353535 - 3435353435343535343434343535353434343434343534343433343434333434 - 3333343333343433343332333232333333333332333332333333323333333332 - 333333323332323131303031303030303030303030303030302F2F2F302F2F30 - 30302F2F302F2F2F302F2F2F2F2E2F2F2F2E2E2E2E2E2F2E2F2E2E2E2E2E2E2E - 2E2E2E2E2E2D2E2E2D2D2E2D2D2D2E2E2E2E2E2D2E2D2D2D2D2D2D2D2D2D2D2C - 2D2C2C2D2C2B2C2B2B2D2C2B2C2B2B2C2B2B2B2B2B2B2B2B2B2A2A2A2A2B2A2A - 2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2929 - 2A2A29292A2A2A2A2A2A2A2A2A2A292A2A29292A29292A29292A292A292A2A2A - 2A2A2A2A2A292A292A2A292A2A2A292A292A2929292928292828282A29292A2A - 2A2A2A2A2A2A2A2B2B2A2B2A2B2A2A2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D - 2C2C2D2E2D2E2E2E2E2E2D2E2D2E2F2E2E2F2F2F3030312F2F30303030303030 - 3535343B3A3B3C3C3C3D3D3D3D3D3D3F3E3E3F3E3E40404040403F40403F3F3F - 3F3A3A3A3B3B3B3C3B3B3D3C3C3C3C3C3C3C3C3C3D3D3D3D3E3D3E3E3E3E3E3F - 3F3F3F403F404040414040414141424141424141424141424142424141434242 - 4343434343434243424342424343434343434343434444444344444344434344 - 434344434343434242424343424343424242424141414141414140403F403F40 - 3F3F3F3F403F3F403E3E3E3D3D3D3D3D3D3C3C3C3C3B3C3C3B3B3B3A3B3A383A - 3837383737383636373635363535353434353433343332323131313030312F2F - 2F2D2E2E2D2D2D2D2D2D2C2C2C3535353E3E3F41414143424244454446464628 - 29292323232323232122222020201F1F1F1F1F1F1E1E1E1C1C1D1B1C1C1C1B1B - 1B1C1B1A1A1A1919181817171718171717161616171515151415151515151414 - 151314131413131212121211121011111011101011101110100F0F0F0F0F0F0F - 0F0F0E0E0E0D0E0D0E0D0D0D0C0D0C0C0C0C0C0C0C0C0B0C0C0C0B0C0B0C0B0B - 0B0B0B0A090A0A090A0A090A0A0A090A0A090A09090909090909090908090909 - 0908090809090808080808080808080808080808070808080807080708070807 - 0708080707060707060707070707060706070707060606060606060606060606 - 0606060606060506050505050505050505050504050505050505040404040404 - 0404040404040404040404040404040404040403040404030303030303030303 - 0303030202020302020302020202020202020202020202020202020201010102 - 0102010201020102010102010101010001010101010100000101000101000100 - 0100000100010001000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303636363939393A3A3A3C3C3C3D3D3D3E3E3E3131312F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3434343837373837373837373737373737373737 - 3737373737373737373737373737373737373736373737373737373737373737 - 3737363637363636363736363635363635363535363535363435363535353435 - 3535353435353434343534343535343434343434343434343434343434343434 - 3434323333333333323334333233323233333233333233333333323232323132 - 31313131313030303030303030303030303030303030303030302F2F2F302F2F - 2F2F2F30302F2F2F2F2F2E2F2F2F2F2F2F2E2E2F2E2E2F2E2E2E2F2E2E2E2E2E - 2E2E2D2E2D2E2E2E2E2D2D2E2E2E2D2D2D2E2E2D2E2D2D2D2D2D2D2D2D2D2C2C - 2C2C2D2C2B2D2B2B2D2B2B2C2B2B2C2B2A2B2A2B2B2B2A2A2B2B2B2A2A2B2A2B - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292A2929292A2B - 2A2A2A2A2A2B2A2A2A2A2A2A2A2929292A292A2B2B2A2A2B2A2A2A2A2A2A2A2A - 2A2A2A2A2A2B292A2A2A2A2A2A2A2A29292929292A29292B2A2A2B2A2B2C2B2B - 2C2B2B2B2B2B2B2B2C2C2C2C2D2C2C2D2D2C2C2C2C2D2D2D2E2E2D2E2D2E2E2F - 2F2E2E2E2F2F2F302F3031303130303131303132323231313231323233333334 - 34353B3B3B3F3F3F404040404040414040424140424242444342444443434343 - 3D3D3D3D3E3D3E3E3E3F3E3E3F3F3F40403F4140414041404141414242424343 - 4342434243434343434344434344444344444445434446444446464546454646 - 4545464646464546454646464646464646464646474746474747464747464646 - 4746474646464546454646464545454545454545454444434444444344444343 - 424242424242424141414040403F403F3E3E3E3E3E3E3E3D3E3D3C3D3B3B3B3A - 3A3B39393A383838373737373737363636353535343534343434323232303030 - 2F2F2F2E2E2F2F2E2E2F2F2F3D3D3D4141404343424647474747473A3A3A2425 - 252424232323232223232222222121211F1F1E1E1F1F1E1E1E1C1C1C1B1B1B1B - 1B1B191A1A1A191A191818171718181718161616151515151515151414141414 - 1415151313131313131212121111111110111010111010101010100F0F0F0F0F - 0F0E0D0E0E0D0E0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0B0C0B0B0C0B0B0B0B - 0B0B0A0A0A0A0A09090A090A0A0A0A09090A0909090909090909090909080909 - 0809090908080809090808080808080808080808080708080708070808070808 - 0707080707070707070707060707070606070707070706060606060606060606 - 0506060505050505050506050505050505050505040404050405040404040404 - 0404040404040404040404040404040404040403030303030304030303030302 - 0303030303020302030303030202020202020202020202020201020101020201 - 0201020102010101010101010101010101010101010101010101010101000100 - 0101000001000100010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303131313838383A3A3A3B3B3B3C3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F303030373737383737383737383737373737373737373737 - 3737373737373737373737373737373637373737373737363637373736373636 - 3636373636363636363636363536363536353536353536353536353535353535 - 3535353435343434353535343534343434343435353434343434333333333332 - 3332323332323432333433333332323333323332323232323130313131303231 - 31313130303031303031303030303030302F30303030302F30302F2F2F2F2F30 - 2F2F2F2F2F2F2F2F2F2F2F2F2E2F2E2F2F2E2F2F2F2F2E2E2E2E2E2E2F2E2E2E - 2E2E2E2E2D2E2D2E2E2D2D2D2D2E2D2D2D2D2D2E2D2D2D2D2D2D2D2D2D2C2C2C - 2C2C2C2C2D2B2C2D2B2B2C2B2B2C2B2B2B2A2B2B2A2B2A2A2B2A2A2B2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2A2B2B2B2A2A - 2A2B2B2A2A2A2A2A2A2A2A2A2A2A2B2A2B2B2A2A2A2B2A2A2A2A2A2A2A2A2B2B - 2B2A2A2B2A2A2A2A2A2A2B2A2A2B2A2A2B2B2A2B2B2A2B2C2B2B2B2B2D2C2D2C - 2C2C2D2D2D2C2C2D2D2D2C2C2C2C2D2D2D2E2E2E2E2F2F2E2F2F2F302F313131 - 3131323131313232323232333332333333333433343434353535353636363636 - 363C3D3D41414142424242414245444445454545454447464547474646464641 - 4041414242424141424242424242434343434343444444454546464545464646 - 4746464847474847474947484847474948484948494949484949484949494949 - 49494A4A4A4A494A4A4A4A4A4A4A4A4A4A4A4A4A494A49494A4A4A49494A4A49 - 4949494949494948484848494948484849474747474747464646464646454545 - 454545454545444343434242434243414042414041403F403F3F3F3D3E3E3D3E - 3E3C3D3D3A3A3A3A3A3A39393837383837373737373735343533333333333332 - 31322F302F303030393939414141444444464746484848494A4A2C2C2C262526 - 2425252424232323232322222222222120211F1F1E1E1F1F1D1D1E1C1D1C1B1B - 1B1B1B1A1A1A1A18191917171717181717171716161615151514151414151414 - 14151313131313131212121112121111101110111010101010100F0F0F0F0F0F - 0F0F0E0E0D0E0D0D0E0D0D0D0C0C0C0C0C0B0B0C0C0C0C0B0B0B0C0C0C0B0B0B - 0B0A0A0A0A0A0A0A0A09090A0A09090A0A09090A090909090908090908090908 - 0909090808080808080808080808080808080708080808080808070707070708 - 0707070707070707070707070606060706060606070606060606060606060606 - 0605050606060506050505050505050504040404040404040404040404040404 - 0404040404040404040404040404040403030403030303030303030303030303 - 0303020302030302030202020202020202020202020201010202020101020201 - 0202010201010201020101010101010101010101010001010001010101000100 - 0000010001000101000000000000000100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303535353939393A3A3A3B3B3B3D3D3D3E3E3E3333332F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F33333338373738373738373737373737373737373737373737 - 3737373737373737373737373737373737363737373737373737373736363737 - 3636363636353637363636353735353635353635353635353635353535353435 - 3534343535353434343434343435353434343433333333333332333333333333 - 3332333232333332333232333233323232323231323131323131313031323130 - 31313130313131303030303030303030303030302F3030302F302F2F30302F2F - 2F2F2F302F2F2F2F2F2F2E2F2F2E2F2E2E2F2E2E2E2F2E2F2E2E2F2E2E2E2E2E - 2E2E2D2E2E2E2E2E2D2E2D2E2E2D2D2E2D2D2D2D2D2D2D2D2D2D2C2D2C2D2C2C - 2C2C2C2D2B2B2D2B2B2C2B2B2C2B2B2B2B2B2B2A2A2A2B2B2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2A2A2B2B2B - 2A2B2A2B2A2B2B2B2B2A2B2B2B2A2B2A2B2A2B2A2B2C2B2B2B2B2B2B2B2B2A2B - 2B2A2A2C2B2B2C2B2C2C2B2B2D2C2C2C2B2B2C2C2C2D2D2D2E2D2D2E2D2D2D2D - 2D2D2D2D2E2E2E2F2E2F302F2F2F2F2F30303031313031323232323232313233 - 3334333334343434353434353536363537373637363637373737383838383839 - 3D3D3C4444434545454545454646464746464848474949494949484949484545 - 454344434444444545454645464746474747484848494848484949494949494A - 49494949494A4A4A4B4A4A4C4B4B4C4B4B4C4C4C4C4C4B4C4C4C4D4D4D4D4D4D - 4D4D4D4D4D4C4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4D4D4D4D4D4C4C4C4C4C - 4C4C4C4C4C4C4C4B4B4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A49484948484847 - 47474747474646464645454444454443444343434241424040403F3F403F3F3F - 3E3E3F3D3D3D3C3C3C3A3B3B393A3A3A39393737373636363636363433343332 - 323232323333334040404445454747474949484949493F3E3E28282827272726 - 26262525242323232323232222222221222121211F1F1F1E1E1E1D1E1D1C1C1C - 1A1B1A1A1A1B1A1A191819181717171717171717171616151515151515141415 - 141414141313131313131211121011101010111010101010101010100F0E0F0F - 0F0E0E0E0D0D0D0D0D0D0E0C0C0C0B0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B - 0A0A0A090A0A0A0A0A090A0A0A0A09090909090A090909090908090809090909 - 0808080809080808080808080808080808080807080808080707080707070707 - 0707070707060607070706060707060606070606060606060606050606050605 - 0505060505050505050505050504050404050404050404040404040404040404 - 0404040404040404040403040404040404030304030303030303030302030303 - 0302020203030202020202020202010202010202020102020202020202010102 - 0101020101010101010101020100010101010101010101010100010100010001 - 0000000001010100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303838383A3A3A3B3B3B3C3C3C3D3D3D3D3D3D2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F303736363837373837373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373736373736363637363636 - 3636373635363636363535363535363535363535363535353535353434353435 - 3535343535343434343434343333333333333333333333333333333332333332 - 3233333232323332323232323132323132323132313132313131313132303131 - 3030303031303030303130303030303030302F302F303030302F2F302F302F2F - 2F2F2F302F2F2F2F2F2E2E2F2F2F2E2F2E2F2E2F2E2E2E2F2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2D2D2D2E2D2E2D2D2D2E2D2D2D2D2D2D2D2C2D2C2D2C2D2C2C2D - 2C2C2C2B2C2C2B2C2C2B2B2C2B2B2B2A2B2B2B2A2B2B2A2A2A2A2A2B2A2A2A2A - 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2A2B2A2B2B2A2A2A2C2B - 2B2B2B2C2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2B2B2B2B2B2B2C2C2C2C2C2B2D - 2D2D2C2B2C2D2C2D2D2C2C2E2D2D2D2D2D2E2E2E2D2E2D2D2E2E2E2E2E2F2F2F - 30303030302F3031303131313232323232323232323333343334333434343535 - 363636363737373737373837383838383A393A39393A3A3A3A3B3C3C3B3C3B3E - 3E3F4546454848484949494949484B4A4A4C4C4B4C4C4B4D4D4C4D4D4D484848 - 4848484949494949494949494B4A4A4A4B4B4B4B4B4C4C4C4D4D4D4D4C4C4E4D - 4D4F4E4E4F4E4E4F4E4F504F4F50505050505050505050505051515151515151 - 5151515151515151515151525252525252525151525151525251515152505050 - 4F504F4F504F4F4E4F4E4F4E4E4F4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4A4A - 4A4A4A4A4948494847484746464646474646464544454343434342434140403F - 3F3F3F3F3F3F3F3E3C3D3D3D3D3D3A3A3B393A39383938373637363536343534 - 3434343D3C3C4646464747474A4B4B4B4C4B4D4C4D2F2F302929292828272626 - 272626262424242324232323232222212222211F1F1F1F1E1F1F1E1E1D1D1D1C - 1C1C1B1A1A1B1B1B1A1A1A181819171717171717161516151514141414141514 - 1414141213131213131112111111111110101010101010101010100E0F0E0E0F - 0E0D0D0D0E0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0C0B0B0B0B0B0C0C0B0B0A - 0A0A090A0A090A0A090A090A0909090909090909080909090909090908090809 - 0809090808080808080808080807080807070808080708080707070707070707 - 0707070707070707060707070606060606060706060606060606060606060605 - 0505060505050505050505040505050404040404040404040404040404040404 - 0404040404040404040404040403030304040403030303030303030303020302 - 0202030202020302030202020202020202020102010202010201010102020101 - 0102010101020101010101010101000101000001010001000100010000000101 - 0000010001000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303232 - 323939393A3A3A3B3B3B3D3D3D3E3E3E3736372F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F323132383737383737383737373737373737373737373737373737373737 - 3737373737373737373737373637373737373737373737373736363636363736 - 3636363536363536353536353536353536353535353435353535353535343535 - 3534343534343333333433333433333334333333333233333333333332323333 - 3233323232323232313332313232313232313231303231313130313130303130 - 3130303130303030303030303030303030303030302F2F30302F2F2F2F302F2F - 2F302F2F2F2F2F2F2F2E2F2F2F2F2F2E2E2E2E2F2E2F2F2E2F2E2E2E2E2E2D2E - 2E2E2D2D2E2D2D2D2D2D2D2E2D2D2D2D2D2D2D2D2D2D2D2D2C2D2C2C2C2B2C2C - 2C2C2B2C2C2B2B2C2B2B2C2B2B2B2B2B2B2A2A2A2A2A2A2B2A2A2A2A2A2A2A2A - 2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2B2B2B2C2B2C2C2B2B - 2B2B2C2B2B2B2C2C2C2C2B2B2B2C2B2B2C2B2C2C2C2D2C2C2D2D2D2D2E2E2E2D - 2E2D2D2D2E2D2E2F2E2E2F2E2E2E2D2E2E2D2E2E2F2E302F2F30303030303031 - 3131323232323232323332333333343434353535363636373637373737373838 - 3838383939393B3A3B3B3A3B3C3B3D3D3C3D3C3C3D3D3D3D3D3E3E3F3F3F4141 - 424848484B4B4B4C4B4C4E4D4D4E4E4D4F4E4D50504F5151505150514C4C4C4C - 4C4B4C4C4D4D4D4D4E4E4E4F4F4F4F4F4F504F4F4F4F4F515050525151525151 - 5352515452525453535453535352535454545454535554545555555555555555 - 5554545554545454545454545454545454545453535353535453535353535353 - 535353535353535352525351515151515150504F50505050504F4E4E4F4E4E4E - 4D4D4D4D4C4D4C4A4C4A49494949494847484747474545464544454343444242 - 424141414040403F3F3F3F3F3F3C3D3C3C3B3B39393938383837373737373737 - 37374343434949494B4B4B4C4D4C4E4E4D3F3F402B2C2B2B2B2B292929282828 - 2627272526252524242323232223222221222021211F1F1F1E1E1F1E1E1E1C1C - 1C1B1A1B1A1A1B19191918191817171717171717161715151614141415141415 - 14151414131213131112121211111011111010101010101010100E0F0F0E0E0F - 0F0E0E0E0D0D0D0D0D0D0D0D0B0C0C0C0B0B0C0C0C0B0C0B0B0B0B0B0B0B090A - 0A090A0A0A090A0A0A09090A090A090909090909090909080909090908080909 - 0808090808090808080808080808080808070707070808070807070807070707 - 0707070607070707070606060606060706060607060606060505050506050605 - 0506060505050504050504050405040504040404040404040405040404040404 - 0404040404040404040304030303030303030303030303030303020203020303 - 0203020202020202020202020202010202020202020102010201020102020101 - 0201010101010101010100010101010101010001010000000100010100010100 - 0101010101000100010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030373737 - 3939393A3A3A3C3C3C3D3D3D3D3D3D3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F35353538373738373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373637373636373736363636 - 3636353636353635353635353635363635353535353535353535353535343434 - 3434333333343433333334333333343333333333333333333333323232323333 - 3232333232323232323231323231323231323131313131313031313131313130 - 30313030303030313030303030302F3030302F2F30302F302F2F30302F2F2F30 - 2F2F2F2F2E2E2F2F2F2F2F2F2F2F2E2F2F2E2E2F2E2E2E2F2E2E2E2E2E2E2D2D - 2D2E2D2E2E2E2D2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2D2C2C2C2C2B - 2C2B2C2C2B2B2C2B2B2C2B2A2B2A2B2B2B2B2A2A2B2B2B2A2A2A2A2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2B2C2C2C2C2C2C2B2B2B2B2B2C - 2C2C2C2C2C2C2C2C2C2B2B2C2C2D2D2D2E2D2D2D2E2E2E2E2E2E2E2F2E2E2E2E - 2F2E2F2F2F2F2F2E2E302F2F3030303131313031313131313232323232323333 - 333334343434353536353636363737373737373838373938383A39393B3C3B3B - 3B3B3D3D3C3D3D3D3E3D3D403E3F3F3E3F404041414141424242434343434343 - 4A4B4A4E4E4E4F4E4F5250515251525353525353525454535454554F4E4E4F4F - 4F50515051515152525253525353545355545455555555545455555556565556 - 5656575656575757585757585858585858585858585858585858585858595959 - 5959595959595959595959595959595959595958585858595958585757575757 - 565655565556565555555555565454545454545353535252535151525050504F - 4F4F4F4F4F4E4E4E4D4D4D4C4B4C4A4A4B494949484848474747454545464545 - 4343434242424141414040403F3F3F3C3C3C3B3B3B3A3A393838393839384141 - 424949494B4B4B4E4E4E504F4F4E4F4F2F2F2F2D2D2D2B2B2B2B2B2B29282927 - 28272626262525262424242323232322222122212021211F1F1F1E1E1E1D1D1D - 1C1C1B1B1B1B1A1A1A1919191818181617171617171516151514151514151415 - 141414141312131213131111121110111010101010101010100F0F0F0F0E0E0E - 0E0E0E0D0D0D0D0D0D0D0C0C0C0B0C0C0B0B0C0C0B0B0C0B0B0B0B0B0B0A0A0A - 090A09090A0909090A0909090A090909090A0909090909090909090809090908 - 0909080808080807080808080707080808080707070807070707070707070707 - 0707070607060707060606060606060606060606060606050606050606060505 - 0505050405050505050405050404040404040504050404040404040404040404 - 0404040404040304030303030303030303030303030303030303020303030203 - 0203020203020202020202020202020102020201020201020102020102010201 - 0101010201010101010101010101010101010101010101010101000101010001 - 0100010000000000000100010000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303131313939393A - 3A3A3B3B3B3C3C3C3D3D3D3939392F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303031 - 3837373837373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373637373636363536 - 3636363535363536363536363536353535343535343535343434343434343433 - 3334343433333433333334333333333333333333333233333232323333323232 - 3233323232323132323133323132323132313132313032303131303131303030 - 3030313030303030303030303030303030302F2F2F302F302F2F2F302F2F2F2F - 2F2F2F2F2F2F2F2F2E2F2F2F2E2F2F2F2F2E2F2E2E2E2E2E2E2E2E2E2E2E2E2D - 2E2D2E2D2E2D2D2D2E2D2D2D2D2E2D2E2C2D2D2D2D2D2C2D2C2C2C2B2C2C2C2C - 2B2C2C2B2B2C2B2B2C2B2B2B2B2A2B2B2B2B2A2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2B2C2C2B2C2C2D2C2D2C2D2D2C2C2C2C - 2C2D2D2D2C2D2C2D2E2D2F2E2F2E2F2F2E2E2E2F2F2F2F2F2F2F2F2F302F3030 - 2E2F313030313030323131323232333333333232323232333334353535353534 - 353536373737373737383839393939393A3A3C3C3C3B3C3B3D3D3D3E3D3D3E3E - 3E4040404140414141424241424343434343444443444645464646474847474D - 4D4D535353535353555354575556575756575756585857585858545454535353 - 5555555555555656565757575857575757575958595A59595A59595A595A5C5B - 5A5C5B5C5C5B5B5B5B5B5C5C5C5C5D5D5D5C5D5D5D5D5D5E5D5D5D5D5D5C5D5D - 5D5D5D5C5C5C5C5D5C5C5C5C5C5C5C5C5C5B5B5C5C5B5C5B5B5C5B5B5B5B5B5B - 5B5B5B5A5A595859585858585858585757575656565555555555555454545251 - 525151515150514F4F4F4F4E4F4D4D4D4B4B4B4B4B4B49494948484847474746 - 46464545454343434242414040403E3E3E3D3D3D3C3C3C3C3B3B3C3C3C484948 - 4D4E4D4E4E4E5050505152524142422E2E2E2E2E2E2D2D2D2B2B2B2A2B2B2928 - 282727272627262324242323242323222122222121211F1F1F1E1E1E1E1E1E1D - 1D1D1C1C1B1A1A1A19191A181818171716171617161515151515151414141414 - 1413141414141313121112111111111010101010101010100F0F0F0E0F0E0E0E - 0F0D0D0E0D0E0D0D0D0D0B0C0B0C0C0C0B0C0B0C0C0B0B0B0B0B0B0B0A0A0909 - 09090A0A0A0A090A090909090909090909090909090909090808080808080808 - 0908080808080808080808080807080807080707070707070707070707070707 - 0707070706060706060706060606060606060605060605060606050605060505 - 0505050505050404040505040504040404040504040505050405040404040404 - 0404040304030303030403030303030303030303030303030302030302030202 - 0202020202020202020201020202010202020101010202020201010101010102 - 0102010101010101010101010001010101010001000100000001000001000000 - 0001000000000100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303434343939393A3A - 3A3B3B3B3D3D3D3E3E3E3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F34343438 - 3737383737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737363637373737373737363737363736363636353635 - 3636353536353536353536353535353534343434343433343434343434343433 - 3333343333333433333333333333333333333333333333333233323232323232 - 3333323332313232313232313132313231313131313131313130313130303031 - 3030303130303030303030303030302F30302F2F30302F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2E2F2E2F2E2E2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2D2D2E2D2D2D2E2D2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2D2C2B2C2C2B2C2B - 2C2C2B2B2C2B2B2C2B2B2B2A2B2C2C2B2B2C2B2B2C2B2B2B2B2B2B2B2B2B2B2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2C2D2D2D2D2C2D2C2D2D2D2D2E2D2D - 2E2E2E2F2F2F2E2F2E2F2E2F2F302F2F302F3030303030303131313131323232 - 3232313233323234333333323334343334343436353536363637373738383838 - 37373A3A393A3A3A3B3B3B3C3C3C3D3D3D3E3D3E3E3E3E414040414141424242 - 4242424443434544444645464746474747484849494949494B4A4B4B4C4C4F4F - 4F5656565756575858575B595A5B5B5B5C5C5B5C5D5C5C5C5B58585959595859 - 59595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5E5D5D5F5E5E5F5E5E5F5E5F - 605F5F6060606060606060606161616060606262616162616161616161616262 - 626261616161626161616160616160616060606060615F5F5F5F5F5F5E5E5E5E - 5D5D5E5D5E5C5C5D5C5C5C5B5B5B5B5B5B5A5A59585859575757575656565556 - 5554545353535251525050505050504E4E4E4D4E4E4B4B4C4A4B4A4949494848 - 484747474544444443444141424141413F3F3F3E3E3E3C3C3C4646464E4E4E4F - 4F4F5252525353535050503132313130302E2E2E2E2E2E2D2D2D2A2B2A2A2A29 - 2928282727272525252424242323232222222221212020201F1F1F1E1D1E1D1C - 1D1C1B1B1A1A1A1A1B1A19191918171817161717171615161514141414141414 - 1414141414131213111111111111101010101010100F1010100F0F0F0F0F0E0F - 0D0D0D0D0D0D0D0D0D0B0C0C0B0B0C0C0B0C0B0B0C0B0B0B0B0B0B0A0A0A0A0A - 0A0A0A09090A0A09090909090A09090909090908080809090808090808090908 - 0808080808080808070807080708070808070707070707070707070707060706 - 0706070706060606060606060606060506060605060605050505050505050505 - 0505050505050504050505050504040404040404040404040504050404040404 - 0404040303030403030303030303030303030303030203030302030202020202 - 0202020202020202020202020202020201020202010101020201020102010102 - 0101010101010101010001010001000101010001010101000000000100010000 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303131313737373939393A3A3A - 3C3C3C3D3D3D3C3C3C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303737373837 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373736363736373636363636363536373536 - 3635353635363635353434343434343434343434343434343434343433333333 - 3334343333333333333333333333333333333333333233333232333332333233 - 3332323231323231333232323131323131323031323130313130313030303031 - 3030303030303030303030303030302F2F2F30302F2F2F2F2F2F2F2F2F2F2F2F - 2F2E2F2E2F2F2F2F2F2F2F2F2F2E2E2F2E2E2F2E2E2F2E2E2E2D2D2E2E2E2D2E - 2E2E2D2D2E2D2D2D2D2D2D2D2D2D2D2C2D2D2D2D2D2C2C2D2C2C2C2C2C2C2B2B - 2C2B2B2C2B2B2D2C2C2C2B2C2C2C2B2B2B2C2B2B2B2B2C2B2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2D2E2F2E2E2E2E2E2F2F302F - 2F2F2F2F2F2F2F302F2F30303030303030313131323132333232323233343434 - 3433343433333534343636363636363737373838383838383939393A3A3A3C3B - 3C3C3C3D3D3D3D3E3F3E3F3F3F41414041414142424242434244444445454547 - 47474747474848484A49494B4A4B4B4B4C4D4D4D4D4D4E4E4F4E504F4F535353 - 5B5B5B5C5B5C5D5C5D5D5D5C5F5F5F60605F6161606060605C5C5C5D5C5C5E5D - 5D5E5E5E5F6060605F5F60606062616162616162626263636364636363636364 - 6464656565656565656565656565656565656565666666666666666666656565 - 6666656566656565666565656464646464636364646463636262626262626262 - 626061616060615F5F5F5E5E5E5D5D5D5D5D5D5B5B5B5A5A5A5A595A58575857 - 57575655565455555353535252525050505050504E4E4D4D4E4D4B4B4B4A4A4A - 4949494748474544454343434242424141414040404140414F4F4F5151515353 - 535454545556564141413333333130303030302E2E2E2E2E2E2B2B2B2A2B2A29 - 29292727272626262525242423232323232121212121211F1F1F1E1E1E1D1E1D - 1D1D1D1A1A1A1A1A1A1919191818181717171617161516151514141414141414 - 14141414131313131312111111101110101010101010100F100E0F0F0F0F0F0D - 0E0D0D0D0D0D0D0D0C0B0C0B0B0C0B0B0B0B0C0B0B0B0B0B0B0B0A0A090A0909 - 0A09090A0A090909090A09090909090909090908090809090809080808080808 - 0808090808080807080808070808070707070707080707070707070707070607 - 0606070606070607060606060606060606060606050606050505050505050405 - 0405050505050405050405040405040405050405040404040404040404040404 - 0304040403040303030303030303030303030303020303020202020202020202 - 0202020202020202020202020201020102020201020102020102010201010101 - 0102010101010101010001010101010100010000000100000101010001000100 - 0000000000000000000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303333333737373939393B3B3B3D - 3D3D3E3E3E3535352F2F2F2F2F2F2F2F2F2F2F2F2F2F2F333333383737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373637373637373637363637363636353636363536 - 3536343534343534343434343434343433343434343434343334343434333433 - 3433333333333333333333333332333332333233333332333233323332323232 - 3232323133323232323132323132313132313131313132303031313130313030 - 3030303030303030303030302F302F302F302F302F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2E2F2F2F2F2E2F2F2E2E2E2E2E2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2E - 2E2E2D2E2D2E2D2D2D2D2D2D2D2D2C2D2D2D2D2C2C2C2D2C2B2C2C2B2C2B2B2D - 2C2C2D2C2C2C2C2C2C2C2B2C2B2C2B2B2B2C2D2C2C2C2C2C2C2C2C2C2C2C2C2C - 2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3130313030 - 3030303031313031313131313233333433333334343434343434353535353536 - 35363736363837373838373838383939393A3B3A3B3B3B3D3D3D3D3D3D3D3D3D - 3F3E3E4040404141424242424342434444454546454847484848484949494A4A - 4A4B4B4C4D4C4D4E4D4E4E4E4E4F4F50504F505252525252525455555858585F - 5F5F606060616061626162636362656564656564656565606060616161626262 - 6463636463636464646664646665666766666766666767666868686969686969 - 68696969696969696A6A6B6B6B6B6A6B6A6A6A6A6A6A6A6A6A6A6A6A6A696A6A - 69696A6969696969696969696969686868676867676768666666666666646564 - 646464636363636363626262606061605F605E5E5E5E5D5E5D5C5D5C5B5C5959 - 595959595757575656565454545253535252525050504F4F4F4D4D4D4C4C4C4A - 4A4A4948494747464545454343434343434141414C4B4B525352545454565656 - 5858584F4E4F3635363433343232323031302F2F2F2E2E2E2C2C2C2B2C2B2A2A - 2A2828282727272625262324242323232222232122212020201E1F1F1D1E1D1C - 1C1D1C1C1C1A1A1A1A1A1A181818171717171716151516151515141414131414 - 1414141212131312121111111011100F1010100F10100F100E0F0F0F0E0E0D0D - 0D0D0D0D0D0D0D0C0C0C0B0C0C0C0B0B0B0B0B0C0B0B0B0B0B0A0A0A0A0A0A0A - 0A0A09090909090A0A0A09090909080909080809090809090908080808080808 - 0908090808080808080708070707080707070707070707070707070706070606 - 0606070606060606060606060606060605060505050506050505050505040505 - 0405050505040505050405050505050405040405040404040404040403040404 - 0404030403030303030303030303030303030303020203030203020203020202 - 0202020202020202020201020201010102020101020102020101010101010201 - 0101010101010101010100000101000100000000010101010100010000000000 - 0001000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303535353838383A3A3A3C3C3C3E3E - 3E3F3F3F3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F36363638373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373637373737363737363637363636353735363636353434343434 - 3435343434343434343434343434343434343433343334333433343334333334 - 3334333333333433333333333332333333333233323233333333333332323332 - 3232313232323232313232313131313230313231303230313131303030303130 - 30303030303030303030302F302F2F302F2F302F302F2F302F2F2F2F2F2F2F2F - 2F2E2F2F2E2E2F2E2E2F2E2E2E2E2E2E2E2F2E2E2E2E2E2E2E2E2E2E2E2E2D2E - 2D2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2D2D2D2C2C2C2C2B2E2D2C2D2C2C2D2C - 2C2D2C2C2D2C2B2C2C2B2D2C2D2D2C2D2C2D2C2C2C2D2C2C2C2D2D2D2D2D2D2D - 2D2D2D2D2D2E2E2E2F2F2F2F2F2F2F30302F2F2F313130313031313131313131 - 3132323233333433333333333435343535353535353635363837383737373938 - 393938383A39393B3B3A3B3B3A3C3D3C3D3D3D3E3E3E3F3F3F41414141414143 - 43434344434546454646464848484848484949494A4B4A4C4C4C4D4D4D4E4E4E - 504F505151515251525453545454545555555655565757585858585E5E5E6363 - 636565656564646766666968686A6A696A6A6967686866656567676767676768 - 68686868686969696A6A6A6B6B6A6C6B6B6C6B6B6C6B6C6D6C6C6E6D6E6D6D6E - 6D6D6D6E6E6E6E6E6D6F6F6F6F6F6E6F6F6E6E6E6E6F6F6F6F6F6F6E6E6E6E6E - 6E6E6E6E6E6E6E6D6D6D6C6D6D6C6C6C6C6B6B6B6B6B6A6A6A696A6A69686968 - 68686867686666666565656464646463636262636160615F5F5F5E5E5E5D5D5D - 5C5B5C5959595959595757575656565454545352525151515050504E4E4E4D4D - 4D4A4A4A49494A4747474647464545444847495353545556565757575959595B - 5B5B3D3D3D363736363536333333313131302F302F2F2F2E2E2E2D2D2C2B2B2A - 2929292727272627262525252323242323232121212121211E1F1F1E1E1D1E1D - 1D1B1B1B1A1B1A1A1A1A19191918181816161616161615151514141414141414 - 141313121312131211111111101010101010101010100F0F0E0E0E0F0F0D0D0D - 0D0D0D0D0D0D0C0C0C0C0C0C0B0B0B0C0B0B0B0B0B0B0B0B0A0A0A090A090A09 - 0A0A0A090A090A09090A09090909090809090809080909090808080808080808 - 0808080808080708070707070708070707070707070707070707070707070607 - 0707070606060606060606060606060605060506050505050505040505050505 - 0505050505050505050504050405040504040404040404040404040403040404 - 0403030303030303030303030303030302020203030203020203020202020202 - 0202020102020202020201010201010102010202010102010101010101020101 - 0101010101010101000100010101010100010101000000010100010000000001 - 0000010000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303535353838383A3A3A3C3C3C3E3E3E3D3D3D - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303737373837373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373736373636373736373635373636353535353434343434343534 - 3434343434343434343434343434343434343434343333343434343433333433 - 3333343333333333333333333332333333333333323332333332323232323232 - 3231323232323231323231313131323030323131313030313030303030313030 - 303030303030302F303030302F30302F2F2F2F2F302F302F2F2F2F2F2F2F2F2F - 2F2F2F2F2E2E2E2F2E2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D2D2E2E - 2E2D2D2E2D2E2D2D2D2D2D2D2D2D2D2D2C2D2E2D2D2D2C2D2D2C2D2D2C2D2C2C - 2D2C2C2E2D2D2D2C2D2D2C2D2C2D2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2E - 2E2F2F2F30303030303030303031313131303031313231313132323232333334 - 33343433343434343535353535353737373837383939393939393A39393B3A3B - 3C3C3B3D3C3C3D3D3D3E3D3E3F3F3F4040404243424343434344444545444646 - 464847474848484A4A4A4B4B4B4D4D4D4D4D4D4F504F50515052525253525254 - 54545555565655565858585858595B5A5B5B5B5B5C5D5C5D5D5D656464686868 - 6A6A6A6A6A696C6C6C6D6D6C6F6F6E6F6F6E6C6C6C6A6A6A6C6C6C6D6D6D6D6D - 6D6E6E6E6F6E6F6F6F6F70707071707071707071717172727272727273727272 - 7272727272737373737373737373747474747474747474737473727273727273 - 7272737171717171717171717070707070706F6F6F6E6E6E6E6D6E6D6C6D6C6C - 6C6B6B6B6A6A6A696969686767676667656565646364636263616161605F605E - 5E5E5D5C5C5B5B5B5959595959585657565555565353535252525151514E4E4F - 4C4C4C4B4B4B4949494848484848485353525958595959595B5C5B5D5D5D4E4E - 4E393939383838373637343434343333313131302F302E2E2E2E2E2D2C2B2B2A - 2A2A2828282626272625262324242323232222222120212020201D1D1D1D1D1D - 1C1C1C1A1A1A1A1A1A1919191717171717171616161515151414141414141414 - 13141314131213111211101110101010100F101010100F0E0E0F0F0E0E0E0D0D - 0D0D0D0C0D0C0B0C0C0C0C0C0B0C0C0B0C0B0B0B0B0B0B0A0A0A0A0A0A09090A - 090A0A0909090909090909090909090908090908080808090809080808080808 - 0808080807080708070707070807080807070707070707070707070706060606 - 0706070606060606060506050505060506050505050505050505050504050505 - 0505050505050505050505050405040504040404050404030404040404030303 - 0303030303030203030303030203020302030302020202020302020202020302 - 0202020201020202010202010201020102020101010101010101010102010101 - 0101010101010101010100010100010101010100010001010001000100010000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303232323535353737373A3A3A3C3C3C3E3E3E3333332F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F343434383737383737383737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373637373637363636363635333435343335343434343434343434 - 3434343434343435343433343434343434343433343333333434343333343333 - 3333333433343333333332333333333333333233333333323332323233323232 - 3232323232323132323131313131313132313032303031303030303130313130 - 30303030302F2F3030302F302F2F2F302F2F302F302F302F2F2F2F2F2F2F2F2F - 2F2F2F2F2E2F2E2F2F2F2E2E2E2E2F2E2E2E2E2E2E2D2E2E2D2E2D2E2E2E2E2E - 2E2E2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2D2D2D2D2E2D2C2D2C2C2E2D2D2E - 2D2D2E2D2D2D2D2D2D2D2C2E2D2D2D2D2D2D2D2D2D2D2D2E2E2E2F2F2F303030 - 3030303030303131313131313131323232323333323333333434343535353535 - 353635353636363737373838383939393A39393B3B3A3B3B3C3C3B3C3E3D3E3E - 3E3D403F3F403F3F4242424242424343434444444646464848484948494A4949 - 4B4C4B4D4D4D4E4E4E4F4E4F5151505352525454545455545656565858585959 - 595A5A5A5B5B5B5D5D5D5D5D5E5F5E5F6161616262626362626969696D6D6D6F - 6E6E6F6E6F7271707272717373727474737170716F6F6F717171727171737272 - 7373727474747574747575757676767676767777767777777777777878787878 - 7878787878787779787879787879787878787878787878787876777677767776 - 76767676767675767576757474757373737373737272727171717070706F6F6F - 6E6E6E6D6D6E6C6C6C6A6A6B6A696A6868686767676565656464646262626161 - 615F605F5F5E5F5C5C5C5B5B5B5959595857585556555454555252524F50504F - 4F4E4D4C4C4C4B4B4A4A4A5050505B5B5B5E5D5E5F5F5F6161606060603F3F3F - 3A3A3A3939393738373536353333333131322F30302F2F2F2E2D2D2C2C2C2B2A - 2A29292926272726252525242523232322222221202120201F1F1F1F1E1D1E1C - 1D1D1C1B1B1A1A1A191919181718161716161616151515141414131414141414 - 1414141213121211121010111010100F101010100F0E0F0E0F0E0E0E0D0E0D0D - 0D0D0D0D0C0C0C0C0B0B0B0C0B0B0B0C0B0B0B0B0B0B0A0A0A0A090A09090909 - 0A09090909090909090909090909090909080809090808080908080908080808 - 0808080807080808080807070807070707080707070707070706060606060606 - 0606060606060605050506050605050505050505050505050405050505050505 - 0505050505050505040405040404040404040404030404030304030303030304 - 0303030303030303030302030303020302020202020202030202020202020202 - 0202020102020202020202020101020201010102010201020101010101010101 - 0101010101000001010101010100010001010000010001010001000000000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303333333535353838383A3A3A3C3C3C3A3A3A2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F30303138373738373738373738373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737363737363636363433343434343533333434343434343435343435343434 - 3434343534343434343434333434343434333434343433343334333433333333 - 3333333333333333333333333233333333333333323233323232333232323232 - 3232323232313232313231313131313131303231303131303030303031303030 - 30303030303030302F2F2F2F2F2F2F2F2F2F302F30302F2F2F2F2F2F2F2E2E2F - 2E2F2F2E2F2E2E2E2F2F2E2E2E2F2E2E2E2E2E2E2E2E2E2E2D2E2D2E2E2D2D2E - 2E2D2D2E2E2E2E2E2E2E2E2E2D2E2E2E2E2D2D2D2C2E2E2E2E2D2D2E2D2D2E2D - 2C2D2D2D2E2E2E2E2D2E2D2D2D2E2E2E2E2E2E2F2F2F30303030303030303031 - 3131313131323232323132333332343433343534363536353535353636363736 - 39383838383939393A3B3A3A3B3B3B3D3D3D3E3E3E3F3E3E3F3F3F4140414241 - 414343434343434545444545454747474848484949494C4C4C4C4D4D4E4E4E4F - 4F4F5050505253535353535454555756565958585959595B5B5B5C5C5B5E5E5F - 5F5F5F6060606261626262636564656565666767676868686F6F6F7373737372 - 7376757476767578787778787778787874747576757577767677767678777779 - 79797978797A79797B7B7A7B7B7B7B7B7B7C7C7C7D7C7D7C7D7C7D7D7D7D7D7D - 7D7D7D7D7D7D7D7D7D7D7D7C7D7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B7B - 7B7B7B7B7A7A7A79797979797978787877777776767675767674747473737372 - 7272717171706F706E6E6E6D6D6D6C6C6C696969686868676767666566636364 - 6262626161615F5F5F5E5E5E5B5B5B5A5A5A5859585555555454545251525051 - 504F4F4F4F4E4E5050505E5E5D6060606363636566656667664D4D4D3D3D3D3C - 3C3C3939393839383636363434343233323131302F30302E2E2E2D2E2D2B2B2B - 2A2A2A2828282726272525252323232323232121212021211F1F1E1D1E1E1C1D - 1D1B1B1B1A1A1A19181817181816161617171715161514141413141414141314 - 131312131211111111111110101010100F100F100E0E0E0F0E0E0E0D0D0D0D0D - 0D0D0D0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A090A0A0A0A0A090A - 0A090909090A0909090909090909090909090908080808090808080808080808 - 0807080707080708070808070707070707070707070707070607060606060606 - 0606060606060606060506060505060505050505050505050505050505050505 - 0504050404050505040405040404040404040404040404040403030303030403 - 0303030303030303030303020302030302030302030202020202020202020201 - 0202020101020201020101020102020101020101010201010101010101010100 - 0101010001010101010101000101000101000000000100000100000000010000 - 0001000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303031313134 - 34343636363838383B3B3B3D3D3D3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3535353837373837373837373837373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3636353534343434343434343434353434343433343434353435343435353534 - 3435343434343434343434343433343434343434343434343433343433333333 - 3333333333333333333332333333323333333232323333333232323232323132 - 3232323231323231323131323031323131313031313130303031303031303030 - 303030302F30302F2F2F2F2F2F2F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2E2F2F2F2F2E2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2E2D2E2E2D2E2E2D2E2E2F - 2E2E2E2E2E2E2E2E2E2D2E2E2D2E2E2F2E2F2E2E2E2E2D2E2E2D2E2D2D2F2E2E - 2F2D2E2E2D2E2E2E2E2F2F2E2F2F303030303030303030303131313131313232 - 323232323333333535353534353635363636363636363737373939393A3A3A39 - 3A3A3A3A3A3C3C3C3E3D3D3E3E3E3F3F3F404040424142434243444343454444 - 4645454847484848484A4A494B4B4B4C4C4C4E4E4E4F4E4F5051505252525353 - 535555555757575959595A5A595C5B5B5D5D5D5F5F5F60606060606164636465 - 646566656667676768686969696A6A6A6B6C6D6D6F6E6E757575787878787778 - 7B7A7A7B7B7A7D7D7C7D7D7C7D7D7D7A79797B7A7A7C7C7B7D7C7C7E7D7D7F7E - 7E7E7D7E80807F81808180808180808080818182828282818182828283828282 - 8282828282828282828282828282828282828282828282818181818180807F80 - 7E7E7E7E7E7E7E7E7E7E7E7D7B7B7C7B7B7B7A7A7A7979787879797676767575 - 757474747372737171716F6F6F6E6E6E6C6C6C6B6B6B69696968686866666665 - 6464636463626262605F605E5E5D5B5B5B5A5B5B575757565656555555535353 - 5354535959596363636666666868686A6A6A6A6A6B6161614040403F3F3F3B3C - 3B3B3A3B3939393737373636363333333132312F30302F2F2F2D2D2E2B2B2B2A - 2A2A2727282627272525252323232323232222212020201F1E1F1E1D1E1E1D1D - 1B1B1C1A1A1A1A1A191717181716171616161516151414141314141314141413 - 141212121212121010101010101010101010100F0F0E0E0E0E0D0D0D0D0D0D0D - 0D0D0C0C0C0B0C0B0B0B0C0B0B0B0B0B0B0A0A0A09090A0A0909090A0A090A0A - 090A090909090809090909090909080908090808080808080808090808080808 - 0808070807080808070707070707070707070706060606070706060706060606 - 0506060606050605060605060505050505050505050505050505050505050405 - 0504050404050405040404050404040304040404030304040403030403030303 - 0303030303030203020203030302030202020202020202020202020202020201 - 0101020202020102020102020101010201020201010102010201010101010101 - 0101010100000101000001000100010001000000000000000100000001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303333333434343737 - 373939393C3C3C3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F31313138383738 - 3737383737383737383737383737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373535353434 - 3434343334343434343335343434343334343435343435343434343534343434 - 3434343434343434343434343433343333333434333433333433333433333433 - 3333333333333233323333333233333333333332333333323333323232323232 - 3132323132313131313131313032313132313131303130303030303030303030 - 30303030302F302F302F303030302F302F2F2F2F2F2F2F2F2F2E2F2F2F2E2E2F - 2E2F2F2E2E2F2E2E2E2E2E2E2E2E2E2E2D2D2D2E2E2D2E2D2E2E2E2E2E2E2E2D - 2D2D2E2D2D2D2D2D2D2C2E2C2D2D2D2C2D2C2C2C2C2D2D2D2D2D2D2D2D2D2C2D - 2D2C2E2E2E2E2E2E2F2F30302F30303030313131313131323232323232343434 - 3535353535353636353637363636363839383A39393A3A3A3B3B3B3A3B3B3D3D - 3D3E3D3E3E3E3E3F3F3F4141414242424444444444444645464746474848484A - 49494B4A4B4D4D4C4D4E4D4F4E4F515251535353535353565556585757585858 - 5A5A5A5C5C5C5E5E5E5F5F5F6061606362626464646565656666676868686A6A - 6A6B6A6B6D6D6D6D6D6D6F6F6F7171717372737675767C7C7B7C7D7C7E7E7E80 - 807F8180818282818383828181817F7F7F818080828181828181848383848383 - 8484848585858586858585858686868787878787868887878788888787878787 - 8787878787878787878787878787878787878786868685858685858584848484 - 84848382828281828180808080817F7F7F7E7E7E7D7C7D7B7B7B7B7B7B797879 - 7877787676767575757373737272717070706F6F6F6D6C6D6B6B6B6969696767 - 67666666636363616261605F605E5D5D5C5C5C5B5B5B5959595959595D5D5D66 - 66666A6A6A6C6C6C6D6D6D7070706F6F6F5E5D5E4444444242423F3F3F3E3E3E - 3C3C3B3A3A3A38383837363633343433333331313030302F2D2D2D2C2C2C2A2A - 2A292929272727262525232323232323212221212121201F1F1E1E1D1D1D1D1C - 1B1B1A1A1A1A1A1A191819161617161616151516141414141413141314131413 - 131212111111101010101010100F0F0F100F0E0F0F0E0E0E0D0D0E0D0D0D0C0C - 0C0C0B0C0C0C0C0B0B0B0B0B0B0B0C0B0A0A0A0A0A0A0A0A09090A0A0A090A09 - 0A09090909090909080909080908090808080808080908080808080808080808 - 0808070808070807070707080707070607070707060707070706060606060606 - 0506050606060605050505050505050505050505050505050505050504050504 - 0504040504040404040404040304040403040404040303040303030304030303 - 0302020303030303030203020302020203020202030203020203020202020202 - 0201020102020202020101010102010101010101010101010101010101010101 - 0101010001010100010100000001010100010000010100010001000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303131313434343535353838383A3A3A - 3D3D3D3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3635353838373837373837 - 3738373738373738373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737363636343434343434343434 - 3433333433343434343534343434353535353534353434343434343434353435 - 3434343434343434343434343434333333343434333333333334333433333333 - 3333333333333333323333323233323333333332333232323232333232323232 - 32323132323132313131313132303032303131303030303030313030302F3030 - 30302F302F2F302F3030302F2F302F302F2F2F302F2F2E2F2F2F2F2F2F2E2F2F - 2F2E2F2E2E2E2E2E2F2F2E2E2D2D2D2D2C2E2D2E2D2D2D2D2E2D2D2D2E2D2E2E - 2D2D2D2E2E2E2E2D2D2E2C2D2D2C2C2E2E2D2D2D2E2D2D2D2D2D2D2E2D2E2F2E - 2F2F2F30302F2F302F2F303030302F3031303131313133333335353535353536 - 36363737373737373939383A3A3A3A3A3A3B3B3C3C3C3C3E3E3E3F3E3E3F3F40 - 4041414242424343434444444546464646474848484949494B4A4B4D4C4C4E4D - 4D4F4F4E5151515252525353545555555757575858585B5B5B5B5B5B5D5D5D5F - 5F5F6161616263636464646665666767676969696B6B6B6C6C6C6D6D6D707070 - 7171717272727373747575757677777978797B7B7B8281818383828584848686 - 868887878888878A8A898585858685858686868787878888888988888989898A - 8A8A8B8A8A8A8A8A8B8B8B8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D - 8D8D8C8D8D8D8C8C8D8C8C8D8C8C8C8B8B8B8B8B8B8A8A8A8989898989898888 - 888787878686868585858585848383848282828080808080807F7E7F7D7D7D7B - 7B7B7A797A787878767676747474737373717171706F706E6D6E6B6C6B6A6A6A - 6868686565656464646363626060615E5F5E5E5E5E6262626B6B6B6D6D6D7070 - 707272727474747575756363634848484646464444444343434141413F3F3F3C - 3C3C3A3B3A3939393737373435353332323132322F2F2F2E2E2E2D2D2D2B2B2B - 2A2A29272728272726242424232323212222212020201F1F1E1D1E1D1D1D1D1C - 1C1A1A1A1A191918191817171616171615151514141414141314141413131412 - 1213111111101010101010100F0F1010100E0F0E0E0E0E0E0D0D0D0D0D0C0C0C - 0C0B0C0C0B0B0B0B0C0B0B0B0C0B0B0A090A0A0A0A09090A0909090909090A09 - 0A09090908090909090809090809090808080808080908080808080808080808 - 0708070707070707070707070707060706070706060606060606060606060606 - 0606060605060605050505050505050505050505050505050505050504050505 - 0505040404050404040404040403040304040404030404030403040403030302 - 0303030303020203030203020302020202020202020202020202020202010202 - 0202010102010101020202010201020101020101010101010101010101010100 - 0101010001010100010100010001010001010100000000000001000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303232323434343636363939393B3B3B3A3A3A2E - 2E2E2F2F2F2F2F2F2F2F2F2F2F2F323232383837383837383737383737383737 - 3837373837373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373634343434343434343434343434343434 - 3434343334343535353435353535343534343435343534343434353534343434 - 3434343434333434343434333434343334333434333333343333343333333433 - 3333333333333333333233333333333333323333323233333232323132323132 - 3231323231323130323130313031323030313030303030303030303030303030 - 303030302F302F2F2F2F2F2F2F2F2F302F2F2F2F2F2E2F2F2F2F2F2F2F2E2E2E - 2D2E2D2E2D2D2D2D2E2D2E2E2E2E2D2E2D2D2E2D2D2E2E2E2D2D2D2E2F2E2E2E - 2E2E2E2E2E2E2D2D2F2E2D2F2D2D2E2E2E2D2D2D2E2E2E2F2F2F303030302F30 - 3030303030303031303231313231323332333333333333333434343636363737 - 373939393A3A3A3B3A3A3B3C3B3C3C3C3E3E3E3F3F3F403F3F40414143434343 - 44434444444646464848484949484A4A4A4C4D4C4D4D4D4F4E4F515050525252 - 5353535555555757565858585A5A5A5C5C5C5D5D5D605F5F6262616363636464 - 646666666768676969696B6C6B6E6D6E6F6F6F70707072727274737475757677 - 777778787879797A7B7B7B7C7D7D7E7F7E8484848787878989898A8A898B8B8A - 8D8C8B8E8E8E8D8D8D8B8B8B8B8B8B8C8C8C8D8D8D8E8E8E8E8E8E8F8F8F9090 - 9090909091919191919191919192929292929292929292929292929291919291 - 92929292929191919191919090909090909090908F8F8F8E8F8F8D8D8D8C8C8C - 8C8C8C8B8A8B898989888888888888868686858485838383828182807F807E7E - 7E7D7D7D7C7C7C79797A7878787676767474747272727171716D6D6D6C6C6C6B - 6B6B686868676667656565656565676768707070717171747474767676797979 - 7A7A7A6969694E4E4E4D4D4C4A4B4B4747484545464444444242423F3F403D3E - 3D3C3C3B3A3A3A3838383635363434333231312F2F302F2F2F2D2D2D2B2B2B29 - 292A2828282626262425242323242323222121212020201E1E1F1D1D1D1C1C1C - 1A191A1A1A1A1818191717181616161515151414141414141313141314141212 - 12111112101011101010101010100F0F0F0E0E0E0F0E0D0D0D0D0D0D0C0B0C0C - 0B0B0B0B0C0B0B0B0B0C0B0B0B0B0A0A0A090A090A0A0A0909090A090A09090A - 0909090909090909090909080909080908090808080808080808080807070807 - 0708070707070707070706070707070606060706060706060606060606060606 - 0506050506050505050505050505050505050505050505050505050404050404 - 0404040404040404040404040403040404040303040303030303030303030303 - 0303030203020303030202030302020303030302020202020202020202020202 - 0202020102020102010101020202010101020101020102010101000101010101 - 0100000101000001010101010000010000000000010101000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303131313434343535353838383A3A3A3C3C3C3232322F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F37373638383738383738383738373738373738373738 - 3737383737373737373737373737373737373737373737373737373737373737 - 3737373737373737373535353434343434343434343434343434343434343535 - 3435353535343435343535353435353534343435343435343434343434343434 - 3434343434343434343334343434343333333334333434333333333333333333 - 3333333333333333333233333233323233323233323232323332313232323232 - 31323231323131323131313030323030313030303030303030303030302F3030 - 302F2F3030302F303030302F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2E2E2D2E - 2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2D2E2E2E2F2F2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2D2E2D2E2F2F2E2F2F2F30303030303030302F30303131 - 3030313131323232333333343335343334343434353535363636373737383838 - 3A3A3A3B3A3A3C3C3D3F3F3F3F3F3F4040404242434243424444444645454747 - 484848484949494C4C4C4D4D4D4E4D4E51515052515253525355535457575758 - 58585A5A595B5B5B5D5D5D5F5F5F616161626362656464676666686868696969 - 6B6C6C6D6D6E6F6F6F7170707473737575757676767877787B7A7B7C7C7C7D7D - 7D7F7F7F8080818181818484848585858B8B8B8E8E8E8F8F8F90909091909093 - 9292949493929292919190929292939393939393949494949494959595959595 - 9696969797979797979797979797979797979797979797979797979797979797 - 9797979797979797979796969695959593949493949493939392929291919190 - 91918F8F8F8E8E8E8D8D8D8B8B8B8A8A8A888888878788858585848484828282 - 8080807F7F7F7C7C7D7C7C7B7A797A7777777575757373737071706E6E6F6D6D - 6D6B6B6B6B6B6B6D6D6D7575757777777878787B7B7B7D7D7D7E7E7E6E6E6E55 - 555552525250504F4D4D4D4B4C4C494A494747474444444343434140413F3F3F - 3C3C3C3A3A3A3939393636363535353333323030302F2F2F2D2D2D2C2C2C292A - 2A2727272626262424252323232323222121211F1F1F1E1F1E1D1E1D1C1C1C1A - 1A1A19191A181918171818161616151515141414141314141414131314131212 - 111112111010100F1010100F0F0E0F0E0F0E0D0E0D0D0D0D0D0D0D0C0C0C0C0B - 0B0B0B0C0B0C0B0B0B0C0B0A0A0A0A0A0A090A090A090A09090A0A0A090A0A09 - 0909090909080909090909080808090908080809080808080808080808070708 - 0707070807070707070707060606070606060606060606060606060606060605 - 0605050505050505050505050505050505050505050505050504050505040404 - 0404040404040404040404040304040404030303030303030303030303020303 - 0302030202020203030303030202020202020202020202020202020102010202 - 0201010202020101010101010201010101010102010101010201010001010101 - 0101000000000100000000010000010000010000010000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303232323434343737373939393B3B3B3B3B3B2E2E2E2F2F2F2F2F2F2F2F2F - 2F2F2F3231323838383838373838373838373837373837373837373837373837 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737363636343434343434343434343434343434343434343434353535363535 - 3635353535343535353535353434353434343534343435353434343434343434 - 3434343434343434333334343334333434343333343333333333343333333333 - 3333333333333333323333323333333233333332323232323231323231323231 - 323231323131313131323131313131313030303130303030303030302F30302F - 303030302F302F2F302F2F2F2E2F2E2E2F2E2E2F2E2E2E2E2E2D2E2E2E2D2E2E - 2F2E2E2E2F2E2E2E2E2E2E2D2E2E2E2E2F2F2F2F2F2E2E2F2E2E2E2E2E2F2F2F - 2F2F2F2F2E2E302E2F30302F3030303130313030303131313130313132313132 - 323333333435343435343534363636363636363737373838383939393A3A3A3C - 3C3C3D3D3D3F3E3E4141414242434343434545454646464747484948484B4A4B - 4C4C4C4E4E4E4F4F4F5151515253535554545755565757575A59595C5B5B5D5D - 5D5F5E5E6060606363636464646666666868686A6A696C6D6C6E6E6E6F6F6F72 - 72717474747676767877787979797B7B7B7D7D7D7E7E7F808081828282838384 - 8585858686878888888A8A8A8D8D8C9393939494949595959696959897989999 - 989A9A999797979797979898989898989A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9D - 9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9E9D9D9E9D9D9D9E9D9D9D9D9D9D9C9C9C - 9C9C9C9C9C9C9C9C9C9B9B9B9A9A9A9999999999999898989696969696969494 - 949393939292939090908F8F8F8E8D8E8D8C8D8B8A8B8A898A87878786868684 - 84848282828080807E7E7E7C7C7C7A7A79777778767676737474727272727272 - 7474757B7B7B7D7D7D7D7D7D8080808282828282827474745959595858585656 - 565353535150514E4E4E4D4D4D4A4B4A4747474545454444444241413F3F3F3C - 3C3D3C3B3B3939393736373434353232323030302F2F2F2D2D2D2C2B2C292A29 - 282828262727252525232323232323212121201F201E1F1E1D1D1E1C1C1C1A1A - 1A191A1918181916171616161615151514141414131414141412121213131211 - 11111010101010100F0F100E0E0E0F0F0F0D0E0D0D0D0D0D0D0D0C0C0C0B0C0C - 0B0B0B0C0C0B0B0C0B0A0A0A0A0A0A090A0A0A0A0A0A0A090A09090909090909 - 0909090909090809080909080808090808080808080808080807080807080707 - 0807070707070707070606070706060606060606060606050506060605050506 - 0505050505050505050505050505050505050505040405050505040404040405 - 0404040404040404040404040304040303030303030303030303030303030302 - 0202020302030202020203030202020203020302020202020202020202010201 - 0102020202020202010201010201010101010101010101010101010101010101 - 0100000100000100010101000000010000010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303131313434 - 343636363838383A3A3A3C3C3C3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F36 - 3535383838383838383837383837383737383737383737383737383737373737 - 3737373737373737373737373737373737373737373737373737373737373434 - 3434343434343434343434343434343434343435353536353536353536353535 - 3535353534353534353534353434343434343534353434343434343434343434 - 3434343434343433333334343434343333343333333334343333333333333333 - 3333333333333333333233333232333332333232323232323132323132323132 - 32313231303231313231303131303130303131303030303030303030302F302F - 302F302F2F302F2F2F2F2E2E2F2E2E2F2E2E2F2E2E2E2D2E2F2F2E2F2E2F2E2E - 2E2F2F2E2E2F2E2E2E2E2F2E2F2F2F2F2F2E2F2F2F2F30303030303030303031 - 3131323232323232333232323232333233323232323231323232343334353534 - 3435343635353736363736373938393838393939393A3A3A3C3C3C3D3D3D3E3E - 3E3F3F3F4140404343434545454747474848484A4A4A4C4B4C4D4D4D4F4F4F51 - 50505252525352535656555757575A5A5A5B5B5B5C5C5C5F5E5E615F60626262 - 6463636565656868686A6A6A6C6C6C6E6E6E7070707271717474747676767778 - 787979797C7C7C7D7E7D8080808181818383838485848787878989898A8A8A8C - 8B8C8D8D8D8E8E8F9090919494959999999A9A9A9B9A9B9D9D9D9E9C9DA09F9E - 9E9E9E9D9D9D9E9D9E9E9E9E9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2 - A2A3A3A3A3A3A3A3A3A3A3A4A4A4A3A3A3A4A3A3A3A3A2A2A2A2A2A2A2A2A2A1 - A1A1A1A1A1A1A1A1A0A0A09F9F9F9E9E9E9D9E9E9C9C9D9B9B9B9A9A9A999899 - 9898979696969595959393939292929090908F8F8F8D8D8D8B8B8B8989898787 - 878685858383838181817E7E7E7C7C7C7B7B7B7979797979787A7B7C81818183 - 83828484848585858687868787877A797A6060605F5F5F5B5C5C585858575757 - 5555555353534F4F504D4D4D4B4B4B4949494646464444444242424040403D3D - 3E3B3B3C3A3A3A3838383636363233323131312F2F2F2E2E2E2B2C2C2A292A29 - 28292626272525252323232323232121212120211E1E1E1D1D1E1C1C1C1A1A1A - 1A1A191819181616161616161615151414141314141413131312121213121111 - 1110101010100F10100F0F0E0E0E0E0E0D0D0D0D0D0D0C0C0C0C0B0C0C0C0C0C - 0B0C0B0B0B0C0B0C0A0A0A0A0A0A0A090A0A0A0A0A09090A0A0A090A09090909 - 0909090909090809090809080808080908080808080808070807070707070707 - 0807070707070706070706060706060606060606060606060606050605060505 - 0505050505050505050505050505050505050505050405050404040404040404 - 0404040404040404040304040303030303030304030303030303030303020303 - 0203020303030202030202020202030202020202020202020202020201020201 - 0202020102020201010101010201010201010201010101010101010101010101 - 0101010101010001010000010101010100010000000001000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030333333363636373737 - 3939393B3B3B3C3C3C2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3131313838383838 - 3838383838383738383738383738373738373738373738373738373737373737 - 3737373737373737373737373737373737373737373737353535343434343434 - 3434343434343434343434343535343635353635353635353635353635353635 - 3535353435353434353534353434353535353534343434343534343434343434 - 3434333434333434343334343334333333333433333333333333333333333333 - 3333333332323332333332333232333233323332323232313232313232313232 - 313231313231313230303131303130303131303030302F30303030302F30302F - 302F2F2F2F302F2F2F2E2E2F2E2E2F2E2E2F2E2E2F2F2E2E2E2E2E2F2F2F2F30 - 2F302F3131303131313130303130303231313131323131313232323232323333 - 3334333434343434343434343535353535353537373737373736353637373736 - 37373838383A3A3939383A3A3A3A3A3A3A3C3D3D3D3D3D3E3E3E3F3F3F424241 - 4343424344434646454848484A4A4A4C4C4C4D4D4D4F4F4F5251515253525555 - 545656565858585B5B5B5C5C5C5E5F5E6060606161616363636666666868686A - 6A6A6B6B6B6E6E6E6F6F6F7272727474747777777878787A7A7A7C7C7C7E7E7E - 8080808383838484848686868787878A8A8A8D8D8D8D8D8D8F8F8F9191919392 - 939494959596969897989C9C9CA0A0A0A1A1A1A2A2A2A3A2A2A5A4A4A6A5A6A4 - A3A3A3A3A3A4A4A4A5A5A5A5A5A5A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A9A9A9 - A9A9A9A9A9A9AAAAAAAAAAAAA9AAA9A9AAA9A8A9A8A8A8A8A8A8A8A8A8A8A6A7 - A6A6A6A7A5A5A5A5A5A5A4A3A4A4A4A3A3A2A2A1A1A1A0A0A09F9F9F9E9E9E9C - 9C9C9B9B9B9999999898989695969494949392939090908F8F8F8D8D8D8A8A8A - 8788888787868484848282828080808080808181828787878888888A8A8A8C8C - 8C8C8C8C8C8D8D7F7F7F6767676464646262625F605F5E5E5E5B5C5B58585856 - 56565353535051514F4F4F4C4C4C4A4A4A4747474444444243424040403E3F3E - 3B3B3B3A3A3A3838383635363334343131312F2F2F2E2E2E2D2D2D2A292A2928 - 292626262525262323232323232120202120201E1E1E1D1D1D1C1C1C1A1A1A1A - 1A19181818161616161616151515141414141414141414131212111211121111 - 10101010101010100F0E0E0E0E0F0E0D0D0D0D0D0D0C0C0C0B0C0C0C0C0B0C0B - 0C0C0C0B0A0A0A0A0A0A090A0A0A0A0A0A0A0A090A0A090A0909090909090909 - 0908090809080809080809090809080808080808080808080808070808070707 - 0707070707060607070607070606060605060606060606060606060506060505 - 0505050505050505050505050505050505050505040505040404040404040404 - 0404040404030304040303030403030403030303030303030303030203020302 - 0303020202020202030302030202020202020202020202020201020202020101 - 0201020102010102020201020101010201010101010100010101010101000101 - 0101010101010000010001000101000000000001000000000100000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303131313232323333333434343434343636363737373939393B3B3B3D - 3D3D3635362E2E2E2F2F2F2F2F2F2F2F2F2F2F2F353535383838383838383838 - 3838383838373838373837373837373837373837373837373737373737373737 - 3737373737373737373737373737373737373634343434343434343434343434 - 3434343434343434363535363535363535363535363535363535363535353535 - 3535353535353434353435343434343434343534343434343434353434343434 - 3433343334343433343434343434333333333333333333333433333333333333 - 3233333233333333333332323332323332333232323231323231323231323231 - 32313032313131313131303031303030303030303030303030302F2F2F302F2F - 302F2F2F302F2F2F2F2E2F2E2E30303030302F30313130313130313132313131 - 3131313131313131323232323232323232313131323232333433343434343434 - 3434343535353536363635363636363838383838383938393A3A3A3B3B3B3C3B - 3C3B3A3B3B3A3B3C3A3C3D3C3D3D3D3D3E3E3E40404042434243434344444447 - 47474847474848494B4C4C4D4E4D505050525252535454555656575757595A59 - 5B5B5B5D5D5D6060606161616363636564656767676A69696B6B6B6D6D6D7070 - 707272727574757676767878787A7A7A7C7D7D7E7E7E80808083838385858587 - 87878988888B8B8B8D8D8D8F8F8F9191919292929494949696979898989A999A - 9B9B9B9D9D9D9F9F9FA5A5A5A6A6A6A7A7A7A8A8A9AAA9A9ACABABABABACA9A9 - A9ABAAAAAAAAAAABABABACACACADADADADAEADADADADAEAEAEAFAFAFAFAFAFAF - AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAEAEAEAEADACACADACAC - ACACACABABABAAAAAAA9A9A9A9A9A9A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A1A0 - A19E9E9E9E9D9E9C9B9C9A999A9897989696969494949292928F8F8F8D8D8D8B - 8B8B8A8A8A8787878787878888888E8E8E8F8F8F909090919191919191929292 - 8585856E6E6F6B6C6C6A6A6A6767676463646161615E5F5E5C5D5D5959595757 - 57555555525152504F4F4D4D4D4A4A4A4848484646464443444242413F3E3E3C - 3C3C3A3A3A393839363535333333323232302F2F2E2E2E2D2C2D2B2B2B292829 - 2726262525252323232323232120212120201E1E1E1D1D1D1C1C1C1A1A191A19 - 1A18171816161616161615151514141414131414141412131212111111101010 - 10101010101010100F0F0E0D0E0D0D0D0E0D0D0D0C0B0B0B0C0C0C0C0C0C0C0B - 0B0C0B0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090909090A090909090909 - 0909090909080908090908080808080808080808080807080707080707070706 - 0707060607060606060607060606060606060606060606060506060605050505 - 0505050505050505050505050504050505050404040405040404040404040404 - 0404040404040404040403040304030303030303030303030303020203030302 - 0302020303020202020202020202020202020202020202020202020201010101 - 0101020101020101020102010101010102010101010101010100000100010100 - 0101010001010101000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030323232333333343434353535363636373737 - 3737373737373737373737373838383838383A3A3A3B3B3B3D3D3D3E3E3E3030 - 302F2F2F2F2F2F2F2F2F2F2F2F30303038383838383838383838383838383838 - 3837383837383737383737383737383737383737383737373737373737373737 - 3737373737373737373737373535343434343434343434343434343434343434 - 3435353536363536353536353536353536353536353536353536353536353535 - 3535353534343434343434343534343434353434343434343434343434333434 - 3333343434333434343333333433333333333333343433333334333333333333 - 3333333333323233323232323332323233323232323132323132323132313131 - 31313131313130313031313131313030303030303030302F3030302F302F2F30 - 2F2F2F30302F3131323131313131313131313031313130313132313132323132 - 3131313132323232323232323233333234333334353434343434343434353536 - 36363535353737363938393838383939393A3A3A3B3B3B3C3C3B3C3C3C3E3E3D - 3F3F3E404040404040403F404041404342424343434445444747474848484949 - 494B4B4C4D4D4D4E4E4F5151515454545757575858575B5B5A5C5C5C5E5E5E60 - 60606262626465656767676969696B6A6B6D6C6D706F6F727172737373767675 - 7878787A7B7A7C7C7C7E7E7E8181818383838585858888888A8A8A8C8C8C8E8D - 8E908F8F9292929594949695969898989A9A9A9B9B9C9D9D9E9F9E9FA1A0A1A3 - A2A3A3A3A4A8A7A8ABABABACACACAFAFAFB0B0B0B1B1B1B2B1B1ACACACA1A1A1 - 8B8B8B7474746363635353534242423434342929292020201414141414141313 - 131313131313131313131313131111111D1D1D2626263131313E3E3E4F4F4F60 - 60607171718888889E9E9EA8A8A8ABABABACABABA9A9A9A9A9A9A6A6A6A5A5A5 - A3A3A3A1A1A1A0A0A09D9D9D9B9B9B9999999797979695969292929191918F8F - 8F8E8E8E8F8F8F9494949595959696969797979998989797978B8B8B75747472 - 72727070706D6E6E6B6A6A6868686666666262636060605D5D5D5C5B5B585858 - 5655565253534F4F4F4E4E4E4B4B4B4949494646464444444141423F3F3F3D3C - 3C3A3A3A3938393635353434353232322F2F2F2F2F2F2C2D2D2A2A2A29292827 - 26262625252323232323232120211F1F1F1E1E1E1E1D1D1C1C1C1A1A1A191A1A - 1718181717161617161515151414141414141413141312121111111011101010 - 101010100E0E0E0E0F0F0D0D0D0E0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B - 0B0C0A0A0A0A0A0A090A0A0A0A090A0A09090909090909090909090909090809 - 0809090808090808080808080808080808080807070707070707080707070707 - 0707070706070706060606060606060606050506060606050505050505050505 - 0505050505050505050505050405050504040405050505040404040404040404 - 0403040404040404040403030303030303030303030303030302030303030303 - 0303030203020202020302030202020202020202020202020202010201010201 - 0102020201020101020101010101010101010101010101010101010101010101 - 0101010101000000000000000100010000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303232323333333434 - 3435353536363637373738383838383838383838383839393939393939393939 - 39393939393939393A3A3A3A3A3A3C3C3C3D3D3D3E3E3E3939392E2E2E2F2F2F - 2F2F2F2F2F2F2F2F2F3434343838383838383838383838383838383838373838 - 3738383738373738373738373738373738373737373737373737373737373737 - 3737373737363636343434343434343434343434343434343434353434363636 - 3636353636353635353635353635353635353635353635353635353635343534 - 3535343535343535353535343535343434343435343434343534343433343434 - 3433343434343334333433343333333333333333333333333333333333333332 - 3333333232323332333333323232323232323232313232313131313131313031 - 31303031313031313131303031313030303030302F3030303031303031313130 - 3030323132313131313131313131313131323132313232323131323131323232 - 3232323232323333333434343434353534353534343535353636363636363636 - 373837383938383939393A3A3A3B3B3B3B3C3C3C3C3C3E3E3E3F3F3E41414041 - 41404443434544444544454544454444444747474848484A4A4A4C4C4C4D4E4D - 504F4F5151515353545555555858585B5B5B5C5D5C60605F6161626464636666 - 666868686A6A6A6B6B6B6E6E6E7170717372737675757877777A7A797C7C7C7E - 7E7E8181818383838686868888878A8A8A8C8D8C8F8F8F909090939393949594 - 9797979999999B9B9B9E9E9E9F9F9FA1A1A1A3A3A3A5A5A5A7A6A7A8A8A8AAAA - AAABABABB1B0B1B1B1B1A4A4A48686866868684B4B4B2B2B2B1616160F0F0F0D - 0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0A0A0A0B0B0B0B0B0B0A0A0A - 0A0A0A0909090909090909090707070808080707070707070707070606060505 - 050707070E0E0E2323234242426160617F7F7F9E9E9EABABABABABABA9A9A9A7 - A7A7A6A6A6A3A3A3A1A1A19F9F9F9D9C9C9B9B9B999999979697969696979697 - 9B9B9B9C9C9C9C9C9C9D9D9D9E9E9E9D9E9D9191927D7E7D7A7A7A7878787574 - 74727272706F706C6C6C6A6A6A6767676463646161615F5F5F5B5C5B59595957 - 57575454545151514F4F4F4C4C4C4A4A4A474747444444434242403F3F3D3D3D - 3B3B3B3939393736373534353232322F302F2F2F2F2C2D2D2A2B2B292A2A2626 - 272525252323232323232020211F1F1F1F1E1E1D1D1E1B1B1B191A1A18191917 - 1718171617161616151515141414141414141314121312111211101010101010 - 100F100F0E0F0E0E0E0D0D0D0D0E0D0C0C0C0C0C0C0B0C0C0B0C0B0C0C0C0B0A - 0B0A0A0A0A0A0A0A0A0A0A090A0A0A0A0A090909090909090A09090909090909 - 0808080808080808080808080808080808080807070707070707070607070706 - 0707060606060606060606060606050506050606060506050506050506060505 - 0505050505050505050504050504040504050504040404040404040403040404 - 0404040404040304030403030303030303030303030303030203030203030202 - 0302030203020202030302020302020202020202020201020201020201010101 - 0101010101010101020101020101010101010101010100010101010101010001 - 0100010000000000000100000000000100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303031 - 3131323232343434343434353535373737383838383838383838383838383838 - 3939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B - 3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F3333332F2F2F2F2F2F2F2F2F2F - 2F2F2F2F30383737383838383838383838383838383838383838383837383837 - 3837373837373837373837373837373737373737373737373737373737373737 - 3734343434343434343434343434343434343434343436353536363636363636 - 3635363635363535363535363535363535363535353435363534363534353535 - 3534353435353434343535343534353534343434343434343434343334343333 - 3433343334343334333334343333333334333333333333333333333333333333 - 3332333232323233333333323332333231323131323131313131313131313131 - 3131303031303030303030313030303131313131313130313031313132313131 - 3232323132313231313232323232323232323232323233333333323232333233 - 3333333333343434353534343534353435353635363636373737383838393938 - 3939393A3A3A3A3B3A3C3C3D3C3C3C3E3E3E3F3F3F4141404141404343424544 - 4446454548474749494949494A4A4A4A4A4A4A4C4C4C4E4E4E50505052525254 - 53545657565757575A5A5A5D5C5D606060626363646464666667696A696B6B6B - 6D6E6E7070707273737575757777777A797A7C7B7C7F7E7E8180818383838685 - 858888888A8A8A8D8D8C8F8F8F919190939393969696989898999A9A9C9C9C9E - 9E9FA1A1A1A3A3A3A4A4A4A6A6A6A9A8A9AAAAAAACACACADADADA7A7A7858585 - 5F5F5F3939391919190E0E0E0F0F0F0F0F0F0E0E0E0E0E0E0D0D0D0E0E0E0E0E - 0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A - 0A0A0909090A0A0A090909090909080808070707070707070707060606050505 - 0505050505050505050404040303030D0D0D2E2E2E575757818080A4A4A4AAAA - AAA9A8A8A7A7A7A5A5A5A2A2A2A0A0A09F9F9F9E9E9E9E9E9EA3A3A3A2A2A2A3 - A3A3A3A3A3A4A4A4A3A3A39899998484848282827F7F7F7C7C7C7A7A7A777676 - 7474747171716E6E6E6B6B6B6969686566656362626060605D5D5D5A5A5A5758 - 585554555252534F4F4F4D4D4D4A4A4A4747474545454243424140403D3D3E3B - 3B3B3838393737363535343233323130302F2F2F2D2D2D2A2B2A282928262626 - 2525262323232323232121211F1F1F1D1D1D1D1D1D1B1B1B1A1A191918181717 - 1817171715151614141414141414131412131311121112121210101010101010 - 10100E0F0E0F0E0F0D0D0D0D0E0D0C0C0C0C0C0C0B0C0C0B0C0C0B0B0B0A0B0A - 0A0A0A0A0A0A0A0A0A090A0A0A0909090A090A09090A09090909090909090809 - 0908080808080808080808080808080708070707080707070807070707070606 - 0707060606060606060606060605050606050606060505050505050505050505 - 0505050505050505050504050505040504040404050404040404040404030404 - 0304040303040303040304030303030303030303030303030303030303020203 - 0302030302020203020302020202020202020201020202020102010102010201 - 0201010101020101010101010101020101010101010101010101010100010100 - 0000010000010000010000000000010000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303232323333333434343535353636363737373838383838 - 383838383838383838383939393939393939393939393A3A3A3A3A3A3A3A3A3A - 3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D - 3D3D3D3E3E3E3E3E3E3B3B3B3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3232 - 3238383838383838383838383838383838383838383838383738383738383738 - 3737383737383737383737383737373737373737373737373737363636343434 - 3434343434343434343434343434343535343636363636363636363636363636 - 3536363536353536353536353536353536353536353536343436343435353435 - 3434343434343535353534343435343435343434343434343434343434343434 - 3333343434343433343433333334343333333433333333333333333333333333 - 3232323333323332333232323132313132313132313131313131313131313130 - 3131303130313131313132313232313131313130313131313132323232323131 - 3131313132313232323232323132323231323332323233333232333333333434 - 343435353535353535353536363636363837383938383939393939393A3B3B3B - 3B3A3C3D3D3C3C3D3E3F3E3F3F3F414141414141434342454544464545484747 - 4A49494B4A4A4C4C4C4E4D4E4E4E4E504F4F5151515252525554555757575858 - 595A5A5A5C5C5C5F5F606161616565656768676A6A6A6C6D6C6F6F6F71717174 - 74747676767878797B7B7B7D7C7D807F808382828585858787878A8A898C8C8C - 8E8E8E9191919393939696969998999B9B9B9C9C9C9F9F9FA1A1A1A4A3A3A6A6 - A6A8A8A8AAAAAAACACACAEAEAEA5A5A57C7C7C4E4E4E22222210101010101010 - 10101010101010100F0F0F1010101010100F0F0F1010100F0F0F0F0F0F0F0F0F - 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0A0A - 0A0A0A0A0A0A0A0A0A0A09090909090908080808080807070707070706060606 - 0606060606050505050505030303030303030303030303161616444445757575 - A1A1A1AAAAAAA9A9A9A7A7A7A5A5A5A6A6A6AAAAAAA9A9A9A9A9A9AAAAA9AAAA - AAAAAAAA9F9F9F8C8C8C8989898787878484848181817E7E7E7B7B7B78797975 - 75757272726F706F6C6C6C6A69696766666464636161615E5E5E5B5B5B585858 - 5656565253525050504D4D4D494A4A4847484545454444444141413E3E3E3B3B - 3B3939393737373434343232333030302E2E2F2C2D2D2A2B2A29292926262725 - 25252323232323232020212020201D1D1D1D1D1D1B1B1B1A1A19191918171717 - 1616161515151414141414141414131212121211121111101010101010100E0F - 0E0F0E0E0D0E0E0E0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0A0A0A0B0A0A0A - 0A0A0A0A0A0A0A0A0A0A090A090A090909090909090909090909080809080808 - 0808080808080808080707070707080707070707070707060707070706070706 - 0606070606060606060605060605060606050605060505050605050605050505 - 0505050505050405050504050505050404040404040404040404030403030303 - 0304030304030404040304040303030303030303030303020303020203030302 - 0303020302020302020202020202020202010202010201020101020202010201 - 0101010101020101010201010102000101010101000101010101010101000000 - 0101000000010000000000010000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303032323234343434 - 34343636363737373737373838383838383939393939393939393939393A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C - 3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3A3A3A37373737363732323230 - 30302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F363636383838 - 3838383838383838383838383838383838383838373838373838373837373837 - 3738373738373738373737373737373737373737373734343434343334343434 - 3434343434343434343434363636363636363636363636363636363636363635 - 3636353635353635353635353635353635353635353635353635353535343535 - 3534353535353535343434353534343434343535343434343334343434343434 - 3334343434343433333333333434343333333434333333333333333233323332 - 3333323232323232323232323231323231313231313130313131313232313232 - 3132323132323231313132323131313132323232323232323231323231313233 - 3332323232323232323232333333323333333332343334353534353535353535 - 353535363536373737373737383838393A3A393A393A3A3A3B3B3B3D3D3D3D3D - 3C3E3F3F3F3F3F4141414141414343434545444646454848474A49494B4A4A4D - 4C4C4E4E4E504E4E5252515453535554545555555757575859595B5C5C5E5D5E - 6161616362626565656767676B6B6B6E6D6E7070707272737574747878787A7A - 7A7D7D7D7F7F7F8383828584858787878A88898C8C8C8E8E8E91919093939395 - 95959899989B9B9B9D9D9DA0A0A0A1A1A1A4A4A4A6A6A6A9A9A9ABABABAEAEAE - ABACAC8282824E4E4E2020201111111212121212121111111111111111111111 - 1112121211111111111111111111111111111111111110101010101010101010 - 10100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0D0D0D0C0C0C0D0D0D0C0C0C0B0B0B - 0B0B0B0B0B0B0A0A0A0A0A0A0909090808080808080808080707070606060606 - 0606060605050505050503030303030303030303030303030302020213131344 - 44447B7B7BA8A8A8AEAEAEB1B1B1B1B1B1B0B0B0B0B0B0B0B0B0B0B0B0A6A6A6 - 9594949292928E8D8E8B8B8B8889898586858383838080807D7D7D7A7A7A7777 - 787474747171716E6E6E6B6B6B686867646564626262605F5F5C5C5C59595956 - 57575353535051504E4E4E4B4B4B4848484646464343444040403E3E3E3B3B3B - 3939383636373534343232323030302F2F2F2C2C2D2A2B2A2829282626272525 - 252323232323222021211F1F201D1D1E1C1C1D1B1B1B1A191A18191816161616 - 16161515151414141414141413141212121211111010101010111010100E0E0F - 0F0F0E0E0D0E0D0E0D0C0C0C0C0C0C0C0C0C0C0C0B0C0C0B0A0A0B0B0A0A0A0A - 0A0A0A0A0A0A0A0A0A0A090A090A0A0909090909090909080908090908090808 - 0808080808080808070808080707070808070707070707070707070606060706 - 0606060606060606060606050605060505050505050505050605050505050505 - 0505050505050505050405050504040505040404040404040404040404040403 - 0403030404030303030303030303030303030303030203030202020202020302 - 0203030202020202020202020202020202010102010102010102020202010201 - 0201020102010101010101010101010101010101010001010101010001000001 - 0000000001010001010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303333333535353535353636 - 363737373939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C - 3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3C3C3C3A3A3A - 3736373434343232322F2F2F2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30303038383838383838383838 - 3838383838383838383838383838383838383837383837383737383737383737 - 3837373837373737373737373737373636363434333434333434333434343434 - 3434343435353536363636363636363636363636363636363636363636363536 - 3635363535363535363535363535363535363535363535353534353435353435 - 3435343435343435343434343434343434343434343434343433343434343434 - 3434343333333334343333343433333333333333333333333332333333323333 - 3333333232333232333232323131323231323231323232323232313232313131 - 3131323132313131313131313232323231323232313131323233333233323232 - 3332323233333333333332333334343435353434343435353535353536363637 - 3737373637373838393A3A39393A3B3A3A3B3B3C3C3C3C3D3D3D3E3D3D403F3F - 4040404141414343434444444646454848474949484B4A4A4D4C4C4E4E4E504F - 4F5351525554535757565858575A5A5A5B5B5B5C5C5C5E5E5E61616063626366 - 65656868686B6B6B6D6D6C7070707474747776777979797B7B7B7E7E7E808080 - 8383838585858989898B8B8B8E8D8E9191919493939696969898989B9A9A9D9D - 9D9F9F9FA1A2A1A4A4A4A6A7A6A9A9A9ACACACAEAEAE9B9A9A6767672F2F2F12 - 1212131313121212121212131313131313141414141414141414131313131313 - 1414141313131313131313131212121212121212121111111111111111111010 - 101010101010101010100F0F0F0E0E0E0E0E0E0D0D0D0E0E0E0D0D0D0C0C0C0B - 0B0B0C0C0C0B0B0B0A0A0A090909090909090909080808070707070707060606 - 0606060505050404040404040404040404040404040303030202020202020202 - 022121216261629F9F9FB7B7B7B7B7B7B7B7B7B6B6B6ACACAC9B9B9C99999996 - 96969393939091918D8E8E8B8B8B8888888584848282827F7E7F7B7B7B787878 - 7575757272726F6F6F6C6C6C6969696667676262626060605C5D5D5A5A5A5657 - 565453545150504E4E4E4B4B4B4849494646464443444141413E3E3E3B3B3B3A - 3A3A3637373435343232332F2F2F2F2F2E2D2C2D292929292829262727252424 - 2323232222222120211E1E1E1E1E1D1C1C1C1A1A191A19191818171717171617 - 161516151414141413141313121313131211111111101010101010100F0F0F0D - 0D0D0E0D0D0E0E0E0C0C0C0C0C0C0C0C0C0C0C0B0B0A0B0A0B0B0A0A0A0A0A0A - 0A0A0A090A0A090A090A0A0A090A09090A090909090909090909080809080808 - 0808080808080707080707070707070807070707070707070707070607060606 - 0606060606060606060605050506050506050505050505050505050505050505 - 0405050505050505050404040404040404040404040404040404040404040304 - 0403030303030303040303030303030303020303030303030303020302020203 - 0202020202020202020202020202010202020202020202010202020102020101 - 0101020101010102010101010101010101010100010100010001010101010000 - 0100000000010100000000000000010000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030343434353535363636373737393939 - 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D - 3D3E3E3E3A3A3A3838383736373333333131312E2E2E2E2E2E2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3434343838383838383838383838383838 - 3838383838383838383838383838383738383738383738373738373738373738 - 3737383737373737373737353434343333343433343433343433343434343434 - 3636363636363636363636363636363636363636363636363636363636353636 - 3536353536353536353536353536353436353535353436343535343435343435 - 3535343435343434353434353434343434343434343434343334343434343434 - 3434343333333333343334343333333333333333333333333332333333333232 - 3332323232323232323232333233323232323232323232313231313231323131 - 3131323131323232323232323232323232313232333333333333323233323232 - 3334343333333333333434343333343534353332323333333333333434343535 - 353737373736373939383B3A393C3B3B3E3D3D3E3E3E40404041404142414244 - 43434444444647464747474949484B4B4A4D4C4C4E4E4E504F4F535252555454 - 5757575957585B5B5A5D5D5C605F5F6160616161616463646666666968686B6B - 6B6E6E6E71717173737377767679797A7C7C7D7F7F7F8282828585858888878A - 8A8A8D8C8D8F90909392939595959897979B9B9B9D9D9DA09F9FA2A2A2A4A4A4 - A7A7A7A9A9A9ACACACAEAEAE8D8D8D4F4F4F1D1D1D1313131414141414141414 - 1414141415151515151516161616161616161616161615151515151515151516 - 1616151515141414141414151515141414141414131313121212121212121212 - 1111111111111111111010100F0F0F0E0E0E0E0E0E0E0E0E0D0D0D0C0C0C0C0C - 0C0C0C0C0C0C0C0B0B0B0A0A0A09090909090909090908080807070707070706 - 0606060606050505050505040404040404040404020202020202020202020202 - 0101010C0C0C484848929292BCBDBDB3B3B3A4A4A4A1A1A19F9E9E9C9B9B9999 - 9996969693939390908F8D8D8D8A8A8A8686868383837F807F7D7D7D7A7A7A76 - 76767474747070706D6D6D6A696A6666666463636161615D5E5E5A5A5A585858 - 5455545151514F4F4F4C4C4C4849494646464343434141413E3E3E3B3B3B3838 - 393636363434343232322F2F2F2E2E2E2D2D2D292A2928282827262624242423 - 23232222222020201F1E1F1D1D1D1C1C1C1A1A1A1A1919181717171716161615 - 1414141414141414141313121112111010101010101010100F0F0F0F0E0F0E0E - 0D0D0E0D0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0A0B0B0B0B0B0A0A0A0A0A0A0A - 0A0A0A0A0A0A090A0A090A0A090A090909090909090909090908080808080808 - 0808080808080708070707080707070707070607070607060607060607070606 - 0606060606060606060605050606050605060505060505050505050505050505 - 0505050505050404050504040404040404040404040404040404040404030403 - 0403040303030303040303030303030302030303030303020202020302030202 - 0202020202020202020202020202020202020101020102010201010102010201 - 0202010201010201010101010101010101000101010100000001010101010101 - 0100000000010000000100000001000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303131313434343535353737373838383A3A3A3C3C3C3D - 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3A3A3A3737373535363232323030302E2E2E - 2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F373737383838383838383838383838383838383838 - 3838383838383838383838373838373838373837373837373837373837373837 - 3737373736363634333334333334333334343334343334343335353536363636 - 3636363636363636363636363636363636363636363636363636363635363635 - 3635353635353635353635353635353635353635353535343534343535353435 - 3535343435343434343434353434343434343434343433343433343334343433 - 3334333433343433343333333333333333333333333333333333323332323233 - 3332323332333333323332323332323232323232323232323232323132313231 - 323333333232323232323232323333323333323332333333333332323131312F - 2F2F2F2F2F2E2F2F30303030302F303130313031313131333232333433343434 - 35353536363636363738393939393A3C3C3C3E3E3E4040404243434544454545 - 45484747494A494B4B4A4D4D4C4E4E4E504F4F5352525554545757575958585B - 5B5B5D5D5D60605F6262616464656665656767676A6A696B6C6C6E6F6F717171 - 7474747676767A7A7A7E7E7E8180818383838686868888888C8C8C8F8F8F9292 - 929494949797979999999D9C9D9F9F9FA3A2A2A5A5A5A7A7A7A9A9A9ACACACAE - AEAE8D8D8D494949161616141414151515161616161616171717161616171717 - 1717171818181818181818181818181818181717171616161717171717171717 - 1716161616161616161616161615151514141414141413131314141413131313 - 13131313131414141313131212121111111010101010100F0F0F0D0D0D0D0D0D - 0D0D0D0C0C0C0A0A0A0A0A0A0909090909090909090808080707070707070707 - 0706060606060604040404040404040404040402020202020202020202020201 - 01010101010303033E3E3E848484A9A9A9A7A7A7A4A4A4A1A1A19E9E9F9B9B9B - 9898989595959292928F8F8F8B8B8B8888888585858281817E7E7E7B7B7B7777 - 777474747172726E6D6D6A6A6A6768686363636161615E5E5E5B5A5B58585854 - 54545151524F4F4F4C4C4C4849494646464443434241413E3E3E3B3B3B393938 - 3636363534343232332F2F2F2E2E2E2C2C2B292A2A2727282626262424242323 - 232221222120201F1E1E1D1D1D1B1B1B1A1A1A19181918171717161715161514 - 14151414141413141213131212111010111110101010100F0F0F0F0F0F0E0E0E - 0E0E0D0C0C0C0C0C0C0C0C0C0C0C0C0A0A0B0A0B0B0A0A0B0A0A0A0A0A0A0A0A - 0A090A0A0A090A0909090A090909090909090909080908080809080809080807 - 0808080708080707070707070707070707070707060706060606070606060606 - 0606060605060605060505060505060605050506060505050505050505050405 - 0505040504040504040504040405040504040404040404040404040304030303 - 0304030303040303030303030303030303030203030302020302020302020203 - 0202030202030202020202020202020102010102020102010201010101010101 - 0201020201010201010101010001010101000001000101000000010101000001 - 0100010000000001000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303232323434343636363838383A3A3A3A3A3A3A3A3A3635363434 - 343232322E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3130313232 - 3234333435353538383838383838383838383838383838383838383838383838 - 3838383838383838383837383837383737383737383737383737383737373737 - 3535343333333433333433333433333434333434343636363636363636363636 - 3636363636363636363636363636363636363636363636363636363536363536 - 3535363535363535363535363535363535363535353535353535353434343435 - 3434353534343535343435343434343434343434343434333434343333343334 - 3333333434333333333333343434333333333333333233333332333333333333 - 3333343232333232333232333232323232313232323232323132323332323233 - 3232323332323232323333333232323030312F2E2F2E2D2D2D2D2D2E2F2E2F2F - 2F2F2F2F30303030313131313132323232313133333334353435353536363636 - 353637383839393939393A3A3A3B3D3D3E3E3E3F3F4040434342454545494949 - 4B4C4B4D4D4D4E4E4E50504F5352525554545757575958585B5B5B5E5D5D6060 - 606262626564656767676A6A6A6C6C6C6D6D6D6F6F6F7272717575757778777B - 7B7B7D7D7D8080808483838787878B8B8B8D8D8D909090929292969596999999 - 9C9B9B9E9E9EA1A1A1A4A4A4A6A6A6AAAAAAACACACAFAEAE8D8D8D4949491616 - 161515151616161616161717171717171818181818181919191A1A1A1A1A1A1A - 1A1A1A1A1A1A1A1A1919191A1A1A191919191919181818181818181818171717 - 1717171717171717171717171818181919191A1A1A1B1B1B1C1C1C1C1C1C1D1D - 1D1E1E1E1E1E1E1D1D1D1D1D1D1B1B1B1A1A1A19191918181816161614141413 - 13131010100E0E0E0D0D0D0A0A0A0A0A0A090909080808080808070707070707 - 0606060505050404040404040404040404040202020202020202020202020101 - 010101010101010101013A3A3A848484A9A9A9A6A6A7A4A4A4A0A0A09E9D9D9A - 9A9A9696969393939091918D8D8D8989898686868383837F80807C7C7C797879 - 7575757272726F6F6F6B6B6B6868686464646262625E5D5E5A5B5A5858585656 - 565151514F4F4F4C4C4C4849494646464343434141423E3F3E3B3B3B38383937 - 36373534343232322F2F2F2E2D2E2C2C2B292929282827262626232323232323 - 2120201F201F1D1D1D1D1D1D1B1B1B191A1A1919191716161716161515161414 - 141414141213131213121212121111111010101010100F0F0F0E0E0E0D0E0E0C - 0C0D0D0C0C0D0C0C0C0C0C0C0C0C0B0A0A0B0A0A0A0A0A0A0A0B0A0A0A0A0A0A - 0A0A0A0A0A090909090909090909090809090809090809090808080808080708 - 0807070707070707070707070707070707070706070606060706060606060606 - 0606060606050505060505050505050506060505050605050505050504040505 - 0504050504040404040404050404040404040404040304030403040404040403 - 0404030403040403030303030303030203020302030202020302020302020203 - 0202020203020202020202020202010202020102010201010202020201010101 - 0101010101010101010101010101010101010001000100000001000001000000 - 0000010000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303232323535353737373939393B3B3B3333332E2E2E2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F313131333233343434363636373737393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383738383738383738373738373738373738373737373733333333 - 3333333333343333343333343333353535363636363636363636363636363636 - 3636363636363636363636363636363636363636363636363636353636353635 - 3536353536353536353536343536353536353536353535353435353534353435 - 3534343534343435343434343434343434343434343434343433343333333433 - 3433333334343333343333333333333333333333333433333432323432323432 - 3333323233323233323232323232323232313232323233333332333332323232 - 32323232322F2F2F2D2D2D2D2D2D2E2E2D2D2D2E2E2D2E2F2E2E2F302F303030 - 3030303130313232323232323332323434343434343535353636363838383939 - 393A3A3A3B3B3B3D3D3D3E3E3F3F3F404141424242434444444646474A49494D - 4D4E50504F5353525554545756565958585B5B5B5E5D5D606060636262656565 - 6868686A6A6A6C6D6C6F6F6F7272727373737676767978787B7B7B7E7E7E8281 - 818585858787878B8A8B8E8E8F9191919595949797979A9A9A9D9D9DA1A0A0A3 - A3A3A5A6A5A9A8A8ACABACAFAFAF9A9999515151161616161616161616181818 - 1919191919191919191A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1B1B - 1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919191918181819191919191918 - 18181919191B1B1B1D1D1D1F1F1F212121232323252525262626272727282828 - 2828282828282828282727272525252525252424242323232121211F1F1F1E1E - 1E1A1A1A1818181515151212120F0F0F0C0C0C0A0A0A08080807070707070707 - 0707060606040404040404040404040404020202020202020202020202010101 - 010101010101000000010101424242929292A9A9A9A6A5A5A2A2A29F9F9F9B9B - 9B9999999595959291918E8D8E8B8B8B8787878484848180817D7D7D7A7A7A76 - 76767273736F6F6F6C6C6C696A6A6665656262625E5E5E5B5B5B585858555656 - 5352524F4F4F4C4B4B4949494646464443434040403E3E3E3B3B3B3938393635 - 363434333131312F2F2F2D2D2D2C2B2B292A2A27272825252623232323222221 - 212120201F1D1E1E1C1C1C1A1A1A191A1A181818171716171616141414141415 - 1414141312131111121110111011101010100F0F0F0F0F0F0E0E0E0E0D0E0D0D - 0C0C0D0C0C0C0C0C0C0C0B0B0B0B0B0B0A0B0A0A0A0B0A0A0A0A0A0A0A0A0A09 - 0A0A09090A090909090909090909090909080808080808080808080808070808 - 0807080708070707070707070607070707060607060607070606070606060606 - 0606060606060606050506050605060605060505050505050505050505050505 - 0405040404040404040404040404040404040403040304040304040404030403 - 0304040303030303030303030303030303020302030303030203020202020202 - 0202030202020202020202020102020202020201020101010101010201010101 - 0101020101010101010101000101010101000001010000010100010001000100 - 0001000100000100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303434 - 343535353838383A3A3A3C3C3C3131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3030303131313333333534343636363838383939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373837373837373837373535353333333333333333 - 3333333334333334333336363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636363636363635363635363535 - 3635353635353635353635353635353534353534353535343535353435353434 - 3435343534343434343434343434333433343434343434343334343433343434 - 3433333333343334333334333333343333343333333333343333343332333332 - 3332323332323232333233323232323333333332323333323031312E2D2D2E2D - 2D2D2D2D2D2D2D2E2E2E2D2E2E2E2E2E2F2F2E302F2F30313131303031313131 - 31313232313434343435353635353536363736363738373939393A3A3A3B3B3B - 3C3D3D3D3E3E403F4041404142424344444546464748484849494A4B4B4C4F4F - 4F5353545757565958585B5B5B5E5D5D6060606362626665656968686A6A6A6D - 6D6D706F6F7373737575757878787979797C7C7C7F7F7F838283858585888888 - 8B8B8B8F8F8F9292929595959998999C9C9C9E9E9EA1A1A1A4A5A5A8A8A8AAAB - AAADAEAEAAAAAA6868682222221717171818181919191919191B1B1B1B1B1B1C - 1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1D1D1D1D1D1D1E1E1E1D1D1D1C1C1C - 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1919191919191919191818181919 - 191B1B1B1E1E1E2121212424242727272828282B2B2B2C2C2C2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B292929282828272727 - 2525252222221F1F1F1C1C1C1818181515151111110C0C0C0909090808080707 - 0706060605050504040405050503030302020202020202020201010101010101 - 01010000000000000000000D0D0D5B5B5BA3A3A3A7A8A7A4A4A4A1A1A19D9D9D - 999A9A9696969393938F8F908C8C8C8888888585858182817E7E7E7A7A7A7777 - 77747474706F6F6C6C6C696A696566656262625F5F5F5B5A5A58585856555552 - 52534F4F4F4C4C4C4849494646464343434140403D3D3D3B3B3B393938353636 - 3333343131312F2F2F2D2C2D2B2A2A2A29292727262526252323232222222121 - 201F1E1F1D1D1E1C1C1C1A1A1A19191918181817171616151614151414141414 - 14141313131211111011101010111010100F0F0F0E0E0E0D0E0E0C0C0D0C0C0C - 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A090A - 0A0A090A09090909090908080909080808080808080808080807080808080808 - 0807070707070707070707070707060707060706060606060606060606060605 - 0506060505050605060606050606050605050505050505050505050505050505 - 0505040405040404040404050404040403040404040403030403030303030304 - 0403030303030303030303030302030302030303030202030303020203020202 - 0202020202020202020102020202020202020102010101020201020201010102 - 0201010101010101010100010101010101000001010100000000000000000000 - 0100000100000101010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030313131343434363636 - 3838383A3A3A3C3C3C2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F31313132323234343435 - 3535373736393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3837383837383737383737383737383737343333333333333333333333333333 - 3333333534343736363736363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636363636363536363536353536 - 3535363535363535363535353435363535353535353434353435353534343535 - 3435343434343534343434343434343334343434343433343333343434333433 - 3334333333343334333334333334333333333334333334323333333333323233 - 33323233333232323232323333333132322F2E2F2D2D2C2E2D2E2D2E2E2D2E2E - 2E2D2E2E2E2E2E2E2E2E2F2F2F302F3030303132313333333333333434343636 - 373A3A3B3B3A3A3C3B3B3E3D3D3E3D3D3E3E3E3A3A3A3C3C3C3D3C3D3E3E3E3E - 3E3F40414142434343444445454647474848494A4C4C4C4D4D4E4F5050525252 - 5656565B5B5B5E5D5D6060606362626565656968686B6A6A6D6D6D706F6F7373 - 737777767978797C7C7C7F7F7F8181818383828586858989898C8C8D8F8F8F93 - 93939696969A9A9A9D9C9CA0A0A0A3A3A3A6A6A6A9A9A9ACACACAFB0B0898989 - 3737371818181818181919191B1B1B1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1F1F - 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1F1F1F1F1F1F1E1E1E1D - 1D1D1C1C1C1C1C1C1C1C1C1A1A1A191919191919181818181818181818191919 - 1C1C1C2020202424242828282B2B2B2E2E2E3030303232323333333333333333 - 333333333434343434343434343434343333333232323131313030302F2F2F2D - 2D2D2B2B2B2828282424242121211E1E1E1919191515151010100C0C0C080808 - 0606060505050505050505050404040303030303030202020202020101010101 - 010000000000000000000000002323237E7E7EA9A9A9A5A5A5A2A2A29E9E9E9B - 9B9B9898989494949090908D8D8D8A8A8A8585858283827F7E7F7B7B7B777777 - 7474747170716D6D6D6A696A6666676262625F5F5F5B5B5A5858585655555151 - 514F4F4F4C4B4B4948494646464343434040403D3D3D3A3A3A39393935353532 - 32323031302F2F2F2D2D2D2B2B2B292829262727242424232323222222202121 - 1F1F1F1D1D1E1C1B1B1A1A1A1919191717171616161515151414141414141313 - 131212121212121010101110100F0F0F0F0F0F0D0E0E0E0D0E0D0D0D0C0D0C0C - 0C0C0C0C0C0A0B0B0B0B0A0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0909090A09 - 09090A0909090909090908090809080908080808080808080808080708080707 - 0807070707070707070607070707070607070706070606060606060606060605 - 0506050506050506050505050505050505050505050505050505050505040505 - 0404050504040404040404040404040404040404040404040304030403040303 - 0403030303030303030203030303030302030303030202020302020202020202 - 0302020202020201020202010101020102020201010102010201010101010101 - 0101010101010001010100010101010101010101010100000001000100010100 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 303030303030303030303030303030303030303232323434343737373939393B - 3B3B3939392E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3231323333333434343737373837373A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 3738383738373738373736363633333333333333333333333333333333333336 - 3636373636373636373636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636363636353636353635353635 - 3536353536353536353536353536353535343535343435353535353534343434 - 3434343435343535343434353434353434343433343433343434343334343433 - 3434333434343433333433333433333433333433323433333332333332333332 - 323232333333333030312D2D2D2D2D2D2D2D2C2D2D2D2D2D2D2D2D2E2E2E2F2F - 2F2F2F2F2F3030303231323536363B3B3B40403F4444444948484949494B4B4B - 4B4B4B4B4B4A4B4C4B4C4B4C4C4D4C4D4D4D4D4D4D4B4B4B4848484747474545 - 4543444445454648474849494A4B4B4C4D4D4E4F4F5052515254545557575759 - 595A5F5F5F6362626565656968686B6A6A6D6D6D707070737373767777797879 - 7C7C7C80807F8282828585858787878A8A8A8D8D8D9090909494949696969999 - 999E9E9EA1A1A1A4A4A4A7A8A8ABABABAEAEAEA6A6A65B5B5B1818181919191B - 1B1B1A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F1F1F1F202020212121212121 - 2121212020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1D1D - 1D1C1C1C1C1C1C1A1A1A1A1A1A1919191818181818181818181818181919191D - 1D1D2424232929282E2E2C323230343431373634383836393936393937393937 - 3A3A393A3A393A3A393A3A3A3939393939393939393838383737373636363434 - 343232322F2F2F2D2D2D2A2A2A2626262222221D1D1D1919191414140F0F0F09 - 0909060606050505050505050505040404030303030303020202020202010101 - 0000000000000000000000000000004B4B4A9E9E9EA7A8A7A4A4A4A0A0A09C9C - 9C9899989696969191928D8D8D8B8B8B868686838383807F7F7C7C7C77777874 - 74747171706D6D6D69696A6666666262625F5F5E5A5A5B585858555655515151 - 4F4F4F4B4B4B484848454545424242403F3F3B3C3C3A3A3A3838383535353332 - 333130302F2F2F2D2D2D292A29282727262626252425232323212121201F201E - 1D1D1C1C1C1B1B1C1A1A1A181818161717161617141415141414141414131213 - 1212121110111110101010100F0F0F0E0E0E0E0E0E0C0D0D0D0C0D0C0D0D0C0D - 0C0C0C0C0B0B0B0B0A0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A090A09090909 - 090909090A090809090908090808080808080808080808070807070807080707 - 0707080707070707070707070707060707070706060606070606060606060606 - 0505050505060606050606060505050505050505050505050405050405050404 - 0404040404050404040404040404040404040304030404030403040404030303 - 0303040303030303030302030203020303020302020203020203030202020202 - 0202020202020202020202010101020102010102020202010102010101010101 - 0101010101010101010101010000010100010101010001000000010100010000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303232323535353737373939393C3C3C3635 - 362F2F2F2F2F2F2F2F2F2F2F2F2F2F303535353737373939393A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3837373837373534343333333333333333333333333333333434343737363736 - 3637363637363637363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636363635363635363535363535 - 3635353635353535353635353535353635353534343534343535343434353434 - 3534353435343435343435343435343434343434333333343334343335343434 - 3433343333343333343333343333343333333332333232333333333232323131 - 2E2E2E2D2D2E2D2D2D2C2D2D2E2E2E2E2D2E2F2F2E2F2F2F2F2F303130303536 - 363E3E3E4444444747474949494A4B4A4B4C4B4D4C4D4D4D4E4D4D4D4F4F4F4F - 4E4F4E4E4E4F4F4F5050504F4F4F515050515151525252545454545354505150 - 4D4E4E49494A4B4C4C4D4D4D4F4F505252525454545756575958595B5B5C5D5D - 5E6363636867676B6A6A6D6D6D7170707473737777777979797C7C7C7F807F82 - 83828686868989898C8C8C8D8D8D9191909494949797979B9B9B9E9E9EA1A1A1 - A5A5A6A8A8A8ABACACB0B0B08B8B8B3232321919191A1A1A1B1B1B1D1D1D1E1E - 1E1F1F1F20202021212122222222222222222222222222222223232322222222 - 22222121212121212121212121211F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1D1D1D - 1B1B1B1B1B1B1A1A1B19191919191718181518171219181019180D1B1A0F2020 - 192727242D2D2C30313434343936373B39393E393A3F3A3B3F3C3C3B3E3E3C40 - 3F3942413743423742423941403B40403D3F3F3E3E3E3D3D3D3D3D3D3D3B3B3B - 3939393737373434343131312E2E2E2929292525252020201B1B1B1616161010 - 100A0A0A06060605050504040403030303030303030303030302020201010100 - 00000000000000000000000000001E1E1E818181A9A9A9A5A5A5A1A1A19E9E9E - 9A99999696969393938E8E8E8A8B8B8787878383837F7F807C7C7C7878787474 - 747171716D6D6D6A69696666666262625F5F5F5B5B5B5858585554545151514E - 4E4E4B4A4A4747484545454243433F3F3F3C3C3C3A3A3A373837353534323233 - 2F2F2F2E2E2E2B2C2C2A2A2A2828272525252323232323232121211F1E1F1D1D - 1D1D1C1C1A1A1A19191918181816171716161615141414141414141413131312 - 12111111111011100F10100F0F0F0E0E0E0D0D0E0D0D0C0C0C0C0C0D0C0C0C0C - 0B0B0B0A0B0B0B0B0B0B0A0A0B0A0B0A0A0A0A0A0A0A0A090909090A0A0A0A09 - 0909090909090908090808090808080808080808070807070808080807070707 - 0708070707070707070707070607060706060606060606060606060606050606 - 0505050505060506050505050505050505050405050504040404040405040504 - 0504050404040504050404040404030403030304030303030404030303030303 - 0303030303020303030302020303030203030303020302030203030202020202 - 0202020202020202010102010201020201020102010201020102010102010101 - 0101010100010101010100010101010100010001000100010100010000000000 - 0101000001000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 30303030303030303030303333333535353737373A3A3A3C3C3C3232322F2F2F - 2F2F2F2F2F2F2F2F2F3232323A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383738383738383737 - 3737333333333333333333333333333333333333353535373736373736373636 - 3736363736363736363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636363536363536353536353536 - 3535363535363535363535353534353435353535353434343435343434353534 - 3534343535343534343534343534343433343534333434343534333534343434 - 333434333433333433333433333433323333333332333030312E2D2F2D2D2D2D - 2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F3030313031393839424241474747494949 - 4A4A4A4C4C4C4D4C4C4F4F4F4E4F4E5151505150515051505151515151515252 - 5253535353535253525353535354545454545454545457575756575759595959 - 59595656575050515151525253545656565857585B5A5B5D5D5E606061646364 - 6868686D6D6D706F6F7473737777777979797C7C7C8080808383838686868A8A - 8A8D8C8C9090909494949594959898989C9B9B9F9F9EA3A3A3A5A5A5A9A9A9AD - ADADAEAEAE6969691D1D1D1A1A1A1C1C1C1D1D1D1E1E1E202020212121222222 - 2323232424242424242424242424242323232323232323232323232323232323 - 232121212121212121212121211F1F1F1F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1B - 1B1B1A1A1A19191B17181E16172113173510184D0E18620B17730B18830B1A93 - 0C1C9A0A1AA5091AAB0A1AA90A1AA90A1AA90C1AA6111D9A121E9618238C1E26 - 81242B742D31673538573F3F4943434447463D47463C45443F43434142424140 - 40403E3E3E3A3A3A3838383535353030302C2C2C2727272222221C1C1C171717 - 1111110A0A0A0606060404040303030303030303030303030202020101010000 - 00000000000000000000000000040404595959A6A6A6A6A6A6A3A3A39E9E9E9B - 9B9B9797979393938F8F8F8C8C8C8888888484847F7F7F7D7D7D787878747474 - 7171706D6D6D6969696766666262625E5D5E5B5B5B5858585454545050504E4E - 4D4A494A4646474444444241413E3E3E3B3B3B3A3A3A3737363434343131312F - 2F2F2D2D2D2B2B2B2A29292626262526252323242222212021211F1E1F1E1E1D - 1C1B1C1B1B1B1919191716171717161414151414141415151313141212121110 - 111011111111100F100F0F0E0E0E0E0E0D0D0C0D0D0D0C0C0D0C0C0C0C0C0C0B - 0B0B0B0B0B0B0B0B0A0A0B0B0A0A0A0A0A0A0A0A0A090A0A090A090A0A090909 - 0909090909090908080908080808080808080808080707080708080707070707 - 0707070707060707060607060606070706060606070706060606050506060605 - 0506060606060605050506050505050505050505050405040405050405050405 - 0405040405040404040403040403030304030303030403030404030304030303 - 0303030303030303030203030202030203030302030202020202020203020202 - 0202020102020202010102020201020201010102020102010102010101020101 - 0101010101010100010001010100010001010000000001000000000100000100 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303434343636363838383A3A3A3D3D3D2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F3434343A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383838373838373838373635353333 - 3333333333333333333333333333333337363637373737373637373637363637 - 3636373636373636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363636353636353635353635353635 - 3536353536353535343436353536343435353535343435343536363535353435 - 3434353435353434353433353434353433353434353434343434343334343333 - 3533333433333433333433333333333030302C2C2D2D2D2E2D2D2D2D2D2D2F2E - 2E2F2F2F2F2F2F3030303636374342434747474949494B4B4B4E4E4E4F4F4F51 - 5151515151525252535353545454545454555555535353555555555555555555 - 5555545555555655565555565656575757575858585959595A595A5B5B5B5E5E - 5D605F5F5D5C5C5757575858595A5B5B5C5D5E60616162626366666769696A6C - 6C6C7272727676767A79797C7C7C8080808383838686868A8A8A8D8D8D909090 - 9494949797979A9A9A9C9C9BA0A09FA3A3A3A6A6A6AAAAAAADADADA0A0A04949 - 491A1A1A1B1B1B1D1D1D1F1F1F20202021212123232324242425252525252525 - 2525252525252525252525252525252525242424242424242424232323232323 - 2121212121212121212121211F1F1F1F1F1F1F1F1F1D1D1D1C1C1C1B1B1B1919 - 1818191D0B1977021AC30019CD0019CC0018D20018D40017D10015CE0015CC00 - 15CA0014C80013C60013C50012C40012C30011C4000FC3000EC3000EC3000EC0 - 000FBB0110B60613AD101B9A1E26862B30703A3C594444494949424A49404646 - 434444434141413F3F3F3B3B3B3737373333332E2E2E2828282323231D1D1D17 - 17171010100A0A0A050505030303030303030303030303020202010101000000 - 000000000000000000000000000000333333989898A7A7A7A4A4A49F9F9F9B9B - 9B9898979494949090908C8C8C888888848484807F807D7D7D78787874747471 - 71716D6D6D6A69696565656262625D5D5D5B5A5B5757575353535050504D4D4D - 4A49494646474444444241423E3E3E3B3B3B3938393536363334333232322F2F - 2F2D2C2D2B2B2B2829282627272425242323232121212020201E1D1D1C1C1D1A - 1A1A1A1A1A181818171716161616141415141514141414131313121212111111 - 1111100F10100F0F0F0E0F0E0E0E0E0D0D0C0D0C0D0D0C0D0D0D0C0B0B0B0B0B - 0B0A0B0B0B0B0A0A0A0A0A0A0B0A0A0A0A0A090A0A0A0909090A090909090909 - 0909080909090809090908080808080708080708070807070707070708070707 - 0707070607070707070607060606060707070606060606060605060605050605 - 0506060505050505050505050505050505050505050405050505050404040505 - 0404040404040404040404030404040404030304040404030303030303030303 - 0303030303030303030303030303030302020203020302020202020203030202 - 0202020202020102010102020101010101010202010102010101010101010101 - 0101010101010101010101000000000000010000000101010000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3131313434343636363838383B3B3B3B3B3B2E2E2E2F2F2F2F2F2F2F2F2F2F2F - 2F3737373A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383837383837343434333333333333 - 3333333333333333333534343737373737373737373737363737363736363736 - 3637363637363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363635363635363535363535363535 - 3635353635353535353535353635343635353535363635363535353635343534 - 3435343535343435353435353435343335343335343434343334343334343334 - 33333433333433332F2F2F2D2C2C2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E303030 - 3333334040404747474949494B4B4B4E4E4E5050505353535353535555555757 - 575656555656575757575556565051514F4F4F50505150505050505053535358 - 5857575757595958585858585858595959595A5A5D5D5D5D5D5E5F5F5F626261 - 6464646565656161615D5D5E6060606363636665666968696B6B6C6F6F6F7373 - 737978787D7C7C8080808383838686868A8A8A8D8D8D9190919494949898989B - 9B9B9E9E9FA1A1A1A4A4A3A7A7A7AAABABAEAFAE9191913232321B1B1B1D1D1D - 1E1E1E2020202222222323232424242525252626262727272727272727272626 - 2627272726262626262626262625252524242424242424242423232323232321 - 21212121212121212121212020201F1F1F1E1E1E1D1D1D1B1B1B191919181816 - 1617220D18640319B80019CF0019CB0018CA0018C90017C70016C60016C60016 - C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA00 - 0FBA000EBA000DBB000BBD000BB9020EB20B15A21D238830346D4243524A4A45 - 4C4B424848444444444141413D3D3D3939393434342F2F2F2929292323231C1C - 1C17171710101008080804040403030303030303030302020201010100000000 - 00000000000000000000000000001C1C1B878787A8A8A8A3A4A4A0A0A09C9C9C - 9999989494949090908D8D8D8888888484847F7F7F7D7D7D7878787474747171 - 706D6D6D6969696565656262625E5D5E5A5A5A5656565353534F4F504D4D4D4A - 4A4A4646464443434040403D3D3E3B3B3B3939393535363333333031302F2F2F - 2D2D2D2A2A2A2727272626272323242323232121211F1E1F1D1E1E1C1B1B1A1A - 1A191A1917171717171716161614151414141413141312121211111010111110 - 1011100F100E0E0F0E0E0E0D0D0D0D0C0D0D0C0C0C0C0C0C0B0B0B0B0B0B0B0B - 0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A0909090909090909090908 - 0909090808090908080808080808080808080807070807080707070707070707 - 0707070707060607070607070606060606060606060606060605050606050606 - 0506050505060606050605060505050505050505050504050404040404040404 - 0404040404040404040404040304040304030404040303030303030303030303 - 0303030303030303020302030203020302020202020202030202020202020202 - 0102020102020202020201010102010202020202010101020101010101010101 - 0101010101010101000101000101010100010100000000010000000000000000 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303032323234 - 34343737373939393B3B3B3939392E2E2E2F2F2F2F2F2F2F2F2F2F2F2F393939 - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383738373733333333333333333333333333 - 3333333333363636373737373737373737373737373736373736373636373636 - 3736363736363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636363536363536353536353536353536 - 3535363435363535363535363535363536353535353636363535353534353534 - 3535343535343435343534333534343534343434333433343433333534343433 - 332F2F2F2D2D2D2D2D2D2D2E2E2D2D2E2F2F2F2E2E2E3030313A3B3A44454448 - 48484B4B4B4E4E4E5151515454545656565757575757575858584F4F4F474747 - 3F3F3F3737373839383A3A393B3B3B3C3B3B3D3D3D3F403F4040404142424646 - 464B4B4B5151515959585B5B5C5C5C5C5D5C5D5F5F5F60616163636366656568 - 68686A6A6A6A6A6A64646565666669686A6C6B6C6F6F6F717272767676797979 - 807F7F8383838686868A8A8A8D8D8D9191919494949898989B9B9BA0A0A0A3A2 - A3A6A6A6A8A8A8ABABABAFB0B07C7C7C2525251C1C1C1E1E1E20202022222223 - 2323252525262626272727282828282828292929282828282828282828282828 - 2727272727272626262626262525252424242424242424242323232323232121 - 212121212121212020201F1F1F1E1E1E1D1D1D1B1B1B191A1A18181816161316 - 1507101638001AC80019CE0019CB0018CA0018C90017C70016C60016C60016C5 - 0015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010 - B9000FB8000FB7000EB6000DB6000BB70009B9000AB50510A919208E30346E46 - 46524E4D454B4B444646454343433F3F3F3939393535352E2E2E282828212121 - 1B1B1B1414140C0C0C0606060303030303030303030202020101010000000000 - 000000000000000000000000000B0B0B6F6F6FA9A9A9A5A5A5A1A1A19C9C9C98 - 99999595959090908D8D8D8888888484847F807F7D7D7D787878747474717071 - 6C6C6C69696A6464646061615E5E5E5A5A5A5756575252534F4F504C4B4B4849 - 494545454342433F3F403C3C3C3A3A3A3838373535353233322F302F2E2E2E2C - 2C2C292A2A2626262625252323242222222121211F1F1F1E1E1D1B1C1B1A1A1B - 181818171717161516151415141514151414141313121212111111111111100F - 0F0F100F0F0E0E0E0E0E0D0D0D0D0C0D0C0D0D0C0D0C0C0B0C0B0B0B0B0B0B0A - 0B0A0A0A0B0A0A0B0A0A0A0A0A0A090A0A0A090A0A0909090909090909090909 - 0809090908090808080808080808080708080708080708070808070707070707 - 0707070706060706070706060606060606060606060606060605060506050505 - 0506060505050505050505050505050505050505050504050404040404050405 - 0404040404040404040304040304040303040403040403030303040303030303 - 0303030203020302030302030302020303020202020302020303020202020202 - 0102020102020201020102010101010102010101010102010101010101010101 - 0101000101000001010101010100010000010101010001000101000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303232323535353737 - 373939393B3B3B3635362F2F2F2F2F2F2F2F2F2F2F2F3030303A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383838373636363333333333333333333333333333333333 - 3337373737373737373737373737373737373737373637373637363637363637 - 3636373636363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363636353636353635353635353635353635 - 3436353535363536363635363635363636363535363636353535353535353536 - 3534353534353434353433353433353434353434343333343434302F2F2D2D2D - 2E2D2D2D2D2D2E2E2E2F2F2F2F2F303131323F3F3F4747464A4A4A4E4E4E5151 - 515353535555555959595A5A5A52525242424337363635353536363637373738 - 38383939393A3A3A3C3B3C3D3D3D3F3E3E404040414141434343444545464747 - 4948484A494A4F4F4F5858585D5D5D6060606161626464636767666969696C6C - 6C706F6F7171716D6C6D6B6B6B6F6E6F7171727575757878797B7B7C80808085 - 85858A89898D8D8D9191919494949898989B9B9BA0A0A0A3A2A3A7A7A7AAAAAA - AEAEADB0B0B06C6C6C1B1B1B1D1D1D1F1F1F2222222323232525252626262727 - 272828282929292929292929292929292A2A2A29292929292929292927272727 - 2727272727262626262626252525242424242424242424232323232323212121 - 2121212121212020201E1E1E1D1D1D1B1B1B1A1A1A17171716161615140C0F15 - 40001ACD001ACF0019CB0019CB0018CA0018C90017C70016C60016C60016C500 - 15C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9 - 000FB8000FB7000EB6000EB5000DB4000CB3000BB30008B60008B30811A52126 - 843C3E5F4C4C494E4E454848464343433F3F3F3939393434342D2D2D2525251F - 1F1F191919111111090909040404030303020202020202010101000000000000 - 0000000000000000000000000000005C5C5CA9A9A9A5A5A5A1A1A19D9D9D9898 - 989595959090908D8D8C8888888484847F7F7F7C7C7C77777774747470706F6C - 6C6C6869696463636161615C5D5D5959595556555253524F4F4F4B4B4B484848 - 4444444142413E3E3E3B3B3B3A3A3A3736373334333131312F2F2F2D2E2D2B2B - 2B2828292726272424252323232122212020201E1D1E1D1D1C1A1A1B1A191918 - 1818171717151616151414141514141413121212111111111111111110101010 - 0E0E0F0E0E0E0D0D0D0D0D0D0D0D0D0D0D0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B - 0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A09090909090A09090909090909090908 - 0908080808080808080808080808080808080807070707070707070707070706 - 0607070607070707060606060606070606060606060606050606060606060605 - 0605060505060505050505050404050504050404040404050505050405040404 - 0405040304040404040404040403040403030403030303030403030303030303 - 0203030303030303020303020203020302030303020202020202020202020202 - 0102020101010102010201020201020101010201010101010101010101010001 - 0101010101010001000000010000000001000100000000000001000100000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 30303030303030303030303030303030303030303333333535353737373A3A3A - 3C3C3C3333332F2F2F2F2F2F2F2F2F2F2F2F3231323A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838343434333333333333333333333333333333353434373737 - 3737373737373737373737373737373737373737363737363736363736363736 - 3637363636363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363635363635363535363535363535363435 - 3636363636353636353535363636363535363636353535353535353535353535 - 343535343534343434343434343434343533343132312D2E2D2E2D2E2D2D2D2D - 2D2D2F2F2F2F30303232314141414646464C4C4B4F4F4F535353565656585959 - 5B5B5B5151513C3C3C3434343433333434343636363737373737373939393A3A - 3A3C3B3C3C3B3C3E3D3E403F404040404343424545454646464747484949484B - 4B4B4D4D4E5051505353535C5C5C6362636666666969696B6C6B6E6F6E707070 - 7373737676767474747171727474747878787B7B7B7F7F7F8282838787878D8D - 8D9191919494949898989B9B9BA0A0A0A2A2A3A7A7A7AAAAAAAEAEAEB1B1B161 - 61611C1C1C1F1F1F2020202222222525252626262828282929292A2A2A2B2B2B - 2B2B2B2B2B2B2A2A2A2A2A2A2B2B2B2A2A2A2A2A2A2929292929292727272727 - 2727272726262626262625252524242424242424242423232323232322222221 - 21212020201F1F1F1D1D1D1B1B1B1A1A1A1818181515151513080B165C001BD6 - 001ACF001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015 - C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B900 - 0FB8000FB7000EB6000EB5000DB4000CB2000CB1000BB10009B10007B5010AAD - 161C9335376C4D4D4D4F4F464848464343433F3F3F3838383232322B2B2B2323 - 231C1C1C1515150D0D0D05050503030302020202020201010100000000000000 - 00000000000000000000000000004F4F4FA9A9A9A5A5A5A1A1A19D9D9D989898 - 9595959090908D8D8D8888888484847F7F7F7C7C7C7777777473746E6E6F6B6B - 6B6767676363636060605C5B5C5858585454555251514E4E4E4A4A4A47474744 - 44444241423E3F3E3B3B3B3939383636363233333031312F2F2F2D2D2D2A2A2A - 2827272625252324242222222121211F1F1F1E1E1E1C1C1C1A1A1A1A19191717 - 171616161415141515141415151313131212121111111111111010100F100F0F - 0E0E0D0D0D0D0D0D0D0D0D0D0D0D0B0C0B0B0C0C0B0B0B0B0B0B0B0B0B0B0A0A - 0B0B0A0A0A0A0A0A0A0A0A0A0A0A0909090A09090A0909090909090908080808 - 0808080808080808080708070807070807070808070707070707070707070707 - 0706070706070706070706060606060706060606060606050605060506050606 - 0505060506050505050505050505040504050405050505040504040505040404 - 0404040404040404030404040404040403030303040404040303030303030303 - 0303030302030303020202020203020203030302030202020202020202010202 - 0102010102020201020201010102010201010201010101010101020001010001 - 0101010101010101010101000000000000010001000101010000000001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 303030303030303030303030303030303333333636363838383A3A3A3C3C3C31 - 31312F2F2F2F2F2F2F2F2F2F2F2F3534343A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383833333333333333333333333333333333333336353537373737373737 - 3737373737373737373737373737373737373736373736373636373636373636 - 3736363636363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636363536363536353536353536363636363636 - 3636363636353636363635353536363636363535353535353534353534353535 - 3534343534343534333534343332322E2D2D2D2E2E2E2D2D2E2E2E2F2F2F3030 - 303434344243434848474B4B4C5050515555555958585A5B5A5656563D3D3D33 - 33333333333334343535343536353636363837373838383939393B3B3B3C3C3C - 3E3E3E3F3F3F4040404342434444444645454747474949494C4C4C4E4E4E5050 - 4F5352525555555656565A5A5A636363696A6A6C6C6C6F6F7072737276757579 - 79797C7C7C7B7B7B7777787B7B7B7E7E7E8282838585868A8A8A8E8E8E949494 - 9797979B9B9BA0A0A0A3A3A3A7A7A7AAAAAAAEAEAEAEAEAD5655551D1D1D1F1F - 1F2121212424242626262727272929292A2A2A2B2B2B2C2C2C2C2C2C2C2C2C2C - 2C2C2B2B2B2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929272727272727 - 2727272626262626262525252424242424242424242323232323232121212020 - 201F1F1F1E1E1E1B1B1B191919171717151515151308091879001CDD001ACE00 - 1ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C3 - 0015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000F - B8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000AB00007B200 - 07B013189735386C4D4D4D4E4E464848474242423C3C3C3636362E2E2E272727 - 1F1F1F1919191010100808080303030202020202020101010000000000000000 - 00000000000000000000000000414141A5A5A5A5A5A5A1A1A19D9D9D98999895 - 95959090908C8C8C888888848383807F807B7B7B7777777273726F6F6E6A6A6A - 6666666262625E5F5F5A5B5B5858585354534F504F4D4D4D4A494A4646464444 - 444140413D3D3D3B3A3B3838383635353232332F302F2E2E2E2C2C2C2A292A26 - 27272424252324232222222020201D1E1E1D1D1D1B1A1A1A1919181818171717 - 1516161514141515151314131212121111121111111010100F0F100E0F0E0F0E - 0E0D0D0D0D0D0D0D0D0D0D0D0D0B0C0B0B0B0C0B0B0B0B0B0B0B0A0B0A0B0A0A - 0A0A0A0A0A0A0A0A0A0A0A090A09090909090909090909090909080909080808 - 0808080708080808080808080808080708070807070707070707070707060707 - 0706070706070606060606060606060606060606060606060605060505060506 - 0605050505050505050505040505040505040504050404050404040405040404 - 0404040404040303040304040403030303030304030303030303030303030203 - 0302030303020302030203030303030302030202020202020302020202020202 - 0202020101020202010201010101010101010101010101020101010101010101 - 0001010001010100010001010100000101000100000001000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303434343636363838383A3A3A3D3D3D2E2E2E2F2F - 2F2F2F2F2F2F2F2F2F2F3636363A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373636 - 3333333333333333333333333333333333333737373737373737373737373737 - 3737373737373737373737373737373737373637373637363637363637363637 - 3636363636363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363636353636353635353636363736363636363636 - 3636353636363636363636353536363536363536353535353435353436343435 - 34343534343434342E2E2E2E2E2D2E2D2E2D2E2D2E2E2E313130343434444444 - 4949494D4C4D5151505657565B5B5A5C5C5C4A4A4B3535353333333333333434 - 343535353534353636363838383738383939393A3A3A3C3C3C3D3D3D3E3D3E40 - 40404242424444444545454747474A49494A4A4A4D4D4D4F4F4F525251545353 - 5756575858595B5B5C5E5E5E6464646D6D6D7172727574757878777A7A7A7F7F - 7F8181818181817D7E7E81818285858589898A8C8C8D9090919696969B9B9B9F - 9F9FA3A3A3A7A7A7AAAAAAAEAEAEAEAEAE5353531F1F1F202020222222242424 - 2727272828282A2A2A2B2B2B2D2D2D2D2D2D2E2E2E2D2D2D2D2D2D2D2D2D2C2C - 2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292929292927272727272727 - 27272626262626262525252424242424242424242323232222222121211F1F1F - 1E1E1E1C1C1C191919161616151513141311061994001CDA001BD0001ACE001A - CE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C300 - 15C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8 - 000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE0007 - B10007AF121896383A684F4F4A4D4D464646464040403A3A3A3232322B2B2B22 - 22221C1C1C1313130A0A0A040404020202020202010101000000000000000000 - 0000000000000000000000003E3E3EA6A6A6A5A5A5A1A1A19D9D9D9898989494 - 949090908C8C8C8787878283837E7F7E7A7A7A7676767272716E6E6D696A6A66 - 66666262625E5E5E5A5A5A575757535253504F4F4C4C4C494949454545434242 - 3F3F3F3C3C3C3A3A3A3736373434343231312F302F2D2D2E2B2B2B2929292726 - 272323242323232222211F1F1F1E1E1E1C1B1C1A1B1A19191917171817171715 - 15151514151515151413131312121111111111111010100F0E0F0E0E0E0D0D0E - 0D0E0D0D0D0D0D0D0C0C0C0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0A0A0A - 0A0A0A0A0A0A0A0A0A0909090909090909090909090808090908090908080808 - 0809080808080808070807080708070707070807070707070607070707060607 - 0707060706070606070606060706060606060606060506050605060606060505 - 0505050505050505050505050505050405050404040504040404040404040404 - 0404040403040403040403030303040404040303030303030403030303030303 - 0303030302020203020303030302030302020302020202020202020202020201 - 0101010201020101010201010101010201010101010101010101010101010001 - 0001010001010001010101010100000000000100000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 30303030303131313434343636363939393B3B3B3B3B3B2E2E2E2F2F2F2F2F2F - 2F2F2F2F2F2F3737373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383835353533333333 - 3333333333333333333333343434373737373737373737373737373737373737 - 3737373737373737373737373737373737363737363736363736363736363736 - 3636363636363636363636363636363636363636363636363636363636363636 - 3636363636363636363636363635363636373636373636373636363636363636 - 3635353636363535363536353535353535353535353535353535343534343534 - 343030302E2D2E2E2E2D2D2D2E2E2E2E3030303332334242414A49494D4D4D52 - 52525757575A5A5A5B5B5B3E3E3F313232333233333433333334353434353535 - 3636363838383837373838383939393C3C3C3C3C3C3F3E3E4040404141414243 - 43454544474647484948494A494C4C4C4E4E4E5151515352525655555858575B - 5A5B5D5D5E6061606363636767677170717776777979797C7C7C818181848484 - 8888888585858585868888888C8C8D8F8F909494949898989D9D9DA3A3A3A6A6 - A6AAAAAAAEAEAEAEAEAE5454541F1F1F2121212323232626262828282A2A2A2C - 2C2C2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2C2C2C - 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2929292929292727272727272727 - 272626262626262525252424242424242424242323232222222020201E1E1E1B - 1B1B1A1A1A171717151412131417031AAE001CD8001CD1001BD0001ACE001ACE - 001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015 - C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB800 - 0FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAD0009AD - 0006AF0007AC191E8D42425E5151474A4A474343433D3D3D3636362D2D2D2626 - 261E1E1E1515150D0D0D05050502020202020201010100000000000000000000 - 00000000000000000000003E3E3EA5A5A5A5A5A5A1A1A19C9C9C989899939393 - 8F8F8F8B8B8B8686868283827E7E7E7A7A7A7575757271716D6D6D6A69696564 - 646161615D5C5D5959595556555151514F4F4F4B4B4B4747474444444242423E - 3F3E3B3B3B3939393636353332323031312F2F2F2C2C2C2A2B2A272828262526 - 2423242222232121211E1E1E1D1D1D1B1B1B1A1B1A1818181717171616161515 - 15141414141313121212121111111111101010100F100F0F0F0D0E0E0D0D0D0D - 0D0D0D0D0D0B0B0C0B0C0C0B0B0B0B0B0B0B0B0B0B0A0B0B0A0B0A0A0A0B0A0A - 0A0A0A0A0A0A090A09090A090909090909090909090909090909080908090808 - 0808080808080807080708070807070807080707070707070707070706060707 - 0607070606060606060606070606060606060605050605060605050606050505 - 0505050605050505050405050504050505050504040505050504050404040304 - 0404040404040404040403030403030303030303030303030303030203030303 - 0203020202020203020302020302020202020202020202020202020202020202 - 0202010201010102010101010101010201020101010101010001010101010101 - 0001000100010101010001000001000000000000000000000000010100000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 303131313434343737373939393B3B3B3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F - 2F2F3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383434343333333333333333 - 3333333333333335353537373737373737373737373737373737373737373737 - 3737373737373737373737373737373736373736373636373636373636373636 - 3636363636363636363636363636363636363636363636363636363636363636 - 3636363636363636363637363637373637363637363637363636363636363636 - 36363535353636363636353636353635353535353635343534343332322E2E2E - 2E2E2E2D2E2E2E2F2F2F2E2F3132324242424848494D4D4E5252525656565B5B - 5B5C5B5C3A3A3A31313132323233333434333434343434343436353537373738 - 38383837373A3A3A3B3B3A3C3C3C3D3D3E3F3F3F404040424242444444454545 - 4848484A494A4B4C4B4E4E4E5050505353535555555757575A5B5A5D5D5C5F5F - 5F6262626565656969696B6B6B7576757C7B7C7E7F7F8283838686868A8A8A8E - 8E8E8A8B8B8C8C8C8F8F8F9494959797979C9B9CA0A0A0A6A6A6AAAAAAAEAEAE - B2B2B25757571F1F1F2121212424242727272929292B2B2B2D2D2D2E2E2E2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C - 2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929272727272727272727 - 2626262626262525252424242424242323232222222121211E1E1E1B1B1B1919 - 19181818161511121423011CC9001DD6001CD2001CD1001BD0001ACE001ACE00 - 1ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C2 - 0014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000F - B7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAC00 - 08AC0005AF050AA6292C7B4D4D4F4E4E47454545404040393939303030272727 - 2020201717170E0E0E0707070202020202020101010000000000000000000000 - 00000000000000000000414141A9A9A9A5A5A5A1A1A19C9C9C9898979393938E - 8E8E8B8B8B8585858182827D7D7D7878787474747070706C6C6C676767646363 - 6060605B5B5B5858585455545051504D4D4D4A4A4A4747464444444041403E3E - 3D3A3A3A3838383535353332333030302E2D2E2C2C2C29292927272725252423 - 23232221211F1F1F1E1E1E1C1C1C1B1B1B19191A171817161616151515151515 - 1515151313121111121112121111111010100E0E0F0F0F0E0E0D0D0D0D0D0D0D - 0D0D0D0D0B0C0C0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0B0B0A0A0A0A0A0A - 0A0A0A090A0A0A09090909090909090909080908090809090808080808080808 - 0808080807080808080808080707070707070707070707070607070607070606 - 0607060706070707060606060606060605050606050606060605050505050505 - 0506050505050505040505040504040505050404040404050404040404040404 - 0403040403040304030404040403030304030303030303030303030303030303 - 0302030303030302030202030202020203020203020202020202020102020202 - 0102020202020202010101010202010201010101010101010101010101010101 - 0001010100010001010100000100000000000000010000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030323232 - 3535353737373939393B3B3B3737372E2E2E2F2F2F2F2F2F2F2F2F2F2F303A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838333333333333333333333333333333 - 3333333636363837373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373637373637363637363637363637363636 - 3636363636363636363636363636363636363636363636363636363636363636 - 3636363636363737373737373737363736363736363636363636363636363636 - 363636363636363636353636353535353535353435342E2F2E2E2E2E2E2E2E2E - 2E2E2F2F2F3030303D3D3D4847474D4D4C5252525756565C5B5B5B5B5B3A3A3A - 3130313132323332333333333333333434343536363636363838383838383938 - 39393A393C3C3C3D3C3D3E3F3E4040404141414343444545454647474949494A - 4B4A4E4D4E4E4F4F5151515353535757575859595B5C5C5F5F5F616162646464 - 6768676B6B6B6E6E6E7272727A7A7A8182818584848989898C8C8D9090909494 - 949090919393949697979B9B9C9F9E9FA3A3A3A8A8A8ADADADB2B2B263636320 - 20202222222525252828282A2A2A2C2C2C2E2E2E2F2F2F2F2F2F313131313131 - 3131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C - 2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292929292927272727272727272726 - 26262626262525252424242424242323232121211F1F1F1C1C1C191919171717 - 16150F0F163C001ED2001DD6001DD3001CD2001CD1001BD0001ACE001ACE001A - CD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C200 - 14C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7 - 000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009 - AB0007AC0003AF1216963E40625150474848464242423A3A3A3232322A2A2A22 - 2222181818101010070707020202010101010101000000000000000000000000 - 0000000000000000004E4E4EA9A9A9A5A5A5A0A0A09B9B9B9797979393938D8D - 8D8A898A8585858081817C7C7C7777777474746F6E6F6B6B6B6667666262625E - 5E5E5B5B5B5757575253524F4F4F4C4C4D4949494545454342433F3E3F3C3B3B - 3939393737373434343031302F2F2F2D2D2D2A2A2A2828282625262424242323 - 232121211E1E1E1D1D1D1B1A1B1B1A1B18181818171716171615151515151414 - 14141213131112111111111010100F0F0F0F0F0F0E0D0D0D0D0D0D0D0D0D0D0D - 0C0C0C0C0C0B0B0B0C0B0B0B0B0B0B0B0B0B0A0B0B0A0A0A0A0A0A0A0A0A0A0A - 090A0A0A09090A09090909090909090809090908090909080908080908080808 - 0808080808070808080808070707070708070707070707070707070706070707 - 0707060606070606070606060606060605060505060606060505050606050505 - 0505050505050505050504050505050505050404050404040404040404040403 - 0403040304030304030404030303030303040303030303030303030303030302 - 0302030302030202020302030302020202020202020202020202020202020202 - 0202020101010102010101020101020101010101010101010101010101010101 - 0001010101010001010100000000000100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303032323235353537 - 37373A3A3A3C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F3232323A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383838383838383838383838383838383838383838 - 3838383838383838383837373733323233333333333333333333333333333338 - 3737383737383737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737363737363736363736363736363736363636 - 3636363636363636363636363636363636363636363636363636363636363637 - 3636373737373737373737373736373636363636363636363636363636363535 - 3535363635353635353635343635353131322E2E2E2F2E2E2E2E2E2F2F2F3030 - 303635364847474C4C4C5151515757575B5C5C5C5B5B39393931313131313132 - 32323332323433333434343534353635353838383838383838383A3A3A3B3C3C - 3C3C3C3E3E3D403F404140414344434545454646474848484A4A494D4D4D4F4F - 4F5252515353535656575958585B5B5B5E5E5E6161606464636766666969696D - 6E6D7070707474747777778080808787878A8B8A8F8F8F939393979797989898 - 9797979A9A9A9E9E9EA3A3A3A6A6A7ABABABB2B2B27070702020202323232626 - 262828282B2B2B2D2D2D2F2F2F30303031313132323232323232323232323232 - 32323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C - 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2929292929292727272727272727272626 - 262626262525252424242323232222222020201D1D1D1A1A1A17171717150B0D - 1858001EDB001ED6001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD - 0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C20014 - C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB700 - 0EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB - 0008AA0004AE0208A72A2D794F4F4B4B4B464343433C3C3C3434342B2B2B2323 - 2319191911111108080802020201010101010100000000000000000000000000 - 00000000000000005D5D5DA9A9A9A4A4A49F9F9F9B9B9B9696969191918D8D8D - 888888848484807F807B7B7B7676767272726E6E6E6A6A6A6565666161615D5D - 5D5959595656565152524E4E4E4B4C4B4747474444444242423F3E3E3B3C3B39 - 3939363636333233302F2F2E2E2E2C2D2C2A2A2A272727242525232323222121 - 2020211E1E1E1C1C1C1B1A1B1A191A1817181717171516161515151414141312 - 131112111111121010111010100F0F0F0E0D0E0D0D0D0D0D0D0D0D0D0C0C0C0C - 0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A - 0A0909090A090909090909090909090808090908090808080808080808080808 - 0808080808080808070708070707080707070706070706070707060606070707 - 0707060607060706060606060606060606060605050505060505050505050505 - 0505050505050405050405040504050405040504040404040404040404040403 - 0404040304030404030304040303030404030304030303030303030303030302 - 0202030203020303020202020202020202020202020202020202010102010102 - 0102020101020102010101010101020101010101010101010101010101000101 - 0100000000000001000000000000000100010000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303333333535353737373A3A - 3A3C3C3C3333332F2F2F2F2F2F2F2F2F2F2F2F3232323A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383635353332323332323333333333333333333434343837373837 - 3738373738373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373736373736373636373636373636373636363636 - 3636363636363636363636363636363636363636363636363636363737373737 - 3737373737373737373737373636363636363636363636363636353636363635 - 36363536353636353434342F2F2E2F2E2F2E2F2E2E2E2E2F2F2F323232434343 - 4B4B4B504F505656565A5A5B5D5E5E3D3C3C3131313131313232323233333434 - 343434343435343636353736363737373839393939393A3A3A3C3C3C3D3D3D3F - 3F3F4040414242414343444545454848484A4A4A4C4C4C4E4E4E505050535252 - 5454545758575B5A5A5D5D5E60606063636265666669696A6C6C6D6F706F7273 - 727878777A7A7A7E7E7E8686868D8D8D9191919595959A99999D9D9D9D9D9D9E - 9E9EA1A1A1A6A5A6AAABABAFAEAF7F7F7F2222222323232626262929292C2C2C - 2E2E2E3030303131313232323434343333333333333333333333333232323232 - 323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C - 2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929272727272727272727262626 - 2626262525252323232222222020201E1E1E1B1B1B1818181715090B1A77001F - E4001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD00 - 19CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C20014C1 - 0014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000E - B6000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB00 - 09AA0006AB0003AD191D8D4648554D4D454545443D3D3D3535352C2C2C232323 - 1B1B1B1212120909090202020101010101010000000000000000000000000000 - 00000000010101707070A8A8A8A3A4A49E9E9E9A99999696969091908C8C8B87 - 87878382837E7E7E7A7A7A7474747071706C6C6C6869686464636060605C5C5C - 5858585554555050514D4D4D4A4A4A4646464344444040403D3D3C3A3A3A3737 - 373535353132323030302E2E2D2A2A2A2829282626252424242223232222221E - 1E1E1D1D1D1B1B1B1A1A1A191918181717161616151515151515141414131313 - 1111121112111010100F0F0F0F0F0F0E0D0E0D0D0D0D0D0D0C0C0C0C0C0C0C0C - 0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0A0A0A0A0A0A090A0A0A0A0A0A - 0A09090909090909090909090909090808080809090808080808080808070808 - 0808080708070808070807070807070707070607060707060606060706070707 - 0706060706060606060605060605060605050506050506050605050606050505 - 0505050504050504050404050405050404050404040404040404040404040304 - 0404040404030303040403030303030303030303030303030303030203020203 - 0202030302020202020202030302020202020202020202020201020102020202 - 0202010201010201010101010101010101010101010101010101010001010100 - 0101000101010001000000000001010100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 30303030303030303030303030303030303333333636363838383A3A3A3C3C3C - 3232322F2F2F2F2F2F2F2F2F2F2F2F3534353A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838353434333232333232333232333333333333353535383737383737383737 - 3837373837373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373637373637363637363637363637363636363636 - 3636363636363636363636363636363636363636363636373737373737373737 - 3737373737373736363636363636363636363636363636363536363636353536 - 353636353231312E2E2E2E2E2E2E2F2E2F2F2F3030303C3C3C4949494D4E4E54 - 54545A5A595E5E5E454546303131323231313231323232333334343434343434 - 3534353636363736363938393838393A3A3B3D3C3C3C3C3D3E3E3E4040404141 - 414443444545454747464848484A4A4B4D4D4D4F4F4F52515253545456565758 - 59585C5C5C6060606262626564656868676C6C6C6F6E6F737273757576797979 - 7C7C7C8080808686858E8F8F9493949898989C9C9CA1A1A0A4A4A4A1A1A1A5A6 - A6AAA9AAADAEAE9393932929292323232727272929292C2C2C2F2F2F30303032 - 3232333333343434343434343434343434333333333333333333323232323232 - 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C - 2C2B2B2B2B2B2B2A2A2A2A2A2A29292929292927272727272727272726262625 - 25252424242222222020201E1E1E1B1B1B191918171610071C940020E3001FD7 - 001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD0019 - CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C20014C100 - 14C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6 - 000EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009 - AA0007AA0003AE0B109D3C3D614F4E454545443E3E3E3535352D2D2D2424241B - 1B1B121212090909020202010101010101000000000000000000000000000000 - 0000000A0A0A888888A7A7A7A3A3A39E9E9E9999989494948F8F8F8B8B8B8686 - 868182817D7D7D7878787474746F6E6E6B6B6B6767676362625E5E5E5B5B5B57 - 56575252534F4F4F4C4C4D4949484444444242413F3F3F3B3C3C393939363636 - 3333332F2F302E2E2E2D2D2C2A2A2B2827272525252323232121222020211E1F - 1E1C1C1C1B1B1B19191917181817171616151516151514141413121212121212 - 12121110101011100F0F0F0E0E0E0D0D0E0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C - 1211111312131313131313121312121212131212121212121112121212111111 - 120E0E0F0D0D0D0D0D0D0D0D0C0A0A0B09080908080809080808080808080807 - 0808080808070807070807070708070707070707070706060707060707060706 - 0606070606060606060606060605060606050605050506050506050505050505 - 0505050505050505050505050404050405050404040504040404030404030404 - 0304040403040403040403040403030303030303030303030303030303030203 - 0202020303020202020202020202020202020101020102020202020202020201 - 0201020101020101010101020101010201010101010101010101010100010001 - 0101000000000001010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 303030303030303030303030303434343636363838383A3A3A3C3C3C3030302F - 2F2F2F2F2F2F2F2F2F2F2F3534353A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383434 - 3433323233323233323233323233333336363638383738373738373738373738 - 3737383737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737363737363736363736363736363736363636363636 - 3636363636363636363636363636363637373737373737373737373737373737 - 3737363636363636363636363636363636363636353636363535353635353535 - 2E2F2F2F2F2F2E2E2F2E2E2E2F302F3333334545454C4C4C5151515757575C5D - 5D53535230313030303132323132313232323334343434343434343436363635 - 3536383837383939393A393A3A3A3C3D3C3D3D3D3F3F3F414141424242444443 - 4646464948494A4A4A4D4D4D4E4F4E5151515353535656565858585B5B5C5E5E - 5E6161616464646767676A6A6A6E6E6E7171707474757878787C7C7D807F7F84 - 84848787878D8D8D969696999A999E9E9EA3A3A3A7A7A7A9A9A9A8A8A8ADADAD - A3A3A43737372424242727272929292D2D2D2E2E2E3131313333333434343535 - 3535353535353535353535353534343433333333333333333332323232323230 - 30303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C - 2B2B2B2B2B2B2A2A2A2A2A2A2929292929292727272727272727272626262525 - 252323232121211F1F1F1D1D1D1A1A18171716061DA40020E7001FD8001FD700 - 1ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD0019CB - 0019CB0018CA0018C90017C70016C60016C60016C50015C30015C20014C10014 - C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB600 - 0EB5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA - 0008A90004AC0509A532346C4E4E454646443E3E3E3535352D2D2D2424241B1B - 1B12121208080802020201010101010100000000000000000000000000000000 - 00001A1A1A9B9B9BA6A6A6A1A1A19C9C9C9898979393938D8D8D898988858585 - 80807F7B7B7B7777777272726E6E6E6969696566666161615D5D5D5858585656 - 565152514E4E4E4B4B4A4747474444444141403E3E3E3B3B3A38393935353532 - 3232302F302E2E2E2A2A2A2829282626262424242323222222221E1F1F1D1D1E - 1B1B1B1A1A1A1818171818181616161516151515151313131212121212111010 - 101110100F0F0F0E0E0E0E0E0E0D0E0D0E0D0D0C0C0C0C0C0C0F0F0F191A1919 - 191A1A1A1A1A1A1A1A1A1A1B1B1A1A1A1A1B1A1A1A191A1A1A1A1A19191A1A19 - 191A191919191919191918181919191819191615151414141313131111110D0C - 0D0C0B0C08070707070807080707070707070707060707060606070607060706 - 0606060607060606060506060506060505050505060605050505050505050505 - 0505050505050404040404040405040405040404040404040304040404030403 - 0303030403030304030303030303040303030303030303020303020202030303 - 0303020202020202020202020202020202020201020202010102020201010201 - 0101010101020102020201010201010101010101010101010101010101010001 - 0000010001010100000000000000010001000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303434343636363838383A3A3A3D3D3D2E2E2E2F2F2F2F2F - 2F2F2F2F2F2F2F3837373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838323232323232 - 3332323332323332323332323737373838373838373837373837373837373837 - 3738373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373736373736373636373636373636373636363636363636 - 3636363636363636363636363737373837373737373737373737373737373636 - 363636363636363636363636363636363636363636363535363232332F2F2F2F - 2E2E2F2F2E2F30303030303E3E3F4949494F504F5555555B5B5B5E5E5D373737 - 3130303231323232323332323333333434343434343536353536363736373939 - 383939393B3A3B3B3B3C3C3C3C3E3F3E4040404141414344444545454747464A - 494A4B4A4B4D4D4E504F505252525454545757575A5A5A5D5D5D606060636363 - 6565666969696C6C6C6F6F6F7372737677767A7B7A7E7E7F8182818686868A8A - 8A8D8E8D9696969D9C9DA1A1A0A5A5A5AAAAAAAFAEAEACACACADADAD4D4D4D24 - 24242626262929292D2D2D303030323232343434353535363636363636363636 - 3636363636363535353535353434343333333333333333333232323232323030 - 303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B - 2B2B2B2B2B2A2A2A2A2A2A292929292929272727272727272727252525242424 - 2222222020201E1E1E1B1B1B191814131733041EB10020E5001FD8001FD7001E - D6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD0019CB00 - 19CB0018CA0018C90017C70016C60016C60016C50015C30015C20014C10014C0 - 0013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000E - B5000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA00 - 08A90005AB0005AA292C764D4C474646433E3E3E3535352D2D2D2424241B1B1B - 1111110808080202020101010101010000000000000000000000000000000000 - 00343434A6A6A6A5A5A5A0A0A09B9B9B9696969191918D8D8D8888888282827F - 7F7E7A7A7A7574747171716C6C6C6768686363635F5F5F5C5C5B585858545454 - 50504F4D4D4D4A49494545454242423F3F3F3B3C3B3939393736363433333131 - 312E2E2E2C2C2C2B2A2A2727272526252323232222221F20201E1F1E1C1C1C1B - 1B1B191919181817161617161516161515141415131313121211121111101010 - 0F0F0F0F0F0F0E0E0E0D0E0D0E0E0D0C0D0C0C0C0C141414191919191A1A1A1A - 1A1A1A1A1B1B1B1B1B1B1B1B1C1B1B1B1B1B1B1B1B1B1A1B1B1A1A1B1A1B1A1A - 1A1A1A1A1A1A1A1A19191A1A1A1919191A1A1919191919191919191919191918 - 1918191616161415141010100C0C0C0909090707060707070606070607060607 - 0607060706060606050606060605050605050505050505050505050505050505 - 0505050505040405040405050505040504040405040404040404040404040303 - 0303040303040403030303030303030303030303020302020303030203030302 - 0202020203020202030202020202020202020201020202020202010102010101 - 0102010201010101010101010201010101010101010101010100010001010101 - 0001010000010100000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 30303030303434343636363939393B3B3B3D3D3D2E2E2E2F2F2F2F2F2F2F2F2F - 2F2F2F3837373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383838383838383837373732323232323232323233 - 3232333232333232383838383838383837383837383737383737383737383737 - 3837373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373637373637363637363637363637363636363636363636 - 3636363636373636383737383737383737373737373737373737363636363636 - 3636363636363636363636363636363635363536362F30302F2F2F2F2F2F2E2E - 2F30302F3332334646464C4B4C5252525859585D5D5D48484731313131313032 - 3232323131333333333333343434343434353535363636383837393939393A3A - 3B3B3A3D3C3D3D3D3D3F403F4141414342434444444646464949494A4A4A4C4D - 4D4F4F4E5151515353535656565959595C5C5C5D5D5E6161616565656868686A - 6A6B6F6F6F7272727676767979797C7D7D8081818586858989898D8D8D919191 - 9696969F9F9FA4A4A3A8A8A8ACADACB1B1B1B4B4B46D6D6D2323232727272929 - 292D2D2D30303033333335353536363637373737373737373737373737373736 - 3636363636353535353535343434333333333333333333323232323232303030 - 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B - 2B2B2B2B2A2A2A2A2A2A29292929292928282827272726262625252523232321 - 21211E1E1E1C1C1C1A191A19170F14161E071C9C0020E4001FD9001FD7001ED6 - 001ED5001DD4001DD3001CD2001CD1001BD0001ACF001AD0001AD00019D30019 - CE0018C90018C90017C70016C60016C60016C50015C30015C20014C10014C000 - 13BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5 - 000DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0008 - A90006AA0004AC22257E4B4B464646433D3D3E3535352C2C2C2323231A1A1A10 - 1010070707020202020202010101000000000000000000000000000000000000 - 595959A9A9A9A4A4A39E9E9E9999999595959190908B8B8B8686868282827D7D - 7D7978787474746F6F6F6A6A6A6767676262625F5F5F5959595655565352534E - 4E4E4A4B4B4747474444444141413D3E3D3B3A3A393838353635323232303030 - 2E2E2E2B2B2A2929282626272424242323232120211E1F1F1D1E1E1B1B1B1A1B - 1A181818171717161616151615141414131313121212121212111111100F0F0F - 0F0F0E0E0E0E0E0E0E0D0D0C0C0C0E0D0D1818181A1A1A1A1A1A1A1B1B1B1B1B - 1C1C1C1C1C1C1B1C1C1C1B1C1C1B1B1B1B1B1B1B1B1A1A1B1B1A1A1A1A1A1A1A - 1A1A1A1A1A1A1A1A1A191A1A191A191919191A19191919191919191919191818 - 19181919191818191818181918181818181414141011110E0D0D070606070706 - 0606060606060606050606060606050605050505060505050505060505050505 - 0505050505050505050504050405040504040404040404030403040404040304 - 0403030403040403030403040303030303030203030302030303030303020303 - 0202020202020202020202030202020202020202020202020102020202010202 - 0102010101010101010201010101010101010101010001000101010100010101 - 0100000001010000000000000000000100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303131 - 313434343737373939393B3B3B3939392E2E2E2F2F2F2F2F2F2F2F2F2F2F2F39 - 39393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383737363232323232323232323232323332 - 3234333338383838383838383838383738383738373738373738373738373738 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373737363737363736363736363736363736363636363636363636 - 3637373738383738373738373738373737373737363636363636363636363636 - 36363636363636363636363636363535352F2F2F2F2F2E2F2E2E2F3030313031 - 3B3B3C4848494E4E4E5655555B5A5A5C5C5B3434343131313131303131313231 - 323233333535353434343435343637363737373939393939393B3B3B3B3C3C3D - 3C3C3F3E3F4040414142414544454545454747474A4A4A4B4B4B4D4E4D4F5050 - 5353535554555757585B5A5A5D5D5D6060606263636767676A6A6A6D6D6D7071 - 707373737878787C7C7C8080808384848787878B8C8B8F8F8F9493939898989F - 9F9FA6A6A6ABABABAFAFAFB4B4B49494942727272626262929292D2D2D303030 - 3333333535353737373838383838383838383838383838383838383636363636 - 3636363635353535353534343433333333333333333332323232323230303030 - 30303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B - 2B2B2B2A2A2A2A2A2A2929292929292727272727272525252424242222222020 - 201D1D1D1B1B1B191A1A181710161513081C950020E5001FD9001FD7001ED600 - 1ED5001DD5001DD6001CD7001CDB001CDB001ACF0119C20417A10119BD0019CF - 0018C90018C90017C70016C60016C60016C50015C30015C20014C10014C00013 - BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB500 - 0DB4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007A9 - 0006AA0003AC21257D4B4A454544413C3C3D3434342B2B2B2222221919190F0F - 0F06060602020202020201010100000000000000000000000000000005050582 - 8282A8A7A7A2A1A29D9D9D9999999393938F8E8E8989898484847F807F7B7B7B - 7677777272726D6D6D6A696A6363646060605D5C5C58585855555550504F4D4D - 4D4A4A4A4545464343433F3F3F3C3C3C3939393636363333333131312E2E2E2C - 2C2D2A2A2B2728282525262323232222222020201F1F1E1D1D1C1B1C1B191919 - 1818181516151615151615161313131212121212121111111110100F0F0F0E0E - 0E0E0E0E0E0E0D0D0E0E1111111919191A1A1A1B1A1A1B1C1C1C1C1C1C1C1C1D - 1D1D1C1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1C1C1C1B1C1B1B1B1B1B - 1B1B1B1B1B1B1B1B1A1A1B1B1B1A1B1A1B1A1A1A1A1A1A1A1A1A1A19191A1918 - 19181819191919191A191919191A1A1A1B1B1B2020200A0B0B07060607070606 - 0606060606060606050605050605050505060605050505050505050505050505 - 0505050405050504040404040404050404040404040404040404030404030304 - 0404030303040404030403030303030303030303030202020303020302020203 - 0202020303020202020202020202020202020202010202020202020101010101 - 0202010101010101010101010101010101010100000100010001010100010000 - 0101000100010100010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030313131353535 - 3737373939393B3B3B3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3B3A3A3B3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838363535323232323232323232323232323232343434 - 3838383838383838383838383838373838373837373837373837373837373837 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373736373736373636373636373636373636363636363636373737 - 3838383838373837373837373837373636363636363636363636363636363636 - 363636363636363636363333332F2F2F2F2E2F2F2F2F2F302F3031304443434B - 4A4B5151515757575D5D5D4A4A4A313131313131323232323231333333333434 - 3535343534353635363736363839393939393939393B3B3B3D3D3C3E3E3E3F3F - 404141414242434445454647464949494A4A4A4D4D4D4F4F4F52525254545457 - 57575A595A5C5C5C605F5F6262626565656768686C6C6C6F6F6F737373777676 - 7A7A7A7E7E7E8282828685868A8B8A8F8E8F9494939897979B9B9BA0A0A0A8A8 - A8AEAEADB2B2B2AEAEAE3A3A3A2626262929292D2D2D30303034343435353537 - 37373838383A3A3A393939393939393939383838383838383838363636363636 - 3636363535353535353434343333333333333333333232323232323030303030 - 303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B - 2B2B2A2A2A2A2A2A2929292929292727272626262525252424242222221F1F1F - 1D1D1D1B1B1B191919181712161515081C950020E4001FDD001FE0001FE3001E - DA011DCE031BB60619910916690C13440F11221010090A1352001AD10019CC00 - 18C90018C90017C70016C60016C60016C50015C30015C20014C10014C00013BF - 0013BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000D - B4000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007A900 - 06AA0003AC20247C4A49444443413C3C3C3333332A2A2A2121211717170D0D0D - 0404040202020202020101010000000000000000000000000000001B1B1BA0A0 - A0A6A5A5A1A1A19B9B9B9696969191918D8D8D8888888383837E7E7E7A7A7A74 - 74757070706B6B6B6767666363635E5F5E5A5A5A5656565353534F4F4F4C4C4C - 4747474445454242423E3E3E3B3B3A3839393536363232333030302E2E2E2B2B - 2B2928292626262424242323232121211F1E1E1D1C1D1C1B1C1A1A1A18181817 - 17171616161616161515151313131212121212121110110F100F0F0F0F0F0E0E - 0E0E0E0D0E0D1818171A19191A1B1A1B1B1B1D1C1D1A1A1A1414151515161515 - 161515151515151515151514151818181818181718181718171B1A1A1B1B1B1B - 1B1B1A1B1B1B1B1B1A1B1A1B1B1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A1A1A19 - 1919191A1A191A1A1A1B1B1B2020202626261211110607070607060606060606 - 0606060606060606050606060605060505060506050505050505050505050505 - 0505040505050404050404040404040404040404040404040404040404040304 - 0404030303030303030303030303030303030203030303030303030203030302 - 0202020202020202020302010202020202020202010101010102020202020202 - 0101010101010101010102010101010101010100000100000100000001010000 - 0001010000010000010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303031313135353537373739 - 39393B3B3B3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3B3A3A3B3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383835353532323232323232323232323232323235353538383838 - 3838383838383838383838383837383837383737383737383737383737383737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373637373637363637363637363637363636363638383838383838 - 3838383837383737373737363636363636363636363636363636363636363636 - 3636363636363130312F2F2F2F2F2F2F2F2F3030303435354747474D4D4D5453 - 545A5A5A5E5E5E37373731313231313132323232323233333334343434353434 - 353536373637363638383839393A3A3A3B3C3C3C3D3D3D3F3F3E404040424141 - 4443444645454748484A49494B4B4B4E4E4E4F4F505253525455545857585A5A - 5A5D5D5E6060606464646767676A6A6A6E6E6E7272727474747878797D7D7D80 - 80808585858989898D8C8D9090919695969999999E9F9EA2A2A2A9A9A9B0B0B0 - B5B4B56464642626262929292C2C2C3030303232323636363838383939393939 - 393A3A3A3A3A3A3A3A3A3A3A3A38383838383838383838383836363636363636 - 3636353535353535343434333333333333333333323232323232303030303030 - 3030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B - 2B2A2A2A2A2A2A2929292828282727272626262525252323232121211F1F1F1C - 1C1C1B1B1B191919181712161616071D9D021FCE061CA1091A7D0D1755101430 - 12131913120E13110512100910100C10100D100F0905168E001AD60019CA0018 - CA0018C90017C70016C60016C60016C50015C30015C20014C10014C00013BF00 - 13BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4 - 000CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007A90006 - AA0003AC20247C49484242424039393A3131312828281F1F1F1515150B0B0B04 - 04040202020202020101010000000000000000000000000000004A4A4AA9A9A9 - A4A4A49E9E9E99999A959595908F908B8B8B8585858181817C7C7C7777777272 - 726F6E6E6A6A6A6565656161615C5D5D5858595555565151514D4D4D49494946 - 46464343433F3F403B3C3C3939393637363433343030302E2E2E2C2C2C292A2A - 282727252425232323222222201F201E1D1E1C1C1B1B1A1A1818181818181616 - 1616161514141413141312121212121211111110100F100F0F0F0E0E0E0E0E10 - 10101A19191A1A1A1C1B1C1C1C1C1D1D1C0F0F100D0D0D0D0D0D0D0D0D0D0D0D - 0D0C0D0C0D0D0D0D0C0C0C0C0C0C0C0C0C0B0C0B0B0B0B0B0C0B0B0B0B0B0F0F - 0F0E0F0F1212131313131718171818181A1A1A1A1A1A1A1A1A19191A191A191A - 1B1B1B1B1C1F1F1F2424242929291B1B1B070707060606060606060606060606 - 0606060606050606050505060605060605050505050505050505050504050505 - 0505050505040404040404040404040404040404040404040404040404040304 - 0403030303030403030303030303030303020303030303020203030302030202 - 0302020202020202020202020102020201020102010101020202010202020102 - 0102010102010101010101010101010101010101010001010100010000000001 - 0000000000010000000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303232323535353737373939393B3B - 3B3838382E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3B3A3A3B3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383434343232323232323232323232323232323635353838383838383838 - 3838383838383838383838383738383738373738373738373738373738373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737363737363736363736363736363736363838383838383838383838 - 3838383737373736363636363636363636363636363636363636363636363636 - 36362F2F2F2F2F2F2F2F2F2F2F2F3131313D3C3C4A4A4A4F4F4E5555555B5B5B - 5253533132313132323231313232323232323333333535353434343636353736 - 373738373A39393A3A393B3B3B3D3D3D3D3D3D40404041414143434345444447 - 46464849494B4A4B4D4D4D504F505252525453545757575A5A5A5C5C5C5F5F5F - 6363626565656969696C6C6C6F6F6F7373737677777B7C7B7F7E7E8382828788 - 878B8B8B8F8F8F9493949999999C9C9CA1A2A1A6A7A6ABABABB3B3B391919127 - 27272929292C2C2C3030303333333636363737373A3A3A3B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3A3A3A3A3A3A3838383838383838383838383636363636363636 - 3635353535353534343433333333333333333332323232323230303030303030 - 30302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B - 2A2A2A2A2A2A2929292828282626262626262424242323232121211F1F1F1D1D - 1D1C1C1C1A1A1A18181416171D15172316151417150A16140B15140F15141215 - 14131313131212121111111111111110090E112A0119C30019CF0019CA0018CA - 0018C90017C70016C60016C60016C50015C30015C20014C10014C00013BF0013 - BE0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB400 - 0CB2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007A90006AA - 0004AB26297348474040403F3838382F2F2F2626261D1D1D1313130909090303 - 030202020202020101010000000000000000000000000101017F7F7FA7A7A7A2 - A2A29D9D9D9798979393938E8D8D8888888484837F7F7F7A7A7A757575707070 - 6C6C6C6767676363635F5F5F5A5B5A5757575353534F4F4F4B4C4C4848484544 - 444141413E3E3E3B3B3B3839393535363333322F2F2F2E2E2E2B2B2B29292926 - 27272424242222222121211F1F1F1D1D1D1C1B1B1A1919181818171717161616 - 161616131414121312121212111111111111100F100F0E0E0E0E0E1616161919 - 1A1B1A1B1B1C1C1D1E1D1A191A0E0D0D0E0D0E0E0D0D0D0D0D0D0D0D0D0D0C0C - 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0B0B0C0C0B0B0B0B0B0C0B0B0B0B0B0B0B0B - 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0D0D0D1010111414131716171A1B1B1E1E - 1E2223232827272D2D2D23232307070606070707070707060706060606060706 - 0606050606050606050606050606050605050505050505050505050505050504 - 0405050504050404040404040504050404040303040404040303040404030403 - 0403030404030303030303030303030303020303030203020302020203020203 - 0303020202020202020202020202020102010202010102010202020201010102 - 0101010102010101010101000101010101010101000101010001000000010100 - 0101000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 30303030303030303030303030303232323535353737373939393B3B3B363536 - 2F2F2F2F2F2F2F2F2F2F2F2F3232323B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383839383839383839383838383838383838383838383838383834 - 3434323232323232323232323232323232373737383838383838383838383838 - 3838383838383838383838373838373837373837373837373837373837373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373736373736373636373636373737383838383838383838383838383838 - 3737373636363636363636363636363636363636363636363636363434342F2F - 2F2F2F2F2F2F2F3030303131314141424B4B4B5050505757575D5D5C41424231 - 3131323131323232323332333334343434353535343535363635373737393938 - 393A3A3A3A3A3B3C3B3D3D3D3E3F3E4040404242424444444546464746474A49 - 494B4B4B4E4E4E5050505353535555555858585B5B5A5D5E5E61616164646467 - 68686B6A6B6E6E6E7272727575757879797D7D7D8181818585858A8A8A8E8E8E - 9292929596969B9B9AA0A09FA5A5A5A9A8A9ADADAEB0B0B04242422929292C2C - 2C2F2F2F3333333636363838383A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3B3B3B3B - 3B3B3B3B3B3A3A3A3A3A3A383838383838383838383838363636363636363636 - 3535353535353434343333333333333333333232323232323030303030303030 - 302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A - 2A2A2A2A2A2929292828282626262626262424242323232121211F1F1F1D1D1D - 1C1C1C1B1B1B1A19171919151817161817171818181717171616161616161515 - 15151515131313121212111111110F04081570001AD80019CB0019CB0018CA00 - 18C90017C70016C60016C60016C50015C30015C20014C10014C00013BF0013BE - 0011BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000C - B2000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0008A90006AA00 - 05AA2D2F6947473D3D3D3D3636362C2C2C2323231A1A1A101010060606030303 - 020202020202010101000000000000000000000000212121A4A4A4A5A5A5A0A0 - A09B9B9B9696969090918B8B8B8686868282827D7D7D7877777373736E6F6F6A - 6A6A6565656161615D5C5C5858595655565453534D4D4D4A4A4A464646434343 - 403F3F3C3C3D3939393636373333333130302E2E2E2C2C2C2A2A2A2727282424 - 242323232222221F1F1F1E1E1D1B1C1C1A1A1A19181917181716161615161615 - 15141313141212121212121111111010100E0F0F0F0F101B1B1B1A1A1A1B1C1C - 1C1D1D1D1D1E1313130E0D0E0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0D - 0D0C0C0C0C0C0D0C0C0C0C0C0C0C0C0C0C0C0C0B0B0C0B0C0B0B0B0B0B0B0B0B - 0B0B0B0A0B0B0A0A0B0A0A0A0A0A0A0B0A090A0A0A0A0A0F0F10212020252525 - 2929292F2F2F2D2D2D0607070707060706070607060606070706060606060606 - 0606050606050505060505060505050505050505050505050505050505040505 - 0504050404040404040504040404040303040404040404030304030303030304 - 0304040304040303030303030303020203020303030303030202030203020302 - 0202020202020202020201010202010102020101010102010202020101020101 - 0101010101010101010101000101010100000100010000000001000101000100 - 0100000000000000000001000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 303030303030303030303232323535353737373A3A3A3C3C3C3635362F2F2F2F - 2F2F2F2F2F2F2F2F3232323B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383838383838383838383838383838383333333232 - 3232323232323232323232323237373738383838383838383838383838383838 - 3838383838383838383837383837383737383737383737383737383737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373637373637363637373738383838383838383838383838383837363636 - 36363636363636363636363636363636363636363636363333332F2F2F2F2F2F - 2F2F2F3030303232324747474C4C4B5353535857585D5D5D3737373131323231 - 323232333232323333333434343535353535353636373737373938393A3A393C - 3B3B3C3C3C3D3D3D3F3F3F4141424242424545454546464949494A4A4A4C4C4D - 4F4F4F5251515455545757575A595A5C5C5C60605F6262626566666969696D6C - 6D6F6F707373737777777C7C7C7F80808382828787888C8C8C91919194949499 - 99999D9D9DA2A2A2A6A6A6ABABACB0B0B07272722727272B2B2B2F2F2F323232 - 3535353838383B3B3B3C3C3C3D3D3D3C3C3C3D3D3D3D3D3D3C3C3C3B3B3B3B3B - 3B3B3B3B3A3A3A3A3A3A38383838383838383838383836363636363636363635 - 3535353535343434333333333333333333323232323232303030303030303030 - 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A - 2A2A2A2A2929292828282626262525252424242323232222222020201E1E1E1D - 1D1D1C1C1C1B1B1B1A1A1A1919191919191A1A1A191919181818171717171717 - 15151513131312121212100C0F101D0219B7001AD30019CB0019CB0018CA0018 - C90017C70016C60016C60016C50015C30015C20014C10014C00013BF0013BE00 - 11BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2 - 000CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0008A90005AB0409 - A435365B44443B3B3B3B3333332A2A2A2121211717170E0E0E04040403030303 - 03030202020101010000000000000000000000005B5B5BA9A9A9A4A4A49E9E9E - 9999989393938D8E8D8989898484847F7F7F7A7A7A7575757171716D6C6C6868 - 686262635F5F5E5D5D5D5E5E5E5F5F5F5757574C4C4C4848484544454241423E - 3E3E3A3A3A3838383435353131312F2F2F2D2D2D2B2B2B282828252625242424 - 2322232020201F1F1F1C1C1C1B1B1A1918181818191616171616161515151314 - 141312121313131211111010100E0E0F1414141B1B1B1C1C1C1C1C1C1D1C1D1D - 1D1D0E0D0E0E0D0E0E0D0E0E0D0D0E0D0D0D0D0D0D0D0D0D0D0D0C0D0C0C0C0D - 0C0C0D0C0C0C0C0C0C0C0C0C0B0C0C0C0B0B0B0C0C0B0B0B0B0B0B0B0A0A0B0B - 0B0A0A0B0B0A0A0B0A0B0A0A0A0A0A0A0B0B0B0C0C0D2020202726262C2C2C30 - 30303333330A0A0A070707060706070707060606060606070707060606060606 - 0606060606050505050606060506060505050505050505050405040505050505 - 0404050404040404040404040404040404040403040404030304040303040304 - 0303040303030303030303030303020303030303020302030202020303030202 - 0202020202020202010202020102020201010202020202010102020101020101 - 0101010101010101010101000101010000010101000101010101000001010000 - 0000000000000101000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303232323535353737373A3A3A3C3C3C3635362F2F2F2F2F2F2F2F - 2F2F2F2F3232323B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838323232323232323232 - 3232323232323232323838383838383838383838383838383838383838383838 - 3838383838383838383738383738373738373738373738373738373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737363737363837373838383838383838383838383838383636363636363636 - 363636363636363636363636363636363636363232322F2F2F2F2F2F2F2F2F30 - 30303636364848484D4D4D5454545A5A5A575757323132313132313231323332 - 323332343334353635353635363636373736383838393A39393A393C3C3C3E3E - 3D3E3D3D4040414141414343434545454747464A4A494B4C4B4E4E4E51515153 - 53535556555757575B5B5B5E5E5E6161616364636868686B6B6B6E6E6E727272 - 7575767979797D7D7D8181818585858A8A8A8E8E8E9393939797979C9C9CA0A0 - A0A5A5A4A9AAAAAFAFAEA0A0A13232322B2B2B2E2E2E3232323535353939393A - 3A3A3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B - 3B3B3B3A3A3A3A3A3A3838383838383838383838383636363636363636363535 - 353535353434343333333333333232323232323232323030303030303030302F - 2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A - 2A2A2A2929292828282727272626262424242323232222222121211F1F1F1F1F - 1F1E1E1E1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A19191916161615 - 1515141414121212121005091463001BD8001ACD0019CB0019CB0018CA0018C9 - 0017C70016C60016C60016C50015C30015C20014C10014C00013BF0013BE0011 - BD0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB200 - 0CB2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0008A90004AD090E9A - 3D3D4C41403C3838393030302727271E1E1E1515150B0B0B0303030303030303 - 030202020101010000000000000000000C0C0C949494A7A7A6A1A1A19B9B9B96 - 96969192928C8C8C8787878282827D7D7D7878787373736F6F6F6A6A6A686868 - 6868686666666363636060605D5D5D5757574B4B4B4646464242433F3F403C3C - 3C3939393736373434343131312E2E2E2B2B2B29292927272724252522222322 - 21211F1F1F1D1D1D1C1C1C1A1A19181819171717161616161616141414121212 - 1313121112111010101010101919191B1B1C1C1C1C1D1D1D1E1E1E1617170E0D - 0E0E0D0E0E0D0E0E0D0E0E0D0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0C0C0C0C - 0C0C0C0D0C0C0C0C0C0C0C0C0C0C0C0B0C0B0C0C0B0B0B0C0C0B0B0B0B0B0B0B - 0B0B0B0A0B0B0B0A0A0A0A0A0A0A0A0C0C0C1D1D1E2726272A2B2A2F2F2F3433 - 3313131307070707070607070607060607070606060606060606060606060605 - 0605060606050506060505050506050505050505050505050505050505040505 - 0505050404040404050404050304040404040403030404040303030304030303 - 0404030303030303030303030303030303030303030302030203030202020202 - 0202020202020202020201010202020101010202010102010202010101010102 - 0101010101010101010001000101010101010101010001000001010000000001 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 30303232323535353737373A3A3A3C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F - 3232323B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383832323232323232323232323232 - 3232323232383838383838383838383838383838383838383838383838383838 - 3838383838383838373838373837373837373837373837373837373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3736383838393838383838383838383838383838363636363636363636363636 - 3636363636363636363636363636363130312F2F2F2F2F2F2F2F2F3030303A3A - 3B4949494E4E4E5555555A5A5A4F4F4F31323232323231313133333333323234 - 34343635363635363636363737373939393A3A3A3A3B3B3C3B3B3D3D3E3E3E3E - 4040414242424444444646464848484A4A4A4D4D4D4F4F4E5251525453545757 - 575A5A5A5D5C5C5F5F5F6262626666656969696C6C6D6F6F6F7374747777777C - 7C7C7F7F7F8383838888888C8C8D9091919595949A999A9E9E9EA2A2A2A7A7A7 - ACACACB0B1B15E5E5E2B2B2B2E2E2E3131313535353838383A3A3A3C3C3C3E3E - 3E3F3F3F3F3F3F3F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B - 3B3B3A3A3A3A3A3A383838383838383838383838363636363636363636353535 - 3535353434343333333333333333333232323232323030303030303030302F2F - 2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A - 2A2A292929282828262626262626252525232323232323222222202020202020 - 1F1F1F1F1F1F1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1B1B1B1919191717171515 - 1513131312120E0F111B0219B6001AD4001ACD0019CB0019CB0018CA0018C900 - 17C70016C60016C60016C50015C30015C20014C10014C00013BF0013BE0011BD - 0011BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000C - B2000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007A90003AE14198A42 - 423F3D3D3B3535362D2D2D2424241B1B1B121212070707030303030303030303 - 020202010101000000000000000000424242A9A9A9A4A4A49E9E9E9999999494 - 948F8E8E8989898484858080807A7A7A7475757373737272726F6F6F6C6C6C67 - 67676565656262626060605C5C5C5757574949494444444141413D3D3D3A3A3B - 3838383535343232312F2F2F2D2D2D2A2A2A2828282425252323232323231F20 - 1F1E1E1E1C1C1C1B1A1B18191818181716161616161615151513131313131211 - 11111010111313131C1C1C1D1D1D1D1E1D1D1D1D1E1E1E1111110E0D0E0E0D0E - 0E0D0E0E0D0D0E0E0E1211111112111111111111111111111011101010101111 - 100F0F100F0F0F0E0E0E0D0E0E0C0D0D0C0C0C0B0B0C0B0B0B0B0B0B0B0B0B0B - 0B0B0A0B0B0A0B0A0A0A0B0B0B0B1B1B1A2525252929282F2F2F3433341E1F1F - 0707070707070707070707070707060706070707060606060606060605060605 - 0606050606060505060606050605050605050505040404050505050405040504 - 0504040504040404040404040404040404040304030304040304030304030303 - 0303030303030303030303030203030302030303020303020202020202020202 - 0202020201020202020202020201010101010102020202020201020202010101 - 0102010101010101010101010100000000000001010001000101010000010001 - 0000010000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303232 - 323636363838383A3A3A3C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F2F2F2F31 - 31313636363B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3938383938383838383838383838383232323232323232323232323232323232 - 3239383838383838383838383838383838383838383838383838383838383838 - 3838383838383837383837383737383737383737383737383737373737373737 - 3737373737373737373737373737373737373737373737373737373737373838 - 3839383839383838383838383838383836363636363636363636363636363636 - 36363636363636363636363130312F2F2F2F2F2F2F2F2F3030303D3C3D4A4A4A - 4F4F4F5555555A5A5A4747473232323232323332333333323333343435343536 - 353536353737373737373939393A3A3A3C3C3C3D3D3D3E3E3E403F3F42414142 - 42424545454747474949494B4B4B4E4E4E504F505353525556555858575B5B5A - 5D5D5D6160616464646767676B6B6B6E6E6E727272767676797A797D7D7D8182 - 818585858A8A8A8E8E8E9393939797979C9C9CA1A1A1A5A5A5AAAAAAAFAFAF96 - 96962D2D2D2E2E2E3131313434343737373B3B3B3D3D3D3E3E3E3F3F3F3F3F3F - 4040404040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B - 3B3A3A3A39393938383838383839393938383838383837373737373736363636 - 36363535353434343434343333333232323232323030303030303030302F2F2F - 2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A - 2A29292928282827272726262625252525252524242423232321212121212121 - 21212020202020201F1F1F1F1F1F1E1E1E1C1C1C1A1A1A181818161616141414 - 131313131107081670001BD8001ACE001ACD0019CB0019CB0018CA0018C90017 - C70016C60016C60016C50015C30015C20014C10014C00013BF0013BE0011BD00 - 11BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2 - 000CB0000BAF000BAF000AAE000AAD0009AB0009AA0007AA0004AD2326714242 - 393A3A393232322929292020201717170D0D0D05050503030303030303030302 - 0202010101000000000000030303888888A6A6A6A1A1A19B9B9C979797929192 - 8C8C8C878787828282807F7F7D7D7D7A7A7A7676767272726E6E6E6B6B6B6767 - 676464646161615E5E5E5C5C5C5757574646454343423F3F3F3B3B3B39393936 - 36363332332F2F302E2E2E2B2B2C2828282626262424242223232120201F1F1F - 1C1C1C1B1B1B1819191918191617171616161615151414141213131213121112 - 111717171B1C1C1C1C1D1D1E1E1E1E1F1B1B1B0E0E0F0E0D0F0E0D0E0E0D0E0E - 0D0E101010121212111212111111111111111111111111111111101110101011 - 1011101010100F1010100F0F1010100F0F0F0F0F0F0E0E0E0C0D0D0A0A0C0B0B - 0B0A0B0B0A0B0A0C0B0B1615162424242928292D2E2E33323228272707070707 - 0707070707070706070707070606060606060607060607060606060606060606 - 0506060505050506050605050505050505050405050505040505050404050405 - 0404050504040404040404040403040404040403030404030303030304040303 - 0303030303030303020203030302030302030203020303020202030202020202 - 0202020202020202020202020102020102010102020101010101010102010101 - 0102010101010101000100010101010101000101010001000000010000010000 - 0000000000000001000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030323232363636 - 3838383A3A3A3C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F3030303534353A3A393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838323232323232323232323232323232323232393838 - 3938383838383838383838383838383838383838383838383838383838383838 - 3838383838383738383738373738373738373738373738373737373737373737 - 3737373737373737373737373737373737373737373737373737383838393938 - 3938383938383838383838383636363636363636363636363636363636363636 - 363636363636362F2F2F2F2F2F2F2F2F2F2F2F3131313F3F3F4A4A4A4F4F4F56 - 56565A5A5A424242323232323232333333333232333433353434353635363536 - 3737383938383A3A3A3A3A3A3C3C3C3E3E3E3F3F3E4141414142414343444646 - 464747474A4A4A4C4C4C4E4E4E5151515353535757575958585C5B5C605F5F61 - 61616566656969696C6C6C7070707273737777777B7B7B7F7F7F838383888888 - 8C8C8C9091919495959A9A9A9E9F9EA4A4A3A8A7A7ADACACB1B2B15757572D2D - 2D3030303434343737373A3A3A3D3D3D3E3E3E40404040404040404040404040 - 40404040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B - 3B3B3B3A3A3A3A3A3A3939393939393939393939393939393838383838383737 - 373636363636363535353434343434343232323131313030303030302F2F2F2F - 2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A - 2929292929292727272626262626262525252525252424242323232323232323 - 232222222121212020201F1F1F1E1E1E1C1C1C19191917171715151513141413 - 120D101223011BC2001AD2001ACE001ACD0019CB0019CB0018CA0018C90017C7 - 0016C60016C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011 - BC0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB200 - 0CB0000BAF000BAF000AAE000AAD0009AB0009AA0006AB0208A73234553F3F38 - 3737372F2F2F2525251D1D1D1414140A0A0A0303030303030303030303030202 - 02010101000000000000383838A9A9A9A4A4A49E9E9F9A9A9A9494948F8F8F8B - 8B8B8A8A8A8585858181817C7C7C7878787575747070706C6C6C696969666666 - 6363636060605D5D5D5B5B5B5656564645464141403D3C3D3939393737373434 - 343131312E2E2E2D2C2C2A292A272727242525232323212222201F1F1D1D1D1C - 1C1C1A1A1A1918191717171616161515151414141313131313121213131D1D1D - 1C1C1C1E1E1E1F1F1E1E1E1E1414140E0E0F0E0D0F0E0D0F0E0D0E0E0D0E1212 - 1212121211121211121211111111111111111111111111101110111110101010 - 10101010100F0F100F1010101010100F0F0F100F0F0F0F0C0C0C0A0B0B0A0A0A - 0A0A0B0B0C0B1212122323232828282D2D2D3031312C2D2C0707070807070707 - 0707070707070706060607060707060607060607060606060606060606060506 - 0506060606050605060506060505050505040405040504050505040504040405 - 0404050404040404040403040404040404040403030303030403030303040403 - 0303030303030302030302030303030302020302020303020203020203020202 - 0202020202020202010201010202020201010102020102010101010101010102 - 0101010101010101010100010101010100010001010001000101000000000001 - 0100000000000100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 303030303030303030303030303030303030303030303333333636363838383A - 3A3A3C3C3C3535352F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F303333333939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383837373732323232323232323232323232323233323239383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373837373837373837373837373737373737373737 - 3737373737373737373737373737373737373737373738383839393839393839 - 3838393838383838363636363636363636363636363636363636363636363636 - 3636362F2F2F2F2F2F2F2F2F2F2F2F3131314141414A4A4A5050505656565A5A - 5A3C3C3C32323232323233333333333333343435363535353637373637383738 - 39393A3A3A3B3B3B3C3C3C3E3E3E3F3F3F4040414242434545464746464A4949 - 4A4A4A4D4E4D4F4F4F5152525555555757575B5B5B5C5D5D6060606464646766 - 676A6A6A6D6D6D7272727475757879787D7C7C8080818585868989898E8E8E93 - 92929797979C9C9CA0A0A0A5A5A5AAAAAAAFAFAF9696962E2E2E2F2F2F333333 - 3737373A3A3A3D3D3D3F3F3F4040404141414141414141414141414040404040 - 404040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3C3C3C3C3C3C3B - 3B3B3B3B3B3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3C3C3C3B3B3B - 3A3A3A3838383737373636363434343333333232323131313030302F2F2F2F2F - 2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29 - 2929292929282828272727262626262626262626252525242424232323232323 - 2222222121212020201E1E1E1D1D1D1A1A1A1818181616161514141412070E15 - 43011BC9001BD3001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C700 - 16C60016C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC - 0011BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000C - B0000BAF000BAF000AAE000AAD0009AB0009AA0005AF0D12923C3C3E3A3A3733 - 33332B2B2B222222191919101010060606030303030303030303030303020202 - 010101010101020202878787A7A7A6A1A1A19B9C9B9797979696969291928D8C - 8C8787878484848080807B7B7B7676777373736F6F6F6A6A6A67676765656561 - 61616060605C5C5C5A5A5A5757574646463F3E3E3A3A3B383838353535323232 - 3030302D2E2D2B2C2B2828282525252323232323232020201E1F1E1C1D1C1A1A - 1A1919191818181616161616161414141313131312131617171D1D1D1D1D1D1E - 1E1E1F1F1E1E1E1E0E0E100E0E0F0E0E0E0E0E0F0E0D0F0F0F0F121212121212 - 1212111111121111111111121111111111111111101011101010101110101010 - 10101010100F10101010100F0F10100F10100F0D0D0D0B0B0B0B0A0A0B0A0B0C - 0B0C0D0E0D2222232727272C2C2C303131353435080807080807070707070707 - 0707070607070707070707070706060606060606060606060506060606060506 - 0606060605050505060505050505050505050505050405040405050404050504 - 0504040404050404040404040404040403030304030303040403030304030303 - 0303030303030303030303030303020203020302030203030303020202020202 - 0202020202020202010202010201010102010101010202010201010101010101 - 0101010101000100010101000100000001000000000101010100000100000000 - 0001000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303434343737373939393B3B3B3D3D - 3D3939393232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F3232323737373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3737373232323232323232323232323232323434343938383938383938383938 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383837383837383737383737383737383737383737373737373737373737 - 3737373737373737373737373737373737373939393939393939383939383938 - 383838383636363636363636363636363636363636363636363636363636362F - 2F2F2F2F2F2F2F2F2F2F2F3131314141414A4A4A4F4F4F5555555A5A5A3D3D3D - 323232323232333333333333343534353536363535363637383738393A393A3A - 3A3B3B3B3D3D3D3E3E3E4040404242424343434546464847474A4A4A4D4C4C4F - 4F4E5151515453545656565858585B5B5B5F5F5F6162626564656868686B6B6B - 6F6F6F7273727777777A7A7A7F7F7F8383838788888B8C8C9090919494949999 - 999E9E9EA3A2A2A7A7A7ADADADB2B2B25A5A5A2F2F2F3333333636363939393D - 3D3D3F3F3F414141414141424242414141424242424242404040404040404040 - 4040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3D3D - 3D3D3D3D3D3D3D3E3E3E4040404040404040404242424141414040403F3F3F3E - 3E3E3B3B3B3A3A3A3838383636363333333232323131313030303030302F2F2F - 2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2929 - 2929292927272727272727272726262626262625252524242423232323232322 - 22222020201E1E1E1C1C1C1B1B1B1919191616161614080E1645011CCA001CD7 - 001CD1001BD0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016 - C60016C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC00 - 11BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0 - 000BAF000BAF000AAE000AAD0009AB0009AA0004AF1E22723D3D343636362F2F - 2F2727271E1E1E1515150B0B0B05050503030303030303030302020201010101 - 0101010101393939A9A9A9A4A4A4A2A1A29E9E9E9999999494948F8F8F8B8B8B - 8686868282827E7E7E7979797373736A6A696262636060606565656363636161 - 615E5E5E5B5B5B5858585454544344443D3C3C393A3A3737373434343131312E - 2E2E2C2B2B2829292626272424242223232121211F1F1F1C1C1D1B1B1B191919 - 1818181717171616161515151314141313131C1C1C1E1D1E1E1E1E1F1F1F1F1F - 201818170E0F0F0E0E100E0E0F0E0E0F0E0E0F12111213121212121212121212 - 1212111112111112111111111111111111101110101110101110101010101010 - 1010100F101010100F10100F100F0F0E0E0E0B0B0B0B0A0B0B0B0B0A0B0A0D0D - 0D1F1F1F2827282B2B2B30303034343314131307080808070807070707070707 - 0707070707070706060607060607060607060706060606060606060606060605 - 0505060505050605050505060505050505050405050405050405040405040405 - 0404040404040404030404030404030403030404030303030403030304030303 - 0303030303020303030303030202020303030302020202020202020202020202 - 0202010202020102010202020101010201010101020101010101010101010101 - 0101010101010100010001010100000001000001010100000100000000000000 - 0101000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 30303030303030303030303030303535353838383A3A3A3B3B3B3D3D3D3E3E3E - 4040403C3C3C3434342F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F3131313636363A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383837373732 - 3232323232323232323232323232343434393938393838393838393838393838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383738383738373738373738373738373738373737373737373737373737 - 3737373737373737373737373737393939393939393939393938393938383838 - 3636363636363636363636363636363636363636363636363636362F2F2F2F2F - 2F2F2F2F2F2F2F3131314141414A4A4A5050505454545A5A5A3D3D3D32323232 - 32323333333334343535353636353536363837373839383A3A3A3B3B3B3C3C3D - 3E3E3E3E3E3E4141414242424444444646464847474A4A4A4C4C4C4F4E4F5252 - 515454545757575A5A5A5D5D5D60605F626363676766696A696E6D6D71717175 - 75757878787C7C7C8181818585858989898D8D8D9292929797979B9B9BA1A0A0 - A5A5A5AAAAAAAFAFAF9898983131313232323535353939393C3C3C3F3F3F4141 - 4143434343434342424243434342424242424242424240404040404040404040 - 40403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3F3F3F - 4040404242424444444545454747474747474848484747474646464444444242 - 423F3F3F3C3C3C3A3A3A3737373535353333333232323131313030302F2F2F2E - 2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 - 2929292727272727272727272626262626262424242424242323232222222020 - 201E1E1E1C1C1C1A1A1A18191818160A0F1746011DCD001DDB001DD3001CD200 - 1CD1001BD0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C6 - 0016C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011 - BB0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB000 - 0BAF000BAF000AAE000AAD0009AB0007AC020AA531324C3A39333333332B2B2B - 2323231A1A1A1111110707070404040404040303030202020101010101010101 - 01030303898989ABABABA5A5A6A1A1A19C9C9C9797979292928D8E8E88888884 - 85847D7D7D7373736D6D6D6969686565656060605F605F6464646262625F5F5F - 5B5B5B5959595656565252524242413A39393738373434343131312E2E2E2C2D - 2C2A2A2A2727272525252323232222222020201E1D1E1C1C1C1A1B1A19191917 - 17171616161515151414141616161E1E1E1F1F1F1F1F201F1F1F202020131313 - 0E0F100F0E0F0E0E0F0E0E0F0F0F0F1312121312121212121212121212121212 - 1112121111111211111111111011111111101011101111101010101010101010 - 1010100F0F1010100F10100F0E0E0B0B0C0B0B0B0B0B0B0B0B0A0C0C0B1B1B1C - 2625252A2A2A2F2F2F3434341C1C1C0807080807070708070807070707070706 - 0707070706060607070706060606060606060606060605060606060606060606 - 0505050505050506050505050505040505050505040504050405050404040405 - 0505040404040404040404030404030304030404030303040303030403030303 - 0303030303030202030302030202020202030302020302020202020202020201 - 0202020202010202020202020201020101010102020201010101010101010101 - 0101010001010001010000010101000000000001000001000000010000000001 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 303030303030303030303636363939393B3B3B3C3C3C3D3D3D3F3F3F40404040 - 40404040403E3E3E3535353030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3030303434343939393A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383737373232323232 - 3232323232323232323234343439393839393839383839383839383839383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838373838373837373837373837373837373837373737373737373737373737 - 3737373737373737373739393939393939393939393939393838383836363636 - 36363636363636363636363636363636363636363636362F2F2F2F2F2F2F2F2F - 2F2F2F3131314141414A4A4A4F4F4F5454545858583C3C3C3232323333333333 - 333434343535353535353535363837383839393A3A3A3B3B3B3C3C3D3E3E3E3F - 3F404141414343434545454746474A4A494A4B4A4E4E4E4F4F4F535353555555 - 5858585B5B5B5E5E5E6161616464646867686C6B6B6E6F6E7272737676767A7A - 7A7F7F7F8383838787878B8B8B9090909494959999999E9E9EA3A3A3A8A8A8AD - ADADB2B1B26362623131313434343838383C3C3C3F3F3F414141424242434343 - 4444444444444444444242424242424242424242424040404040404040404040 - 403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E40404043434345 - 45454747474A4A4A4D4D4D4E4E4E4F4F4F4E4E4E4E4E4E4B4B4B494949464646 - 4242423F3F3F3B3B3B3838383636363333333131313131313030302F2F2F2E2E - 2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292929 - 29292727272727272727272626262525252424242222222121212020201E1E1E - 1C1C1C1A1A1A19180C111948021ECF001EDD001ED5001DD4001DD3001CD2001C - D1001BD0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C600 - 16C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB - 0010BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000B - AF000BAF000AAE000AAD0009AB0006B01217873939353535342F2F2F2727271E - 1E1E1616160C0C0C050505040404040404030303020202010101010101010101 - 444444AEAEADA9A9A9A3A3A49F9F9F9A9A9A9595969191918989887E7F7F7979 - 797575757070706B6B6B6666666362625E5E5F5D5D5D6262626060605D5D5D5A - 5A5A5757575555555151514343423838383535353232323030302E2D2E2A2B2B - 2929292625252423232222222020201D1D1D1C1D1D1A1A1B1919191717171616 - 161516151414141B1A1A2020202020201F201F2020201D1D1D1010110F0F100E - 0E100E0E0F0E0E0F111111131312121313121312121212121212121212121212 - 1111111111121111111011111111111110111111101011111010111010101010 - 100F0F0F10100F100F0F0C0C0C0B0B0B0B0B0B0B0A0B0C0B0C18191924242429 - 29292F2F30333333252525080707080807070707070707080707070707070707 - 0607070606060707070707070606070606060606060605060606060506050506 - 0605050505060505050504050505050505050505050405040505050504050404 - 0404040404040404040403040404040403030404030304030303030304030303 - 0202030203030203030203020302020202020202020202020202020202020202 - 0202020202020201020101010201010101010101020201020201010101010101 - 0101010100010101010000010100000001000001000101000100000001000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303535353B3B3B3C3C3C3D3D3D3E3E3E3F3F3F4040404040404040 - 404040404040403F3F3F3837383131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3333333938383A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838373736323232323232323232 - 3232323232323434343939393939383939383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3837383837383737383737383737383737383737373737373737373737373737 - 3737373737373939393939393939393939393939393838383636363636363636 - 363636363636363636363636363636363636362F2F2F2F2F2F2F2F2F2F2F2F30 - 30304141414949494E4E4E5353535757573F3F3F323232333333333333343434 - 363636353636363637373838393A393A3A3A3B3C3C3E3D3E3E3E3E4041404242 - 424343434646464848484A4A4A4D4D4D4F4F4E525252535453565757595A5A5C - 5C5C6060606262626565656969696D6D6D7170707474747777777B7B7B7F7F80 - 8383848888888D8D8D9292929696969B9B9BA0A0A0A5A5A6AAAAAAAFAFAFA3A3 - A33939393434343737373B3B3B3E3E3E40404042424244444444444445454545 - 45454444444444444242424242424242424242424040404040404040403F3F3F - 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E4040404444444747474A4A - 4A4E4E4E5151515353535555555656565555555454545151514E4E4E49494944 - 44444040403C3C3C3939393636363333333131313131313030302E2E2E2E2E2E - 2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2929292929 - 292828282727272626262525252424242222222121211F1F1F1E1E1E1B1B1B1B - 190D121B4A011FD1001FDF001FD7001ED6001ED5001DD4001DD3001CD2001CD1 - 001BD0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016 - C60016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB00 - 10BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF - 000BAF000AAE000AAD0008AC0007AD2729583838303131312A2A2A2222221A1A - 1A1111110707070505050505050303030202020202020202020101010B0B0B9B - 9B9BACACACA7A7A7A2A2A29C9C9C9696968C8C8C8686868180817B7C7C767676 - 7171716D6D6D6868676463635F605F5B5B5B5A5A5A5E5E5E5D5D5D5B5B5B5858 - 585555555252525150514141413837373434343231312E2E2E2C2C2C28292926 - 26272424242323232121211F1F1F1D1C1D1B1C1C191919181818161616161616 - 151615201F1F2020202020202121212020211616161010110F0F100E0F0F0F0E - 100E0E1013131313131313121313131212121312121212121212121212121111 - 111211111111121111111111101111101111111011111011101010101010100F - 1010100F100F0C0D0D0B0B0B0B0C0B0B0B0B0C0C0C1312132324242828292D2D - 2E3232322D2D2D08080807070807070807070707080707070707070707060707 - 0707060707070706070607060606060606060606060606050605050605050605 - 0506060505050505050505050505050505040405040404050404040404040404 - 0504040407070704040403040304030404030304040403030303030303030303 - 0302020302020302020303020302020302020203020202020202020202020202 - 0202010102020102020202020201010101010101010101010101010101000101 - 0101000101010101000101010100000001000100010100000000000000000000 - 0100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 30303030303131313737373D3D3D3F3F3F3F3F3F404040404040404040404040 - 4040404040404040404040403A3A3A3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3231323737373A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383839383839383839383837373632313232323232323232323232 - 3232323232393939393939393938393938393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3738383738373738373738373738373738373737373737373737373737373737 - 3737393939393939393939393939393939383838363636363636363636363636 - 3636363636363636363636363636363030302F2F2F2F2F2F2F2F2F3030303C3B - 3C4848484E4E4E52525256565645454532323233333333333334343436363636 - 36353737373838383A3A393A3A3A3D3D3D3D3E3E3E3E3E414142424342444445 - 4646464848484A4A4A4D4D4C4F4F4E5251525555545757575B5A5B5E5D5D6060 - 606464646767676A696A6E6E6E7171717575757979797D7D7D8181818686868A - 8A8A8F8F8F9393939898979C9D9DA2A2A2A7A7A7ACACACB2B2B2777777333333 - 3737373A3A3A3D3D3D4040404242424444444545454545454545454545454545 - 454444444444444242424242424242424242424040403F3F3F3F3F3F3E3E3E3D - 3D3D3D3D3D3C3C3C3C3C3C3C3C3C3D3D3D3F3F3F4343434848474D4C4951514D - 56544F5A59555C5B585D5D5C5C5C5C5C5C5C5959595555555151514C4C4C4747 - 474242423D3D3D3939393636363333333131313030303030302E2E2E2E2E2E2E - 2E2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 - 2727272626262525252424242222222020201E1E1E1C1C1C1C1A0E121C4B0120 - D30021E1001FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD100 - 1BD0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C6 - 0016C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010 - BA0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF00 - 0BAF000AAE000AAC0007B00B13913535353333312D2D2D2626261E1E1E161616 - 0C0C0C0505050505050404040202020202020202020202020101015F5F5FAFAF - AFA9A9A9A3A3A39A9A9A9292928D8D8D8787878383837D7D7D7878797373736E - 6F6E6A6A6A6565656060615D5D5D5959595756565C5C5C5B5B5B595959565656 - 5252525151514E4E4E3F3E3F3434343231322E2F2F2C2C2C2A2A2A2828282525 - 252323232121222020201D1D1C1C1B1C191A1A1818181616161616161A1A1A20 - 20202020202121222121212020201110111011110F0F100F0F100F0F0F101110 - 1313131313131312121313131313121212121212121212121212121212121111 - 1212111111111111111110111110111011101010101110101010101010101010 - 0F0F0D0E0E0B0C0C0B0B0C0B0B0B0C0C0C0F0E0F2323232727272D2C2D313131 - 3535350808080808080808080808070808070807070708070707070707070707 - 0706060706060706070606060606060606060606050506060606050505050505 - 0505050505050505050505050405050504050404040505050404080808131313 - 1616160D0D0D0404040304040404040303030303030303040303030303030303 - 0303030303030202030202020203020202020202020202020202020202020202 - 0201020201020102010102020101020101010201010101010101010101010100 - 0101000101010101000101000100000000000001000000010000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303636363E3E3E40404040404040404040404040404040 - 40404040404040404040404040403C3C3C3434342F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3030303636363A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383838383231323231323232323232323232323232 - 3239393939393939393939393839393839383839383839383839383838383838 - 3838383838383838383838383838383838383838383838383838383838383837 - 3838373837373837373837373837373837373737373737373737373737373939 - 3939393939393939393939393938383836363636363636363636363636363636 - 36363636363636363636363130312F2F2F2F2F2F2F2F2F3030303B3A3B474747 - 4D4D4D5151515555554949493232323333333333333535353636363636363838 - 383938393A3A3A3B3A3B3D3D3C3E3E3E3F3F3F41414244434345454546464649 - 49494B4B4B4E4E4E504F4F5353535655555859595B5B5B5F5E5F616161646464 - 6868686C6C6C6F6F6F7373737776767B7B7A7F7F7F8383838888888C8C8C9191 - 919595959999999F9F9FA4A4A4A9A9A9AFAEAEB0B0B04A4A4A3636363838383D - 3D3D3F3F3F424242444444454545464646464646464646454545454545454545 - 4444444444444242424242424242424141413F3F3F3E3E3E3E3E3E3D3D3D3C3C - 3C3B3B3B3B3B3B3B3B3B3C3C3B3E3D3A4340354746404A4B514C4F5C4A526F54 - 58695B5D6464635F68655A65645F6161605E5E5E5959595454544D4D4D474747 - 4242423D3D3D3939393535353333333232323131312F2F2F2E2E2E2E2E2E2E2E - 2E2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292928282826 - 26262525252323232121211F1F1F1D1D1C1C1A0F131C4C0121D50022E30021DB - 0021DA001FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001B - D0001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C600 - 16C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA - 0010B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000B - AF000AAE0009AD0008B024265B35352C2F2F2F2929292121211A1A1A11111107 - 07070505050505050404040202020202020202020202021F1F1FACACACA8A8A8 - A0A0A09B9A9B9595958F8F8F8989898585857F7F7F7B7A7B7575757070706C6C - 6C6767676363635D5E5E5A5A5B57565653535359595959595957575754545451 - 51514F4F4F4D4C4D3D3D3D3332332F2F2F2D2D2D2B2B2B292929262625242324 - 2222222020201E1E1E1D1D1D1A1B1A19191A1717171616161F1F1F2020202020 - 202222222222221A1A191111111011110F0F100E0E100F0E1012131313131313 - 1313131313131313131212131212121213121212121212111211111111111211 - 111111111111111111111110101010101110101011101010101010100F100F0F - 0E0B0C0C0B0C0B0B0B0B0B0B0B0D0D0D2020202827282C2C2B31313034343514 - 1414080808080708080708070808080707080707070807070707060707070607 - 0707070707070606060606060606060606060505050606060506050606050505 - 060506050505050505050505050505050606050F0E0F15151515151516161616 - 1616121212060707040303040303030304030303030303030303030303030303 - 0302030202030202020302030303030202020203020202020202020202020202 - 0202010201020201020201010202010101010101010101010101010101010101 - 0101000101000000000000000101000001000001010100000100000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303434343C3C3C4040404040404040404040404040 - 404040404040404040404040404040403E3E3E3636373030302F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30343434393939 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838323131323132323132323232323232323232393939 - 3939393939393939393939383939383938383938383938383938383838383838 - 3838383838383838383838383838383838383838383838383838383838383738 - 38373837373837373837373837373837373737373737373737373939393A3939 - 3939393939393939393939393736363636363636363636363636363636363636 - 363636363636363131312F2F2F2F2F2F2F2F2F3030303636364747474B4B4B4F - 4F4F545454505050323232333333343434353535363636363636383838393939 - 3A3A3A3B3B3B3C3D3D3E3F3F4040404241414343444647474847474B4B4A4D4C - 4C4F4F4F5151515454545757575958595B5B5C6060606262626565656969696D - 6D6D7171717575757778777D7D7D8181818584858988898E8E8D929292979797 - 9C9C9CA1A1A1A6A5A5AAAAAAB0B0B09090903636363838383B3B3B3F3F3F4141 - 4144444445454546464646464647474747474746464645454545454545454544 - 44444444444242424141414141413F3F3F3E3E3E3D3D3D3B3B3B3B3B3B3A3A3A - 3A3A3A3A39373D3A2F393C472B3D841E3FBB143DE20C3CF50A3AF90A3BF6113D - EB2346CC3E53A45E62766C695F6665616060605B5B5B5555554D4D4D47474742 - 42423C3C3C3838383535353232323131313030302F2F2F2F2F2F2E2E2E2E2E2E - 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2929292828282727272525 - 252323232121211E1F1E1D1C17131D500122D60023E50022DD0022DC0021DB00 - 21DA001FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0 - 001ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016 - C50015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA00 - 10B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF - 000AAD0007B20B129133333231312F2B2B2B2525251D1D1D1515150B0B0B0505 - 050505050404040303030202020202020202020202027C7C7CA8A8A8A2A2A29C - 9C9C9797979191918C8C8C8687868181817C7C7B7878787676756F6F6F686868 - 646464605F5F5B5B5B5857575353535050505858585656565353535252524F4F - 4F4D4D4D4A4B4B4040413131302E2E2E2C2C2C29292925262624242323232320 - 20201E1E1E1D1D1D1B1A1B191A1A171817191919212121212121222221222222 - 2222221414151011111110110F0F100F0F100F10101414131413131313131313 - 1313121313121312121212121212121312121212121212111211121112111111 - 1211111111111111111110111111101010101110101011101010100E0F0C0B0C - 0C0C0C0C0B0B0B0B0C0D0D0D1D1D1D2727272B2A2B2F2F2F3434341919190808 - 0808080808080707080807070707070707070707080707070706070607070706 - 0706070607060606060606060606060606060606060606050505050606050506 - 0505050505050505050A0B0B1413131514151615151515161616161717171717 - 171717170A0A0A03040304040404030403030303030303030303030303030302 - 0303020203030203020302030202020202020202020202020202020202010201 - 0201020201020101020202010201010101010101020101010101010101010101 - 0101000101010100010101010000000000000000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303232323A3A3A404040404040404040404040 - 4040404040404040404040404040404040403F3F3F3939393131312F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F33333338 - 38383A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383832313132313132313232313232323232323239393939393939 - 3939393939393939393938393938393838393838393838393838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 373837373837373837373837373837373737373737373938383A39393A393939 - 3939393939393939373636363636363636363636363636363636363636363636 - 3636363232322F2F2F2F2F2F2F2F2F3030303232324545454B4B4B4E4E4E5252 - 525656563434343333333434343535353636363636363838383939393A3A3A3C - 3C3B3E3E3E3E3F3F4140414242424343444746474948484A4A4A4D4D4D4F4F4F - 5252525454545757575B5B5B5E5E5E6060606464646767676B6B6B6E6E6E7171 - 717575757979797E7E7E8281828686868B8B8B8F8F8F9494949999999E9E9EA2 - A2A2A8A8A8ADADADB2B2B26565663737373B3B3B3E3E3E404040434343454545 - 4646464848484848484848484747474747474646464545454545454545454444 - 444343434141414040403F3F3F3D3D3D3B3B3B3A3A3A39393938383839373037 - 3839263B8C123DE3083DFF073CFF073BFF083BFF073AFF0639FF0438FF0136FF - 0035FF0C3BF2354FB563666F6A675E6061605A5A5A5353534C4C4C4545454040 - 403B3B3B3737373434343232323131313030302F2F2F2F2F2F2E2E2E2E2E2E2D - 2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A292929272727252525232323 - 2020201E1E1B1A1C210422C60024EA0023DF0023DE0022DD0022DC0021DB0021 - DA001FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD000 - 1ACE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C5 - 0015C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010 - B9000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAF00 - 09AE0008B121245933322A2C2C2D272727202020181818101010070707050505 - 050505040404040404020202020202020202434343AAAAAAA4A4A49F9F9F9998 - 999393938E8E8E8988898484848282817D7C7C7777777272726B6C6B65656561 - 61615D5D5D5858595455545152514D4D4D5353535454545252524F4F4F4D4D4D - 4B4B4B4848483E3E3E2F2E2E2C2C2C29292A2727272525242323232122211F1F - 201D1D1D1B1B1B1919191717171D1D1D2222222222222222222323241F1E1F12 - 12131111121110110F10110F0F10121212141314141413131414131313131313 - 1213131312131313121212121213121212121212111212111112111211111111 - 121111111011111010101011111110101010101010101010100C0C0C0C0C0C0C - 0C0B0B0B0B0D0C0C19191925252529292A302F2F333434222222080809080808 - 0808080808080708080808070707080708070707070707070706070707070706 - 0607060606060706060706060605060606060506050606060506060505050508 - 0707101010151515151515151616151516161616161616171717171717181818 - 1818180F0F0F0505050303030303030403040303030304030303030303030303 - 0302020302030303030203030203020202020203020202020202020202010201 - 0102010201020101020101020101020101010101010101010101010101010101 - 0100010100010101000001010100010100000100010100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303131313838383F3F3F40404040404040 - 40404040404040404040404040404040404040404040403A3A3A3333332F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131 - 323636363A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3938383131313231313231313231323231323232323938383939393939393939 - 3939393939393939393839393839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3837373837373837373837373837373737373938383A3A393A39393A39393939 - 3939393937373736363636363636363636363636363636363636363636363634 - 34342F2F2F2F2F2F2F2F2F2F2F2F3131314343434848484D4D4D515151555555 - 3E3E3E3333333434343535353636363737373838383A3A3A3A3A3A3D3D3D3E3E - 3E3F3F3E4242424242424545444647464848494B4A4A4E4D4D4F4F4F53535355 - 55555858585B5B5B5D5E5D6262616465656868686C6C6C70706F737373777777 - 7A7A7A7F7F7F8383838888888C8C8C9191919596959A9A9A9F9F9FA4A4A4AAAA - AAAFAFAFABABAB4444443A3A3A3D3D3D40404043434345454547474748484849 - 4949494949484848474747474747474747464646454545454545444444434343 - 4141414040403E3E3E3C3C3C3A3A3A38383836363637352C31374B183EC90B40 - FF0B3FFF0B3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0638FF02 - 37FF0034FF153FE4545E8469665C5F5F5F5858585151514A4A4A4343433D3D3D - 3939393636363333333131313131312F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D - 2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A2929292727272525252323232020201D - 1D1C1B1B170821A30025EC0024E00023DF0023DE0022DD0022DC0021DB0021DA - 001FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001A - CE001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C500 - 15C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9 - 000FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000BAE0008 - B30C138C2F2F2C2E2E2C2929292222221B1B1B1414140A0A0A06060606060604 - 0404040404040404020202020202121212A0A0A1A7A6A7A1A1A19B9B9B959595 - 9090918C8D8C8988888382827F7E7E7978797474746F6F6F6A696A6363635E5E - 5E5B5A5B5556555252524E4E4E4A4A4A4F50505252525050504D4D4D4A4A4A48 - 48484545453C3B3C2D2D2D2A2A2A2828282626262323232222222120201D1D1D - 1C1C1C1A1A1A191A192323232323232323232323232423231919191213131111 - 121110121010100F0F1014141415141414141413141413131313131313131313 - 1213131213121213121212121212121212111112121111111111111211111111 - 1111111110111011101110111110101011101010110D0D0D0C0B0C0C0C0C0C0C - 0C0C0C0C1414142525252929292E2D2E3231322B2B2B08090908080808080807 - 0807080808080707070808080707070707070707070707070706070607060707 - 0606060707070606060606060606060606060505060505050E0E0D1515151515 - 1515151515161616161616161716161717171717171718181818181818181819 - 1919151515070708030304040303030303030303030303030303030202020302 - 0303020302020203030202020302020202020202020202020202020201010201 - 0201020201020201010101010101020101010101010101010101010101010101 - 0001010101000100000101000100000000010001000001000100000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303636363D3D3D4040404040 - 404040404040404040404040404040404040404040404040403C3C3C3535352F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3030303535353939383939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383833 - 3333313131323131323131323132323132373737393939393939393939393939 - 3939393939393939383939383938383938383938383938383838383838383838 - 3838383838383838383838383838383838383838383838383838383738383738 - 37373837373837373837373837373838383A3A393A3A393A39393A3939393939 - 3737373736363636363636363636363636363636363636363636363635352F2F - 2F2F2F2F2F2F2F2F2F2F3030303D3D3D4848484B4B4B4F4F4F53535349494933 - 33333434343636363636363737373838383A3A3A3B3B3B3D3D3D3E3E3E403F3F - 4241424344444546464847484A49494B4C4B4E4F4F5152515353535757575959 - 595C5C5C5F5F5F6362626665666A6A696D6D6D7171717474747878787C7C7C80 - 80808585858989898E8E8E9393939798989C9C9CA1A1A1A6A6A6ABABABB0B0B0 - 8D8D8D3A3A3A3C3C3C3E3E3E4242424545454646464848484949494949494A4A - 4A4949494848484747474747474747474646464545454444444343434141413F - 3F3F3D3D3D3A3A3A3737373636363533292D35541440E20C41FF0E40FF0E40FF - 0D3FFF0C3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0639FF0438 - FF0035FF0939F44C598D6663585B5B5B5454544D4D4D4646464040403B3B3B37 - 37373434343333333131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D - 2C2C2C2C2C2C2C2C2C2B2B2B2929292828282525252323232020201D1D1D1C1A - 0E0E1F780025EE0024E10024E10023DF0023DE0022DD0022DC0021DB0021DA00 - 1FD9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE - 001ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015 - C30015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B900 - 0FB8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF000AB0010AAD - 2225482E2E2729292A2424241D1D1D1717170E0E0E0707070606060505050404 - 04040404040404020202020202757675A8A8A8A3A3A39D9C9D99999995949490 - 8F8F8A8A8A858485807F7F7B7B7B7575757071716C6C6C6666666060605B5B5B - 5758575353534F4F4F4B4B4B4949494E4D4E5050504D4D4D4C4C4C4848484646 - 464242423938392C2C2D2929292626262424242223232121201E1E1F1E1E1E1E - 1E1E222222242424252525242424242424232222131314121213111112111112 - 1010111112121514141514141414141414141414131313141313131313131313 - 1313131312131312121212121212121211121212121212111211111111111111 - 11111111111011111010111111111011100E0E0E0C0C0C0C0C0C0C0B0B0C0C0D - 1211122323232828282D2C2D3030303333340908090809090808090808080808 - 0808080808070707080707080707070707070707070707060706060707060606 - 07070606060606060606060606060A090A131212161615151615151515161616 - 1717171617171818181717171415151818181818181819181818181919191819 - 191718180B0C0C03030403030304030303030303030303030302030303020303 - 0203030203020302020202020202020202020202020202020202020102010102 - 0101010102010102020101010101010101020101010101010001010001000000 - 0000010100010001010000000000000001010000010000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303434343B3B3B404040 - 4040404040404040404040404040404040404040404040404040403E3E3E3636 - 373030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F30363636393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383333333131 - 3131313132313132313132313237373739393939393939393939393939393939 - 3939393939393938393938393838393838393838393838383838383838383838 - 3838383838383838383838383838383838383838383838383838373838373837 - 373837373837373837373838383A3A3A3A3A393A3A393A39393A393938383837 - 36363636363636363636363636363636363636363636363636363030302F2F2F - 2F2F2F2F2F2F3030303838384646464A4A4A4D4D4D5252525353533333333434 - 343636363636363737373939393A3A3A3B3B3B3D3D3D3E3E3E40404042424144 - 44434746474747484A4B4A4D4D4D4F4F4F5352525454545757575A5A5A5D5D5D - 6060606464646666676A69696D6D6E72727175767579797A7D7D7D8282828686 - 868B8B8B8F8F8F9494949999999E9E9EA2A3A2A9A8A8ADADADB2B2B26868683C - 3C3C3E3E3E4141414444444646464848484949494949494A4A4A4A4A4A4A4A4A - 4949494848484747474747474747474646464444444343434141413E3E3E3B3B - 3B37373735353534322D2F323F1740DB0F43FF1041FF0F40FF0E40FF0E40FF0D - 3FFF0C3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0639FF0538FF - 0035FF0A3AF3525A7A5F5D565656565050504949494242423C3C3C3838383535 - 353434343232323131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C - 2C2C2C2C2C2B2B2B2929292828282525252323232121211E1E1E1C1A11111C54 - 0025E50024E40024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001F - D9001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE00 - 1ACE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C3 - 0015C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000F - B8000FB7000EB6000EB5000DB4000CB2000CB2000CB0000BAF0008B61117782C - 2C24292929262626202020191919111111090909070707060606040404040404 - 040404030303030303424242AAAAAAA6A6A6A2A1A29C9B9B9796969191918C8C - 8B8786868181817D7D7C7777777272716E6E6E6969696464645C5C5C58585854 - 54545050504C4D4C4949494646464949494D4D4D4C4C4C494949464646424242 - 3E3E3E3A393A2B2B2A262626272728282828292A2A292A292A29292929292727 - 272727272626262525252424241D1D1D14141412131311121211111211111214 - 1414161414151414151414141413141414131314131313131313131313131313 - 1312131213121212121212121212121112121211121111111112111111121111 - 111111111111101110101010110F0F0E0C0D0C0C0C0C0C0B0C0C0B0B0F0E0E22 - 22222727272A2A2A2E2E2F323231111011090909080808080808080808080807 - 0708070808080808080707070707080707070707070707070706070707060607 - 070706070707080F0F0F15151515161615151617171616171617181718181718 - 1818121212080808070808131212181819181818191A1A191919181919191919 - 1A1A1A100F100303040403030304040303030303030203030302030203030203 - 0203030302020202030202020203020202020202020202020202020202020202 - 0101020201010201010101020102010101010101010101010101010100010100 - 0001010100010000010000010100010100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303232323A3A3A3F - 3F3F4040404040404040404040404040404040404040404040404040403F3F3F - 3939393131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F34343439393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838333333313131313131 - 3131313231313231313636363939393939393939393939393939393939393939 - 3939393939393839393839383839383839383839383838383838383838383838 - 3838383838383838383838383838383838383838383838383837383837383737 - 3837373837373837373A3A3A3A3A3A3A3A393A3A393A39393938383736363636 - 363636363636363636363636363636363636363636363232322F2F2F2F2F2F2F - 2F2F3030303232324444444848484B4B4B4F4F4F5353533F3F3F353535363636 - 3636363838383939393A3A3A3B3B3B3D3D3D3F3F3F4141414242424444434747 - 474949494A4B4A4E4E4D5050505253525554545757575B5B5B5E5E5E61616164 - 64646868686C6B6B6F6E6E7373727677777A7A7A7E7F7E8382828787878B8B8B - 9090909595959A9A999E9E9EA4A4A4A9A9A9AFAFAFADADAD4747473D3D3D4141 - 414444444646464747474949494A4A4A4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A49 - 49494848484747474747474646464444444242423F3F3F3D3D3D393939363636 - 323231302F291C3DB41045FF1243FF1042FF1041FF0F40FF0E40FF0E40FF0D3F - FF0C3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0639FF0538FF00 - 35FF183FDB595A5C5756545050504A4A4A4343433E3E3E3A3A3A363636343434 - 3333333232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C - 2C2C2C2C2A2A2A2828282626262323232121211E1E1E1B1A16151A320125DD00 - 25E70024E20024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001FD9 - 001FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001A - CE001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C300 - 15C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB8 - 000FB7000EB6000EB5000DB4000CB2000CB2000CB0000AB3030DA22425312929 - 252626262222221B1B1B1414140B0B0B08080807070705050504040404040403 - 0303030303161616A6A6A6A9A9A8A3A3A29E9E9D9797979292928D8D8D878787 - 8282827E7D7D7878787474746F6F6F6A6B6A6666666060605A5A5A5554555251 - 524D4E4D4A4A4A4646464343434544454B4B4B4848484646464343433F3F3F3D - 3D3D3636373535353334333131312F2F2F2B2B2C2B2C2B292929292929282728 - 2827272626262525251717181414141312131112121111121212121515151514 - 1415141515141414141414131413131413131313131313131313131212121313 - 1313131212121212121212121212121212121111121111111112111111111111 - 1111111011101011100F0F100C0C0C0C0C0C0C0C0C0C0B0C0E0D0D1E1D1E2525 - 262828282C2C2C2F2E2F17171608080908080908090808080808080808080808 - 08070808080807070707070707080707070707070707060607070707060B0B0B - 1414141616161616161616161717171818181818171818181615150C0B0C0707 - 070706070707070706070E0E0E1818171919191A19191919191919191A191A1B - 1A1A151515050506030403030403030303030303030303030303030302030302 - 0303020202020303020202020202020202020202020202020202020201010201 - 0201010201010101020101010101010101010100010101010101010101000000 - 0101010100000100000001010001000100000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303131313838 - 383E3E3E40404040404040404040404040404040404040404040404040404040 - 40403B3B3B3333332F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F323232 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383835353531313131313131313131 - 3131323131353535393939393939393939393939393939393939393939393939 - 3939393939383939383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383738383738373738 - 37373837373A39393A3A3A3A3A3A3A3A393A3A39393939373636373636363636 - 3636363636363636363636363636363636363434342F2F2F2F2F2F2F2F2F2F2F - 2F3131313E3E3E4646464949494E4E4E5151514F4F4F35353536363636363638 - 38383939393A3A3A3C3C3C3E3E3E3F3F3F414141424242454545474747494849 - 4A4B4B4E4E4D4F4F505353535555565858585B5B5B5F5F5F6262626565656868 - 686C6C6C7070707473737878787B7B7C7F7F7F8585858989898D8D8D92929197 - 97979C9C9CA1A1A1A6A6A6ABABABB0B1B09595953D3D3D3F3F3F434343454545 - 4848484949494A4A4A4B4B4B4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4949 - 494848484747474646464545454242423F3F3F3C3C3C383838343434312F2627 - 34661345FF1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF - 0C3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0639FF0537FF0035 - FF374B9758554A4E4F4E4A4A4A4343433F3F3F3B3B3B37373735353533333332 - 32323232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C - 2B2B2B2929292727272525252222221F1F1F1C1B19191A210324CB0026EA0025 - E30024E20024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001FD900 - 1FD8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE - 001ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015 - C20014C10014C00013BF0013BE0011BD0011BC0011BB0010BA0010B9000FB800 - 0FB7000EB6000EB5000DB4000CB2000CB2000BB1000AB5171B5729281F262626 - 2222221D1D1D1616160E0E0E0808080707070606060606060505050303030303 - 03030303828282ABABAAA4A4A4A09F9F9A9A9A9494948F8E8E89898984838480 - 7F807A7A7A7474747070706C6D6D6767676364635E5E5E5656565252524F4E4E - 4A4A4A4747474343434040404343434848484545454343433F3F3F3D3D3D3A3A - 3A3737373434343232323030302E2E2E2C2D2D2B2A2A2A2A2A29292927282828 - 2727202020151515141414131313111112111112141414161514161415151414 - 1514141414141414141414141314131313141413131313131313131213121313 - 1213121312121212121212121211121211121212111112121111111111111111 - 11111111111111110D0C0C0C0C0D0D0D0C0C0C0B0D0D0C181819232223262627 - 2829292A2A2A1A1A1A0809080909090808080808090808090808090807070708 - 0807080808080808080807070707070707070709090911111116161616161616 - 1616171717171717181818171818191819101110080909080807070807070707 - 0707070707070606070A090A1515151A19191A19191919191A1A1A1B1B1B1B1A - 1A16171707060703040303030303030303030303030303030303030303030303 - 0302030302030202020202020202020202020202020202020102020202010102 - 0202020102010101010101010101010101010101010101010101010101010100 - 0100000000000001010000000001000000010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3636363D3D3D4040404040404040404040404040404040403F3F3F3F3F3F3F3F - 3F3F3F3F3D3D3D3535352F2F2F2F2F2F2F2F2F2F2F2F2F2F2F31313139393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383535353131313131313131313131313131 - 3134343439393939393939393939393939393939393939393939393939393939 - 3939393938393938393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838373838373837373837 - 373939393A3A3A3A3A3A3A3A3A3A3A393A3A3937373737363636363636363636 - 36363636363636363636363636363636363030302F2F2F2F2F2F2F2F2F313131 - 3535354545454848484C4C4C4F4F4F5151514040403636363636363838383A3A - 3A3A3A3A3C3C3C3E3E3E3F3F3F4242424343434545454747474A4A4A4C4C4C4F - 4E4F505151545353565756595A595C5B5C5F5F5F6363636666666A6A6A6D6D6D - 7171717575757979787D7D7D8181818585858A8A8A8E8E8E9393939898989C9C - 9CA2A2A2A7A7A7ACACADB2B2B27979793E3E3E4141414444444747474949494B - 4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A494949 - 4747474646464444444242423E3E3E3A3A3A3737373232312F2E281C3EBD1347 - FF1445FF1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C - 3EFF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0639FF0236FF123CE0 - 4E4F524D4C4A4848484343433F3F3F3B3B3B3838383535353434343232323232 - 323232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2C2C2C2C2C2C2A - 2A2A2828282626262323232020201D1D1B1B1A1C0623B80027EF0026E40025E3 - 0024E20024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001FD9001F - D8001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE00 - 1ACD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C2 - 0014C10014C00013C10013C00012BF0011BD0011BC0010BA0010B9000FB8000F - B7000EB6000EB5000DB4000CB2000CB1000AB80B128025251F2525242323231E - 1E1E181818111111090909080808070707060606060606040404030303030303 - 585858ADACACA7A6A6A1A0A09B9B9A959494908F8F8A8A8A8585848080807B7B - 7B7676767272726D6D6D6968686464656060605B5B5B535353504F504C4C4C48 - 48474444444040403F3F3F4140414646464343434141413D3D3D3B3B3B383838 - 3737373333333131313030302D2E2D2C2C2D2B2B2B2A2A2A2929282828271C1B - 1B15151514141413131312121211121216171716151516151516151515141415 - 1414141414141414141414141314131413141313131313131313131312121313 - 1212131212121212121212111211121212111111121211121111111111111011 - 111111110E0D0D0C0C0C0C0C0C0C0C0C0C0D0D14151522212224232426262526 - 27262121210B0A0A080809090909090809080808080808080808080707080707 - 0808070808080807080707070E0E0E1414141616161616161717171717171818 - 181818181919191414140B0B0B08080807070808070807080807080807070707 - 07070707070607070807081212121919191919191919191A1A1A1A1A1A1B1C1C - 19191A0808090303030303040303040304030303020203030202020203030302 - 0203030202020202020202020202020202020202020102020202010202020102 - 0102010201010102010101010101010101010101010101010101010100000101 - 0000000100010100000000000101000000000000010000000000000000000000 - 0000000000000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303434343B3B3B4040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F - 3F3F3F3F3F3F3837382F2F2F2F2F2F2F2F2F2F2F2F3030303939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838373736313131313131313131313131313131333333 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839383839383839383839383838383838383838383838383838 - 3838383838383838383838383838383838383838383837383837383737393838 - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A393838383736363636363636363636363636 - 363636363636363636363636363232322F2F2F2F2F2F2F2F2F31313131313140 - 40404646464949494D4D4D5050504D4D4D3636363737373838383A3A3A3A3A3A - 3D3D3D3E3E3E3F3F3F4242424444444646464848484A4B4B4D4D4D4F4F4F5252 - 52555554575757595A595D5D5D6061606363636767676A6A6A6E6E6E72727276 - 7676797A797E7E7E8282828686868B8C8B8F8F8F9494949999999E9E9EA3A4A4 - A9A8A9ADADADB3B3B35C5C5D4141414444444646464848484B4B4B4C4C4C4D4D - 4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A48484847 - 47474444444141413E3E3E39393935353531302B2A30471646F61447FF1546FF - 1446FF1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3E - FF0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0538FF0437FF3745794A - 483F4545454242423E3E3E3B3B3B383838363636353535333333323232323232 - 3232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2C2C2C2A2A2A2929 - 292626262424242121211F1E1E1D1B160A22980028F70027EE0026E60025E300 - 24E20024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001FD9001FD8 - 001FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001A - CD0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C30015C200 - 14C30014C20013C00013BF0012C00011C30011C70010C30010BF000FB9000FB7 - 000EB6000EB5000DB4000CB2000CB4020CA61E1F2E2424212323231F1F1F1919 - 191313130C0C0C0808080707070707070606060505050303030303032E2E2EAD - ACACA7A7A7A2A2A19D9C9D9796979191918C8C8C8786868382827D7C7D787778 - 7373736E6E6E6A6A6A6666656161615C5C5C5858585050504D4D4D4949494444 - 444141413F3F3F3B3B3B3C3C3C4342424242423E3E3E3C3C3C3A3A3A37383834 - 34343131313232322F2F2F2828292424252121221D1C1D181718171717151615 - 1415141313131211121414131717161615151615151615141515151515141514 - 1414141413141414131414131313131313131313131313121313131213121213 - 1213121312121212121212121211121212111112121111111111111111111111 - 0E0F0E0D0C0D0D0C0C0D0C0D0D0D0D1011102020212120202122222322222222 - 212020201515140E0E0D09090809080809080808080808080808080808080808 - 08070B0B0C121212161616161616161616171717171717181818181818171717 - 1010100808080808080808080708080708070708080707070708070707070707 - 070707070606070707060F0F101919191919191A1A1A1B1B1B1C1C1C1C1B1C1B - 1A1A0C0C0B040403030304030403030303020303020303030302030302030303 - 0202020303020303020302020202020202020201020101020102020201010201 - 0201010101010201010101010101010101000101010100010101010000000100 - 0101000100000001000000010001000000000000000000000000000000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303232323939393E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F - 3F3F3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 383938383938383838373131313131313131313131313131313131313A393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383838383838383838383838383838 - 383838383838383838383838383838383838383838373838373838383A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A393939373636373636363636363636363636363636 - 3636363636363636363535352F2F2F2F2F2F2F2F2F3030303131313636364545 - 454747474B4B4B4E4E4E5050504343433737373838383A3A3A3B3B3B3D3D3D3E - 3E3E4040404242424444444747474848484B4B4B4D4D4D504F50525353555455 - 5757575B5A5A5E5F5E6161606564646868686B6B6B6F6F6F7273737677777B7B - 7B7F7F7F8282828787888C8C8B9090909595969A9A9A9F9F9FA4A5A5AAAAAAB0 - B0B0A9A9A94747474343434545454747474A4A4A4B4B4B4D4D4D4E4E4E4E4E4E - 4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4949494747474444 - 444040403D3D3D393939333333302D232436771649FF1647FF1547FF1546FF14 - 46FF1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF - 0B3EFF0A3DFF093CFF093BFF083BFF073AFF0639FF0238FF233CA04542364040 - 403E3E3E3D3D3D3A3A3A38383836363635353534343433333333333332323232 - 32323030303030303030302F2F2F2F2F2F2E2E2E2D2D2D2C2C2C2A2A2A282828 - 2525252323232121211F1E1C1A1C25101F660623B90026EA0027F00025E60024 - E20024E20024E10023DF0023DE0022DD0022DC0021DB0021DA001FD9001FD800 - 1FD7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD - 0019CB0019CB0018CA0018C90017C70016C60016C60016C50015C60114B4080E - 47090E3C090E3D080E45070E51050E65040E79020F930010B5000FB9000FB700 - 0EB6000EB5000DB4000CB3000BB71317542322192222221F1F1F1A1A1A151515 - 0E0E0E0909090808080707070707070505050404040303030E0D0D9F9F9FAAAA - AAA4A3A49E9E9E9897979292928D8D8D8887878382827E7E7D7979787474746F - 6F6F6B6B6B6666666162625E5D5D59595A5555554E4E4E4A4A4A464546424142 - 3F3F3F3C3C3C3939393838384041413F3F3F3D3D3D3A3A3A363636302F302A2A - 2A2525262020201E1D1E1C1B1C1A1B1B18181818181817171716161514141413 - 1314121212161616171617161615161515161515161515151415141414141514 - 1414141314131413141314131414131413131313131312131312121313131312 - 121312121212121212111212121112111112111211121111111111110F0E0F0C - 0C0D0D0D0D0C0C0C0C0C0C0D0D0D1F1F1F1F20202120212120201F201F1D1E1E - 1C1D1C1B1B1B17181710100F0909080809090808080808080909090F100F1616 - 16161717161716181817171717181818181818191919141414090A0A08080808 - 0908080807070808080808080808070808080708070707070708070707060707 - 0707070607070606070D0C0D1819181919191A1A1A1B1B1B1B1B1B1C1B1C1C1D - 1D0C0C0D03040304040303030303030303020302030302030303030303020303 - 0202020202020203020202020202010202010202020102010201020202010102 - 0101020101010201010101010101010101000101010101000101010101010001 - 0001000001000000000101000000000000000000000000000000000000000000 - 0000000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303131313636363B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3C3C - 3C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F38373739393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383131313131313131313131313131313131313838383A39393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3938393938393838393838393838393838383838383838383838383838383838 - 3838383838383838383838383838383838383838373838373A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A37373737363636363636363636363636363636363636 - 36363636363636363130312F2F2F2F2F2F3030303131313232323F3F3F474747 - 4949494C4C4C4F4F4F5050503C3C3C3838383A3A3A3B3B3B3D3D3D3E3E3E4040 - 404242424444444747474949494B4B4B4D4E4E5050505253535655565858585B - 5B5B5F5E5F6162616665656968686C6C6C7070707474747878787C7C7C80807F - 8584858989898D8E8E9292929797979C9C9CA0A0A0A6A6A6ABABABB1B1B19595 - 954141414444444747474A4A4A4B4B4B4D4D4D4D4D4D4E4E4E4F4F4F4E4E4E4E - 4E4E4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A494949474747444444414141 - 3C3C3C373737333333302C21213C9C164BFF1748FF1648FF1547FF1546FF1446 - FF1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B - 3EFF0A3DFF093CFF093BFF083BFF073AFF0339FF1738BE3B39353B3B3A3B3B3B - 3A3A3A3939393838383636363636363535353333333333333333333232323232 - 323030303030303030302F2F2F2F2F2F2E2E2E2D2D2D2B2B2B29292927272725 - 25252222222020201E1D1B1D1B0F1A1A19121D500822A30026E20026EF0024E6 - 0024E20024E00023DF0023DE0022DD0022DC0021DB0021DA001FD9001FD8001F - D7001ED6001ED5001DD4001DD3001CD2001CD1001BD0001ACE001ACE001ACD00 - 19CB0019CB0018CA0018C90017C70016C60016C50016CF0512780E0C000D0C03 - 0C0C040D0C030C0B010C0B000B0A040A0A09030E840010C1000FB8000FB7000E - B6000EB5000DB4000CBC0910781E1E1720201F1E1E1E1A1A1A1515150F0F0F0A - 0A0A090909070707070707060606050505050505040404818181ABABABA5A4A4 - A09F9F9A99999494948F8F8E8A89898484847F7F7F7A7A7A7574747071706C6C - 6C6767676363625F5F5F5B5A5A5757585252524B4B4B4747464343434040403C - 3C3C3939393737373636363C3D3D3737362E2E2F282828252626232424222223 - 2020201F1F1F1C1B1B1A1B1A1818191818181717171615161515151313131414 - 1418171718171716151516151516151516141515151515151414141414141514 - 1414141414141314131313131413131313131313131313131212121312121212 - 1212121212121212121212111212121111121111111111111010100D0C0D0D0D - 0D0C0D0C0C0C0D0D0D0E1A1A1A1E1E1E1E1D1E1D1E1D1E1E1D1C1C1C1C1C1C1B - 1B1B1B1B1B1B1B1A1918191111110909090D0D0D161616171717171716171717 - 1717171818181818181919191717170D0D0E0809090909090808080808080808 - 090808080808080708080708080A090A08080807070707070707070707070706 - 06070607060706070B0A0B161617191A191A1A1A1C1C1C1C1C1C1D1D1D1D1C1C - 0D0D0D0303040304030303030303030303030302030303020303020202030302 - 0302030302020202020202020202020201020201010202020201010201020101 - 0101020101010101010101010101010101010001010000010101010100010000 - 0001010000000001000000000000000100000000000000000000000000000000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303434343B3B3B3C3C3C3D3D3D3D3D3D3E3E3E2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3737373939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 38383332323131313131313131313131313131313737373A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3839393839383839383839383839383838383838383838383838383838383838 - 38383838383838383838383838383838383838373939393A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3838383736363736363636363636363636363636363636363636 - 363636363434342F2F2F2F2F2F3030303030303232323535354646464747474B - 4B4B4D4D4D5050504D4D4D3B3B3B3A3A3A3B3B3B3D3D3D3F3F3F414141424242 - 4444444747474949494B4B4B4E4E4E5050505353535656555959595C5C5B5F5F - 5F6362636665666969696C6C6C7070707474747979797C7D7D80808184858489 - 89898E8E8E9393939898989C9D9DA1A1A1A7A7A7ADADADB2B2B2808080444444 - 4646464949494B4B4B4D4D4D4E4E4E4F4F4F4E4E4E4F4F4F4F4F4F4E4E4E4E4E - 4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4949494848484545454141413C3C3C37 - 37373332312E2D26203EAD174BFF1749FF1748FF1648FF1547FF1546FF1446FF - 1345FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3E - FF0A3DFF093CFF093BFF083BFF053AFF1338C837363637373537373738383837 - 3737373737373737363636353535343434333333333333333333323232323232 - 3030303030303030302F2F2F2F2F2F2D2D2D2C2C2C2B2B2B2929292626262424 - 242121212020201E1E1F1C1B191C1A101A1912131A3D091F8E0224D60025EE00 - 24E80024E10023DF0023DE0022DD0022DC0021DB0021DA001FD9001FD8001FD7 - 001ED5001ED7001EDC001DD5001CD2001CD1001BD0001ACE001ACE001ACD0019 - CB0019CB0018CA0018C90017C70016C80016C40A0F330E0D060D0D0D0D0D0D0C - 0C0C0C0C0C0C0B0B0B0B0A0B0A00050D660011C60010B9000FB8000FB7000EB6 - 000EB5000DB8020D9C16161C1C1C191C1C1C1919191616161010100A0A0A0909 - 09080808070707060606060606050505040404616161ADADACA7A6A7A1A0A09B - 9A9A9595959090908A8A8A8585858080807A7A7A7576757172726D6D6D696868 - 6464645F5F5F5B5C5C5758575353535050504848484444444040403D3D3D3939 - 393737373434343131312E2D2D2B2B2C2A29292727272425252223232020201F - 1F1F1D1D1D1A1B1A191919191818171717161616161616151414161616181716 - 1717171716151715151615161615151515151515151414141414141514151314 - 1414141414141413141313131313131413131313121212121313131213131212 - 12121212121212121212121211121211121111121111110D0D0D0C0C0D0C0D0D - 0D0D0C0C0C0D1212121C1C1C1E1D1E1D1D1C1D1D1D1C1D1C1C1C1C1B1B1B1B1B - 1B1B1A1B191A1A1A191A18191818181919181918181818171817181818191818 - 18191919191212120A0A0A090909080808090809080808080809080809080808 - 0808080909080A0A0A0A0A0A0909090909090707080707070707070706070706 - 07070607060707080909151515191A191B1B1B1C1C1C1C1D1D1D1C1D1E1E1E0D - 0E0D030403030303030303030303030303030203020302030302030203020202 - 0302020202020202020202020202010202020101010202020201010201020101 - 0101010201010101010101010101010101010100000101010100010101000001 - 0101000000010101010000000001000000000000000000000000000000000000 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303939393A3A3A3B3B3B3D3D3D3E3E3E3030302F2F2F2F - 2F2F2F2F2F2F2F2F343434393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383434 - 343131313131313131313131313131313535353A39393A39393A393939393939 - 3939393939393939393939393939393939393939393939393939393939393938 - 3939383938383938383938383938383838383838383838383838383838383838 - 383838383838383838383838383838383838383B3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A393939373636373636363636363636363636363636363636363636363636 - 3636363130312F2F2F3030303030303232323232323D3C3D4646464848484B4B - 4B4D4D4D4F4F4F4949493A3A3A3C3C3C3D3D3D3F3F3F41414142424245454547 - 47474949494B4B4B4E4E4E5151515353535757575A5A5A5C5C5B5F6060636363 - 6767666A6B6B6D6D6D7171717576757979797D7D7D8282828686868A8A8A8F8F - 8F9394939898999D9D9DA3A3A3A8A8A8ADADADB2B2B26C6C6C4545454848484A - 4A4A4D4D4D4E4E4E4F4F4F5050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E - 4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4848484545454141413D3D3D3838383332 - 312E2D26203FAF184CFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF13 - 45FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3EFF - 0A3DFF093CFF093BFF063AFF1438C73635343636343636363737373737373737 - 3737373737373736363635353534343433333333333333333332323232323230 - 30303030303030302F2F2F2E2E2E2D2D2D2C2C2C2A2A2A292929272727242424 - 2222222020201E1E1E1C1C1D1B1B1A1A191219170D14182C0B1D760322C60025 - E80024E20023DF0023DE0022DD0022DC0021DB0021DA001FD9001FD9001FE200 - 1ED2041BA7001DD2001DD7001CD2001CD1001BD0001ACE001ACE001ACD0019CB - 0019CB0018CA0018C80018D00314990E0E0B0E0E0D0E0E0E0E0E0E0E0E0E0C0C - 0C0C0C0C0C0C0C0B0A02060C490011C00010BA0010B9000FB8000FB7000EB600 - 0EB7000DB10D0F2F15150F1818181717171515151010100B0B0B090909090909 - 080808070707060606060606040404414141ADADACA8A7A7A1A1A19C9C9C9696 - 969190908B8B8B8686868180807D7C7C7878777272726D6D6D69696A65656560 - 60605C5D5D5858585454555151514D4C4C4646464141413E3E3E3B3A3B373737 - 3434343131312D2D2E2C2C2D2929292727272525252222222122211F1F201D1D - 1D1B1C1C19191918181817171716161616161616161618181918171718171717 - 1615171615161616161615161515151515151415151514141414141414141414 - 1413141413131314141413131313131313131313121213121212121312121212 - 121212121211121112111111111111111111120E0E0E0D0D0D0C0C0D0D0D0D0D - 0C0D0C0D0C0C0C0C100F0F1616161C1B1C1C1C1D1C1D1C1C1C1C1B1B1B1B1B1B - 1B1B1B1A1A191A19191A1919191919191919191919191919191A1A1615160C0D - 0D0A09090909090909090909090909080909080908080809080908090A0A0A0A - 0A0A0A0A0A0A0A0A0A09090A090A090909080709070707070707070707060607 - 0706060606070809091415141A1A1B1B1B1B1C1C1C1D1D1C1E1E1E1E1D1E0D0D - 0D03040303030403030303030303030303030303030302030303020302020202 - 0203020202020202020202020202010202020201020102020201020102010101 - 0101010101010101010101010101010101010101010001010100000101000001 - 0100010101000000000000000001000000000000000000000000000000000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303636363939393A3A3A3C3C3C3D3D3D3232322F2F2F2F2F2F2F2F - 2F2F2F2F3333333A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838353535313131 - 3131313131313131313131313333333A39393A39393A39393A39393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393838393838393838393838383838383838383838383838383838383838 - 3838383838383838383838383838383A3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A37373737363636363636363636363636363636363636363636363636363635 - 34342F2F2F3030303030303131313232323333334242424747474949494B4B4B - 4E4E4E4F4F4F4848483C3C3C3E3E3E3F3F3F4242424343434545454747474A4A - 4A4C4C4C4F4F4F515151545454575757595A5A5D5D5D6160616363636767676A - 6B6A6E6F6E7171717676767A7A7A7E7E7E8282828787878B8C8C909090959495 - 9A9A9A9F9F9FA4A4A4A9A9A9AEAEAEB2B2B25A5A5A4747474949494C4C4C4D4D - 4D4F4F4F5050505151515151515050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4C - 4C4C4C4C4C4C4C4C4B4B4B4848484545454242423E3E3E3838383333332F2C23 - 223EA3184DFF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345 - FF1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3EFF0A - 3DFF093CFF073CFF1538C1333330353433363636363636373737373737373737 - 3636363636363535353535353434343333333333333333333232323232323030 - 303030303030302F2F2F2E2E2E2D2D2D2C2C2C2A2A2A29292927272725252523 - 23232121211F1F1F1C1C1C1B1B1B19191918171217150914151B0C1B700124E1 - 0024E20023DF0023DE0022DD0022DC0021DB0021E20020DF061C9D0E153B1212 - 0C0B165B001DD4001DD8001CD2001CD1001BD0001ACE001ACE001ACD0019CB00 - 19CB0018CA0018D10A1155100E040F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0D0D0D - 0C0C0C0C0B06090C2B0011B90011BD0010BA0010B9000FB8000FB7000EB6000D - BC080D53100F051212121313131313131010100C0C0C0A0A0A09090909090908 - 0808060606060606050505242424ACABABA8A8A8A3A2A29D9D9D989797939292 - 8C8C8C8786878382827D7D7D7878787373736E6E6F6B6A6A6565656161615D5D - 5D5959595455545252524D4D4D4A4A4A4444443F3E3F3B3A3A37373735353532 - 32322F2F2F2C2D2D2B2B2A2828282525252323232222211F1F1F1D1D1D1E1D1E - 1D1C1D1B1B1C1B1B1C1B1B1B1C1C1B1B1B1A1919191818171817171716161716 - 1617161516151516151515151515151514141414141414141414141414141414 - 1414141413131414131313131314131313131313131213121213121212121312 - 1212121212111212111112111211120E0E0F0D0D0D0C0D0D0D0D0D0D0C0D0C0C - 0C0C0D0D0C0C0D0C0C0C0B0C0C1112121919191C1D1C1C1C1C1B1B1B1B1B1B1B - 1B1B1A1B1B191A1A1A1A191A1A1A1A1A1A1919191211120A09090909090A0A0A - 0909090909090909090909090909080808080909090B0B0A0A0A0A0A0A0A0A0A - 0A0A0A0A0A090A0A0A0A0A090A09090909080807070707070706070707070606 - 07060606070707081212121A1A1B1B1B1B1C1C1C1D1C1D1D1E1D1D1E1D0D0E0D - 0303030303040303030303030303030303030302020203030303020202020202 - 0203020202020202020202010102020101010201020201010201010101020101 - 0201010201010101010101010101010101010101010100000101010101000001 - 0000010000000001010000000001000000000000000000000000000000003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303434343838383939393B3B3B3D3D3D3635362F2F2F2F2F2F2F2F2F2F2F2F - 3131313A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383837373631313131313131 - 31313131313131313131313A3A393A39393A39393A39393A3939393939393939 - 3939393939393939393939393939393939393939393939393939393939383939 - 3839383839383839383839383838383838383838383838383838383838383838 - 38383838383838383838383939393B3A3A3B3A3A3A3A3A3A3A3A3A3A3A393938 - 3736363736363636363636363636363636363636363636363636363636363232 - 323030303030303131313131313333333535354545454848484A4A4A4C4C4C4D - 4D4D4E4E4E4747473E3E3E3F3F3F4242424343434646464747474A4A4A4C4C4C - 4F4F4F5252525555555757575B5B5B5E5E5E6161616464646868686B6B6B6F6F - 707372737776767B7B7C7F7F7F8383838787878C8C8C9191919596969A9A9A9F - 9F9FA5A5A5AAAAAAB0B0B0ABABAB4C4C4C4949494B4B4B4D4D4D4F4F4F505050 - 5050505252525252525151515050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D - 4D4C4C4C4B4B4B4949494646464242423E3E3E3A3A3A343434312D222539841A - 4DFF194BFF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF - 1244FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3EFF0A3D - FF073DFF1A37A534312634333335353536363637373737373737373736363636 - 3636363636353535353535343434333333333333333333323232323232303030 - 3030303030302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2929292828282525252424 - 242222221F1F1F1C1C1C1B1B1B18181817171616140B12162E0124DC0024E400 - 24E10023DF0023DE0022E00022E7041FB70D175014130E14130A131210131206 - 0C1555011DD3001DD9001CD2001CD1001BD0001ACE001ACE001ACD0019CB0019 - CF0217B70F101C10100C1010101111111111111111111010100E0E0E0D0D0D0C - 0C0A0B0C130111A80011C00011BB0010BA0010B9000FB8000FB7000EC0050E72 - 0E0E060E0D0D0E0E0E0F0F0F0E0E0E0C0C0C0B0B0B0909090909090808080707 - 070606060505050D0D0DA09F9FAAAAAAA4A4A49E9E9E9897979392928D8D8D88 - 88888383837D7D7D7979797474747070706A6B6A6666666262635E5E5E5A5A5A - 5555565252524F4E4E4B4B4B4747474141413C3C3C3838393536353232322F2F - 2F2D2D2D2B2A2A2829282525262525252424242524252323232222222020201E - 1E1E1D1D1D1C1C1C1C1C1B1B1B1A191919181718181717171616171616171616 - 1715151616161616151515141514151415141514151414141414141414141413 - 1414141314131313131313141313131313131213131312121213121312131212 - 12121212121112111212110F10100E0D0E0D0D0D0D0D0D0C0D0C0D0C0D0C0C0C - 0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0F0F0E1717161C1C1C1B1C1C1B1B1B1B1B - 1A1A1A1A1A1B1A1A1A1B1615160B0C0B0A090A090A0A09090A0A090A09090A0A - 0909090909090909090A0A0B0B0B0B0B0B0B0B0A0B0A0B0A0A0A0A0A0A0A0A0A - 0A0A0A0A0A0A0A0A090A090A0909090808080707070707070707070707070607 - 060706060807081212121A1A1A1B1B1B1C1C1C1C1C1D1D1E1E1D1E1E0D0E0D03 - 0403030304030303030303030203030303030302020203020202030302020202 - 0202020202020202020202010102010201020201020201020101020102010101 - 0201010101010101010101010101000101010000000101010101000101010000 - 0000000101000000000000000000000000000000000000000000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303333 - 333737373939393A3A3A3C3C3C3838382F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383131313131313131313131 - 313131313131313838373A3A393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393938393938 - 3938383938383938383938383838383838383838383838383838383838383838 - 383838383838383838383B3B3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A37373737 - 3636363636363636363636363636363636363636363636363636363535313131 - 3030303131313131313232323333333939394646464949494A4A4A4C4C4C4D4D - 4D4E4E4E4C4C4C4040404242424444444646464848484B4B4B4D4D4D4F4F4F53 - 53535555555757575B5B5B5F5F5F6161616565656868686C6C6C706F70737474 - 7778787B7B7C8080808484848989898D8D8C9291929696969B9B9BA1A1A1A6A6 - A5ABABABB0B0B09D9D9D4A4A4A4A4A4A4C4C4C4E4E4E50505051515152525252 - 52525252525252525151515050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4C4C4C - 4B4B4B4A4A4A4747474343433F3F3F3B3B3B35353531302A2A33561B4CFD1A4C - FF1A4BFF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF12 - 44FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3DFF093DFF - 223373322F253333333535353636363737373737373838383838383636363636 - 3636363635353535353534343433333333333333333332323232323230303030 - 30303030302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A282828262626242424 - 2222221F1F1F1D1D1D1A1A1A18181816150E0F18440025E20024E50024E20023 - E00023E40022DC0B1C7A15161C16140A1515131414141414141313131312070D - 1545011DCC001DDA001CD2001CD1001BD0001ACE001ACE001ACC001AD607157B - 1210071211111212121212121212121212121111111010100F0F0F0D0D0B0C0C - 0B03108C0012C50011BC0011BB0010BA0010B9000FB8000FBD030E900E0E100E - 0E0C0E0E0E0D0D0D0D0D0D0D0D0D0C0C0C0A0A0A090909090909080808060606 - 050505070707888888AAAAAAA5A5A59F9F9F9A99999493938E8E8E8989898483 - 847F7F7F7979797575756F70706B6B6B6666666262625F5F5F5A5A5A57575752 - 52524F50504B4B4B4848474444443E3E3E3939393636363334343030302E2E2E - 2E2D2E2D2D2D2B2B2B2929292727272626252324232222222020201F1F1F1E1E - 1D1C1C1C1C1C1C1B1B1A19191918181719171817161617161617161617151516 - 1616161515151515151515151515141515141414151414141414131414141414 - 1313131413141314131413131313131312131313121312121212121312121212 - 121112121211121111110D0D0F0D0D0D0D0D0E0C0D0D0D0D0D0D0C0D0C0C0C0D - 0C0C0C0D0C0C0C0C0C0B0C0B0B0B0C0B0B0E0E0D1617171C1C1C1C1C1C1C1C1C - 191A1A0F0F0E0A0A0A0A0A0B0A0A0A0A0A0A0A0A0A0A0909090909090A0A0909 - 090B0B0C0C0C0C0C0C0C0C0B0B0B0B0B0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A - 0A0A0A0909090A0909090909090A080808080707070607070607070707070706 - 0606070808071212131A1A1B1B1B1B1C1C1C1D1D1D1D1D1E1F1E1F0F0F0F0403 - 0304030303030303030303030303030303030303020202020203020203030303 - 0202020202020202020202020101020202010202020201010201020101010101 - 0101010101010101010101010101010101010100010101000100000001000100 - 0000000100000000000000000000000000000000000030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030323232373737 - 3838383A3A3A3C3C3C3B3B3B2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3737373A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838333333313131313131313131313131 - 3131313635353A3A393A3A393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393839393839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383A3A393B3B3A3B3A3A3B3A3A3A3A3A3A3A3A3939393736363636 - 3636363636363636363636363636363636363636363636363635353530303031 - 31313131313232323232323535353B3B3B4747474949494B4B4B4C4C4C4E4E4E - 4E4E4E4D4D4D4444444444444747474848484B4B4B4D4D4D5050505353535555 - 555858585B5B5B5E5F5F6262626666666868686D6C6D7070707474747878787C - 7C7C8080808585858989898E8E8E9292929797979C9C9CA2A1A2A6A6A7ABABAB - B1B1B18F8F8F4A4A4A4C4C4C4E4E4E4F4F4F5151515252525353535252525252 - 525252525252525151515050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4C4C4C4B - 4B4B4848484545454040403B3B3B3737373232302E2E301F46D41B4EFF1A4CFF - 1A4BFF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244 - FF1143FF1042FF1041FF0F40FF0E40FF0E40FF0D3FFF0B3FFF0E3CEB2B2E3B30 - 2F2B323232353535373737373737383838383838383838383838363636363636 - 3636363535353535353434343333333333333333333232323232323030303030 - 303030302F2F2F2E2E2E2D2D2D2C2C2C2C2C2C2A2A2A28282827272724242421 - 21211E1E1E1C1C1C19191918160D0F1B540026E70025E50024E20024E50222CD - 111A4918160B1817141717181717171616161515151515151414131412070D15 - 43021CC7001DDB001CD2001CD2001BD2001AD3001AD9001AD30E133713120A13 - 13131414141414141313131313131212121111111010100E0E0E0D0C03050F6F - 0013CA0011BD0011BC0011BB0010BA0010B9000FBB010FAB0D0D190E0E0A0E0E - 0E0E0E0E0D0D0D0D0D0D0C0C0C0B0B0B0A0A0A09090908080807070706060605 - 0505727272ABABABA5A5A5A0A0A09B9A9A9494948F8F8F8A8A8A848484808080 - 7B7A7A7575757171716C6C6C6868686364645F5F5F5A5A5A5858585353535050 - 504B4B4C4848494444444242423D3C3D3838373736363535353434343131312D - 2E2D2B2B2B2929292828282625262425242322222020201F1F1F1E1E1E1C1D1C - 1C1C1C1B1B1A1A1A191818181918181717161716161716161716161616161615 - 1515161515151514151514151515151514141414141414141414141314141414 - 1314131314131313131313131313131313121212121212131213131212121212 - 11121212111111121110101110100F0D0D0E0C0D0D0C0D0C0C0D0C0C0C0C0D0C - 0C0C0C0C0C0C0C0C0B0C0B0C0C0C0C0C0C0C0B0C0C0C1616161515150C0C0B0B - 0A0B0A0B0B0A0B0A0A0A0A0A0A0A0A0A0A090A0A0A0A090A0A0B0D0C0D0C0C0C - 0C0C0C0C0C0C0B0B0B0C0B0B0B0B0A0B0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A - 0A0A09090A0A0A09090A09090908080907070707070706060706060707070707 - 06060708071212121A1A1A1C1C1C1D1D1D1D1E1E1F1F1E2021200E0E0E040303 - 0303030303030303030303030303030303030203020302030202020302020202 - 0202020202020202020202020202010202020201010101020201010201010201 - 0101010101010101010100010000010001010101010100000100010000000000 - 0000000000000000000000000000000000003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303636363838383A - 3A3A3B3B3B3D3D3D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3535353A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383835353531313131313131313131313131313133 - 33333A3A393A3A393A3A393A39393A39393A39393A3939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383938 - 3839383839383839383838383838383838383838383838383838383838383838 - 38383838383B3B3B3B3B3A3B3A3A3B3A3A3A3A3A3A3A3A373737373636363636 - 3636363636363636363636363636363636363636363737373333333131313131 - 313232323232323434343636363D3D3D4848484A4A4A4B4B4B4D4D4D4E4E4E4F - 4F4F5050504B4B4B4747474949494B4B4B4E4E4E505050535353565656585858 - 5C5C5C5F5F5F6262626566666969686C6D6D7170717474747979797D7D7D8181 - 818585858989898F8E8E9394939898989C9D9DA2A1A2A7A7A7ADADADB3B3B384 - 84844B4B4B4E4E4E4F4F4F515151525252525252535353535353535353525252 - 5252525252525151515050504F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4B4B4B4949 - 494646464242423D3D3D393939353535312E25273A7D1B4FFF1B4DFF1A4CFF1A - 4BFF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244FF - 1143FF1042FF1041FF0F40FF0E40FF0D40FF0B40FF1A35A02E2C23302F2F3232 - 3235353537373738383839393938383838383838383838383836363636363636 - 3636353535353535343434333333333333333333323232323232303030303030 - 3030302F2F2F2E2E2E2D2D2D2D2D2D2B2B2B2A2A2A2929292626262323232020 - 201E1E1E1A1A1A1A170C0E1D670027ED0026E50025E30025E90422BC1918151A - 19161A1A1A1A1A1A1A1A1A1919191818181616161616161514141413090F1436 - 021CBF001EE2001DDC001CCE021ABA0518990A166C1313131313131515151515 - 151515151616161414141414141313131111111010100F0D03080F510013CB00 - 13C10011BD0011BC0011BB0010BA0010BB000FB60B0D310E0E080E0E0E0E0E0E - 0E0E0E0D0D0D0D0D0D0C0C0C0B0B0B0A0A0A0808080808080707070606066060 - 60ACACACA6A6A6A1A1A19B9B9B9595959090908A8A8A8585858080807B7B7B76 - 76767272726D6D6D686868646564605F5F5B5B5C5858585353535050504D4D4C - 4949484645454243423F3F3F3D3D3D393A3A3636363434343131312E2E2E2D2D - 2D2A2A2A2828282626262525252222232121211F1F1F1E1E1E1D1C1C1D1D1C1B - 1B1A1A1A19191818191818171717181616171616171516171616161616161516 - 1516151515151515151515151515141414141415141414141413141314141414 - 1313131313141313131313121312131312121313131313121212121212121212 - 12121111121211111111111110101010100F0E0F0D0D0D0D0C0C0C0D0C0C0C0D - 0C0C0C0C0C0C0C0B0C0B0B0C0C0C0C0C0C0C0B0B0B0B0B0B0B0A0B0A0B0B0A0A - 0A0A0A0B0A0A0A0B0A0A0A0A0B0A0A0B0C0B0C0D0C0C0D0D0D0D0D0C0C0D0C0D - 0C0C0C0B0B0C0B0B0B0B0B0B0B0B0A0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A - 0A090909090A0A0909090A0A0808090707070707070707070706060606070607 - 060708071212121A1A1A1C1C1C1D1D1D1E1E1E2222222323240A0A0903030303 - 0303030303030303030303020303020203030303020302020302020303020202 - 0202020202020102020202020201020202010101010102010101010101010101 - 0101010101010101010101000101000101010000010001010001010001000000 - 0100000000000000000000000000303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303535353737373939393B3B - 3B3D3D3D3232322F2F2F2F2F2F2F2F2F2F2F2F3333333A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383737363131313131313131313131313131313131313939 - 393A3A393A3A393A3A393A39393A39393A39393A393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383838383838383838383838383838383838383838383838 - 383A3A3A3B3B3B3B3B3A3B3A3A3B3A3A3A3A3A39393937363636363636363636 - 3636363636363636363636363636363636373737373737333233313131323232 - 3232323434343535353737373E3E3E4A4A4A4B4B4B4D4D4D4E4E4E4F4F4F5050 - 505252525252524D4D4D4B4B4B4E4E4E5050505353535656565959595C5C5C5F - 5F5F6363636666666A6A6A6C6D6D7171707475757979797D7D7D818281858585 - 898A8A8F8E8E9493949898989C9D9DA3A3A3A9A9A9AFAFAFB4B4B47B7B7B4D4D - 4D4F4F4F51515152525253535354545454545454545454545452525252525252 - 52525252525151515050504F4F4F4F4F4F4F4F4F4D4D4D4C4C4C4A4A4A474747 - 4444444040403B3B3B3636363332302E2F322047D31B4FFF1B4CFF1A4CFF1A4B - FF194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244FF11 - 43FF1042FF1041FF0F40FF0D41FF103DE9282C3D2E2C27303131333333353535 - 3737373939393939393939393939393838383838383838383636363636363636 - 3635353535353534343433333333333333333332323232323231313131313131 - 31313131313030302F2F2F2E2E2E2C2C2C2A2A2A2828282525252222221F1F1F - 1D1D1D1C190C0C1F7D0028F40026E60026E50025E60024DD161C3B1D1C161D1D - 1D1D1D1D1D1D1D1C1C1C1B1B1B19191919191917171715151615140A0F153807 - 1A920B17680F143712131A13121014130C151414161616161616161616171717 - 1717171717171515151414141313131111110F0F0A0C0F290212A20013C30013 - C80012C00011BC0011BB0010BE000FC3090E460E0E050E0E0E0E0E0E0E0E0E0E - 0E0E0D0D0D0C0C0C0C0C0C0A0A0A0909090808080707070707074F4F4FADADAD - A7A7A7A2A1A19C9B9B9695959090908B8A8B8585858080807C7B7B7777777272 - 726D6D6D6969696565656060605C5C5D5858585454545050504D4D4D494A4A45 - 46464242423F3F3F3D3D3D3A3A3A3636363534343132312E2E2E2D2D2C2B2A2B - 2928282626262525252323232122211F1F1F1E1D1E1C1D1C1C1D1C1B1B1B1A1A - 1919181819181817171618171617161617161617161616161616151515161615 - 1515151515151415151515141414141414141414141414141414131314131313 - 1414141313131313131313131313121313121212121312121212121212121212 - 1212111212111112111111111011101011100F0F0E0F0E0D0D0D0C0D0D0C0C0C - 0C0C0C0C0B0C0C0C0B0C0C0C0C0B0B0B0C0B0C0B0B0B0B0B0B0B0B0B0B0B0A0A - 0B0A0B0B0A0A0B0B0C0D0D0D0D0D0D0D0C0D0D0D0D0C0D0C0C0C0C0C0C0C0C0C - 0C0B0B0B0C0B0B0B0B0B0A0B0B0A0A0A0A0B0A0B0A0B0A0A0B0A090A0A0A090A - 0A090A0A090A0909090909090909070707070707070706060607070607070607 - 0708071312121B1B1B1D1D1D2020202323222626262526260A0B0A0303030303 - 0303030303030303030303030203030303030302030202030302030302030202 - 0202020202020202010102020101010201020201010101010102010102010101 - 0101010101010101010101010100010001010101000000010000000000010000 - 0000000000000000000030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303333333737373939393A3A3A3D3D3D - 3535362F2F2F2F2F2F2F2F2F2F2F2F3030303A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 39383939383938383131313131313131313131313131313131313737373A3A3A - 3A3A393A3A393A3A393A39393A39393A39393A39393939393939393939393939 - 3939393939393939393939393939393939393939393939393839393839383839 - 3838393838393838383838383838383838383838383838383838383838393938 - 3B3B3B3B3B3B3B3B3A3B3A3A3B3A3A3A3A3A3837373636363636363636363636 - 3636363636363636363636363637373737373738373732323232323233333334 - 34343535353636363737373D3D3D4A4A4A4D4D4D4D4D4D4F4F4F505050525252 - 5454545555555656565252525151515353535656565959595C5C5C5F5F5F6363 - 636666666A6A6A6E6D6E7172727475747979797D7D7E8182828687868B8A8A8F - 8F8F949494999999A0A0A0A6A6A6ABABABB0B0B0B6B6B67171714E4E4E4F4F4F - 5151515454545454545555555555555454545454545454545252525252525252 - 525252525151515050504F4F4F4F4F4F4F4F4F4D4D4D4B4B4B49494945454542 - 42423E3E3E393939343535312F272B35581D4DF31C4EFF1B4CFF1A4CFF1A4BFF - 194AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244FF1143 - FF1042FF1042FF0E41FF20306F2C291F2E2E2E31313134343437373738383839 - 39393A3A3A3A3A3A3A3A3A383838383838383838383838363636363636363636 - 3535353535353434343333333333333232323232323232323232323232323232 - 323333333333333232322F2F2F2C2C2C2A2A2A2727272424242121211E1E1D1C - 1B130A22950028F40027E60026E60026E50025EB12206A201E131F1F1F202020 - 1F1F1F1E1E1E1D1D1D1C1C1C1B1B1B19191917171717171716151015140E1614 - 0915140E15141215141316151516161617171718181818181818181817171717 - 17171616161515151313131212121111110F0F0D0D0E12090F3D04107F0012B7 - 0012C70011C50111B7070F670E0E170E0E0C0E0E0E0E0E0E0E0E0E0F0F0F0D0D - 0D0C0C0C0C0C0C0B0B0B0A0A0A0909090707070707073E3E3EAEADAEA8A7A7A3 - A2A29D9C9C9796969191918C8C8B8686868181817D7D7D7777777273726D6D6D - 6969696565656161615D5C5C5858585555555151514D4D4D4A4A4A4645454343 - 433F40403D3D3D3A3A3A3636373435353131312E2E2E2D2D2D2B2B2B28292826 - 2726252525232323222222201F1F1E1E1E1D1D1D1C1D1C1B1B1B1A1A19191918 - 1918181817171817171716161716161716161616161615161515161615161515 - 1515151515151515151514141515151414141414141414141413141413141413 - 1314131313131313131312131312131312121213131212121212121112111212 - 121111121111111010111010111010101010100F100F0F0F0D0E0D0C0C0D0C0C - 0C0C0C0C0C0C0C0C0B0C0B0C0B0B0C0B0B0B0B0C0B0B0B0B0B0B0B0B0B0C0B0D - 0D0E0D0E0D0E0D0D0D0D0D0D0D0D0C0D0D0D0C0C0C0C0C0D0C0C0D0C0C0C0B0B - 0C0B0B0B0B0A0B0A0A0A0B0B0A0A0A0A0A0A0A0B0B0A0A0A0A0A0A0A0A0A0A09 - 09090A0909090A0A090909090907070706070606060707070707060707060607 - 07071414141D1D1D2121212525252829292C2B2B2B2A2B0C0C0C030304030304 - 0303030303020303030203020203030303020302020202020202020202020202 - 0201020202020101020101010201020101010102010202020102010101010101 - 0101010101000101010100010101000000000101000000010101010100010100 - 0000000000003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303232323636363838383A3A3A3C3C3C3939392F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F3838383A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 383938383333333131313131313131313131313131313434343A3A3A3A3A3A3A - 3A393A3A393A3A393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939383939383938383938 - 383938383938383838383838383838383838383838383838383838383A3A3A3B - 3B3B3B3B3B3B3B3A3B3A3A3B3A3A3A3939373636363636363636363636363636 - 3636363636363636363737373737373838383737373333333333333434343535 - 353636363737373939393C3C3C4949494D4D4D4F4F4F51515152525254545455 - 55555757575959595B5B5B5A5A5A5B5B5B5B5B5B5C5C5C5F5F5F636363676767 - 6B6B6B6E6E6E727172767675797A7A7D7D7D8382838787878C8C8C9292929798 - 979D9D9DA2A2A2A7A7A7ACACACB1B1B1B7B7B769696950505051515153535354 - 5454555555555555555555555555545454545454545454525252525252525252 - 5252525151515050504F4F4F4F4F4F4E4E4E4D4D4D4A4A4A4747474545454141 - 413C3C3C373737333333312E252838761D4EFB1C4EFF1B4CFF1A4CFF1A4BFF19 - 4AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244FF1144FF - 1043FF1D32882B29202D2C2C3030303232323535353838383939393939393B3B - 3B3B3B3B3A3A3A3A3A3A38383838383838383838383836363636363636363635 - 3535353535343434333333333333323232323232323232323232333333353535 - 3636363535353232322D2D2D2B2B2B2828282525252222221F1F1D1C1C1C0725 - B40028F10027E70027E70026E50026F00B239C21201A22222122222221212121 - 21212020201F1F1F1D1D1D1C1C1C1A1A1A1A1A1A181818171716161616171717 - 1717171717171818181717171818181919191919191919191919191818181818 - 181616161515151313131212121010100F0F0D0F0E050D0D060B0E2606107703 - 11900B0E2E0F0E040F0F0C0F0F0F0F0F0F0E0E0E0F0F0F0F0F0F0F0F0F0D0D0D - 0C0C0C0B0B0B0A0A0A090909080808070707313131AEAEAEA8A8A7A3A3A29E9D - 9E9897979291918D8C8C8787878282827D7D7D7878787373736F6E6E6A6A6A66 - 65656161615E5E5E5959595655555151514E4D4D4A4A4A474747434343403F40 - 3D3D3D3A3A3A3737373435343232322F302F2D2D2D2A2B2A2929292626262525 - 25232323222222201F1F1E1E1E1D1D1D1D1D1D1C1C1B1B1A1A19191819181818 - 1717181716181717171616171616171616161616161616161515151515151515 - 1515151515151515141515151514151414141414141414141414131314131314 - 1314131413131313131213131313121312121312121213121212121211121212 - 11111210111111111110101110101010101010101010101010100E0D0E0C0C0C - 0C0C0C0B0C0C0C0C0C0C0B0B0C0B0C0B0B0B0B0B0B0D0D0D0E0D0E0D0D0E0D0E - 0D0D0D0D0D0D0E0D0D0D0D0D0D0D0D0C0D0D0D0C0D0D0C0C0C0D0C0B0C0B0B0B - 0B0B0B0B0B0A0B0B0A0A0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A - 0A0A0909090A090A090908090707070706070707070606060706060707070A09 - 0A1A1A1A2222222726272C2C2C30303031313117181803040304030403030303 - 0303030303030303030303030302030202020202030303020302020202020202 - 0202020202020202010102020102020102010101020101010101010102010101 - 0101010101010101000100000100010001000001000100000000000100000000 - 0000303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303131313636363838383A3A3A3C3C3C3D3D3D2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F3535353A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3535353131313131313131313131313131313131313A3A3A3A3A3A3A3A3A3A3A - 393A3A393A3A393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393938393938393838393838 - 3938383938383838383838383838383838383838383838383938383B3B3B3B3B - 3B3B3B3B3B3B3A3B3A3A3B3A3A38383836363636363636363636363636363636 - 3636363636373737373737383838383838383838343434343434353535363636 - 3737373939393A3A3A3C3C3C4645464F4F4F5151515252525454545656565757 - 575A5A5A5C5C5C5E5E5E6060606363636464646666666767676A6A6A6C6C6C70 - 70707373737979797D7D7C8080808685868B8B8B908F909494949999999D9E9D - A3A3A3A8A8A8ADADADB3B3B3B9B8B86363635151515353535454545555555656 - 5656565656565656565654545454545454545454545452525252525252525252 - 52525151515050504F4F4F4F4F4F4E4E4E4C4C4C4949494747474343433F3F3F - 3B3B3B363737333332312E252838711E4CED1B4FFF1B4CFF1A4CFF1A4BFF194A - FF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1246FF1243F91E33822A - 281F2D2C2A2F2F303232323535353737373939393A3A3A3B3B3B3B3B3B3B3B3B - 3B3B3B3A3A3A3A3A3A3838383838383838383838383636363636363636363535 - 3535353534343433333333333332323232323233333333333335353536363636 - 36363333332F2F2F2C2C2C292929262626232323201F1C1B1D260327D50028EF - 0028E90027E70027E70026EB0425CA2021282322202424242323232323232121 - 212121212020201E1E1E1D1D1D1C1C1C1B1B1B1A1A1A1919191919191A1A1A1A - 1A1A1A1A1A1A1A1A1919191A1A1A1A1A1A1A1A1A191919191919181818171717 - 1616161515151313131212121010101010100F0F0E0E0E080E0E090E0E0E0F0E - 080E0E0E0F0F0F1010100F0F0F1010100F0F0F0F0F0F0F0F0F0E0E0E0C0C0C0C - 0C0C0B0B0B0A0A0A090909080808262626AFAFAFA9A9A8A3A2A39E9D9D989898 - 9292928D8D8D8888888282827D7D7D7878787373736E6E6F6B6B6B6566656161 - 615E5E5E5959595656565152514D4E4E4A4A4A4747474343434140403D3D3D3A - 3A3A3737373535353231322F302F2E2E2E2B2B2B292929272627252525232323 - 2122221F20201F1F1E1D1D1D1D1D1D1C1B1B1B1B1A1A19181918181817171817 - 1718161717171717161617161616161616161616161616161615151515151515 - 1515151414141415151414141414141414141414141414131413131314131413 - 1413141313131313131213121212131212131312121212121212121211111111 - 11111110111010111010101010100F100F0F10100F0F0F100F0F0F100E0D0F0C - 0C0C0C0C0C0C0C0B0B0B0B0C0C0C0E0E0E0E0E0E0E0E0E0D0E0D0E0E0E0E0E0E - 0D0E0D0E0D0D0D0D0D0D0D0D0C0D0D0D0D0C0C0C0C0D0C0C0C0B0C0C0B0B0B0B - 0B0B0B0B0B0B0A0A0B0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A09090A0A0A09 - 0A090909090A09090908090707070707070707070607060708080A0909161616 - 2424242A2A2A3030303434343737370707070303030303040403030303030303 - 0303030303030303030203030203030203020302020202020202020202020202 - 0202020102020201010102020102020101020201010101010202010201010101 - 0101010001010101000101010100010000000100000000000003000001003030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303636363838383A3A3A3C3C3C3E3E3E3131312F2F2F2F2F2F - 2F2F2F2F2F2F3333333A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393838373731 - 31313131313131313131313131313131313737373A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A39393A39393A39393A39393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839383839383839 - 38383938383838383838383838383838383838383838383A39393B3B3B3B3B3B - 3B3B3B3B3B3A3B3A3A3B3A3A3737373636363636363636363636363636363636 - 3637373737373738383838383839393939393935353535353536363637373739 - 39393A3A3A3C3C3C3E3E3E4242424C4C4C5353535454545656565858585A5A5A - 5D5D5D5F5F5F6161616363636666666969696C6C6C6F6F6F7272727676767878 - 787D7D7D8080808484848888888C8C8C9191919596959B9A9A9F9F9FA4A4A4A9 - A9A9AFAFAFB4B4B4BAB9BA5E5E5E525252535353565656565656565656575757 - 5757575656565656565454545454545454545454545252525252525252525252 - 525151515050504F4F4F4F4F4F4D4D4D4B4B4B4949494545454242423E3E3E3A - 3A3A363636333332312E242C334E2145C11C4DFF1A4EFF1A4DFF1A4BFF194BFF - 1849FF1749FF1748FF1548FF1448FF1447FF183FCD232F5C2B281F2C2C2A2F2F - 2F3232323535353737373939393A3A3A3B3B3B3C3C3C3C3C3C3B3B3B3B3B3B3B - 3B3B3A3A3A3A3A3A383838383838383838383838363636363636363636353535 - 3434343333333232323232323232323131313232323434343636363636363333 - 332F2F2F2C2C2C292929262626222222201F17171F460029E90029ED0028EA00 - 28E90027E70027E90026E31B234724231D242424242424242424232323222222 - 2222222121211F1F1F1D1D1D1C1C1C1D1D1D1C1C1C1B1B1B1B1B1B1B1B1B1C1C - 1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191918181817171716 - 1616141414141414121212111111111111101010100F0F100F0E101010101010 - 1010101010101111111010101010101010100F0F0F0E0E0E0E0E0E0C0C0C0B0B - 0B0A0A0A0909090808081D1D1DB0B0B0AAAAA9A4A4A39E9E9E9898989393938E - 8E8E8888888383837D7D7D7878787474747070706B6B6B6665656262635E5E5E - 5A5A5A5656565151514E4E4E4A4A4A4747474444444141413D3D3D3A3A3A3737 - 373535353232322F2F2F2E2E2E2C2C2C29292927272626252523232322222220 - 1F201F1F1F1D1D1D1D1D1D1C1C1B1B1B1A191919191918181717181717171717 - 1717171717171716161716161616161616161616161615151515161515151515 - 1515141514151515151414141514141414141414141413141313141413141313 - 1314131313131313131313121313131212121212121212121111111111121110 - 1111101110111010101010101010100F0F0F101010100F0F100F0F0F0F0F0D0D - 0D0B0C0D0E0E0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0D0D0E0E0E0E0D - 0D0D0D0D0D0D0D0D0C0D0D0D0D0D0D0C0D0C0C0C0C0B0B0C0B0B0B0B0B0B0B0B - 0B0B0B0B0B0A0A0A0B0A0B0A0A0B0A0A0A0A0A0A0A0A0A0A090A090A0909090A - 090909090A09090707080707070706070706060808070B0A0B1E1E1F2627262E - 2E2E343434393939252626030303040303040304040404030403030403030303 - 0303030302020303030303020202020302020302020202020202020202020202 - 0202020202010102020201010201020101010101010101010201010101010001 - 0001010001000001010001000100000001000000030300010000303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303232323636363838383B3B3B3D3D3D3E3E3E3535352F2F2F2F2F2F2F2F2F2F - 2F2F3030303A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383232323131 - 313131313131313131313131313434343A3A3A3A3A3A3A3A3A3A3A3A3A3A393A - 3A393A3A393A39393A39393A39393A3939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 383938383838383838383838383838383838383838383B3B3A3B3B3B3B3B3B3B - 3B3B3B3B3A3B3A3A3A3A39373636363636363636363636363636363636373737 - 3737373838383838383939393A3A3A3A3A3A3737373636363737373A3A3A3A3A - 3A3C3C3C3E3E3E4040404242424848485151515656565858585B5B5B5D5D5D60 - 60606262626464646767676969696C6C6C6F6F6F7373737676767979797D7D7D - 8181818584858988898D8D8D9292929797979C9C9CA0A1A0A5A5A5AAAAAAAFAF - AFB2B2B2B5B5B558585853535354545456565657575758585858585857575757 - 5757565656565656545454545454545454545454525252525252525252525252 - 5151515050504F4F4F4E4E4E4D4D4D4B4B4B4747474545454141413E3E3E3B3B - 3B37373733333332302A302F2B2937642241B01D49EA1A4CFC194CFF184CFF18 - 4AFF1748FD1845EF1B3EBC22336E29292A2C2A212E2E2D303030323232353535 - 3838383A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B - 3B3A3A3A3A3A3A38383838383838383838383837373736363635353534343434 - 343432323232323231313131313131313132323232323232323231302F2F2E2C - 2D2C292A292328261C252215221D0911226F002BF50029ED0029EA0028EA0028 - E90027E80027F014247426231725252525252525252524242423232323232322 - 22222121212020201F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D - 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A1818181818181717171616 - 1615151514141413131312121212121211111111111111111111111111111111 - 11111111111111111111111111111010100F0F0F0E0E0E0D0D0D0C0C0C0A0A0A - 090909080808111111B0B0B0AAAAAAA4A3A49E9E9E9898989393938E8E8E8888 - 888383837D7E7E7879787474747070706B6B6B6767676263625E5E5E5A5A5A56 - 56565252524F4F4E4B4B4A4848494444444141413D3E3D3A3A3A373737353535 - 333333302F302E2E2E2D2C2C2929292627262626262323232222222020201F1E - 1F1E1E1E1D1E1D1C1C1C1B1B1A1A1A1919191918171718181718171718171617 - 1616171616171617161616161516151616151516151515151616151515151515 - 1514151414151415141414141414141414141414141414141313141413141413 - 1413131312131213121212131212131212121212121212111112111111111111 - 10111111111010101010101010101010100F10100F100F0F100F0F0F0F0F0F0F - 0F0F0E0F0F0F0E0F0F0E0E0E0E0E0E0E0E0E0D0E0E0E0E0E0D0E0E0D0E0E0E0D - 0E0D0D0D0D0D0D0C0D0C0D0C0C0D0C0C0C0B0C0C0B0C0C0B0B0C0B0B0A0B0B0B - 0B0B0B0B0B0B0B0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A0909 - 0908080707080707070707070808070909091515152425242A2B2A3131313838 - 373B3B3B0B0B0B04040404030404040404030404040404030304030303030303 - 0303030302030203020302030303030303020202020202020202020202020202 - 0202020202010201020102020201010201010101010102010101010101010101 - 0101010101010101000101010100010103000300010130303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030323232353535 - 3737373939393B3B3B3D3D3D3F3F3F3434342F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F3837373A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838353535313031313131 - 3131313131313131313131313A39393A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A - 393A3A393A39393A39393A39393A393939393939393939393939393939393939 - 3939393939393939393939393939393939393938393938393838393838393838 - 3938383838383838383838383838383838383939393B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3A3B3A3A39393936363636363636363636363636363637373737373738 - 38383838383939393A3A3A3B3B3B3B3B3B3939393737373A3A3A3A3A3A3C3C3C - 3E3E3E4040404242424444444646464A4A4A5353535A5A5A5E5E5E6161616363 - 636565656868686B6B6B6D6D6D7171717373737777777B7B7B7F7F7F82828286 - 86868B8B8B8E8E8E9393929898989D9D9CA1A1A1A4A4A4A7A7A7A9A9A9AFAFAF - B5B5B55959595555555555555656565757575959595858585757575757575757 - 5756565656565654545454545454545454545452525252525252525252525251 - 51515050504F4F4F4E4E4E4D4D4D4A4A4A4747474545454141413F3F3F3B3B3B - 383838353535323230312F272F2E272D303A29345B2637782538802536792732 - 5E292D3C2C2B272E2B212E2E2C2F2F2F3131313434343636363838383A3A3A3C - 3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B - 3A3A3A3A3A3A3838383838383838383737373636363535353434343333333232 - 3231313130303030302F31302C323029323025333023302F292D2D2F292C3722 - 2A4D1927661226810D26960428D2002BF3002AED0029EC0029EA0028EA0028E9 - 0027F20B25A424231E2424232525252525252525252424242323232323232222 - 222222222121212020201F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D - 1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A191919181818181818161616 - 1515151515151414141313131313131313131212121212121212121212121111 - 111212121212121111111111110F0F0F0E0E0E0E0E0E0C0C0C0B0B0B0A0A0A09 - 0909131313B0B0B0AAAAAAA4A4A49E9E9E9998989393938E8E8E888888838383 - 7D7E7E7979797474747070706B6B6B6767676363635E5E5E5A5A5B5656565353 - 534F4F4F4A4A4B4949484445444141413E3E3E3B3A3A3837373535353333332F - 30302E2E2E2D2C2C2929292727272626262423242223222020201F1F1F1E1E1E - 1E1E1D1C1C1C1B1B1A191A191A19191818181918171817171817171717171716 - 1617171716161616161616161616161616161616151515151515151515151514 - 1515151514151514141414141414141414141414131414141414131314131314 - 1313131312131213131212121312121212121211111211111210111111101110 - 10111111101010101010100F0F10101010100F0F0F0F0F0F100F0F0F0F0F0E0F - 0F0F0F0F0E0E0E0F0E0E0F0E0E0F0E0E0E0D0E0D0E0D0E0D0E0D0E0E0D0D0E0D - 0D0E0D0D0D0D0D0D0D0D0C0C0D0C0C0C0B0C0C0C0C0B0B0B0C0B0B0B0B0B0A0B - 0B0B0B0B0A0B0B0A0B0B0A0A0B0A0A0A0A0A0A090A0A090A090A0A0A09080808 - 07070708080707070807080B0B0B1E1E1E2627262F2F2E3535343A3A3B272727 - 0404040404040404040404040304040304040303030303030303030303030303 - 0302030303030302030302030302030302030202020203030302020202010202 - 0202020201010202020101010101020101010102010101010101010101010101 - 0001010101010000010101000303030100003030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303232323434343636363838383A - 3A3A3C3C3C3E3E3E3434342F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F353535 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393838373731303131303131313131 - 31313131313131313737363A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A39 - 3A3A393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393839393839383839383839383839 - 38383838383838383838383838383838383A3A3A3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3A3B3A3A3838383636363636363636363636363737373737373838383838 - 383939393A3A3A3B3B3B3B3B3B3D3D3D3C3C3C3A3A3A3A3A3A3C3C3C3E3E3E40 - 40404242424444444646464848484B4B4B4E4E4E5353535C5C5C616161666666 - 6868686C6C6C6E6E6E7272727474747878787B7B7B7F7F7F8383838888888B8B - 8B8F8F8F9493939695959999999B9B9A9F9E9FA5A5A5AAAAAAB0B0B0B5B5B55B - 5B5B565656565656575757595959595959595959585858585858575757575757 - 5656565656565454545454545454545454545252525252525252525252525151 - 515050504E4E4E4D4D4D4D4D4D4A4A4A4848484545454242423F3F3F3D3D3D39 - 393936363634343434333232312E312F28302D24302D23302D23302E272F2E2A - 302F2E3131313333333434343535353838383939393B3B3B3C3C3C3D3D3D3E3E - 3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A - 3A3A3A3A3A383838383838373737363636343434333333323232313131303030 - 2F2E2E2F2E2C2B2E3E242F5D1E2F79182F94102FB00A2EC9032EE4012DF0002D - F6002DFE002DFE002CF5002AEE002AEE002AED0029EC0029EA0028EA0028F407 - 25BB232323242422252525252525252525252525252525242424242424232323 - 2222222222222121212020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E - 1E1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A18181818181818181817171716 - 1616151515151515151515141414141414131313131313131313121212121212 - 1212121212121111111010100E0E0E0E0E0E0C0C0C0B0B0B0A0A0A0909091313 - 13B0B0B0ABAAAAA5A4A49F9E9E9898989493938E8E8E8988888383837E7E7D79 - 79797575757070706B6B6B6767676363635E5E5E5B5A5B5656565353534F4F4F - 4B4B4B4949494444454141413E3E3E3C3B3C3837383535353333333030302E2E - 2E2D2D2C29292A2727272626262423232322222120201F1F1F1E1E1E1E1E1E1D - 1D1C1B1B1A1A1A191A1918191818181718181718181717171717171717171717 - 1716161616161617161616161616161616151616161515151515151515151415 - 1415151514151514141414141414141314141414141413131314141313131413 - 1312131312131312131212121212121111121111121111121010111111101011 - 10111010101010101010101010101010100F0F10100F0F0F0F0F0F0E0F0F0E0E - 0E0E0E0E0F0F0E0E0E0E0E0E0E0E0E0E0E0D0E0D0E0E0E0D0E0D0D0D0E0E0D0D - 0D0D0D0D0D0D0C0D0D0C0C0C0B0B0C0C0B0C0B0B0B0B0B0B0B0C0B0B0B0A0B0B - 0B0B0B0B0A0B0B0A0A0A0B0A0A0A0A0A0A090A0A0A0908090808070707070708 - 07080808090909141414242424292A2A3232313838383C3C3C0F0F0F04040404 - 0404040404030304030404030303030304040303030303030303030303030303 - 0303030303030302030203020202020202020303020203020202020201020202 - 0201010202010102020102010101010201010101010102010101010101010101 - 0101010101010001000300000101303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303232323434343535353737373A3A3A3C3C3C3D3D - 3D3434342F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303837373A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383332323130313130313131313131 - 313131313333333A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A39393A39393A39393A3939393939393939393939393939393939393939 - 3939393939393939393939393939393939383939383938383938383938383938 - 383838383838383838383838383838383B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3A3B3A3A383838363636363636363636373737373737383838383838393939 - 3A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F3D3D3D3C3C3C3E3E3E4040404242 - 424444444646464848484B4B4B4E4E4E5050505353535757575959595F5F5F64 - 64646968696D6C6D7373737777777A7A7A7D7D7D807F80848384858585888888 - 8B8B8B9191919696959A9A9A9F9F9FA5A5A5AAABAAB0B0B0B5B5B55C5C5C5757 - 575858585959595A5A5A5959595959595A5A5A59595957575757575757575756 - 5656565656545454545454545454545454525252525252525252525252515151 - 5050504E4E4E4D4D4D4D4D4D4A4A4A4848484545454343434141413E3E3E3C3C - 3C39393938383836363635353534343433333333333333333334343434343435 - 35353737373838383A3A3A3B3B3B3C3C3C3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F - 4040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A - 3A3A3A3A3838383737373636363434343232323030302F2F2F2E2E2E2F2C2322 - 2D5D0331F00031FB0031FF0030FF002FFF002FFE002FFA002EF8002EF5002DF3 - 002DF2002CF1002CF0002AEF002AEE002AED0029EB0029F20327D71A22472322 - 1D24242425252525252526262626262626262625252524242424242424242423 - 23232222222121212121212121212020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E - 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A1919191919191818181717171616 - 1616161616161615151515151514141414141414141413131313131312121212 - 12121212121111110F0F0F0E0E0E0D0D0D0C0C0C0B0B0B0A0A0A121212B0B0B0 - ABAAABA5A4A49F9E9E9998989493938E8E8E8988888383837E7E7E7A7A7A7575 - 757071706B6B6C6767676363635E5E5E5B5B5A5656565453534F4F4F4B4B4B48 - 48494444444142413E3E3E3C3C3C3838383535363334333030302E2E2E2D2D2D - 2A292A2727272626262423242322222021201F1F1F1E1E1E1E1E1E1D1C1C1C1C - 1B1A1A191A1A1919181819181818181718181718171817171717171617171716 - 1616161616161617161616151616161516151515161515151515151515151415 - 1514141414151415141414141414141414141314131413141314141313141313 - 1313131313131212121213121212111112111111111111111111111110111111 - 11101011101010100F0F10100F10100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F - 0E0F0F0E0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0E0D0D0D0D0D - 0E0D0D0D0C0C0C0D0C0C0C0B0C0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A - 0B0B0A0A0B0A0B0A0A0A0B0A0A0A0A0A0A090909080808080807070707080909 - 0C0B0B1C1C1C2627272E2E2E3535353A3A3A2F2F300505040404040404050404 - 0404040403040404040403030303030304030403040303030303030303030303 - 0303020203020303020202020202020202020303020202020202010202010201 - 0202020201020201020201020202020102010101010101010101010101010100 - 0101010103000301010130303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303232323434343535353737373939393B3B3B3D3D3D3434342E2E2E - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303837373A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938363535303030313031313031313131313131 - 3131313939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3838383838383838383838383939383B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3A3B3A3A3737373636363636363737373737373838383838383939393A3A3A3B - 3B3B3B3B3B3D3D3D3E3E3E404040414141424242404040404040424242444444 - 4646464848484B4B4B4E4E4E5050505353535757575959595C5C5C6060606363 - 636767676A6A6A6F6F6F7272727676767B7B7B7F7F7F8383838787878C8C8C91 - 91919696969A9A9A9F9F9FA5A5A5ABABABB0B0B0B5B5B55C5C5C575757595959 - 5A5A5A5A5A5A5B5B5B5A5A5A5A5A5A5A5A5A5858585757575757575757575656 - 5656565654545454545454545454545452525252525252525252525251515150 - 50504E4E4E4E4E4E4D4D4D4B4B4B4949494646464545454343434040403E3E3E - 3C3C3C3B3B3B3939393939393838383737373838383838383939393A3A3A3B3B - 3B3C3C3C3D3D3D3E3E3E3F3F3F40404041414140404040404040404040404040 - 40403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A - 3939393737373636363434343232322F2F2F2E2E2E2B2B2B2C291F102FAD0033 - FF0032FF0031FC0031FA0030F9002FF8002FF7002FFF002FFF002EFB002DF700 - 2DF4002CF3002CF1002AEF002AEE002AF20229E5172151222014232323242424 - 2525252626262626262626262626262626262525252424242424242424242323 - 232323232121212121212121212121211F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1D - 1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A191919191919181818171717 - 1616161717171616161515151515151414141414141414141313131212121212 - 121111111010100E0E0E0D0D0D0C0C0C0B0B0B0A0A0A121212B0B0B0ABAAAAA5 - A5A49F9E9E9998989393938E8E8E8988888383837E7E7D7A7A7A757575717171 - 6C6C6C6867676463635E5E5E5B5B5B56565653535350504F4B4B4B4949494544 - 454142423E3E3E3C3C3C3838383536363334333030312E2E2E2C2D2D2A292928 - 27272626262424232222222121201F1F1F1E1E1E1E1E1E1C1D1C1B1C1B1A1A19 - 1A1A191A1A1A1A1A1A1A1A1A1919191A191919191A1919191918181818191818 - 1916161616161616161615161615161615151515151515151515151515151515 - 1515151414141414141414131414131414131414131413131314131413131313 - 1313121312121212121211121212111211111211111111111010101010101011 - 101010101010100F10101010100F100F0F0F0F0F0F0F0F0F0F0E0F0F0E0F0F0F - 0E0E0E0F0F0E0E0E0E0E0E0E0E0E0E0E0D0E0D0E0D0E0E0D0D0E0D0D0D0D0D0D - 0D0C0D0D0C0C0C0B0C0C0C0B0C0C0C0B0B0B0B0C0B0B0B0B0A0B0A0B0B0B0B0B - 0A0B0A0B0A0A0A0A0A0A0A0A0A0808080808070707070809080A0A0912121324 - 24242A2A2A3131313839383C3D3C121213050405040404050404040404040404 - 0404040404030303040303030304030303030303030303030303030303030303 - 0302020302030303030302030302020302030202020201020202020201020202 - 0202020102010202020201010202010201010101010101010101000101010100 - 0003030100003030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303232 - 323434343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F303838373A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393838383831313130303031303131303131313131313134 - 34343A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A39 - 3A39393A39393A39393A39393939393939393939393939393939393939393939 - 3939393939393939393939393939393839393839383839383839383839383838 - 38383838383838383838383939393B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A - 3A3A3A3737373636363737373737373838383838383939393A3A3A3B3B3B3B3B - 3B3D3D3D3E3E3E40404041414142424245454445454543434344444446464648 - 48484B4B4B4E4E4E5050505353535757575959595C5C5C606060636363676767 - 6A6A6A6F6F6F7272727676767A7A7A7F7F7F8383838787878C8C8C9191919596 - 969A9A9A9F9F9FA5A5A5AAAAAAB0B0B0B5B5B55D5D5D5858585959595B5B5B5B - 5B5B5C5C5C5B5B5B5A5A5A5A5A5A595959585858575757575757575757565656 - 5656565454545454545454545454545252525252525252525252525151515050 - 504F4F4F4E4E4E4D4D4D4B4B4B4A4A4A4848484646464444444343434141413F - 3F3F3E3E3E3D3D3D3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F - 4141414141414141414141414141414242424242424141414040404040404040 - 403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B39393937 - 37373535353333333131312F2F2F2B2B2B2A29222329430232F20033FF0032FD - 0032FD0031FB0031FA0030FA002FFB0A2BB80A2AB6052BD1022CE6012CEC002C - F2002DF8002DFE002CFE002BF5132268211E1221212123232324242425252527 - 2727262626272727272727262626262626252525242424242424242424232323 - 2323232121212121212121212121211F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1D1D - 1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B19191919191919191919191918181817 - 1717171717171717161616151515141414141414141414131313131313121212 - 1111110F0F0F0E0E0E0C0C0C0B0B0B0A0A0A131313B0B0B0ABABABA5A4A49F9F - 9E9998989493938F8E8E8989888483837E7E7E7A7A797575757070706C6C6C68 - 68686364635E5F5E5B5B5B565656545454504F4F4B4B4B494949454445414141 - 3F3F3E3C3C3C3838383636353433333030302E2E2E2D2D2D2A2A2A2728282626 - 2624242422232320202121201F20201F20201F20201F1F1F1F1F1E1E1E1E1E1E - 1D1E1D1D1D1D1C1D1E1C1C1E1D1C1D1D1C1D1D1D1D1D1D1C1C1D1D1D1C1C1C1C - 1D1C1D1C1C1C1B1B1B1A1A1A1919181817171616171515151515151515141415 - 1515141514141414141414141414141314131314131313131313131313131213 - 1312131212121112121111121111121111111111111111111011101011101010 - 1010101010101010100F100F101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0F - 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0E0E0E0E0D0D0E0D0D0D0D0D0D0D0D - 0C0C0D0C0C0C0C0C0B0B0B0C0B0C0B0B0C0B0C0B0B0B0B0B0A0B0A0B0B0A0B0A - 0A0A0B0B0B0A09090A0808080808080808080908090C0B0C1B1C1B2727272E2F - 2E3535353A3A3A30303005050504050405050505040404040505040504040404 - 0403040403040304040403030403030304030303030303030303030303030303 - 0302020302030203020303020302020202020202020201020202010201010202 - 0201010201010202020202010202020101010101010101010101010103030301 - 0001303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030323232343434353535 - 3737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F303838383A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383433333030303030303130313130313131313131313A3A - 393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939383939383938383938383938383938383838 - 383838383838383838383A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A - 3A3A3737373737373737373838383838383939393A3A3A3B3B3B3B3B3B3D3D3D - 3E3E3E4040404141414242424545444646454847474949494848484949494A4A - 4A4E4E4E5050505353535757575959595C5C5C6060606363636767676A6A6A6E - 6E6E7272727676767A7A7A7E7E7E8383838787878C8C8C9191919696959A9A9A - 9F9F9FA5A5A5AAAAAAB1B1B1B7B7B75F5F5F5A5A5A5A5A5A5B5B5B5D5D5D5D5D - 5D5C5C5C5B5B5B5A5A5A59595959595958585857575757575757575756565656 - 5656545454545454545454545454525252525252525252525252515151505050 - 4F4F4F4E4E4E4E4E4E4C4C4C4A4A4A4949494747474646464545454444444343 - 4342424242424241414141414141414141414142424242424242424243434343 - 4343434343434343424242424242424242424242404040404040404040404040 - 3F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A3838383535 - 353232323030302C2C2C29292929261B112EA00035FF0033FF0032FF0032FE00 - 32FD0031FB0032FF072ECF22222421201C1E1F251C1E2B181F3E14205511226C - 0E24830B26A210237C201E1721201F2223232424242626262727272727272727 - 2727272727272727272726262626262625252524242424242424242423232323 - 23232222222121212222222222222020202020202020201F1F1F1E1E1E1D1D1D - 1D1D1D1C1C1C1C1C1C1B1B1B1A1A1A1919191919191919191919191717171717 - 1717171717171716161615151514141414141414141413131312121211111110 - 10100F0F0F0D0D0D0C0C0C0A0A0A141414B0B0B0AAAAAAA4A4A49F9E9F999898 - 9493938F8E8E8988898483837E7E7E7A7A7A7575757070706C6C6C6868686363 - 635E5E5F5C5B5B5656565454544F504F4B4B4C4949494545454242423E3F3F3B - 3B3B3838383535353434333030302E2E2E2D2D2D2A2A2A282828272828272626 - 2626262424242422232322222121202121202020201F1F1F1E1E1F1D1E1E1D1D - 1D1D1C1D1D1D1D1D1C1D1D1D1D1E1D1C1D1D1D1D1D1D1C1C1D1C1D1C1C1C1C1D - 1C1C1C1C1C1C1B1C1D1C1C1D1C1C1C1C1B1B1B1C1A1A1A181718161615151414 - 1414141514141414141413131414141313131314141314131313131313121312 - 1212121213121113121112111111111111101011111111111010111111101110 - 10101010101010101010100F0F0F0F10100F0F0F0F0F0F0F0F0F0E0F0F0F0F0F - 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0E0E0D0E0E0D0E0E0D0D0D0C0C0D0C - 0C0C0C0C0C0C0B0B0C0B0B0C0C0C0C0C0B0B0C0B0B0B0B0B0A0B0B0B0B0B0B0B - 0A0A090808080808090808090809090A0A1111122423232B2B2A313232383838 - 3D3D3D1717170505040404050404040504040405040504040404050404040404 - 0403030404030304030303040303040303030303030303030303030303020302 - 0203020302030203030302020302020202020202020202020201010202010202 - 0101020201010101020201010101010101010101010001010300030101013030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303232323434343535353737373939393B - 3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30383838 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 39383939383837373030303030303030303130313130313131313635353A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393938393938393838393838393838393838383838 - 3838383838383838383A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3A - 3A3939393737373838383838383939393A3A3A3B3B3B3B3B3B3D3D3D3E3E3E40 - 40404141414242424545444646454848474A49494C4B4B4E4D4D4F4F4F505050 - 5151525353535757575959595C5C5C5F5F5F6363636767676A6A6A6E6E6E7272 - 727676767A7A7A7E7E7E8282828787878C8C8C9191919696969B9B9BA1A1A1A7 - A6A6ACACACB2B2B2B7B7B75F5F5F5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D - 5C5C5C5B5B5B5959595959595959595858585757575757575757575656565656 - 565454545454545454545454545252525252525252525252525151515050504F - 4F4F4E4E4E4E4E4E4C4C4C4C4C4C4A4A4A494949494949474747464646454545 - 4545454545454444444444444444444444444545454545454444444444444444 - 444444444444444242424242424242424242424040404040404040404040403F - 3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A383838353535323232 - 2E2E2E2B2B2B2927212127400434F20135FF0134FF0034FF0032FF0032FE0032 - FE0032FF17276A25221623222121201E201F1C1F1E181F1D151F1D121F1C0F20 - 1E16211F1921201F222222242424252525262626282828282828282828282828 - 2828282727272727272626262626262525252525252525252525252424242424 - 242323232323232323232323232222222222222222222121211F1F1F1F1F1F1D - 1D1D1D1D1D1C1C1C1C1C1C1A1A1A191919191919191919191919171717171717 - 1717171717171616161515151414141414141414141212121111111010100F0F - 0F0E0E0E0C0C0C0B0B0B131313B0B0B0AAAAAAA4A4A49E9E9E9998989493938E - 8E8E8989898483847F7E7E7979797575757070706C6C6C6868686363635E5F5F - 5B5C5B5656565353535050504C4B4B4949494545454242423E3F3F3B3B3C3838 - 383535353433343131312F2F2F2F2F2E2D2C2C2A2B2B2A292927272826262624 - 232423232323212121212021212020201F1E1F1F1F1E1F1D1E1D1D1D1D1D1D1D - 1D1D1D1D1D1C1D1C1C1D1D1C1D1D1C1D1D1D1D1D1C1D1D1D1C1D1C1C1C1C1C1C - 1C1C1C1C1C1C1C1D1B1B1D1C1B1D1C1B1C1C1C1C1D1C1C1C1C1C1B1B19191817 - 1716141415141414141414141414131414131313131313131313131312131212 - 1312121311121211111211111111111111101111111010101011111010101010 - 10101010100F101010101010100F0F0F0F100F0F0F0F0F0F0F0E0E0F0E0E0E0E - 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0D0D0E0D0D0E0D0D0D0E0C0D0D0C0C0C0C0C - 0C0C0B0C0C0B0C0C0C0C0B0B0B0B0B0C0B0B0B0B0B0B0B0B0B0B0B090A090809 - 080809080808080A09090B0B0B1919192627272D2D2D3635353B3A3B38383705 - 0505050504050404040505050405040405040405040404050404040304040404 - 0404040303030304030303030403030304030304030303030303020203030303 - 0202020202020203020202020203020202020202020202020202020201020102 - 0201010201020202010201010201010202020101030303010101303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303232323434343535353737373939393B3B3B3D3D3D3434 - 342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838383A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 383938383232323030303030303030303130313130313131313A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3939 - 3A39393A39393A39393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839383839383839383839383838383838 - 38383838383838383B3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3C3B3B - 3939393838383838383939393A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F4141 - 414242424545454646454848474A49494C4B4B4E4D4D51505053525256555559 - 58585A5A5A5C5B5C5F5F5F6060616363646767676A6A6A6E6E6E717171767676 - 7B7B7B7F7F7F8383838989898E8E8E9393939999999D9D9DA2A2A2A7A7A7ACAC - ACB2B1B1B7B7B76767675C5C5C5D5D5D5D5D5D5E5E5E5D5D5D5D5D5D5D5D5D5C - 5C5C5B5B5B595959595959595959585858575757575757575757565656565656 - 5454545454545454545454545252525252525252525252525151515050504F4F - 4F4F4F4F4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A4A4A4A49494948484848484848 - 4848474747474747464646464646464646464646464646454545454545454545 - 4444444444444242424242424242424242424040404040404040404040403F3F - 3F3E3E3E3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A3838383535353232322E2E2E2A - 2A2928261E112FA50137FF0335FF0235FF0134FF0034FF0032FF0033FF062FD7 - 2324292524212424242424242222222222222121212121212121212222212323 - 2223232324242425252527272728282829292928282828282829292929292927 - 2727272727272727262626262626262626252525252525262626252525252525 - 2525252626262626262626262525252424242424242323232121212020201E1E - 1E1D1D1D1D1D1D1B1B1B1B1B1B19191919191919191919191917171717171717 - 17171717171616161515151414141414141313131212121111110F0F0F0E0E0E - 0D0D0D0B0B0B1F1F1FB1B0B0AAAAAAA4A4A49E9E9E9999999493938F8E8E8989 - 898483847F7E7E7979797575757070716C6C6C6767676363635E5F5F5B5C5C56 - 56565353535050504C4C4C4848484545454242423D3E3E3B3B3C383938363635 - 3534333232323230312F2F2F2D2D2C2B2B2A2929282728282626262424242323 - 2322222222202121212020201F1F1F1E1F1E1F1E1E1D1E1D1E1E1D1D1D1D1D1D - 1D1D1D1C1D1D1C1C1D1D1C1D1D1C1D1D1D1D1D1D1C1D1D1C1D1C1D1C1C1D1C1C - 1C1C1C1C1C1B1C1C1C1D1C1C1D1C1C1C1C1C1C1C1C1C1C1B1B1C1C1B1B1C1B1B - 1C191A1917171614141413141313131314131313131313131312121213121212 - 1211121212121111111111111111111011111010111011101010101010101010 - 1010101010101010100F10100F100F0F0F100F0F0F0F0F0F0E0F0E0E0F0E0E0E - 0F0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0E0D0C0C0D0C0C0C0C0C0C - 0B0C0C0B0C0B0B0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B090809090808090809 - 0A09090909090F0F0F2323232A2A2A3131313939393D3D3D1A1A1A0605050505 - 0505050405050405050504040504050405040404040404050404040404040404 - 0404040304040403030304030303030303030303030303020303020303030202 - 0302020202020302020202030202020202020201020202020201020202020101 - 0101010201020102010101010101010103030301010130303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303232323434343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838383A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3636363030303030303030303030303130313130313737373A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A - 39393A39393A3939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383838383838 - 383838383938383B3B3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3B3C3B3B3B - 3B3B3838383939393A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F414141424242 - 4444444646454848474A49494C4B4B4E4D4D5150505352525655555858585B5B - 5B5F5E5E6160606464646767676A6A6A6E6E6E7272727575757A7A7A7D7D7D81 - 81818686868A8A8A8E8E8E9393939898989D9D9DA2A2A2A7A7A7ABABABB1B1B1 - B6B6B66D6D6D5D5D5D5E5E5E5F5F5F5F5F5F5F5F5F5E5E5E5D5D5D5D5D5D5B5B - 5B5A5A5A59595959595959595958585857575757575757575756565656565654 - 54545454545454545454545252525252525252525252525151515050504F4F4F - 4F4F4F4F4F4F4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4949494A4A - 4A49494948484848484847474747474747474746464645454545454545454544 - 44444444444242424242424242424242424040404040404040404040403F3F3F - 3E3E3E3D3D3D3D3D3D3D3D3D3B3B3B3838383636363232322E2E2E2B29232128 - 490537FC0337FF0436FF0335FF0235FF0134FF0034FF0033FF152B8229251927 - 2727272727272727272727252525252525252525252525252525262626262626 - 2727272828282929292929292A2A2A2A2A2A2A2A2A2A2A2A2929292929292727 - 272727272727272626262626262626262626262727272828282828282929292A - 2A2A2B2B2B2B2B2B2A2A2A2A2A2A2828282727272525252323232121211F1F1F - 1D1D1D1D1D1D1C1C1C1B1B1B1919191919191919191919191717171717171717 - 171717171616161515151414141313131212121111111010100E0E0E0D0D0D0C - 0C0C292929AFAFAFA9A9A9A3A3A39E9E9E9998989392928E8D8D898888838382 - 7F7F7E7979797474746F6F6F6C6C6C6767676262625F5F5F5A5B5B5657575353 - 534F4F4F4C4B4C4849494445454242423E3E3E3C3C3C3B3B3A37383735353533 - 33333131302F2F2E2D2D2C2B2B2A292928282728272627242425232323222122 - 21212020201F1E1E1D1C1B1B1C1B1B1919191919181918181818191918181818 - 181817181718181818171718171919191919191A191A1A1A1B1C1D1D1C1D1C1C - 1C1C1C1B1C1C1C1B1C1C1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B - 1B1B1B1B1B1B1818181515151414131413131313121312121312121311121211 - 1112111112111111111111101111111111101111111011101010101010101010 - 101010100F100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0F0F0F0F0E - 0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0E0D0E0E0C0C0D0C0C0C0D0C0C0C0C0C0C - 0C0B0B0C0C0C0C0C0B0B0B0B0B0B0B0B0A0A0A0909090809090908090A0A090B - 0B0C1919192727272D2E2E3535343B3B3B383837050606050505050506050505 - 0505050404050505050504050404050405040404040404040404040404030404 - 0403030303040403030403040403030403030303030302030303030302030203 - 0302020303020203020202030202020202020202020202020202020202010201 - 0101020201020101010101020303050101013030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303232323434 - 343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F303838383A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383831 - 31313030303030303030303030303130313232323A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39 - 393A39393A393939393939393939393939393939393939393939393939393939 - 3939393939393939393938393938393838393838393838393838383838383838 - 3838383938383B3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3B3D3C3C3C3C - 3C3A3A3A3A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F41414142424244444446 - 46464848474A4A494C4B4B4E4D4D5150505352525554545858585B5B5B5F5E5E - 6160606363636767676A6A6A6E6E6E7171717575757979797D7D7D8181818686 - 868A8A8A8E8E8E9393939898989D9D9DA1A1A1A7A7A7ABABABB0B0B0B6B6B574 - 74745E5E5E6060606060606161616161615F5F5F5D5D5D5D5D5D5C5C5C5B5B5B - 5A5A5A5959595959595959595858585757575757575757575656565656565454 - 545454545454545454545252525252525252525252525151515050504F4F4F4F - 4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A - 4A4A4A4949494848484747474747474747474646464545454545454545454444 - 444444444242424242424242424242424040404040404040404040403F3F3F3E - 3E3E3D3D3D3D3D3D3B3B3B3939393636363232322F2F2F2A29262426300B34D5 - 0439FF0437FF0436FF0335FF0235FF0034FF0332F124293E2A29242A2A2A2B2B - 2B2B2B2B2A2A2A2A2A2A2929292929292828282828282828282929292A2A2A2A - 2A2A2A2A2A2A2A2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929272727 - 2727272727272626262727272727272828282A2A2A2C2C2C2E2E2E2F2F2F3030 - 303131313131313030302F2F2F2D2D2D2A2A2A2828282525252222222020201E - 1E1E1D1D1D1C1C1C1B1B1B191919191919191919191919171717171717171717 - 1717171616161515151313131313131111111010100E0E0E0D0D0D0C0C0C3534 - 34AFAFAEA9A8A9A3A3A39E9E9E9898989393928E8E8D8988888383837E7E7E79 - 797974747470706F6C6C6C6767676262625F5F5F5B5B5B5756575252524F4F4F - 4C4C4C4949494544454242434040403D3C3D3A3B3A373837353535333333302F - 302F2E2F2D2C2C2B2B2A2928282828272625252221211F1F1F1D1D1D1C1C1C1C - 1B1B1A1A19191818181818171716161717161717161617161616161616161516 - 1615151515151515151516151515151515151415151514151515151716161818 - 181A1A1A1C1B1C1C1C1B1D1C1B1C1C1C1C1C1C1C1B1C1B1C1B1B1B1C1B1B1B1C - 1B1B1C1B1B1C1B1B1A1918151515131312131312131212131212131212121111 - 1211111112121111111111111111111011111011111010101011101010101010 - 101010100F100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0F0F0F0F0E0F0F0F - 0F0F0E0E0E0D0E0E0D0E0E0D0D0E0D0D0D0D0C0C0C0D0C0C0C0C0B0C0C0C0B0B - 0C0C0B0B0B0C0B0B0B0B0B0C0A09090909090909090808080A09090E0F0E2323 - 232929293030303939393D3D3C1E1E1E06050506060505050605050505050505 - 0405050504050404050404040504050404040504040404040404040404040304 - 0403030403040403040303030303030303030303030303020303020202020302 - 0203030202020302020202020202020202020102020102020102010202010101 - 0101010101010101030303020102303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030323232343434353535373737 - 3939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 303838383A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383635353030 - 303030303030303030303030303130313635353A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393839393839383839383839383839383838383838383838 - 38383838383A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3C3D3C3C3E3D3D - 3D3C3C3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F4141414242424444444646464747 - 464A4A494C4B4B4E4D4D5150505352525554545858585B5A5A5E5D5D61606063 - 63636767676A6A6A6D6D6D7171717575757878787C7C7C8181818585858A8A8A - 8E8E8E9292929797979C9C9CA0A0A0A6A6A6ABABABB0B0B0B6B6B67D7D7D6060 - 606161616161616262626262626060605F5F5F5D5D5D5D5D5D5B5B5B5B5B5B5A - 5A5A595959595959595959585858575757575757575757565656565656545454 - 5454545454545454545252525252525252525252525151515050504F4F4F4F4F - 4F4F4F4F4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A - 4A4A494949484848474747474747474747464646454545454545454545444444 - 4444444242424242424242424242424040404040404040404040403F3F3F3E3E - 3E3D3D3D3C3C3C3939393636363333332F2F2F2B2B2B28251B1B29610539FE05 - 38FF0437FF0436FF0335FF0035FF0F30B22C2A222D2D2C2E2E2E2F2F2F2F2F2F - 2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C - 2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A29292929292928282827 - 27272727272626262727272929292B2B2B2D2D2D323232343434363636383838 - 3939393939393838383535353131312E2E2E2A2A2A2626262323232020201F1F - 1F1D1D1D1C1C1C1A1A1A19191919191919191919191917171717171717171717 - 17171616161414141313131212121010100F0F0F0D0D0D0C0C0C424242AFAFAF - A9A8A8A3A3A39E9D9D9797979292928D8D8D8887878382827E7E7E7979797474 - 746F6F6F6B6B6B6767676262625E5E5E5A5A5A5757575352524F4F4F4B4B4B49 - 494846464643434340403F3D3D3D3A3B3B3738383535353232323030302F2F2E - 2C2C2B2A292826262623232322212220201F1E1E1F1D1D1D1D1C1C1C1B1A1A1A - 1919181819181917171717171717171717171717171616161616161616161616 - 1616151616161615151515151515151515141415141415141415141314141314 - 1313131415141817181A1A1A1C1C1C1C1C1C1C1C1C1B1C1C1B1B1C1B1B1B1B1B - 1B1C1B1B1C1A1B1C1B1B1A1A1915161513131213121212111213121212121111 - 1211111111111111111111111011101011101010111110101110101010101010 - 0F0F1010100F0F1010100F0F0F0F0F0E0F0F0F0F0E0F0F0F0F0E0E0F0F0F0E0E - 0E0E0F0E0E0E0E0E0D0D0D0D0E0D0C0C0D0D0D0D0C0C0C0C0C0C0C0C0B0B0C0C - 0C0C0C0C0C0B0A0B0909090909090909090A0A090C0C0C1918182626262D2D2D - 3434343B3B3B3B3B3B0A0A0A0506060606050505050605050505050505050405 - 0505050504050405050504050505040504040404040404040304040404040404 - 0303030303040303040303040303030303030303030303030202020202030303 - 0202020303020202030202030202020202020202020202020202010202010101 - 0101010203030301010130303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303232323434343535353737373939393B3B3B3D - 3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838383A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838313131303030 - 3030303030303030303030303131313A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A - 39393A3939393939393939393939393939393939393939393939393939393939 - 3939393939393939383939383938383938383938383938383838383838383838 - 383838383A3A393B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3C3E3D3D3E3D3D3F - 3F3F3C3C3C3D3D3D3E3E3E3F3F3F4040404242424444444646464747464A4A49 - 4C4B4B4E4D4D5150505352525554545857575B5A5A5E5D5D6160606362626666 - 666A6A6A6D6D6D7171717575757878787C7C7C8080808585858989898D8D8D92 - 92929696969B9B9BA0A0A0A5A5A5ABABABAFAFAFB5B5B5868686626262626262 - 6363636363636262626161616060605D5D5D5D5D5D5C5C5C5C5C5C5B5B5B5A5A - 5A59595959595959595958585857575757575757575756565656565654545454 - 54545454545454545252525252525252525252525151515050504F4F4F4F4F4F - 4F4F4F4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A - 4A49494948484847474747474747474746464645454545454545454544444444 - 44444242424242424242424242424040404040404040404040403F3F3F3D3D3D - 3C3C3C3A3A3A3838383333333030302B2B2B27272624231C0F31B5043AFF0538 - FF0437FF0336FF0235FF202E6A312E2031313133333333333334343434343432 - 32323030303030302E2E2E2D2D2D2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D - 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2929292929292828282727272727 - 272626262727272828282C2C2C2F2F2F3333333838383C3C3C3E3E3E40404040 - 40404040403D3D3D3939393535353030302C2C2C2727272323232020201F1F1F - 1D1D1D1C1C1C1B1B1B1919191919191919191919191717171717171717171616 - 161515151414141212121010100F0F0F0E0E0E0C0C0C525252AEAEADA8A8A7A3 - A3A29D9C9C9796969291918D8B8C8786868281817D7D7D7979797373736F6F6F - 6B6B6B6666666262625E5E5E5A5A5A5656565252514F4F504C4C4C4949494545 - 4543424341403F3D3D3C3B3B3B3738383535363131312E2E2E2C2B2B28292926 - 26262625252323232222221F201F1F1E1E1D1D1D1D1D1D1C1B1B1B1A1A1A1919 - 1918181817171717171716171716161616171616171616161616161616161515 - 1616161615161516151515151515151515151414141415141514141414131413 - 13131213121213121413141616161A1A1A1C1C1C1C1C1C1C1C1B1B1C1B1B1B1B - 1C1B1B1C1B1A1B1B1A1B1B1B191A1A1515151312121312111212121211111211 - 121211111112111111101111111110101010111010101010101010100F100F10 - 0F100F10100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0F0E0E0E0F0E0E - 0E0E0E0E0D0E0E0D0D0D0C0D0E0C0D0C0C0C0C0D0C0C0C0C0B0B0C0C0C0C0C0B - 0C0A090909090909090A0909090A0A0A0E0E0D2221222929293030303838383D - 3D3D232323050606050506050606050606060506060505050505050505050505 - 0505050404040405050404040504040404040404040404040404040404030303 - 0403030403030403030403030303030303030302030302030303030202020202 - 0203030203020302020202020202020202020102010201020202010101010101 - 0503050102013030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303232323434343535353737373939393B3B3B3D3D3D3434342E2E - 2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838383A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383835353530303030303030 - 30303030303030303030303635353B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39 - 393A393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393838393838393838393838383838383838383838 - 3838383939393B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3D3E3D3D403F3F3F3F - 3F4040403F3F3F3F3F3F4040404242424444444646464747474A4A494C4C4B4E - 4D4D5150505352525554545857575B5A5A5D5C5C6160606362626666666A6A6A - 6D6D6D7171717575757878787C7C7C8080808484848888888D8D8D9292929696 - 969B9B9BA0A0A0A4A4A4AAAAAAAFAFAFB4B4B48F909063636364646464646463 - 63636363636262626060605F5F5F5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A - 5959595959595959595858585757575757575757575656565656565454545454 - 545454545454545252525252525252525252525151515050504F4F4F4F4F4F4F - 4F4F4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A - 4949494848484747474747474747474646464545454545454545454444444343 - 434242424242424242424242424040404040404040403F3F3F3E3E3E3D3D3D3B - 3B3B3838383636363131312D2D2D29292926251D1F26450838F30539FF0538FF - 0437FF0236FF16329F32322F36352E3A3A3A3F3F3F4141413F3F3F3C3C3C3939 - 393434343232323030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2C - 2C2C2C2C2C2C2C2C2B2B2B2A2A2A292929282828282828272727262626262626 - 2626262626262A2A2A2F2F2F3434333B3A3841413E4545424848464848484747 - 484545454141413C3C3C3737373232322C2C2C2727272323232020201E1E1E1D - 1D1D1C1C1C1A1A1A191919191919191919191919171717171717161616151515 - 1414141212121010100F0F0F0E0E0E0C0C0C646464ADADADA7A7A7A2A2A19C9B - 9B9797969291918D8C8C8787868281817D7C7C7878787373736F6F6F6A696A66 - 66666262625D5E5D5A5A5A56565553525250504F4B4C4B494949454545434243 - 413F3F3E3D3C3B3A3A3736353233332F2F2E2D2D2D2B2B2B2928292626262525 - 2623232422222220201F1F1F1F1D1E1E1E1D1D1C1C1C1B1A1A1A19191A191918 - 1817181817171717171717171616171616161616161617161616161616151616 - 1516151615151515151515151514151515151515151414141413141413141313 - 131212131212131212121312121313131718181B1B1A1B1C1B1B1B1C1C1B1B1C - 1B1B1B1B1B1C1B1A1B1B1B1B1B1B1A191A141313121212121112111212111111 - 111111111111111111111010111110111011101010101010101010101010100F - 0F10100F0F10100F0F0F0F0F0F0F0F0F0F0F0E0E0F0E0F0F0E0E0E0F0E0E0E0E - 0E0E0E0D0E0E0D0D0D0C0D0D0D0C0C0C0D0C0C0C0C0C0C0C0C0C0B0B0B0A0A09 - 0A0A090909090A0A0A0C0C0C1919192626262D2D2D3434343A3A3A3A3A3A0A0A - 0A06060606060606060606060505050606050605060505050505050505040504 - 0504040504050405050404040404050404040404040404040404040404040404 - 0404040403040403030303030303030303030303030302020303020303030302 - 0302020202020202020202020202020202010202020102010102010203030501 - 0102303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303032 - 32323434343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F303838383A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383131313030303030303030 - 303030303030303030303939393B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A3939 - 3A39393939393939393939393939393939393939393939393939393939393939 - 3939393939393839393839383839383839383839383838383838383838383838 - 38383939383C3C3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3D403F3F403F3F404040 - 4242424241414141414242424343434545454747474A4A494C4C4B4D4D4D504F - 4F5251515554545857575A59595D5C5C605F5F6362626666666A6A6A6C6C6C70 - 70707474747878787C7C7C8080808383838888888D8D8D9191919595959A9A9A - 9F9F9FA4A4A4A9A9A9AEAEAEB3B3B39A9A9A6464646565656666666666666565 - 656262626262626060605E5E5E5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A59 - 5959595959595959585858575757575757575757565656565656545454545454 - 5454545454545252525252525252525252525151515050504F4F4F4F4F4F4F4F - 4F4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A49 - 4949484848474747474747474747464646454545454545454545454545444444 - 4444444343434343434242424242424141414040404040403E3E3E3B3B3B3939 - 393737373333332F2F2F2A2A2A272727262418152E95053AFF0638FF0538FF04 - 37FF0137FF1234BD38394447443C4A4A4A4C4C4C4A4A4A4646464141413C3C3C - 3838383434343131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C - 2C2C2C2C2B2B2B2A2A2A29292929292927272727272726262625252525252525 - 25252726232E2C2133332E39393E3F404646474C4E4D4A53514651504B4D4D4C - 4949494444443E3E3E3737373131312B2B2B2626262222221F1F1F1D1D1D1D1D - 1D1B1B1B1A1A1A19191919191919191919191918181817171716161615151513 - 13131111110F0F0F0E0E0E0D0D0D757575ACACACA6A6A6A1A1A19C9B9C969695 - 9190908C8B8B8786868281827D7D7C7777777373736E6E6F6A6A6A6666666262 - 625D5C5D5B5B5B5656565353534F4F4F4B4B4C4848484545454343433E3F3E3B - 3A3A3636363535353131322F2F2E2D2C2C2A2A2A282929262626262626232423 - 2121212020201F1F1F1D1D1E1E1E1D1C1C1C1B1B1B1A19191919191818171917 - 1818171817171717171717171716161616161616161616161616161616151515 - 1516151516151515151515151515141515141414151414141314141313131313 - 1313131213121212121212121212121212121616151B1B1A1B1C1C1B1C1C1C1B - 1B1C1A1B1C1B1B1B1C1B1C1B1B1C1B1B17171712121111121212121211111112 - 11111111111111111111101111111110101110111010101010100F1010100F10 - 0F0F0F0F0F0F100F0F0F0F0F0F0F0F0F0F0E0E0E0E0F0E0F0E0F0E0E0E0E0E0D - 0E0E0D0D0E0C0D0D0D0C0C0D0D0C0C0D0C0C0D0C0C0C0A0A0A0A090A090A0909 - 09090B0B0A0E0F0E2121212828283030303737373D3D3D2A2A2A060706060606 - 0606060606060506060606050506050506060505050505050505050505050505 - 0505050504050404050405050504040404040404040304040404040304040403 - 0304040303030304030403030303020303020302030302020202020302020203 - 0302020202020202020202020102020101020202010202010303030201013030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303232323434343535 - 353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F303838383A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838363636303030303030303030303030 - 3030303030303433343B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939383939383938383938383938383938383838383838383838383838 - 383939393B3B3B3D3D3D3D3D3D3E3E3E3E3E3E40403F403F3F41404042424242 - 42424444444545454444444545454747474A4A494B4B4A4D4D4D504F4F525151 - 5454545857575A59595C5B5B5F5F5F6362626665656969696C6C6C7070707373 - 737777777B7B7B7F7F7F8383838787878C8C8C9090909595959999999E9E9EA4 - A4A4A8A8A8AEAEAEB2B2B2A5A5A5666666676767676767676767666666646464 - 6363636161615F5F5F5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5959 - 5959595959595958585857575757575757575756565656565654545454545454 - 54545454545252525252525252525252525151515050504F4F4F4F4F4F4F4F4F - 4E4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4949 - 4948484847474747474747474746464646464646464646464645454545454544 - 44444444444444444343434242424242424141413F3F3F3E3E3E3B3B3B383838 - 3535353030302D2D2D29292A2726212327320B37E1053AFF0639FF0538FF0437 - FF0036FF0F37D93F46605350445251515050504C4C4C4747474141413B3B3B38 - 38383434343232323030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C - 2B2B2B2A2A2A29292928282827272726262625252525252525252327251B2325 - 301827721028A80B28C30B28C60C29C41930B12D3C904A4E6257554B50504D4A - 4A4B4444443D3D3D3636362F2F2F2A2A2A2525252121211E1E1E1D1D1D1C1C1C - 1B1B1B1B1B1B1919191919191919191919191717171616161515151313131111 - 110F0F0F0E0E0E0F0F0F8C8C8BACACABA6A6A6A0A0A09B9B9B9695959090908B - 8A8A8685858181817C7C7C7777777272726D6D6D6969696565656261615D5D5D - 5A5A5A5555555353534F4E4F4B4A4A4848494645454140403C3C3C3A393A3636 - 363434343232322F2F2F2D2D2D2A2B2A28282826262624252524242421212120 - 20201F1F1F1E1E1E1E1D1E1D1C1D1B1B1B1A1A1A1A1919191817191817181817 - 1817171717171716171717171716161716161616161616161616151516161616 - 1615151515151515151515151515141415151514141514131414131413131313 - 13121313131212131212121212121212121111121414151919191B1C1B1C1B1B - 1C1A1B1C1B1B1C1B1B1B1C1C1B1B1B1A1A1A1514141112121211121111111211 - 1111111111101110101110111110111010111111101010100F10100F100F1010 - 10100F0F0F0F0F0F0F0F0F0F0F0F0F0E0F0F0F0F0E0E0E0E0E0E0E0E0E0E0D0E - 0E0D0D0E0D0D0D0C0C0D0C0C0C0D0D0D0B0C0A0A0A0A090A0A0A0A0B0A0B0C0B - 0B1616172526252B2B2B3333333939393E3E3E0E0D0D06060607060606060606 - 0606060506060606050606050605050506050505060506050504050505040504 - 0405050405050405040404050404040404040404040404040404030403040304 - 0403040403030303030303030303020303030303030202030303030202020302 - 0302020302020202020202020102020202010201050505020202303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030323232343434353535373737393939 - 3B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838 - 383A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383832323230303030303030303030303030 - 30303030303737373B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393938393938393838393838393838393838383838383838383838393939 - 3939393B3B3B3D3D3D3E3E3E3E3E3E40404040403F4140404342424242424444 - 444545454747474949484949494A49494B4B4A4D4D4C4F4E4E51505054545457 - 56565A59595C5B5B5F5F5F6262626665656868686C6C6C6F6F6F737373767676 - 7A7A7A7F7F7F8383838787878A8A8A8F8F8F9494949999999D9D9DA2A2A2A8A8 - A8ADADADB2B2B2B0B0B06B6B6B68686868686868686867676765656563636361 - 61615F5F5F5E5E5E5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A595959 - 5959595959595858585757575757575757575656565656565454545454545454 - 545454545252525252525252525252525151515050504F4F4F4F4F4F4F4F4F4E - 4E4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A494949 - 4848484747474747474848484747474646464646464747474747474747474747 - 474747474747474646464444444343434141413F3F3F3D3D3D39393936363633 - 33332F2F2F2B2B2B2828282825191B2D76063BFF0639FF0639FF0538FF0437FF - 0035FF0B37E83C48795653465151504D4D4D4848484141413C3C3C3939393535 - 353333333232323131313030302F2F2F2F2F2F2E2E2E2E2E2E2C2C2C2B2B2B2A - 2A2A29292928282826262625252523242424231F24231D16256E0526CD0025EE - 0023EC0023E70023E50022E40020E5001FE50725D42C3B9652535450504A4949 - 494242423A3A3A3232322C2C2C2727272323232020201D1D1D1D1D1D1C1C1C1B - 1B1B1B1B1B191919191919191919181818161616151515131313121212101010 - 0E0E0E151515A1A1A1ACACABA6A5A5A09F9F9A9999959494908F8F8A89898584 - 84807F7F7B7B7B7777777272726D6D6D6868686666656161615D5D5D59595856 - 55555252524F4F4F4A4A4A4747474342423F403F3B3B3C383938353535353434 - 3131312F2F2E2C2D2C2A2A2A2828282626262525252424232221222020201F1F - 1F1E1E1E1E1D1E1D1D1D1B1B1C1A1A1B1A1A1A19181819181718181819171718 - 1717171717171717171717161617171616161616161616161616161616161516 - 1615151515151515151515151414141414151514141414141413141313131313 - 121212131212121212121212121212111212111112111515151A1A1A1C1B1B1C - 1B1B1B1B1B1B1C1B1B1B1B1B1B1B1B1B1B161717111112121112111212111112 - 1211111111111110111110111010101011101010101010101010101010100F0F - 10100F100F0F0F0F0F0F0F0E0F0F0E0F0E0F0E0F0E0E0E0E0E0E0D0E0E0D0D0E - 0C0D0D0D0D0D0D0C0C0C0C0B0A0B0B0A0A0A0A0A0A0A0A0B0A0B0D0D0D1F1E1E - 2727272E2E2E3535353B3B3B2929290707070706060606070706060606060606 - 0606060606060606060505050605050505060505050505050505050505050405 - 0505040505040404050504040404040404040404040404040304030303040303 - 0303030403030303030303030203030302030303020303020302030303030203 - 0202020202030202020102020102020203050301020230303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303232323434343535353737373939393B3B3B3D3D3D34 - 34342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303838383B3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383736363030303030303030303030303030303030 - 303232323A3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A3939 - 3939393939393939393939393939393939393939393939393939393939393939 - 393939383939383938383938383938383938383838383838383939393939393A - 3A3A3A3A3A3D3C3C3E3E3E404040404040414140434242434242444444454545 - 4747474949494B4B4B4C4C4C4D4D4D4E4E4E5050505151515453535655555958 - 585C5B5B5F5E5E6261616665656867676B6B6B6E6E6E7272727575757A7A7A7E - 7E7E8282828686868A8A8A8F8F8F9393939898989D9D9DA2A2A2A7A7A7ACACAC - B2B2B2B5B5B57777776969696969696969696868686666666464646262626161 - 615F5F5F5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A59595959 - 5959595959585858575757575757575757565656565656545454545454545454 - 5454545252525252525252525252525151515050504F4F4F4F4F4F4F4F4F4E4E - 4E4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A49494948 - 48484747474848484848484747474848484949494A4A4A4A4A4A4B4B4B4B4B4B - 4A4A4A4A4A4A4949494747474444444242423E3E3E3C3C3C3939393535353131 - 312D2D2D2A2A2A2827252726251036CB063BFF0639FF0639FF0538FF0437FF00 - 36FF0435F7314390504E444B4B494747474242423C3C3C393939363636343434 - 3333333131313030303030302F2F2F2F2F2F2E2E2E2D2D2D2C2C2C2A2A2A2929 - 2927272725252523232423221F2222210E25960027EF0026EC0026E50025E300 - 24E20024E20024E10023DF0022DE0021E0001EE51930B34C4E574D4C47444445 - 3C3C3C3535352E2E2E2929292424242121211F1F1F1D1D1D1C1C1C1C1C1C1B1B - 1B1B1B1B1A1A1A1919191818181717171515151313131212121010100E0E0E2B - 2B2BADADADAAAAAAA4A4A39F9E9E9A99999594948F8E8E89898985848480807F - 7B7A7A7676767272726D6D6D6767676564646060605D5C5C5858585655555250 - 504D4D4D4949494544454241413F3E3F3C3C3C3939393635353333333131312F - 2F2F2D2D2D2B2B2B2828292626262425252424242222222121201F201F1E1E1E - 1E1E1D1D1D1D1B1C1B1A1B1A1A1A1A1919191918181918181818181817171817 - 1717171717171617171616161616161617161616161616161616161616151615 - 1615151515151515141515151515151414141414151314131314131313131212 - 1213121213131212121212121112121212121211121111111615151B1A1B1C1B - 1B1C1B1A1C1B1B1C1B1B1B1B1B1B1B1B19191914131312111111121112121111 - 111111111111111011101011101010101010101010101010101010100F10100F - 0F0F0F0F0F0F0F0F0F0F0F0F0E0F0E0F0E0E0E0E0F0E0D0E0E0D0E0E0D0D0D0D - 0D0D0C0C0C0C0D0A0A0B0A0A0B0A0A0A0A090A0A0A0B14141423222328292830 - 2F303636363B3B3B0E0E0E070706060706070707060707060706060606060606 - 0605060605050605050505050606050605050505050505050505040504050405 - 0404040504050405040404040404040404040304030403030303040303030304 - 0303030403030304030203030302030203030302030203030303020202020202 - 0202020202020202020202010505050102023030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303232323434343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F302F303838383B3A3A3B3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838333333303030303030303030303030303030303030 - 3535353B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383838383939393939393A3A3A3A3A - 3A3B3B3B3B3B3B3E3E3E40404041414143434243424245444445454546464649 - 49494A4A4A4C4C4C4E4E4E4F4F4F5252515453535555555858585A59595C5B5B - 5F5F5F6160606564646867676A6A6A6E6E6E7171717575757979797D7D7D8181 - 818686868A8A8A8F8E8E9393939898989D9D9DA2A1A1A7A7A7ABABABB1B1B1B6 - B6B68686866B6B6B6B6B6B6B6B6B696969676767656565626262616161606060 - 5F5F5F5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5959595959 - 5959595958585857575757575757575756565655555554545454545454545454 - 54545252525252525252525151515151515050504F4F4F4F4F4F4F4F4F4E4E4E - 4E4E4E4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4949494848 - 484848484848484848484A4A4A4B4B4B4C4C4C4E4E4E4F4F4F50505050505050 - 50504F4F4F4D4D4D4A4A4A4646464242423E3E3E3B3B3B3737373232322E2E2E - 2B2B2B29282928251C202B58083AF9073AFF0639FF0639FF0538FF0437FF0236 - FF0034FF243DA44545464343423F3F3F3B3B3B38383835353534343433333332 - 32323030303030303030302F2F2F2E2E2E2D2D2D2C2C2C2A2A2A282828262626 - 2424242222212221190E258F0028F60027E90027E60026E60026E50025E30024 - E20024E20024E10023DF0023DE0022DE001EE6182FAF4A49494544423E3E3E36 - 36362F2F2F2A2A2A2626262222222020201E1E1E1C1C1C1C1C1C1C1C1C1B1B1B - 1B1B1B1919191818181717171616161414141212121010100E0E0E484848AEAE - AEA9A9A9A3A3A39E9E9E9898989392928E8D8D8888888383837F7E7F7B7B7A75 - 75757171716C6C6C6768686363636060605C5B5B5958585555554F4F4F4C4C4B - 4949484444444342423E3E3E3C3B3B3838383535353333333030302E2E2E2D2D - 2D2A2A2A2929282726272525252424242122222020201E1F1E1E1F1E1E1E1E1D - 1D1D1B1B1C1B1A1A1A1A1B191919191919191818191818181818181717181718 - 1716171716171717161716171617161616171616161616161615161515151515 - 1515151515151514151415151414141414141414131414131413121313131312 - 13121312131212121212121212111211111112111111111211121817171B1B1A - 1C1B1B1B1C1B1B1C1B1B1B1C1B1B1B1A1A1A1515151112121111121111111111 - 111011111111111110111011111010111010101010100F1010101010100F0F0F - 10100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0D0D0E0D0D0D0D0D - 0B0B0C0A0A0A0B0A0B0A0B0A0A0A0A0B0B0B1D1D1D2322232928282F2F2F3536 - 3529292A07070706070706060707070607070707070606070606060606060606 - 0605050605050605060506050505050506050505050505040405040504040505 - 0504040404040404040504040404040404040304040304040403040303040303 - 0303040403030303030303030203030203020203020303030202020202020202 - 0302020202020202050505020202303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303032323234 - 34343535353737373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F302F303838383B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383838383831303130303030303030303030303030303030303038 - 38383B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A39393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 39383939383938383938383938383938383939393939393A3A3A3A3A3A3B3B3B - 3B3B3B3C3C3C3D3D3D4040404242424343424544444645454646464949494A4A - 4A4C4C4C4D4D4D4F4F4F5252515454535655555958585B5B5B5D5D5D60606063 - 63636666666969696C6C6C7070707373737777767A7A7A7E7E7E828282868686 - 8A8A8A8F8F8F9393939898979C9C9CA1A1A1A6A5A5ABABABB0B0B0B6B6B69595 - 956C6C6C6C6C6C6C6C6C6B6B6B6969696666666363636161616161615F5F5F5E - 5E5E5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A595959595959 - 5959595858585757575757575757575757575656565555555555555555555454 - 545454545353535252525252525151515050505050504F4F4F4F4F4F4E4E4E4E - 4E4E4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949484848484848 - 4848484949494A4A4A4C4C4C4E4E4E5151515454545555555757575656565656 - 565454545151514D4D4D4747474141413C3C3C3939393535353030302C2C2C29 - 29292727262724181334B2063CFF073AFF0639FF0639FF0538FF0437FF0236FF - 0234FF333B5B3F3D383B3B3B3939393737373535353434343434343333333131 - 313030303030303030302E2E2E2D2D2D2B2B2B2A2A2A27272725252523232322 - 201616235C0029F10028EC0028E80027E70027E70026E60026E50025E30024E2 - 0024E20024E10023DF0023DE0022DE001FE52735874543393C3C3C3636363030 - 302A2A2A2626262323232121211F1F1F1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A - 1A1A1919191717171616161414141111111010100E0E0E676767AEAEAEA9A9A8 - A3A2A29D9C9C9797979292928D8D8D8887878282827D7D7D7878787474747070 - 706C6C6C6767676362635F60605B5B5B5656565352534F4F4F4B4B4B49484745 - 45444241403F3D3D3C3B3C3938383535353333333131312E2F2F2D2D2D2A2A2A - 2827282626272625262323232222222121211E1E1F1E1E1E1E1E1F1D1D1D1B1C - 1C1B1B1B1B1A1A191A1919191919191919181819181818181819171718171717 - 1717171617171717171617161716161616161616161516161515151615151515 - 1515151515151515141415141415141414151413141413141313131313131213 - 121212121212121212121212121211121212111111121111111313131A1A1A1C - 1B1B1B1C1B1B1B1B1C1B1B1B1B1B1B1A1B161617111212111111111111111111 - 10111011111011101011111010101010101010101010100F0F10100F10100F10 - 0F0F0F0F0F0F0F0F0F0F0E0F0E0F0E0F0E0D0E0F0D0E0E0D0E0D0D0D0B0B0B0B - 0B0A0A0B0A0A0A0B0A0A0B0F0F0F1F1F1F2322232928292E2E2E333433131313 - 0807070707070707070706070706070606060607060706070606060506060606 - 0605060506060606050505050505050605050505050505050504050405040405 - 0505040404040404040404040404040404040304040304040303040403040303 - 0303030303030303030203030303030303030302030203020202030302030202 - 0202020205050502020230303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303232323434343535353737 - 373939393B3B3B3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30 - 2F303838383B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383535353030303030303030303030303030303030303232323A3A - 3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 383939383938383938383938383A39393939393A3A3A3A3A3A3B3B3B3B3B3B3C - 3C3C3D3D3D3D3D3D3F3F3F4141414444444645454746464848484949494B4B4B - 4D4D4D4F4F4F5252525454535656555958585B5A5A5D5D5D5F5F5F6363636666 - 666969696C6C6C70706F7373737676767A7A7A7E7E7E8181818585858A8A8A8E - 8E8E9292929797979C9C9BA0A0A0A5A4A4AAAAAAAFAFAFB4B4B4A4A4A46D6D6D - 6E6E6E6D6D6D6C6C6C6B6B6B6868686565656363636161616060605F5F5F5F5F - 5F5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A59595959595959 - 5959585858585858585858585858575757575757565656565656565656555555 - 5454545353535454545353535252525151515050505050504F4F4F4E4E4E4E4E - 4E4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A49494949494948484848484847474748 - 48484A4A4A4D4D4D5151515454545858585C5C5C5E5E5E5E5E5E5E5E5E5C5C5C - 5959595454544E4E4E4646463F3F3F3B3B3B3636363232322D2D2D2929292826 - 1E2228400E39E0083CFF083BFF073AFF0639FF0639FF0538FF0337FF0736F033 - 3542373733373737363636353535353535343434343434333333323232323232 - 3131313030302F2F2F2D2D2D2B2B2B29292926262624242422211F1F1F1F0627 - C0002AF50029EA0028EA0028E90027E70027E70026E60026E50025E30024E200 - 24E20024E10023DF0023DE0021E20624CC373A463838343333332F2F2F2A2A2A - 2626262323232121211F1F1F1E1E1E1D1D1D1C1C1C1C1C1C1C1C1C1A1A1A1919 - 191717171616161414141212121010100F0F0F858585ADADADA7A7A6A2A2A19C - 9B9B9696969191918C8C8C8787878182817D7D7D7877787473746F6F6F6B6B6B - 6666666363635F5E5F5A5A5A5555565252524F4F4E4B4A4B4948484444434142 - 413F3E3D3C3B3B393838363535333333302F302E2E2E2C2C2C2A2A2A28282827 - 27272525252323232121212121211F1F1F1E1E1E1F1F1E1C1C1C1C1C1C1B1B1B - 1B1B1B19191A1919191919191919181918181918181818181817181817181717 - 1717171717171616161717161616161616161616161615161615151515151515 - 1515151515151415141415141415141414141314141314131313131212121312 - 1312121212121212121212121112121111111111111111111111111717181C1B - 1B1C1B1B1B1C1C1B1B1B1B1B1B1B1B1B18181713131211111111111111111111 - 11111110111110111010101010111010101010100F100F100F0F100F100F100F - 0F0F100F0F0F0F0E0F0E0E0F0E0E0F0E0D0E0E0D0D0C0C0C0B0B0B0B0B0B0B0B - 0A0B0B0B0A0A0B1615151F201F2222222627272C2C2C30303116151508070708 - 0707070707060707060706060706060707060606070606060606060606060605 - 0606050605050606050505050505060505050505050505050505040405040504 - 0404050404040404040504040404040403030304030404040303030403030303 - 0303030303030303030303030203030202030202020202020203030202030202 - 0505050202023030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303232323434343535353737373939393B3B3B - 3D3D3D3434342E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F302F303938383B3B - 3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 38383938383232323030303030303030303030303030303030303433343B3B3A - 3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A393939393939 - 3939393939393939393939393939393939393939393939393939393939393938 - 3939383938383938383A39393A39393939393A3A3A3A3A3A3B3B3B3C3C3C3D3D - 3D3D3D3D3F3F3F4040404141414444434646454948484949494B4B4B4D4D4D4F - 4F4F5151515353535656555959585B5A5A5D5C5C5F5F5F626262666666686868 - 6C6C6C6F6F6F7272717676757A79797D7D7D8181818484848888888D8D8D9191 - 919595959A9A9A9F9F9EA3A3A3A9A8A8AEAEAEB3B3B3B1B1B17373736F6F6F6E - 6E6E6E6E6E6C6C6C6969696666666464646262626161615F5F5F5F5F5F5F5F5F - 5E5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5959595959595959 - 5959595958585858585858585858585858585858585858585858585858585856 - 56565656565555555454545252525151515050505050504F4F4F4E4E4E4E4E4E - 4D4D4D4C4C4C4B4B4B4A4A4A4949494848484848484747474646464646464848 - 484B4B4B5151515756515F5C5162615A6464636666666666666464646161615C - 5C5C5555554C4C4C4242423D3D3D3838383333332E2E2E2B292325282F1039D0 - 093EFF093BFF093BFF083BFF073AFF0639FF0639FF0438FF0C36DD3333393534 - 3135353535353535353535353534343434343433333332323232323232323230 - 30302F2F2F2D2D2D2B2B2B29292926262623232321201817214D002AEF002AEF - 0029EC0029EA0028EA0028E90027E70027E70026E60026E50025E30024E20024 - E20024E10023DF0022DF0021E4202C713432272E2E2E2B2B2B29292925252523 - 23232121212020201F1F1F1E1E1E1D1D1D1C1C1C1C1C1C1B1B1B1A1A1A181818 - 161616131313121212101010191919A2A2A2ACACACA6A6A6A0A0A09A9A9A9595 - 959090908B8A8A8585858181817C7C7C7777777373736E6E6E6A6A6A66666661 - 61615D5D5D5959595555555252524D4E4E4A4A494747484444444141413E3E3D - 3C3B3B3937373635353433333030302E2E2E2C2C2C2A2A2A2828282727272525 - 252323242221212020201F1F1F1F1E1E1D1E1D1D1D1C1C1B1B1B1B1B1B1B1B19 - 1A1A191A1919191A191919191919181818191817191818181718181717171717 - 1716171617161616161616161616161516161615151616151516151615161515 - 1514151514151514141414151514141414131414131413131312131312121212 - 12121212121212121111121111111111121111111111111111111515151B1B1A - 1C1B1B1B1C1B1B1B1B1B1B1B1B1B1B1918191312121111121211111011111110 - 1010111111101010101110111010101010101010100F0F100F0F1010100F0F10 - 0F0F0F0F0F0F0E0E0F0E0E0F0E0E0E0E0E0D0D0D0B0B0C0B0B0B0A0B0A0A0A0B - 0B0B0B0C0D0C1D1D1D2121212525252928292E2F2F2E2E2D0A0A0B0707070707 - 0707070707070707070707060706060707060706070706060606060605060605 - 0605060606060505050506050605050505050505050405040504050505040405 - 0504050404040404040404040404040404030404040303040403040303030303 - 0303030302030303020303020302030303030302030302030303030205050502 - 0202303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303232323434343535353737373939393B3B3B3D3D3D3434342E - 2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F302F303938383B3B3B3B3B3B3B3B3A - 3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 383837373130313030303030303030303030303030303030303737373B3B3A3B - 3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A39393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 39383938383A39393A39393A39393A3A3A3A3A3A3B3B3B3C3C3C3D3D3D3D3D3D - 3F3F3F4040404141414242424444444545454848474A4A4A4D4D4D4F4F4F5151 - 515353535656565858575A5A595D5C5C5F5F5F6161616565656868686A6A6A6E - 6E6E7171717575747979787D7C7C8080808484848888888C8C8C919191959595 - 9999999E9E9EA3A3A2A8A8A8ACACACB1B1B1B6B6B68181817070707070706F6F - 6F6D6D6D6A6A6A6868686464646262626262626161615F5F5F5F5F5F5F5F5F5E - 5E5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A595959595959595959 - 5959595858585A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5B5B5B5959 - 595858585757575555555353535151515050505050504F4F4F4E4E4E4D4D4D4C - 4C4C4B4B4B4A4A4A494949474747454545464646454545454545464646494845 - 514E434C536D3953B1505C886A69636F6D656D6D6C6B6B6B6969696464645D5D - 5D5454544848483E3E3E393939343435302F2B2B2B2A1537B70A3FFF0B3DFF0A - 3DFF093CFF093BFF083BFF073AFF0639FF0438FF1035CB323133333331343434 - 3535353535353535353535353434343333333333333333333232323131312F2F - 2F2E2E2E2B2B2B292929262626222222211E11102480002BFC002AEE002AED00 - 29EC0029EA0028EA0028E90027E70027E70026E60026E50025E30024E20024E2 - 0024E10023DF0021E90F24982A29212828262626262525252424242323232121 - 212020201F1F1F1E1E1E1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A18181816161613 - 1313121212101010373737AEAEAEAAA9AAA4A4A49F9F9F9999999494948F8F8F - 8A898A8585858080807B7B7B7676767272726E6E6D6969696464646060605C5C - 5C5858585555555151514D4D4D494A494848484343434141413E3E3D3C3C3B38 - 38383635363433333130302E2E2D2C2B2C2A2A2A272727272727252525242424 - 2121212020211F1F1F1F1E1F1E1D1D1C1C1C1B1C1B1B1B1B1B1B1B191A1A191A - 191A1A19191A1919191919191919181819181718181818171718171717171717 - 1717171716161616171617161616161616161616151616151616151516161515 - 1515151415151415151415141414141413141413141313131212131312121212 - 121212121212121111121111111111111112111111111111111312131A1A191B - 1B1B1B1B1B1B1B1B1B1B1B1B1B1A191918121213121211121111111111111111 - 1011111111101010101010101010101010100F10101010101010100F0F0F0F0F - 0F0F0F0F0F0E0E0F0E0E0E0D0E0E0D0D0B0B0C0B0B0B0B0B0B0B0B0B0A0B0B0C - 0B0C1211121F1F1F2323242726272B2B2B2E2E2E1E1D1E070808070707070707 - 0707070707070707070707060606070606070607070606060606060505060606 - 0606060605060606060605050505050505050405050504050504040404040404 - 0404040404040404040404040303040403040304040304030404040304030303 - 0303040303030303030203030203030303030303020202030505050202033030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3232323434343535353636363838383A3A3A3D3D3D3434342E2E2E2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F302F303939383B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B - 3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393838393838393838393838 - 3535353030303030303030303030303030303030303131313939393B3B3A3B3A - 3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A3939393939393939 - 3939393939393939393939393939393939393939393939393939393939383939 - 383A39393A39393A39393B3A3A3A3A3A3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E40 - 40404141414242424444444545454747464949484B4A4A4C4C4C4F4F4E525252 - 5554545757575959595C5C5C5F5E5E6261616363636767676A6A6A6D6D6D7171 - 717474747878777C7C7B7F7E7E8483838787878B8B8B8F8F8F9393939897979C - 9C9CA1A0A0A6A6A6AAAAAAB0B0B0B5B5B59494947272727272727171716F6F6F - 6C6C6C6969696666666363636262626161616060605F5F5F5F5F5F5F5F5F5E5E - 5E5E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5959595959595A5A5A5A - 5A5A5B5B5B5C5C5C5E5E5E5F5F5F6060606060606060606060605E5E5E5C5C5C - 5A5A5A5858585656565353535252525050505050504F4F4F4E4E4E4C4C4C4B4B - 4B49494948484847474744444443434343434344434047443945464E354B9C1F - 4CEF154AFF194AFE3354CD5C668E75736B75736B6F6F6E6A6A6A626262595959 - 4D4D4D4141413B3B3B3635323230281A38A90C41FF0C3FFF0C3EFF0B3EFF0A3D - FF093CFF093BFF083BFF073AFF033AFF1036C9302F2D33313034343434343435 - 35353535353535353535353434343333333333333333333232323030302E2E2E - 2B2B2B282828252525222221201E150B269B002CFD002AEF002AEE002AED0029 - EC0029EA0028EA0028E90027E70027E70026E60026E50025E30024E20024E200 - 24E10023E70923AD232323232221222222232323222222222222212121212121 - 1F1F1F1F1F1F1F1F1F1E1E1E1D1D1D1B1B1B1919191818181616161414141111 - 110F0F0F5F5F5FAFAFAFA9A9A9A3A3A39E9E9E9898979392928E8D8D88888884 - 83837E7E7E7A7A7A7676767070706D6D6D6768686363646060605B5B5B585858 - 5554544F4F4F4D4D4D4949494746464343434040403D3D3D3B3B3A3838373535 - 353332323130302F2E2E2C2B2C29292927282727272725252523232321212121 - 20211F1F1F1F1F1F1E1E1E1C1D1D1B1C1C1C1C1B1B1B1B1A1A1A1A1A1A19191A - 191919191919191A191919191818181918181918171817171817171717161717 - 1617171717171617161616161616151616151616161615161515151515151515 - 1515151515141415141514141414141314141314131313121312131213131212 - 1212121212121212121112111112111111111111111111111111111A19191B1B - 1B1B1B1B1B1B1B1B1B1A1A1B1B19191812121211111111111111101110111011 - 11111110111011101010101010101010100F0F100F10100F0F100F0F0F0F0F0F - 0F0E0F0E0E0F0E0E0E0E0D0D0E0E0E0B0B0C0B0B0B0A0B0B0B0B0A0B0B0A0B0C - 0C1A1B1B2121212424242828282A2A2A2C2C2C10101108070808080707070707 - 0607070707060707060607070606060607060606060706060606060605060605 - 0506050505050505050505050505050505050405050505050505050505050504 - 0504040405040404040404040404040403040403030404040403030303030303 - 0303030303030303030303030303020303030203080805020202303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303031313135353534 - 34343636363737373A3A3A3C3C3C3333332E2E2E2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F302F303939393B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A - 3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383833 - 33333030303030303030303030303030303030303231323A3A3A3B3B3A3B3A3A - 3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A393A3A393A3A393A39393A39393A39393A393939393939393939 - 39393939393939393939393939393939393939393939393939393939383A3A39 - 3A39393A39393B3A3A3B3A3A3B3B3B3B3B3B3D3D3D3D3D3D3E3E3E4040404040 - 404242424444444545454747474848474A4A494C4B4B4E4D4D504F4F52515155 - 54545757575A5A5A5D5C5C5F5F5F6362626666666969696C6C6C706F6F737373 - 7777777A7A7A7E7E7E8181818585858989898E8D8D9291919696969B9B9B9F9F - 9FA5A5A5A9A9A9AEAEAEB4B4B4A6A6A67373737373737272727171716E6E6E6A - 6A6A6767676565656262626262626161616060605F5F5F5F5F5F5F5F5F5E5E5E - 5E5E5E5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5A5A5A5959595959595A5A5A5B5B - 5B5D5D5D5F5F5F6262626464646565656565656464646363636161615E5E5E5B - 5B5B5959595656565454545151515050505050504E4E4E4D4D4D4B4B4B494949 - 464646454545424343404040413F3740414735478A244DDD1A4DFF1A4CFF1A4C - FF194BFF1449FF1849FE3A59C9646C8C76746B716F686666655C5C5C51515143 - 43433D3C383836301F3AA30D41FF0E40FF0E40FF0D3FFF0C3EFF0B3EFF0A3DFF - 093CFF083CFF073BFF0D37D62130692F2F2B3131303434343434343535353535 - 353636363535353535353434343333333333333232323030302E2E2E2B2B2B29 - 2929252525222221201E180B26A1002DFD002CF0002AEF002AEE002AED0029EC - 0029EA0028EA0028E90027E70027E70026E60026E50025E30024E20024E20024 - E70722B62121242322202222222222222222222121212121212121212020201F - 1F1F1F1F1F1E1E1E1D1D1D1C1C1C1919191818181616161414141111110F0F0F - 878787ADADADA7A7A7A2A2A29D9D9D9797979291918C8C8C8787878382827E7D - 7D7879787474747070706B6B6B6767676362635E5E5E5B5B5B57575753545450 - 4F4F4C4D4C494949464646434342403F3F3C3C3C3A3A3A373736353535323231 - 302F2F2F2E2E2D2C2C2A2A2A2727282727262525252323232221212121211F1F - 1F1F1F1F1E1E1E1C1C1D1C1C1B1C1C1B1B1B1B1A1B1A1A1A191A1A1A1A1A1919 - 191A191919191919191919181818191818181818181817181717171717171717 - 1717161716161717161616161616161616151615161616161616151515151515 - 1515151514141415141514141414131414131413121312121312121313121212 - 12121212121212111111111112111111121111111111101111101817171C1B1B - 1B1B1B1B1B1C1A1B1B1A1B1B1919191313121211111111111111111111101110 - 111111111010111110101010101010101010100F100F10100F0F0F0F100E0F0F - 0E0F0F0E0E0F0E0D0E0E0D0D0C0C0B0B0B0B0B0B0B0A0B0A0A0A0C0C0C0E0D0D - 1F1E1E2121222525252727272828281F20200808080708070707070707070707 - 0707070606070706070606070606060606060606060605050606060506050605 - 0506060506050605050505050505050505050505050505050504040405040504 - 0404040404040404040404030404040403030403030404030403030303030303 - 0303030303030303020303030202030305050502030230303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303333333535353737 - 373838383A3A3A3A3A3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F302F3039 - 39393B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A - 3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383838383030 - 313030303030303030303030303030303030303333333B3B3A3B3B3A3B3A3A3B - 3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A393A3A393A3A393A39393A39393A39393A39393939393939393939 - 393939393939393939393939393939393939393939393939393A3A393A3A393A - 39393B3A3A3B3A3A3C3B3B3B3B3B3D3D3D3D3D3D3E3E3E404040404040424242 - 4343434444444747474848484A4A494B4B4A4E4D4D504F4F5251515554545756 - 565858585B5B5B5E5E5E6161616464646767676A6A6A6D6D6D71717174747478 - 78787C7C7C80807F8484838887878C8C8C9090909594949999999E9E9EA2A2A2 - A8A8A8ADADADB2B2B2B4B4B47C7C7C7575757474747272726F6F6F6C6C6C6969 - 696666666464646363636262626161616060605F5F5F5F5F5F5F5F5F5E5E5E5E - 5E5E5D5D5D5B5B5B5B5B5B5A5A5A5959595959595858585959595B5B5B5D5D5D - 6161616464646767676969696A6A6A6A6A6A6969696767676464645F5F5F5C5C - 5C5959595656565454545151515050504E4E4E4D4D4D4B4B4B47474745454543 - 434340403F3F3E3A334484234EE01D50FF1C4FFF1C4EFF1C4DFF1B4CFF1A4CFF - 1A4BFF184AFF1347FF1A4AFB3A58C95F68886B69616160585353524645413E3D - 37223EA60E43FF0F41FF0F40FF0E40FF0E40FF0D3FFF0C3EFF0B3EFF093EFF0C - 39E21A2F7E2A2A2E2E2C232F2F2F313132333333343434363636363636363636 - 3636363535353535353434343333333333333131312E2E2E2C2C2C2929292626 - 26232322211E130C2695002EFF002CF1002CF0002AEF002AEE002AED0029EC00 - 29EA0028EA0028E90027E70027E70026E60026E50025E30024E20024EA0922A6 - 20201D21211F2222222222222222222222222121212121212121211F1F1F1F1F - 1F1F1F1F1D1D1D1C1C1C1A1A1A181818151515141414111111212121A9A8A9AB - ABABA6A6A6A1A1A19B9B9A9695959090908A8A8A8585858181817C7B7C787777 - 7372726F6E6E6A6A6A6666666161625D5E5D5A5A5A5656565253534F4F4F4B4B - 4C4848484545454343433F40403D3C3C3A3A3A3737373535343333323030302F - 2E2E2C2B2B292929282827272626252525232323222222212120201F201F1F1F - 1E1E1E1D1D1D1C1C1B1C1C1C1B1C1C1A1B1A1A1A1A1A1A1A1A1A1A1A1A191A1A - 1919191919191919191919181818181718181818171818171717171717171617 - 1616171616161617161616161616161516151516151616151515151515151515 - 1514141414151414151414141413141413141313131313131313131213121212 - 121212121212121212111111121111111111111111111011101717171B1B1B1B - 1B1B1C1B1B1B1B1B1B1B1B181819121212111111111111111111111110111011 - 101110101011101010101010100F10100F100F100F0F0F0F0F0F0F0F0E0F0F0E - 0E0E0E0E0E0E0E0E0E0E0B0C0D0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C1514151F - 1F20222222252424262626252424121213070808070707070807070707070707 - 0707070607060706060607060606060606060706060606060506060606060605 - 0505060605050505050605050505050405050505050505040405050505040404 - 0404040405040404040404040403040303030303030403030403030303030303 - 0303030303030303030302030805080302023030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030323232363636373737393939 - 3B3B3B3D3D3D3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3939393B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3B3A3B3A3A3B3A3A3B - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838363636303030 - 3030303030303030303030303030303030303434343B3B3A3B3B3A3B3A3A3B3A - 3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A39393A39393A39393A3939393939393939393939 - 3939393939393939393939393939393939393939393A3A3A3A3A393A3A393B3A - 3A3B3A3A3C3B3B3C3B3B3C3C3C3D3D3D3E3E3E3F3F3F40404042424243434344 - 44444646464747474949494B4B4A4E4E4D4F4E4E515151545353565555595858 - 5B5B5B5D5D5D6060606363636666666969696D6D6D7070707474747777777B7B - 7B7F7F7F8282828787868C8B8B908F8F9494949998989D9D9DA2A2A2A6A6A6AC - ACACB1B1B1B5B5B58F8F8F7676767676767474747272726F6F6F6A6A6A676767 - 6565656363636363636161616161616060605F5F5F5F5F5F5F5F5F5E5E5E5D5D - 5D5C5C5C5A5A5A5959595959595858585858585757575959595C5C5B62615D66 - 65636969676D6D6D6F6F6F7070706E6E6E6C6C6C6969696565656060605B5B5B - 5858585656565353535050504E4E4E4D4D4D4A4A4A4747474444444141413E3D - 3B3B3C3E254DDE1D52FF1F50FF1F4FFF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A - 4BFF194AFF1748FF1246FF1949FB3554C5525B7A5754494646462342B51044FF - 1143FF1042FF1041FF0F40FF0E40FF0D40FF0B40FF0D3DF11832952428382926 - 1B2B2B282E2E2E30303032323234343435353536363637373736363636363636 - 36363535353535353434343333333131313030302D2D2D2A2A2A262626232323 - 211E13122370002EFC002CF2002CF1002CF0002AEF002AEE002AED0029EC0029 - EA0028EA0028E90027E70027E70026E60026E50025E30025EF0E2287211F1420 - 201F2121212222222222222222222222222121212121212121212020201F1F1F - 1E1E1E1C1C1C1A1A1A1818181515151414141111114D4D4DAFAFAFAAAAAAA5A5 - A59F9F9F9A9A999494948F8F8E8A8A898484848080807B7B7B7676767272726E - 6D6D696A696565656060605C5D5D5959595556555252524F4F4F4A4B4A484948 - 4545454242423F3F3E3C3C3C39393937373735353532323130302F2E2E2D2C2B - 2B2A292928282827272725252423232322232220202020201F1F201F1E1F1E1D - 1D1D1C1B1C1C1C1C1B1B1C1A1A1A1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A19191A - 1919191919191919191918181918171818171817181817171717161717161617 - 1716161616161616161616161616151516161516151515151515151515141515 - 1414141515151414141414141314141313131313131313131213131212121212 - 1212121212121112111111111111111111111111111010111716171B1C1B1C1B - 1C1B1B1B1B1B1B1B1B1A19181913121211111111111111111011101110111110 - 1010101111101010100F100F10100F0F0F0F100F100F10100E0F0F0E0F0F0E0E - 0E0E0E0E0E0E0E0D0E0B0C0B0B0B0B0B0B0B0B0B0B0B0C0C0B0C0B1C1C1D2020 - 202121212222222222221D1D1D07080808080707070707070707070706070707 - 0707070706070706060606070706060607060606050606060606060506050505 - 0506050605050505050505050505050505050404040505040505050404050404 - 0404040404040404030403040403040403040304030303030403030303030303 - 0303030303030302080808020203303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303636363838383939393B3B3B3D - 3D3D3838382F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3736363B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383834343430303030 - 30303030303030303030303030303030303737373B3B3A3B3B3A3B3A3A3B3A3A - 3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A393939393939393939393939 - 39393939393939393939393939393939393939393A3A3A3A3A393B3B3A3B3A3A - 3C3B3B3C3B3B3D3C3C3D3D3D3D3D3D3F3F3F4040404141414343434444444646 - 464747474949494B4B4B4D4D4C4F4F4E5150505352525555555858585B5A5A5D - 5D5D5F5F5F6262626666666969696C6C6C7070707373737777777A7A7A7E7E7E - 8282828585858A8A8A8E8D8D9392929797979C9B9BA0A0A0A5A5A5A9A9A9AFAF - AFB4B4B4A3A3A37777777777777676767474747070706D6D6D68686865656564 - 64646363636262626161616161616060606060605F5F5F5E5E5E5D5D5D5C5C5C - 5959595858585858585757575656565656565756555A5A5A59607563646B6A6A - 69716F6776736877756B77756D7272716D6D6D6969696565655F5F5F5B5B5B57 - 57575454545151514E4E4E4C4C4C4949494646464343433E3E3E3B3A37373941 - 234FEB2052FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4B - FF194AFF1849FF1648FF1247FF1848FA2F4BB42547C71145FF1245FF1244FF11 - 43FF1042FF1041FF0E41FF0F3FFB1736AB23294329261B2A28232B2B2B2D2D2D - 3030303333333434343535353636363636363737373737373737373636363636 - 363535353535353333333232323030302E2E2E2B2B2B28282824242421211B1A - 2039022DEA002DF7002DF1002CF1002CF0002AEF002AEE002AED0029EC0029EA - 0028EA0028E90027E70027E70026E50026E70025E7171F4F201E162020202121 - 212222222323232222222222222121212121212121212020201F1F1F1E1E1E1C - 1C1C1A1A1A1818181515151313131111117D7D7DADADADA8A8A8A3A2A29D9D9D - 9898989292928D8D8D8888888382837E7E7F7A79797575757070706C6C6C6868 - 686464646060605B5C5C5859585555555151514D4E4E4B4A4A47474844444441 - 41413E3E3E3C3B3B3A393A37363635353532323230302F2F2F2E2C2C2B2A2929 - 28272726252625252522232323222220202020201F201F201E1E1F1E1D1D1C1C - 1C1C1C1C1B1B1B1A1A1B1B1A1B1B1A1A1A1A1A1A1A1A1A1A1A191A1A1A1A1919 - 1919191919191919191818191818191817181717181717171617171717171616 - 1717171716171516161516151616151616161516151515151515151415151515 - 1414141414141414141414131414131313121312131312131212121212121212 - 12111212121111111112111111111111111111111110101817171C1C1B1B1B1B - 1B1B1B1A1B1B1B1A1B1817171111121112111111111110101110111111101010 - 1010101111111110101010100F0F10101010100F0F0F0F0E0F0F0E0E0F0D0E0E - 0E0D0E0E0D0D0D0C0B0B0B0B0B0C0B0B0B0B0B0B0C0C0B111011201F20201F1F - 1F1F1F1F1F1F1C1C1D1112110D0C0D0C0C0D0C0B0B0707080707070607070606 - 0606070606070607060606060606060606060606060506060605060605050605 - 0605050505050505050505050405040505050404050505050505040404040404 - 0404040404040404040304040404040403030303040303030303030303030303 - 0303020305080502020330303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303333333838383939393B3B3B3C3C3C3D3D - 3D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131313B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383332333030303030 - 303030303030303030303030303030303737373B3B3A3B3B3A3B3A3A3B3A3A3B - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A393A3A393A3A393A39393A39393A39393A39393939393939393939393939 - 393939393939393939393939393939393A3A3A3A3A3A3B3B3A3B3B3A3C3B3B3C - 3B3B3D3C3C3E3D3D3D3D3D3F3F3F404040414141424242444444454545474747 - 4949494B4B4B4C4C4C4E4E4E50504F5251515554545756565A59595C5B5B5F5F - 5F6262626464646868686B6B6B6E6E6E7272727575757979797D7D7D80808085 - 85858989888D8D8D9191919695959A9A9A9F9F9FA3A3A3A8A8A8ADADADB2B2B2 - B3B3B37E7E7E7979797878787676767171716F6F6F6B6B6B6767676464646363 - 636363636161616161616161616060605F5F5F5E5E5E5C5C5C5B5B5B59595957 - 575755555554545453545454535256544D455DAF3564F93A63EB4365D54B67C2 - 546AB65A6DAD6170A07676757272726D6D6D6969696464645E5E5E5959595757 - 575252524F4F4F4C4C4C4949494545454141413D3D3D39383434394A2352F721 - 52FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF - 194AFF1849FF1749FF1648FF1247FF1347FF1546FF1446FF1345FF1244FF1143 - FF1043FF143EE025305B2B2A202B2A232C2C2C2D2D2D2F2F2F30303032323234 - 3434363636363636373737383838383838383838373737363636363636363636 - 3535353535353333333131312F2F2F2C2C2C292929262626222221201E160B27 - A1002EFF002DF3002DF2002CF1002CF0002AEF002AEE002AED0029EC0029EA00 - 28EA0028E90027E70027E60027F00724B31D1D1C1F1E1D202020222222222222 - 2323232323232323232323232121212121212020201F1F1F1E1E1E1C1C1C1A1A - 1A181818151515131313202020A7A7A7ACACACA7A7A7A1A1A19B9B9B96969690 - 90908B8B8B8686868182827D7D7D7978797373737070706B6B6B666667636364 - 5F5F5F5B5B5B5858585354535050504D4D4D4949494747474343434040403D3D - 3D3B3B3B3839393636363435343232322F2F2F2E2E2D2C2D2C29292828272727 - 26252625252322222221222020202020201F20201F1F1E1D1E1D1C1C1C1C1C1C - 1B1B1B1A1B1A1A1B1A1A1A1A1B1A1A1A1A1A1A1A1A1A1A19191A191919191919 - 1A19191919191918181818181819181818171718171717171617171717161716 - 1616171616161616161516161516151515151515161616151515151515151415 - 1414141414141414141413141313141313131213121213121212121212121211 - 121211121112111212121111111111111111111011111717171B1C1B1B1B1C1B - 1B1B1A1B1B1B1B1A171617111211111112111111111111111110111110101111 - 11101010101010101010100F10100F0F0F0F0F0E0F0F0E0E0F0E0E0E0E0E0E0E - 0D0E0E0E0B0C0B0B0B0C0B0B0B0B0B0B0C0C0C0C0B0C1B1A1B1E1E1E1F1F1F1D - 1D1D1B1B1B1B1B1B1A1A1A191919181918181818171817171718161616131313 - 1313131313131010100F0F0F0F0F0F0F0F0F0A0A0A0A0A0A0A0A0A0809090506 - 0605050505050505050504050504050505050504040504050404040404040404 - 0404040404040404040404040403040304030304030303030304030303030203 - 0805080303033030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303131313737373939393A3A3A3C3C3C3D3D3D343434 - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3838383B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838313131303030303030 - 3030303030303030303030303030303837373B3B3A3B3B3A3B3A3A3B3A3A3B3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A393A3A393A3A393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393A3A3A3A3A3A3B3B3B3B3B3A3B3B3A3C3B3B3D3C - 3C3E3D3D3E3D3D3E3E3E4040404040404242424444444545454747474848484A - 4A4A4B4B4B4E4E4E50504F5252515554545756565958585C5B5B5F5E5E616161 - 6464646666666A6A6A6D6D6D7070707474747777777B7B7B7F7F7F8383838787 - 878C8C8B9090909494949998989D9D9DA2A2A2A6A6A6ACACACB1B1B1B5B5B592 - 92927A7A7A7979797777777474747171716D6D6D6A6A6A676767646464646464 - 6262626161616161616060605E5E5E5D5D5D5B5B5B5959595757575454545252 - 5251515150504F524F47465B9F3566FF3565FF3464FF3263FF3062FF2E60FF2F - 60FF2F60FF65729C79776F7272726D6D6D6767676262625D5D5D585858555555 - 5050504D4D4D4949494444444040403B3B3B383731313A5B2353FB2253FF2152 - FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF19 - 4AFF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1244FF1044FF - 183ECB312F2A302F2C3031313131313232323333333535353636363737373838 - 3839393939393939393939393938383839393938383837373736363636363635 - 35353434343232323030302D2D2D2A2A2A28282824242422201B1B2034032DE0 - 002EFD002DF3002DF2002CF1002CF0002AEF002AEE002AED0029EC0029EA0028 - EA0028E80027ED0127E4151E451F1D151F1F1F21212122222222222223232323 - 23232424242323232323232222222020202020201E1E1E1C1C1C1A1A1A171717 - 1515151212124E4E4EAFAFAFAAAAAAA5A5A59F9F9F9999999494948F8F8F8A8A - 8A8585858080807C7B7B7876767372726E6E6E6A6A696666666162615F5E5E5A - 5A5A5556565354544F4F504C4C4C4949494646464343434040413D3D3D3B3B3B - 3838383635363433333131312F2F2F2E2E2E2B2C2B2929292928282726262523 - 232423232221222121202020201F1F1F1E1D1E1D1E1E1C1D1C1C1C1D1B1B1B1B - 1B1B1B1B1B1B1B1A1B1A1B1B1B1A1A1A1B1A1A1A1A191A1A1A1A1A191A191919 - 1919191919181918181918171818181818171817171717171717171717161617 - 1616161616161616161515151516151615151515161515151514141515141414 - 1515151415141414141313141314131213121212131213131212121211121212 - 1211111212111111111111121111111010111110101717161B1C1B1B1B1B1B1B - 1B1B1B1B1A1B1B15151511111211111111111111111110111111111110111010 - 1110101010101010100F100F1010100F0F100E0F0F0F0E0E0E0E0E0E0E0D0E0E - 0D0D0E0B0C0C0C0B0B0B0B0B0B0B0B0C0B0C0E0E0D1C1D1C1D1D1C1C1C1C1B1B - 1B1B1B1B1A1A1A1A1A1A19181918181819181818181818181818181818181818 - 1818181818181818181818181818181818171717171717171717171717171717 - 1717171414141312131414140E0E0E0505040405040404040504040405040404 - 0404040403040304030404040304030303030303030303030303030308080802 - 0303303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303535353838383A3A3A3B3B3B3D3D3D3C3C3C2E2E2E2F - 2F2F2F2F2F2F2F2F2F2F2F3232323B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939383939383939 - 3839383839383839383839383839383838383837373730303030303030303030 - 30303030303030303030303131313939393B3B3A3B3B3A3B3A3A3B3A3A3B3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 393A3A393A3A393A39393A39393A39393A393939393939393939393939393939 - 39393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3A3C3C3B3D3C3C3E3D3D - 3E3D3D3F3E3E4040404040404242424343434444444747474747474949494B4B - 4B4E4E4E4F4F4F5151515454535655555858585C5B5B5E5D5D605F5F62626266 - 66666969696C6C6C7070707373737777777B7B7B7E7E7E8282828686868A8A8A - 8E8E8D9393929797979C9B9BA1A0A0A5A5A5A9A9A9AEAEAEB4B4B4A6A6A67B7B - 7B7B7B7B7979797777777272726E6E6E6B6B6B68686865656564646463636362 - 62626161616060605E5E5E5D5D5D5A5A5A5757575555555252524F4F4F4D4D4D - 4E4B4146568C3767FD3667FF3666FF3665FF3564FF3464FF3363FF3261FF2E5F - FF4467DB7A79767675747070706B6B6B6666666060605B5B5B5656565151514D - 4D4D4949494444443F3F3F3A3A3A36342D2F3C6D2455FF2354FF2253FF2152FF - 2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194A - FF1849FF1749FF1748FF1648FF1547FF1546FF1446FF1345FF1144FF1542EC34 - 363F3736323737373737373838383838383939393A3A3A3B3B3B3B3B3B3B3B3B - 3C3C3C3B3B3B3B3B3B3A3A3A3939393939393838383737373636363636363434 - 343333333131312F2F2F2C2C2C292929262626232323211F16172254022EEC00 - 2EFE002DF3002DF1002CF1002CF0002AEF002AEE002AED0029EC0029EA0028F0 - 0028F110206D1D1B101E1D1E2020202121212222222424242424242323232424 - 242424242323232222222020201F1F1F1E1E1E1C1C1C19191917171714141412 - 1212848584AEAEAEA8A8A8A3A3A39D9D9D9898979392938E8D8E888888838383 - 7F7E7F7A7A7A7776767270716E6D6D6969696565656160615C5C5C5959595656 - 565252524E4E4E4B4B4C4949494545454242423F3F403C3C3C3A3A3A38383836 - 36363333323030302F2F2F2D2D2D2B2B2B292A29282928272726252424242223 - 2321212121202020201F1F201E1E1E1E1E1E1D1C1C1D1C1C1B1C1B1B1B1B1A1B - 1B1A1B1B1B1A1A1A1B1A1A1B1A1A1A1A1A1A191919191A1A1A1A191A19191919 - 1919191919191818181817181817181717181717171716171717161716171616 - 1616161616161616161615161616151615151515151515151415151515141514 - 1414151414141514131413131313121312131312121212121212121212121211 - 11121211121111121111111111111010111011101919191C1B1B1B1B1B1B1B1B - 1A1A1B1A1A191314131211111111111111111111111010111011111111101110 - 111010100F10100F1010100F0F0F0F0F0F0E0E0F0E0F0E0E0E0E0E0E0D0D0D0B - 0B0D0B0C0B0B0C0B0B0B0B0C0C0C0C0C0C1717171C1B1C1C1C1B1B1B1C1B1B1C - 1A1A1A1A191A1A191A1A191A1919191819181918191818181818181818181818 - 1818181818181818181818181818181818181718181818181817181817171719 - 18181918181919191B1B1B050505040405050504040405040405040404040404 - 0404030403030403040403040304040303040403030303030808080303033030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303131313838383939393A3A3A3C3C3C3E3E3E3333332F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F3838383B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383938383838383737373030303030303030303030 - 303030303030303030303131313939393B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A39393A39393A39393A39393939393939393939393939393939 - 393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3B3C3C3B3E3D3D3E3D3D3F - 3E3E4140404040404242424343434444444646464747474949494B4B4B4D4D4D - 4E4E4E5151515353525555555857575B5A5A5D5C5C605F5F6262626565656868 - 686B6B6B6E6E6E7272727575757979797D7D7D8181818585858989898D8D8D91 - 91919696959A99999E9E9EA4A3A3A8A8A8ADADADB2B2B2B6B6B68787877C7C7C - 7B7B7B7979797575757070706C6C6C6969696767676565656363636363636161 - 615F5F5F5E5E5E5C5C5C5959595555555151514E4E4E4B4B4B4A473F45517939 - 68FA3868FF3867FF3767FF3666FF3665FF3564FF3464FF3363FF3262FF3061FE - 66739D7B79717374746F6F6F6969696565656060605959595353534E4E4E4949 - 494545453F3F3F3A3A3A37342A2D40822456FF2455FF2354FF2253FF2152FF21 - 52FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF - 1849FF1749FF1748FF1648FF1547FF1546FF1446FF1245FF1343FC343C5E3C3B - 353C3C3C3D3D3D3E3E3E3F3F3F3F3F3F40404042424241414142424241414140 - 40403E3E3E3D3D3D3B3B3B3A3A3A393939383838363636363636353535343434 - 3333333131312E2E2E2B2B2B282828252525222222221F13172254042CDD002E - FF002DF8002DF3002CF1002CF0002AEF002AEF002AF1002AF90228DF1120681C - 1B131E1D1C1F1F1F202020222222242424242424252525252525242424242424 - 2424242222222121211F1F1F1D1D1D1B1B1B1919191616161313132D2D2DADAD - ADACACACA6A6A6A1A0A09B9B9B9595959090908C8B8B8687868382827E7E7D79 - 79797574747170706C6B6B6867666463645F5F5F5B5C5B585858545454515151 - 4E4E4E4A4B4A4848484444444242423E3F3E3C3C3C3939393737373636363333 - 333131312F2F2F2D2D2D2B2B2B2A2A2A29282827272726252424232323222221 - 20202020201F1F1F1E1E1E1D1D1D1C1D1D1D1D1C1C1B1B1C1B1B1B1C1B1A1A1A - 1B1A191A19191A191A19191A1919191918191A191819191919191A1919191919 - 1919191918181819181719181718171718171717171717161717161617161616 - 1616161616161616161516151615151515151516151515151415141514151415 - 1514151414141413131313141313131212121212121213131212121212121112 - 1111111111111111111211111111111111111119191A1B1B1B1B1B1B1B1B1B1B - 1B1B191918121112111211111111111111111111111111111111111110101110 - 101010101010100F0F0F0F0F100E0F0F0F0E0E0E0E0E0E0E0E0E0E0D0E0E0C0C - 0B0B0B0B0B0C0C0B0C0B0A0B0B0D0D0D1B1C1B1C1B1B1B1B1B1B1B1B1A1A1B1A - 1A1A1A1A1A1A191A191A1A191A19191919191919191919191919191919191919 - 1919191919191818181818181818181817181817181818181819181919181A19 - 1A1D1D1D2323230B0B0B05050505040405040404040404050404040404040404 - 0404030404040303040303030304030403040303080808030303303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303636363939393A3A3A3B3B3B3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F3333333B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393A39393A39393A39393A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838363635303030303030303030303030 - 3030303030303030303131313939393B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A - 3A393A3A393A39393A39393A39393A3939393939393939393939393939393939 - 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3B3D3D3C3E3D3D3E3D3D403F - 3F4140404141414242424444444545454747474949494B4B4B4C4C4C4E4E4E50 - 50505252525555545757565958585C5B5B5F5E5E6261616564646666666A6A6A - 6D6D6D7070707474747777777B7B7B7F7F7F8383838787878C8C8C9090909494 - 949898989D9C9CA1A1A1A7A6A6ABABABB0B0B0B5B5B59D9D9D7E7E7E7D7D7D7A - 7A7A7777777373736F6F6F6C6C6C686868666666656565636363626262606060 - 5E5E5E5B5B5B5757575353534E4E4E4B4A4B48453E434D683B68F23A6AFF3A68 - FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3463FF2F60FF4467DD79 - 79777776757272726D6D6D6969696464645E5E5E5656564F4F4F4B4B4B464646 - 4040403B3B3B3734282D43922458FF2455FF2455FF2354FF2253FF2152FF2152 - FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF18 - 49FF1749FF1748FF1648FF1547FF1546FF1446FF1145FF2F4185454136444545 - 4848484B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4949494747474545454242 - 424040403D3D3D3B3B3B39393939393938383836363636363635353534343432 - 32323030302D2D2D2B2B2B282828252525222222211F161C1F300E2795032CE2 - 002DF8002DFF002DFF002DFE002BF50229E00A249D171D391E1B111E1E1D1F20 - 2021212123232324242424242425252525252526262625252525252524242423 - 23232121211F1F1F1D1D1D1B1B1B181818161616131313686868B0B0B0AAAAA9 - A4A4A49E9E9E9999999393938E8E8E8A8A8A8685858181817C7C7B7778777373 - 736F6F6F6A6A6A6766666362625F5F5F5B5A5B5757565454545050504D4D4C49 - 4A4A4746474343434141413D3E3E3C3C3B3838393636363535353333332F3030 - 2E2E2E2D2D2D2A2A2A2929292828272727262524242424232221212120202120 - 2020201F1F1F1E1D1D1D1D1D1D1D1C1C1A1B1B1B1B1A1A1A1B1A1A1A1A1A1A1A - 1A19191A1A191A19191919191818171818181818171818181718181818181817 - 1818171818181918181918181817171817171717171717161617161717161616 - 1716161616151616151616151516161515151515151515151415151514141414 - 1414141414141314141314131213131312121212121212121212111212111112 - 1112111112111211111110111111101213131A1A1A1B1C1B1B1B1C1B1A1B1B1B - 1B17161712111111111111121111111111111111101110101010111010101010 - 101010100F0F0F0F0F0F0F0F0F0E0F0E0F0E0E0F0E0E0F0E0E0E0D0D0D0C0C0C - 0C0B0C0B0B0B0B0B0B0B0B0B1111121313141313141616161817171817171717 - 171A1A1A1A1A1A1A191A191A1A1A191A19191919191919191919191919191919 - 191919191919191919191919191819191919191919191919191A1C1C1C202020 - 2726261A1A1A0504050505040405040405040404040404040405040404040404 - 0404040404030404040403030303030408080A03030330303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303232323838383939393B3B3B3C3C3C3E3E3E3232322F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F3A39393B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A - 3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A - 39393A39393A39393A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383835353530303030303030303030303030 - 30303030303030303030303737373B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A - 393A3A393A39393A39393A39393A39393939393939393939393939393A3A3A3A - 3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3C3E3E3D3E3D3D403F3F414040 - 4241414242424444444545454747474848484A4A4A4B4B4B4E4E4E5050505252 - 525555555757565959585C5B5B5E5D5D6160606463636766666969696C6C6C70 - 70707373737777777A7A7A7E7E7E8282828585858989898E8E8E939393979797 - 9B9B9BA09F9FA4A4A4AAA9A9AFAEAEB3B3B3B1B1B18282827E7E7E7D7D7D7A7A - 7A7575757171716E6E6E6969696767676565656464646262625F5F5F5D5D5D59 - 59595555555050504B4B4B47453E42495C3D66E83B6CFF3B69FF3A69FF3A69FF - 3968FF3867FF3767FF3666FF3665FF3564FF3464FF3362FF3061FF6272A57D7A - 727676767373736E6E6E6969696363635B5B5B5252524D4D4D4848484242423D - 3D3C38352C2D48A42559FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF - 2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849 - FF1749FF1748FF1648FF1547FF1546FF1045FF2B47AF4F4D4251515054545457 - 57575858585757575656565555555353535151514D4D4D4A4A4A464646434343 - 4040403D3D3D3A3A3A3939393939393838383737373535353535353333333131 - 312F2F2F2C2C2C2A2A2A27272725252524242421201B201E151B1F2E14225F0F - 25830E24890E2484122164191D321D1C141E1D161F1F1F212121222222232323 - 2424242525252525252626262626262626262626262525252424242323232121 - 211F1F1F1D1D1D1A1A1A1818181515151C1C1C9E9E9EADADADA8A8A8A2A1A29C - 9C9C9797969292928E8E8E8888888384837F7E7E7B7A7A7676757172716E6D6C - 6969696565656261615E5D5D5959595757575353534F4F4F4C4C4C4949494746 - 464344434141413E3E3E3B3C3C3839393636363434343232323030302F2F2F2D - 2D2C2B2A2A2929292828282626262525242425242222212020202020201F2020 - 1F1E1E1D1D1C1D1C1D1C1C1C1B1A1B1B1A1A1A1A1B1A1B1A1A1A1A1A1A1A1A19 - 1A1A191919191919191919181817181818181818171818171717171717171717 - 1717171717181718191818191717181717171616171617161716161716161616 - 1615151516151515151615151515161515151515151514151415141414151414 - 1514141414131414131413131312121212121212121212121211121111111111 - 11111111111112111111111010111415151B1B1B1C1B1B1C1B1B1B1B1B1B1B1B - 1414141112121112111111111111111111111110111011101111101110101010 - 10100F0F100E0F0F0E0F0F0E0E0E0E0E0E0E0F0E0E0E0E0E0E0C0C0B0B0C0C0B - 0C0B0B0B0B0C0B0B0B0B0B0B0B0B0A0B0A0B0A0B0B0B0B0A0A0A0A0A0A0A0A0A - 0A0A090A0A090C0B0C0E0E0E0E0D0E0D0D0E1111111212121111121112111616 - 151515151515151616161919191919181A1A191B1B1A1E1E1E24242528292828 - 2828050505050505050505040505050404040404040405040404040404040403 - 0304040403040303040403030808080304033030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3636363939393A3A3A3C3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F3333333B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B - 3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39 - 393A39393A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393938393838393838393838 - 3938383938383838383838383838383535353030303030303030303030303030 - 303030303030303030303737373B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A39 - 3A3A393A39393A39393A39393A39393939393939393939393A3A3A3A3A3A3A3A - 3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3D3E3E3D3F3E3E41404041404043 - 42424343434444444646464747474949494B4B4B4D4D4D4F4F4F515151535353 - 5555555858575B5B5A5D5C5C605F5F6262626665656968686B6B6B6E6E6E7272 - 727575757979797C7C7C8080808585858989898C8C8C9090909595959A9A999E - 9E9EA3A2A2A8A7A7ACACACB1B1B1B5B5B59696968080807F7F7F7D7D7D787878 - 7474746F6F6F6C6C6C6868686666666565656262625F5F5F5C5C5C5858585353 - 534E4E4E4847414347523E65DC3D6EFF3C6BFF3B6BFF3B6AFF3A69FF3A69FF39 - 68FF3867FF3767FF3666FF3665FF3564FF3464FF3061FF4267E37B7B7B7B7A78 - 7777777373736E6E6E6868686060605656564E4E4E4949494444443E3E3D3939 - 332D4CB82659FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF20 - 51FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF - 1749FF1748FF1648FF1547FF1345FF2048DD5555585B5A585D5D5D6060606161 - 616060605F5F5F5C5C5C5A5A5A5656565353534F4F4F4A4A4A47474743434340 - 40403D3D3D3A3A3A393939383838373737373737353535343434333333313131 - 2F2F2F2D2D2D2A2A2A28282826262624242422222121211D211F15201D10201D - 0F201D0F201E131F1F1A1F1F1E20202022222222222224242424242425252526 - 26262727272626262727272727272626262525252424242323232121211F1F1F - 1D1D1D1A1A1A171717141414515151B0B0B0ABABABA5A5A59F9F9F9A9A9A9695 - 959090908B8B8B8787878282827E7E7E7A79797474746F706F6D6D6C68686864 - 6464605F5F5D5C5C5959595554555251514E4E4E4B4B4B484848454444424242 - 3F3F3F3D3D3D3B3B3B3838383636363334333131312F30302E2E2E2C2B2C2A2A - 2A2929292828282626262525242223222121222020202020202020201E1F1F1D - 1D1D1D1C1D1D1C1C1B1B1B1B1A1B1A1A1B1A1B1A1A1A1A1A1B1A1A1A1A1A1A19 - 1A1A1A19191A1919191918181818181718171717171817171717181717171716 - 1617161717161717161717171718171717161717161717171716171616161716 - 1616151616161616161515151515151515151515141514141515151414141414 - 1414141413141313141312131212121312121212121212121212121211121112 - 111112121111111110101011111718181C1B1A1B1B1B1B1C1B1B1B1B1A1A1A13 - 1112111111111111111211111111101111111010111110101010101010100F10 - 100F0F100F0F0F0F0F0E0E0F0F0E0F0E0E0F0E0E0E0D0D0C0C0C0C0C0C0C0B0B - 0B0B0B0B0C0B0B0B0B0B0A0B0B0B0A0A0B0B0A0B0A0A0A0A0A0A0B0A0A0A0A09 - 090A0A0A0A0A0A090A09090909090A090A090909080909090909090908080908 - 0809080809080808080808080808091E1D1E2122212626272B2A2B2F2F300D0D - 0D05050505040505040504040505040405050404050404040404040404040403 - 0404030404040303080A0A030403303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303033333338 - 38383A3A3A3B3B3B3D3D3D3E3E3E3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3838383B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A - 3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A3939 - 3A39393A39393939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838353535303030303030303030303030303030 - 3030303030303030303535353B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A39393A39393A39393A39393939393939393A3A3A3A3A3A3A3A3A3B3B3B - 3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3D3F3F3E4140404140404342424443 - 434444444646464747474949494B4B4B4C4C4C4E4E4E50505052525255555557 - 57575959585C5C5B5F5E5E6261616564646766666A69696D6D6D707070747474 - 7777777B7B7B7E7E7E8282828787878B8B8B8F8F8F9393939797979C9C9BA1A1 - A0A5A5A5AAA9A9AFAEAEB3B3B3ACACAC8282828181817F7F7F7B7B7B77777772 - 72726E6E6E6A6A6A6868686565656262625F5F5F5B5B5B5757575151514B4B48 - 4549544063CF3E70FF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968 - FF3867FF3767FF3666FF3665FF3564FF3463FF3162FF6372A67F7C747A7A7A76 - 76767272726B6B6B6262625959595151514A4A4A45454540403E3C3B3B2D50CB - 2759FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051 - FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF17 - 49FF1748FF1648FF1447FF1647FB51587366625367655E696762696864686764 - 66656364636160605E5C5B5A5858585353534F4F4F4A4A4A4545454242423E3E - 3E3C3C3C3A3A3A3939393838383838383636363535353434343333333232322F - 2F2F2D2D2D2B2B2B292929272727262626242424232323222222222222212121 - 2121212222222222222323232424242525252626262727272727272828282828 - 282828282727272727272727272626262424242323232121211F1F1F1C1C1C19 - 1919161616161616909090ADADADA8A8A8A2A2A29D9D9D9898989392938E8E8D - 898A898585858181817C7C7C777777737373706F6F6B6B6A686867636362605F - 5F5B5A5A5857575554545150504E4D4D4A4A4A4747474444444242423F3E3F3C - 3C3C3A3A3A3637373636363434333030303030302E2E2D2B2C2B2A2A2B292929 - 2828282625252424232323222222212020202120202020201F1E1F1D1E1E1D1D - 1D1E1C1C1C1B1B1B1B1B1B1C1B1C1C1C1B1B1C1B1B1B1C1B1B1A1A1A1B1A1A1A - 1A1A191919191919191818171818181817171717171717171817171717171717 - 1616171615171616171616171717171717171717171617171716171616161615 - 1616151515151615161515161515151515151515151515141514141415141414 - 1414141314141314131313121212121212121212121212121112121212121112 - 1111111111111111101211111A19191C1B1A1B1B1B1B1B1B1B1B1B1616161112 - 11121112111112111111111111111011111110101010101010101010100F0F10 - 0F0F0F0F0F0F0F0F0E0E0E0E0F0E0E0E0E0E0E0E0B0C0C0C0B0B0C0B0C0B0C0B - 0B0B0C0B0B0B0B0B0B0A0B0B0A0A0B0A0B0A0A0B0B0A0B0A0A0A0A0A0A0A0A0A - 0A0A0A090A0909090A0909090909090909090909090809090909080909080908 - 08080808080808080909091919192323232727272A2B2A2F302F1D1D1D050506 - 0505050505050405050405040404050405040405040404040404040304040404 - 040303040A0A0803030430303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303737373939 - 393A3A3A3C3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3232323B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A - 3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383835353530303030303030303030303030303030 - 30303030303030303434343A3A3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B - 3B3B3C3C3C3C3C3C3E3E3E3E3E3E3F3F3E40403F414040424141434242454444 - 4545454747474848484A4A4A4B4B4B4E4E4E5050505252525555555757575959 - 595C5C5B5E5E5D605F5F6362626666666969696D6C6C6F6F6F72727276767679 - 79797E7E7E8181818585858989898D8D8D9191919696969A9A9A9E9E9EA3A3A2 - A8A7A7ACACACB1B1B1B6B5B59595958383838181817D7D7D7A7A7A7575757171 - 716D6D6D6969696666666363636060605B5B5B5656565151514A484043538340 - 72FF3F6FFF3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF - 3867FF3767FF3666FF3665FF3564FF3162FF4368E27A7B7A7C7B797878787474 - 746E6E6E6666665C5C5C5352524E4D4C4847454441383F3E392C54DE2859FF28 - 58FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF - 1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749 - FF1748FF1648FF1346FF3350BC4E5B89535E885A628161657763667064666C63 - 6469626262605F5C5B5B5A5656565151514C4C4C4747474242423F3F3F3D3D3D - 3A3A3A3A3A3A3838383838383838383636363535353434343333333131312F2F - 2F2E2E2E2D2D2D2A2A2A29292928282826262625252525252525252525252525 - 2525262626262626262626282828282828282828292929292929292929292929 - 2929292828282727272626262424242323232020201E1E1E1C1C1C1919191616 - 16494949B0B0B0ABABABA5A5A4A09FA09A9A9A9595959090908C8C8C87878883 - 83847F7F7F797A797576767272726D6D6D6969696565646262615E5E5D5B5959 - 5756565353534F4F4E4D4D4C4A49494747474443444241423E3F3E3D3C3C3939 - 39363636353535323232303130302F2F2D2D2D2B2B2A292A2A29292827262625 - 25252424242323232120212020212020201F1F1F1F1F1F1E1E1D1E1E1E1D1E1E - 1D1D1D1E1E1D1E1D1D1E1D1D1D1C1D1D1C1C1D1D1C1D1C1C1D1C1C1C1C1B1C1B - 1C1B1C1C1C1B1B1A1A1A19191919191818171717181717171717171717171617 - 1716161516151516161516161616161717171716161616161617161616161616 - 1615151616151616151515161515151415151514151415141514141414141414 - 1414131414131413121313121212131312121211121112121212111112121211 - 12121111111111111313131C1B1B1B1B1A1B1B1B1B1B1B1B1B1B131213111111 - 121112111112111111111111111111101111101110111010100F0F100F0F0F0F - 0F0F0F0E0E0F0F0F0F0E0E0E0E0E0E0E0D0D0D0B0C0C0C0C0C0C0B0B0B0B0C0B - 0B0B0C0B0B0B0B0B0B0B0B0A0B0A0A0A0A0A0B0B0B0A0A0A0A0B0A0A0A090A0A - 09090A0A0A09090A0A090A0A0A09090909090809080909090809090809080809 - 090908080909091313132121212526262A2A2A2F2E2E2B2B2C05050505050504 - 0505050405050505040404050404040404040404040404040404040403040404 - 0A080A0403043030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303333333939393A3A3A - 3B3B3B3D3D3D3E3E3E3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3838383B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3B3A3B3A3A3B3A3A3B - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A39 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383535353030303030303030303030303030303030 - 303030303030303232323939393B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A39 - 3A39393A39393A39393A39393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C - 3C3C3C3C3D3D3D3E3E3E3E3E3E40403F41414041404043424245444445444447 - 47474747474949494B4B4B4E4E4E4F4F4F5151515353535555555858585A5A5A - 5D5D5C5F5F5F6262626564646867676C6B6B6E6D6D7171717474747878787B7B - 7B7F7F7F8383838787878C8C8C9090909393939898989D9D9DA1A1A1A5A5A5AA - A9A9AFAEAEB3B3B3ADADAD8585858484848181817D7D7D7878787474746F6F6F - 6B6B6B6767676464646060605C5C5C5656565151514A49484343444062CB4072 - FF406EFF3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF38 - 67FF3767FF3666FF3665FF3464FF3162FF6373A57E7B727A797877767471706D - 6A6964615F5657544A504F4C494A513F4A6E354EA22A59F7295AFF2958FF2858 - FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F - 50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF - 1748FF1547FF1447FF1446FF1546FD1546FA1645F71745F51D48E81F48E32449 - D6314EB95A5A5A5656545151514C4C4C4747474343434040403D3D3D3C3C3C3A - 3A3A393939383838383838373737363636353535343434333333323232313131 - 2F2F2F2E2E2E2C2C2C2A2A2A2A2A2A2929292828282828282828282929292828 - 282929292929292A2A2A2A2A2A2A2A2A2A2A2A2929292A2A2A2A2A2A29292928 - 28282727272626262424242222222020201D1D1D1A1A1A181818181818909090 - ADADADA8A8A7A2A2A29D9D9D9999999393938F8F8E8A8A8A8686868181817C7C - 7C7878787373747070706C6C6C68686864646460605F5D5D5D59595855545453 - 52524F4E4E4C4C4C4848484645454242424040403E3E3E3C3C3B3A393A363636 - 3434343132323130312E2E2E2E2D2D2B2B2B2929292928282826262524252424 - 2422222220202121202020212121202020201F20202020201F1F1E1D1E1E1E1E - 1E1D1E1E1D1E1D1D1E1D1D1D1C1C1D1D1C1D1C1C1D1C1C1D1C1B1C1C1C1C1B1B - 1B1C1C1B1B1B1B1B1B1A1A1B1B1A1A19191A1817181717171717161717171716 - 1716161615161615151516151616171717161617161616161616161616161616 - 1516161615161516151515151515141515151515141514151514141414141414 - 1413141413141313131312121212121212121212121111121112121211111211 - 111111111111111817171C1A1A1C1B1A1B1B1B1B1B1C19191812121212121111 - 1111111211111111111111111111111111101010101010100F0F100F0F0F0F0E - 0E0F0F0E0E0F0E0E0E0E0E0F0E0E0E0D0D0C0D0C0D0C0C0C0B0C0D0B0B0C0C0B - 0C0B0B0C0B0B0B0B0B0A0A0B0B0A0B0B0A0B0B0A0A0B0A0A0A0A0A0A090A0A0A - 090A0A09090A0909090A09090909090909080909080808090909080909090909 - 090A090D0C0C2020202525252928282D2E2D3031300B0B0B0505050505050504 - 04040505050505040405050504050404050404040404040404040404080A0A04 - 0404303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303737373939393A3A3A3C - 3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131313B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A393A3A393A3A393A3A393A39393A39393A39393A39393A3939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838353535303030303030303030303030303030303030 - 3030303030303131313837373B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A - 39393A39393A39393A39393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C - 3D3D3D3E3E3E3E3E3E3F3F3F4141404141404342424443434544444746464747 - 474949494B4B4B4C4C4C4E4E4E5050505252525555555757575959595C5C5C5F - 5F5E6161606463636766666969696D6D6D7070707373737777777A7A7A7E7E7E - 8282828585858989898E8E8E9292929797979A9A9A9F9F9FA4A4A3A8A8A8ACAC - ACB1B1B1B6B5B59696968585858383838080807B7B7B7676767272726D6D6D69 - 69696565656161615D5D5D5757575151514A4B4B44423D3E455A406DF24071FF - 406EFF3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867 - FF3767FF3666FF3665FF3263FF4368E27878787878757374786C6F795F678550 - 6096425BAD3959C6315BEA2C5CFE2A5CFF2A5BFF2A5AFF2959FF2958FF2858FF - 2758FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50 - FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF17 - 48FF1547FF1447FF1446FF1345FF1144FF1043FF0F42FF0D41FF0C3FFF0C3FFF - 42508757544A4F4F4F4B4B4B4848484343434040403D3D3D3C3C3C3B3B3B3A3A - 3A38383838383838383838383836363635353534343434343433333331313130 - 30302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2B2B2B2B2B2B - 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2828282727 - 272626262424242222221F1F1F1D1D1D1A1A1A171717484848B0B0B0ABABABA5 - A5A5A1A0A19B9B9B9696969191918E8E8E89898985858580807F7B7B7B777777 - 7272726E6E6E6B6B6A6767666363635F5F5F5B5A5A5858585554545150504E4E - 4E4B4A494847474544444242423F3F3F3D3D3D3B3B3B38373836363634343431 - 32323030302E2E2F2C2C2C2B2B2B292929292828262625262425242323222223 - 22222222222223222221222121202021202020201F1F1F1E1F1E1E1E1E1D1F1E - 1D1E1D1D1E1D1D1D1D1D1D1D1D1D1C1D1D1C1C1D1C1C1C1C1C1C1C1C1B1C1C1B - 1B1B1B1B1B1B1B1B1B1A1B1A1A1B1A1B1A191A19181818171617171617171717 - 1615161515161515151515151616161716161616161616161616161516161616 - 1616161515161615161515151515151514151515151415141514151414141414 - 1314141314131313131212121212121212111212121211111211121111111111 - 1111111211121B1B1B1B1B1A1C1B1A1C1B1B1B1B1B1414141212111212121112 - 1112111111111110101111101110101111101010100F100F0F0F0F0F0F0F0E0F - 0E0F0F0F0E0E0F0E0F0F0E0E0E0E0E0E0E0E0D0E0E0E0E0E0D0E0D0D0D0D0D0D - 0D0D0D0D0D0D0D0C0D0B0C0C0B0C0C0C0B0C0B0B0B0B0C0C0B0B0B0A0B0B0A0A - 0A0A0A0A090A0A09090A0909090909090908090909090809080808080808080A - 0A0A1B1B1B2322232828282C2C2D303030181818050505050605050505050505 - 0505050505050405040405040504040405040404040304040A0A0A0304043030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303333333939393A3A3A3B3B3B3D3D - 3D3E3E3E3232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3736363B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A393A3A393A3A393A39393A39393A39393A39393A393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383837363630303030303030303030303030303030303030 - 30303030303030303535353B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39 - 393A39393A39393B3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E - 3E3E3E3E3E3F3F3F414141414140424241434242454444464545484747484848 - 4A4A4A4B4B4B4E4E4E5050505151515454545656565858585B5B5B5E5E5E6060 - 5F6262626665656968686C6B6B6F6E6E7372727575757979797C7C7C80808084 - 84848888888C8C8C9090909494949999999D9D9DA1A1A1A6A6A6AAAAA9AFAEAE - B3B3B3ADADAD8787878686868383837F7F7F7979797575757171716B6B6B6767 - 676262625E5E5E5959595353534C4C4C4545453F3C333D4F854171FF4070FF40 - 6FFF3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF - 3767FF3666FF3665FF3464FF4769D84768D73D65E73662F63261FC2E60FF2C60 - FF2D5FFF2D5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF27 - 58FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF - 1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748 - FF1648FF1547FF1546FF1446FF1345FF1244FF1143FF1042FF0D40FF1C44DD4D - 4D504C4C484848484545454343434040403D3D3D3C3C3C3C3C3C3A3A3A393939 - 3838383838383838383838383636363636363535353434343434343232323131 - 313131313030302E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A292929272727262626 - 2424242121211E1E1E1C1C1C191919191919929192ADAEADA8A8A8A2A2A29E9E - 9E9999999394939090908B8B8C8787878181827E7E7D7A797A7575757171716D - 6D6D6868696565656161615D5D5D5A595A56575653535350504F4E4D4D4A4949 - 4847464543444241413F3E3E3D3D3D3A393A373737353635333333313131302F - 302F2F2F2C2C2B2B2A2A29292A29292926272625252524252425242323232423 - 232323232321212120212121202021201F1F1F1E1E1E1E1F1E1D1F1E1E1F1E1D - 1E1D1D1E1D1D1D1D1D1D1C1C1D1D1D1D1C1C1C1C1C1C1C1C1C1C1B1B1C1C1C1B - 1C1B1B1B1B1B1B1A1B1B1B1B1B1A1B1A1A1A1A1A1A1A18181817171716161616 - 1616151616151515151515161516171617171616161616161616151616151516 - 1515161515161516151515151515151515141414141414141414141414141413 - 1414131413121313121213131212121212121212121112111211111111111111 - 11111615151C1B1B1B1A1B1C1B1A1B1C1B191918121211121212121111111211 - 111212111111111111111111111010100F10100F0F0F0F0F0F0F0F0F0F0F0E0E - 0E0F0F0F0E0F0E0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0E0D0D0D0D - 0D0D0D0D0D0C0D0D0C0C0D0C0D0C0C0B0C0C0C0C0C0C0C0B0B0C0B0A0B0A0B0A - 0A0B0A0A0A0B0B0A0A0A0A0A0A0A0A080909080908090808090908090A0A1414 - 142222222627272A2B2A30303025252405060605050505060505050505050505 - 05050505040404040404040504040404050404050A0A0A040404303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303838383939393A3A3A3C3C3C3D3D3D - 3C3C3C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F302F303A3A3A3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A39 - 3A3A393A3A393A3A393A39393A39393A39393A39393A39393939393939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383736363131313030303030303030303030303030303030 - 303030303030303232323939393B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3939 - 3A39393B3A3A3B3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3E3E3E3E3E - 3E3E3E3E4040404141414242414343424544444544444847474847474949494B - 4B4B4D4D4D4F4F4F5151515353535555555858585A5A5A5C5C5C5F5F5F626261 - 6565646766666A69696E6D6D7070707474747777777B7B7B7E7E7E8282828585 - 858989898E8E8E9393939797979A9A9A9F9F9FA4A4A4A8A8A7ACACACB1B1B1B6 - B5B59A9A9A8787878686868282827D7D7D7979797373736E6E6E696969656565 - 6060605B5B5B5555554F4F4F4848484241403C3A363F5BB34173FF406FFF406F - FF3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF37 - 67FF3666FF3565FF3263FF3163FF3162FF3161FF3161FF3161FF3060FF2F5FFF - 2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758 - FF2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F - 50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF - 1648FF1547FF1546FF1446FF1345FF1244FF1143FF1043FF0D41FF2D439C4745 - 3D4344434242424040403F3F3F3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A3A3A3A38 - 3838383838383838383838373737363636353535343434343434333333323232 - 3131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D - 2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A29292927272726262623232320 - 20201E1E1E1B1B1B181818525252B0B0B0ABABABA5A5A5A0A0A09B9B9B969696 - 9191918E8E8E8A8A8A85858580807F7B7B7B7877787272726F6F6F6B6B6B6767 - 676363636060615C5C5C58585856565653525250504F4C4C4C49484846464644 - 43434141403E3E3D3D3C3D3939393737373435353232323232312F2F2F2E2E2E - 2B2B2C2A2B2A2929292828282626262726262526252423242423242323232222 - 222222212121202121202020201F1F1E1F1E1E1F1E1E1E1E1E1E1E1D1E1D1E1E - 1D1D1D1D1D1D1C1C1D1D1C1D1C1C1D1C1C1C1C1C1B1C1C1C1C1B1C1B1B1B1C1B - 1B1B1B1B1B1B1A1B1A1B1A1B1B1A1B1A1A1A1A1A1A1919191616171716161715 - 1616151615151515151515151417161616161616171616161616151516151616 - 1616151515151515151515141515151515141414141414141414131414141314 - 1413141312131213121312121212121212121212121111121111111111111111 - 111A1A1A1C1B1B1B1B1B1B1B1A1B1B1B15151512121211121212121111111111 - 1111111111111111111010111010100F0F10100F0F100F0F0F0F0F0F0F0F0E0E - 0E0E0E0F0E0E0E0E0F0E0E0E0E0E0E0E0E0E0D0E0D0D0D0D0E0D0D0D0D0D0D0D - 0D0D0D0C0D0D0D0D0C0D0D0C0C0C0B0C0C0B0C0C0B0C0B0B0B0B0B0B0B0B0A0A - 0A0A0A0B0B0A0B0A0A0A0A09090A080909090908090909090A09100F0F212121 - 2626262B2B2B2F2F2E3232320605050506050505060505050505050505050505 - 050404050404040404040504040404040A0A0A04040430303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303333333939393A3A3A3B3B3B3D3D3D3E3E3E34 - 34342F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3535353B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A - 3A393A3A393A39393A39393A39393A39393A3939393939393939393939393939 - 3939393939393939393939393939393939393939393939393939393939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383737323232303030303030303030303030303030303030 - 3030303030303131313636363B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A39393B - 3A3A3B3A3A3B3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E - 4040404141414141414343424444434544444746464847474A49494B4B4B4C4C - 4C4E4E4E5050505252525555555757575959595C5C5C5E5E5E60606063636266 - 66666969696C6B6B706F6F7372727675757979797C7C7C808080848484888888 - 8C8C8C9090909494949999999D9D9DA1A1A1A5A5A5AAAAA9AFAFAEB3B3B3B1B1 - B18C8B8B8888888585858181817C7C7C7676767171716C6C6C6666666262625D - 5D5D5858585252524B4B4B4545453F3E3B3C3E444066D84172FF406FFF406FFF - 3F6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767 - FF3666FF3665FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F - 5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF - 2657FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50 - FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF16 - 48FF1547FF1546FF1446FF1345FF1244FF1143FF0F42FF1141F7383F5A403F3A - 3F3F3F3D3D3D3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A3939393838 - 3838383838383837373736363636363636363635353534343434343433333333 - 33333232323232323131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E - 2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A2929292727272525252222222020201D1D - 1D1A1A1A2323239D9D9DAEAEAEA8A8A7A2A3A29D9D9D9999999494949090908C - 8C8C8787888282827E7E7E7A7A7A7676767171716D6D6E696969666666626262 - 5E5D5D5B5B5C5858585453545150514E4E4E4B4B4B4848484645454342424040 - 403D3D3D3B3A3A3938383737363535353232323130302F2F2F2D2D2D2B2C2C29 - 292A29292A292829272727272727252525242424232324242323222222222222 - 2121212021202120201F1F1E1F1F1F1D1D1D1C1B1C1C1B1B1B1B1B1A191A1919 - 19191A1A1B1A1A1B1A1B1A1B1B1B1B1B1C1C1C1B1C1C1B1B1B1C1B1C1B1B1B1B - 1B1B1B1B1B1B1B1A1B1B1B1A1B1B1B1B1A1A1A1A1A1A1A181818171717161616 - 1515161515151515151515151616161616161616161616161516161616151516 - 1615151515161515151515151515151414141414141515141414141414131414 - 1313131213121313121212121212111212121211111112111212111111141414 - 1B1B1A1B1B1B1C1A1B1B1B1A1919191212121112121211121211111111121211 - 12111111111110111010110F0F100F0F0F10100F0F0F0F0F0F0F0F0F0F0F0F0F - 0E0F0E0E0F0E0E0E0E0E0E0E0E0E0E0E0E0E0D0E0E0D0E0D0D0D0D0D0D0D0D0D - 0D0D0D0D0D0D0D0C0D0D0B0D0C0B0C0C0B0C0B0B0B0B0B0B0A0B0B0B0B0B0B0A - 0A0B0B0A0A0B0A0A0A0A0909090809090909090A09090A0B0B1F1E1E25252529 - 29292E2E2E313232101110060605060605050605050505050505050505050504 - 0405050505050404050405040A0A0A0404043030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303737373939393A3A3A3C3C3C3D3D3D3D3D3D2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3939393B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A - 393A39393A39393A39393A39393A39393A393939393836363634343431313135 - 3535393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383938383838383838383838383838383838383838 - 3838383838383838383833333330303030303030303030303030303030303030 - 30303030303030303333333939383B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393B3A3A3B3A - 3A3B3A3A3B3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F41 - 41414141414242424343424545444645454847474948484B4A4A4B4B4B4E4E4E - 4F4F4F5151515353535555555858585A5A5A5D5D5D5F5F5F6262626565646868 - 676B6A6A6E6D6D7170707474747777777B7B7B7E7E7E8282828686868989898E - 8E8E9292929797979A9A9A9E9E9EA3A3A3A8A8A8ACACACB1B1B1B6B5B5A2A2A2 - 8989898787878484848080807A7A7A7575756F6F6F6A6A6A6565656060605B5B - 5B5656564F4F4F4949494344443E3C363C435A416CEC4172FF406FFF406FFF3F - 6EFF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF - 3666FF3665FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5F - FF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF26 - 57FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF - 1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF1648 - FF1547FF1546FF1446FF1345FF1244FF1043FF1741E1393C473E3D3A3D3D3D3D - 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A393939 - 3838383939393838383636363636363636363535353535353434343333333333 - 333333333232323232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D - 2D2D2C2C2C2B2B2B2A2A2A2828282727272424242222221F1F1F1C1C1C1A1A1A - 696969B1B0B0ABABABA5A5A5A0A0A09B9B9B9696969191918E8E8E8989898585 - 858080807D7C7C787878747474706F706B6B6B6767676464646160605D5D5D59 - 59595657575353535050504D4D4D4A4949484747444443414141403F3F3D3C3D - 3C3A3A3837383736363434343232323130312F2F302D2D2C2B2B2B2A2A292B2B - 2A2929292727272626262525252424232424242423232322222121222121211F - 1E1F1D1D1C1A1A1A191919191919191919191818191918191918191818181818 - 1818181718171717171817171717171818181919181B1B1A1C1B1B1C1C1B1B1B - 1B1B1A1B1B1B1B1A1B1A1A1A1A1A1A1A1A1A1A1A1A1919191916161616151615 - 1616151515151515151515171616161616161617161616151616161616161515 - 1615151515151515151514151515141415151514141414151414141413141413 - 141313131313121212121212121112121211121111111111111111111919191B - 1A1B1B1B1B1B1A1A1B1B1B141414121212121212111111121212111111121111 - 11111111101010101010100F100F0F100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E - 0F0F0F0F0F0E0E0E0E0E0E0E0E0E0D0D0E0E0D0E0D0D0D0D0E0D0D0D0D0D0D0D - 0C0D0D0D0D0C0B0D0C0B0C0C0C0C0B0B0C0B0B0B0B0B0B0A0B0B0B0B0B0B0B0B - 0A0A0B0B0B0A090909090909090909090809090A0A1818192323232828282D2D - 2D3131311D1D1D06050505050605060505050505050505050504050405050504 - 05050504040405050A0A0A040404303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303232323939393A3A3A3B3B3B3D3D3D3E3E3E3736372F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3232323B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B - 3B3B3B3A3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393A3A39 - 3A39393737373535353232323030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3535 - 3539393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383535353030313030303030303030303030303030303030 - 303030303030303030303635353A3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393A3A393B3A3A3B3A3A - 3B3A3A3C3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F4040404141 - 414242424343434545444545444847474847474A49494C4B4B4D4D4D4E4E4E50 - 50505252525555555757575959595C5C5C5E5E5E616161636363666666696969 - 6D6C6C706F6F7372727675757A79797C7C7C8080808484848888888C8C8C9090 - 909494949898989C9C9CA1A1A1A5A5A5AAAAAAAEAEADB2B2B2B4B4B49393938A - 8A8A8787878383837F7F7F7979797373736E6E6E6868686363635E5E5E595959 - 5454544E4E4E4848484243433E3B333E4A714270F94171FF406FFF406FFF3F6E - FF3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF36 - 66FF3665FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF - 2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657 - FF2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E - 4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF1648FF - 1547FF1546FF1446FF1345FF1044FF283E8F3D3A2F3C3C3C3D3D3D3D3D3D3D3D - 3D3D3D3D3D3D3D3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3A3A3A39 - 3939393939383838373737363636363636353535353535343434333333333333 - 3333333232323232323030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2C2C - 2C2B2B2B2A2A2A2828282626262424242121211E1E1E1B1B1B363636ADADACAE - ADADA7A7A7A3A2A29E9D9D989998939393908F8F8C8C8C8888888283837E7E7E - 7A7A7A7676767171716E6E6D6A696A6666666262625F5F5F5C5C5C5858585455 - 545252524E4E4E4C4C4C4849494646464343434141403E3D3D3D3C3C3B3A3A39 - 3737373535343333333132302F302F2F2E2D2D2C2C2C2B2B2B2B2A2A2A282829 - 2728272726262525252424242424242324242222221F1E1F1B1B1B1B1A1A1A19 - 1A19191A1A19191A191919191919191918191918191919181818181818181818 - 18181818181817181718181817171717171717171717181A18191B1B1C1B1B1B - 1B1B1B1B1B1B1A1A1B1B1A1B1A1A1A1A1A1A1A1A1A1A191A1716171615161515 - 1615151515151415141516161616171616161616161615161615161616151515 - 1516151515151515151514151414151415151414141414141414141314141313 - 1313131212121212121112121212121112121111111111121413141B1B1B1B1B - 1B1C1B1B1B1B1B19181812121312121211121211121212121111111111111111 - 10101110101010101010100F0F100F0F0F0F0F0F0F0F0F0E0F0F0F0E0E0E0E0F - 0E0E0E0E0F0E0E0E0E0E0E0E0E0D0E0D0D0E0D0D0D0E0D0D0D0D0D0D0D0D0D0D - 0D0D0C0D0D0B0C0C0C0C0C0B0C0B0B0C0B0B0B0A0B0B0B0A0B0B0B0B0B0A0B0A - 0A0B0909090909090909090808090A09091313142323232727272C2C2C303030 - 2828280506060505050605050606050505050505050505050505050505040505 - 050504050A0D0D04040430303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303636363939393A3A3A3C3C3C3D3D3D3E3E3E3030302F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F3737373B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A - 3B3B3A3B3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3938383636363433343131322F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F373636 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838383838383838373737313131303030303030303030303030303030303030 - 3030303030303030303232323737373B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393A3A393B3B3A3B3A3A3B3A3A3C - 3B3B3C3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E404040414141414141 - 4343434444444545444747464847474A49494B4B4B4D4C4C4E4E4E5050505151 - 515454545656565858585B5B5B5D5D5D5F5F5F6262626565656868676B6B6A6E - 6D6D7170707474747777777B7B7B7E7E7E8282828585858989898E8E8E929292 - 9696969A9A9A9E9E9EA3A3A3A7A7A7ABABABAFAFAFB4B4B4ACACAC8B8B8B8B8B - 8B8787878383837D7D7D7777777171716C6C6C6666666262625D5D5D58585853 - 53534C4C4C4747474242413E3B333F50864272FF4171FF406FFF406FFF3F6EFF - 3E6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666 - FF3665FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E - 5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF - 2556FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4F - FF1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF1648FF15 - 47FF1546FF1246FF1743E63639443A39363B3B3B3C3C3C3D3D3D3E3E3E3E3E3E - 3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3D3D3D3B3B3B3A3A - 3A39393939393937373737373736363635353535353534343433333333333333 - 33333232323232323030303030303030302F2F2F2F2F2F2E2E2E2D2D2D2B2B2B - 2A2A2A2828282525252323232020201D1D1D1C1C1C8A8989B0AFB0ABABAAA4A4 - A49F9F9F9B9B9B9696969191918E8E8D8989898585858080807B7C7C78787873 - 73737070706B6B6B6868686564646161615D5D5D5A5A5A565757545453505151 - 4D4D4D4B4B4B4848484546464343424040403F3E3D3B3B3B3A39383737373737 - 363433323231313130302E2E2E2E2D2C2C2B2C2B2B2B2A2A2A28282728282726 - 25262424242424242423232121201C1D1D1B1A1B1B1B1B1B1A1B1A191A1A191A - 1A191A1919191919191919191819191919191918181919181819181818181718 - 181817181817171717171717171717171717161717171716161918191B1B1B1B - 1B1B1B1B1B1B1A1B1A1B1B1A1A1A1A1A1A191A191A1A19181717161516151516 - 1515151515151414151716161617171616161616161616161516161516161515 - 1516151515151515151514141514141414141414141414141414131314131413 - 13131212121212121212121112121211111211111112121A1A1A1B1B1B1A1B1B - 1B1A1A1C1A1B1314131212131212121212121211121112121111111211111110 - 10110F0F10100F0F100F0F0F0F0F0F0F0F0F100F0F0F0F0F0F0F0E0E0E0F0E0E - 0F0E0F0E0E0E0E0E0E0E0E0D0D0E0E0E0D0D0E0E0D0D0E0D0E0D0D0D0D0D0D0C - 0D0C0D0C0C0D0C0B0C0B0C0B0B0B0B0B0B0B0B0B0B0A0B0A0A0B0A0A0A0B0909 - 0A0909090909090909090A0A090F0F0F2121212626262B2B2B30303033333306 - 0506050606060606050505050605050505060605050505050505050505040505 - 0A0D0D0404043030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303131313939393A3A3A3B3B3B3C3C3C3E3E3E3A3A3A2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F302F303A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B - 3A3A3B3A3A3B3A3A3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939 - 3737373434343231322F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3037373739 - 3939393939393939393939393939393938393938393938393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 3838383838383838383834343430303030303030303030303030303030303030 - 30303030303030303030303333333838383A3A3A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393B3B3A3B3B3A3B3A3A3C3B3B3C3B - 3B3C3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F41414141414142424243 - 43434545454646454848474948484A49494C4B4B4E4D4D4E4E4E515151525252 - 5555555757575959595C5C5C5E5E5E6161616464646666666969696D6D6C706F - 6F7372727675757A79797D7C7C8080808484848787878C8C8C90909093939397 - 97979C9C9CA0A0A0A4A4A4A8A8A8ACACACB1B1B1B6B6B59F9F9F8C8C8C8B8B8B - 8686868181817C7C7C7676767070706B6B6B6565656161615C5C5C5757575252 - 524B4B4B4647474141403D3B353F53934272FF4171FF406FFF406FFF3F6EFF3E - 6DFF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF - 3665FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5E - FF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF25 - 56FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF - 1D4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF1648FF1547 - FF1247FF263E9A3A382D3A3A3A3B3B3B3C3C3C3E3E3E3E3E3E3E3E3E40404040 - 40404141414242424242424343434242424141414040403E3E3E3D3D3D3B3B3B - 3A3A3A3939393838383737373535353535353535353434343333333333333333 - 333232323232323030303030303030302F2F2F2E2E2E2D2D2D2B2B2B29292927 - 27272525252222221F1F1F1D1D1D5C5C5CB1B1B1ADACACA7A7A7A1A1A19C9C9C - 9897979393938F8F8F8C8B8B8887878383837E7E7E7A7A7A7676767172716E6E - 6E6A6A6A6666666363635F605F5C5C5C5858585656565252524F4E4E4C4C4C49 - 49494747474444444141413F3F3F3D3D3D3B3B3A393938363736353535333333 - 313131302F2F2D2E2E2D2D2C2B2C2B2B2B2B292A292828282727272626262424 - 242121211E1E1F1C1C1D1C1C1D1B1B1B1B1A1C1B1A1B1A191B1A191A19191A1A - 191A1919191A1A1A1A1A1A191A1A191A19191A1A181818181818181818181818 - 1718171717171817171717171717171717171616161716171716161919191B1B - 1B1A1B1A1B1A1A1A1A1A1B1A1B1A1A1A1A1A1A1A191A18171716151615151615 - 1515151515141515161617161617161616161616151516161616161516151515 - 1515151515151415151515141415151514141414141414141413141313141312 - 131312121312121211121112121211111212111515151B1C1B1B1B1B1A1B1B1C - 1B1B171717121213121213121212121211121212121112121111111011111010 - 101010101010100F100F10100F0F0F0F0F100F0F0F0F0E0F0E0F0F0F0F0F0E0E - 0F0E0E0E0E0E0E0E0E0D0D0D0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0D0D - 0C0D0C0C0C0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0A0A0B0A090909 - 0909090909090A0A0A0A0A0B1F1F1E2626262A2A2A2F2F2F3333330E0F0F0506 - 050606060505060606050605050506050505060505050505050405050A0A0A05 - 0505303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303535353939393A3A3A3C3C3C3D3D3D3E3E3E3333332F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F3434343B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A3B3A - 3A3B3A3A3B3A3A3B3A3A3A3A3A3837373535353333333030302F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303737373939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383636363131313030303030303030303030303030303030 - 303030303030303030303130313333333838383A3A3A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3A3B3B3A3B3B3A3C3B3B3C3B3B3C3B3B - 3D3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F4040404141414242424343434444 - 444545454747464848474A49494B4B4B4D4C4C4F4E4E50505052525254545456 - 56565858585B5B5B5D5D5D6060606262626565656868686B6B6A6E6E6D707070 - 7474747777777B7B7B7E7E7E8282828585858989898D8D8D9191919595959A9A - 9A9D9D9DA1A1A1A5A5A5AAAAAAAFAFAFB2B2B2B4B4B49494948D8D8D89898985 - 85858181817B7B7B7575756F6F6F6969696464646060605B5B5B565656515151 - 4B4B4B45454641403F3D3A343E53934272FF4171FF406FFF406FFF3F6EFF3E6D - FF3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF36 - 65FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF - 2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556 - FF2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D - 4EFF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1748FF1548FF1845ED - 34394A3938343B3B3B3D3D3D3E3E3E3E3E3E3F3F3F4040404242424343434444 - 444545454747474747474646464646464545454242424040403E3E3E3C3C3C3A - 3A3A383838373737373737363636353535353535343434333333333333333333 - 3232323232323131313030302F2F2F2E2E2E2D2D2D2B2B2B2929292626262424 - 242121211F1F1F333333A9A9A9AEAEAEAAAAAAA3A3A39E9D9E99999995959591 - 91918E8D8D8A89888584848180817C7C7C7878777473737070706B6B6C686868 - 6464646161615D5D5E5B5A5A5757575454545152524E4E4E4C4B4B4848484646 - 464343434142423F3E3E3D3C3C3A3A3A38383837373734353532333231313130 - 2F2F2E2E2E2D2D2D2C2C2C2B2A2A2A2A2A2828282727272524242020201F1E1F - 1D1D1F1C1D1E1C1C1D1B1B1C1B1B1C1C1C1D1B1B1C1B1A1B1B1A1B1C1B1C1C1B - 1B1F1F1F2020202222222322231F201F1E1D1E1D1D1E19191919191918171818 - 18171818171717171717171717171617171717171717161616161717171A1A1A - 1B1B1B1A1B1B1B1B1B1A1B1A1A1A1A1A1A1A1A1A1A1718171615171516161515 - 1515141415151516171716171616161616161615161616161515161515151515 - 1515151515141415141514141415151414141414141414141313131313131213 - 1213131212121212121111121211121112111B1A1A1B1B1B1B1B1B1B1B1B1B1A - 1B13121312121212121212121212121211121112111111111011101010101010 - 101010100F0F10100F0F100F100F0F0F0F0F0F0F0F0F0F0F0E0E0F0E0E0E0E0F - 0E0F0E0E0E0E0E0E0E0E0E0E0D0E0D0E0D0D0D0E0D0D0D0D0D0C0D0C0C0D0D0C - 0D0C0B0C0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0B090A0A0A090909 - 09090909090B0B0A1B1A1B2424242929292E2E2E3333331A1A1A060606060606 - 0606060506060506060605050505050505050505050505050A0A0D0405053030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303131 - 313838383A3A3A3B3B3B3C3C3C3D3D3D3D3D3D2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F3838383B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3B3B3A393939363636 - 3434343232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30373737393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838373737343434303030303030303030303030303030303030 - 3030303030303030303130313130313333333838383A3A3A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3A3B3B3A3B3B3A3C3B3B3C3B3B3C3B3B3D - 3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F414141414141434343444444454545 - 4646464848474949484B4A4A4C4B4B4F4E4E504F4F5151515353535555555757 - 575959595C5C5C5E5E5E6161616363636666666969696C6C6B70706F73727276 - 75757978787C7B7B8180808383838787878B8B8B8F8F8F9393939797979B9B9B - 9F9F9FA3A3A3A8A8A8ABABABAFAFAFB4B4B4AEAEAE8E8E8E8D8D8D8989898585 - 857F7F7F7A7A7A7474746E6E6E6868686464645F5F5F5A5A5A5656565050504A - 4A4A45454541413F3D3A343E53934272FF4171FF406FFF406FFF3F6EFF3E6DFF - 3E6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665 - FF3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D - 5DFF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF - 2455FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4E - FF1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1749FF1549FF2641A73C3A303C - 3C3C3D3D3D3F3F3F3F3F3F3F3F3F414141434343454545464646474747484848 - 4A4A4A4A4A4A4A4A4A4949494848484646464343434040403D3D3D3B3B3B3A3A - 3A39393937373736363636363635353535353534343433333333333333333332 - 32323131313030302F2F2F2E2E2E2C2C2C2A2A2A282828262626232323202020 - 2121218F8F8FB0B0B0ABABABA7A6A6A0A0A09B9B9B9797979292928E8E8E8B8B - 8B8787878382827E7E7E7A79797676767171716E6E6D6A6A6B6666666263635F - 5F5E5C5C5C5959585655555253524F4F4F4D4D4D494A4A474847444444434343 - 403F403E3E3E3C3C3C393A3A3837373636363434333232323232312F2F302E2F - 2E2C2C2C2C2C2C2A2A2A2928282828282424242020201E1F201E1D1E1D1D1E1D - 1C1D1B1C1C1C1C1D1C1C1C1C1C1C1D1C1D2323232626272C2B2B303030303030 - 313030302F2F2F2F2F2E2E2E2D2D2D2D2C2D2C2B2B2727272323231E1D1D1718 - 181817181817171717171717171717171716161616171616171616161919191B - 1B1B1B1A1B1A1A1A1B1A1A1A1A1A1A1A191A191A171718161516151516151515 - 1515151516151717171617161616161616161615161515161515161515151515 - 1514141515151515151514141514151414141414141414131413131413131312 - 12121212121112121212111212111817181B1B1B1B1B1B1B1B1B1B1A1A151616 - 1313131212121212121212121212121211111111111211101110101010101010 - 1010101010100F0F0F0F0F10100F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0F0F0E - 0E0E0E0E0E0E0E0E0D0D0E0D0D0D0E0D0E0D0D0D0D0D0D0D0C0D0D0C0D0C0C0C - 0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0A0B0A0B0A0A0A0A0A0A090909090A09 - 090A0A0A1717172323232828282E2E2E32323223232306060606060606060605 - 06060606060606050505050505050505050505050D0D0D040405303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030333333 - 3939393A3A3A3B3B3B3D3D3D3E3E3E3838382F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F3030303A3A3A3A3A3A383838353535323232302F302F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F3030303030303030303030303030303030303434343737383C3C3C3F3F - 3F3A3A3A2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3037373739393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383738383736363632323230303030303030303030303030303030 - 30303030303030303130313130313131313332323737373A3A3A3A3A3A3A3A3A - 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3A3B3B3A3C3C3B3C3B3B3C3B3B3D3C3C3D3C - 3C3D3D3D3E3E3E3E3E3E3F3F3F40404041414142424243434345454545454547 - 47474848474A4A494B4B4B4D4C4C4F4E4E515050525252545454565656585858 - 5B5B5B5D5D5D5F5F5F6262626565656767676A6A6A6E6E6D7070707373737777 - 777A7A7A7E7E7E8181818585858989898C8C8C9090909494949898989C9C9CA1 - A1A1A4A4A4A8A8A8ACACACB1B1B1B6B6B5A4A4A48E8E8E8D8D8D898989848484 - 7E7E7E7979797373736D6D6D6868686363635F5F5F5A5A5A5555555050504A4A - 4A45454541413F3D3A343F54934272FF4171FF406FFF406FFF3F6EFF3E6DFF3E - 6CFF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF - 3564FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5D - FF2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF24 - 55FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF - 1C4DFF1B4CFF1A4CFF1A4BFF194AFF1849FF1948F33A3F57403E394040404141 - 414242424343434343434444444545454646464747474848484A4A4A4B4B4B4C - 4C4C4D4D4D4B4B4B4A4A4A4747474545454242423E3E3E3C3C3C3A3A3A393939 - 3838383636363636363636363535353535353434343333333333333232323131 - 313030302F2F2F2E2E2E2C2C2C2A2A2A2727272525252222221F1F1F6C6C6CB2 - B2B2ADACADA8A7A7A2A2A29D9D9D9898989494938F8F8F8C8C8C898989858584 - 8080807C7B7B7878777474746F6F6F6C6B6C6768686465646161625D5D5D5A5A - 595757575554555151524E4E4E4C4B4C4949494647464344444242423F3F3F3C - 3D3D3B3A3B3838393737373535363333333232313131302F2E2F2E2E2E2C2C2C - 2B2B2B2A292A292828252425202021201F201F1F201E1D1F1C1D1D1D1E1E1C1C - 1D1D1D1E22222228282831313033323232333233333333333333333332333332 - 33333232323030302F2F302E2E2D2D2C2C2D2C2D2B2B2A2A2A2A292829222221 - 1A1A191817171717171716171717171616161617161616161616161919191A1B - 1B1A1A1A1A1A1A1A1A1A1A1A1A191A1A19191917161616161715151615151515 - 1514171617171616161617171716161616161616161615151515151515161515 - 1414151515141515151415141415141414141314141413131313131313131212 - 131212121212121212121212131C1C1B1B1B1B1B1B1C1B1B1B19191812131313 - 13121312121212121212121212121111111110111110111110101010100F100F - 10100F0F10100F10100F100F0F0F0F0F0F0F0E0F0F0F0F0F0E0F0E0F0F0E0E0E - 0E0E0E0E0E0E0D0E0E0E0D0E0D0E0D0E0D0D0D0D0C0D0D0C0D0C0C0C0C0C0C0B - 0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A09090A09090A09090A0A0A0A - 1111122323232727272C2C2C3131312C2C2C0607060606070606060606050605 - 060506060506050505050505050505050D0D0D05050530303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303030303737373A - 3A3A3B3B3B3C3C3C3D3D3D3E3E3E3131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 302F302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30303030303030303030303031313131 - 31313434343838383C3C3C414141434343434343434343414141414141414141 - 3A3A3A2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303737373939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373535353131313030303030303030303030303030 - 303030303030303130313130313131313131313131313635353939393A3A3A3A - 3A3A3A3A3A3B3B3B3B3B3B3B3B3A3C3C3B3C3C3B3C3B3B3D3C3C3D3C3C3E3D3D - 3E3E3E3E3E3E3E3E3E4040404141414141414343434444444545454646464848 - 484949484B4B4A4C4B4B4F4E4E504F4F5251515353535555555757575959595C - 5C5C5E5E5E6060606363636666666969696C6C6C6F6F6E727271757474787777 - 7C7B7B7F7E7E8382828686868989898E8E8E9292929595959A9A9A9D9D9DA1A1 - A1A5A5A5AAAAAAAEAEAEB2B2B2B4B4B49B9B9B8F8F8F8D8D8D8989898484847E - 7E7E7878787373736C6C6C6868686363635F5F5F5A5A5A5555554F4F4F4A4A4A - 45454541403F3D3B343E51874270FA4172FF406FFF406FFF3F6EFF3E6DFF3E6C - FF3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF35 - 64FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF - 2D5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455 - FF2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C - 4DFF1B4CFF1A4CFF1A4BFF174BFF2946B44542374444444646464949494A4A4A - 4A4A4A4A4A4A4848484747474747474747474949494A4A474D4B454C4C4A4D4D - 4D4C4C4C4A4A4A4848484646464242423F3F3F3D3D3D3A3A3A39393939393938 - 3838363636363636363636353535353535343434343434333333323232303030 - 2F2F2F2D2D2D2B2B2B2929292626262424242222224B4B4BAFAFAFAEAEADA9A9 - A9A6A5A59E9E9E9999999595959191918C8D8D8B8A8A8686868181817E7E7D7A - 79797575747271726E6D6D6A6A6A6666666262625F5F605C5C5C595958565656 - 52525250504F4D4D4D4A4A4A4848484545454343434040403E3F3E3D3D3D393A - 393738383636363435353233323232323030302F2E2F2C2D2C2C2C2C2B2B2B29 - 2929252525212122201F20201F201F1F201F1F201E1E1F1F1E20212022292929 - 3333333434343635363637363737373938383838383838383737373536353534 - 3532323332323230302F2D2D2E2D2D2D2B2B2B2A2B2A2A2A2929292829292821 - 21211918181717171717171617171616161717161716171616161818181B1B1A - 1B1A1B1B1A1A1A1A1A1A1A1A191A1A1819191617161615161515161515151515 - 1517161717171716171616161616161516161516161515151616151515151515 - 1415151415151415151414141414141414141414131313141314131213121212 - 1212121212121212121A191A1B1C1C1B1B1B1B1B1B1B1B1B1312131312121213 - 1312131312121212121211111112111111101111101011101010101010101010 - 10100F1010100F100F100F0F0F0F0F0F0F0F0E0F0F0F0F0E0E0F0E0E0E0E0E0F - 0E0E0E0E0D0E0E0E0E0D0E0E0E0D0D0D0C0D0D0C0D0D0C0D0C0B0C0C0B0B0B0C - 0C0B0B0B0C0B0B0B0C0B0B0B0B0B0A0B0909090909090A090A0B0B0A0E0F0E21 - 21212727272B2B2B303030353535060606060606060606060606060606060505 - 0505060505050505060505050D0D0D0505053030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303131313838383A3A - 3A3B3B3B3C3C3C3E3E3E3C3C3C2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3030303030303030303030303131313232323737373B3A3B4040404444444545 - 454646464747474747474646464545454444444242424141414040404040403A - 3A3A2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30363636393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3837383837383837383737373737343434313131303030303030303030303030 - 3030303030303130313130313131313131313131313131313333333737363A39 - 393B3B3B3B3B3B3B3B3B3B3B3A3C3C3B3C3C3B3C3B3B3D3C3C3D3C3C3E3D3D3E - 3E3E3E3E3E3F3F3F414141414141424242434343454545454545484848484848 - 4A4A494B4B4B4D4C4C4F4E4E5150505352525454545656565858585B5B5B5D5D - 5D5F5F5F6262626565656767676A6A6A6D6D6D7070707373727776767A79797E - 7D7D8180808484848787878C8C8C8F8F8F9393939797979A9A9A9E9E9EA3A3A3 - A7A7A6AAAAAAADADADB2B2B2B2B2B29696968F8F8F8C8C8C8888888383837D7D - 7D7878787171716C6C6C6767676363635F5F5F5A5A5A5555555050504A4A4A45 - 46464141403E3B333E4B74416CED4172FF406FFF406EFF3F6EFF3E6DFF3E6CFF - 3C6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564 - FF3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D - 5CFF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF - 2455FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4D - FF1B4CFF1A4CFF184BFF2349D6484A53514F485252535454545454545252524E - 4E4E4C4C4C49494947474745454448463C45474F3C476F4A4A494D4B414B4A48 - 4A4A494747474545454242424040403D3D3D3B3B3B3A3A3A3939393838383838 - 383636363636363636363535353535353434343232323232323030302F2F2F2D - 2D2D2A2A2A282828252525232323353535A5A5A4B0B0AFABABAAA6A6A6A1A1A1 - 9B9B9B9696969292928E8F8F8B8B8B8788878484847F7F7F7C7C7C7777777473 - 736F6F6F6C6B6B6867676564656161615E5E5D5A5A5A5758575454545252524F - 4E4F4C4D4C494949474747444444424243403F403D3D3D3B3B3B393939383738 - 3636363435343232323131312F2F2F2E2E2D2C2C2C2C2C2C2A2A2A2626262222 - 23202020202020201F201F1F201F1F2020202026252532333335353538383839 - 39393B3B3B3C3C3B3D3D3C3C3D3C3C3D3C3C3C3C3B3A3B393939373838353536 - 3433333232322F30302D2C2D2C2C2C2A2A2A2929292929292828292828292728 - 271C1C1C1717171716171717161617171717161716161616161819191A1A1A1B - 1B1A1A1B1A1A1A1A1A1A1A1A1A1A181818171617161616161516151515151615 - 1716171716161616161616171616151615151616161516151515151515151515 - 1515151515141414141415141414141413141413131413131313131312121212 - 12121212121615151B1C1C1C1C1B1B1B1B1B1B1B161616131313121313121212 - 12121212121212111112111112101111111110101010101010100F100F100F10 - 1010100F0F0F100F0F0F0F100F0F0F0F0E0F0F0F0E0E0F0F0E0E0E0E0E0E0F0E - 0E0E0E0E0E0E0D0D0E0D0D0E0D0D0D0C0D0D0C0D0C0C0C0B0C0C0C0B0C0B0C0B - 0C0C0B0C0C0B0B0B0B0B0B0B0A090A0A0A0A090A090A0A090C0C0C1E1E1F2626 - 262B2B2B303030343434100F1006060606060606060606060606060505060606 - 06060505060506050D0F0D050505303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303535353A3A3A3A3A3A - 3C3C3C3D3D3D3E3E3E3736372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F30303030303030303030303031313131313136 - 363639393A3F3F3F4343434545454646464747474747474848484A4A4A4A4A4A - 4A4A4A4A4A4A4949494747474545454343434141414040403F3F3F3F3F3F3A3A - 3A2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F35353539393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 3738383738373738373738373737373733333330303030303030303030303030 - 3030303030313031313031313131313131313131313131313131313131353535 - 3838373A3A3A3B3B3B3C3C3B3C3C3B3C3C3B3D3C3C3D3C3C3E3D3D3F3E3E3E3E - 3E3F3F3F4040404141414141414343434444444545454747474848484949494B - 4B4A4C4C4B4F4E4E504F4F5251515352525555555757575959595C5C5C5E5E5E - 6060606262626666666969696C6C6C6E6E6E7171707575747777777B7B7B7E7E - 7E8282828585858989898C8C8C9090909494949898989B9B9B9E9E9EA2A2A2A6 - A6A6ABABABAFAFAFB3B3B3AEAEAE9292929090908C8C8C8888888383837E7E7E - 7777777272726B6B6B6767676363635F5F5F5A5A5A5555555050504B4B4B4646 - 464242413E3B333D455C4066D84173FF4070FF406EFF3F6EFF3E6DFF3E6CFF3C - 6CFF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF - 3464FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5C - FF2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF24 - 55FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF - 1B4CFF1A4BFF174BFF284DD35558625F5D555E5D5E5B5B5B5656565151514C4C - 4C47474745433E43413735416E1A42D60E40FC1D42CC36447B46464749463B46 - 46444444444242423F3F3F3D3D3D3C3C3C3B3B3B393939383838383838383838 - 3636363636363636363535353434343333333131313030302E2E2E2C2C2C2A2A - 2A2727272525252A2A2A959495B0B1B0ACACACA8A8A8A3A3A39D9D9D98989894 - 94948F8F8F8B8B8B8988898586868080807C7C7C7979797575747271716D6E6D - 6B6A6A66666663626260605F5C5C5C5858585555555252525050504D4D4D4B4A - 4A4848484545454343434141413F3E3F3D3D3D3C3A3A38383837373735353534 - 3434323232303031302F2F2D2D2D2C2C2C2C2C2C282828222323212122202020 - 201F202020202021212423242D2D2D3535353939393A3B3B3E3E3E3E3E3E4141 - 414242424242424242424040403A3A3A3434342F2F2F2929292D2E2E2F2E2E2F - 2F2F3130312F2E2F2C2D2C2A2A2A2929292A2929292929292929292929292828 - 2223231818181717171617171616171616161616161616161919181A1B1B1A1A - 1A1A1A1B1B1A1A1A1A1A1A191A17171717161617151616151615151517171717 - 1717171616161616161616161516161616151616151516151615151515151515 - 1414151415151514141515141414141414141313141313131312131212121212 - 121413131C1B1C1B1C1C1B1B1B1B1B1B19181812131313121213121312131212 - 1212121212121111121110121110111010111010101110101010100F0F0F1010 - 0F0F100F0F0F0F100F0F0F0F0F0F0E0F0F0F0F0F0F0E0F0F0E0E0F0E0E0E0E0E - 0E0E0E0E0E0E0E0E0D0E0D0C0D0D0C0D0C0C0D0C0C0C0B0C0B0C0B0B0B0B0B0C - 0B0B0B0B0B0B0B0B0A0A0A0A090A0A0A090A0A0A0C0B0C1C1C1C2626262A2A2A - 3030303434341616150606070706060607060606060606050606060606060505 - 060505060D0D0D05060530303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303737373A3A3A3B3B3B3C - 3C3C3D3D3D3E3E3E3131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030 - 3030303030303131313131313434343838383D3D3D4242424545454646464747 - 474747474848484949494A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4D - 4D4D4C4C4C4A4A4A4747474343434040403F3F3F3F3F3F3F3F3F3F3F3F3A3A3A - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3535353939393939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3837373837373837373837373837373736363333333131313030303030303030 - 3030303031303131303131313131313131313131313131313131313132323232 - 32323434343838383A3A3A3C3C3B3D3D3C3D3C3C3E3D3D3F3E3E3F3E3E3E3E3E - 4040404141414141414242424343434545454545454848484848484A4A4A4B4B - 4B4D4D4C4F4E4E5150505352525554545656565858585A5A5A5C5C5C5F5F5F62 - 62626464646767676969696D6D6D7070707373727676757978787C7B7B807F7F - 8382828786868989898D8D8D8F8F8F9393939797979B9B9B9F9F9FA3A3A3A7A7 - A7ABABABAFAFAFB3B3B3AAAAAA9191919090908C8C8C8888888484847D7D7D77 - 77777171716B6B6B6767676363635F5F5F5A5A5A5656565151514B4B4B474747 - 4242433F3D363D3F463F5DB74172FF4070FF406EFF3F6EFF3E6DFF3E6CFF3C6C - FF3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF34 - 64FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF - 2B5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455 - FF2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B - 4CFF1A4CFF164AFF274FE0585E736562585E5E5E585858515151494948454338 - 3D404E2541AC1143FD0E42FF0F41FF0C40FF0C40FF1841D72B40944041444241 - 404040403E3E3E3D3D3D3C3C3C3B3B3B3A3A3A39393938383838383838383837 - 37373636363535353434343333333131312F2F2F2D2D2D2B2B2B292929262626 - 252525818181B1B1B2ADADADA8A8A8A4A4A4A1A1A09999999494959192928C8C - 8C8888888687878282827E7F7E7A7A7A7777777272726F6F6F6C6C6B69686865 - 64646161615E5D5D5B5B5A5757575454545152514E4E4E4C4C4C484949484848 - 4444444343434040403D3D3D3D3B3C3A393A3938383636363535353232323132 - 312F2F302E2E2E2E2D2D2C2C2C2B2B2B24232322222321212220212120202121 - 21222424253332323737373A3A3A3E3E3E414041424243444545464746464646 - 3435352727261D1C1C1A19191919191919191918191819181819181819181A1A - 1A1F1F1F2525242A2A2B2A292929292928282828282827282828272729282825 - 26251818181617171716171616171717161616161616161A19191B1A1A1A1A1A - 1A1A1A1A1A1A1A1A1A1919191717161616161615161615161616161817161716 - 1717161616161616161616161616161615161615151515151515151514151514 - 1414141515141514151414141414131314131313141314131313121212121212 - 1A1A1A1C1C1C1B1C1C1B1B1B1B1A1A1313131213131212131313131312121212 - 121211111111111211101111111011101010101010100F10100F1010100F1010 - 100F0F100F0F0F0F0F0F0F0F0F0F0F0E0F0F0F0F0E0E0E0F0E0E0E0E0E0E0E0D - 0D0E0E0E0D0D0E0D0E0D0C0D0D0D0D0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B0B0C - 0C0B0B0B0A0A0A0A0A0A0A0A0A0A09090A0B0B1918182424242929292F2F2F33 - 33331E1F1F070606070607060607060706060606060606050606060506050606 - 0D0D0D0505053030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303232323A3A3A3A3A3A3B3B3B3D3D - 3D3E3E3E3C3C3C3030302F2F2F3030303030303030303131313232323737373B - 3A3B4040404444444545454747474747474747474949494A4A4A4A4A4A4B4B4B - 4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F5050505050505151515151515050504E4E - 4E4848484040403B3B3B4040403F3F3F3E3E3E3E3E3E3E3E3E3F3F3F3A3A3A2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F333233393938393938393838 - 3938383938383938383938383938383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383738383738383738 - 3737383737383737383737383737373737373737343434313131303030303030 - 3030303130313130313131313131313131313131313131313232323232323232 - 323232323333333434343636363939393B3A3A3E3D3D3F3E3E3F3E3E3F3F3F40 - 40404141414242424343434444444545454747474848484949494B4B4B4C4C4B - 4F4F4E504F4F5251515352525555555757575959595C5C5C5E5E5E6060606262 - 626565656868686A6A6A6D6D6D7070707373737676767878787C7C7C7E7E7E81 - 81818585858989898D8D8D9090909494949898989C9C9CA0A0A0A3A3A3A8A8A8 - ABABABAFAFAFB4B4B4A6A6A69292929090908C8C8C8888888484847D7D7D7878 - 787171716B6B6B6767676464645F5F5F5B5B5B5656565151514D4D4D48484843 - 4444403F3A3D3C373E5089406DF14072FF406FFF3F6EFF3E6DFF3E6CFF3C6CFF - 3B6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464 - FF3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B - 5BFF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF - 2354FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4C - FF1A4CFF164AFF234DE9525C80605D525656544E4C4645443F31427F1944E310 - 45FF1144FF1143FF1042FF1041FF0E40FF0B40FF0B3FFF323D693F3D363D3D3D - 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3A3A3A3838383838383838383737373636 - 363535353434343333333131312E2E2E2C2C2C2A2A2A282828252525717171B2 - B2B2ADADADA9A9A9A6A6A5A1A1A09C9C9C9797969192918E8E8E8A8A8A878787 - 8484847F80807D7D7D7777787474747070706E6E6E696969666665636463605F - 605C5C5C5958585656565352535050504D4D4D4B4B4B48484845464543434341 - 42413F3F3F3D3D3D3C3C3C3A3A39393737363535353434323232313130303030 - 2F2F2F2C2D2C2C2C2B2525252323232122222120212020212122222424253333 - 333A393A3B3B3B4140404444444848474748474646463132321D1D1D1A1A1A1A - 1A1A1A1A1919191919191A1A1919191919191919181919181918181918181818 - 1818171819182020202727282828282828282828282828282727272728272526 - 251818181617161717171617161616171616161717171B1A1A1B1B1B1B1A1A1A - 1A1B1A1A1A1A1A1A181818171616161716161516151516171717181717171616 - 1716171616161616161616161616151516161516151615151515151415151514 - 151415151414141514141414141313141413141313131312131212121717171C - 1C1B1C1C1C1C1B1C1B1B1B141414131313131313131313131212121212121212 - 1211111211111110111111111010111010101011101010100F100F1010100F0F - 100F0F0F100F0F0F0F0F0F0F0F0E0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E - 0E0E0D0D0E0D0D0D0D0C0D0C0C0D0C0C0C0C0C0C0B0C0B0B0B0B0C0C0B0C0C0B - 0A0B0A0A0A0A0A0A0909090A0B0A0B1716162324232928282E2E2E3333332727 - 270606070607060606060606060606060606060506050506060505060F0F0D05 - 0505303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303535353A3A3A3B3B3B3C3C3C3D3D3D - 3E3E3E39393930303035353539393A3F3F3F4343434545454646464747474747 - 474848484A4A4A4A4A4A4A4A4A4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E50505050 - 50505050505151515252525353535151514A4A4A4242423A3A3A323232303030 - 3030303030303939393E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3939392F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F31313138383839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383838373838373838373837373837 - 3738373738373738373737373737373737373737373735343532313230303030 - 3030313031313031313131313131313131313131323232323232323232323232 - 3333333333333333333434343434343535353838383A3A3A3B3A3A3E3E3E3F3F - 3F4141414343434343434545454545454848484848484A4A4A4B4B4B4D4D4C4F - 4F4E5150505251515453535655555858585959595C5C5C5E5E5E616161636363 - 6666656767676A6A6A6B6B6B6E6E6E7272727474747878787B7B7B7F7F7F8282 - 828686868989898D8D8D9191919595959999999C9C9CA1A1A1A4A4A4A8A8A8AC - ACACB0B0B0B4B4B4A3A3A39292929090908C8C8C8989898383837D7D7D787878 - 7272726D6D6D6868686363636060605B5B5B5757575353534E4E4E4949494445 - 4541403F3E3B323D455D3F62CD4071FF4070FF3F6EFF3E6DFF3E6CFF3C6CFF3B - 6BFF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF - 3363FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5B - FF2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF23 - 54FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF - 1A4CFF174AFF1D4BF4405193504E4540475E2445C01446FF1346FF1446FF1345 - FF1244FF1143FF1042FF1041FF0E41FF0A40FF2A3D853E3B303C3C3C3C3C3C3C - 3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939383838373737363636353535 - 3434343232323030302E2E2E2C2C2C292929262626666666B2B2B2AEAEAEAAAA - AAA6A6A6A2A2A29E9E9E9999999393938F8F8F8A8B8A8786878484848181817D - 7D7D7A7A7A7675767272726F6E6F6B6B6B6767676463646061605E5D5D5B5A5A - 5757575554545151514D4E4E4C4B4B4949494747474444444242424140403E3D - 3D3D3D3C3B3B3B3938393838373735353232323232323030303030302E2D2D2D - 2D2D2828282323242323232221222221222121222524253333333A3A3A3F3F3F - 4142414746464949494C4C4D3C3C3C1E1E1E1A1A1A1A1B1A1A1A1A1A1A1A1A19 - 1A191A1A191A1919191919191919191919191918191819191818181818181817 - 1818181818191819232424282828272727262727282827272728272827242424 - 1818181716171717171716161716161616161818181B1B1B1A1A1B1A1A1A1A1A - 1B1A1A1A1A191917171717161716171616151616161618171717161717161617 - 1616161616161616161616151616151515161516151515151515151515141414 - 1415141414141414141414141314141313141413131313131514141C1C1B1C1C - 1B1C1C1C1C1C1C18171813131313131313131313131313121213121212111112 - 11111211101111111111111110111110111111100F1010100F10101010100F10 - 100F0F0F0F0F0F0F0F0E0E0E0F0E0F0E0F0E0F0E0E0E0E0E0E0E0E0E0E0E0D0D - 0E0D0D0E0D0C0D0C0C0C0C0C0C0C0C0C0C0C0C0B0C0B0C0C0C0B0C0B0B0A0C0B - 0B0B0A0A0A0A0A0A0A0B0B1211122324242929282E2E2E3232332A2A2A070707 - 0706070606060606060606070606060606060606050606050D0F0F0605053030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303838383A3A3A3C3C3C3D3D3D3E3E3E40 - 40404343434545454646464747474848484949494A4A4A4A4A4A4B4B4B4C4C4C - 4D4D4D4E4E4E4E4E4E4F4F4F5050505050505151515252525353535353534C4C - 4C4444443D3D3D37373730303030303030303030303030303030303030303030 - 30303030303939393D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3B3B3B303030 - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131313737373938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383837383837383737383737383737 - 3837373837373737373737373737373737373737373737373636363333333131 - 3131303131303131313131313131313132323232323232323232323233333333 - 33333333333434343434343434343535353737373737373737373938383A3939 - 3C3B3C3E3D3D3F3E3E4140404242424444444545454747474949494A4A4A4C4C - 4C4D4D4D5050505252525454545555555757575A59595B5B5B5D5D5D60606063 - 63636665656968686C6B6B6F6F6F7272727676767979797C7C7C808080838383 - 8787878A8A8A8E8E8E9292929595959A9A9A9D9D9DA1A1A1A5A5A5A9A9A9AEAE - ADB2B2B2B5B5B5A1A1A19393939090908D8D8D8989898383837E7E7E78787872 - 72726D6D6D6868686464646161615D5D5D5858585353534F4F4F4B4B4B464646 - 4242423F3D373D3C3B3E528E406BEC4071FF3F6FFF3E6DFF3E6CFF3C6CFF3B6B - FF3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF33 - 63FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF - 2A5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354 - FF2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A - 4CFF184BFF184AFF2748C61B48ED1448FF1548FF1547FF1546FF1446FF1345FF - 1244FF1143FF0F43FF1141F4243C98383A413B3B393B3B3B3C3C3C3C3C3C3C3C - 3C3B3B3B3B3B3B3B3B3B3A3A3A39393938383837373736363635353533333331 - 31313030302D2D2D2B2B2B2828285A5B5AB3B3B2AFAFAFABABABA7A7A7A3A3A2 - 9E9F9E9B9B9A9595958F8F8F8C8C8C8888878383838282837E7E7E7B7B7B7777 - 777273737070706D6C6D69696A6565656262625F5F5F5B5C5B5A5A5956555553 - 52525150504D4D4D4B4A4B4848484646464343434141413E3E3E3D3E3E3C3C3C - 3A3A3A3939393637363434333332333131313030302F2F2F2D2C2D2C2B2B2525 - 242423232323232222222020212323243232313A3A3A3F3F3F4343434848484C - 4B4C4949492E2E2E1B1B1B1B1B1B1B1A1B1A1B1A1A1A1A1A1A1A1A1A1A1A191A - 1A1A191919191A191919191A1919191919181819181918181818181818181818 - 181718181817181E1D1E26262627272727272626272728272727272723222217 - 17171617161716171617171616161616161A1A1A1B1B1B1B1B1B1A1A1A1A1A1A - 1A1A1A1818181617161717161717161615161817171817171716171716161716 - 1616161616161616161616161615151515151615151515151515151414141514 - 15141414141414141414141414141413131313141312131B1B1B1C1C1B1C1C1B - 1C1B1C1919181313131313141313131313131312121212121212121211111211 - 111111111111101111111010101010101010100F10100F10100F100F100F1010 - 0F100F100F0F0F0F0F0F0F0F0F0F0E0F0F0F0E0F0F0E0E0E0E0E0E0D0E0E0D0E - 0D0D0D0D0C0D0D0C0C0C0C0C0D0C0C0C0C0B0C0C0B0B0C0C0B0B0C0A0A0A0B0A - 0A0A0A0A0A0B0B0F100F2222232728282E2D2D32323333333307070707070706 - 07070706070706060606060607060606060606060F0F0F050506303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303232323A3A3A3C3C3C3D3D3D3F3F3F4141414545 - 454747474A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F50505050505051 - 51515252525353535353534F4F4F4848483F3F3F393939303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303535353C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3F3F3F3C3C3C3030302F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30363535393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383738383738383738373738373738373738 - 3737383737373737373737373737373737373737373737373737373736353434 - 3332333130313131313131313131313232323232323232323232323333333333 - 333333333434343434343535353636363737373737373838383A39393B3A3A3C - 3B3C3C3B3C3E3E3E3F3F3F4141414242424444444545454747474848484A4A4A - 4C4C4C4E4E4E4F4F4F5252525454545757575959595B5B5B5E5E5E6060606463 - 636767676A69696D6C6C7070707373737676767A7A7A7D7D7D81818185858588 - 88888C8C8C8F8F8F9393939696969A9A9A9E9E9EA3A3A3A7A7A7AAAAAAAEAEAE - B2B2B2B4B4B4A2A2A19494949191918D8D8D8989898484847F7F7F7878787373 - 736E6E6E6969696565656161615D5D5D5959595555555050504C4C4C47474743 - 434340403E3D3B323D42533E5CB5406FFF3F70FF3E6DFF3E6CFF3C6CFF3B6BFF - 3B6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3363 - FF3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A - 5BFF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF - 2253FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4C - FF194BFF174AFF1749FF1749FF1748FF1648FF1547FF1546FF1446FF1146FF11 - 44FF1C3EBC2F37563A362B3A39363A3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C - 3B3B3B3B3B3B3B3B3B3939393838383737373636363434343333333030302E2E - 2E2C2C2C2A2A2A5B5A5BAFB0B0AFAFAFABABABA7A7A7A4A4A4A0A0A09B9C9C98 - 98979090908D8C8C8888888585858181818080807C7C7C787878747474717171 - 6E6E6D6A69696667666363636060605C5D5D5A5A5A5757575454545251514F4E - 4E4C4C4C4949494747474545444343434040403E3E3E3E3D3D3B3B3B3A393A38 - 38393737373233333233333031303030312F2F2E2D2D2D282828232323242324 - 2222232222222323232D2E2E3938393D3E3E4443434848484D4D4C4C4B4C2727 - 261B1B1C1B1B1B1B1B1B1B1B1B1B1A1B1A1B1B1A1A1A1B1A1A1A1A1A1A191A1A - 1A191A1A1A19191919191A191819191819191919191818181918181818181718 - 1718181717181A1A1B2525252626262726262727272828272827271E1E1F1717 - 171716171616171716161617161717171A1A1B1B1B1B1B1A1B1B1A1A1A1A1A19 - 1919171717161617171716161617171817181817181717171716171616171616 - 1617161616161616161516161515161515151515151515151515151515151414 - 151515141414141414141414141413141313131919191C1B1B1C1C1B1C1C1B1A - 1B1B141414131313131313131313121313131212131212121112121112111111 - 1011101011111011101010101010101010101010101010100F100F10100F0F10 - 0F0F0F0F0F0F0F0F0F0F0E0F0F0E0F0F0E0E0E0E0E0E0E0E0E0E0D0E0D0D0D0D - 0D0D0D0C0C0D0C0C0C0D0C0C0C0C0C0C0C0B0B0C0C0B0B0B0B0A0B0A0A0A0B0A - 0A0A0A0D0D0D2222212728272D2D2D3131313636360707070707070707070706 - 070706070606070706060606060606060D0F0D06060630303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303535353C3C3C3D3D3D3F3F3F4343434747474A4A4A - 4D4D4D4E4E4E5050505050505050505151515252525353535151514A4A4A4242 - 423B3B3B32323230303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303535353C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3D3D3D3232322F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F31313139383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838373838373837373837373837373837373837 - 3737373737373737373737373737373737373737373737373737373737373737 - 3636353434333333313131323232323232323232323232333333333333333333 - 3434343434343535353636363737373737373737373939393A39393C3B3B3C3B - 3C3D3C3D3F3F3F4040404141414343434444444646464747474949494B4B4B4D - 4D4D4F4F4F5050505353535555555757575A5A5A5C5C5C5F5F5F626262656464 - 6867676A6A6A6E6D6D7171717474747777777B7B7B7D7D7D8181818585858989 - 898C8C8C9090909494949898989C9C9CA0A0A0A3A3A3A7A7A7ABABABAEAEAEB2 - B2B2B5B5B5A2A2A19494949292928E8E8E8A8A8A8585857F7F7F797979747474 - 6E6E6E6A6A6A6565656262625E5E5E5A5A5A5656565151514E4E4E4949494545 - 454242423F3E393D3B343D486B3E61C73F6FFF3E6FFF3E6DFF3C6BFF3B6BFF3B - 6AFF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3363FF - 3262FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5B - FF2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF22 - 53FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF - 1A4BFF194AFF1849FF1749FF1748FF1548FF1448FF1347FF1A40CE2836693332 - 2D35342C3736363939393A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3C3C3C3B - 3B3B3B3B3B3A3A3A3838383737373535353333333232323030302D2D2D2B2B2B - 5C5C5CB0B0B0AFAFAFABABABA8A8A8A4A4A4A0A0A09C9C9C9898989494948C8D - 8D8989898585858281817F7F7E7E7D7D7979797776777272726F6F6F6B6B6B68 - 67686565656161625E5F5E5B5B5B5858585556565353525150504E4D4D4B4A49 - 48484846464544434441424240403F3E3E3E3D3D3D3A3A3A3939393737383535 - 353333323232323030302F2F302D2D2D2C2C2C25252524242423242323232323 - 24232626263939393D3C3C4142414848484D4D4D4D4D4D2727271C1D1D1B1C1C - 1B1B1C1B1B1C1B1B1B1A1B1B1B1B1B1B1A1A1B1A1A1A1A1A1A1A1A1A1A1A1919 - 1A1A191919191919191919191918191919191918181819181818181918181818 - 18171818171A1A1A252525262626262626272727272728262627191919171717 - 1717171616171717161617171A191A1B1B1B1A1B1A1B1A1B1A1B1A1A1A191818 - 1817171717171617171716161618181718181718171718171717161717161616 - 1717151616151516151616151616161515151515151515141515151515151415 - 1414141414141314141314131413141717171C1C1B1C1B1B1C1C1B1C1C1B1414 - 1513131413131313131313131313121212121212111112111212111111111111 - 11111111111011101111101010111010101010100F1010100F1010100F0F0F10 - 0F0F0F0F0F0F0F0F0E0F0F0F0F0F0E0E0E0E0E0E0F0E0D0E0D0D0E0D0D0D0D0D - 0D0D0C0C0C0C0C0C0D0C0C0C0C0C0C0C0B0A0B0A0A0B0A0B0B0B0A0A0A0A0B0D - 0D0D2020202728282D2C2D323131363636101010070707070707070707060706 - 0607070606070707060606060F0F0F0606063030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303A3A3A3E3E3E4040404545454A4A4A4D4D4D50505052 - 52525353535353534C4C4C4444443D3D3D373737303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303434343B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3434342F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3434343938383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383837383837383737383737383737383737383737383737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373736363634343433333332323233333333333333333333333334 - 34343434343535353636363737373737373838383939393B3A3A3C3B3B3C3B3C - 3E3D3E3F3F3F4040404242424444444444444646464848484A4A4A4B4B4B4D4D - 4D4F4F4F5252525353535656565858585B5B5B5D5D5D5F5F5F63636366656568 - 67676B6B6B6E6E6E7272727575757878787B7B7B7F7F7F8383838787878A8A8A - 8E8E8E9292929595959999999C9C9CA0A0A0A4A4A4A7A7A7ABABABAEAEAEB2B2 - B2B4B4B3A3A3A29595959292928E8E8E8A8A8A8585858080807B7B7B75757570 - 70706B6B6B6666666363636060605C5C5C5858585454545050504C4C4C474747 - 4444454242413F3D363C3C393D4A713E60C73E6EFF3E6FFF3C6CFF3B6BFF3B6A - FF3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3363FF32 - 62FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF - 2A5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF2253 - FF2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4CFF1A - 4BFF194AFF1849FF164AFF1649FF1B42CE2536702F2F2E322F26333231353535 - 3737373838383A3A3A3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3B3B3B3A3A - 3A3A3A3A3939393737373535353333333131313030302D2D2D5D5D5DB0B0B0AF - AFAFABABABA8A8A8A4A4A4A1A1A19C9C9C9898989595959190908A8A8A858586 - 8382827E7E7E7D7D7D7A7A7A777776747373706F6F6C6C6C6969696465656262 - 625F60605C5C5C5959595656565454545152514E4F4E4C4C4C4A494948474745 - 44444343434040413E3F3E3D3C3C3C3B3B3B3A39393839363737343333333333 - 31303130302F2F2E2E2D2D2E2A2A2A2424242424232223232323232324233333 - 343C3C3C4140414747464C4C4B5151502D2D2D1D1D1D1C1D1D1C1C1C1C1B1B1C - 1B1B1B1B1B1B1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A1A1A191A1A1A - 1919191A19191919191819191919181818181918181818181818181818181818 - 181817181B1B1B25252526262626262627262727272723232417171717171717 - 17161617171617161818181B1B1B1B1B1A1B1A1B1B1B1A1A1A1A191919171717 - 1617171716171617161717171818181818171817171817171717161716161716 - 1616161616161615151616151516151615151615151515151515151514141414 - 14141414141414141414131616151B1B1C1C1C1B1C1B1B1C1C1B161515141413 - 1413141313131313131312121212121211111212111211111111111111111011 - 1111111010101110101010111110101010100F0F0F10100F100F10100F100F0F - 0F0F0F0F0F0F0E0F0F0F0F0F0E0F0F0E0E0E0D0E0E0D0E0D0D0D0D0C0D0D0D0C - 0D0D0D0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0B0B0B0C0D0D0D1F1F - 1F2828282E2D2E33323238383814141407070707070707070606070607070606 - 07070606070706070F0F0F060606303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303131313E3E3E4242424747474C4C4C4C4C4C4747473F3F3F3939 - 3930303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303333333939393A3A3A3B3B3B3D3D3D3E3E3E3F3F3F3F3F3F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F353535393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383738383738383738373738373738373738373738373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373838383838373737373636363636363434343333333434343434 - 343535353636363737373737373737373838383939393C3B3B3C3B3B3D3C3D3F - 3E3F4040404141414242424444444545454747474848484B4B4B4C4C4C4E4E4E - 4F4F4F5252525454545757575959595B5B5B5E5E5E6060606363636666666A6A - 6A6C6C6C7070707473737777777A7A7A7D7D7D8080808383838787878A8A8A8E - 8E8E9292929595959999999D9D9DA0A0A0A4A4A4A7A7A7ABABABAEAEAEB2B2B1 - B5B5B4A5A5A59595959393938F8F8F8C8C8C8787878181817C7C7C7777777272 - 726D6D6D6868686464646060605E5E5E5959595656565252524E4E4E4A4A4A46 - 464743434341403F3E3C353D3C3A3D49703D5DC03D6BFB3C6EFF3B6CFF3B6AFF - 3A69FF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3363FF3262 - FF3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A - 5AFF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF - 2152FF2152FF2051FF1F50FF1F50FF1E4FFF1D4EFF1C4DFF1B4CFF1A4DFF194D - FF194AFC1E41C126366D2E2E2F302D2331302E3131323434343636363838383A - 3A3A3B3B3B3D3D3D3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3A3A3A393939 - 3838383737373535353232323030302D2D2D6B6B6BB3B3B3B0AFB0ABABABA8A8 - A8A4A4A4A0A0A19C9D9D99999A9596959292928D8D8D8687878382837F7F7F7B - 7B7B7B7A7A7878777574747171716E6D6D6A6A6A6666666464646161615C5D5D - 5A5B5A57585855555552525250504F4D4D4D4B4A4A4848484645454443434342 - 423F3F3E3D3D3E3D3C3C3B3B3A3A393939373836363533333433323331313230 - 30302E2D2E2D2C2D25262624252424242523232323232229292A3B3A3A3F3F3F - 454545494A4A504F503738371E1E1D1D1D1D1D1C1C1B1C1C1C1B1C1C1B1B1B1B - 1B1B1C1B1B1B1B1B1B1B1B1B1B1A1A1B1B1A1B1A1A1A1A1A1A1A1A1A191A1919 - 1A19191A19191919191919191919191819181919181818181818181818181818 - 1717182020202625252626262526262727272828281B1B1B1717171717171717 - 171617171617171B1B1A1B1B1B1A1B1B1A1A1A1B1A1A1A1A1A17171717171717 - 1717171716171817181818181817181817181717181617171716171616161616 - 1616161615161616161615151516151515151515151515151514151414141414 - 141514141414141515151C1C1B1C1C1B1C1B1B1C1B1B18181713141314141414 - 1413131313141313121212131212121211121111121112111111111111111110 - 11111010111011101011101110101010101010100F0F0F0F10100F0F100F0F0F - 0F0F0F0F0F0F0F0E0E0F0F0E0E0E0E0E0E0D0E0D0D0D0D0D0D0D0D0D0B0B0B0B - 0C0B0C0B0B0B0B0B0B0B0B0A0B0B0B0B0A0C0C0B0C0B0C0F0E0E2020202A2A2A - 3030303434353939391B1A1A0707070707080707070707060606070706060606 - 060606070F0F0F06060630303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303535353A3A3A383838343434303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3232323838383A3A3A3B3B3B3D3D3D3E3E3E3D3D3D2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F36363639393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373837373837373837373837373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737383838383838383837383837393838393838393838393938383838373737 - 3737373837373837373737373838383939393A3A3A3C3B3B3C3B3B3E3D3E3F3E - 3F4040404141414343434444444646464747474949494B4B4B4D4D4D4F4F4F50 - 50505353535555555757575A5A5A5D5C5C5F5F5F6363636666666969696C6C6C - 6E6E6E7171717575757878787A7A7A7E7E7E8181818484848888888A8A8A8E8E - 8E9292929595959999999D9D9DA0A0A0A4A4A4A7A7A7ABABABAEAEAEB2B2B1B5 - B5B4A7A7A79595959494949090908D8D8D8888888383837D7D7D787878737373 - 6E6E6E6969696565656262625F5F5F5B5B5B5858585555555151514C4C4C4949 - 4945454543434340403F3F3C353D3C373C445E3D56A53C66E63C6CFF3B6CFF3A - 6AFF3A69FF3968FF3867FF3767FF3666FF3665FF3564FF3464FF3363FF3262FF - 3261FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5A - FF2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF21 - 52FF2152FF2051FF1F50FF1E50FF1E50FF1C50FF1C4EFF1D49E92340A62B3559 - 2F2E2A302D2430302E3131313333333434343636363838383A3A3A3C3C3C3D3D - 3D3D3D3D3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A39393937373735 - 35353434343232322F2F2F757474B3B3B3B0B0AFACABACA8A8A9A4A4A4A1A1A1 - 9D9C9D9A9A999695969292928E8E8E8989898383838080807B7C7C7878787979 - 797575747272726F6E6E6C6B6B6867686565656161615E5E5E5C5C5C58585855 - 55555352525050504D4E4E4C4C4C4949484748474645454342424140403F3E3E - 3D3D3C3C3C3B3A3A3A3939383837373534343334333132313031302F2F2F2E2E - 2E2B2A2B2524252425242324232323232424243433343D3D3E4342424848484D - 4D4D4A4B4B1E1E1E1D1E1D1D1E1D1C1C1D1C1C1C1C1B1C1B1C1B1C1C1B1B1B1C - 1B1B1B1B1A1B1B1B1B1A1B1B1B1A1A1B1A1A1A1A1A1A191A1A1A1A191A1A191A - 191A191919191919191919191819191918181818181818181818181818181818 - 1919232323252525262626272726272727242424171717171717171717161717 - 1616161A191A1B1B1B1B1B1B1B1A1B1A1B1A1B1A1A1818181717181717171717 - 1718171818191918181818181718181718171718161717171617161616161616 - 1616151616151515151516151516151515141514151415151415151514141414 - 1415151414141B1C1C1C1C1B1C1C1B1C1B1B1918181414141414141414131313 - 1314131313121213121213111212121112111211111111111111111010111110 - 1111101110101010101010101010101010100F10100F101010100F0F0F0F0F10 - 0F0F0F0F0F0F0E0E0F0E0E0E0E0E0E0D0D0E0C0D0C0C0C0C0C0C0C0C0B0C0B0C - 0C0B0B0B0B0B0C0C0C0C0C0C0C0D0D0E1110101D1D1C2828282E2E2E33333338 - 38383C3C3C222221080707070708070807070707070707060707060706070706 - 0F120F0606063030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303033 - 33333939393A3A3A3C3C3C3D3D3D3B3B3B2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3837383837383837383737383737383737383737383737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373838 - 383838383838373838373938383938383938383938383A39393939393A3A3A3B - 3B3B3B3B3B3B3B3B3C3B3B3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F414141414141 - 4343434444444545454747474848484A4A4A4C4C4C4D4D4D5050505252525454 - 545756565958585B5A5A5D5C5C5F5F5F6262626464646666666A6A6A6C6C6C6F - 6F6F7272727575757878787B7B7B7F7F7F8181818585858888888B8B8B8F8F8F - 9292929595959999999D9D9DA0A0A0A4A4A4A7A7A7AAAAAAAEAEADB1B1B1B5B5 - B4ACACAC9797979494949191918E8E8E8A8A8A8585857F7F7F7A7A7A75757570 - 70706C6C6C6767676363636161615D5D5D5A5A5A5656565353534F4F4F4C4C4C - 4848484646464343444141403F3D383D3B333C3F463C4B7B3B59B53B66ED3A6A - FF396BFF3969FF3868FF3767FF3666FF3665FF3564FF3464FF3363FF3262FF32 - 61FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF - 2959FF2958FF2858FF2758FF2657FF2556FF2455FF2455FF2354FF2253FF2152 - FF2153FF1F53FF1F51FF1F4DF02344B9293A792E323E302E25312F2831313032 - 32323333333434343636363737373939393B3B3B3D3D3D3D3D3D3E3E3E3E3E3E - 3E3E3E3F3F3F3F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3939393737373434343333 - 333A3A3A868686B3B3B3AFAFAFABACACA8A8A8A4A4A4A1A1A19D9D9D9A9A9A95 - 96969292928E8E8E8B8B8B8584848080807D7D7D787878777677767676727272 - 70706F6C6D6C696968666565636262605F5F5C5C5C5A5A5A5757565353545252 - 51504F4F4D4D4D4A4A4A484848464646444343434242403F3F3E3D3D3C3C3C3C - 3B3B3A3A3A3939393838363535353332333232313030302E2F2E2E2E2E282828 - 2525252525242423232323242626273B3B3B3F3F3F4545464B4C4B5050513131 - 311D1E1E1E1E1E1D1D1D1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1C1C1B1B1B1C1B - 1B1B1B1B1B1B1A1B1B1B1A1A1B1A1A1A1A1A1A1A1A1A1A1A191A191A19191919 - 1A19191919191918191919191818181918181818181818181818181817171D1D - 1C24242425252526262627272627272819191918171717171717171717171618 - 17171C1C1B1B1B1B1B1B1B1B1B1A1A1B1A1A1919171717171818171717161717 - 1818191819181918181818181818171717171817161716171716161616161616 - 1616161616161516151515151515151515151515151515151414141514141414 - 14141A1A191C1C1C1C1C1C1B1B1B1B1919141414141414131414141414141313 - 1312131312121312121311121211111112121111111111111111111110111110 - 111011111010101010101010101010100F0F100F0F0F1010100F0F0F0F0F0F0F - 0F0F0F0E0E0E0E0E0D0C0E0C0D0C0C0C0C0C0C0C0C0C0C0B0C0B0C0C0B0C0D0D - 0C0C0C0D0E0D1010101A1A192424242827272C2C2C3131313737373A3A3A3C3B - 3C212221080807070707080707070707070707070707060706070706120F0F06 - 0606303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303333333838 - 383939393B3B3B3D3D3D3736372F2F2F2F2F2F2F2F2F2F2F2F2F2F3039393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 3738383738373738373738373738373738373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737383838 - 3838373838373838373938383938383938383A39393A39393939393A3A3A3B3B - 3B3B3B3B3B3B3B3D3D3D3E3E3E3E3E3E3F3F3F40404041414142424243434345 - 45454646464747474A4A494A4A494C4C4B4E4D4D504F4F515050535252555454 - 5857575A59595B5B5B5E5D5D5F5F5F6262626565656767676A6A6A6D6D6D6F6F - 6F7272727575757878787C7C7C7F7F7F8282828585858888888B8B8B8F8F8F92 - 92929595959999999D9D9DA0A0A0A3A3A3A7A7A7AAAAAAADADADB0B0B0B4B4B4 - B0B0B09B9B9B9595959292928F8F8F8B8B8B8686868181817C7C7C7878787373 - 736E6E6E6A6A6A6565656262626060605C5C5C5959595656565252524F4F4F4B - 4B4B4848484646464444444242423F3E3C3E3B343C3A353B3F4A3B4A793A55AD - 3960DE3967F93869FF3669FF3668FF3566FF3565FF3464FF3363FF3262FF3261 - FF3161FF3060FF2F5FFF2F5FFF2E5EFF2D5DFF2D5CFF2B5BFF2A5BFF2A5AFF29 - 59FF2958FF2858FF2658FF2657FF2556FF2457FF2357FF2355FF2251F9234CDD - 2643AA2A3A752E3242312F2A32302632312E3333323333333535353636363737 - 373838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F3F3F3F4040404040403F3F3F3F - 3F3F3F3F3F3E3E3E3C3C3C3B3B3B393939373737363636343434464646999898 - B3B2B2AFAEAEABABABA8A8A8A4A5A5A1A1A09D9D9D9A9A9A9696969292928E8E - 8E8C8B8C8787878181817D7D7D7979797676767373737473747170706D6D6D69 - 69696767666363636060605E5D5E5B5A5A5757575554555352535150504E4E4D - 4B4B4B4848494746474545454444444140403F3F3F3E3D3D3B3B3A3A3B3B393A - 3A3838373637373433333232313131312E2F2F2F2F2E2F2E2F25262525252524 - 2424222223242423302F2F3D3D3D4140414748484D4D4D4B4B4B1F1E1E1E1E1E - 1E1E1E1D1D1D1D1D1D1C1D1C1D1C1C1C1C1C1C1C1B1C1C1C1B1B1B1B1C1B1B1B - 1C1B1B1B1B1B1B1B1A1B1A1A1B1B1B1A1A1A1A1A191A1A191A191A1919191919 - 19191A1919181919181919181918181818181918181818181818171818222222 - 2424252525252526262627271D1E1E1718181818171717171717171717171B1B - 1B1C1C1B1B1C1B1B1B1B1B1B1A1A1A1917181818181817171717171719181918 - 1919181819181818181817181817181717181617171617171716161616161616 - 1616161515151615151516151515151515141515141514141414151514141919 - 191C1C1C1C1C1C1C1C1C1C1B1B14141414141414141413141413131313131313 - 1212131212131212121212121112111112121111111111111111111110101110 - 111010111011101110101010101010100F10100F101010100F100F0F0E0F0E0E - 0E0D0D0D0D0C0C0D0C0C0C0D0C0D0C0C0C0C0C0D0D0D0D0D0D0E0D0E100F0F19 - 19192222222626262828282D2D2D3131323736363939393C3C3C3D3D3D282727 - 08070807080707080708070707070707070707070706070712120F0706073030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030333333373737393939 - 3B3B3B3D3D3D3434342F2F2F2F2F2F2F2F2F2F2F2F3131313939393939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3837373837373837373837373837373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373738383838383838 - 38373838373938383938383938383938383A39393939393A3A3A3B3B3B3B3B3B - 3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F4040404040404242424242424444444545 - 454646464848484A4A494B4B4A4D4C4C4E4D4D51505052515154535355545458 - 57575A59595C5B5B5E5E5E6060606262626565656767676A6A6A6D6D6D707070 - 7373737575757878787C7C7C7F7F7F8282828585858888888B8B8B8F8F8F9292 - 929595959999999C9C9CA0A0A0A3A3A3A6A6A6A9A9A9ACACACB0B0B0B3B3B3B2 - B2B2A0A0A09595959393939090908C8C8C8888888383837F7F7F797979757575 - 7171716C6C6C6868686565656161615E5E5E5B5B5B5858585555555252524F4F - 4F4C4C4C4949494747474545454242424040403F3E3B3E3B343D3B343B3C403A - 425B3A4C853954AA375BCF3761EB3564F93565FF3465FF3366FF3264FF3263FF - 3162FF2F61FF2F60FF2E60FF2E5FFF2D5EFF2C5EFF2B5DFF2A5DFF295CFF285C - FF285AFF2859FF2757FA2754ED284DCD2945A52B3D802D36542F3035312E2732 - 2F2532312D3333323434343535353636363737373939393A3A3A3B3B3B3C3C3C - 3D3D3D3F3F3F4040404040404141414141414141414141414141413F3F3F3E3E - 3E3E3E3E3C3C3C3B3B3B3939393737373535355A5A5AA5A4A5B2B1B1AFAEAFAB - AAABA7A7A7A4A3A4A1A1A19D9D9D9999999696969292928E8E8E8C8C8C888888 - 8485847D7D7D7979797676767373737171707071716D6D6D6A6B6A6767676464 - 646161605E5E5D5C5C5C5A58585756565353535151514E4E4D4B4C4C4A494948 - 48484646464444434242423F40403F3E3E3C3D3C3B3A3A3A3A3A393939373636 - 3535363232333232323030302F2E2E2E2F2F2C2B2C2525252525252424242423 - 232425253536363D3D3D4444444949494F4F4F3534351E1E1F1E1E1E1E1E1E1D - 1D1D1D1D1D1D1C1C1D1C1D1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1B1B1C1B1B1B - 1B1B1B1B1B1B1B1A1B1A1B1B1A1A1A1A1A1B1A1A1A1A191A19191919191A191A - 191919191819191919191919181918191818181818181818181D1D1D24252425 - 25262626262727272525251817181718171717171717171717171B1A1A1B1C1C - 1C1C1B1B1B1B1B1B1A1A1B1A1917171818171718181717171818181819191818 - 1818181819181818181717171718171718161717161617161616161616161616 - 16161616161616151515151515151515151515151415141414151818181C1C1C - 1C1C1C1C1C1B1B1B1C1514151414151414141413141314141313131312131312 - 1213131213121212121112111212111111111211111111111111111110101111 - 10101110101010101010101010100F0F0F0F10100F0E0F0D0D0D0E0D0D0C0D0D - 0D0D0D0D0C0C0D0C0D0D0E0E0D0D0D0E0E0E0F0F0E1617172121212525252829 - 282B2B2C3030303232323737373A39393D3D3D35353515151508080808080708 - 0807080707070807070708070707070707070706120F12060707303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303434343636363838383A3A3A3D - 3D3D3232322F2F2F2F2F2F2F2F2F2F2F2F333333393939393938393938393838 - 3938383938383938383938383938383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383738383738383738 - 3737383737383737383737383737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373838383838383838373838 - 373838373938383938383938383A39393939393939393A3A3A3B3B3B3B3B3B3B - 3B3B3C3C3C3E3E3E3E3E3E3F3F3F404040414141424242434343454545464646 - 4747474949484A4A494C4B4B4D4C4C4E4D4D5150505251515454545655555858 - 585A59595C5B5B5E5E5E6060606262626565656868686A6A6A6D6D6D71717173 - 73737575757979797C7C7C7F7F7F8282828585858888888B8B8B8F8F8F929292 - 9595959999999C9C9C9F9F9FA2A2A2A5A5A5A9A9A9ABABABAFAFAFB2B2B2B4B4 - B4A7A7A79696969494949292928E8E8E8A8A8A8686868181817C7C7C78787874 - 74747070706B6B6B6767676464646161615E5E5E5B5B5B595959555555525252 - 5050504D4D4D4A4A4A4848484646464343434242424141403F3F3D3E3C383D3A - 313C3A323C3C3D3B3D453A425B394776374B8C374FA03553B13454C13456C933 - 59D93159DD3058DD3058DD2F57DD2E56DB2F51C92E4FC22E4CB12E489F2F448B - 2F3E74313A5931343D32323332302733302633322C3332303333333535353636 - 363737373838383939393B3B3B3C3C3C3D3D3D3E3E3E3F3F3F40404041414141 - 41414343434343434343434242424242424141414141414040403E3E3E3D3D3D - 3C3C3C3A3A3A383838393939757576ADADAEAFAFAFAEADAEAAA9A9A7A7A7A3A3 - A3A0A0A09D9D9D9999999696969392928F8E8E8C8C8C88888885858581818179 - 79797677767474747070706F6F6F6E6E6D6B6C6C6868686564646262625F5F5E - 5C5C5C5A59595757565453535251514F4F4F4D4D4D4B4B4B4949494747474444 - 444242424041413F3F3E3E3E3D3C3B3B3B3A3A3B3A3A38383737373735353533 - 33333131312F2F2F2F2F2F2D2E2E29292A252626242424232323232323262626 - 3B3C3B3F3F404444444B4B4B5050502425251F1F1E1F1E1F1E1E1E1D1D1D1D1C - 1D1C1C1D1D1D1C1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1C1B1B1C1B - 1B1B1B1A1B1A1A1A1A1A1B1B1B1A1A1A1A1A1A1A1A1A1A19191A1919191A1A19 - 191919191919181918181818181818181818181818191A1A2424242524252525 - 252626262728281819181717181717171717171717171919191B1B1B1C1B1B1B - 1B1B1B1B1B1B1B1A191919191717171817181717191818191919181919181818 - 1818191918181818171818171817171717171717161716161617161616161616 - 151515151615161616151515151415151515141414141819181D1C1C1C1C1C1B - 1C1B1C1C1B151415141414151414141414141414141313141313141312131212 - 1312121211111212121112111111121111111111111111111111101111101010 - 111011101010101010100F0F0F0D0D0D0E0D0E0E0D0E0D0D0E0D0D0D0C0D0C0E - 0E0D0E0E0E0D0D0D100F0F1414141F1F1F2526262929292C2C2B2F3030333232 - 3535353838383A3A3A3839391C1C1D0908080808080808080807080808070808 - 0808070707080808070707070707070712121206060730303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303434343636363838383A3A3A3D3D3D2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F35343439393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383838373838373838373837373837 - 3738373738373738373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737383838383837383837383837 - 3938383938383938383938383A39393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C - 3C3D3D3D3E3E3E3F3F3F3F3F3F40404042424242424243434345454546464647 - 47474949484A4A494C4B4B4D4D4D4F4E4E515050535252545454575656585858 - 5B5A5A5C5C5C5F5F5F6161616363636666666868686B6B6B6D6D6D7171717373 - 737676767979797C7C7C7F7F7F8282828585858888888B8B8B8E8E8E92929295 - 95959898989B9B9B9E9E9EA2A2A2A4A4A4A8A8A7ABABABAEAEADB1B1B1B5B4B4 - AEAEAE9B9B9B9595959393939090908C8C8C8989898484847F7F7F7B7B7B7777 - 777373736E6E6E6A6A6A6666666363636161615E5E5E5B5B5B58585856565653 - 53535151514E4E4E4C4C4C494949484848464646444444424242414141403F3F - 3F3E3D3E3D3B3E3C373C3A333C392F3C392F3B39333A3A383A3939393A3E393A - 3F38393E37393D37393D37383C36363636353436342F37342937332936342C36 - 352F3635323635343636353737373737373737373838383939393B3B3B3C3C3C - 3C3C3C3E3E3E3F3F3F4040404141414242424343434343434444444444444444 - 444444444545454444444242424242424040404040403E3E3E3C3C3C3B3B3B3A - 3A3A4D4D4D939393AFB0B0ABABABABAAAAAAAAAAA6A5A5A3A2A2A0A0A09C9C9C - 9999999595959292928E8E8E8C8B8B8888888585858181817E7E7E7676777474 - 747070706D6D6E6C6C6C6C6C6C6868686566666362626060605D5D5D5B5B5A58 - 5857565554535252504F4F4E4E4E4B4B4B494949474746444444444343414241 - 3F3F3F3E3E3E3C3C3B3A3A3A3A3A3A3938383837373636363534343132323031 - 3130302F2F2F2F2E2D2E28282826262525242523232323242429292A3C3C3C42 - 42424546454C4C4C4848481F1F1F1F1E1F1E1F1E1D1D1E1D1D1D1D1D1D1D1D1D - 1D1C1D1D1D1C1D1C1C1C1C1C1C1C1C1C1B1C1B1C1B1B1B1B1B1B1B1B1B1B1B1B - 1B1B1B1A1A1A1A1B1B1B1B1A1B1A1A1A1A1A1A1A191A1A1A1A19191A19191919 - 1919181919181919191918191918181818181818222122252525262525262626 - 2727271C1C1C1817181818181817171717181818181C1C1C1C1B1B1C1C1B1C1B - 1B1B1B1A19191919191918181718181818181819191919191919191918191918 - 1918191818181817181817181717181617171716171716161616161616161616 - 1516151616151515161515151515141515151717161D1D1C1D1C1C1C1C1C1C1C - 1C16171615141514141414141414141413131313131314121213131213121212 - 1212121212121212121212121111111111121211111111101111111111111111 - 1010110F0E0E0E0D0E0E0D0E0D0D0E0E0D0E0D0D0D0D0D0D0F0E0E0E0D0E100F - 0F1312131E1F1E2626262929292B2B2B2E2F2E323232343534383838393A3A37 - 37372222220C0C0C080809090808090809080808080808080808080808070808 - 0707080708080707070707071212120707073030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303131313434343636363838383B3B3B3C3C3C2E2E2E2F2F2F - 2F2F2F2F2F2F2F2F2F3636363939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383837383837383737383737383737 - 3837373837373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373738383838383838383738383738373739 - 38383938383938383A39393939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C - 3E3E3E3E3E3E3F3F3F4040404141414242424242424444444545454646464848 - 474A4A494A49494C4B4B4E4D4D504F4F5150505352525554545756565958585A - 5A5A5C5C5C5F5F5F6161616363636666666969696B6B6B6E6E6E717171737373 - 7676767979797C7C7C7F7F7F8282828585858888888A8A8A8E8E8E9292929494 - 949797979B9B9B9D9D9DA0A0A0A4A4A4A7A7A6AAAAA9ADADADB0B0B0B3B3B3B4 - B4B4A5A4A49595959494949191918F8F8F8B8B8B8787878282827E7E7E7A7A7A - 7676767272726E6E6E6A6A6A6666666363636161615E5E5E5B5B5B5959595757 - 575454545252524F4F4F4D4D4D4C4C4C4A4A4A47474746464645454544444443 - 43434242424040404040403F3F3F3F3E3E3E3E3D3D3D3B3C3B393C3B393C3B39 - 3B3A383B3A383B3A383A3A383A3A383A3A393A3A3A3A3A3A3A3A3A3A3A3A3B3B - 3B3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F40404041414141414142 - 4242434343444444454545454545454545454545464646474747464646454545 - 4545454444444343434242424040403F3F3F3E3E3E3C3C3C3A3A3A6E6E6EA8A8 - A9ADADAEAAABABA7A7A7A7A6A6A5A5A5A3A3A29F9F9F9B9B9B99999994949491 - 91918F8F8E8C8C8C8887878585858281817E7E7F7A7A7A7474747171716D6D6D - 6A6A6A6A6A6A6969696666666364646060605D5D5E5B5B5B5859585656555353 - 535151504E4E4E4E4C4C4A4949484848464646444544424142403F403F3F3F3D - 3D3D3B3A3B3A3A3A393A3A383837373636373636343433303131302F30302F30 - 2E2F2E2D2E2D2828272525252424242323232324243030303D3C3D4141414748 - 474D4D4D3E3E3E1F1F1F1E1F1F1E1F1E1D1D1D1E1D1D1D1D1D1D1D1D1D1D1D1C - 1D1C1C1C1D1C1C1C1C1D1C1C1C1C1C1B1B1C1C1B1B1B1B1B1B1C1B1B1C1B1B1B - 1A1B1B1A1A1B1A1A1B1A1A1A1A1A1A191A1A191A1919191919191A1A1A1A1919 - 191919191919191818181819181818181E1F1F2424232524252626262728271F - 1F201818181818181818181717171818191C1C1C1C1C1C1C1C1B1B1B1B1B1B1A - 1A1A1A1919191819191918171918191A19191919191919191819191919191919 - 1918181818181718181717171717161717161717161616161616161616161615 - 15161515151515151515151515151717171C1D1C1D1C1D1C1C1C1C1C1C171616 - 1415151515141414141414141414141413131413131412121313121312131212 - 121212121211121212121212111112111111111111111011110F0E0F0E0E0F0E - 0D0E0E0D0E0E0D0E0E0D0E0E0D0E0E0E0E0E0E0F100F0F1213121C1D1D252626 - 2928292C2B2B2E2E2E3131313535353838383839393A3B3A2828290C0D0C0909 - 0909090809090909090908090808080908080808080808070807080808070708 - 0707080807080707121212070707303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303131313434343737373939393B3B3B3A3A3A2E2E2E2F2F2F2F2F2F2F - 2F2F2F2F2F383837393939393939393938393938393938393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383738383738383738373738373738373738 - 3737383737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737373737373838383838373838373838373938383938 - 383938383938383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E - 3E3E3E3E3E3F3F3F404040414141424242434343454545464646474746484847 - 4A49494B4A4A4D4C4C4E4D4D504F4F5150505352525554545857575958585B5B - 5B5D5D5D5F5F5F6262626464646666666969696B6B6B6E6E6E71717173737376 - 76767979797C7C7C7F7F7F8282828585858888888A8A8A8E8E8E919191949494 - 9696969A9A9A9D9D9DA0A09FA3A3A2A6A6A6A9A9A9ABABABAFAEAEB2B1B1B4B4 - B4ADADAD9C9C9C9595959393939090908D8D8D8A8A8A8585858282827E7E7E7A - 7A7A7676767272726E6E6E6B6B6B6868686464646161615E5E5E5C5C5C5A5A5A - 5858585656565353535151514F4F4F4E4E4E4D4D4D4A4A4A4949494848484747 - 4746464645454544444443434343434343434341414141414140404040404040 - 40403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040 - 4040404040404242424343434343434444444444444545454646464646464747 - 4747474748484848484848484848484847474748484848484846464645454544 - 44444343434242424141413F3F3F3D3D3D555555959595B2B2B2ACACADA8A8A9 - A5A6A6A3A3A3A2A2A2A1A1A19E9E9E9C9B9B9998989494949191928E8E8E8B8B - 8B8888888585858282827E7E7E7B7C7B7878777171716E6E6E6A6A6A68676869 - 69696666666464646160605F5F5E5C5C5C595A5957575754545452525150504F - 4D4D4C4A4949494848474646454545434343414140403F403D3E3D3C3C3C3A3A - 3A3A3A3A3939393939383737363635353433333030303030302F2F2F2E2E2F2D - 2D2D2626262424242324242222222324232F2F2F3E3E3E4241424747484D4D4D - 3938382020201F1F1F1D1E1E1D1E1E1E1D1D1D1E1E1D1D1D1D1D1D1D1D1D1D1D - 1D1C1C1C1D1C1D1C1D1C1C1C1C1C1C1C1B1C1B1B1B1B1B1B1C1B1C1C1B1B1B1B - 1A1B1A1B1A1B1A1B1A1A1A1A1A1A1A1A1A191A1A191A1919191A1A1A19191919 - 1819191919191818191819181E1E1E2424242525252626262728281F1F201818 - 181817181817181717181817181C1C1C1C1C1C1B1C1B1C1B1B1B1B1B1B1B1A19 - 191A1919191919191818191A1A1A19191A191919191919181919181818181919 - 1818181818171818171717171816161716171716161616161616151616161515 - 161515161516161515151717171C1D1C1D1D1B1C1C1D1C1C1C17171615151415 - 1415141414141414141414141313131313131212141212131212121213121212 - 1211121111121112111211121111111010100F0F0F0E0E0F0E0D0F0E0D0E0E0D - 0F0E0D0F0F0E0F0F0E0F0F0F0F1213131B1B1B2424252828282B2B2B2E2F2F30 - 31313534343738373939393B3B3B2E2F2F10100F0A0A09090A090909090A0909 - 0909090809080808090809080908090909080908080808080807080708080707 - 0807070712121207070730303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3232323535353737373939393B3B3B3737372E2E2E2F2F2F2F2F2F2F2F2F2F2F - 2F39393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838373838373837373837373837373837373837 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373737383838383837383837383837383737393838393838 - 3938383A39393939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E - 3E3F3F3F3F3F3F4040404242424242424343434545454646464747464949484A - 49494C4B4B4D4C4C4E4D4D5150505251515453535554545857575959595B5B5B - 5D5D5D5F5F5F6262626464646666666969696C6C6C6E6E6E7171717373737676 - 767979797C7C7C7F7F7F8181818484848787878A8A8A8D8D8D90909093939396 - 96969999999C9C9B9F9F9EA2A2A2A4A4A4A8A7A7AAAAAAACACACAEAEAEB1B1B1 - B2B2B2A7A7A79898989494949292928F8F8F8C8C8C8888888585858181817E7E - 7E7A7A7A7676767373736F6F6F6C6C6C6868686565656262626060605E5E5E5C - 5C5C5A5A5A5858585555555454545353535151514F4F4F4D4D4D4D4D4D4B4B4B - 4A4A4A4949494848484747474747474747474646464545454545454545454444 - 4444444444444443434344444444444444444444444445454545454546464646 - 46464646464747474848484848484949494949494949494A4A4A4A4A4A4A4A4A - 4A4A4A4B4B4B4B4B4B4A4A4A4A4A4A4949494848484848484646464444444444 - 444242424040404848487E7E7EB1B1B1B1B1B1ABABABA8A8A8A5A4A5A1A1A29E - 9E9E9E9E9E9D9D9D9A9A9A9797969594949191908D8D8E8A8A8B888888848484 - 8181817E7E7E7B7B7B7878787574746E6E6E6A6A6A6867686565656666666464 - 646161615F5F5F5C5C5C5A5A5A5757575454555353535050504E4E4D4B4B4B4A - 4A4A48474845454544434342424240403F3E3F3F3C3C3C3B3A3A3A3A3A383838 - 3938383838373636363635353332323030302F2F2F2F2F2F2D2E2E2E2D2E2525 - 252424242323232323232423233535343E3E3E4242424848484D4D4D2F2E2F20 - 1F201F201F1E1E1E1E1E1E1E1E1E1D1D1E1E1D1E1D1D1D1C1D1D1D1C1D1D1D1C - 1D1C1C1C1C1C1D1C1C1C1C1C1B1C1C1C1B1C1C1C1C1B1B1C1B1B1B1A1B1B1A1A - 1B1B1A1A1A1A1B1A1A1A1A1A1A1A1A191A19191A191A19191919191919191919 - 19191918181918191C1B1C232423252525262626272727242524181819181818 - 1818171718171718181C1C1C1C1C1C1C1C1C1B1C1B1C1C1B1A1B1B19191A1A19 - 191919191919191A1A19191A1A1A191919191919191919191918181919181918 - 1818181817181817181717171617171716171617161616161616161616151616 - 1515161615161717171D1C1B1D1D1C1D1D1C1C1C1C1717161515151515151514 - 1414141515141415141314131314121314131313121212121212121212121212 - 12111112111211110F0F0F0E0E0F0E0E0F0E0E0F0E0E0F0E0D0E0F0E0F0F0E10 - 1010101211121819182323232827282A2A2A2E2E2F3131313334343737373839 - 393B3C3B3232331616160A0A0A0A0A0A0A0A0A0A09090A0A0A090A0909090909 - 0909080908090809080808090808080909080808080808080708080708070807 - 1412140707073030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303032323235 - 35353737373A3A3A3C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F313131393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383837383837383737383737383737383737383737383737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373737373738383838383738383738373739383839383839383839 - 38383939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3E3E3E3E3E3E - 3F3F3F4040404040404242424242424444444545454646454747464948484A49 - 494C4B4B4D4D4D4E4D4D5150505251515453535554545757575959595B5B5B5D - 5D5D5F5F5F6262626464646666666969696C6C6C6E6E6E717171737373757575 - 7878787C7C7C7F7F7F8181818383838787878A8A8A8D8D8D8F8F8F9292929595 - 959999989B9B9A9D9D9DA0A0A0A2A2A2A4A4A4A7A7A7AAAAAAACACACAFAFAFB3 - B3B3B0B0B0A2A2A29595959393939191918E8E8E8B8B8B888888848484818181 - 7D7D7D7A7A7A7777777373737070706D6D6D6A6A6A6767676464646161616060 - 605D5D5D5C5C5C5A5A5A5858585656565656565454545252525151515050504F - 4F4F4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4949494A4A4A494949 - 4949494949494949494949494949494949494A4A4A4A4A4A4B4B4B4B4B4B4B4B - 4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4D - 4D4D4D4D4D4D4D4D4C4C4C4A4A4A484848474747464646444444424242434343 - 6E6E6EA5A5A5B3B3B3ACACADA9A9A9A6A6A7A3A3A3A0A1A19D9D9E99999A9A99 - 999999999797979493939190908E8D8D8B8A8A8787878484848080807D7E7D7C - 7C7B7878787475747170706A6A6A6868686565656363636464646261615F5F5F - 5C5C5C5A5A5A5757575656565353535050514E4E4E4C4C4C4A4A4A4948474645 - 454545444343424140403F3F3F3D3D3D3B3C3C3A3A3A39393A37373738373736 - 37373737363434343232313030302F2F2F2E2E2D2D2E2E2D2C2D242424232323 - 2323232323232424243535353E3E3E4141414747474D4D4D2C2B2C201F1F1F1E - 1E1E1E1E1E1D1E1E1E1E1E1E1D1D1E1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C - 1C1C1D1C1C1D1C1C1C1C1C1B1C1C1C1B1B1B1C1B1B1B1B1B1B1B1A1B1B1A1B1B - 1A1B1A1A1B1A1A1A1A1A1A1A1A191A1A19191A191A19191A1919191919191919 - 181919191C1C1B24242325252525262626272624242518181819181818181818 - 18181718181D1D1D1C1C1C1C1C1C1C1C1B1B1C1B1B1A1B1919191A191A191919 - 1919191A19191A1919191A1A1A19191919191919191919191818191818181818 - 1818181718181718171718161617171617161616161616161616151615151615 - 15151718171D1C1B1D1B1C1C1C1C1C1D1C171616151515151515151515141514 - 1514141414141513131412131313131313131313121313121312121212121212 - 111111110E0E100E0E100E0E0F0E0E0F0E0E0F0F0F0F0F0E0F11101117171622 - 23222828282A2A2A2D2E2D3131313434353738373939393B3B3A3636361D1E1D - 0A0A0A0B0A0A0A0A0A0A0A0A0A0A0A0A0909090A0A0909090909090909090909 - 0909090909090809080808080908090908080808080708080808080814141408 - 0708303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303333333535353838 - 383A3A3A3C3C3C3232322F2F2F2F2F2F2F2F2F2F2F2F33333339393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383738383738383738373738373738373738373738373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737373838383838373838373838373837373938383938383938383939 - 393939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F - 3F3F4040404141414242424242424444444545444646454747464A49494A4949 - 4C4B4B4D4D4D4F4E4E5150505352525454545655555757575959595B5B5B5E5E - 5E5F5F5F6262626464646666666969696B6B6B6E6E6E71717173737375757578 - 78787B7B7B7E7E7E8080808383838686868989898B8B8B8E8E8E929292949493 - 9696969797979A9A9A9D9D9D9F9F9FA2A2A2A5A5A5A8A8A8ABABABAEAEAEB1B1 - B1B3B3B3AFAFAFA3A3A39494949292929090908D8D8D8B8B8B88888885858581 - 81817F7F7F7B7B7B7878787575757272726F6F6F6D6D6D696969676767646464 - 6262626060605E5E5E5C5C5C5B5B5B5A5A5A5858585757575656565555555353 - 535353535252525151515050505050505050504F4F4F4F4F4F5050504E4E4E4E - 4E4E4E4E4E4E4E4E4F4F4F4F4F4F4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F - 4F4F4F5050505151515050505151515151515050505151515151515050504F4F - 4F4E4E4E4C4C4C4A4A4A4848484646464646464545456A6A6A9D9D9DB4B3B4AD - ADAEABABABA8A7A8A5A5A5A1A1A29E9E9E9C9B9C999999959696969595969695 - 929292908F8F8D8C8C8989898787868383838080817D7D7D7B7B7B7878787575 - 757172726E6E6D6868676565656262626060606161615F5F5F5D5C5D5A5A5A58 - 58585656565353535150504F4F4F4D4D4E4B4B4B494949474746454544434342 - 4140404040403E3D3D3C3C3C3B3B3B3A3A3A3837373737373738373737373536 - 363434333332312F2F2F302F2F2E2E2E2D2D2D2C2C2C25242423242423232323 - 23232423243534353E3E3E4141414646464B4A4B2B2B2B2020201F1F1E1E1E1F - 1E1E1E1E1E1E1E1E1E1E1D1E1D1D1D1D1D1D1D1D1D1D1C1D1C1D1D1C1C1D1D1D - 1D1D1C1C1C1C1C1C1C1C1C1C1C1B1B1C1C1B1B1B1B1B1B1B1B1A1B1B1B1A1B1B - 1A1B1A1A1A1A1B1A1A1A1A1A1A19191A1A1919191919191A1A19191919191919 - 1B1B1B2323242425242626262626272524251919181918191818181818181817 - 181D1D1D1D1D1C1C1D1C1D1C1C1C1C1B1B1B1B1A1A1A191A191919191A19191A - 1A1A1A1A19191A19191A19191919191919191918181919181919181918191818 - 1818171817171717171717161717161716161616161616161616151515151818 - 181C1C1D1D1C1C1D1C1C1D1C1C18161715161515151614151515141515141414 - 1414141413141314141313141313131313121212131312121213121212101011 - 0E0F0F0E0E0F0F0E0F0E0E0F0F0F100F0F0F141314201F202726272A2A2A2D2D - 2D303030343434383737393A393B3B3B3939392424240B0B0B0B0B0B0A0A0A0B - 0B0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A090909090A09090909090909080909 - 0909090808080808080808080809080808080808080707081212140807073030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303434343636363838383A3A3A - 3C3C3C3030302F2F2F2F2F2F2F2F2F2F2F2F3434343939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373837373837373837373837373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3737373737383838383837383837383737393838393838393838393838393939 - 3939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F - 3F4040404141414242424343434545454646454747464847474A49494A49494C - 4B4B4E4D4D4F4E4E5150505352525454545555555757575959595B5B5B5E5E5E - 5F5F5F6262626464646666666969696B6B6B6D6D6D7171717373737575757878 - 787A7A7A7D7D7D8080808383838686868888888A8A8A8D8D8D8D8D8D90909093 - 93939696969898989B9B9B9E9E9EA1A1A1A4A4A4A7A7A7AAAAAAADADADB4B4B4 - B9B9B9BCBCBCB6B6B6A2A2A29494949191918F8F8F8D8D8D8B8B8B8888888585 - 858383837F7F7F7D7D7D7A7A7A7777777474747272726F6F6F6D6D6D6B6B6B68 - 68686666666464646262626060605E5E5E5D5D5D5B5B5B5B5B5B5A5A5A595959 - 5757575656565555555555555555555555555454545454545353535353535353 - 5353535353535353535353535353535353535353535354545455555554545455 - 55555555555555555555555454545353535353535353535151514F4F4F4E4E4E - 4C4C4C4A4A4A4848484747476C6C6C9E9E9EB4B4B4AEAEAFABABABA8A8A8A6A6 - A6A3A3A3A0A0A09D9E9E9A9A9A9797989494959494949494949292918F8E8E8C - 8B8B8988888686868383838080807D7D7C7B7A7A777777747474727272706F70 - 6C6C6C6565646261616060605D5D5D5E5F5F5E5C5D5B5A5B5959585656565353 - 535151514F4F4F4D4E4D4C4B4C4949494747474646464444434241414040403F - 3E3F3E3E3D3C3B3B3B3B3B393939383838373636373737363636353535333434 - 3132312F2F2F2E2E2F2E2E2E2D2D2D2C2C2C2324232323232424232323232424 - 243233323D3D3D4141414545454A4A4A3131311F1F1F1E1F1E1E1F1F1F1E1E1E - 1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C - 1C1C1C1C1C1C1B1C1C1C1C1C1C1B1C1B1C1C1C1B1B1B1B1B1B1B1B1B1B1A1B1A - 1B1A1A1A1A1A1A1A1A1A1A1A1A1A19191A1919191A191919191819191C1D1D24 - 23242524242726262727272323231918191818191819181818181818181D1D1D - 1C1D1C1C1C1C1C1D1C1C1C1B1A1B1A1A1A191A1A1A191A1A1919191A1A1A1A1A - 1A1A191A1A19191A1A191A1919191A1919181918191919191819191919181818 - 18171817171817171816171717161716161616161616161616161818171C1C1C - 1C1C1C1D1C1C1C1C1C1716171516151615151516151515151515151514141414 - 131413141413141413131312131313131213131212121212121011110F0F0F0F - 0E0F0E0F100E0E101111111B1B1C2424242727272B2A2B2F2E2E323232373736 - 3839393B3C3C3C3C3D2827270F0E0E0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0B - 0B0B0A0A0A0A0A0A090A090A0A0A0A0A09090A090A0909090909090909090909 - 0909080908080909080908090808080808080808141414070808303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303434343636363838383A3A3A3D3D3D2E - 2E2E2F2F2F2F2F2F2F2F2F2F2F2F373636393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3837383837383837383737383737383737383737383737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3738383838383738383738373738373739383839383839383838383839393939 - 39393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040 - 4040404242424242424343434545444646454746464847474A49494B4A4A4C4B - 4B4E4D4D4F4E4E5150505352525454545555555757575959595B5B5B5E5E5E5F - 5F5F6262626464646666666969696B6B6B6D6D6D707070727272757575787878 - 7A7A7A7C7C7C7F7F7F8282828484848787878888888989898C8C8C8E8E8E9191 - 919494949797979A9A9A9D9D9DA0A0A0A4A4A4ABABABB1B1B1B4B4B4B6B6B6BA - BABABDBDBDBFBFBFB7B7B7A5A5A59595959191918E8E8E8C8C8C8A8A8A888888 - 8585858383838181817F7F7F7C7C7C7A7A7A7777777474747373737070706F6F - 6F6C6C6C6A6A6A6969696666666565656363636262626060606060605F5F5F5E - 5E5E5C5C5C5C5C5C5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959595959 - 5959595959595959595959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5959595858 - 585858585858585757575656565454545353535151514F4F4F4C4C4C4A4A4A50 - 50507373739F9F9EB5B4B5B0B0B0ABABABA8A8A8A6A6A6A3A3A3A1A1A19E9E9E - 9C9C9C9998999696969595959494949494949090908E8E8D8B8B8B8887888685 - 86828282807F7F7C7C7C797A797777777474757372736F6F6F6C6C6C68686862 - 6261605F5F5D5C5C5B5B5B5C5C5C5B5B5B5958595757565453535151514F4F4F - 4E4E4E4C4C4C4A494A48484746464644444443434341414040403E3E3E3D3C3B - 3B3C3B3B3A39393838383737373635363737373736353434343333333131312F - 2F2E2E2E2E2D2D2E2C2C2C2B2A2B2525252423242323242324232324232F2F2F - 3A3A3A3F3F3F4444444949493636361F1F1F1F1F1F1F1F1E1E1E1F1E1E1E1E1E - 1E1D1E1E1E1E1E1D1D1E1D1D1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1D1C - 1C1C1C1C1C1C1B1C1B1C1B1B1C1B1B1C1C1B1B1B1B1B1B1B1B1B1A1B1B1A1A1B - 1A1A1A1A1A1A1A1A1A1A1A191A1A1A1A191A1A191A1919191E1E1D2423242525 - 2427262627272820202018191919191919181818181919191A1D1D1D1D1C1C1D - 1C1D1D1D1C1D1C1B1B1B1B1A1A1A1A1A191A191919191A1A1A1A1A1A1A1A1A1A - 1A1919191A19191A1A1919191919191918191919191919181818181818181818 - 171818171817171816161716161716161616161616161818181C1D1C1C1C1C1D - 1C1C1D1C1C181717161616161516161515151515151515141414151414151413 - 1413131413131312131313121213121313121212121111120F0F100F0F100F0E - 100F0F0F1514152323232626262A2A2A2F30303434343838393C3C3C3E3E3E2F - 2E2F1212120C0C0B0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0B0A0A0A0A0A0B0B0A - 0A0A0A0A0A0A0A0A0A09090A0A090A090A0A0A09090909090909090909090808 - 0808080808080808080808090808080814141408080830303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303131313434343636363939393B3B3B3939392E2E2E2F2F - 2F2F2F2F2F2F2F2F2F2F37373739393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 3738383738373738373738373738373738373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373737373737 - 3838373838373838373837373938383938383938383938383939393939393939 - 393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F40404040 - 40404242424242424343424545444646454746464847474A49494B4A4A4C4B4B - 4E4D4D504F4F5150505352525454545555555858585959595B5B5B5E5E5E5F5F - 5F6262626464646666666868686A6A6A6D6D6D6F6F6F72727275757577777779 - 79797C7C7C7F7F7F8181818383838484848585858888888A8A8A8E8E8E909090 - 9393939797979A9A9AA2A2A2A8A8A8ABABABAEAEAEB1B1B1B4B4B4B8B8B8BABA - BABCBCBCBEBEBEBCBCBCB3B3B3A6A6A69898989090908E8E8E8C8C8C8A8A8A88 - 88888686868484848282827F7F7F7D7D7D7B7B7B797979787878767676747474 - 7272727070706F6F6F6D6D6D6C6C6C6A6A6A6969696868686767676565656565 - 656464646363636363636363636262626161616161616161616060606060605F - 5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5D5D5D5C5C5C5B5B5B595959 - 5959595858585656565454545252525050504E4E4E606060858585AAAAAAB6B6 - B6B0B0B0ABABABA9A9A8A6A6A6A3A4A3A1A1A19E9E9E9C9C9C999A9A97979795 - 95969696969696959293939090908D8D8C8A8A8A8786868583848281817F7F7F - 7D7C7D7A7A7A7777777474747171726F6F6F6B6B6B696A696666665F5F5F5C5C - 5C5B5B5A5857585959585A5A59575757545354535353504F4F4E4F4E4C4C4C4A - 4A4A4849494746474444454343434142414040403F3E3E3C3C3C3C3C3C3A3A39 - 3938383837373636363636363635353534343634343333333232322F2F2F2E2E - 2E2E2E2D2D2C2C2B2B2B2626262424242423242223232424232D2D2D3939393E - 3E3E4242424646463B3B3B20201F1F1F1F1F1F1F1E1F1E1E1E1E1E1E1F1E1E1E - 1E1E1E1E1E1D1E1E1E1D1E1D1E1D1E1D1D1D1D1D1C1D1D1D1D1C1D1C1C1D1C1C - 1D1C1C1C1C1C1C1B1C1C1C1B1C1B1B1B1B1B1C1B1B1B1B1B1B1A1B1B1B1A1B1A - 1A1A1A1A1A1A1A1A1A1A1A1A1A1A191A19191919202020242424252525272726 - 2828281E1E1F1919191919191918191919191A19191E1D1D1D1D1D1D1D1D1D1D - 1C1C1C1C1C1C1B1B1A1A1A1A1A191A1A1A1A1A1A1A1A1B1B1A1A1A1A1A1A1A1A - 1A1A191A1A19191919191A191919191919181919181918181819191818181817 - 1717171817171716161716161716161616161817181D1D1D1C1C1D1C1C1C1C1C - 1C18171616151616161615151515151515151515151515141415131314131314 - 14141414131313131213131313121313121211110F10110F0F100F0F0F0F1011 - 151515252525292A292E2E2E3434343A3A3A3D3D3E333333191A190C0C0C0C0C - 0C0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0B0B0B0B0B0A0A0A - 0A0A0A0A0A090A0A09090A0A090A0A090A090909090909090909090909080809 - 0909090808080909080808091414140808083030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303232323535353737373939393B3B3B3838382E2E2E2F2F2F2F2F2F - 2F2F2F2F2F2F3939393939393939393939393939393939393939393939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3837373837373837373837373837373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373738383838 - 3837383837383737383737393838393838393838383838393939393939393939 - 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F4040404141 - 414242424242424444434545444645454746464948484A49494B4A4A4D4C4C4E - 4D4D504F4F5150505252525454545555555757575959595B5B5B5D5D5D5F5F5F - 6262626363636666666868686A6A6A6D6D6D6F6F6F7171717474747676767878 - 787B7B7B7D7D7D8080808080808181818484848787878989898C8C8C92929298 - 98989E9E9EA2A2A2A5A5A5A9A9A9ADADADB0B0B0B3B3B3B6B6B6B8B8B8B8B8B8 - B1B1B1AEAEAEB1B1B1B3B3B3B4B4B4ACACACA1A1A19494948E8E8E8C8C8C8A8A - 8A8888888686868484848383838181817E7E7E7D7D7D7B7B7B79797978787876 - 76767474747373737272727070706F6F6F6E6E6E6C6C6C6C6C6C6B6B6B6A6A6A - 6969696868686868686767676666666565656565656565656464646464646363 - 636262626262626161616060605F5F5F5F5F5F5D5D5D5C5C5C5B5B5B59595958 - 58585656565454545C5C5C787878999999B5B5B5B6B6B6B1B1B1ABABABA9A9A9 - A6A6A6A3A4A4A2A2A29F9F9F9D9D9D9A9A9B9797979595959696959596959393 - 939190918F8E8F8C8C8C8989898686868484838181817F7E7E7B7B7B79787876 - 76767373737171716F6F6F6C6B6C6A69696767676464645C5C5C5A5A59585857 - 56555556565657575755555452535151504F4F4E4E4D4C4D4A4A4A4949494747 - 474646464444444241414141413F3F3F3E3E3E3C3C3C3C3C3B39393838383837 - 37373736363535353534343635353434333433333231312F2F2F2E2E2E2D2D2C - 2C2B2B2C2B2B2727282424242423242223232424232829293838383D3D3D4141 - 414545454444441F1F1F1F201F1F1F1F1E1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E - 1E1E1E1E1D1D1E1E1D1E1D1E1D1E1D1D1D1D1D1D1C1D1C1C1C1D1C1C1D1D1C1C - 1C1C1C1C1C1B1C1B1C1B1B1C1B1C1B1B1B1B1B1B1B1B1A1B1B1A1B1A1A1A1A1A - 1A1A1A1A1A1A1A191A1A1A1A1A191A1A2323222424242626262627262828291B - 1C1B1919191919191919191819191B1A1B1D1D1E1D1D1D1D1D1D1D1D1C1C1D1C - 1C1C1B1B1A1B1A1A1B1A1A1A1B1B1B1B1A1A1A1B1A1A1A1B1A1A1A1A1A1A1A1A - 1A1A191A191919191A1919191918181819181919191819191818181818181718 - 18171717171816161716161716161918181D1D1D1D1D1D1C1C1D1D1C1D181717 - 1616161616161516151516161615151515151514141514141514131413141413 - 13131313131313131313121313111112100F100F0F100F0F1010101118181827 - 27282B2C2C3132313838383B3B3B2021210D0D0C0C0C0C0D0C0C0C0C0C0C0B0B - 0C0B0B0C0C0B0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0B0B0A0B0B0B0B0A0A0A0A - 0A0B0A0A0A0A0A090A0A0A090A09090909090909090909090909090809090909 - 0909090809090808141414080808303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303232323535353737373939393C3C3C3635362F2F2F2F2F2F2F2F2F2F2F2F31 - 3131393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383938383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383738383738383738 - 3737383737383737383737383737373737373737373737373737373737373737 - 3737373737373737373737373737373737373737373737373737373838373838 - 373838373837373837373938383938383838383838383939393939393939393A - 3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F404040414141 - 4242424242424444434544444645454746464948484A49494B4A4A4D4C4C4E4D - 4D504F4F5150505252525454545555555757575959595B5B5B5D5D5D5F5F5F61 - 61616363636565656767676A6A6A6C6C6C6E6E6E717171737373757575787878 - 7A7A7A7C7C7C7C7C7C7D7D7D8080808282828585858C8C8D9595959999999C9C - 9CA0A0A0A4A4A4A8A8A8ABABABAEAEAEB1B1B1B2B2B2AAAAAAA5A5A5A7A7A7A9 - A9A9ACACACADADADB0B0B0B1B1B1B3B3B3B3B3B3ABABABA0A0A09292928B8B8B - 8A8A8A8888888686868585858383838181817F7F7F7E7E7E7C7C7C7B7B7B7979 - 797777777676767474747272727272727070706F6F6F6E6E6E6D6D6D6C6C6C6B - 6B6B6A6A6A6A6A6A696969686868686868676767676767666666656565646464 - 6363636363636262626060605F5F5F5F5F5F5D5D5D5B5B5B5959596262627C7C - 7C979797B1B1B1B6B7B7B5B5B5B1B1B1ABAAABA9A9A9A6A7A6A4A5A4A1A1A19F - 9F9E9D9D9D9B9B9B9898989595959696969796969494949192928F8F8F8D8D8D - 8B8A8B8787878585858282827F807F7D7D7D7A7A7A7877787675767373737070 - 706E6E6E6B6B6B6968696667666363646161615A5A5A57575756565653525354 - 54545555555353525151504F4F4F4D4C4D4B4B4B4A494A474847464646444444 - 414242414141403F3F3F3E3E3C3C3C3C3C3B3939393A39393837373837363636 - 353534343434343534353434333433323232322F2E2E2D2D2D2C2B2B2C2B2B2C - 2B2B2928282424242323232323222323232323233737383A3A3A3F3F3F414141 - 454545262727201F201F1F1F1F1F1F1F1E1F1E1F1F1E1F1E1E1E1F1E1E1E1E1E - 1E1D1E1D1D1E1E1D1E1D1E1D1E1D1D1D1D1D1D1D1D1D1C1D1D1D1C1D1C1C1C1C - 1C1C1C1C1C1B1C1B1C1C1B1B1C1B1C1B1C1B1B1B1B1A1B1B1A1B1A1A1A1A1A1A - 1A1A1A1A1A1A191A1A1C1C1C2323242425242626262827272728281919191A19 - 191919191919191919191C1B1C1E1D1D1D1E1D1D1D1D1D1D1D1D1C1C1C1C1B1B - 1A1A1A1A1B1A1A1A1B1B1B1B1B1B1B1B1A1A1A1B1A1B1A1A1B1A1A1A1A1A191A - 1A19191919191A19191919191919181918181818191918181918181818171818 - 171817171716171717161A1A191D1C1D1D1D1C1C1C1D1C1C1C17161616161716 - 1616161615161615151515161515151414151414151413141313141313141313 - 1313131313131313131112121010110F0F100F0F1010101117181829292A2E2E - 2F3434353B3B3B3333330D0C0D0C0C0D0C0C0C0C0C0D0C0D0C0C0C0C0C0C0C0C - 0C0C0C0B0C0C0C0B0C0B0B0B0B0B0A0B0B0B0B0B0B0A0B0A0B0B0A0A0A0A0A0A - 0A0A0A090A0A0A0A0A0A0A0A090A090A09090A09090909090809090909080808 - 0808080916141608090830303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030333333 - 3535353737373A3A3A3C3C3C3333332F2F2F2F2F2F2F2F2F2F2F2F3232323939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383838373838373838373837373837 - 3738373738373738373737373737373737373737373737373737373736353532 - 3232343434363636373737373737373737373737373737383837383837383837 - 3837373837373938383938383938383838383939393939393939393A3A3A3A3A - 3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F40404041414142 - 42424242424444434544444645454746464948484A49494B4A4A4D4C4C4E4D4D - 504F4F5050505252525454545555555757575959595B5B5B5D5D5D5F5F5F6161 - 616262626565656767676A6A6A6C6C6C6D6D6D70707072727275757577777779 - 79797878787A7A7A7D7D7D7F7F7F8282828A8A8A9292929696969B9B9B9F9F9F - A3A3A3A7A7A7AAAAAAAAAAAAA4A4A49D9D9D9E9E9EA0A0A0A2A2A2A5A5A5A7A7 - A7A9A9A9AAAAAAACACACAEAEAEB0B0B0B1B1B1B4B4B4B7B7B7AFAFAFA3A3A397 - 97978C8C8C8888888686868585858484848282828181817F7F7F7D7D7D7C7C7C - 7979797878787676767575757474747272727171717171717070706E6E6E6E6E - 6E6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A69696969696968686867676765656564 - 64646363636161616060606464647474748A8A8A9F9F9FB3B3B3B6B6B6B5B5B5 - B4B4B4B0B0B0AAAAAAA7A7A7A7A7A6A4A5A4A1A1A2A09F9F9C9C9C9B9B9B9898 - 989695969596969797979595959393939090908E8E8E8B8B8B89898986878784 - 84848182817F7F7E7D7D7C7A7A7A787777767575727272706F6F6D6D6D6B6B6B - 6969696667676364646162625F5F5F5858575555555353535151515152515353 - 535151514F4F4F4E4E4D4C4C4B4B4A4A48474846464644454442424241414140 - 3F403E3F3E3C3C3C3D3C3C3A3B3A3A3A3A383837373736363635353534343333 - 3333333434343434343334333231312E2E2D2D2D2D2C2C2C2B2C2C2B2C2B2A2A - 2A2424242323232323232221222323233030303A393A3D3D3D40404043434336 - 36361F20201F1F201F1F1F1F1F1E1E1F1F1E1F1E1F1F1F1E1F1E1E1E1E1E1E1E - 1E1E1E1D1D1E1E1D1E1E1D1E1D1D1D1C1D1D1D1C1C1C1D1C1C1D1C1C1C1C1C1C - 1C1C1C1C1C1B1C1B1B1B1C1B1C1B1B1C1B1B1B1B1A1B1B1B1A1B1B1A1A1B1A1A - 1B1A1A1A1A1F1F1F2424232526252827282829282525251A19191A191A191919 - 1919191919191D1D1D1E1E1E1D1E1D1D1D1E1D1D1D1D1C1C1C1B1B1C1A1B1B1A - 1B1B1A1A1C1B1B1A1B1B1B1B1B1B1B1B1B1B1A1A1A1B1A1A1A1A1A1A1A1A191A - 1A1A191919191919191819191819191919181818181818181818181817181817 - 1817171717171A1A191E1E1D1D1D1D1C1D1D1D1D1C1716161616161616161616 - 1616151616151515151515151515141415131415141314141414141413131313 - 1313121213101111101010100F100F0F101010121B1C1C2B2A2B323131363636 - 3E3F3E2E2E2E0D0D0D0D0D0D0D0C0D0D0C0D0D0C0C0C0D0C0C0C0C0C0B0C0B0C - 0C0C0C0C0B0B0C0B0B0B0B0B0B0A0B0B0A0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A - 0A0A0A0A0A0A0A0A0A0A0909090A090909090909090909080909090908080809 - 1416140808083030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303034343436363638 - 38383A3A3A3C3C3C3131312F2F2F2F2F2F2F2F2F2F2F2F343434393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383837383837383737383737383737 - 3837373837373737373737373737373737373737373737363030302F2F2F2F2F - 2F2F2F2F2F2F2F31313133333334343435353537373738383738383738373738 - 37373837373938383938383838383838383939393939393939393A3A3A3B3B3B - 3B3B3B3B3B3B3B3B3B3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F4040404141414242 - 424343424443434544444645454746464948484A49494C4B4B4D4C4C4E4D4D4F - 4F4F5050505252525454545555555757575959595B5B5B5C5C5C5F5F5F606060 - 6262626565656666666969696B6B6B6D6D6D6F6F6F7171717474747575757474 - 747676767979797B7B7B7E7E7E8A8A8A9090909494949999999E9E9EA2A2A2A3 - A3A39C9C9C9494949595959797979999999B9B9B9D9D9DA0A0A0A1A1A1A4A4A4 - A5A5A5A7A7A7A9A9A9ABABABADADADAEAEAEB0B0B0B2B2B2B6B6B6B9B9B9B6B6 - B6ADADADA4A4A49A999A8F8F8F8787878484848181818080807F7F7F7D7D7D7C - 7C7C7A7A7A7878787777777676767474747373737373737171717070706F6F6F - 6F6F6F6E6E6E6D6D6D6C6C6C6B6B6B6969696969696868686B6B6B7474748383 - 83909090A1A1A1B0B0B0B7B7B7B6B6B6B5B5B5B4B4B4B2B2B2AFAFAFAAAAAAA6 - A6A6A5A5A5A3A3A3A2A2A19F9E9F9C9C9D9A9A9A989898969696959595979796 - 9695959393939190918F8F8F8C8C8C8A8A8A8888888585858383838080807E7E - 7D7C7B7B7979787676767473737272726F6F6F6D6C6D6B6B6A68696866666663 - 63636262625F5F5F5C5D5C5757575252525151514F4F4E4E4E4E52515250504F - 4E4E4E4B4B4A4B4B4A4949484646464645454342424141424040403F3F3F3D3D - 3D3C3C3C3B3C3B3B3A3A39383938383836363636363434343434343333323234 - 34343334333433343233322F2E2F2D2D2C2C2C2C2B2C2C2A2B2B2B2B2B232324 - 2323232222222121222323232B2B2C383939393A393D3D3D4040404040402221 - 22201F201F1F201F1F1F1F1F1F1E1E1F1F1E1F1E1F1E1E1E1E1E1E1F1E1E1E1D - 1E1E1E1E1E1D1D1E1D1D1E1D1D1D1D1C1D1C1D1D1C1C1D1D1C1C1C1C1C1C1C1C - 1C1C1C1C1B1C1B1C1B1B1B1B1C1C1B1B1B1B1B1B1B1B1A1A1B1A1B1B1B1A1B1B - 1B2424242424242626262728272929291F1F1F1A191A1A191A19191A19191919 - 19191E1E1E1E1E1E1D1E1E1D1E1D1D1E1D1C1C1C1C1C1C1C1B1B1C1A1B1B1B1B - 1B1B1B1C1B1C1B1B1B1A1B1B1B1B1A1A1B1B1A1B1A1A1A1A1A1A1A1A19191919 - 1A1919191A191919191919191918191919181818181818181818181717181718 - 17171C1C1B1D1D1D1D1D1D1D1D1D1C1B1C171717161617161616161716151616 - 1515151515151515151514141514141514141414141414141314141313131313 - 13111111101011100F110F10111011111D1D1D2C2C2B3231313938393F3F3F28 - 28290D0D0D0D0D0D0D0D0D0C0D0C0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C - 0C0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0B0A0A0A0A0A - 0A0A0A0A090A0A09090A090A0A090909090A0909090908090909090916141409 - 0808303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303434343636363838383A3A - 3A3D3D3D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F35353539393939393939393939 - 3939393939393939393939393939393938393938393938393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838383738383738383738373738373738373738 - 37373837373737373737373737373737373030302F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131313232323434343434343635 - 353635353838383838383838383838383939393939393939393A3A3A3B3B3B3B - 3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F404040404040424241424242 - 4342424443434544444645454746464948484A49494B4A4A4D4C4C4E4D4D4F4F - 4F5050505252525454545454545757575858585A5A5A5C5C5C5E5E5E60606062 - 62626464646666666868686A6A6A6C6C6C6E6E6E717171737373717171737373 - 7575757878787B7B7B8787878E8E8E9393939797979C9C9C9595958C8C8C8C8C - 8C8F8F8F9090909393939494949696969999999B9B9B9D9D9D9E9E9EA1A1A1A2 - A2A2A4A4A4A5A5A5A7A7A7A9A9A9AAAAAAACACACADADADAFAFAFB4B4B4B7B7B7 - B8B8B8B8B8B8B9B9B9B6B6B6AFAFAEA7A7A7A0A0A09A9A9A9393938C8C8C8686 - 868181817C7C7C7B7B7B7A7A7A7878787777777676767676767474747979797D - 7D7D828282888888919191989898A0A0A0A8A8A8AEADAEB5B5B5B7B7B7B6B6B6 - B4B5B4B4B4B4B2B2B2B1B1B1B0B0B0AEADAEA9A9A9A5A4A4A4A4A3A2A2A2A09F - A09E9D9E9C9C9B9A9A9A9899989595969494959696969695959493939292928F - 8F8F8C8C8C8A8A8A8888888585868484848181817F7F7F7D7D7D7A7A7B797878 - 7676757474737271716F6E6F6D6C6C6A6A6A6767676565656363636161615F5F - 5F5D5D5D5B5A5B5454545151504F4E4E4D4D4D4C4C4C50504F4E4E4F4B4B4B4B - 4B4B4949484746464645444343424341424140404040403D3D3D3D3D3D3C3C3C - 3A3B3A3939393938383838393636363435343535343433333432323533333434 - 343333333232312E2E2E2D2C2D2D2C2D2B2B2B2B2B2B2B2B2A27272622222222 - 22222222222323232525253534343737373B3B3B3E3E3E40404032323220201F - 1F1F2020201F201F1F1F1F1F1F1E1F1E1E1F1E1E1E1E1E1F1E1E1E1E1E1E1E1E - 1E1D1D1D1E1E1D1D1D1E1D1D1D1D1D1D1D1D1D1D1C1C1C1D1D1C1C1C1C1C1C1C - 1C1C1C1B1B1B1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1A1B1B1B1A1F1F1F242425 - 2525252627272828282828281A191A1A191A1A19191A191A1A19191C1B1C1E1E - 1E1E1E1E1D1D1E1E1E1D1E1E1D1C1D1C1C1C1C1C1C1C1B1B1B1B1C1B1C1B1B1B - 1B1B1B1B1C1B1B1B1A1B1B1B1B1B1B1A1B1A1A1A1A1A1A1A1A191A1A191A1919 - 19191A1919191919191919191819191918181819181818181818171818171B1B - 1B1D1D1C1D1D1C1D1D1D1B1B1B17161616161716171616161616161616161616 - 1515151515161414151414151414151414141314141413131313131313121211 - 0F1010100F11100F111111121E1E1E2C2C2C3232323938393F3F3F2827280D0D - 0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0C - 0C0C0B0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0B0B0A0A0A0A0A0A0A0A0A - 0A0A0A0A0A0A0A0A090A090909090A0909090909090909081616140809093030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303131313434343636363939393B3B3B3A3A3A - 2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3737363939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383838383838373838373837373837373837373837373837 - 373737373737373737373131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030 - 3131313131313131313232323434343434343434343939393A3A3A3B3B3B3B3B - 3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F40404040404042424142424243 - 42424544444544444645454746464948484A49494B4A4A4D4C4C4D4D4D4E4E4E - 5050505252525353535454545757575858585A5A5A5B5B5B5E5E5E5F5F5F6262 - 626363636565656767676A6A6A6B6B6B6D6D6D6E6E6E6D6D6D70707071717174 - 74747777778585858C8C8C9090909696969A9A9A8888888585858888888A8A8A - 8C8C8C8E8E8E9090909292929494949696969898989999999B9B9B9D9D9D9F9F - 9FA1A1A1A2A2A2A4A4A4A5A5A5A7A7A7A8A8A8A9A9A9ABABABADADADB1B1B1B4 - B4B4B5B5B5B6B6B6B6B6B6B7B7B7B8B8B8B8B8B8BAB9BAB9B9BABAB9B9B7B7B7 - B5B5B5B5B5B5B5B5B5B4B5B5B5B5B5B5B5B5B6B6B6BBBBBBBDBDBEBFBFBEBFBF - BFC0C0C0C0C0C0BFBFBFB7B8B8B0B0B0B0B0B0B1B1B1B1B1B2B1B1B1AFAFAFAF - AEAEADADADACACACA8A7A8A3A2A3A2A2A2A0A0A09E9E9E9D9D9D9B9B9B999999 - 969797959594949494959495959695939393929191908F8F8D8D8D8A8A8A8888 - 888786878484848383838080807E7E7E7C7C7C79797977777675757473727270 - 706F6E6E6E6C6B6B6A69696767676665646362636061605F5F5F5C5C5C5B5A5B - 5757585353534E4E4F4D4D4D4A4A4A4848484F4F4E4B4C4B4A4A4B49494A4748 - 47474645444443424341424140413F3F3E3D3D3D3E3D3C3C3C3B3B3B3A3A3A39 - 3939393938363637353535353535343333333433323231343333333333323232 - 313131312F302D2D2C2D2C2D2B2B2C2B2B2B2B2B2A2829292222222222222222 - 222222222323222C2C2D3737363838383B3B3B3D3D3D3E3E3E262625201F201F - 1F1F201F1F1F1F1F1F1F1E1E1F1F1E1E1F1F1F1E1E1E1E1E1E1E1E1E1E1D1E1E - 1E1E1E1D1E1E1D1D1E1D1D1D1D1D1D1D1D1C1C1C1C1D1C1D1C1C1C1C1C1C1B1C - 1C1B1C1C1B1C1C1B1C1C1C1B1B1A1B1B1B1A1A1C1C1D24242425252526262628 - 27282929292122211A191A1A191B1A191A1A191A19191A1C1C1C1F1E1E1E1E1E - 1E1E1E1D1E1E1E1D1E1C1C1D1C1C1C1C1D1C1C1C1C1C1B1C1C1B1C1C1B1C1B1B - 1B1B1B1B1B1B1B1B1B1B1A1B1B1A1A1B1A1B1A1A191A1A1A1A1A1919191A1A1A - 1A191919191919191919191919191819191818191818181818171D1D1D1D1D1D - 1E1E1C1D1D1C1B1A1A1617171716171617171716171616161616161616161515 - 151615151514151514141514141413141414141413131313131010111010110F - 10100F10101111132323232D2D2C3232323939393F3E3F1E1E1E0D0E0D0E0D0D - 0D0D0D0D0D0D0D0D0D0D0C0D0C0C0D0D0C0D0C0D0C0C0C0C0B0C0C0C0B0B0C0B - 0C0B0B0C0B0B0C0B0B0B0B0B0B0B0B0B0A0B0B0A0A0A0A0A0A0A0B0A0A0A0A0A - 0A0A0A0A090A0A0A090909090909090909080909161616080909303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303232323434343737373939393B3B3B3A3A3A2E2E2E2F - 2F2F2F2F2F2F2F2F2F2F2F393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838383838383837383837383737383737383737383737383737383737 - 3737373232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30303030303030303030303030303031 - 31313131313131313131313232323232323636363A3A3A3A3A3A3B3B3B3B3B3B - 3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F40404040403F4242414242424342 - 424544444544444645454746464948484A49494B4A4A4B4B4B4D4D4D4E4E4E50 - 50505151515353535454545656565858585959595B5B5B5D5D5D5F5F5F606060 - 6262626565656666666969696A6A6A6A6A6A6A6A6A6C6C6C6F6F6F7070707373 - 738484848888888E8E8E9494949999998080808282828484848585858888888A - 8A8A8C8C8C8D8D8D8F8F8F9191919494949494949696969999999A9A9A9C9C9C - 9D9D9D9F9F9FA0A0A0A2A2A2A3A3A3A5A5A5A5A5A5A7A7A7A8A8A8A9A9A9ADAD - ADB1B1B1B2B2B2B2B2B2B2B2B2B3B3B3B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B1 - B1B2B0B0B0B0B0B0B1B1B0B2B2B2B6B7B7B9B9B9BBBABABCBCBBBCBDBCBEBEBE - BDBDBDB4B4B4ABABABABABABAAAAAAAAABABABACABABABABAAAAAAA9A9A9A8A8 - A8A1A1A1A0A0A09D9E9E9D9D9D9B9B9B99999A98989897969694949492929294 - 9494949494939392919190908F8E8D8D8D8B8B8A898888878787858585838382 - 8080817E7E7F7C7C7C79797978787875757574747472727270706F6D6E6D6A6A - 6A69686867676765636463626260605F5D5E5D5B5B5B5A5A5A58585856565651 - 52524D4C4D4B4B4A4848494747474A4A4A4B4B4B4A4A49474747464747444444 - 4343424242414141403F3D3D3F3D3E3D3C3D3B3B3C3A3A3A3939393838393838 - 3736363536353534343434343433333232333231313233323332323231313130 - 31312D2E2D2C2C2B2C2C2C2B2B2B2B2B2B2A2A29242424232223232223222223 - 222222242424343434373737393A3A3B3B3C3C3C3C373737202020201F201F20 - 1F1F1F1F1F1F1F1F1F1F1F1E1F1E1F1E1E1E1E1F1E1F1E1E1E1E1E1E1E1E1D1E - 1D1E1E1D1E1D1D1D1D1D1D1D1D1D1C1C1D1C1C1D1C1C1C1C1C1C1C1C1C1C1C1C - 1C1C1C1C1C1C1B1B1C1B1B1B1C1C1C2122222525242626262727272929292929 - 291A1A1B1A1A1B1A191A1A191A1A191A191A191F1E1F1F1E1F1F1E1E1E1E1E1E - 1D1E1D1E1D1D1C1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1B1B - 1B1B1B1B1A1B1B1A1B1A1B1A1A1A1A1A1A1A1A1A1A1A1A19191A1A191A1A191A - 191919191919191919191919181918181819181818181D1D1D1E1C1D1D1C1C1D - 1E1C1A1A1A171717171717171717161716171616161616161616161515161515 - 1514151614141515141414141413141314141314131011111010111010111010 - 111111122323242C2C2C3232323737373C3C3C1A1A190D0E0D0D0E0D0D0D0D0D - 0D0D0D0D0D0C0D0C0C0D0D0C0D0C0C0C0C0D0C0C0B0B0C0C0C0B0B0C0C0B0C0C - 0B0C0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0B0A0A0A0A0A0A0A0A0B0A0A0A090A - 0A0A090A090A090A090909090A09090916161609080830303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303232323535353737373939393C3C3C3635362F2F2F2F2F2F2F2F - 2F2F2F2F30303039393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 383838383838373838373838373837373837373837373837373837373332332F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F3030303030303030303030303030303030303131 - 313131313131313131313232323232323938383A3A3A3B3B3B3B3B3B3B3B3B3B - 3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F40403F40403F424241424242434242 - 4544444544444645454746464948484A49494B4A4A4B4B4B4D4D4D4E4E4E5050 - 505151515252525454545656565858585959595B5B5B5C5C5C5E5E5E60606062 - 62626464646666666767676868686868686969696B6B6B6D6D6D717171828282 - 8686868C8C8C9191919595957C7C7C7E7E7E8080808181818484848585858888 - 888989898B8B8B8C8C8C8F8F8F9090909292929494949595959797979999999A - 9A9A9B9B9B9D9D9D9D9D9D9F9F9FA0A0A0A1A1A1A2A2A2A4A4A4A5A5A5A6A6A6 - AAAAAAADADADAEAEAEAFAFAFB0B0B0B0B0B0B0B0B0B0B1B0B0B0B0B1B0B0B1B1 - B1ADADAEADADADB3B3B3B4B4B4B6B6B6B8B8B8B8B8B8BBBABBBBBBBBAEAFAEA7 - A7A7A6A6A6A5A5A5A5A5A5A5A5A5A6A6A6A5A5A5A4A4A4A4A4A4A2A2A29B9B9B - 9B9B9B9999999898989796969495949393939191919292929393939393939090 - 908F8E8E8D8D8D8B8B8B8989888787878584848383838181817F7E7F7C7C7C7B - 7A7B7979797776777575757272727070706E6E6E6C6D6C6A6B6A696867666666 - 646363626262605F5F5E5D5E5B5B5B595A595757575656565354545252514A4B - 4B4848484848474546454848474A4A4947474746464745444544444342424241 - 41403F3E3E3F3F3D3E3D3D3C3C3B3B3A3A393939393939383738363536363635 - 3535343434343333333333323232313132313233323131313131313131312E2D - 2E2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A27262723232222222223222321212122 - 22222C2D2D3534353738373838393939393A3A3A303030201F1F1F201F1F201F - 1F1F1F1F1F1F1E1F1F1F1F1E1E1E1E1F1E1F1E1E1E1E1E1E1E1E1E1E1D1E1E1E - 1E1D1D1D1D1D1D1D1D1D1D1C1D1D1D1D1D1D1D1D1C1D1C1C1D1C1B1C1B1C1C1B - 1C1C1B1B1C1B1B1B2122212524252625252727272828282A2A2A2222221A1A1B - 1A191B1A191B1A191A1A191A1C1C1C1F1E1E1E1F1F1E1E1F1F1E1E1E1E1E1D1D - 1D1C1D1D1C1D1D1D1C1C1C1C1C1D1C1C1D1B1C1C1B1C1C1C1C1C1B1B1B1B1B1B - 1B1B1B1B1A1A1A1B1B1A1B1A1A1B1A1A1A1A1A1A191A1A1A191A19191A191919 - 1919191919181919191919181919191A1A191E1D1D1D1C1D1D1C1C1E1C1C1818 - 1817181717171716171717171716171717161616161616161616151516151515 - 1414151415151414141414141314131313111111101011101011101011121213 - 2728272B2B2B3030303434343939391414140E0E0D0E0D0D0E0D0E0E0D0D0D0D - 0D0C0C0D0D0D0D0D0D0D0C0C0C0D0D0C0C0C0C0C0C0C0B0C0C0B0C0C0C0C0B0C - 0B0B0B0B0B0B0B0B0B0B0B0B0B0A0B0A0A0B0A0A0A0A0A0A0A0A0A0A0A090A09 - 0A0A0A0A0A090909090A090A1616160909093030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303333333535353737373A3A3A3C3C3C3434342F2F2F2F2F2F2F2F2F2F2F2F - 3131313939393939393939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 3838383838373838373837373837373837373837373434342F2F2F2F2F2F2F2F - 2F2F2F2F3030303030303333333D3D3D39383935353532323230303030303030 - 30303030302F2F2F2F2F2F303030303030303030303030303030313131313131 - 3131313131313131313232323635353939393A3A3A3B3B3B3B3B3B3B3B3B3B3B - 3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F40403F40403F42414142424243424244 - 43434544444645454746464948484A49494A4A4A4B4B4B4D4D4D4D4D4D505050 - 5050505252525454545555555757575959595A5A5A5B5B5B5E5E5E5F5F5F6161 - 616262626565656464646464646666666868686B6B6B7171717F7F7F8484848A - 8A8A8F8F8F8E8E8E7878787A7A7A7C7C7C7E7E7E808080818181838383858585 - 8787878888888A8A8A8C8C8C8D8D8D8F8F8F9090909292929494949595959696 - 969898989999999A9A9A9B9B9B9D9D9D9D9D9D9E9E9EA0A0A0A0A0A0A1A1A1A4 - A4A4A7A7A7AAAAAAAAAAAAABABABABABABABABABABABABACACACADADADADADAD - AEAEAEB0B0B0B2B2B2B3B3B3B5B5B5B6B6B6B8B8B8AAAAABA2A2A2A1A1A1A1A1 - A1A0A0A09F9F9FA0A09FA0A1A0A0A0A0A0A0A09FA0A09E9F9F96969696969694 - 9494939393929292909090908F909292929191919090908E8E8E8C8C8C8B8B8B - 8989898786868585858383838281827F7F7F7E7D7D7B7B7A7979797878787575 - 757473737171716F6F6F6E6E6E6B6B6B6A6A696868676565656363636160605F - 5F5F5E5C5C5C5B5B595959575757565657535353525252505050484848474746 - 4545464343434545454747474747474545454344434242434242413F3F3F3E3E - 3E3E3E3C3D3D3C3C3B3B3A393A3A393938393836363636363634353534343433 - 343333333332323332313231313032313132323131313130303130302F2C2B2B - 2C2C2C2B2B2C2B2A2B2A2A2A2A2A2A2322232223222122212121222223222222 - 223031313434343737373737383838383838382E2E2E201F201F20201F20201F - 1F1F1F1F1F1F1E1F1F1F1F1E1E1E1E1E1E1F1F1E1E1E1E1E1E1E1E1E1D1D1D1E - 1E1D1E1D1D1D1D1D1D1D1D1D1C1C1D1C1D1C1C1C1C1C1C1C1C1C1B1C1C1C1C1B - 1B2121222526252627262727272929282A29292828291A1A1C1A1A1B1A191B1A - 1A1B1A1A1A1A1B1B1F1E1E1F1F1F1E1F1E1E1E1E1E1E1F1E1F1F1D1D1D1D1D1D - 1C1D1D1D1D1C1C1C1D1D1C1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B - 1B1B1A1B1B1B1A1B1A1A1B1B1A1B1A1A1A1A1A1A1A191A1A191A1A1919191919 - 19191919191919191919181B1B1A1D1E1D1D1D1D1D1D1D1D1D1D181718171717 - 1717181717171717171717161617171616161616161615151515151614151515 - 141514141414141414141313131111111011111011111010111212132626262B - 2B2A2D2D2E3232323636370E0E0E0D0E0E0E0E0E0E0D0E0D0D0D0D0D0D0D0D0D - 0D0C0D0D0C0D0C0D0C0D0C0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0C0B0C - 0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0B0A0B0A0A0A0A0A0A0A0A0A090A0A - 0A0A0A0A0A0A0A0A191616090909303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303333 - 333636363838383A3A3A3C3C3C3232322F2F2F2F2F2F2F2F2F2F2F2F34343439 - 3939393939393939393939393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838383838 - 38373838373838373837373837373434342F2F2F2F2F2F2F2F2F2F2F2F303030 - 3030303434344141414343434343434343434343434343433E3E3E3D3D3D3A39 - 3A36363634343432323231313131313130303030303030303031313131313131 - 31313131313131313232323938383939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B - 3C3C3C3D3D3D3E3E3E3F3F3F3F3F3E40403F403F3F4241414242424342424443 - 434544444645454746464847474A49494949494B4B4B4D4D4D4D4D4D4F4F4F50 - 50505252525454545454545757575858585959595B5B5B5D5D5D5F5F5F606060 - 6262626262626161616363636565656767676E6E6E7D7D7D8282828787878C8C - 8C8888887474747676767878787979797C7C7C7D7D7D7F7F7F80808083838384 - 84848585858888888989898A8A8A8C8C8C8D8D8D8F8F8F909090919191939393 - 9494949595959696969898989999999999999B9B9B9A9A9A9B9A9B9C9C9C9C9C - 9C9E9E9EA2A2A2A5A5A5A6A6A6A6A6A6A6A6A6A6A6A6A6A7A6A9A9A9ABABABAD - ADADAFAFAFB1B1B1B3B3B3B2B2B2A2A3A39D9D9D9C9C9C9C9C9C9C9C9C9B9B9B - 9A9A9A9A9A9A9C9C9B9B9B9B9B9B9C9A9A9B9A9A9B9192919191918F8F8F8E8E - 8E8D8D8D8F8F8F9090918F8E8F8E8E8D8C8C8C89898989898987878784858482 - 83828181817F7F7F7D7D7C7B7B7B7A7979787878757575737374717172707171 - 6E6E6E6C6D6D6A6A6A6969696666666565646363626161615F5E5F5D5C5C5B5B - 5B5A59595757575655565354535251525050504F4F4F48474844444444444443 - 43424141414746464545454343434343434142413F3F3F3E3F3E3F3F3E3D3E3C - 3C3C3B3A3A393A3A3A3938383838373636373535353434343434343334343333 - 33323232313131303030302F303232313130303030303030302E2D2E2C2C2C2B - 2B2B2A2A2B2A2A2B2A2B2B272627222222212221212222212121222222252525 - 3434343534353536363737363737373636362C2C2C201F201F1F1F1F20201F1F - 1F1F1F1F1E1E1F1F1E1E1E1E1E1F1E1E1E1E1E1E1E1E1E1D1E1E1E1D1E1D1E1E - 1D1E1D1E1D1C1D1D1D1D1D1D1D1C1C1C1D1C1C1C1C1C1C1C1C1C212222262525 - 2727272727272929292A292A2A2A291D1E1E1A1B1B1A1A1B1A1A1B1A1A1B1A1A - 1A1D1C1D1F20201F1F1F1F1F1F1F1F1F1E1F1E1E1E1E1D1D1E1D1D1D1D1D1D1D - 1D1D1D1C1D1E1D1C1D1C1C1D1C1C1D1B1B1C1B1C1C1B1B1B1B1C1B1B1B1B1B1B - 1B1B1B1A1A1B1A1B1A1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191A191A19 - 191918191819181C1D1C1E1D1D1D1D1D1D1D1D1C1C1C18171818171718181817 - 1717171717171717161716161616171616161516161515151515161515151415 - 1514141414141313131111111111111010111110111716162525252828282C2C - 2B2F2F2E3232321515150E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D - 0D0D0D0C0C0D0D0C0C0C0D0D0D0C0D0C0C0C0C0C0C0B0C0B0B0C0B0B0B0B0B0C - 0B0B0B0B0B0B0B0B0B0A0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A090A090A09090A - 0A090A0A1916190A0A0930303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030343434363636 - 3838383A3A3A3D3D3D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F3535353939393939 - 3939393939393939393939393939393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383838373838 - 373838373837373636362F2F2F2F2F2F2F2F2F2F2F2F30303031313134343443 - 4343454545464646464646464646454545454545444444444444434343434343 - 4343434242424242424141413E3E3E3D3D3D3D3D3D3535353131313131313131 - 313131313232323535353939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C - 3C3C3D3D3D3E3E3E3F3F3E3F3F3E40403F403F3F424141424242434242444343 - 4544444645454746464847474949494949494B4B4B4C4C4C4D4D4D4F4F4F5050 - 505151515353535454545656565858585959595B5B5B5C5C5C5E5E5E5F5F5F5D - 5D5D5E5E5E6060606262626464646D6D6D7B7B7B7F7F7F8484848A8A8A848484 - 7070707272727474747676767878787979797C7C7C7C7C7C7E7E7E8080808181 - 818383838484848686868888888989898A8A8A8C8C8C8C8C8C8E8E8E8F8F8F90 - 9090919191929292939393939393949494959595969696979797979898979898 - 9898989B9B9B9E9E9EA1A1A2A1A1A2A2A2A2A3A3A3A5A5A5A7A7A7A9A9A9ACAC - ACAEAEAEADADAD9D9D9D99999999999998989898989897979796969695959594 - 94949796979797979697979695969696968D8D8D8C8C8C8B8A8A898989888888 - 8A8A8A8C8C8C8B8A8B89898988888785858585858582828281818180807F7E7D - 7D7C7B7B7B79797878787676757474747272727171706E6E6E6D6D6D6C6C6B69 - 696A676867666666646464626261605F5F5F5F5D5D5B5B5B5A5A595858575757 - 5555555353535151524F4F4F4F4E4E4D4C4C4948484443444141424141403F3F - 3F45444444444343444341424240403F3E3F3E3F3E3E3D3D3D3C3C3C3A3A3A3A - 3A3A3A3938393738373637363635343435343434343434333433333333313231 - 3031303030303030303132323230303130303030302F2F2F2B2B2B2B2B2A2B2A - 2A2A2B2A2A2A2A2A2A2A23232322222221222221212121222122222229282934 - 33343534353534343434353435343333332D2D2D2221211F1F1F1F1F1F1F2020 - 1F1F1F1F1F1E1E1F1F1F1E1F1E1E1E1E1E1E1E1E1E1D1E1D1E1E1E1D1E1D1E1E - 1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1D1D1E1D24242426262626272628282829 - 29292A2A2A2B2B2B2121211A1B1B1A1B1C1B1B1B1A1A1B1A1A1A1A1B1A201E1F - 1F20201F201F1F1F201F1F1F1F1F1E1F1D1E1D1D1D1E1D1D1D1D1D1C1D1D1D1E - 1E1E1D1D1E1D1D1D1C1C1D1C1C1D1C1C1C1B1C1C1B1B1B1C1B1B1B1B1B1B1B1B - 1B1B1B1B1A1B1B1A1A1A1A1A1A1A1A1A1A19191A1A1A1A19191A191919191919 - 1918191E1D1D1D1E1E1D1E1D1D1E1D1C1B1B1818181718181818181718171717 - 1717171717161716171717161616161616151516151516151515141415141514 - 14141212121111111011111111111011111818182525252626262929282A2B2A - 2C2C2C2D2E2D1919190E0E0E0E0E0E0D0D0E0E0D0E0D0D0E0D0D0D0D0D0D0D0D - 0D0D0C0D0D0C0D0C0C0C0C0C0D0C0C0C0C0C0B0B0B0B0B0B0C0C0C0B0B0C0B0B - 0B0C0B0B0B0B0B0B0A0B0B0B0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A - 1619160A09093030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303131313434343636363838383B - 3B3B3B3B3B2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F373737393939393939393939 - 3939393939393939393939393939393939393939393939393939393939383939 - 3839383839383839383839383839383838383838383838383838383838383838 - 3838383838383838383838383838383838383838383838383838383837383837 - 3636362F2F302F2F2F2F2F2F2F2F2F3030303131313333334242424747474848 - 484A4A4A4A4A4A4A4A4A49494947474747474745454545454544444444444443 - 4343424242424242414141414141414141404040313131313131313131313131 - 3131313232323938383939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C - 3C3D3D3D3E3E3E3E3E3D3F3F3E403F3F403F3F42414142424242424244434345 - 44444645454746464747474949494949494B4B4B4C4C4C4D4D4D4E4E4E505050 - 5151515252525454545555555757575858585A5A5A5B5B5B5D5D5D5B5B5B5B5B - 5B5D5D5D5F5F5F6161616D6C6D7878787D7D7D8282828787877B7B7B6D6D6D6F - 6F6F7070707272727474747575757777777979797A7A7A7C7C7C7D7D7D7F7F7F - 8080808282828383838484848686868888888888888A8A8A8A8A8A8B8B8B8B8B - 8B8D8D8D8E8E8E8F8F8F8F8F8F90909091919192929291929291929292929293 - 93939393939696969A9A9A9E9E9E9F9F9FA1A1A1A4A4A4A6A6A6A8A8A8A6A6A6 - 9696969394949493939494939393939393939292929292919090908F8F8F9191 - 909292919292919191919292928A8A8B88888887868685858584848485858588 - 88888787878585858483848282828080807E7E7E7E7E7E7B7B7B7A7A79787878 - 777576757474737272717171706F6F6D6D6D6B6C6C6A6A6A6768676667666464 - 646363636161615F5F5F5E5E5C5B5C5B5A5A5959575757565655545453535351 - 51514F4F4F4F4E4E4D4C4C4B4B4B4848484141414140413F3F3F3E3F3E414241 - 4443434242414040403F3F3F3E3D3D3E3E3E3D3C3C3A3A3A3B3B3A3A3B393838 - 3738383737353635343535353534353434343433323331323130313030313130 - 30303030303030303232313230303130302F2F2F2C2C2D2B2B2B2B2B2B2B2B2A - 2B2A2A2A2A292727272222222221222121212221222322222322222B2B2B3434 - 3434333434343333333332323231313130303027272620201F1F1F1F1F1F1F1E - 1F1F1F1E1E1F1F1E1F1E1F1E1E1E1F1E1E1E1E1E1E1D1D1D1E1D1E1E1D1D1E1D - 1D1D1D1D1D1D1D1D1C2222222525262626272727272828282929292B2A2A2B2C - 2C2324231B1B1C1B1B1C1B1B1B1A1B1B1B1A1B1A1A1B1F1E1E1F1F2020202020 - 1F1F1F1F1F1F1F1F1F1F1F1F1D1E1E1D1E1D1D1D1D1E1D1E1D1D1E1E1D1E1E1D - 1D1E1D1D1D1D1D1D1C1D1C1C1D1C1C1C1B1C1C1B1B1B1C1B1B1C1B1B1B1B1B1A - 1B1A1B1B1A1A1A1A1B1A1A1A1A1A1A1A1A1A191A1A1919191919191A1A1A1A1E - 1E1E1E1E1E1D1D1E1E1D1D1A1A1A181818181818181718171717181718171717 - 1717171717171716161716161615151615161615151615151515141415141111 - 111112111111111111111010111717162423242525262626262828282A2A2A2A - 2A2A2A29291D1D1D0E0E0E0E0E0E0D0E0D0D0E0D0D0D0E0D0D0D0D0D0D0D0D0C - 0C0C0D0D0D0C0C0C0C0C0D0C0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B0B0B0B0B0B - 0B0B0B0B0A0B0B0A0A0B0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A090A0A1619190A - 0A09303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303131313434343737373939393B3B3B3A3A - 3A2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F39393839393939393939393939393939 - 3939393939393939393939393939393939393939393939393938393938393838 - 3938383938383938383938383938383838383838383838383838383838383838 - 383838383838383838383838383838383838383838383838373736362F2F302F - 2F2F2F2F2F2F2F2F3030303131313333334242424848484B4B4B4D4D4D4F4F4F - 4F4F4F4E4E4E4C4C4C4A4A4A4949494747474747474646464545454343434242 - 4241414141414140404040404040404039383930303031313131313131313131 - 31313535353939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C - 3D3D3D3E3E3D3E3E3D3F3E3E403F3F403F3F4140404242424242424443434544 - 444645454746464646464848484949494A4A4A4B4B4B4D4D4D4D4D4D50505050 - 50505252525353535454545656565858585959595B5B5B5757575959595B5B5B - 5B5B5B5F5F5F6B6B6B7575757B7B7B8080808585857878786A6A6A6B6B6B6D6D - 6D6F6F6F7070707272727474747474747777777878787979797B7B7B7C7C7C7E - 7E7E7F7F7F808080818181838383838383848484858585878787878787888888 - 8989898989898A8A8A8A8A8A8B8B8B8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D - 8D8F8F8F8F8F8F9292919797989D9C9D9F9F9FA1A1A19C9C9C90909090908F8E - 8F8F8F8E8F8E8E8E8D8D8D8E8E8E8D8D8D8C8C8C8C8C8B8B8B8C8C8D8C8D8D8D - 8D8D8D8E8D8E8D8D8E8888888383838282828080807F7F7F8080808484848383 - 8381818180807F7E7E7E7D7D7C7B7B7B79797978787877777674747474727372 - 71717070706E6D6D6C6C6C6A6A6A696969676666656465646464626262605F60 - 5F5F5F5D5D5D5B5B5A5A5A59585757565556545353535252515050504F4F4E4E - 4E4D4C4D4B4B4A4949494747473F3F403E3E3E3E3D3E3C3B3C3F3F3F43424141 - 4140403F3F3E3E3E3E3E3D3B3B3B3A3B3B3A3B3B3A3A3B383838383837373736 - 363534363435363434353535333333323232313130303031303030303130302F - 2F2F2F2F323131313231302F2F302F2F2F2F302C2B2B2B2B2B2B2A2A29292A29 - 29292A29292525252222222221212121222221222121212222222B2C2C323233 - 3333333332323231313131313030303030302D2D2D2626272021211F1F1F1F1F - 1F1E1F1F1E1F1F1E1E1F1E1E1E1E1F1E1E1E1E1E1E1E1E1E1E1E1D1D1E1E1E21 - 21212626262727272827282828292A29292A2A2A2B2A2B2C2C2C2524251B1C1D - 1B1C1C1B1B1C1B1A1C1B1B1C1A1A1C1E1E1D2020202020202020201F1F201F1F - 201F1F1F1F1F1F1F1E1E1F1E1E1E1D1E1E1E1D1F1E1E1E1E1E1E1E1E1D1E1D1E - 1D1D1D1D1C1D1D1C1D1C1C1D1B1B1C1C1C1C1B1C1B1C1B1C1B1B1B1B1B1B1B1B - 1A1B1B1A1B1B1B1A1A1A1A1A191A1A1A19191A1A1A1A19191D1C1B1E1E1D1E1E - 1E1E1E1E1E1D1E19191918181818181818171817181817171817171717171716 - 1617171717171616161615161515161515161515151415141515111112111212 - 1111111111111111111111121515152222222526252525252727272627262727 - 262726261E1E1E0E0F0F0E0E0D0E0D0E0E0D0E0D0E0E0E0E0D0D0D0D0D0D0D0C - 0C0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0C0B0B - 0B0B0B0A0B0B0B0A0A0A0B0B0A0A0A0A0A0A0A0A0A0A0A0A19191609090A3030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303232323535353737373939393B3B3B3737372F2F2F - 2F2F2F2F2F2F2F2F2F2F2F303A39393939393939393939393939393939393939 - 3939393939393939393939393939393939393939393839393839393839383839 - 3838393838393838393838383838383838383838383838383838383838383838 - 3838383838383838383838383838383838383737373030312F2F2F2F2F2F2F2F - 2F3030303030303232324040404949494D4D4D50505053535354545451515149 - 49494E4E4E4D4D4D4B4B4B4A4A4A484848474747454545444444414141404040 - 3F3F3F4040404040404040403F3F3F3131313131313131313131313131313131 - 313938383939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3D - 3D3D3E3E3D3E3E3D3F3E3E403F3F403F3F414040424242424242434242454444 - 4645454545454646464848484949494949494B4B4B4C4C4C4D4D4D4F4F4F5050 - 505151515252525454545555555757575858585454545757575757575959595C - 5C5C6B6B6B7373737979797E7E7E8383836D6D6D6767676868686A6A6A6B6B6B - 6D6D6D6E6E6E7070707171717373737474747575757777777878787979797B7B - 7B7C7C7C7D7D7D7E7E7E7F7F7F7F7F7F81818182828283838383838383838385 - 8585858585858585868686878787878787868686878787888888888788888888 - 8989898989898989898D8C8D9696969292928A8A8A8A8A8A8B8B8B8A8A8A8A8A - 8A89898988888888888888888889898887878687868687878788888889898988 - 88888989898584847F7E7F7D7E7D7C7C7C7B7B7B7A7A7A8080807E7E7E7D7E7E - 7B7B7B7A7A7A7A7979787778767776747474737372727271706F6E6F6E6E6D6C - 6D6B6A6A6969696767676666666464646262626161615F5F5F5D5D5E5C5B5C5B - 5B5B585858575757565655545353535353504F50504F4F4E4D4D4C4C4C4A4A4B - 4848494748484747464040403E3D3D3B3B3B3B3A3B3A3A3A424141403F3F3F3F - 3E3F3E3F3C3C3C3B3B3B3B3B3B39393938383838393837373736373536363536 - 3534363434343434333232313131313131313131313031302F2F3030302F302F - 30303032323231313030302F302F2F2D2D2D2B2B2B2A2A2A2A2A292A29292A29 - 2929292823232322222222212222222221212121222122222228282933333332 - 33333231323131323030303030303030302F2F2F2F2F2F2A2A2A262626232323 - 2121211F1E1F1E1F1F1F1E1E2020202121212424232526262828282828282828 - 28292829282828292A2A2B2B2A2B2B2B2C2C2C2222221C1B1D1C1B1C1C1B1D1B - 1B1D1B1B1C1B1B1B1C1B1D212021202121202020202020201F20201F1F1F201F - 1F1F1F1F1F1E1F1E1E1F1E1E1E1E1E1F1E1F1F1E1E1E1E1E1D1D1E1D1D1E1E1E - 1D1D1D1D1D1C1C1D1C1C1D1C1C1C1B1B1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B - 1A1B1B1B1A1A1A1B1A1A1A1A1A1A191A1A1A1A191E1D1E1E1D1D1E1E1D1D1E1E - 1D1D1C1918191918181818181818181818181818181818171718171717171717 - 1717161616161616151617151516151515151515151511121211121111111111 - 1111111111111011121212121213202020242424252524242525252425242525 - 2424242020211111110E0D0E0D0E0D0D0E0D0D0D0E0D0D0D0D0D0D0D0C0D0D0C - 0C0C0C0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0C0C0B0C0B0B0B0B0C0B0B0B - 0B0B0B0B0B0A0B0B0B0A0A0B0B0B0A0A0A0A0A0A1916160A0A0A303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303333333535353737373A3A3A3C3C3C3535352F2F2F2F2F2F2F - 2F2F2F2F2F3131323A3939393939393939393939393939393939393939393939 - 3939393939393939393939393939393939393939383939383938383938383938 - 3839383839383838383838383838383838383838383838383838383838383838 - 38383838383838383838383737373030312F2F2F2F2F2F2F2F2F303030303030 - 3232323F3F3F4949494D4D4D5252525555555858585656563737373030303030 - 303232323737373B3B3B3D3D3D4040404040404343434141413F3F3F3E3E3E3F - 3F3F3F3F3F3F3F3F3F3F3F383738303030313131313131313131313131343434 - 3939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3D3D - 3C3E3E3D3E3D3D3F3E3E3F3E3E403F3F41404042414142424243424245444444 - 44444545454646464747474949494949494B4B4B4C4C4C4D4D4D4E4E4E505050 - 5050505252525353535454545655555252525454545555555757575A5A5A6868 - 687171717676767C7C7C8080806A6A6A6363636565656666666868686969696B - 6B6B6C6C6C6D6D6D707070707070727272737373747474767676777777787878 - 7979797B7B7B7C7C7C7B7B7B7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E8080807F7F - 7F80808080808080808080808081818182828282828283828383838382828383 - 8383848483848384838383848484848485858585858585858585858585858585 - 8484848384848483848383838283828282828383838484848484848484848585 - 848283827A797A7A797A7879787777777676767B7B7B7B7B7B7A7A7A77787877 - 777775767674757572727271717170706F6E6E6D6D6D6D6B6A6A6A6A6A686868 - 6666666465646263626161616060605E5D5E5D5D5D5B5B5B5A5A595858585657 - 555555555453535151515150504F4F4F4E4D4D4C4B4C4B4C4B49494948484747 - 47474645464140403B3B3B3A3B3A39393939393A3D3E3D3F3F3F3F3E3D3E3D3D - 3C3B3B3B3C3B3A3A3A3939393838383738373636363636363636353536353534 - 3434323233323232313131313131313130302F2F302F302F2F2F2F302F2F2F31 - 3030303131313030302F302F2F2F2C2D2D2A2A2A2A2A2A292A29292A292A2929 - 2928292222222122222222212222212222222221212121222525253030303132 - 313131313031313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C - 2B2C2C2C2C2B2B2B2A2A2B2A2A2A2A2A2A2A292A292A2A29292A2A2A2A2A2A2A - 2B2B2B2B2B2C2C2C2D2B2B2A1F1F1F1C1C1D1C1C1D1C1B1D1C1B1D1B1B1D1B1B - 1D1C1C1C2021202120212121202121202121202020201F20201F201F201F1F1F - 201F1F1F1E1F1E1E1F1F1E1F1E1F1E1E1E1E1E1E1E1E1E1E1E1E1D1E1D1D1D1D - 1E1D1D1D1C1C1D1C1C1D1C1B1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1A1A1A1A - 1B1A1A1A1A1B1A1A1A1A1A1A1A1A1A191E1D1D1E1D1D1E1D1D1E1E1D1C1C1C19 - 1919181919181818181818181818181818171718171717171717171717171616 - 1716161716161616151615151615151515151514151213131111121112111111 - 111111111111111112121112121C1C1C23242324242424242424242524242425 - 24242323231212120E0D0D0E0E0D0E0D0D0D0E0D0D0E0D0D0D0D0D0D0C0D0D0D - 0C0C0C0C0D0C0D0C0C0C0C0C0C0C0C0C0B0B0C0B0C0B0C0B0B0B0C0B0B0B0B0B - 0B0B0B0B0A0A0B0A0A0B0A0A0A0B0A0A191919090A0A30303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303333333535353838383A3A3A3C3C3C3232322F2F2F2F2F2F2F2F2F2F2F - 2F3232323A39393A393939393939393939393939393939393939393939393939 - 3939393939393939393939393939393938393938393938393838393838393838 - 3938383938383838383838383838383838383838383838383838383838383838 - 383838383838383232322F2F2F2F2F2F2F2F2F3030303030303232323E3E3E48 - 48484D4D4D525252565656595959595959383838303030303030303030303030 - 3030303030303030303030303030303030303030303131313939393D3D3D3E3E - 3E3E3E3E3F3F3F3F3F3F30303030303031313131313131313131313138373739 - 39393939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3B3D3D3C - 3E3D3D3E3D3D3F3E3E3F3E3E403F3F4140404241414242424342424443434444 - 444545454646464747474848484949494A4A4A4B4B4B4D4D4D4D4D4D4F4F4F50 - 50505151515252525352525050505252525353535454545757576969696F6F6F - 7474747A7A7A7F7F7F6363636060606262626363636464646666666767676868 - 686A6A6A6B6B6B6D6D6D6E6E6E70707070707072727273737374747475757576 - 76767777777878787878787979797A7A7A7979797A7A7A7A7A7A7B7B7B7B7B7B - 7A7A7A7A7A7A7B7B7B7C7C7C7B7B7B7C7C7C7C7C7C7D7D7D7C7D7C7E7E7E7E7E - 7D7F7E7F7F7F7F7F807F7F7F7F7F7F7F807F7F8180808080807F7F7F80808080 - 7F7F7F7F7F7F7F7F7E7E7F7E7E7E7D7D7E808080808180818181818181808080 - 7777777676757574747372727272727576757778777676767575757373737273 - 737171716F706F6D6D6D6D6D6C6B6B6A69696969686867666665656563626262 - 62626061605F5F5F5D5E5D5B5B5B5A5B5B595859585858565657555454535352 - 5151505050504F4E4E4D4C4D4C4C4B4B4A4A4849484747474646464545454344 - 444342423A3A3A3A39393838383737373A3A393F3F3E3D3D3D3D3B3C3C3B3B3B - 3A3A393939383939373738373637363737373636363636353534343433323331 - 323132333232323131303130302F30302F2F302F2F30302F2E2E2E2F2F2F3131 - 3131303131313030302F2E2E2E2A2A2A2A2A2A2A292A2A2A2A2A2A2A2A2A2A28 - 28282222222222222222222121212121222121212121212222222B2B2B323232 - 3231323030303031303030302F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2D2D - 2D2B2B2C2C2C2C2B2B2B2B2C2B2B2A2B2B2B2B2C2B2B2B2C2B2D2D2C2D2D2D2D - 2D2D2526261D1E1F1C1D1D1C1C1D1C1C1D1B1C1C1C1C1D1B1C1C1C1C1C202020 - 2121212021202121212121202021202020201F202020201F1F202020201F201F - 1F1F1F1F1F1F1F1E1F1F1F1F1E1E1F1E1E1E1E1E1E1E1E1E1E1E1E1D1E1E1D1E - 1D1D1D1C1C1D1C1C1D1C1B1C1C1C1C1C1B1C1B1C1C1B1B1B1B1B1A1B1B1B1A1B - 1A1B1B1A1A1A1A1A1A1C1B1C1E1D1E1E1E1E1E1E1D1E1D1D1B1A1A1919191919 - 1818191819191818181918181817181817171717181718171717171717161617 - 1615161615161515161515151515151515151515131312121212111212111111 - 1010111011111111111111121919192323232323232323232424242425252424 - 242424241616160E0D0E0D0D0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C - 0C0D0C0C0C0C0C0C0C0C0C0C0C0C0B0C0C0C0C0C0B0C0B0B0B0B0B0B0C0B0B0B - 0B0B0B0B0A0B0B0A0B0B0A0A19191B0A0A0A3030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303034 - 34343636363838383A3A3A3D3D3D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 3232323838383939393939393939393939393939393939393939393939393939 - 3939393939393939393939393839393839393839383839383839383839383839 - 3838383838383838383838383838383838383838383838383838383838383838 - 3232322F2F2F2F2F2F2F2F2F3030303030303131313A3A3A4848484D4D4D5252 - 525757575B5B5B5D5D5D41414130303030303030303030303030303030303030 - 30303030303030303030303030303030303030303232323B3B3B3B3B3B3D3D3D - 3E3E3E3F3F3F3837383030303030303131313131313131313434343838383939 - 393939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3B3D3D3C3E - 3D3D3E3D3D3F3E3E3F3E3E403F3F403F3F424141424242424242434343444444 - 4545454545454646464848484949494949494B4B4B4C4C4C4D4D4D4E4E4E5050 - 505050505150504E4E4E4F4F4F5050505353535656566868686D6D6D72727278 - 78787D7D7D5C5C5C5D5D5D5F5F5F606060616161636363646464666666676767 - 6868686969696B6B6B6B6B6B6D6D6D6E6E6E7070707070707171717272727373 - 7372727274747474747475757574747475757575757575757576767675757575 - 7575757575757575767676767676767676777777777677787877797978797979 - 7A7A797A7A7A7979797A7A7A7B7B7B7B7A7A7B7B7B7B7B7B7C7C7C7C7B7C7B7B - 7A7B7B7B7A7B7B7A7A7A7979797C7C7C7C7C7C7D7D7D7D7D7D7D7D7D73737371 - 727171707170706F6E6E6E7171727474737373737171717070706F6F6F6D6E6E - 6D6D6D6B6C6B696A696869676766666665656463636262616161615F5F5F5E5F - 5E5B5B5B5B5B5B59595958585757575755555454545452535251515050504F4F - 4F4E4C4C4C4C4B4B4A4A4A494949484847464646454546444444434343424241 - 3B3B3B3839383736373637363637363D3D3C3D3C3B3C3C3C3B3B3A3A39393A39 - 3A38383837363736363736363637363735353534343433333233333132323233 - 323231303131313030303030303030302F2F2F2E2E2F2E2F2E2F313030313131 - 31313130302F2F2F2E2C2D2C2A2A2A2A2A2A2A2A2A2A2A292A292A2929292827 - 272222222222212122222222212121212121212121212120212223222C2C2B32 - 31323030313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2E2D - 2D2D2C2C2D2C2C2C2C2D2D2D2D2D2D2D2D2C2D2E2D2E2D2D2727271E1E1F1D1D - 1D1C1D1D1D1D1D1C1D1D1C1C1D1C1C1D1C1C1D1C1C1D21212021212121212121 - 2121212121202021212120202021202020202020201F2020201F1F1F201F201F - 1F1F1F1E1F1F1E1E1F1E1F1E1F1E1E1E1E1E1E1E1E1D1E1E1E1E1E1E1D1D1D1D - 1C1D1C1C1D1C1C1D1C1B1C1C1B1C1B1B1C1C1B1B1B1B1B1B1A1B1A1A1B1B1A1B - 1B1A1A1B1A1E1E1D1E1E1E1E1E1D1E1D1D1D1D1D191919191919191919191819 - 1819181818181818181818181818181818171817171717171716161716161716 - 1517151616151615151515151515151515151413131312111111121111111111 - 1111111111111111101111171717222222232322232322232324242424242424 - 2424241A1A1A0E0E0E0D0E0E0E0D0D0D0D0E0D0D0D0D0C0D0D0D0C0D0D0D0C0D - 0D0C0C0C0C0D0C0C0C0C0B0C0C0C0B0C0B0B0B0B0C0B0C0B0B0B0B0B0B0B0B0A - 0B0B0B0B0A0A0A0B1B1B190A0A0A303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303131313535353737 - 373939393B3B3B3D3D3D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F343434393938393939393939393939393939393939393939393939393939 - 3939393939393939393939383939383938383938383938383938383938383838 - 383838383838383838383838383838383838383838383838383333332F2F2F2F - 2F2F2F2F2F3030303030303131313A3A3A4747474C4C4C5151515656565B5B5B - 5E5E5E4141413030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303636363A3A3A3B3B3B3D3D3D3E - 3E3E3E3E3E303030303030303030313131313131313131383737383838393939 - 3939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3A3C3C3B3D3C3C3E3D - 3D3E3D3D3F3E3E3F3E3E403F3F403F3F41404042424242424242424244444444 - 44444545454646464747474949494949494A4A4A4B4B4B4D4D4D4D4D4D4F4F4F - 4D4D4D4B4B4B4D4D4D4F4F4F5050505454546666666C6C6C7171717676767B7B - 7B5959595B5B5B5C5C5C5D5D5D5F5F5F5F5F5F61616162626263636364646466 - 66666767676868686969696B6B6B6B6B6B6C6C6C6D6D6D6E6E6E6E6E6E6F6F6F - 6F6F6F6F6F6F7070706F6F6F6F6F6F7070707070707070707070706F6F6F7070 - 7070707070707070707070707071717172727272727272727174747475757474 - 7373747474757576757675757575767676777777777777787878777777767676 - 76767675757675757576777678787879787879797979797A7272726D6D6D6C6D - 6C6C6B6C6A6B6A6B6B6B7070706F6F6F6E6E6E6D6D6D6C6C6C69696A69696968 - 6767666766666564656463636262626161605F5F5E5E5E5C5C5C5B5B5B5A5959 - 5858585757585656565454545454545252525050504F4F4E4E4E4E4C4C4C4C4B - 4B4A49494948484746464747474544454444444344444141414141413C3B3B37 - 36363637363635363434343A3A3A3D3C3C3B3C3A3B3A3A3A3A39393838383737 - 3737373737373635363535363435353433343333333333323333313231313230 - 313130303131313030302F2F2F2F2F2F2E2E2E2E2F2F2E2E2E3131313030302F - 302F2F302F302E2F2D2B2C2B2A2A2A2A2A292A2A2A2A2A2A292A292A29282828 - 2323232222222122222122212121222121212121212121212020212322232B2A - 2A2E2F2F3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2F2F2E2F2F2F - 2F2F2E2E2F2E2F2E2E2E2E2C2C2C2627271F1F1F1E1D1E1D1D1D1D1D1D1D1D1D - 1D1D1D1C1D1D1C1C1D1C1D1D1D1D1E2021212122212222212221222121212121 - 2121212121212021212121202020202020202020202020201F1F1F1F1F1F1F1F - 1F1F1F1E1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1E1D1D - 1D1C1C1D1C1C1C1C1C1C1B1B1C1B1B1B1B1C1B1B1B1B1B1A1B1B1B1A1A1A1B1C - 1B1E1F1E1E1E1E1E1E1E1E1D1E1C1D1C19191A19191919191919191819181919 - 1919181819181818181818181817181717181717181717171616171616171616 - 1616151616151515151515151515141514151414131112121211111111111110 - 1111111111111111101115151621212123232322232224242423242424242424 - 24241D1D1D0F0F0F0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0D0C0C0C0C - 0C0C0D0D0C0C0C0C0C0C0B0C0B0B0C0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0B - 0B0B0B0A1B1B190A0A0A30303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030323232363636373737393939 - 3B3B3B3B3B3B3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F3035353539393939393939393939393939393939393939393939393939 - 3939393939393938393938393938393838393838393838393838393838383838 - 3838383838383838383838383838383838383534342F2F2F2F2F2F2F2F2F2F2F - 2F3030303131313636364747474C4C4C5050505656565B5B5B5E5E5E48484830 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303131313838383A3A3A3B3B3B3D3D3D3E3E - 3E38373830303030303030303031313131313134343438383838383839393939 - 39393939393939393A3A3A3B3B3B3B3B3B3B3B3A3B3B3A3C3C3B3D3C3C3D3C3C - 3E3D3D3E3D3D3F3E3E403F3F403F3F4140404241414242424242424343434444 - 444545454545454646464848484949494949494B4B4B4C4C4C4D4D4D4B4B4B4A - 4A4A4A4A4A4C4C4C4E4E4E5555556464646A6A6A707070757575707070575757 - 5757575959595A5A5A5B5B5B5C5C5C5E5E5E5F5F5F6060606161616363636363 - 636565656666666767676767676868686A6A6A6969696A6A6A6A6A6A6B6B6B6B - 6B6B6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6969696A6A6A - 6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6C6C6C6D6D6D6D6E6E6E6E6E6E6F6E706F - 7070707070707172727271727170707171727172727272727272717271717170 - 70707171717272727474747575747575757676767171716A6A6A686969696969 - 6767666667666D6D6D6C6C6C6B6C6B6969696969696666676666666464646363 - 63626261616160605F5F5F5E5E5D5C5C5B5B5B5A595A59585958575857565654 - 54545454545252525151515050504F4F4F4D4D4C4C4C4B4B4B4A4A4A49484848 - 4846474646464444444444444342434141424040404040403E3D3D3536363636 - 363435343435343535353B3B3A3B3A3A393A393A393839373738383738373736 - 3636363636343435333434343333333333333433323231323230313230323130 - 323130302F2F2F2F302F2F2F2F2F2F2F2E2F2E2E2E2F2E2E3030302F30303030 - 3030302F2E2F2E2B2B2B2A2B2A2A2A2A292A2A292A2A2A29292A292A29282924 - 2424222222222222212121212121222121212121212121212121202020202020 - 2323232828282A2A2A2C2C2B2E2D2E3030303030303030302E2E2E2B2A2A2829 - 292625252020221E1E1E1E1D1E1E1D1E1D1D1D1E1E1E1D1D1D1D1D1D1D1C1D1C - 1D1D1C1D1D1F1F20222222222222212222222222212122212121212122212121 - 212121202121212020202120202020201F20201F2020201F1F1F201F1F1F1F1F - 1F1F1F1F1F1E1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1E1E1E1D1E1D1C1D - 1C1C1D1C1C1C1C1B1C1C1B1C1B1B1B1B1C1B1B1B1B1B1B1B1B1B1E1C1D1F1E1F - 1E1E1E1E1E1E1E1D1E1B1A1A191A1A1919191919191919191919191818181819 - 1818191818181818181718181717171717171717161717161617161616161516 - 1515161516151515151615151515141515141414121212111111121211111111 - 1110111010111010111212142020202323232323232423232324232425242424 - 242020200F0F0F0E0E0E0D0D0E0E0D0E0D0D0D0D0D0D0D0D0D0C0D0D0C0D0D0D - 0C0C0C0C0C0C0C0C0C0C0B0C0B0C0B0B0B0C0B0C0B0B0B0B0B0B0B0B0B0B0B0B - 191B1B0A0B0B3030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303434343737373838383A3A3A3C3C3C3D - 3D3D3E3E3E3636372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F3030303535353939393939393939393939393939393939393939393939 - 3939393839393839393839383839383839383839383839383838383838383838 - 38383838383838383838383534342F2F2F2F2F2F2F2F2F2F2F2F303030313131 - 3636364646464B4B4B5050505555555A5A5A5E5E5E4D4D4D3030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303535353939393A3A3A3B3B3B3E3E3E3E3E3E - 3131313030303030303030303131313131313837373838383838383939393939 - 393939393939393A3A3A3B3B3B3B3B3B3B3B3A3B3B3A3B3A3A3C3B3B3D3C3C3E - 3D3D3E3D3D3F3E3E3F3E3E403F3F403F3F414141424242424242424242444444 - 4444444545454646464747474848484949494A4A4A4B4B4B4848484848484949 - 494A4A4A4B4B4B5353536363636969696E6E6E7474746E6E6E54545455555557 - 57575757575959595A5A5A5B5B5B5C5C5C5D5D5D5F5F5F5F5F5F616161616161 - 6363636262626464646565656565656565656565656565656767676666666565 - 6566666665656565656565656565656565656564646465656564646465656565 - 6565656565656565666666666666676767676867696968696A6A6A6A6A6B6A6B - 6B6A6B6C6B6B6D6D6C6D6D6D6D6D6C6E6D6D6E6E6E6D6D6D6E6E6E6D6D6D6C6C - 6C6D6C6D7171717070707070707272726F6F6F65656565656564646464646463 - 636369686969696967686767676766666665656563626362626261606060605F - 5F5F5E5E5D5D5C5B5B5B5A5A5A59595858585757565455555454545353525151 - 514F4F504F4F4F4D4D4D4D4D4D4B4B4B4B4B4949494848484848464646454544 - 44444443434242424141414040403F3F3F3F3F3F3E3E3E373636353534333434 - 3332333131323B3A393A3A393939383938383938383837373736373737363535 - 35343434343433343434343334323333323232323231323231323130312F3031 - 2F2F302F2F2F2F2F2E2F2F2F2E2E2E2E2D2D2E2E2F2F2F303031303030303030 - 30302F2E2E2E2B2B2C2A2A2B2A2A2A292A2A2A2A292A2A2A2A2929292A292727 - 2722222221222122212222212221212221212121212021212020212021212021 - 20202020201F2020201F201F1F1F1F20201F1F201F1F1F1F1F1F1F1E1F1F1E1F - 1E1F1F1E1F1E1E1E1E1D1D1E1E1E1E1D1D1D1D1D1E1D1D1D1D1D1D1E1E1E2120 - 2123222223222222222222222222222221212122212122212122212122212121 - 2021212020202020202021202020201F1F1F20201F20201F1F201F1F1F1F1F1F - 1F1F1F1F1F1E1E1E1E1F1E1E1E1E1E1E1E1E1D1E1E1E1E1D1E1D1D1D1D1C1D1C - 1C1D1C1C1C1B1C1C1B1B1C1B1B1B1B1B1B1B1B1C1B1B1F1E1D1F1E1E1F1F1E1E - 1E1E1E1E1D191A1919191A1A191A1A1919191919191919181819191819191819 - 1818181818181818171817171817171716161716161716161616161616151516 - 1515151515151615151515151515141515141512131212111111111111111111 - 10111111111111111111121C1C1C232223232223232323242323242424242424 - 2322231212120E0D0D0D0D0E0D0D0E0D0D0D0D0C0D0C0C0C0C0D0D0D0C0C0C0C - 0C0C0C0C0B0C0C0B0C0C0B0C0B0B0B0C0C0C0B0B0B0C0B0B0B0B0B0B1B1B1B0A - 0B0B303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303434343838383A3A3A3B3B3B3C3C3C3E3E3E3F3F - 3F4040403D3D3D3333332F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F303030353535393939393939393939393939393939393939393939 - 3939383939383938383938383938383938383938383838383838383838383838 - 383838383736362F2F302F2F2F2F2F2F2F2F2F3030303131313333334646464A - 4A4A5050505555555959595C5C5C4F4F4F303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303131313838383838383A3A3A3B3B3B3D3D3D3939392F - 2F2F2F2F2F2F2F2F2F2F2F303030333333383838383838383838393939393939 - 3939393939393A3A3A3A3A3A3B3B3A3B3B3A3B3A3A3B3A3A3C3B3B3D3C3C3E3D - 3D3E3D3D3F3E3E3F3E3E3F3F3F3F3F3F3F3F3F40404041414141414142424243 - 4343444444444444454545464646484848484848454545454545464646474747 - 4949495655566262626767676C6C6C7171716464645151515252525252525454 - 545555555656565757575858585959595A5A5A5B5B5B5D5D5D5E5E5E5E5E5E60 - 60605F5F5F616161616161616161616161626262626262616161616161616161 - 6060606161616060605F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5F5F5F5F5F5F6060 - 6060606060606061616162626263636363646465656465656466666567666767 - 6768686767676767676768686868696969696969696969686867696869696968 - 6C6C6C6C6C6C6C6D6C6D6D6E6D6D6D616161616161605F605F5F5F5E5D5E6363 - 636565656564646463646161616161615F5E5F5E5E5E5D5E5D5C5C5C5A5B5A5A - 5A5A595858575757575656545454535353525251505151504F4F50504F4D4D4D - 4C4C4C4C4C4C4A4A4A4948494747474747474545444444434444434342424141 - 414040403F3F3F3F3F3F3E3E3F3D3E3D3C3C3C3A3A3A34343332323332323231 - 3231343434383938383837383837373737373635353435353435343333333333 - 33323333323331323131313232333232323232323131313030313030302F3030 - 2F302F302F2F2F2E2E2E2E2E2E2D2D2E2D2D2D2F2F2F3030303030302F302F30 - 302F2F2F2F2B2B2B2A2A2B2A2A2A292A2A29292A29292A292A2A292A29292828 - 2423252221222221212121212121212121212121212121212121212020212020 - 202020202020201F1F1F1F201F201F1F1F1F1F201F1F1E1F1F1F1F1E1F1F1F1E - 1E1E1E1F1E1E1E1E1D1E1E1E1E1E1E1E1D1E1D1D201F20232323232323222323 - 2223222323232222222122222121222222222321212222212221212221212120 - 2120202020212020202020202120201F1F2020201F1F1F1F1F1F1F1F1F1F1F1F - 1F1F1E1F1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E1D1E1E1E1E1D1D1D1D1C1D1C1C - 1C1C1C1D1C1C1C1C1C1C1C1B1B1B1B1D1D1D1F1F1F1F1F1F1F1E1F1F1E1F1C1C - 1C1A1A1A1A1A1A1A1A1A1A19191A1919191A1919191919181918191919181918 - 1818181817181817181717171717181616171716171616161616161516161615 - 1516151516161515151515151515151415151212121112111111111011111111 - 111010111110111111121A1A1B23222323232224232323232425242424242423 - 23231616160E0E0E0E0D0D0D0E0D0D0D0D0C0D0D0D0C0C0D0D0C0D0D0D0D0C0D - 0C0C0C0C0C0C0C0C0C0C0C0B0C0C0B0B0B0B0B0B0B0B0B0B1B1B1B0B0B0B3030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303131313737373B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F - 3F3F3F4040403B3B3B3131312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F30303035353539393939393939393939393939393939393839 - 3938393938393838393838393838393838393838383838383838383838373636 - 2F2F302F2F2F2F2F2F2F2F2F3030303131313333334343434949494E4E4E5353 - 535858585C5C5C5555553232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F3333333838383939393A3A3A3C3C3C3E3E3E3030302F2F - 2F2F2F2F2F2F2F2F2F2F30303036363637373737373737373738383838383838 - 38383838383939393939393A3A393A3A393A39393A39393B3A3A3C3B3B3C3B3B - 3D3C3C3D3C3C3E3D3D3E3D3D3E3E3E3F3F3F4040404141414141414141414343 - 4343434344444445454545454547474743434343434345454545454547474753 - 52535E5E5E6464646A6A6A6E6E6E5F5F5F4E4E4E4F4F4F505050525252525252 - 5353535454545656565656565757575959595A5A5A5A5A5A5B5B5B5B5B5B5D5D - 5D5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B - 5B5B5A5A5A5A5A5A5959595959595959595959595959595A5A5A5A5A5A5A5A5A - 5B5B5B5B5B5B5C5C5C5D5D5D5E5E5E5E5E5E5F5E5F6060606160616262626363 - 6363626364646464646364646464646465656565656464646463626268686868 - 68686868686869686A696A5F5F5F5E5E5E5D5D5D5B5B5B5B5B5B5C5D5C616061 - 6061615F5F605E5E5E5E5E5E5D5D5D5C5C5C5B5A5B5A59595959585858575756 - 555554555453535252525151515050505050504D4D4C4B4B4C4B4B4B4A4A4A4B - 4B4A4848484848484647464544434544444443424241414241413F3F3F3F3F3F - 3F3F3E3E3E3D3D3C3C3B3C3C3B3B3B3A3939313131313131303030302F303131 - 3037373738383838383737373636363535353434333434343434333333333332 - 323232323232313232313231313130303030302F30302F2F302F302E2F2F2F2E - 2E2D2D2D2D2D2C2D2D2D2D2D2D2D2D2C2D2D302F2E2F2F2F2F2F2F2F2F2F2E2E - 2E2D2E2E2B2A2A29292929292929292929292929282828282828282828282827 - 2627242324222221212121212221212121212121202021212121202121202020 - 20202020202020201F201F2020201F1F1F1F1F1F1F1F1F1F1E1F1F1F1E1F1F1E - 1E1E1E1E1E1E1E1E1E1E201F2123232223232323242323232323232222222323 - 2223222222222322222222232322222322222222222222222121222121212121 - 2021202021202021202020202020202020201F20201F201F1F1F201F1F1F1F1F - 1F1E1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1D1E1E1E1D1D1D1D1D1D1C1D1C1C1D - 1C1C1D1B1C1C1C1B1C1C1C1F1E1F1F1F1E1E1F1E1E1E1F1E1F1E1B1B1B1A1A1A - 1A1A1A1A1A1A1A191A1A191A19191A1919191819191919181918191918181818 - 1818181718171717171717161718171717161617161616161616151616151515 - 1515161515151515151515151414151415121312111211111111101111111011 - 1010111011111010111818182222212323222323222423242424242424242424 - 241918180E0E0E0D0D0D0E0E0D0D0D0D0D0D0D0D0D0D0D0C0D0D0C0D0D0C0C0C - 0C0C0C0C0C0C0C0C0C0C0B0B0C0C0B0C0C0B0B0B1B1B1B0A0B0B303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303434343C3C3C3D3D3D3E3E3E3F3F3F3F3F3F3F3F3F3F - 3F3F4040404040403837383030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F3030303535353838383939393939393939393939383939 - 383938383938383938383938383938383838383838383838383030302F2F2F2F - 2F2F2F2F2F3030303131313333334141414949494D4D4D5252525858585B5B5B - 5555553232322F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F3030303636363838383939393B3B3B3C3C3C3939392F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F3232333737373737373737373737373737373838383838 - 383838383838383939383A3A393A39393A39393A39393B3A3A3B3A3A3C3B3B3D - 3C3C3D3C3C3E3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F404040414141424242 - 4343434444444444444545454141414141414141414242424545455252525D5D - 5D6363636868686C6C6C5959594B4B4B4C4C4C4D4D4D4E4E4E4F4F4F50505051 - 5151515151535353545454555555555555565656585858585858585858595959 - 5959595959595959595959595858585858585757575757575757575656565555 - 5555555555555555555555555554545454545455555555555555555556565656 - 56565656565757575858585959595A5A5A5B5B5B5C5C5C5D5D5D5D5E5E5D5E5D - 5F5F5E60605F60616060606060606060606060605F5F5F5F6262626464646465 - 656665656766676060605A59595959595858585657575656565E5F5F5D5D5D5C - 5C5D5C5B5B5A5A5A5A5A5A585858575757565656565655555454535352525152 - 5250504F4F4F4F4F4F4D4D4D4C4B4B4B4B4B494A4949494A4747474847474746 - 46454545444443434342434242414140414140413F3F403F3F3E3E3E3D3D3D3C - 3B3C3C3B3B3B3B3C3A3B3B393A3A34343430303030302F2F302F2F2F2F343434 - 3636373636363535353535343535343534343433343332323332323232323232 - 3232323231323230303030303030303030302F2F302F30302E2E2E2D2E2D2D2E - 2D2E2D2D2D2D2D2D2D2C2C2C2C2C2C2D2C2F2F2E2F2F2F2F2F2F2F2E2E2E2E2E - 2F2D2D2B2B2C2929292929292929292829282828282928282828282828282828 - 27272727252425222221202021202020201F1F20212020212020212021202020 - 2020201F201F1F1F201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1F1F1E1E201F20 - 2222222424242424242424242423232424242324232323232323232323222223 - 2223222223232423232323232323222223222222222222212121212121212120 - 212020202120202021202020201F202020201F201F1F1F201F1F1F1F1F1F1F1F - 1E1F1F1F1E1F1E1E1F1E1E1E1E1D1E1E1D1E1E1E1E1D1E1D1D1D1C1D1C1C1D1C - 1C1D1C1C1D1D1C201E1E1F1E1E1F1F1E1E1F1E1D1D1D1A1A1B1A1B1A1A1A1A1A - 1A1A191A191A1A19191919191919191919191919191919191818191818181817 - 1818171817171816171817171717161716171616161616161515151516151616 - 1516151515151515151514151515151413131411111111111111111110101111 - 1011101011101111151515222222232323232323242323242424242424252524 - 1E1E1D0F0F0F0D0E0E0E0D0D0D0D0D0D0D0D0D0D0D0C0D0D0D0C0C0C0C0C0C0C - 0C0C0C0C0C0C0C0C0B0B0C0C0C0C0C0B1B1B1E0B0B0B30303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303131313838383E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F - 3F4040404040403F3F3F3636372F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F30343434383837393939393938393938393838 - 3938383938383938383938383938383838383130312F2F2F2F2F2F2F2F2F3030 - 303030303232323F3F3F4949494D4D4D5252525757575A5A5A5A5A5A3535352F - 2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E3232323737373838383939393B3B3B3C3C3C2F2F2F2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E353535363636363636363636363636363636373737373737 - 3737373737363838373837373938383938383938383938383A39393B3A3A3C3B - 3B3C3B3B3C3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E40404040404040404041 - 41414242424343433E3E3E3F3F3F4040404040404343435252525C5C5C606060 - 6565656A6A6A5050504848484848484949494B4B4B4C4C4C4D4D4D4D4D4D4E4E - 4E50505050505051515152525253535354545454545454545455555555555555 - 5555555555545454535353545454545454535353525252525252525252515151 - 5050505050505050505050505050505050505050505050505050505151515252 - 525252525353535454545555555656565757575858585959595A5A5A5B5B5B5A - 5B5A5C5B5C5C5B5B5C5B5B5B5B5C5B5B5B5B5B5B5D5D5D605F60616061616061 - 6262615E5F5F5655565454555454545353535252525959585A595A5959595859 - 58565656575657555555545454535352525252525251504F4F4E4E4E4E4D4D4D - 4C4C4B4B4B4A4A4A494949494849474746474746454646454444434343434443 - 4343434242414141403F3F3E3F3E3E403F3F3D3D3C3B3C3C3B3B3B3B3A3B3A3A - 393839393839393939383636362F2F2F2E2E2E2D2E2E2E2E2D2E2E2E34343535 - 3535343434343433343433343332323232323131323231323131313131313031 - 2F3030302F2F302F2F2F2F302F2F2F2F2F2E2E2E2E2E2E2D2E2E2D2E2D2E2E2D - 2E2D2D2D2C2C2D2D2C2D2D2D2D2D2C2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2D2D2C2D2C292929292929292829282829282828282929282828282828282828 - 272727272727272726242425232223212122202020201F1F2020212020202020 - 20201F1F2020201F201F1F1F2020202022212222232325242425242524252425 - 2424242424232423232324232324232324232323232323222323242324242424 - 2323232323232322232323222322222321212221212221212121212121212021 - 2020202020202020202020202020201F1F201F1F1F1F1F1F1F1F1F1F1F1F1F1E - 1F1F1E1E1F1E1E1E1E1E1E1E1E1D1E1D1E1D1E1E1D1D1D1D1D1C1D1C1C1D1C1C - 1F1F1F1F1E1F1F1E1E201E1F1F1F1E1C1C1B1A1A1A1A1A1A1A1B1B1A1A1A1A1A - 1A1A1A191A1A1A19191919191919191919181919191819181818181818181718 - 1717181717171716171716171617171617161616161616151616151515151615 - 1515151515151514151415141514141313131111121110111111111111111010 - 1110101110111112121320202022232222232223232324242427272729292925 - 24250F10100E0E0D0D0D0D0D0E0D0D0D0D0D0C0D0C0C0C0C0D0D0C0C0C0C0C0C - 0C0C0B0C0C0C0C0C0B0C0C0B1E1B1B0C0B0B3030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303333333B3B3B3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F - 3F3F3F4040404040403E3E3E3535352F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F33323336363639393839393839383839 - 38383938383938383938383130312F2F2F2F2F2F2F2F2F303030303030323232 - 3E3E3E4848484C4C4C5151515656565A5A5A5959593737372E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2F2F2F3434343636363737373939393A3A3A3636362E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E30303034343435353535353535353535353535353536363636363636 - 36363737363737363736363837373837373837373837373938383938383A3939 - 3B3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F3F3F - 3F4040403B3B3B3C3C3C3D3D3D3E3E3E4040405151515959595D5D5D63636367 - 67674D4D4D4646464646464747474747474848484A4A4A4B4B4B4C4C4C4D4D4D - 4D4D4D4E4E4E4F4F4F4F4F4F5050505151515050505151515151515151515050 - 505151515050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C - 4C4C4C4C4C4C4C4C4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F - 5050505151515151515252525353535454535454545555555656565757565758 - 575757575757575757575656575656565757575B5B5B5B5B5B5D5D5D5E5E5D5D - 5E5D515051515252504F4F4F4F4F4F4F4F535353565656565556555455535353 - 5453535151515151515050504F4F4E4E4E4D4D4D4D4B4B4A4C4B4B4A4A494848 - 484848484646464646454545454443444243424241414242424141414141413F - 3F3E3F3F3E3F3E3D3E3D3D3C3B3C3C3C3B3B3C3B3B3B3B3A3A3A393939393939 - 3737383636373636363131312E2E2E2D2D2D2D2D2D2C2C2C3130313333333334 - 333333333333333333323333313232323232313332313130302F302F30303030 - 30302F302F2F302F2F2F302E2E2E2E2E2D2E2E2D2E2D2C2E2D2D2D2C2C2D2C2C - 2C2C2C2C2C2C2C2C2B2B2C2B2B2B2C2E2E2D2E2E2E2E2E2D2D2E2E2D2E2D2D2D - 2D2C2C2C29292928282828282827282727272728272727272727272727272726 - 2626282727282727272727272726272726272625242425242524252525252525 - 2524252726262625262626252625252525252525252424242525242425252524 - 2524242424232423232424242324232324232324242424242323242324242423 - 2324232323232323232222232221222121222121222121212121212021202121 - 2021212020202020202020202020201F201F1F1F1F1F1F1F1F1F1F1F1F1E1E1F - 1E1E1E1E1E1E1E1E1E1E1E1E1D1E1E1E1E1E1D1D1D1D1D1D1C1E1D1D1F1F1F1F - 1F1E1F1F1F1F1E1E1E1E1E1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A - 1A1A1A1A1A1A1919191A1A191919191919191918181818181818171818171817 - 1718171718161717171717161616161616161615161616151615161515151515 - 1515151415151515141514151515141314121112111111111111111111111011 - 1010111010111212131C1C1C2322222324242525252828282B2B2B2E2E2E2D2D - 2E1414150E0E0E0D0D0D0D0D0D0D0C0D0D0C0C0D0C0D0C0D0D0C0D0C0C0C0C0C - 0C0C0C0B0C0B0C0C1B1B1B0B0B0B303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303636363E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F - 3F3F4040404040404040403E3E3E3535352F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3131313434343838383938383938 - 383938383232322F2F2F2F2F2F2F2F2F3030303030303232323B3B3B4747474C - 4C4C5151515555555959595B5B5B3737372E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D31 - 31313535353636363737373939393A3A3A2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D3333333434343535353535353535353535353535353636363636363636 - 3536363536353537363638373738373738373738373738373738383839383839 - 39393939393939393A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3E3E3E3D3C3C - 3B3B3B3B3B3B3B3B3B3C3C3C3E3E3E5252525656565B5B5B6060606565654343 - 434343434343434343434545454646464747474747474848484A4A4A4A4A4A4B - 4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4D4D4D - 4C4C4C4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4949494949494848484848484949 - 494848484848484848484848484949494949494949494A4A4A4A4A4A4B4B4B4C - 4C4C4D4D4D4E4E4E4E4E4E4E4F4F505050505051525151535353525252525252 - 535353525352535453525252525252575757575858595959595959595A5A5151 - 514D4E4D4D4D4D4C4B4C4A4A4A4B4B4B5252525252525150515050505050504E - 4E4E4D4D4D4D4C4C4C4C4B4B4B4A4A4A49494949484747474747464545454545 - 4445444343434242424040404040404040404141403F40403E3E3E3E3E3D3D3D - 3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3938383938383838383737373736353536 - 35363636353434342C2C2C2C2C2C2B2A2B2A2A2A2A2A2B333232333334333433 - 323233323231323231313131323130302F2F312F3030302F2F2F2F2F2E2F2F2F - 2E2F2F2F2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2D2D2C2C2B2B2C2B2B2C2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2D2D2D2D2D2D2D2D2D2C2D2C2D2C2C - 2C2B2B2A2A2A2828282827282828282728282727272727272727272727272726 - 2626272626262627272627272627262626262626252526262527262627262627 - 2526262526262525262526252625252525252425252424242424242424242424 - 2424242424232423232424242424242424242424242424242424242423232324 - 2323232223222223222123212122212122222122212121212121212120202020 - 202020202120202020201F1F20201F1F1F20201F1F1F201F1F1F1F1F1F1E1F1E - 1E1E1F1E1F1E1E1E1E1E1E1E1D1D1E1E1D1E1E1E1D201F1F1F1F1F1F1F1F1F1F - 1F1F1E1E1C1D1C1B1C1B1B1B1B1B1B1B1B1A1B1A1B1A1B1B1A1A1A1A1A1A1A1A - 19191A191A1A1919191919191919191818191818191817181818181717181717 - 1817171716161716171616161616161616161615151616161515151516161515 - 1615151515141514151414151414141412121211111111111111101110101110 - 10111010111111111A1A1A2525242626262B2B2A2E2E2E323232343535303031 - 0E0D0D0D0D0E0E0D0D0D0D0D0D0D0D0D0D0D0C0D0D0D0C0D0C0C0D0C0C0C0C0B - 0B0C0B0C1E1E1E0C0C0C30303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303131313838383E3E3E3F3F3F3F3F3F3F3F3F3F3F - 3F4040404040404040404040403E3E3E3535352F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F333233363535323232 - 2F2F2F2F2F2F2F2F2F3030303030303131313939394646464B4B4B5050505555 - 555959595A5A5A3F3F3F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D3333 - 333535353535353737373838383535352B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2E - 2E2E333333333333343434343434343434343434343434343434353534353534 - 3534343534343635353635353736363736363736363736363837373837373838 - 383838383838383939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B38383838 - 38383A3A3A3B3B3B3C3C3C4F4F4F5454545959595E5E5E6262623F3F3F404040 - 4141414141414242424343434444444444444646464646464646464747474848 - 484848484949494949494949494949494A4A4A4A4A4A49494949494948484848 - 4848474747474747464646464646464646454545444444454545444444454545 - 4545454545454646464646464646464646464646464747474747474848484949 - 494A4A4A4B4B4B4C4C4C4D4D4C4C4D4D4D4D4D4E4E4E4D4D4D4E4E4E4F4F4F4F - 4F4F4F4F4F4E4E4E4F4F4F515151545555555555565656565656525151494A4A - 4848484848484747474646464F4F4E4E4E4E4D4C4C4C4C4C4C4C4C4C4C4B4A4A - 4B4B4A4A49494849484748484747464646454444444444444343434241414241 - 41414040403F3F3F3F3F3F3E3E3E3D3D3D3D3D3D3C3D3C3B3B3B3B3A393B3B3A - 3939393A38393938373838383837373637363535353535353534353534353334 - 333333342D2D2D2B2B2B2929292929292929292C2C2C32313232313131313131 - 313131313031313030302E302F2E2F2E2E2F2E2E2F2E2F2E2E2E2E2E2E2D2D2C - 2C2C2C2D2C2D2D2D2D2D2D2D2D2D2C2D2D2C2D2D2B2C2B2C2C2B2B2C2B2B2B2B - 2B2B2B2B2B2B2A2A2A2A2A2A2A2C2B2B2D2D2D2D2C2D2C2C2C2C2B2B2B2B2B2B - 2B2B2B2B2B2A292A272828272626272626262726262626262626272726262726 - 2627262626262626252727262726252626252726252626252625252726262626 - 2626262626252526252526262525252525252525252525242524242425252425 - 2525252425252524252424242425242424232424242324242424232423242323 - 2323222322222322212222212222212222212221212121212121212021212120 - 202020202020202020201F1F201F201F1F1F201F1F1F1E1F1F1E1F1E1F1F1F1F - 1E1E1F1E1E1E1E1E1E1E1E1D1E1E1E1E1F1F1F1F201F1F1E1F1F1F1F1F1F1D1D - 1B1C1B1C1B1B1C1B1B1B1B1B1B1A1B1A1A1B1A1B1A1A1B1A1A1A1A1A1A191A1A - 1A1A19191A1A1919191919191918181818181719181719171819181718171717 - 1716171616161717161617161616161616151516161516161515161615151516 - 1415151515141414141514141415141213121011111111111011111110111010 - 11101011111112191A1A2726262C2C2D3232323636363939392929290E0E0D0D - 0E0D0E0E0E0D0E0D0D0D0D0D0D0D0D0D0D0C0D0D0D0C0C0C0C0C0C0C0C0C0C0C - 1E1E1E0B0C0B3030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303232323939393F3F3F3F3F3F3F3F3F3F3F3F - 4040404040404040404040404040403F3F3F3837383030302F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F3030303030303131313838384646464B4B4B4F4F4F5353535757575A5A5A - 3F3F3F2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2F2F2F333333 - 3434343535353737373838382B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B3131 - 3132323232323233333333333333333333333333333333333334343334343334 - 3333343333343333353434363535363535363535363535363535363636363636 - 3737373737373737373939393939393939393A3A3A3737373535353636363737 - 373737373C3C3C4D4D4D5252525757575B5B5B5D5D5D3C3C3C3C3C3C3E3E3E3E - 3E3E3F3F3F404040414141414141424242434343434343454545454545454545 - 4545454646464646464646464646464545454545454545454545454444444444 - 4444444443434342424242424242424242424241414142424241414141414142 - 4242424242424242434343434343434343444444444444454545454545464646 - 474747484848494948494948494A494A4949494A4A4B4B4A4A4A4B4A4A4A4B4B - 4B4B4B4B4A4A4A4C4C4C4F4F4F50504F51515151515150505145454544454445 - 4544434343434343454545474747484747474747464646464646474747474847 - 464646454544444443444443444343424141424040403F3F3F3F403E3E3F3F3E - 3E3D3D3D3C3C3C3C3C3C3C3C3C3B3B3A3939393A393938383738383739383838 - 3737373637373635353434343534343434343435343434333232333333313131 - 2F2F2F2A292A292929292A292829292828282F2E2D3030313031313030303130 - 302F2F2E2F2F2E2F2E2D2F2E2E2F2D2D2F2D2E2E2D2D2C2C2C2C2C2C2D2C2D2D - 2C2C2D2C2C2C2C2C2C2C2C2C2C2B2C2C2B2C2C2B2C2A2B2C2A2B2B2B2A2A2A2A - 2A292A2A2A2A2A292A2A29292A29292B2B2B2B2B2B2C2B2C2C2C2B2C2A2A2B2A - 2A2A2A2A2A2A2928292927272726252626262626262626262626262525262526 - 2626262625262625262525272626272626262626262525262525272626262625 - 2626252626252525262525252525252525252625252626262626262626262625 - 2526252525252524242424242425242424242424232423232324232323232223 - 2322232222232222232221222122222121222121212121212021202021202021 - 2020212020202020201F201F201F201F1F1F1F1F1F1F1F1F1F1F1E1E1F1F1E1F - 1E1E1E1E1E1E1E1E1E1E202020201F1F1F1F201F1F1F1F1F1F1D1C1C1C1B1C1C - 1B1C1B1B1B1B1B1B1B1B1B1A1A1B1B1B1A1B1A1B1B1A1A1A1A1A1A1A1A1A1A1A - 19191A1919191A19191918181918181918181818171817171817171817171717 - 1617161617171716161716161616161615161615161515151516151615151515 - 1515151515151515141414141414131313111111101111101111111011101011 - 1111121414152A2A2A2F2F303435343939393E3E3E1D1D1D0E0E0E0D0E0D0D0D - 0E0D0D0D0D0D0D0D0D0D0D0D0D0C0C0D0D0D0C0C0C0C0C0C0D0C0C0C1B1E1E0B - 0C0B303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303232323A3A3A3F3F3F3F3F3F3F3F3F40 - 40404040404040404040404040404040403F3F3F3A3A3A3131312F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3030 - 303131313535354646464B4B4B4E4E4E5353535656565A5A5A4646462D2D2D2D - 2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B31313132323233 - 33333535353636363232322A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C313131 - 3131313131313131313232323232323232323232323232313232313332323332 - 3233323233323234333334333335343435343435343435343434343435353536 - 3636363636373737373737373737373737363636343434343434343434353535 - 3C3C3C4B4B4B5050505454545858585353533939393A3A3A3A3A3A3A3A3A3C3C - 3C3D3D3D3D3D3D3E3E3E3F3F3F40404040404041414142424241414142424242 - 4242424242424242424242424242424242424242424242414141414141404040 - 3F3F3F4040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E - 3E3F3F3F40404040404040404041414141414142424242424243434343434343 - 4343444444454545464645464646474747484748474647464646464646464647 - 4646474647464B4B4B4C4C4C4C4C4C4E4E4D4F4E4F4243434141414242414041 - 403F403F3E3F3E3E3E3E3D3D3D3D3D3D3C3C3B3C3C3C3A3A3A393939393A3A39 - 39393A3A3A3A3A3A3A3A3A3939393A3A3A383938383838393839393838383838 - 3838383939393838383838383938383838373737373737363736363635353535 - 3535343434343333333333343332333232323231313130313130302F302F302B - 2C2B2828282828272727272727272928293030302F2F302E2E2E2E2E2E2E2E2E - 2E2D2D2D2E2D2D2E2D2D2D2C2D2D2C2C2B2B2C2B2B2C2C2C2C2C2C2B2C2C2B2B - 2B2B2B2B2B2C2B2B2B2B2B2B2A2B2A2A2A2A2A2A2A2A2A29292A292A29292929 - 29292929282828292828282828282929292B2A2B2B2B2B2A2A2A2A2A292A2A2A - 2929292929292929292928282828272626272525252525252625252626252625 - 2426262527262526252527262626252626252626252526252526262626252626 - 2525262625262626272727272727272726272727262626272626262626262524 - 2525252525242524252425242424242424242323242323232423232323222323 - 2223222223222123212122212222212222212121202021212121212020202021 - 20202020201F1F1F1F1F20201F1F201F201F1F1F1F1F1E1F1F1F1F1F1E1E1E1E - 1E1E1E1F1F1F202020201F1F202020201F1F1E1E1E1C1C1C1C1C1C1C1C1C1B1B - 1C1B1B1C1C1B1B1B1B1B1B1B1B1B1B1A1A1B1A1A1A1A1B1A1B1A1A1A1A1A1A19 - 1A191A1919191818191818191818191818181818181717181718171717171717 - 1616161717161716171616171616161616161515161615151516151515151515 - 1515151515141514151514141513131311111110101111111110101111121219 - 19192C2C2C3232323938393D3D3E4141411111110E0E0E0E0E0E0D0E0D0D0D0E - 0E0D0E0D0D0D0D0C0D0D0D0D0C0C0D0C0C0D0C0C0D0C0C0C1E1E1E0C0C0C3030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303434343B3B3B3F3F3F4040404040 - 404040404040404040404040404040404040404040403B3B3B3434342F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030313131353535 - 4545454A4A4A4E4E4E5252525555555959594848482D2D2D2C2C2C2C2C2C2B2B - 2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2929292929292D2D2D3131313232323333 - 333535353535352929292929292929292929292A2A2A2A2A2A2F2F2F30303030 - 3030303030303030313131313131313131313130313130313130313131313131 - 3131313131313231313232323232323332323332323232323232323232323434 - 343434343535353535353535353333333232323333333333333232323B3B3B4A - 4A4A4D4D4D515151565656505050363636363636373737383838393939393939 - 3939393B3B3B3B3B3B3B3B3B3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3F3F - 3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D - 3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D - 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F4040404040404040 - 4041414142414242424143434243434343434343444442424242424243434442 - 42424747474747474848484949494A4A494343443D3D3D3D3E3E3D3C3C3D3D3C - 3B3B3B3B3B3B3A3A3A3939393838383838373838383737373737363636373536 - 353434343434343434343333323132323031313031302F2F2F2F2F2F2E2E2E2F - 2F2F2F2F2F2E2D2E2E2E2F2F2F2F363535353634343434343333333333333333 - 3333333333323232313031303130302F2F2F2F2F2F2F2F2F2F2E2E2E2D2D2726 - 282626262726262626262626262A2A2A2E2E2E2E2D2E2E2D2D2D2D2D2D2D2D2C - 2D2C2D2D2C2C2C2B2B2B2A2B2A2A2C2B2A2B2A2A2A2B2B2B2B2A2B2B2A2A2A2B - 2B2A2B2A2A2B2A2A2A2A2A292A29292A29292A29292929282928282828282828 - 282827282828282727282727272727272928282A2A292A292929282929292929 - 2828272828272828282828292929282828272727282727272625272627272525 - 2625252726262626262626262726262627262827262828282828282929282829 - 2829282828272728272726262727262727262726262626262726262525252524 - 2525252525252424242425242424242424242424232424242423232322232322 - 2222222322222221222221212221222221212121212121202020212120212020 - 202020201F201F201F201F1F1F1F1F1F1F1F1F1E1F1F1F1F1F1E1F1F20201F20 - 201F2020202020201F20201F1F1F1C1C1C1C1C1C1C1C1C1B1C1C1C1B1B1B1C1B - 1B1B1C1B1B1B1B1B1B1B1B1A1B1B1B1A1B1B1A1A1A1A1A1A1A1A191A1A191A19 - 1919191919181819181818181819171719181818171818171717171717161717 - 1716171616161616161716161616161616151515161516151516151515151515 - 1514151514151414141414131111111111111110111212121212132120202E2F - 2E3435353A3A3A4140413232320E0E0E0E0E0E0E0E0E0E0D0E0E0D0D0D0D0D0D - 0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0D0C0C0C0C1E1E1E0C0C0C303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303434343C3C3C404040404040 - 4040404040404040404040404040404040404040404040403E3E3E3837383131 - 312F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3030303131313232324444444949494E - 4E4E5252525555555858584E4E4E2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A - 2A2A2A2A2A2A2929292929292929292929292929292929292929292929292929 - 2929292929292929292929292929292929292929292929292929292929292929 - 29292929292828282828282828282828282929292F2F2F303030313131333333 - 3333333030302828282828282828282828282929292A2A2A2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F302F2F30 - 2F2F302F2F302F2F313030313030323131313131313131313131313131313131 - 3131313030302F2F2F2F2F2F2F2F2F3030303131313131313C3C3C4646464B4B - 4B4F4F4F53535344444434343434343435353535353535353536363637373738 - 38383838383838383A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C - 3C3C3C3B3B3B3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3939393A3A - 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B - 3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E - 3F3F3F3F3F3F3F3F3E3F3F3F3E3F3F3F3F3F3F3E3E3E3E3E404040403F3F4241 - 414444444444444646464747474545453B3B3B3A3A3A3A3A3A3A393938383838 - 3737373737373737363636353534353535353435333434333333333333333333 - 3232323131313030303030302F2F2E2E2E2E2E2D2D2E2E2D2C2C2D2C2C2C2C2C - 2C2B2B2B2B2B2B2B2B2A31313132323232323232323232323232323231313131 - 31313030302F2F2F2E2F2F2F2E2E2E2E2E2E2E2E2D2C2C2C2C2C2A2A2A252425 - 2525252625252424242324242B2A2B2D2C2C2C2D2C2C2D2D2C2D2C2C2C2C2A2B - 2A2B2B2A2B2B292A2A2A2A2A2A2A2A2A2A2A2A292A2A292A29292A29292A292A - 2A2A292929292928292928292927292928282827282727282728272727262726 - 2727262726262627272726262626262526262727262828272828272827272727 - 2727272728282827282728282828282728272728262728282827282729282928 - 2928292A29292928292828292929282829282829292929292929292929292928 - 2828272927272827272727272627262627272626262525262525252425252524 - 2524242425242524252424242424242423242323232323242323232223232222 - 2222232222232222232121222121212020212121212121212021212020202020 - 20201F1F2020201F201F1F1F1F1F1F1F1F1F1F1F1F1F1F1E21202021201F2020 - 1F20202020201F1D1E1E1C1C1C1D1D1D1D1C1C1C1C1C1C1C1C1B1B1C1C1C1C1C - 1B1C1B1B1B1B1B1B1B1B1B1A1B1B1A1A1A1A1A1A1B1A1A191A1A1A1A19191919 - 1919191918181918181918181918171817171817171717171717171617171717 - 1616161617161716161616161616161615161516151515151615151515151515 - 1415151415131313121211111111111111121212151415292929313131383838 - 3E3E3D4343432323230F0E0E0F0E0E0E0E0E0E0E0E0E0E0D0E0E0D0D0D0D0D0D - 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C1E1E1E0C0C0C30303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303232323A3A3A40404040 - 40404040404040404040404040404141414141414141414141414141413C3C3C - 3535352F2F2F2F2F2F3030303131313333334242424949494D4D4D5151515656 - 565858585151512F2F2F2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292929292929 - 2929282828282828282828282828282828282828282828282828282828282828 - 2828282828282828282828282828282828282828282828282828282828282828 - 282828282828282828282828282828282B2B2B2F2F2F30303031313132323233 - 33332828282727272727272727272727272828282D2D2D2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2E2F2F2E2F2E2E2F2E2E2F2E2E2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F302F2F2F2F2F2F2F2F2D2D2D2D2C2D2C2C2C2C2C2C2C - 2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E3030303939394444444A4A4A4E4E4E - 5151514242423131313232323232323333333333333434343434343535353535 - 353636363737373737373737373838383939393939393838383939393939393A - 3A3A393939393939383838383838383838383838383838383838383838383838 - 3838383838383838387C7C7C9393939393938C8C8C6E6E6E4040403838383939 - 393939393939393A3A3A3939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C - 3C3C3C3C3C3D3D3D3C3C3C3C3D3D3B3C3B3B3B3C3C3C3C3B3B3B3C3C3C414141 - 4141414242424343434343433938393737363738383737373636363635353534 - 343434343333333232323232323232323232323132313030302F2F2F2F2F2F2E - 2E2E2D2D2D2D2D2D2D2C2D2D2D2D2C2C2C2B2C2B2C2C2C2A2B2A2A2A2A292929 - 292929292A2A2A2B2B313030313030303030313030313030302F2F2F2F2E2E2E - 2D2D2D2E2D2D2E2E2D2D2D2E2E2C2C2C2B2C2C2B2C2C2B2B2C27262624242423 - 23232323232323232525252C2B2B2C2B2C2B2B2B2C2C2B2A2A2A2A2A2A292929 - 2929292A2A292929292929292A2A292A29292928292928292829292829292929 - 2828282828282828282728282628282628262727262627262626262626252625 - 2526252526252625252525252525252525252525252526272725272626262626 - 2727272726272626272827272727262827272727272828282828282828282828 - 292929292928282929292928282928282828282A292929292929282929292828 - 2827282727272727272626262626262626262526252525252525252525242525 - 2524242424242424252424242424242423242424232323232423222323222322 - 2123222223212122222122212121202121212021212021202120202020202120 - 20201F1F1F201F1F201F20201F1F1F1F1F20201F201F2020201F21201F20201F - 1F1F1F1D1C1C1C1C1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1C1C1C1C1C1B1B1C1B - 1B1B1B1B1B1B1B1B1A1B1A1A1A1A1A1A1B1A1A1A1A1A1A1A1A1919191919191A - 1918191918191818191818181818181718181717171717171717171717171717 - 1616161616161616161615151616161516151516161515151515151515151415 - 1512111311111212111111111112121219191A2C2D2D3232323A3A3A3F3F3F45 - 45451212120E0F0E0E0F0E0E0F0F0E0E0E0D0E0E0E0E0E0D0D0D0D0D0D0D0D0D - 0D0D0D0D0D0D0D0D0C0C0D0D1E20200D0C0D3030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303232323939393F3F - 3F40404040404041414141414141414141414141414141414141414141414140 - 40403B3B3B3636363232324141414949494C4C4C515151565656585858515151 - 2F2F2F2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2929292929292828282828282828 - 2828282827272727272727272727272727272727272727272727272727272727 - 2727272727272727272727272727272727272727272727272727272727272727 - 2727272727272727272727272727272D2D2D2E2E2E2F2F2F3030303131312E2E - 2E2626262626262626262626262626262828282D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C - 2B2B2B29292A2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2C2C2C2C2C2C2E2E2E3A3A3A4343434747474B4B4B4F4F4F3D - 3D3D2F2F2F303030303030323232323232323232333333333333333333343434 - 3434343434343535353636363636363636363535353636363636363636363636 - 3636363636363636363637373736363636363635353535353535353536363636 - 3636363636B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B9B9B3E3E3E363636363636 - 3737373737373737373737373838383838383838383939393939393939393939 - 3939393939383939393939393939393939393A3939393938383C3C3C3E3E3E3F - 3F3F4040404141403D3D3D3B3C3B3A393A383838383838363636343334323232 - 3232323232323232323131312F303030303030302F2E2E2E2D2D2D2D2D2D2D2D - 2D2C2C2C2C2B2B2A2A2B2A2A2A292A2A29292A29282928282828282828282828 - 28282828272E2E2E2F2F2E3030302F2E2E302E2E2E2D2D2D2D2D2D2D2D2D2D2C - 2C2C2D2C2C2B2B2B2C2B2B2C2B2B2B2B2B2B2B2B2B2828292423242423242423 - 232423232323232626252B2B2B2A2A2A292A2A2A292929292929292929292929 - 2929292928292929292828292828292828282828282827272827282827272727 - 2727272727272727272727262626262626262726262626262626262526252626 - 2525252525252525252524252524252525252524252424252425252526252526 - 2625262626262726262626272726272626282727282828282828282828282828 - 2929292929282929292A28292829292A2A292929292929292827282728272726 - 2726262626262626262625252625252626252525252525252525252524252424 - 2525252524242424242424242424242423242423242323232322232322232222 - 2222212222212221212222212221212121212120212120212020202120202020 - 202020201F201F1F201F20202020202020202021201F201F2020201F1D1E1D1D - 1D1D1D1D1D1C1C1D1D1D1C1C1C1D1C1C1C1B1C1C1C1C1C1C1C1B1C1C1B1C1C1B - 1B1B1B1B1B1B1B1B1B1A1B1A1B1A1B1A1A1A1A1A1A1A19191A19191A18191918 - 1819191819181819181818171818181817181717171717161716161716161616 - 1616161616171616151616161615151515151515161615151516141414121212 - 1211121211111212121414142222222F2F2F3635353D3D3C4343423434340F0F - 0F0F0F0F0E0F0E0E0E0E0F0E0E0E0E0E0E0E0D0E0D0D0E0D0E0D0D0E0D0D0E0E - 0D0D0D0D0D0C0C0C1E20200D0C0C303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030313131373737 - 3F3F3F4141414141414141414141414141414141414141414141414141414141 - 414343434444444848484C4C4C5151515555555858585757573535352C2C2C2B - 2B2B2B2B2B2A2A2A292929292929282828282828282828272727272727272727 - 2727272727272626262626262626262626262626262626262626262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 26262626262626262626262828282D2D2D2E2E2E2F2F2F303030313131272727 - 2525252525252525252525252525252A2A2A2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2A2A2A2A292929292929292928282927272727272727272727272728 - 28282828282828282828282828282929292929292A2A2A2A2A2A2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2E2E2E3C3C3C4343434848484B4B4B4E4E4E3636362E2E - 2E2E2E2E2E2E2E2E2E2E2F2F2F30303031313131313131313132323232323232 - 3232333333333333333333333333343434343434343434343434343434333333 - 3434343434343434343333333333333434343434343434343434343535353535 - 35B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B595959535353535353535353535 - 3535353535353535363636363636363636363636373737373737373737373737 - 3737373636363737373536353635353536363636363839383B3B3B3D3D3D3E3E - 3E3E3E3E3E3F3F40404041404141404040403F403F3F3E3F3E3F3E3E3E3E3E3D - 3D3D3A3A3A3A3A3A3939383636373535353534353334333030313030302E2E2F - 2C2C2C2A2A29292A2A2828282828282828282727272727272727272727272626 - 262929292F2F2E2E2E2D2D2D2D2D2D2D2D2D2C2D2C2C2C2C2C2B2B2B2B2B2B2B - 2B2B2A2B2A2B2A2A2A2A2A2A2A2A292929292929272727222123232222222222 - 2222222222222626262828292828292828292828282929292929292929282929 - 2829282829282828282729272728272727262727272727272727272727272727 - 2727272727272726272726262625262626262525262525252525252524252524 - 2425252424242424242424242423242424242423232423232424242423232423 - 2424242426252526252626262627262628272628282828282829282828282829 - 2928282828282928282828272828282828282727272727272726272627262726 - 2626262626262626262626262626252626252626252525252525252425252424 - 2424242524242424242424242424232424232323232323232223232223222123 - 2221232122222221222121222120212121212020202020202120202021201F1F - 1F201F21201F202020212020202020201F1F2120201F1F1E1E1E1D1D1D1D1D1D - 1D1D1C1D1C1D1D1C1D1D1C1C1D1C1C1C1C1B1C1C1C1C1B1B1B1B1C1B1B1B1B1C - 1B1B1B1B1B1A1A1B1A1B1B1A1A1A1A1A1A1A1A1A1919191919181A1919191918 - 1919181918181818181818171718181717171717171717171717161616161716 - 1716161616161616161616161516151615151515151613131312121212121212 - 11111212131516152B2B2B3132323839383F3F3F4444442324230F0F0F0F0F0F - 0E0F0E0E0E0E0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0E0D0D0D0D0D0D0D - 0D0D0C0D2020200D0D0D30303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303035 - 35353C3C3C414141414141414141414141414141414141424242434343454545 - 4747474B4B4B5050505454545858585656563535352C2C2C2C2C2C2B2B2B2A2A - 2A2A2A2A29292928282828282827272727272727272726262626262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 2626262626262626262626262626262626262626262525252525252525252525 - 252525252525252525252B2B2B2C2C2C2D2D2D2F2F2F3030302E2E2E25252525 - 2525252525252525252525262626272727272727272627272627262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 262727272727272727272727272727272929292929292A2A2A2B2B2B2B2B2B2F - 2F2F3434343A3A3A4040404343434747474A4A4A4C4C4C3434342C2C2C2C2C2C - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F3030303030303131 - 3131313131313131313131313131313132323231313132323232323232323232 - 3232323232323232313131313131323232323232333333323232323232535353 - 3232323A3A3A848484B6B6B6B6B6B6B6B6B65454543333333333333333333434 - 3434343433333333333333333334343434343434343434343435353534343334 - 34343434343434343433343433343433343534353A3A3A3B3A3B3B3B3B3C3C3D - 3D3D3D404040404040403F403F3F3F3F3F3E3E3E3E3E3E3E3E3D3D3D3D3D3C3C - 3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B39393939383938373738373737373737 - 37373535353535353232313030302A2A2A262626262626262626252525252425 - 2B2A2A2D2D2B2D2C2C2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2B2A2A2B2B - 2B2A2A2A292A2A29292929292929292929292825242522222222212222212121 - 2121212121272727292928292928282928292829282828282828282827282827 - 2727272727272826272727272727272726272726272727272726262627272626 - 2626262626262526262525252525252426252425242424242424232324242424 - 2323242323232323232323232323232323232323232323242322232323232222 - 2423232423242424242424242525252425252626262727262626272828282727 - 2728282827272728272729282728272728272727272727272627272726262626 - 2727262626262626262626262526252526252526252525252525242524252425 - 2524252524242424242424242424242424242324232423232323222322222322 - 2122212122212122222122212121212121202120202021202021202020202020 - 20202121202120212020202020202020201D1D1D1D1D1D1D1E1D1D1D1E1D1D1D - 1D1D1D1D1C1C1D1C1C1C1D1D1D1C1C1C1C1C1C1B1C1B1C1B1B1B1C1C1B1B1B1B - 1B1B1B1B1B1A1B1B1B1A1A1A1A1A1A1A1A19191A19191A181919181919181819 - 1818191818181818181818181718171717181717171716171717161716161617 - 1616171616161616161616161516151616151212121212121212121213131414 - 141C1C1C2E2E2E3434343B3A3B4140414342421213130F0F0F0F0F0F0F0F0F0E - 0F0E0E0F0E0F0F0F0E0E0F0E0E0E0E0E0D0E0E0E0E0E0E0E0D0D0E0D0D0D0D0D - 2020200D0D0D3030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303232323939393F3F3F4141414242424242424343434444444646464949494E - 4E4E5353535656565858583939392D2D2D2C2C2C2B2B2B2A2A2A2A2A2A292929 - 2828282828282727272727272626262626262626262525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252727272C2C2C2D2D2D2E2E2E2F2F2F3030302727272424242424 - 2424242424242424242424242424242424242425252525252525252525252525 - 2525252525252525252525252525262626262626262626262626262626262626 - 2727272828282828282828282828282B2B2B2F2F303535353838383A3A3A3A3A - 3A3D3D3D4040404444444646464949494B4B4B2A2A2A2B2B2B2B2B2B2B2B2B2B - 2B2B2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F - 2F2F2F2F2F2F3030303030303030302F2F2F3030303030303030302F2F2F3030 - 3030303031313130303031313131313131313131313131313131313131313131 - 3131313131A7A7A7B8B8B8B8B8B87D7D7D313131313131313131313131313131 - 3131313131313232323232323232323232323232323232323232323333333232 - 323232323131313131313130313031313738383939393A3A3A3B3B3B3C3C3C3F - 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3F3E3E3D3C3D3C3C3C3C3C3D3C3C3C3C - 3C3C3C3B3B3B3A3B3A3A3A3A3A3A3A3838393838393737383636363434343333 - 333333333333333333332F302F2424242424242524252424242424242424252C - 2B2B2C2C2C2C2A2B2B2B2A2C2A2A2B2A2A2A2A2A2A2A2A2A2A29292929292829 - 2828282928292828292828282827282727272323232020212020202021202020 - 2020202027272628282827282827272727282727272727272727272727272727 - 2727272727272626272627272625262526262625252526262526262525262525 - 2425252525242525242525242424242424242424242424232424242324242323 - 2324232323232323232322232323232222232223232223232223222224232324 - 2323242424242423242425252525252425262526272627262726272727272727 - 2828282827282727272828272827282827272727272726272627262726262626 - 2626262626262626262626262526262525252525252525242525252424242524 - 2424242424242424242424232424232424232323232322232322232222232221 - 2222212321222221212220212121212120202120212020202121212121212120 - 212020212020202020201E1E1E1D1E1D1E1E1D1E1D1D1D1E1D1D1D1D1D1D1D1D - 1D1D1D1D1C1C1C1C1D1C1C1C1C1C1B1C1C1C1C1C1C1B1B1C1C1C1B1B1B1B1B1B - 1A1B1B1A1B1B1B1A1A1A1A1A1A1A191A19191A18191A19191A18181918191918 - 1818181818181718181817171717181717171717171717171717161616171716 - 1616161616161616151616151515121312121213121212131313151514242425 - 3231313737373E3E3E4243433231320F0F0F100F0F0F0F100F0F0F0F0F0F0E0F - 0E0E0F0E0F0E0E0E0E0E0E0E0E0E0E0D0D0E0E0D0D0D0D0D0E0D0D0D2020200D - 0D0D303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303535353B3B3B4242424343434545454747474B4B4B4E4E4E5454 - 545757573E3E3E2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A29292928282828282827 - 2727272727262626262626252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 25252525252A2A2A2B2B2B2C2C2C2E2E2E2E2E2E2D2D2D242424242424242424 - 2424242424242424242424242424242424242424242525252525252525252525 - 252525252525252525252525252525252626262626262626262727272727272A - 2A2A2D2D2E3232323636363838383939393939393A3A3A3C3C3C3C3C3C3F3F3F - 4242424444444747474848484949492929292929292A2A2A2A2A2A2B2B2B2B2B - 2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D - 2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3030 - 306D6D6DBABABABABABA97979730303030303030303030303030303030303030 - 30303030303030303030303030302F2F2F303030303030303030303030303030 - 2F2F2F2F2F2F2F2F2F2F2F2F3232323838383939393B3A3A3D3D3D3F3F3F3F3F - 3F3F3F3F3E3E3E3E3E3E3D3E3E3E3E3E3D3E3E3C3C3D3C3C3C3B3B3B3B3C3B3B - 3B3B3B3B3B3A3A393A3A3939393A383939363737353636343434333433323232 - 3232323131313131312828282423232324242324232323232323232626262B2A - 2A2A2A2A2A2A2A2B2A2A2A2A2A2A2A2A29292929292928292928282928292928 - 2828282828282828282828272727252525212120202021202020202021202120 - 2121212828272827272728282828272827272727272727272727262627262626 - 2627262627252626252526252525252525252525252525252525252525252525 - 2525242524252424252524242423242323242323232323232223222223222322 - 2222222222222222222323232223222222222323222323222322222323232423 - 2224242325252424242425252526262627262727272728282727272828282828 - 2828282828282827292828282727282727272627272726272726272626262626 - 2626262626262625252526252526262625252525252525252524242525252524 - 2425242424242424242424242423232323232323232223232223222223222222 - 2121222121222121222121212121212120222122222121212121212121212021 - 2020211F1F1E1E1E1F1E1E1E1E1D1E1D1E1E1D1D1D1D1D1D1D1D1D1C1D1D1D1C - 1C1C1C1D1C1C1D1C1C1C1C1C1C1C1B1C1B1B1B1C1C1B1B1B1B1B1B1B1B1B1B1B - 1A1B1B1B1B1B1A1A1A1A1A1A19191A19191A19191A1919191819191818191818 - 1818181817181718171818171817171717171717171717161616171616161616 - 1716161616161613121313121212131212121213131318191A2C2C2C34333439 - 3A3A4040414645461E1E1D100F100F100F0F0F0F0F10100F0F0F0F0F0F0F0F0E - 0F0E0F0F0F0E0E0E0E0E0E0E0D0E0E0D0D0E0D0D0E0D0D0E2020200D0D0D3030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303636363E3E3E4848484C4C4C4F4F4F5353533F3F3F - 2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A2A2A2A2929292828282727272727272626 - 2626262625252525252525252525252524242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242626262B2B2B2C2C2C2C2C2C2E2E2E2F2F2F26262623232323232323232323 - 2323232323232323232323232323242424242424232323252525252525252525 - 2525252525252626262626262727272A2A2A2E2D2E3232323535353535353737 - 373737373838383A3A3A3A3A3A3C3C3C3D3D3D3D3D3D3F3F3F40404043434344 - 44444646464747474242422929292929292929292929292929292929292A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E525252 - BCBCBCBCBCBCAAAAAA2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2E2E2E2E2E2D2E2E2E2E - 2E2D2E2E2E2D2D2D2E2E2D2F2F2F303030333333343435353536383838393939 - 3939393839393E3E3E3E3E3E3C3D3D3C3D3C3C3C3C3C3C3D3B3B3C3B3B3B3B3B - 3B3B3B3B3A3A393A393A3838383738383535353332323131313030303030302F - 2F2F2F2F2F2E2E2D2323232424232322222222222222222323222929282B2A29 - 2B2A2A2A2A2A2928282828282828282828282828282828282728282827282727 - 272626272626262626262626262324241F202020202020202020202020202021 - 2121272726272727262727272626272626262626272727272626272726272725 - 2626252625252625252625252425252425242524242524252424242424242424 - 2424242424242424242324232324232324232323232323232323232322222322 - 2223222222222222222222222222222322222222232322232222232323242323 - 2423232524242625252626262525262727272827272827282828282828282827 - 2829292828282729282728272728272727272727272727262727272726272626 - 2626262626262526262625252525252525252524252425252425242524252425 - 2424242424242424242323242324242324232323222323222222212322222222 - 212221212221212221212222212122222121212122212121212120211F20201E - 1E1F1F1E1E1E1E1E1E1E1E1D1E1D1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D - 1C1C1C1D1C1D1C1D1C1C1C1C1C1C1B1C1C1C1B1B1C1C1B1B1B1B1B1B1B1B1B1B - 1B1A1A1A1A1A1A1A191A1A19191A19191A191819191919181819191818181818 - 1818171817181718171717171718171717171717161617161616161717171616 - 1515151313121313121212131414141515152021212F2E2F3636373D3D3D4344 - 443F3F3F1010100F100F10100F100F0F0F0F100F0F0F0E0F0F0F0F0E0F0F0E0F - 0F0F0F0E0F0E0E0F0E0E0E0E0E0E0D0E0D0D0D0D2023230D0D0E303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303232323A3A3A4444444242422E2E2E2D2D2D2D - 2D2D2C2C2C2B2B2B2A2A2A292929282828282828272727262626262626252525 - 2525252525252424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2929292B2B2B2B2B2B2D2D2D2E2E2E2C2C2C2323232323232323232424242424 - 242424242424242424242424242424242525252525252626262929292D2C2D2F - 2F2F313131343434343434353535363636363636373737383838383838393939 - 3A3A3A3B3B3B3C3C3C3D3D3D3E3E3E4040404040404242424343433E3E3E3434 - 342D2D2D27272728282828282828282828282828282828282828282828282828 - 28282929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D515151BEBEBEBE - BEBEBEBEBE2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2A2A2A29292929 - 29292929292929282828282929292C2C2D2C2C2C2B2C2B2E2E2E313131313031 - 3031313434343434333332333131313332333030302E2E2E2E2E2E2E2E2E2E2E - 2E2F2F2F2828282222222222222222222223222222222424242A292929292829 - 2829292928292829282829282828282828282828272828272627262726272626 - 2626262626262626262626252323231F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2121 - 2127272627262727262726272726262626262626262626262525262525252525 - 2525252525262525262525252525242525242525252524242424242524242423 - 2424232323232423232322222322222322222222222222222222222222222222 - 2222222222222122212222222223232222222223232223232224232325232425 - 2424252424252525262626272727262726282728292828282828282728292928 - 2929282828272828272828272827272727272727262627262726262626262626 - 2626262526262625262626252626262525242525252425252424242525242524 - 2424242424242424242324242324232323232322232322222222222222222221 - 2221212222212222222222212222222221222121212020201F1F1F1F1F1E1F1E - 1E1E1E1E1E1E1E1E1E1D1E1D1E1D1E1D1E1D1D1E1E1E1E1D1D1D1D1D1D1D1C1C - 1D1C1C1C1C1C1C1C1C1C1C1B1C1C1C1B1C1C1B1C1B1B1B1B1B1B1B1B1B1B1B1B - 1B1A1A1B191A1A19191A19191A19191A19191A19191918181819181818181718 - 1818181818181717171717171817171717171716171716171617161614151413 - 13131213131312131314131616172C2C2C3333333939394040404545452B2C2B - 1010101010100F1010101010100F10100F100F0F0F0F0F0F0F0F0F0F0E0F0E0F - 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0E0E2020200D0D0E30303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B - 2B2B2B2B2A2A2A29292928282827272727272726262625252525252525252524 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424242424242424242424242424242626262A - 2A2A2B2B2B2C2C2C2D2D2D2E2E2E262626242424252525252525272727272727 - 2A2A2A2C2B2C2D2D2D3030303030303333333333333333333434343636363636 - 363636363737373838383838383939393939393A3A3A3B3B3B3C3C3C3C3C3C3D - 3D3D3F3F3F3F3F3F4040403F3F3F363636303030272727262626262626262626 - 2626262727272727272727272727272727272828282828282828282828282828 - 282828282828282828282929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C515151C0C0C0C0C0C0C0C0 - C02C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2B2B2B - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2929292A29292A29292828282828282727 - 2727272727272727272727272727272727272727272726262626272625252525 - 25252525252424242524252524252525242B2B2B2D2E2D2D2D2D2D2D2D2D2D2D - 2D2D2D2222222222222222222222222222222121212626262928282928282828 - 2828282827282727272827272727272727272727262727272626272726272727 - 26262626262626262626252222221F1F1F1F1F20201F1F1F1F201F1F1F212121 - 2727262727262627272626262626262626262625262525252626252626252525 - 2525252525252525242525252525242525252524242424252424242424242423 - 2423232323232422232222232222232222222222222222222222222222222222 - 2222222221222221222222222222222323222323222423232424242424232525 - 2526262526262727262727272728282828282828282828282829292929292928 - 2828282828282827282727282727272727272727272727262626262726262626 - 2526262626262525252526252525252525242525252424242424252524242424 - 2424242424242423232324232424242323232222232222222123222122222223 - 22212222212222222122222222222020201F1F1F1F1F1F1F1E1F1E1F1F1E1F1F - 1E1E1E1E1E1E1E1D1E1D1E1E1D1D1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1D1D - 1D1C1C1D1D1C1C1C1C1C1B1C1C1B1B1C1C1C1C1B1B1B1C1B1B1B1B1B1B1A1A1B - 1A1A1A1A191A1A191A19191A19191A1919191819191819181818181818181818 - 1817181818171717171717181717171717171717171616151313131413131313 - 131414141514151F1E1F2F2F303535353C3C3C43434246464613141310101010 - 10101010100F1010100F100F0F0F100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0F0F - 0E0F0E0E0F0F0E0E0E0E0D0D2023230D0D0E3030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A - 2929292828282828282727272626262626262525252525252424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424243838384C4C4C4C4C4C4C4C4C4C4C4C2E2E2E2A2A2A2B2B - 2B2C2C2C2D2D2D2E2E2E2F2F2F31313132323232323233333333333333333334 - 3434353535353535353535353535353535363636373737373737383838393939 - 3939393A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3939 - 393333332A2A2A25252525252525252525252525252526262643434357575774 - 74747474747474745858583A3A3A272727272727272727272727282828282828 - 2828282828282828282828282828282828282828282929292929292929292A2A - 2A2A2A2A2A2A2A2A2A2A4747475050505050504747472A2A2A2A2A2A2A2A2A2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B515151C2C2C2C2C2C2C2C2C22B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B5151515151 - 515050505050503D3D3D2A2A2A2A2A2A2A2A2A2A2A2A292A2A2A2A2A2A2A2A2A - 2A2A2929292829292929292727272827284F4E4F4E4E4E4E4F4E4E4E4E272727 - 2727272727272726262626272626262525252525262525253838384C4C4C4C4C - 4C2424242424242424242324242424243E3E3E6464647777777777775C5C5C34 - 3434212221222221212221212121212121222222282827292827292828282828 - 2728282727272727272727272727273A3A3A4E4E4D7575747474756B6B6B4343 - 432626262626252626252121211F1F1F1F1E201F1F1F1F1F1F1F1F1F21212126 - 2726262726262726262626262626262626262626262625252625252525262525 - 2525252525252525252424242424242424242424242424242424242424232423 - 2324242224242223232223222223222222222221212122222222222222222222 - 2222212222212222222322222222242422242424242323242323262525262526 - 2726262727272727272827282728282928282828282929292929292929292828 - 2928282828282728272828272727272727272627262726262626262626262626 - 2625252526252525252525252525252525252425242524252525242424242424 - 2424242324242324242323232423232423222322222322222222222222212222 - 21222221222222212121201F201F1F1F1F201F1F1F1F1F1F1F1F1E1E1F1F1E1E - 1E1E1E1E1E1E1E1E1E1E1E1D1E1E1E1E1E1E1D1E1D1D1D1C1D1C1C1D1D1D1D1D - 1C1D1C1C1C1C1C1C1C1C1C1B1C1B1C1B1B1C1C1C1B1B1B1B1B1A1A1A1A1A1A1A - 191A191A1A1A191A19191A191919181919191918181918181818181817181818 - 1818181717171718171817171717171717151415131413131313131313141314 - 1717172A292A3333333A393A3F403F4545453232331110111110101010101010 - 100F1010100F10100F100F10100F0F0F0F0F100F0F0F0F0F0F0E0F0E0E0E0F0F - 0F0F0E0E0E0E0E0E2320230E0D0D303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A29292928 - 28282828282727272626262525252525252525252424242424242424249C9C9C - C4C4C4C4C4C49C9C9C2424242424242424242424242424242424242424242424 - 242E2E2EB0B0B0C4C4C4C4C4C4C4C4C460606024242424242424242424242460 - 6060A6A6A6C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4A6A6A67878782C2C2C - 2D2D2D2F2F2F303030323232C4C4C4C4C4C4C4C4C45959593636363636363737 - 373737373737377E7E7EC4C4C4C4C4C49898983939393A3A3A3B3B3B3B3B3B3C - 3C3C4E4E4EC4C4C4C4C4C4C4C4C43636363232322B2B2B242424242424242424 - 2525252525252525252525252F2F2F757575B0B0B0C4C4C4C4C4C4C4C4C4C4C4 - C4C4C4C4C4C4C4C4C4C4B0B0B075757531313127272727272727272727272727 - 27272828282828282828282828282828289D9D9DC4C4C4C4C4C44F4F4F282828 - 6D6D6DB1B1B1C4C4C4C4C4C4C4C4C4C4C4C4B1B1B17777773434342A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A515151C4C4C4C4C4C4C4C4C42A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A4747478A8A8AC4C4C4C4C4C4C4C4C4C4C4C4 - C4C4C4C4C4C4B1B1B18A8A8A5050502929292929292828282828272828282728 - 27282728454545898989C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C493939226 - 26262525262626252424242424254242429C9C9CC4C4C4C4C4C4C4C4C4C4C4C4 - 242424232323565656A6A6A6C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4BABABA6060 - 6021212121212121212121212121212123232328282829272828272727272727 - 27272727276C6C6CA6A6A6C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B0B0B0 - 4E4E4D2626252625242121211E1E1F1F1F1FC4C4C4C4C4C4C4C4C4C4C4C4C4C4 - C4C4C4C4C4C4C4B0B0B089898958585826252626252526252525252425252525 - 2424252424252424242424747474C4C4C4C4C4C49C9C9C242424242424232423 - 2323222424222422222D2C2CBABABAC4C4C4C4C4C4C4C4C45F5F5F2222222222 - 2222222123222222222324232324242324242325242426252527262627272627 - 2727272727282828282828292928292829292A2A292929292829292929292928 - 2828282828272827272827272726272726272627262626262726262626262625 - 2626252625252625252525252525252525242525242424242524242424242524 - 2424242323242323242423232322232222222222222122222122232222222221 - 2221212020202020201F201F1F201F1F1F1F1F1F1F1F1F1F1E1F1E1E1E1E1F1E - 1E1E1E1E1E1E1E1D1E1D1D1D1D1D1D1E1D1D1D1D1D1D1D1D1D1C1D1D1D1C1D1D - 1C1C1C1C1C1C1C1C1B1B1C1C1C1C1C1B1C1B1B1B1B1B1B1B1A1A1B1A1A1B191A - 1A19191A19191A19191919191919191819191818181818181818181818181818 - 181718181818181717171616161414131414141314141414141515151C1C1D2F - 2F2F3535353D3C3C4242424646461B1B1B111011101111111011101010101011 - 101010100F100F10100F0F0F101010100F0F0F0F0F0E0E0F0F0F0F0F0E0E0E0E - 0E0E0E0E2323230E0E0D30303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030303030302F2F2F - 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A2929292828282727 - 272727272626262525252525252424242424242424242424249E9E9EC7C7C7C7 - C7C79E9E9E2424242424242424242424242424242424242424242424248A8A8A - C7C7C7C7C7C7C7C7C77F7F7F2424242424242424242E2E2E9E9E9EC7C7C7C7C7 - C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C72C2C2C2D2D2D2F - 2F2F323232353535C7C7C7C7C7C7C7C7C75C5C5C383838383838393939393939 - 393939818181C7C7C7C7C7C78181813B3B3B3C3C3C3D3D3D3C3C3C3737373232 - 32C7C7C7C7C7C7C7C7C724242424242424242424242424242424242424242424 - 24242525256C6C6CBDBDBDC7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 - C7C7C7C7C7C7C7C7C7C7C7C7BDBDBD5959592626262626262727272727272727 - 272727272727272727272727279F9F9FC7C7C7C7C7C75050508B8B8BC7C7C7C7 - C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B3B3B3464646292929292929 - 292929292929292929515151C7C7C7C7C7C7C7C7C72929292929292929292929 - 29292929292929646464C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 - C7C7C7C7C7C7C7C77878782828282828282828282828282828282828286E6E6E - C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C79E9E9E2525252524 - 252525252525252F2E2EBDBDBDC7C7C7C7C7C7C7C7C7C7C7C7C7C7C724232424 - 2424767676C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7555655 - 2121212121212121212121212121212524252827272827272727272727272727 - 279F9F9FC7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C74E - 4E4E2626252525242121211F1F1FC7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 - C7C7C7C7C7C7C7C7C7C7C7C7B3B3B34E4E4E2626252625252625252625252624 - 24252424252424767676C7C7C7C7C7C79E9E9E24242424242424232424232324 - 2423232323A8A8A8C7C7C7C7C7C7C7C7C7606060222222222222222222222222 - 2323232323232424242424242425232525242625242626262727262727272827 - 282828282827282829292828282A292A29292929292929292929292828282929 - 2828282827282827272727272727272726272726262626262626262626262625 - 2625262526262525252525252525252525252425252425242424252424242424 - 2423242324242322222323222222222222212222212122212221212121202020 - 20202020201F1F201F1F1F1F201F1F1F1F1F1F1F1F1E1F1F1E1E1F1E1E1E1F1E - 1E1E1E1E1E1E1E1E1E1E1E1E1E1D1E1D1D1D1D1D1D1D1D1C1C1C1C1B1C1C1B1C - 1C1C1C1C1C1C1B1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1B1A1A1B1A1A1A191A1A - 1A191A1A1A1A1919191919191919181918191918181819181818181817171817 - 1817171717171515151414141414141313131514151818182727273232323939 - 39403F404544443A393911111111111110111111111110101011101010101010 - 10100F10100F10101010100F10100F0F100F0F0F0E0E0F0E0F0F0E0E0E0E0E0E - 2323230E0E0E3030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030302F2F2F2F2F2F2E - 2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A292929282828272727272727 - 262626252525252525242424242424242424242424818181C9C9C9C9C9C97777 - 77242424242424242424242424242424242424242424585858C9C9C9C9C9C9C9 - C9C99595952424242424242424242E2E2EAAAAAAC9C9C9C9C9C9C9C9C9B4B4B4 - 7777774D4D4D4D4D4D626262818181BFBFBFC9C9C92D2D2D2E2E2E2F2F2F3333 - 33363636C9C9C9C9C9C9C9C9C93A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B82 - 8282C9C9C9C9C9C97E7E7E3030302A2A2A272727242424242424242424C9C9C9 - C9C9C9C9C9C92424242424242424242424242424242424242424242424248B8B - 8BC9C9C9C9C9C9C9C9C9C9C9C9BFBFBF8B8B8B777777777777777777969696BF - BFBFC9C9C9C9C9C9C9C9C9C9C9C98C8C8C262626262626262626262626262626 - 262626272727272727A0A0A0C9C9C9C9C9C9ABABABC9C9C9C9C9C9BFBFBF8282 - 82797979797979B5B5B5C9C9C9C9C9C9C9C9C9BFBFBF3C3C3C28282828282828 - 2828282828505050C9C9C9C9C9C9C9C9C9282828282828282828282828282828 - 656565C9C9C9C9C9C9C9C9C9BFBFBF8C8C8C6565655050505B5B5B797979ABAB - ABC9C9C9797979272727272727272727272727272727787878C9C9C9C9C9C9C9 - C9C9C9C9C99696967778787878788B8B8CBFBFBFA0A0A0252525252525252525 - 242424818181C9C9C9C9C9C9C9C9C9A0A0A0777777B4B4B42424242424247676 - 76C9C9C98B8A8A4343442828283434348D8D8DC9C9C9C9C9C9B5B5B521212121 - 2121202020212020202020212121272727282727272727272727272727A0A0A0 - C9C9C9A0A0A06464643B3B3B3B3B3A6E6E6EBFBFBFC9C9C9C9C9C9B5B5B42626 - 25262525252525212121C9C9C9C9C9C9C9C9C9A9A9A99E9E9E9E9E9EBFBFBFC9 - C9C9C9C9C9C9C9C9C9C9C9C9C9C9636363262525262625262625262524252424 - 252424777777C9C9C9C9C9C9A0A0A02424242424242424242424242324238B8B - 8AC9C9C9C9C9C9C9C9C976767622222222222222222223232322222223232323 - 2323242424242424242424262624262625272626282726282727282828292928 - 2928282929292929282A29292A2A292A292A292A292929292928292829292928 - 2728282728272728272727272627272726262626262626262626262526262625 - 2626252525252525252625252525252525252424242524252424242424242323 - 2222232223232222232222222222222222222221212120202021202020202020 - 2020202020201F1F1F1F1F1F20201F1F1F1F1F1F1F1F1E1F1F1F1F1E1F1E1E1E - 1E1E1E1E1D1E1E1D1E1E1D1D1E1D1D1D1D1C1C1C181818191919191818191818 - 181819191819191918191A1A191A1A1B1A1B1A1B1A1A1A1A1B19191A1A1A1A1A - 191A191919191919191819181919191818181818181918181718171818171817 - 16171415141414141414141515151616161C1D1E2F2F2E3535353C3C3C424241 - 4647472322221111111111111111111111111111101110111010101010101010 - 10101010100F100F100F0F0F0F0F0F0F0F0F0F0E0F0F0F0F0E0E0E0E2323260E - 0E0E303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E - 2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A29292928282827272726262626262625 - 2525252525242424242424242424242424787878CBCBCBCBCBCB787878242424 - 2424242424242424242424242424242E2E2EC1C1C1CBCBCBCBCBCBB6B6B62E2E - 2E242424242424242424787878CBCBCBCBCBCBCBCBCB6D6D6D24242424242424 - 24242424242424242424242424247878782C2C2C2F2F2F323232353535383838 - CBCBCBCBCBCBCBCBCB3535353434342F2F2F2F2F2F2A2A2A2A2A2A787878CBCB - CBCBCBCB787878242424242424242424242424242424242424CBCBCBCBCBCBCB - CBCB2424242424242424242424242424242424242424248C8C8CCBCBCBCBCBCB - CBCBCBC1C1C16363632424242424242525252525252525252525252525256E6E - 6EC1C1C1CBCBCBCBCBCBCBCBCB8D8D8D25252526262626262626262626262626 - 2626262626A2A2A2CBCBCBCBCBCBCBCBCBCBCBCB8D8D8D313131272727272727 - 2727272727276F6F6FCBCBCBCBCBCBCBCBCBA2A2A22727272727272727272727 - 27505050CBCBCBCBCBCBCBCBCB272727272727272727272727464646CBCBCBCB - CBCBCBCBCBA2A2A2313131272727272727272727272727272727272727505050 - 6565652727272727272727272626264F4F4FCBCBCBCBCBCBCBCBCBACACAC3A3A - 3B2526252625252525262525252E2F2E6D6D6D242424242424242424242424B6 - B6B6CBCBCBCBCBCB828282242424242424232323232323232323777777626262 - 222223222323272727292A29343534CBCBCBCBCBCBCBCBCB4041412120212021 - 212020212020202121212827272827272827272727272727279898985A5A5A27 - 2727272727272727272727272727646565CBCBCBCBCBCBCBCBCB454544262525 - 262525262525CBCBCBCBCBCBCBCBCB4B494A1F1F1F1F1F1F1F1E1F3637368D8D - 8DCBCBCBCBCBCBCBCBCBCBCBCB64646426252525252526252525252425252478 - 7878CBCBCBCBCBCBA1A1A1242424242424242424242424787778CBCBCBCBCBCB - CBCBCB8C8B8C2322222322222222222222222322222222232323232323232424 - 242424242525242626252626252727262827272727272827282929282928282A - 29292928292A292A292A2A29292A29292A292929292928292928292928292827 - 2828272827282827272727272726272627262726272726272626262626262525 - 2626262625252525252525242525252524252424242423232323232323232323 - 2322232323222323222222222222222021212121212020212120202020202020 - 1F20201F1F1F1F1F201F1F201F1F201F1F1F1F1F1F1F1F1E1F1E1F1E1E1E1E1E - 1E1E1E1E1E1E1E1D1E1E1D1D1E19191A19191919191918191918181818181918 - 1818181718171818181717171718171718171717171717171818181818181818 - 1818181918191919191919181819181919181818191818181818181615161415 - 1514141414141515151518181728282833333239393940404045454440414012 - 1212121212111212111111111110101011101110101110101010101010101010 - 1010101010100F0F10100F100F0F0F0F0F0F0F0F0E0F0F0F2626260E0E0E3030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D - 2D2D2D2C2C2C2B2B2B2A2A2A2929292828282727272626262626262525252525 - 25242424242424242424242424797979CECECECECECE79797924242424242424 - 2424242424242424242424A3A3A3CECECECECECECECECE444444242424242424 - 2424242F2F2FCECECECECECECECECE6F6F6F2424242424242424242424242424 - 24242424242424242424242424252525272727272727272727242424CECECECE - CECECECECE242424242424242424242424242424242424797979CECECECECECE - 797979242424242424242424242424242424242424CECECECECECECECECE2424 - 24242424242424242424242424242424838383CECECECECECECECECEA3A3A32F - 2F2F242424242424242424242424242424242424242424242424252525303030 - AEAEAECECECECECECECECECE7A7A7A2525252525252525252525252525252525 - 25A4A4A4CECECECECECECECECE8F8F8F26262626262626262626262626262626 - 2626262626656565CECECECECECECECECE505050272727272727272727515151 - CECECECECECECECECE2727272727272727272727279A9A9ACECECECECECEAFAF - AF27272726262626262626262626262626262626262626262626262626262626 - 2626262626262626262626A4A4A4CECECECECECEAEAEAE302F30242524252525 - 242424242424252425242524242524242424242424242424242424CECECECECE - CECECECE39383823242323242323232323232323242338383823232322232322 - 22232727272929292A292AAFAFAFCECECECECECE4C4C4C212121202020202120 - 2021202424242827282827272827272727272727274646462727272727272727 - 27272727272727272727262727CECECECECECECECECE51514F27262526252525 - 2424CECECECECECECECECE4B4B4B1F1E1F1F1F1F1F1F1F1F1F1F1F1F1F444544 - C3C3C3CECECECECECEC3C3C33B3B3A2526252526252626242525257A7979CECE - CECECECEA3A3A3242424242424242424646464CECECECECECECECECEA3A3A323 - 2322232222242222222222222222222323232223242323242323242424252525 - 2525252626262626262727262828272928282928272A29282929292A29292929 - 29292A2A292A2A2A2A292A29292A292929292929282929292929282928282728 - 2828282727282727272727272626262726272627262626262525262526252625 - 2626252525252525252525252425242323242323232323232323232323232222 - 2323232322232222212222212121212121212121212020202020212020201F20 - 20201F1F201F1F1F1F20201F1F1F1E1F1F1F1F1F1F1E1F1F1E1F1E1E1E1E1E1E - 1E1E1E1E1E1E1A1B1A1919191919191919191819191819181818191818181818 - 1818181817171818181817181818181717171717171717161716161617171616 - 1616161616161516161616171717161716171717161616151415151414141515 - 1615151616161D1D1E2F2E2F3536363C3C3C4342424747472626261111121211 - 1211111111111211111111111111111011101010111110101010101010101010 - 100F10100F0F0F100F0F0F0F0F0F0F0F0F0E0F0F2326230E0E0E303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C - 2C2C2B2B2B2A2A2A292929282828272727262626262626252525252525242424 - 2424242424242424247A7A7AD0D0D0D0D0D07A7A7A2424242424242424242424 - 24242424656565D0D0D0D0D0D0D0D0D07A7A7A24242424242424242424242470 - 7070D0D0D0D0D0D0A5A5A5242424242424242424242424242424242424242424 - 242424242424242424242424242424242424242424242424D0D0D0D0D0D0D0D0 - D02424242424242424242424242424242424247A7A7AD0D0D0D0D0D07A7A7A24 - 2424242424242424242424242424242424D0D0D0D0D0D0D0D0D0242424242424 - 2424242424242424244F4F4FD0D0D0D0D0D0D0D0D0A5A5A52424242424242424 - 242424242424242424242424242424242424242424242424242424242F2F2FB0 - B0B0D0D0D0D0D0D0D0D0D0454545252525252525252525252525252525A5A5A5 - D0D0D0D0D0D0C5C5C53030302525252525252525252626262626262626262626 - 26262626A5A5A5D0D0D0D0D0D09B9B9B262626262626262626515151D0D0D0D0 - D0D0D0D0D0262626262626262626313131D0D0D0D0D0D0D0D0D03B3B3B262626 - 2626262626262626262626262626262626262626262626262626262525252525 - 25252525454545D0D0D0D0D0D0D0D0D03A3A3A25252525252424252525242425 - 2425252525242424242424242424242424242424242424D0D0D0D0D0D0D0D0D0 - 2324232323232323242323232423232423232323232323232122222424242626 - 27282727535453D0D0D0D0D0D0D0D0D037373721212120202120212021212128 - 2728282727282727282727282727272727272727272727272727272727272727 - 2727272727273C3B3CD0D0D0D0D0D0D0D0D0515151262626272526262525D0D0 - D0D0D0D0D0D0D04B4C4B1F1E1F1F1F201F1F1F1F1F1F1F1F1F1E1F1F434443D0 - D0D0D0D0D0D0D0D09090902626262626252626252525247B7B7AD0D0D0D0D0D0 - A5A5A5242424242424444444D0D0D0D0D0D0D0D0D0B0B0AF2F2F2E2423222424 - 2323222323222223222223222222222323232424232324242425252525252526 - 26262627272727272828272929282928282929292A29292A2A2A2A29292A2A2A - 2A2A2A292A2A292A292A2A2929292A2929292929292828292828292828272828 - 2728272728272727262727262626262726272626262625262626262526262525 - 2525252525242424242423242323242423232323232323232323232223222323 - 222222222122222121222121212121212121212020212020202020201F1F2020 - 202020201F201F1F201F1F1F1F1F1F1F1F1F1E1E1E1F1F1E1E1E1E1E1E1E1E1C - 1C1B1A191919191919191A19191A191919191919191819191819191818181818 - 1818171717181717171817181717171717171717171716171616161616161616 - 1616161616161616151615161515161615151515151515151514141515161518 - 18182828283333333A393A404040454545414141121212111112121212111211 - 111211121111111111111111111011111111101110111010101010101010100F - 0F0F100F0F0F100F0F0F0F0F0F0E0F0F2626230F0E0F30303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B - 2B2A2A2A29292928282827272726262626262625252525252524242424242424 - 24242424247C7C7CD3D3D3D3D3D37C7C7C2424242424242424242424242F2F2F - C8C8C8D3D3D3D3D3D3B2B2B22424242424242424242424242424249C9C9CD3D3 - D3D3D3D366666624242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424D3D3D3D3D3D3D3D3D3242424 - 2424242424242424242424242424247C7C7CD3D3D3D3D3D37C7C7C2424242424 - 24242424242424242424242424D3D3D3D3D3D3D3D3D324242424242424242424 - 2424242424BDBDBDD3D3D3D3D3D3BDBDBD2F2F2F242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242F2F2FC8C8 - C8D3D3D3D3D3D3A7A7A7242424242424242424252525252525A7A7A7D3D3D3D3 - D3D3878787252525252525252525252525252525252525252525252525252525 - 5C5C5CD3D3D3D3D3D3C8C8C8252525252525252525515151D3D3D3D3D3D3D3D3 - D3252525252525252525515151D3D3D3D3D3D3B2B2B225252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 7C7C7CD3D3D3D3D3D39C9C9C2525252525242525252424242424242424242424 - 24242424242424242424242424242424242424D3D3D3D3D3D3D3D3D324242324 - 23242323232323232223222222222222222222222122222424242626275E5D5E - C8C8C8D3D3D3D3D3D3BDBDBD2121212121212121212121212424242928282927 - 2728272728282728272727272727272727272727272727272727272727272727 - 27279D9D9DD3D3D3D3D3D3D3D3D3515251262626262525262526D3D3D3D3D3D3 - D3D3D35050502121201F1E1F1F1E1F1F1F1F1F1F1F1F1F1F1F1F1F7A797AD3D3 - D3D3D3D3D3D3D33131312625262626252525257C7D7CD3D3D3D3D3D3A7A7A725 - 2424454545C8C8C8D3D3D3D3D3D3C8C8C82F2F2E242423242423242322242322 - 2323222323232422232322232424242423232525242525252626262625262727 - 272728272828282929292929282A29292929292A2A292A2A292B2A2A2A2A2A2A - 2A2A2A2A2A2A292A29292A292929292929292929292928282928292828282827 - 2827272827272727272727272727272627262626262625262625262625262524 - 2524232324232324242324242424242423232323242423232223222223222222 - 222122212122212221212121212120212121202021202020202020202020201F - 201F201F2020201F1F1F1F1F1F1F1F1E1F1E1F1F1E1E1E1E1E1D1E1A191A1A19 - 1A19191919191A19191919191919191919181919181918181819191918181818 - 1818181818181818181817171717171717161716161717171617161616161716 - 1616161615161616161615151615151515151515151616151617171E1E1E3030 - 303636363E3E3E42434347474827262612121212131212121212121112111211 - 1212111112111111111110111011111011111010101011101010100F10100F10 - 0F100F0F100F0F100F0F0F0F2623260F0F0F3030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A - 2929292828282727272626262626262525252525252424242424242424242424 - 247D7D7DD5D5D5D5D5D57D7D7D2424242424242424242424249D9D9DD5D5D5D5 - D5D5CACACA3A3A3A242424242424242424242424242424A9A9A9D5D5D5D5D5D5 - D5D5D5B4B4B4A9A9A97D7D7D7272725050503A3A3A2424242424242424242424 - 24242424242424242424242424242424D5D5D5D5D5D5D5D5D524242424242424 - 24242424242424242424247D7D7DD5D5D5D5D5D57D7D7D242424242424242424 - 242424242424242424D5D5D5D5D5D5D5D5D52424242424242424242424245C5C - 5CD5D5D5D5D5D5D5D5D55C5C5C24242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424676767D5D5D5 - D5D5D5D5D5D5454545242424242424242424242424A9A9A9D5D5D5D5D5D55050 - 50242424242424242424242424252525252525252525252525252525252525D5 - D5D5D5D5D5D5D5D5252525252525252525515151D5D5D5D5D5D5D5D5D5252525 - 2525252525257D7D7DD5D5D5D5D5D5D5D5D5BFBFBFA9A9A98888887D7D7D5151 - 51464646252525252525252525252525252525242424242424242424878787D5 - D5D5D5D5D57D7D7D242424242424242424242424242424242424242424242424 - 242424242424242424242424242424D5D5D5D5D5D5D5D5D52223232323222322 - 23222223232222232222222222222222242424303030898889D5D5D5D5D5D5D5 - D5D5D5D5D5595959212121212121212121212121282728292928282827292728 - 292727282728272727272727272727272727272727272727272727939393D5D5 - D5D5D5D5D5D5D5BFBFBF262726262725262626272525D5D5D5D5D5D5D5D5D551 - 51512525242221221F1E20201E1F1F1F1F1F1F1F1F1E1F363636D5D5D5D5D5D5 - D5D5D55252522625262625262526257D7D7DD5D5D5D5D5D5A9A9A9302F2FB4B4 - B4D5D5D5D5D5D5CACACA45454524242424242424242424242324242223242324 - 2323242423242323242423242424252425252525262626272727272727282828 - 2829282A2A292A2A292A2A292B2A2A2B2A2A2A2A2A2B2A2A2B2A2A2A2A2A2A2A - 2A2A2A2A292A2929292929292929292928292928282928282829282728282728 - 2727282727272726272627272627262626262626252525242423232423242323 - 2524232423232424232424232323232423222323222322222321222221222221 - 222221212121212121212121212120212121202020202020202020201F201F20 - 1F20201F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1A1A1A1A191A1A191A1A191A - 1A1A1B1B1A1A1D1D1D2728272323242323231F201F1E1E1D1A1A1A1919191919 - 1919191819191819181817171717171717171716171617161617171616161615 - 16161616151515161516161516151515151616161919192B2C2C3434343A3A3A - 4040404645464241411312131313121212121212121212121212121211111111 - 121111111111111111111111101011111010101010101010101010100F100F0F - 100F0F0F0F0F100F2626260F0F0F303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A29292928 - 28282727272626262626262525252525252424242424242424242424247E7E7E - D8D8D8D8D8D87E7E7E242424242424242424515151D8D8D8D8D8D8D8D8D87373 - 73242424242424242424242424242424242424ABABABD8D8D8D8D8D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8B6B6B6ABABAB7E7E7E737373 - 3B3B3B242424242424242424D8D8D8D8D8D8D8D8D82424242424242424242424 - 242424242424247E7E7ED8D8D8D8D8D87E7E7E24242424242424242424242424 - 2424242424D8D8D8D8D8D8D8D8D8242424242424242424242424949494D8D8D8 - D8D8D8B6B6B62424242424242424242424242424242424242424242424242424 - 24242424242424242424242424242424242424242424242424C1C1C1D8D8D8D8 - D8D8898989242424242424242424242424ABABABD8D8D8D8D8D8515151242424 - 242424242424242424242424242424242424242424242424242424D8D8D8D8D8 - D8D8D8D8515151242424242424515151D8D8D8D8D8D8D8D8D824242424242424 - 24247E7E7ED8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 - D8D8D8CDCDCDABABAB9494947E7E7E5C5C5C242424242424ABABABD8D8D8D8D8 - D868686824242424242424242424242424242424242424242424242424232423 - 2324242323242323242323D8D8D8D8D8D8D8D8D8232323232223232222232323 - 222223222323222322232322464647C2C2C2D8D8D8D8D8D8D8D8D8D8D8D86566 - 6521212121212121212121212124242429292829282729282728272828272729 - 2827282727272727272727272727272727484848B7B7B7D8D8D8D8D8D8D8D8D8 - D8D8D85F5F5E272726262726262626262625D8D8D8D8D8D8D8D8D85252522424 - 25252424232324201F20201E1F1F1F1F1F1F1F1F1E1FC1C1C1D8D8D8D8D8D87D - 7D7D2525252626262526267F7F7FD8D8D8D8D8D8ABABABABABABD8D8D8D8D8D8 - D8D8D85C5C5C2424242424242424242424242324232324232323222423232423 - 232423232524242424242424252626252626262728272828282828282828282A - 29292A2A2A2A2A292B2B2A2B2A292A2A2A2B2B2A2B2A2B2B2A2A2B2A2A2A2929 - 2A2A292A2A2A29292A2929292929292929292929282829292928272928272827 - 2728272727272726262625252624252524242424242324242324242424232325 - 2324242323242423242323232323232322232222232222222222222122222122 - 2221212121212121212120212120202120202020202020202020202020201F20 - 201F201F1F20201F1F1F1F1F1F1B1B1A1A191B1A191A1A191A1B1A1B1A1A1B1D - 1D1C2B2C2B2D2D2E2E2E2E2E2E2E2E2E2E2D2C2D2D2D2C2C2C2D292929282728 - 2423242221221E1E1F1C1D1D1919191818181717181718171717181717171616 - 161615161516161615151617161818182323233131313737373E3E3E44444448 - 4848212120131312131313121213121312121212111212111212111211121111 - 1111111111111110111011111111111110101110101010101010100F100F0F0F - 100F0F0F2626260F0F0F30303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030303030302F2F2F - 2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A2929292828282727 - 27262626262626252525252525242424242424242424242424808080DBDBDBDB - DBDB808080242424242424242424C4C4C4DBDBDBDBDBDBA2A2A2242424242424 - 242424242424242424242424242424ADADADDBDBDBDBDBDB8B8B8B8B8B8BADAD - ADB9B9B9DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB80808024 - 2424242424242424DBDBDBDBDBDBDBDBDB242424242424242424242424242424 - 242424808080DBDBDBDBDBDB8080802424242424242424242424242424242424 - 24DBDBDBDBDBDBDBDBDB242424242424242424242424D0D0D0DBDBDBDBDBDB74 - 7474242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424248B8B8BDBDBDBDBDBDBC4C4 - C4242424242424242424242424ADADADDBDBDBDBDBDB52525224242424242424 - 2424242424242424242424242424242424242424242424DBDBDBDBDBDBDBDBDB - 2F2F2F242424242424525252DBDBDBDBDBDBDBDBDB2424242424242424248080 - 80DBDBDBDBDBDBADADAD808080A2A2A2ADADADDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDBB9B9B92424242424248B8B8BDBDBDBDBDBDB808080 - 2424242424242424242424242324242423242424242424232424232323232324 - 23232423242423DBDBDBDBDBDBDBDBDB23232322232323232223222223232223 - 2223232222464646D0D0D0DBDBDBDBDBDBDBDBDBC5C5C5525252212121212121 - 2121212121212121212827272929282929282929282828272828282827282828 - 27272727272727272727767676DBDBDBDBDBDBDBDBDBDBDBDBDBDBDB97979727 - 2727272726262726262725272525DBDBDBDBDBDBDBDBDB535353242525242525 - 2424242424242121211F1E201F1F1F1F1F1FACACACDBDBDBDBDBDB7D7D7D201F - 1F232222252525808181DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB69696924 - 2424242424242424242424242424242424242424232423242423242423242424 - 2524242525252525252525262726262727272828282929292829292A2A292B2A - 2B2A2A2A2C2B2A2B2B2A2B2A2A2C2B2A2C2A2A2B2A2A2B2A2A2A2A2A2A2A292A - 2A2A2A292A292929292A29292929282929292929292829282827292827282727 - 2626262425242425242425252424242424242424242423242323242424232424 - 2423242324242324232323232223232223222223222222222222222122222122 - 222121212121212021212021212120212020202020212020202020201F20201F - 201F1F201F1F1B1B1B1A1A1A1A1A1B1A1A1A1B1A1B1B1A1C1D1C1D2A2A293030 - 31313232323332323232323232303130302F2F2F2F2F2D2D2D2D2D2E2B2C2C2B - 2C2C2C2B2B2B2C2B2B2B2B2B2B2B2828282627272323232121211D1E1E1B1B1B - 1818171617161919181B1B1B2E2E2E3434343B3B3B4141414747473C3B3C1313 - 1313121312121313131313121212121212121212121112111212121211121111 - 1111111111111110101111111110111010101010101010100F0F100F0F0F100F - 2626260F0F0F3030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030302F2F2F2F2F2F2E - 2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A292929282828272727262626 - 262626252525252525242424242424242424242424818181DDDDDDDDDDDD9797 - 97525252525252818181DDDDDDDDDDDDD1D1D130303024242424242424242424 - 2424242424242424242424A3A3A3DDDDDDDDDDDD525252242424242424242424 - 2424243B3B3B525252757575818181D1D1D1DDDDDDDDDDDD6A6A6A2424242424 - 24242424DDDDDDDDDDDDDDDDDD30303024242424242424242424242424242481 - 8181DDDDDDDDDDDD818181242424242424242424242424242424242424DDDDDD - DDDDDDDDDDDD2424242424242424243B3B3BDDDDDDDDDDDDDDDDDD4747472424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424525252DDDDDDDDDDDDDDDDDD303030 - 242424242424242424AFAFAFDDDDDDDDDDDD8181812424242424242424242424 - 242424242424242424242424242424245E5E5EDDDDDDDDDDDDDDDDDD24242424 - 2424242424525252DDDDDDDDDDDDDDDDDD2424242424242424245E5E5EDDDDDD - DDDDDD9797972424242424242424242424243030305252525E5E5E818181A3A3 - A3DDDDDDDDDDDDAFAFAF242424242424757575DDDDDDDDDDDDA3A3A324242424 - 2424242424242424242424242324232324232324242424242324232424242424 - 232423DDDDDDDDDDDDDDDDDD2323232323232323222323232322232323232323 - 23AFAFAFDDDDDDDDDDDDDDDDDD8E8E8E35353521212021212121212121212121 - 21212424242A2929292928292928292928292828282828292827282727272727 - 272727989898DDDDDDDDDDDDDDDDDDDDDDDDD2D2D26C6C6C2727272727272727 - 26272726272726262626DDDDDDDDDDDDDDDDDD54535325252525252524252424 - 2424242524232324201F201F1F1FADADADDDDDDDDDDDDD7E7E7E1F1E1E1F1E1E - 1E1E1E7F7F7FDDDDDDDDDDDDD2D2D1DDDDDDDDDDDDD1D1D13C3B3B2524242424 - 2424242424242424242424242424242424242423242324242324242425242425 - 25252625252626262626272727272829282929292929292A2A292B2A2A2B2B2A - 2B2C2B2B2B2A2B2B2A2C2B2B2C2B2B2C2B2B2B2A2A2B2A2A2A2A2A292A2A2A2A - 292A292A2A292A29292929292929292829292828282727262725252525252525 - 2525252525252425242424252424242424232424252423242424242424242423 - 2424232423232423232323222323222322222222222222222221212121212121 - 2121212121212021212120202020202120202020202020201F1F20202020201C - 1C1B1A1A1B1A1A1B1A1A1B1B1B1C1B1A1C1E1D1F29292A323232343434373637 - 373737373737353535343434313132313132303030302F2F2F2F2F2F2F2E2F2F - 2E2D2E2E2E2D2E2C2C2D2C2C2C2C2C2C2B2A2B2B2A2B2A2A2A2A2A2A2A2A2A29 - 2A2A2828292C2B2C3333333939393F3F3F4545454848481D1D1D131313141313 - 1313131312121313121213121212121212121212121112121112111211121211 - 1111111111111110101110111110101110101010101010100F1010102826260F - 100F303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E - 2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A29292928282827272726262626262625 - 2525252525242424242424242424242424828282E0E0E0E0E0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0B1B1B15353532424242424242424242424242424 - 24242424242424777777E0E0E0E0E0E08D8D8D24242424242424242424242424 - 2424242424242424242424C8C8C8E0E0E0E0E0E0474747242424242424242424 - E0E0E0E0E0E0E0E0E05353532424242424242424242424242424248D8D8DE0E0 - E0E0E0E0A5A5A52424242424242424242424242424243C3C3CE0E0E0E0E0E0E0 - E0E0242424242424242424535353E0E0E0E0E0E0E0E0E0242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 24242424242424242424242424242424E0E0E0E0E0E0E0E0E053535324242424 - 2424242424B1B1B1E0E0E0E0E0E0C8C8C8242424242424242424242424242424 - 242424242424242424242424A5A5A5E0E0E0E0E0E0B1B1B12424242424242424 - 24535353E0E0E0E0E0E0E0E0E0242424242424242424303030E0E0E0E0E0E0D4 - D4D4242424242424242424242424242424242424242424242424777777E0E0E0 - E0E0E08D8D8D242424242424474747E0E0E0E0E0E0E0E0E04747472424242424 - 24242424242424242424242423242423242424232424242423232424242423E0 - E0E0E0E0E0E0E0E02323232323232323222323232223232322233C3B3CE0E0E0 - E0E0E0E0E0E07A7A7A2C2C2C2324242121212121212121212121212121212828 - 28292929292929292928292928292827282727282828282828282827848484E0 - E0E0E0E0E0E0E0E0E0E0E0A6A6A63E3E3E272727272727272727272726272726 - 272626262626E0E0E0E0E0E0E0E0E05554542525252525252525242524252525 - 25242525242424222121E0E0E0E0E0E0E0E0E06868681F1F1F1E1E1F1E1E1E7F - 7F7FE0E0E0E0E0E0B0B1B1999A9AE0E0E0E0E0E0BDBDBD303030252424242424 - 2424242424242424242424242424242424242525242425242525252525252625 - 252626252727272728282829292929292929292A2A2A2B2A2B2A2A2B2C2C2B2B - 2B2B2B2B2A2C2C2B2C2B2B2C2B2B2B2A2A2B2A2A2B2A2A2A2A2A2A2A2A2A2929 - 2929292929292929292828272625262625252525252526252525262525252524 - 2525242424252425252525242425252524252525242424252424242424242324 - 2323242323232322232222232223232223222222222122222122212222212122 - 2122212121212021212021202121212020202020202020201C1C1C1A1B1B1A1B - 1B1A1A1B1B1B1C1B1B1C1E1D1E2727283333333737373A3A3A3C3C3C3C3D3C3C - 3C3C3B3A3A37373836363633343332313232323231313131313131313130302F - 302F2F2F2F302E2E2E2E2E2E2E2D2E2E2D2D2D2D2D2C2C2C2C2D2C2D2D2D2F2F - 2E3232323636363D3C3C43444347474735353513131313131413141313131312 - 1313121313121313121212121212121212121212111211111211121111111111 - 1111111110111110101011101011111010111010101010102828260F0F103030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D - 2C2C2C2C2C2C2B2B2B2A2A2A2929292828282727272626262626262525252525 - 25242424242424242424242424838383E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E28F8F8F242424242424242424242424242424 - 2424243C3C3CE2E2E2E2E2E2D6D6D63C3C3C2424242424242424242424242424 - 24242424545454E2E2E2E2E2E2CACACA242424242424242424242424E2E2E2E2 - E2E2E2E2E2838383242424242424242424242424242424BEBEBEE2E2E2E2E2E2 - D6D6D63030302424242424242424242424246C6C6CE2E2E2E2E2E2CACACA2424 - 24242424242424545454E2E2E2E2E2E2E2E2E224242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424E2E2E2E2E2E2E2E2E25454542424242424242424 - 24B2B2B2E2E2E2E2E2E2E2E2E283838324242424242424242424242424242424 - 24242424246C6C6CE2E2E2E2E2E2E2E2E26C6C6C242424242424242424545454 - E2E2E2E2E2E2E2E2E2242424242424242424242424A6A6A6E2E2E2E2E2E27777 - 77242424242424242424242424242424242424303030CACACAE2E2E2E2E2E248 - 4848242424242424242424B2B2B2E2E2E2E2E2E2BEBEBE303030242424242424 - 242424242324242424242424232424242424242424232324232423E2E2E2E2E2 - E2E2E2E2242324242323232323232323232322222322545454E2E2E2E2E2E2CB - CBCB2A2A2A2B2B2B2121212121212121212121212121212324242A292A292929 - 2929292A29282A2928292928292828282828282727343434D6D6D6E2E2E2E2E2 - E2E2E2E26D6D6D27272727272727272727272727272727272727272727272627 - 2626E2E2E2E2E2E2E2E2E2555555252525252525252525252425252425252524 - 252425606060E2E2E2E2E2E2E2E2E24443431E1E1F1F1F1E1E1F1F808080E2E2 - E2E2E2E2B1B1B11F1E1EBEBEBEE2E2E2E2E2E2A7A6A624242424242424242424 - 2424242424242424242425242324242524242424252625252525262625272626 - 2827272828282829292929292929292A2A2A2B2B2B2A2A2B2B2B2B2B2B2B2B2B - 2B2C2C2B2C2C2B2C2B2B2C2B2B2B2A2A2B2A2B2B2A2A2A2A2A292A2A28282927 - 2827262626252525262525262425262525252525252525262525252525252424 - 2525252525252625252525252525252525252425242525242424242424232423 - 2324232324222223222323222222222222222222222122222222222221212121 - 21212121212121212021212020212020201C1C1C1B1B1C1B1B1C1A1A1B1B1B1C - 1B1B1C1D1D1E2625263433343938393C3C3C4140404242424242422E2E2E3434 - 3433323238383835363635343434343334333332323232323231313130303130 - 3131313130303030303030303030302F302E2E2E2E2E2E302F2F313130343535 - 3A3A3A3F3F3F4544444545451716171314131314141413141313141313131313 - 1313121313121312121313121212121212121212111211111211111111121111 - 11111111101011111011101110111010101010102826280F1010303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C - 2C2C2B2B2B2A2A2A292929282828272727262626262626252525252525242424 - 242424242424242424858585E5E5E5E5E5E59C9C9C5454545454545454547979 - 79CDCDCDE5E5E5E5E5E5E5E5E590909024242424242424242424242424242424 - 2424909090E5E5E5E5E5E5C1C1C1303030242424242424242424242424484848 - D9D9D9E5E5E5E5E5E56D6D6D242424242424242424242424E5E5E5E5E5E5E5E5 - E5D9D9D93C3C3C242424242424242424545454E5E5E5E5E5E5E5E5E5E5E5E585 - 8585242424242424242424242424C1C1C1E5E5E5E5E5E59C9C9C242424242424 - 242424545454E5E5E5E5E5E5E5E5E52424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424E5E5E5E5E5E5E5E5E5545454242424242424242424B5B5B5 - E5E5E5E5E5E5E5E5E5E5E5E58585852424242424242424242424242424246D6D - 6DE5E5E5E5E5E5E5E5E5CDCDCD242424242424242424242424545454E5E5E5E5 - E5E5E5E5E5242424242424242424242424545454E5E5E5E5E5E5D9D9D9484848 - 2424242424242424242424242424249C9C9CE5E5E5E5E5E5B5B5B52424242424 - 24242424242424545454E5E5E5E5E5E5E5E5E5C1C1C13C3C3C24242424242424 - 2424242424242424616060232424242424232324242423E5E5E5E5E5E5E5E5E5 - 2424232324232324232323232323232323234A4A4AE5E5E5E5E5E5D9D9D92B2B - 2C2525262121212121212121217777772121212727272A29292A2A2A292A2929 - 2928292928292928292828292728292827585757E5E5E5E5E5E5E5E5E5868686 - 272727272727272727272727272727272727272727272726272726272726E5E5 - E5E5E5E5E5E5E5565555262525252525252525252425252425252424252424C1 - C1C1E5E5E5E5E5E5CDCDCD2121211F1F1F1E1F1F1F1F1F828282E5E5E5E5E5E5 - B3B3B31E1E1E2A2A2AD9D9D9E5E5E5E5E5E58484842424242524242424242424 - 2424252524252424242425252524252526252526252526262528272628272729 - 2728292928292929292A2A2B2A2A2B2B2B2B2B2B2C2C2C2C2C2B2B2B2C2C2C2C - 2C2C2C2C2C2B2C2B2B2C2B2B2B2B2B29292A2727272626262525262525262625 - 2525252625252526252526252426252525262526252525252526262626262626 - 2526262626252625252525252525252425242424252423242423242323242323 - 2323232323222323222222222222222222222221222221222221222121212121 - 212121212021212121201C1C1D1B1B1C1B1B1C1A1B1C1A1B1C1C1B1D1E1D1E25 - 25253434343938393D3E3E4342424546464747482A2A2A191819181918181819 - 1818181818181F1F1F1E1E1F2627262627272D2E2D2C2D2D3434343334343333 - 3232323232323231313131313030302F2F302F3131323434343736373C3B3C40 - 40414444442D2E2D141414141414141414141413131413131313131313131313 - 1313131213131212121212121212121212111212121112111111111111111111 - 11111111101011101011101011101010282828100F1030303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B - 2B2A2A2A29292928282827272726262626262625252525252524242424242424 - 2424242424868686E7E7E7E7E7E7868686242424242424242424242424303030 - 9E9E9EE7E7E7E7E7E7E7E7E75555552424242424242424242424242424243030 - 30C2C2C2E7E7E7E7E7E7CFCFCF6D6D6D3030303C3C3C868686DBDBDBE7E7E7E7 - E7E7B6B6B6242424242424242424242424242424E7E7E7E7E7E7E7E7E7E7E7E7 - DBDBDB6D6D6D555555868686DBDBDBE7E7E7E7E7E7CFCFCFE7E7E7E7E7E79E9E - 9E555555616161B6B6B6E7E7E7E7E7E7E7E7E755555524242424242424242455 - 5555E7E7E7E7E7E7E7E7E7242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 24303030E7E7E7E7E7E7E7E7E7555555242424242424242424B6B6B6E7E7E7E7 - E7E7B6B6B6E7E7E7E7E7E7CFCFCF868686555555868686C2C2C2E7E7E7E7E7E7 - E7E7E7E7E7E7494949242424242424242424242424555555E7E7E7E7E7E7E7E7 - E7242424242424242424242424242424919191E7E7E7E7E7E7E7E7E786868649 - 4949303030616161C2C2C2E7E7E7E7E7E7DBDBDB494949242424242424242424 - 242424242424919191E7E7E7E7E7E7E7E7E7E7E7E79E9E9E8686868686869191 - 91CFCFCFB6B6B6242424555555858686868686E7E7E7E7E7E7E7E7E785858685 - 8685858585858585545454242424262626DBDBDBE7E7E7E7E7E7A0A0A02D2D2D - 2121215F5F5FC2C2C2B5B5B52424232A2A2A2A2A2A2A2A292929292929282929 - 28292929292828292828282827595757E7E7E7E7E7E7E7E7E733343328272827 - 2727272727272727272727272727272727272726272726272726E7E7E7E7E7E7 - E7E7E75756562626262526252525262525252525252525259E9E9EE7E7E7E7E7 - E7E7E7E76D6D6D242424242424212121202020838383E7E7E7E7E7E7B5B5B51E - 1E1E1E1E1E444444E7E7E7E7E7E7E7E7E76A6A6A1E1E1E212020212121222322 - 2423232424242525252525252525252526252626262727272827272928282929 - 292A29292A2A2A2A2B2A2B2B2B2B2B2B2B2C2B2B2C2B2C2B2C2C2C2B2B2A2A29 - 2929282728272727272727262727262626262626262626262625262626262525 - 2525252525252625252626252526262726262626262726262626262626252525 - 2626252525252525252525252525252424242425242325242324232423232324 - 2323232223232222222322222222222222212221212122222122212121212121 - 2121211D1C1D1C1B1D1B1B1C1B1B1C1B1B1C1C1C1C1C1B1C2323233434333838 - 383D3D3D4343424647474A4A4A35343519191A19191919191818191918181819 - 18181818181818181718171717171718181717171717171617171D1E1E1D1D1E - 2625252525252C2C2C2C2C2C3232333334333535363A3A3B3D3D3D4040403E3D - 3D14141415141414141414141413131314131313131413131313131312131313 - 1212131312121212121212121212121112121111111111111211111111111111 - 1111111011101110101110102828280F10103030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A - 2929292828282727272626262626262525252525252424242424242424242424 - 24878787E9E9E9E9E9E9878787242424242424242424242424242424303030D0 - D0D0E9E9E9E9E9E99F9F9F242424242424242424242424242424242424494949 - C4C4C4E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9C4C4C43030 - 302424242424242424246E6E6EE9E9E9E9E9E9E9E9E9E9E9E9929292E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9626262878787E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9ABABAB2424242424242424242424243D3D3DE9E9 - E9E9E9E9E9E9E949494924242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424555555 - E9E9E9E9E9E9E9E9E9242424242424242424242424B8B8B8E9E9E9E9E9E95555 - 559F9F9FE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9DDDDDD6E - 6E6E2424242424242424242424249F9F9FE9E9E9E9E9E9E9E9E9E9E9E9242424 - 2424242424242424242424242424249F9F9FE9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9DDDDDD49494924242424242424242424242424242424 - 2424242424878787E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - B8B8B8242424878787E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E98787872626262726277D7C7CE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9B7B7B72727272A2A2A2929292A2A2A2A2A2A2A2929292A28292929 - 292928292828292828595858E9E9E9E9E9E9E9E9E94C4C4C2727282827282727 - 27272727272727585858272727272727272727272726E9E9E9E9E9E9E9E9E957 - 5757272525262626252625252625313131ACACACE9E9E9E9E9E9E9E9E9C4C4C4 - 252525242424242424242424242424868686E9E9E9E9E9E9B6B6B61E1E1E1E1E - 1E1E1E1E6A6A6AE9E9E9E9E9E9DCDCDC4444441E1E1E1E1E1E1E1F1F1F1E1E1E - 1F1F212020202020222121232322242324232324262525282727282828282827 - 2828282728272828282827272828282726272727272727262727262827272727 - 2727272727272726272726272727262627262626262626262626252626252626 - 2626262626272727272727262727272627262726262626262626252626262626 - 2626252526252525252525242525242524242424232423242423232422222322 - 222323232323232322222222222222222122222221212221222222211F1E1F1C - 1C1C1C1C1D1C1B1C1B1C1C1B1B1C1C1C1D2222223030303636353B3B3B414141 - 4747474B4B4B3839391A1A19191A191919191919191819191919191918181818 - 1918181818181818181817181817181817171717171717171716171717161717 - 16161616161616161516151615161D1D1E1E1E1E2828282A2A2A202020151514 - 1514141414141414141414131314141314131313131313131313131312121213 - 1312121312121212121212121212121211111212121111121111121211111110 - 1111111111101011282B28101010303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A29292928 - 2828272727262626262626252525252525242424242424242424242424888888 - ECECECECECEC8888882424242424242424242424242424242424247C7C7CECEC - ECECECECDFDFDF24242424242424242424242424242424242424242431313194 - 9494ECECECECECECECECECECECECECECECDFDFDF888888242424242424242424 - 242424242424242424D3D3D3ECECECECECECECECEC242424949494ECECECECEC - ECECECECECECECECECEC888888242424242424888888ECECECECECECECECECEC - ECECECECECA1A1A1313131242424242424242424242424242424DFDFDFECECEC - ECECEC7C7C7C2424242424242424242424242424242424242424242424242424 - 24242424242424242424242424242424242424242424242424949494ECECECEC - ECECD3D3D3242424242424242424242424BABABAECECECECECEC565656242424 - 7C7C7CDFDFDFECECECECECECECECECECECECECECECA1A1A13D3D3D2424242424 - 242424242424242424243D3D3DECECECECECECECECECECECEC24242424242424 - 2424242424242424242424242424636363D3D3D3ECECECECECECECECECECECEC - ECECECA1A1A13D3D3D2424242424242424242424242424242424242424242424 - 24242424565656ADADADECECECECECECECECECECECECECECECECECECBABABA24 - 2424888888ECECECECECECECECECECECECECECECECECECECECECECECECECECEC - 8888882626262727272929297F8080E0E0E0ECECECECECECECECECECECECECEC - EC9393932A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292A2929292829292829 - 2829292828353434ECECECECECECECECECAEAEAF272828272728272727333333 - 959595BBBBBB272727272727272726272727ECECECECECECECECEC7D7D7D5858 - 58585858717170A1A1A1E0E0E0ECECECECECECECECECC7C6C731313124242524 - 2424242424242424242424888888ECECECECECECB9B9B9201F1F1E1E1E1E1E1E - 1E1E1E9E9E9EECECECECECECD2D2D22B2B2B1E1E1E1F1F1F1F1E1F1F1E1F1F1E - 1F1F1F1F1F1F1F20202020202021222122222323232323232324242424252525 - 2524252625252526262627262626272727262627272627282626272727272727 - 2627272726272727272627272626262626262626262727272727282728282827 - 2727282727272727272627272626272727272626262726262625262626262525 - 2525252625262525252524252424242424242323242423242323232323232223 - 2323222323232223222222222222222222212122222121212020211C1C1D1C1C - 1D1C1C1C1B1B1C1C1B1C2222222F2F2F3434343938393F3E3E4546454B4A4A3D - 3D3D191A191A1A19191919191919191919191919191819191819181918191818 - 1818181818181718181718181817181717171717171717161617171716161717 - 1716161616161616161616161616151616161515151515151515141514151514 - 1415141414141414131314131313141313131313131413131312131313131313 - 1313131212121212121212121212121212111111121211111111111111111111 - 11101111282B2810101030303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030303030302F2F2F - 2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A2929292828282727 - 27262626262626252525252525242424242424242424242424898989EEEEEEEE - EEEE898989242424242424242424242424242424242424575757EEEEEEEEEEEE - EEEEEE2424242424242424242424242424242424242424242424242424243131 - 315757577D7D7D70707057575724242424242424242424242424242424242424 - 24242424242424242424242424242424242424242424243D3D3D636363898989 - 5757573131312424242424242424242424243131315757578989896363633D3D - 3D242424242424242424242424242424242424242424A2A2A2EEEEEEEEEEEED5 - D5D5242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424242424242424D5D5D5EEEEEEEEEEEE9595 - 95242424242424242424242424BBBBBBEEEEEEEEEEEE57575724242424242424 - 24245757577070707D7D7D575757313131242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424244A4A4A70707089898957575731313124 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424313131636363EEEEEEEEEEEEEEEEEE7D7D7D2424242424242424 - 24242424242324EEEEEEEEEEEEEEEEEE24232423232323232323232426262627 - 27272828282A2A2A2C2C2C2727275454547C7C7C7B7C7C545455212122272727 - 2A2A2A2A2A2A2A2A2A2A2A29292A2A2A29292929292A2A282929282928282929 - 282928288C8B8BEEEEEEEEEEEEEEEEEED5D5D5BCBCBCBCBCBCEEEEEEEEEEEEBC - BCBC272727272727272727272727EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBCBCBC3232312425252524242524252425 - 25242424242424898989EEEEEEEEEEEEBBBBBB242423232322212121201F201E - 1E1EC7C7C7EEEEEEEEEEEEC7C7C71E1E1E1F1F1F1E1E1F1F1F1E1F1F1E201F1F - 1F1F1F2020202120202221212322222323232424232424242525252525252626 - 2626252526262726262727272726272727272727272727272627272727272727 - 2727272627272726272728282828282828282728282728272828272728272728 - 2727282727272727272727272727262626262626262626262625262626252625 - 2525252525252425252424242425242324242324232424232323232323222322 - 23232323222222232222222222222222212221212221221C1C1D1C1C1D1C1C1D - 1B1C1D1B1B1D2827283130303535353A3A394140414647474242431D1D1D1A1A - 1A1A1A1A1A1A191A191A1A191919191919191919181818181918181818181818 - 1818181818171718171817171717171817171717161717171617161716161616 - 1616161616161616161615161515151516151515151515151515151414151415 - 1414141514141414141314141313141413131313141313131312131213131313 - 1212121212121212121212121212121112111111121211111111111111111011 - 2B28281110103030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030302F2F2F2F2F2F2E - 2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A292929282828272727262626 - 2626262525252525252424242424242424242424248A8A8AF0F0F0F0F0F08A8A - 8A242424242424242424242424242424242424575757F0F0F0F0F0F0F0F0F024 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424242424575757F0F0F0F0F0F0F0F0F07171 - 7124242424242424242424242424242424242424242424242424242424242424 - 24242424242424242424242424247E7E7EF0F0F0F0F0F0F0F0F04A4A4A242424 - 242424242424242424BDBDBDF0F0F0F0F0F05757572424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424717171F0F0F0F0F0F0969696242424242424242424242424242424 - 242424F0F0F0F0F0F0F0F0F02324232324242323232525242626262727282A29 - 292B2B2B2C2C2C2222222122222222222222222222222222222A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A292A2A2A2A292A2929292928292928292828292828 - 292828A5A5A5F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0BEBEBE2727 - 27272727272727272727F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0D7D7D7727171252525252525242525242525242525242425242424 - 2424248A8A8AF0F0F0F0F0F0BDBDBD2423242424232423232323232323223B3B - 3BE3E3E3F0F0F0F0F0F0A1A1A11F1F1F1F1F1F1F1F1F1F1F1E1F20201F1F1F20 - 2020202020212120232222232323232324242424252525252525252625252526 - 2726272626262727272727272726262627262727272727282828282928282929 - 2929292928282929282829282828282828282828282828272727272827272827 - 2727272727272727262727272727262626262626262625252625262625262625 - 2525252525242524232524242524242523242423242323232323232323222323 - 232323222222222222222222212222222122211D1D1E1D1D1D1C1C1D1C1B1D1C - 1B1D2324243132313736363C3C3C4242414545451D1D1D1A1B1A1A1A1A1A191A - 1A191A1A1A1A1A19191919191919191919181819181918191918181818181818 - 1818181818171818181717171717171717171617161617171617171616161616 - 1716161616161516151516151615151515151515151515151514151415151514 - 1414151414141414141413131314131313141313131313121313131213131212 - 131212121212121212121211111211111211121211121111111111112B282B11 - 1111303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E - 2E2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A29292928282827272726262626262625 - 25252525252424242424242424242424248B8B8BF2F2F2F2F2F28B8B8B242424 - 242424242424242424242424242424656565F2F2F2F2F2F2F2F2F22424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424BEBEBEF2F2F2F2F2F2E5E5E5313131 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424243E3E3EE5E5E5F2F2F2F2F2F2BEBEBE24242424242424242424 - 2424242424BEBEBEF2F2F2F2F2F2585858242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 248B8B8BF2F2F2F2F2F2585858242424242424242424242424242424242424F2 - F2F2F2F2F2F2F2F22424242424242423232626262727272828292A2A2A2C2C2C - 2828282222222222222222222222222222222626272A2A2A2A2A2A2A2A2A2A2B - 2A2A2A2A292A2A2A2A2A2A29292929292929292929292928282A282829292829 - 28285B5B5BA6A6A6BFBFBFF2F2F2BFBFBFB2B3B28080804D4D4D272727272727 - 2727272727278D8D8D8D8D8C8D8C8D8D8C8D8D8C8C8D8C8C8C8C8C7373733F3F - 4026252525262525252525252525252525242525242425252425242425242458 - 58588B8B8B8B8B8B727272242324242424242423232324232323232323646464 - 8B8B8A8B8B8A8A8A8A3C3C3B212121202020201F20202020201F1F2020202020 - 2021212123222223232323232325242525252525252526262626252527272728 - 28282A28282A292A2A29292A2A292929292A2A2A292A2A292929292929292929 - 2828282929292929282829282828282828272828282728282827272727282727 - 2727272626272727272627272626262626262626262525262526262525262526 - 2524252424252424242323242324242323242324232323232322232323232322 - 2223232222222222222222222122221F1F1F1D1C1D1D1C1D1C1C1D1C1C1D201F - 203332323737363C3C3C4142424747471E1D1D1B1A1B1A1A1A1B1A1A1A191A1A - 1A1A19191919191A191919191919191919191819191919181818181818181818 - 1818181817181817181717171717171717171717161617161716171716161616 - 1616161615161616161615161515151615151515151515141514151414141514 - 1414131414131413141413141413131413131313131313131213131312121313 - 1313121212121212121212111211121111111211111111112B282B1011113030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D - 2D2D2D2C2C2C2B2B2B2A2A2A2929292828282727272626262626262525252525 - 252424242424242424242424248C8C8CF4F4F4F4F4F48C8C8C24242424242424 - 2424242424242424242424C0C0C0F4F4F4F4F4F4CDCDCD242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 24242424242424242424242424585858F4F4F4F4F4F4F4F4F4CDCDCD31313124 - 2424242424242424242424242424242424242424242424242424242424242424 - 313131CDCDCDF4F4F4F4F4F4F4F4F44B4B4B2424242424242424242424242424 - 24C0C0C0F4F4F4F4F4F458585824242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 999999C0C0C06565652424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 24242424242424242424242424242424242424242424242424242424248C8C8C - F4F4F4F4F4F45858582424242424242424242424242424243E3E3EF4F4F4F4F4 - F4F4F4F423242424242324242426262628272829292A2B2B2B2D2D2D23232322 - 22222222222222222222222323232A29292A2A2A2A2B2A2A2B2A2A2A2A2A2A2A - 2A2A2A292A2A292A29292A29292A282929282929292929282928282928282828 - 2828282828282828272827282828272727282827282827272727272727272727 - 2727272726272726272726272626272726272626262626252526262525262625 - 2626252526252525252525252525252525252525252525252525252525252525 - 2425252425242425242424232424232323232323242323232323232323222322 - 2322232222232222232323232323232222242423242423252524252524252524 - 2626252726262827262928282929292928282A29292A29292B2A292A292A2A2A - 2A2B2B2B2A2B2A2A2A2A2A2A2A292A2A2A292929292A29292929292929292829 - 2929292828282929282928282828282828282828272828272727282727272727 - 2627272727262726272727262626262626262626252626252626252625242525 - 2426242425242324242424242424232323232323232323232323232322222322 - 23232222222222222222222121201D1C1D1C1C1D1C1D1D1C1C1D1D1D1E30302F - 3637373B3B3B4141414747472929281B1A1B1B1A1A1B1B1A1A1A1A1A1A1A1A1A - 1A1A19191A1A1919191919191919191919181918191918191818181818171818 - 1818171718171717181817171717161716171717161617161717161616161616 - 1616161616161616151515161515151515151515151514141415141414141514 - 1414141414141314131413141313131313131313131312131213131312121312 - 12121213121112121211121211111112111111122D2B2B111111303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C - 2C2C2B2B2B2A2A2A292929282828272727262626262626252525252525242424 - 2424242424242424248D8D8DF6F6F6F6F6F68D8D8D2424242424242424242424 - 24242424737373F6F6F6F6F6F6F6F6F68D8D8D24242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252524242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424248D8D8DF6F6F6F6F6F6F6F6F6CECECE3131312424 - 242424242424242424242424242424242424242424242424243E3E3ECECECEF6 - F6F6F6F6F6F6F6F6808080242424242424242424242424242424242424C1C1C1 - F6F6F6F6F6F65959592424242424242424242424242424242424242424242424 - 24242424242424242424242424242424242424242424242424737373F6F6F6F6 - F6F6E9E9E9242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424242424242424242424248D8D8DF6F6F6F6 - F6F6808080242424242424242424242424242424808080F6F6F6F6F6F6C1C1C1 - 2424242424242526252727272929282A2A2A2D2D2C292A292222222323232323 - 232322232322232727272B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2A2A2A2A2A292A2A292A29292A29292A2929292828282828282828 - 2828282827282728272727282828282727272727272727272727272727272727 - 2627272627272727262627262727262627262626262626262625262626262525 - 2625252525252525252525252525252525252525252525252525252524252524 - 2524242523242523232424242424232323232323232323232323232323232323 - 2323232323232423232323232324242423242425242425252525252526262527 - 27262827272928282A29292929282A292A2A29292B2A2A2A2A2A2A2A2A2B2A2A - 2B2B2A2A2A2A2A292A2A292A2A2A2A292A2A2A292A29292A2929292928282829 - 2929292828282928282828282827272828272827272827282827272727272727 - 2727272727262726272626262626262625262625252625262525262524252524 - 2524242524242424242424242324232323232323232222232222232323232323 - 232223232222222221221D1D1D1C1D1D1C1C1D1C1C1D1D1D1E2A2B2B3635363A - 3B3B3F3F3F4544453334341B1A1B1A1B1B1A1A1B1A1B1A1A1A1A1A191A1A1A19 - 191A191A1A191919191919191919191918191919181818191818181818181817 - 1818171717181717171717171817171716161717161717161717161616161615 - 1516151616151615151516151515151515151415151414151415141415141414 - 1314141313141414131414131313131313131313131313131212121313131312 - 121212131112121212121111111111112D2B2D11111130303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B - 2B2A2A2A29292928282827272726262626262625252525252524242424242424 - 24242424248E8E8EF8F8F8F8F8F88E8E8E2424242424242424243131318E8E8E - F8F8F8F8F8F8F8F8F8EBEBEB3131312424242424242424242424242424242424 - 2424242424242424242424242425252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252524242424242424242424242424242424242424 - 2424242424242424242424A8A8A8F8F8F8F8F8F8F8F8F8EBEBEB8E8E8E313131 - 2424242424242424242424242424243131318E8E8EEBEBEBF8F8F8F8F8F8F8F8 - F8A8A8A8242424242424242424242424242424242424242424C3C3C3F8F8F8F8 - F8F8595959242424242424242424242424242424242424242424242424242424 - 242424242424242424242424242424242424242424818181F8F8F8F8F8F8F8F8 - F824242424242424242424242424242424242424242424242424242424242424 - 2424252525252525252525252525252525252525252525242424242424242424 - 2424242424242424242424242424242424242424244C4C4CF8F8F8F8F8F8EBEB - EB4C4C4C2424242424242424244C4C4CEBEBEBF8F8F8F8F8F881818124242425 - 25242727272727272A292A2B2B2B2D2D2D232323232323232323232323232323 - 2423242B2C2B2C2C2B2C2C2C2B2B2B2C2C2B2B2B2C2C2B2B2B2B2B2B2B2B2B2B - 2B2B2B2A2B2A2A2B2A292B2A2A2A292A2A2A292A292929292929292929292929 - 2929282828282828282828282828282828282828282828282827282827282827 - 2827262726272726262726262726262626262626262626262626262626262626 - 2626262626262626262626262625262625262525262525252425252426242425 - 2424252424242324242423232324232323232323232323232323242423242323 - 2323232324232424242324242525252524252626252626252626262727262828 - 272928282928292A28282A2A292A29292B2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B - 2A2B2A2A2B2A2A2A292A2A292929292A292A2A29292929292929282829292928 - 2829282828292829282828282827282727282828272728282727272727272727 - 2726262627272726262626262526262525252526262526252426252425252425 - 2424252323242424242324242323242323232323222323222323222323222222 - 2222222222221D1E1E1D1C1D1D1C1D1C1C1D1D1E1E2626263534353A3A393E3D - 3D4242423E3E3E1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191A1A1A1A191A - 1A191A19191A1919191919191918191919181819181918181818181818181818 - 1718181717171718171717171717171717171617161616161616171616161516 - 1616161615161616151515151515151515151515141414141514141414141413 - 1414141414131413131413131313131413131313131313131312121212121312 - 1212121212121111121211112D2B2B1111113030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A - 2929292828282727272727272626262525252525252424242424242424242424 - 249C9C9CFAFAFAFAFAFADFDFDFC4C4C4C4C4C4D2D2D2FAFAFAFAFAFAFAFAFAFA - FAFAEDEDED5A5A5A242424242424242424242424242424242424242424242424 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252526262625252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252424242424242424242424242424 - 24242424242424242424A9A9A9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAB7B7B78F - 8F8F8F8F8F8F8F8FC4C4C4FAFAFAFAFAFAFAFAFAFAFAFAFAFAFA9C9C9C242424 - 242424242424242424242424242424242424242424C4C4C4FAFAFAFAFAFA5A5A - 5A24242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424313131C4C4C4FAFAFA8F8F8F242424 - 2424242424242424242424242424242424242424242525252525252525252525 - 2525252525252525252525252525252525252525252525252525252524242424 - 2424242424242424242424242424242424242424C4C4C4FAFAFAFAFAFAEDEDED - 9C9C9C5A5A5A9C9C9CEDEDEDFAFAFAFAFAFAEDEDED3131312424242625262727 - 272828292A2B2A2C2C2C2A2A2A2222222323232323232323232424242727272D - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2C2D2C2C2C2C2C2C2C2C2C2C2B2B2B - 2B2B2B2B2B2A2B2A2A2B2A2A2A292A2B2A2A2A29292929292929292929292929 - 2928292928292928282828282929282929282828282828282728282727282727 - 2727272727282727272727272727272727272727262726262727272626262626 - 2627262726262626262526252626252625252525252625252525252525252524 - 2425242424242424242424242424242424242524242423242424242423242424 - 2424242424242424252525252626252625272626272726282827282828292828 - 2A29292B292A2A29292B2B2A2B2B2A2B2A2A2B2B2B2B2B2B2B2B2B2B2A2A2A2A - 2A2B2A2A2A2A2A2A2A2A2A2A2A292A292A292A2A292929292928282928292828 - 2929282928282829282828272828282828272728282827272727272727272626 - 2727272626262727262626252626252626252525252625252524242524252524 - 2424242424232423242423232323232322232322232323232222232323222222 - 22221F1F1F1D1C1D1D1D1D1D1C1D1D1D1E2221223434343938393D3E3E414241 - 4545441E1E1E1B1B1B1B1B1B1A1A1B1A1A1B1A1A1A1A1A1A1A1A1A191A1A1A19 - 19191A1919191919191919181918181918191818181819181818181818181818 - 1818171717171717171717171617171617171616171716161616161616161616 - 1515161516161515161515151515151514151515151415141414151414141414 - 1414131414141314131413141313131413131313131312121212121213121212 - 12121212121211122B2D2D111111303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A29292928 - 2828272727272727262626252525252525242424242424242424242424C5C5C5 - FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBE0E0E04C4C - 4C24242424242424242424242424242424242424242425252525252525252525 - 2525252525252525252525262626262626262626262626262626262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 2626262626262626262626262626262626262626262626262626262625252525 - 2525252525252525252525252525252525252525242424242424242424242424 - 242424242424242424676767EEEEEEFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBE0E0E067676724242424242424242424 - 2424242424242424242424242424242424C5C5C5FBFBFBFBFBFB5A5A5A242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252424 - 242424242424242424242424242424243F3F3FE0E0E0FBFBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFBFBFBFBFBEEEEEE6767672424242525252627272828282A292A - 2C2C2B2D2D2D2525262424242323242424242424242424242C2C2C2E2D2D2E2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2D2C2C2C2C2C2C2B2B2B - 2C2B2B2B2B2B2B2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929 - 2929292929292929292929292929292929292929282829272928282928282726 - 2727272828282728272827272727272727272727272727272727272727272727 - 2727272727272727262626262626262626262626262625262526262525252525 - 2625242525242424242525252424242425242424242424242424252524242424 - 242525252626262626262627262726262827272828282929292929292A29282B - 2A2A2B2A2A2B2A2B2B2A2A2B2A2B2B2B2B2B2B2B2B2B2A2B2A2B2A2B2A2A2A2A - 2A2B2A2A2A2A2A2A2A2A2A2A292929292A292929292929292929292929282828 - 2829282828282828282828282828282827282828282727282727272726262727 - 2727262626262625262625262625262625262525262524252524252424252424 - 2424232324232323242423242323232323232323232223232322222222222221 - 221D1D1D1D1D1D1C1D1D1C1D1D1E1E1F3232323838373B3B3C40403F43444429 - 28281B1B1B1B1A1B1A1B1A1B1A1A1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A19 - 191A1919191A1919191819181919181819181819181818191818181818181717 - 1717171817171817171717171717171717161716161616161616161616161616 - 1515151515151515151515151515151515141514141515141515141414141414 - 1314141314141413131313131313131313131313131212121212131312131212 - 121112122D2B2D11111130303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030303030302F2F2F - 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A2929292828282828 - 28272727262626252525252525252525242424242424242424C7C7C7FDFDFDFD - FDFDFDFDFDFDFDFDFDFDFDFDFDFDD4D4D4ABABAB686868242424242424242424 - 2424242424242424242424242525252525252525252525252525252626262626 - 2626262626262626262626262627272727272727272727272727272727272727 - 2727272727272727272727272727272727272727272727272727272727272727 - 2727272727272727272727272727272727272626262626262626262626262626 - 2626262625252525252525252525252525252524242424242424242424242424 - 2424242424242424323232838383D4D4D4FDFDFDFDFDFDFDFDFDFDFDFDFDFDFD - FDFDFDFDFDFDD4D4D47676762424242424242424242424242424242424242424 - 242424242424243232325A5A5AD4D4D4FDFDFDFDFDFD5A5A5A24242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2425252525252525252525252525252525252526262626262626262626262626 - 2626262626262626262626262626252525252525252525252525252525252525 - 242424242424242424242424242424323232ABABABFDFDFDFDFDFDFDFDFDFDFD - FDFDFDFDC7C7C74D4D4D2424242424242626262828282929292B2B2B2D2C2D2C - 2C2C2323232424242424252424252525242627262E2E2D2E2E2E2F2E2E2E2E2E - 2D2E2E2D2E2D2E2E2D2E2D2E2E2E2D2D2D2D2D2E2D2D2D2D2D2D2D2D2D2B2C2C - 2C2C2B2B2C2B2B2C2A2B2B2A2B2B2B2A2A2A2A2B2A2A2A2A2A2A2A2A2A2A2929 - 2A292A2A29292A292A2A2A2929292929292A2928282828242424212121222122 - 2425252928282829282828282828282728282828282727272727272727272728 - 2727272727272726262627262627262526262627262626252526252526242525 - 2524252525252525252525252525252525252525242525252525262626262626 - 2726262727272727272828272928282928282929282A2A292A29292A2A2A2B2A - 2A2C2B2B2B2B2B2B2A2B2C2B2B2B2B2B2B2B2B2B2A2B2A2A2B2B2B2A2A2B2A2A - 2A2A2A2A2A2A2A29292A2A2A29292A292929292A292929282929282929282929 - 2829282829282828282728282727282827282727282727282727272727272626 - 2626262527262526262526262525252526252526242425252425242424242424 - 23242323232324232424232323232323232323232222222322222222231D1D1D - 1D1D1D1D1C1D1D1D1D1D1E1E2B2B2B3636363B3B3B3F3F3E4342423333331B1B - 1B1B1B1B1B1A1B1A1B1B1A1A1A1B1A1A1A1A1B1A1A1A1A1A191A1A1A19191A19 - 191A191919191919181818191819181918181918181818181818171817171718 - 1717181717171717171717161616171617161717171616161616161615161516 - 1515161616151615151515151515151514151414141514141414141414141414 - 1414141413131413131313131313131312131313121213131313121212121212 - 2D2D2D1212123030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030302F2F2F2F2F2F2F - 2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A292929282828282828272727 - 2626262626262525252525252424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424252525252525252525252525252525262626262626262626262626272727 - 2727272727272727272727272828282828282828282828282828282828282828 - 2828282828282828282828282828282828282828282828282828282827272727 - 2727272727272727272727272727272727272727272727272727262626262626 - 2626262626262525252525252525252525252525252424242424242424242424 - 242424242424242424242424243F3F3F5B5B5B8484849191918484845B5B5B32 - 3232242424242424242424242424242424242424242424242424242424242424 - 2424243F3F3FFEFEFEFEFEFEFEFEFEFEFEFE5B5B5B2424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424252525252525252525 - 2525252525252626262626262626262626262727272727272727272727272727 - 2727272727272726262626262626262625252525252525252525252525252524 - 24242424242424242424242424242424243232325B5B5B5B5B5B5B5B5B323232 - 2424242424242424242525252828282929292A2A2A2C2C2C2E2E2E2727272324 - 232524242524252525252525262525252929292F2E2E302F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2E2E2F2E2E2E2E2E2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2C2D2C2C - 2D2C2C2C2B2C2D2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2B - 2A2A2A2A2B2B2A2A2B2A2A2A2A27272723232322212221222222222122222223 - 2322262626282928282928282828292828292928282829292828292928282829 - 2828282828282828272827272827262827262726272726262726272726262626 - 2626262625262625262625252526262626262626262527272726272727272727 - 27272828282828282929282A29282A29292B2A292B2B2A2B2A2B2C2B2A2C2B2B - 2C2A2A2B2A2A2C2B2B2B2C2B2B2B2B2B2B2B2A2B2A2A2A2B2B2A2A2A2B2A2A2A - 2A2A2A2A2A2A2A2A2929292A2A29292A29292929292928292929292928282828 - 2828292828282828282828272828272727272827272727272727272726262626 - 2726252726252626252625252625242525242525242524242524242424242323 - 242424242324232323232423232323232323232323222322221E1E1F1E1E1D1D - 1D1D1D1D1D1D1E1E2627273535353939393D3E3E4242423C3C3C1B1C1B1B1B1B - 1B1B1C1A1B1B1A1B1B1B1A1A1B1A1B1A1A1A1A1A1A1A1A191A1A1A191A1A1919 - 1919191919191919191819181918191819181818181818181818181817181817 - 1717171717171717171617171717161616161616161617161616161615151615 - 1616161615161515151515151515151415151414151414141414141414141314 - 141314131314131314131313131313121313131212121212121213122D2D2D12 - 1212303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2E2E - 2E2E2E2E2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A29292928282827272727272726 - 2626252525252525252525242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242525252525 - 2525252525252526262626262626262627272727272727272727272728282828 - 2828282828282828282828282828282828282828292929282828282828282828 - 2828282828282828282828282828282828282828282828282828282828282828 - 2828282828282828282828282828282828282827272727272727272727272726 - 2626262626262626252525252525252525252525252525242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424848484C8C8C8C8C8C8C8C8C85B5B5B242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242525 - 2525252525252525252525252525252525252525252525252525252526262626 - 2626262626272727272727272727272727272727272727282828282828272727 - 2727272727272727272626262626262626262525252525252525252525252424 - 2424242424242424242424242424242424242424242424242424242424242424 - 24242424242626262A2A2A2A2A2A2C2C2C2D2D2D2F2F2F303030272726252525 - 2526262526252626262627262726272A2A2A3030303130303030303030303030 - 303030303030302F302F30302F2F302F2F2F2F2E2E2E2E2E2D2E2D2D2E2D2C2D - 2D2D2D2C2C2C2C2C2C2B2C2B2B2C2B2B2C2B2C2B2B2B2B2B2A2B2B2B2B2A2B2A - 2B2B2B2A2A292524262323232323232323232323232223232323232322232223 - 2224232327272729292929292929292929292929292929292928292828292828 - 2828282828282828282828272727272727282727272727272727272727272626 - 2727262726272626262627262727272726272727272728272728272928292828 - 282929282929292929292B2A2A2B2B2A2B2B2A2B2A2A2C2B2B2C2B2A2B2B2B2D - 2B2C2C2B2C2B2C2B2B2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2B2B2A2A2A2A2A2A - 2A2A2A292A29292A2A292929292A292929292829292929292929292929282828 - 2928282828282828282727282728272727272727272727272727272626262626 - 2625272626272625262525252525252525252524252424242424242424232323 - 2424242324232323242323232323232223232223231F1F201D1D1D1D1D1D1C1D - 1D1E1D1E222122343534393A393D3D3D4141414545451E1E1F1B1B1C1B1B1B1B - 1B1B1B1B1B1A1B1A1B1B1B1B1B1B1A1A1B1A1A1A19191A191A1A1A191A1A1A19 - 1919191919191819191918181818191818181818181817181817171718181717 - 1717171717171716171617161716161616161617161616161615161616161615 - 1515151615151515151515151515151514151514141415141414141413131414 - 1413131413141313131313131313131313121312121313132D2D2D1212123030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E - 2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A2929292828282828282727272626262626 - 2625252525252525252524242424242424242424242424242424242424242424 - 2424242424242424242424242424242424252525252525252525252525252525 - 2626262626262727272727272727272828282828282828282828282929292929 - 292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A29292929292929 - 2929292929292929292929292929292929292929292929292929292929292929 - 2929292929292929292929292828282828282828282828282727272727272727 - 2726262626262626262625252525252525252525252525252524242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252626262626262626262727272727 - 2727272728282828282828282828282828282828282828282828282828282828 - 2828272727272727272727262626262626262626252525252525252525252525 - 2424242424242424242424242424242424242424242424242424242424242424 - 242525252929292B2B2B2C2C2C2E2E2E2F2F2F31313131323228282826262626 - 26262626262727272727272727272B2B2B323131313131313131313131313131 - 3131303131313130313130303030302F302F302F2E2F2F2E2F2E2E2F2E2E2D2D - 2D2D2D2D2D2D2D2D2C2C2C2D2C2C2D2C2D2D2C2C2C2C2C2B2C2C2C2C28282825 - 2525232424232323232423232323232323232323232323222323232323232323 - 2323232423232727272A29292A2A2929292A2A29292A292A292A292A29292929 - 2929292829282829282828282728272728272728282727272727272728272828 - 28282727282727272828272828282828282828282929292829292A29292A2929 - 2A2A292B2A2A2B2A2A2B2B2B2B2B2A2D2B2B2C2B2C2C2B2B2C2B2B2C2C2C2C2C - 2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A29 - 2A2A292A2A292A29292A2A292929292929292929292928282928282828282828 - 2828282828282727282728272727272728272728272727262727262726262626 - 2526262526252526252525252425252425252524252424252424242423242324 - 24242323232323242423232323232323232222221E1D1D1D1D1D1D1D1D1D1D1D - 1F1F1F3332323737373C3C3D4040404444442929291B1B1B1B1B1C1B1B1B1B1B - 1B1B1B1B1B1A1B1B1B1A1A1B1A1A1A1B1A1A1A1A1A1A19191A1A191A191A1A19 - 1919191819191918191918181819181818181818181817181718171817181817 - 1718171717171717171716161717171616161616161616161615161615151516 - 1615161515151515151515141415151514141414141514141413141414141413 - 1314131413131413131313131213121312121212302D2D121212303030797979 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D - 2D2D2C2C2C2B2B2B2A2A2A2A2A2A292929282828272727272727262626262626 - 2525252525252525252525252424242424242424242424242424242424242424 - 2424242425252525252525252525252525252525252526262626262626262627 - 27272727272828282828282828282929292929292929292A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A292929292929292929282828282828282828272727272727 - 2727272626262626262626262525252525252525252525252525252424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242424242424242424242424 - 2424242424242424242424242424242424242424242525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525262626262626262626262626262626272727272727272727282828282828 - 2828282929292929292929292929292929292929292929292929292929292828 - 2828282827272727272727272726262626262625252525252525252525252525 - 2525252525242424242424242424242424242424242424252525252525252525 - 2525252B2B2B2D2D2D2F2F2F303030313131333333333233292A2A2828282727 - 282828282828292828282828292C2D2C33323232323233333333333332313232 - 313231313132313131313131313130303030302F302F2F2F2F2F2F2E2E2F2E2E - 2E2E2D2E2E2E2E2D2E2D2D2D2E2D2E2D2D2D2B2B2B2626262524252525252525 - 2425242425252524242524242424242424242424242424242323232324242324 - 23232323232423232726272828292B2B2B2B2B2B2A2B2A2B2B2A2A2A2A2A2A29 - 292A292929292A29282A29292928282928282928282828282828282828282928 - 292929282928292929292929292929292929292929292A2B2B2B2A2A2B2B2A2B - 2B2A2C2B2B2C2B2B2C2C2B2C2B2B2D2C2B2C2B2B2D2C2C2D2C2C2C2C2B2C2C2C - 2C2B2C2B2B2B2B2B2B2B2B2B2B2A2B2A2B2B2A2A2B2B2A2A2A2B2A2A2A2A2A2A - 2A2A292929292929292929292929292929292929282829292829282828292929 - 2828282828282828272727282828272827272727272726272626272625262626 - 2625252725252625252625252525242524242424242524242424242423242424 - 242423242323232323232323222322231D1D1E1E1D1D1D1D1D1D1D1D1E1E1E2C - 2B2B3736363B3B3B3F3F3F4343433333331C1C1C1C1B1B1B1B1B1B1C1B1B1B1B - 1B1B1A1A1B1B1B1A1B1B1B1A1B1A1A1A1A1A191A1A1A191A19191919191A1919 - 1919191919191918181818181918181918181817181718171717171718171717 - 1717171717171716171617161716161617161616161616161616161616161615 - 1515161515151515151515141415141414151414141414141414141413141413 - 141314131314131313131313121313122D302D12131230303079797930303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C - 2C2B2B2B2B2B2B2A2A2A29292928282828282827272727272726262626262625 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252626262626262626262727272727272828282828 - 282828282929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2A2A2A2A2A2A2A2A2A29292929292929292928282828282827272727 - 2727272727262626262626262626252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252524242424242424242424242424242424242424242424242424242424 - 2424242424242424252525252525252525252525252525252525252525252525 - 2626262626262626262626262626262626262626262626262626262626262626 - 262626262727272727272727272727272828282828282828282929292929292A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929 - 2828282828282727272727272626262626262626262525252525252525252525 - 2525252525252525252525252525252525252525252525252525252526262627 - 27272D2D2D2F2F2F313131323232343433343434353535282929282829282829 - 292929292A2A292A292929292D2D2D3333333434343434343333333333333232 - 32323332333232313231313130313130313030313030302F2F302F2F2F2F2E2F - 2E2F2F2E2F2E2E2E2E2D2E2A292A252525252525252525252525252525262526 - 2526252525252626262525252525252525252525252525252525252524242424 - 242424242424242424242424252928292A2A2A2C2C2C2B2B2B2C2B2A2B2B2A2B - 2A2A2B2A2A2B292A2A2A292A29292A2A29292A292929292929292A2A2A2A292A - 2929292A29292A2A2A2A2A2A2A2A2A2B2A2B2A2B2A2B2C2B2C2B2B2C2C2B2C2B - 2B2C2B2A2C2C2C2D2C2B2C2B2C2D2B2C2D2C2C2D2C2C2D2C2C2C2B2B2C2C2B2C - 2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2B2A2A2A2A2A2A2A2A2A2A2A2A2A - 292A292A2A292A292A292A292929292929292929292829292929282928282828 - 2828282828282827282827272727272727272627262627262626262626262526 - 2625262525262525252425252425242424252424252425242423232423232424 - 2423232324232323232323231F1F1F1D1E1E1D1D1E1E1D1D1E1E1E2727273535 - 36393A3A3E3E3E4342423D3D3D1C1C1B1B1C1B1B1C1C1B1B1C1B1B1B1B1B1B1B - 1B1A1B1B1A1A1A1A1A1A1B1B1A1A1A1A1A191A1A1A191A1A1A191A1A19191919 - 1919191919191818181819181819181818181818181718181717171718181717 - 1717171717171717171717161616171716161616161616161516151616161515 - 1515151515151515151415151515141415151414141414141314131414131413 - 1413131313131313131313133030301212123030307979793030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C - 2B2B2B2A2A2A2A2A2A2929292828282828282727272727272626262626262626 - 2625252525252525252525252525252525252525252525252525252525252526 - 2626262626262626262626272727272727272727282828282828292929292929 - 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B - 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2929292929292828282828282828282727 - 2727272727272726262626262626262625252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252526262626262626262626262626262626 - 2626272727272727272727272727272727272727272727272727272727272727 - 2727272828282828282828282828282929292929292A2A2A2A2A2A2A2A2A2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A29292929292928 - 2828282828282828272727272727262626262626262626252525252525252525 - 2525252525252525252525252525252525252626262626262626262727272828 - 282F2F2F3131313232323434343535353636363434352B2B2B2A292A292A292B - 2B2B2B2A2A2A2B2B2A2B2A2D2D2D353434353535353535343434343433343434 - 3334333333333232323233313332313231313131313130303030303030302F30 - 302D2D2D2727272627272627262626262626262626262727272726272627272A - 2A2B3534353434352D2D2D272727262526262626262526252626252625262526 - 2525252525252525252525252425252626262A2A2A2C2C2C2C2C2B2C2C2B2C2B - 2B2C2B2B2C2A2B2B2A2B2B2B2A2B2A2A2A2A2A2A2A2A2B2B2B2B2A2B2B2B2B2A - 2B2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2B2C2C2C2D2C2D2C2B2C2B2B2D2C2C - 2D2C2B2D2C2B2C2B2C2D2C2C2E2C2C2D2C2C2D2C2C2C2C2B2C2C2C2B2C2C2B2C - 2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2B2A2A2A2A2A2A2A2A2A2A29 - 2A29282929262627262626292929292929282929282828292829282828282828 - 2828282828272727272728272727262727262726262726262626262625252625 - 2526252526252525252524242525242524252424242424242424232323242324 - 2323232323232323201F201E1D1E1D1D1E1E1E1D1F1E1E2222233535353A3939 - 3D3E3E4141414545461F1F1F1C1C1C1B1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1A - 1B1B1B1B1B1A1B1B1A1A1A1B1A1A1A19191A19191A1A19191A191A1A1A191919 - 1919191919191819181819181818181818171818171817181817181817171817 - 1717171716161616161616171617161616161615151515161616151615151515 - 1615151515151514151414141414151414141413141413141414141313131313 - 1413131313131313303030131213303030797979303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2B - 2B2B2A2A2A2A2A2A292929282828282828272727272727262626262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 262727272727272727272828282828282929292929292A2A2A2A2A2A2A2A2A2B - 2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C - 2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828 - 2727272727272727272626262626262626262626262626262626262525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252525252525252525252525252525252525252525252525252525252525 - 2525252626262626262626262626262626262727272727272727272727272727 - 2727272727272727272727272727272728282828282828282828282828282828 - 28282929292929292929292A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C - 2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2929292929 - 2928282828282827272727272727272726262626262626262626262626262626 - 2626262626262626262626262626262626272727272727272727282828292929 - 3131313333333434343535353737373837383737372D2D2D2B2B2B2B2B2B2C2B - 2C2C2B2B2B2C2B2C2C2B2D2D2E35343435353535353535353535343435353434 - 35343433333333323333323332323332323231313231313030302B2A2B282827 - 272727272827272828272727282828282828292929292A2A3535343939393939 - 3939393939393935353530303028282826272726272626272626272726272627 - 26272726262626262626262625262929292D2D2D2D2D2C2D2D2D2D2C2C2D2C2C - 2D2C2C2C2C2C2C2B2B2C2B2B2C2B2B2B2B2B2B2B2B2B2B2B2C2C2C2B2C2C2B2C - 2B2B2C2B2C2C2C2C2C2C2C2C2C2D2D2D2C2D2C2D2C2B2D2D2C2D2C2C2D2C2C2D - 2C2C2E2D2D2D2D2D2D2C2C2E2D2C2D2C2C2D2C2C2C2B2C2C2C2B2C2B2C2B2B2C - 2C2B2C2B2B2C2B2B2A2B2A2A2B2B2B2A2A2B2B2B2A2828282726272424252424 - 2324242323232326252529292929292929292928292928282828282828282828 - 2827282728282727272727272726272626262626262626272626262525262625 - 2625252525252525252424252425252524242524242424242424242423232324 - 242423232222221D1E1E1D1E1D1E1D1D1E1D1D1F1F1F3333333838383D3D3D40 - 41404444452929291C1C1C1C1B1C1C1C1C1B1C1C1C1B1C1B1B1B1B1B1B1B1A1B - 1B1A1A1B1A1B1A1A1A1A1A1A1A1A1A1A19191A191A1A19191919191919191919 - 1919181919191818181818181818181817181718181817181717171718181717 - 1717171717161716161616161716161616161516151516161515151515151516 - 1515151515151514151415141514141414141414141414141414131314141313 - 1313141330303013131230303079797930303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B - 2B2A2A2A29292929292928282828282828282827272727272727272726262626 - 2626262626262626262626262626262626272727272727272727272727282828 - 2828282828282828282929292929292A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C - 2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C - 2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A29292929292928282828282828 - 2828272727272727272727272727262626262626262626262626262626262626 - 2626262626262626262626262626262626262626262626262626262626262626 - 2626262626262625252525252525252525252525252526262626262626262626 - 2626262626272727272727272727272727282828282828282828282828282828 - 2828282828282828282828282828282828282828282929292929292929292929 - 292A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D - 2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A292929292929 - 2828282828282828282727272727272727272727272626262626262626262626 - 262626262727272727272727272727272828282828282828282929292B2B2B33 - 3333353535363636373737383837393A3A3938382F2E2F2C2C2B2B2B2C2C2C2D - 2C2C2C2D2C2C2C2C2C2D2C2E3434343636363636363636353535363535353535 - 343535343534343433333433333332322E2E2E2A292A29292929292929282929 - 28292A2A292929292A2A2A2B2B2B3333333B3B3B3C3C3C3D3D3D3D3D3D3D3D3D - 3B3B3B3A3A3A3939393737373131312929292728282727282828272827272727 - 272727272727272726272929292F2E2E2E2F2D2E2E2E2F2E2D2E2D2D2E2D2D2E - 2D2D2D2C2C2D2C2D2C2C2C2C2C2D2C2C2C2C2C2C2D2D2D2D2C2C2D2C2D2C2C2C - 2C2C2C2E2D2D2D2D2D2D2C2D2E2E2D2D2E2D2E2D2C2D2C2C2D2C2C2E2D2D2E2D - 2D2E2C2D2E2D2D2D2C2C2D2D2C2D2C2C2C2C2C2C2C2C2C2B2C2C2C2C2C2B2B2B - 2B2B2A2A2A292929282727262626242524242424242424242424232324232323 - 2424232323232525252929292829292928292828292828282828282828282828 - 2828272727272727272727262627262626262627262527262526252626252525 - 2525252425242524252524252424242524242424242424242424232423232324 - 2323231E1E1E1E1E1E1D1E1E1D1E1E1E1E1E2C2C2C3737373C3B3C3F3F404444 - 433433331D1C1C1C1C1C1C1C1C1B1C1B1B1C1C1B1C1B1B1B1B1B1B1B1B1B1B1B - 1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A191A1A191A191A191A1A19191919191919 - 1818181918181918181919181818171818181718181718181717171817171717 - 1716171616171616161716161617161616161616151616161515151515161515 - 1515151514151514141514151414141415141414131414131313131414141313 - 3030301312133030307979793030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 303030303030303030303030303030303030303030303030303030303030302F - 2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B - 2A2A2A2A2A2A2929292929292828282828282828282727272727272727272727 - 2727272727272727272727272727272728282828282828282828282829292929 - 29292929292A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D - 2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D - 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2929292929292828282828 - 2828282828282827272727272727272727272727272727272727272727272727 - 2727272727272727272727272727272727272727272727272727262626262626 - 2626262626262626262626262626262626262626262626262727272727272727 - 2727272728282828282828282828282829292929292929292929292929292929 - 29292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B - 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A29292929 - 2929282828282828282828282828272727272727272727272727272727272727 - 2727272828282828282828282828282929292929292A2A2A2A2A2A2C2C2C3535 - 3536363638383838383839393A3A3B3A3A3B3B2F2F2F2D2D2D2C2D2C2D2C2D2D - 2C2D2C2C2D2C2D2C2D2C2D333333373737373737363636363535363636353535 - 3535353534343433322C2C2D2A2A2A2A2A2A2A2A2A2A292A2A292A2B2A2B2A2B - 2A2C2B2B2F2E2E3A3B3A4040404040404242424242424141414040403E3E3E3C - 3C3C3B3B3B3939393939393939393433342E2D2D282828272727282728272727 - 272727272727262627303030302F2F302F2F302F2E2F2E2E2F2E2E2F2E2E2F2E - 2D2E2E2E2D2E2E2D2D2D2D2E2D2D2D2D2D2D2D2D2D2D2E2E2E2D2D2D2E2D2D2E - 2E2E2E2E2E2E2E2E2E2D2E2E2D2D2E2D2D2E2D2C2E2E2D2E2D2D2E2D2D2D2D2D - 2D2C2D2D2D2D2D2D2C2D2C2C2B2B2B2B2B2B2929292828272726272525262625 - 2625252625242424252524242424242424242424242424242424242324242323 - 2423232324252525292929282929292929292829282828282828282828282828 - 2727272827272727262726272726262626262726252725262626252625262525 - 2524252525242425242524242524242424242424242423242424232423232320 - 1F201E1E1E1D1E1E1D1E1E1E1F1E2728283636363A3A3A3E3E3E4242423D3D3D - 1C1C1D1C1C1C1C1C1C1B1C1C1B1C1B1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A - 1A1A1B1B1A1A1A1A1B1A1A1A1A191A1A191A1919191919191919191919191919 - 1818191818181918191818181818171718181717181817171717171817171717 - 1717161616161616161617161616161616161615161515161515151515151515 - 1514141515141414141414151414141414141414131413141314131332303013 - 1413303030797979303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030302F2F - 2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2A - 2A2A2A2A2A292929292929292929282828282828282828282828282828282828 - 2828282828282828282828282828282929292929292929292929292A2A2A2A2A - 2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D - 2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929 - 2828282828282828282828282828282828282828282828282828282828282828 - 2828282828282828282828282827272727272727272727272727272727272727 - 2727272727272727272727272727272727272727272727282828282828282828 - 2828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C - 2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2929 - 2929292929292928282828282828282828282828282828282828282828282828 - 28282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2E2E2E363636 - 3838383939393A3A3A3B3B3B3D3C3D3C3C3C3131302E2E2E2E2E2D2E2D2D2E2E - 2D2D2D2E2E2E2D2D2D2D32313137373737373737373737363736373635353531 - 30302B2B2B2B2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2B2C2E2D2D383738 - 4141414344434545454747474747474747474545454343434141413E3E3E3C3C - 3C3A3A3A3A3A3A39393938393939393A36373731313128292928292828282828 - 28282828282E2E2E30302F302F2F2F2F2F302F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2E2F2E2E2E2F2E2F2E2E2E2E2E2E2E2E2E2E2D2E2D2E2E2E2E2E2F2E2E - 2E2E2E2E2E2E2E2E2E2D2D2D2D2F2E2E2E2D2D2F2D2D2F2D2E2E2D2D2E2D2D2E - 2D2D2B2B2B262526262526262526262526262526262526262525252525262526 - 2525252525252525252524252524252424242424242424242323242424232324 - 2423242325252428282829292929292928292829282828282828282828282727 - 2827272727272626272626272626272626272626262626262526252525252525 - 2524252425252425242525252424242424242424242424242424232020201E1E - 1E1E1E1E1E1E1E1F1E1E2323233536353A3A3A3E3E3E4242424546451F1F201C - 1D1C1C1C1C1C1C1C1B1C1C1C1B1C1B1B1C1B1B1B1B1B1B1B1B1B1B1B1B1A1B1B - 1A1A1A1A1B1A1A1A1A1A1A1A1A1A1A1A191A191A19191A191819191919191918 - 1918181818191819181818181818171817171817181818171717171817171717 - 1717161716171617161616161616151616161516151616151515151515151515 - 1415151515151514151414141414141414141414141314143030321413133030 - 3079797930303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 30303030303030303030303030303030303030303030303030302F2F2F2F2F2F - 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B - 2B2A2A2A2A2A2A2A2A2A29292929292929292929292929292929292929292929 - 29292929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B - 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D - 2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A29292929 - 2929292929292929292929282828282828282828282828282828282828282828 - 2828282828282828282828282828282828282828282828282828282828282828 - 282828282828282828282828282828282828282828282929292929292929292A - 2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D - 2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E - 2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A - 2A2A2A2929292929292929292929292929292929292929292929292929292929 - 292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2F2F2F38383839 - 39393B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3433342D2D2E2E2D2E2D2E2D2D2E2D - 2E2E2E2D2E2E2D2D2D3030303737373737363737363333322D2D2D2B2C2B2B2B - 2C2C2B2B2B2B2B2C2B2B2C2C2C2C2C2C2D2D2D3333333E3E3E43434346454648 - 49484B4C4B4D4D4D4D4D4D4C4C4C4848483C3C3C4242423E3E3E3C3C3C3B3B3B - 3A3A3A3A3A3A3A3A3A3A393A3A39393A3B3B2929292929292929292929292828 - 282D2D2D313131313030313030313030302F2F30302F302F2F2F2F2F2F2E2F2E - 2E2E2F2F2F2F2E2E2F2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2E2F2F2E2E2E2E - 2E2E2E2F2F2E2E2E2E2F2E2D2E2D2D2F2D2D2E2D2D2E2D2D2E2D2D2E2D2D2928 - 2926252626262626262626252626252626252626252626252625252625252525 - 2525252524242524252425242424242425242424242424242424242424232323 - 2423232425242828282928292829292928282929282828282828272828272827 - 2727262727262728262627262627262626262526262526252525252525252525 - 25252525242525242425242424242424242424242423242222221F1E1E1F1E1E - 1E1E1E1E1D1E201F203333343939393D3D3D4141414545452A2A2A1C1C1D1D1D - 1C1C1C1C1C1C1C1C1C1C1C1C1B1B1C1B1B1B1B1B1B1B1B1B1B1A1B1B1B1A1A1A - 1A1B1A1A1A1A1A1A1A1A1A1A1A19191919191A191A1919191919191918191919 - 1818191818181818181818181818181818171817181717181717171717161716 - 1716161617161616161616161616151616151615161515161515151515151514 - 1515151415141414141514141415141414141414323230141313303030797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797979797979797979797979 - 7979797979797979797979797979797979797979797978787878787877777777 - 77777676767575757474747373737272727171717070706F6F6F6E6E6E6D6D6D - 6C6C6C6B6B6B6A6A6A6A6A6A6A6A6A6969696969696969696969696969696A6A - 6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C6D6D6D6E6E6E6F6F6F70707070707071 - 7171727272737373747474757575757575767676767676777777777777777777 - 7878787878787878787878787878787878787878787878787878787878787878 - 7878787878787878787878787878787878787878787878787878787878787877 - 7777777777777777777777767676767676757575747474747474737373727272 - 7171717070706F6F6F6E6E6E6E6E6E6D6D6D6C6C6C6B6B6B6A6A6A6A6A6A6969 - 6969696969696968686868686868686868686868686868686868686868686868 - 6868686868686868686868676767676767666666666666666666666666666666 - 6666666666666666666767676767676868686969696969696A6A6A6B6B6B6C6C - 6C6D6D6D6D6D6D6E6E6E6E6E6E6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F70 - 7070707070707070707070707070717171717171727272737373747474747474 - 7575757575757676767676767676767676767676767676767575757575757474 - 747373737272727171717070707070706F6F6F6E6E6E6D6D6D6C6C6C6B6B6B6A - 6A6A6A6A6A6A6A6A6969696969696969696969696A6A6A6A6A6A6B6B6B6C6C6C - 6C6C6C6D6D6D6E6E6E6F6F6F7070707171717272727373737979798B8B8B9292 - 929393939494949794979A989A989A9A8B8D8D72757575757272727575727572 - 7272727275717171747474858282797979707070706E70706E706E7070707070 - 6F6F726F6F6F727275777777959595A6A6A6AAAAAAAEAEAEB5B5B5B9BAB9BBBB - BBBEBEBEBCBCBC9E9E9E7272726B6E6E767676898B8B9191919191918F8F8F90 - 90909090908D90909191919191907373766769676967676669666666696E6E6E - 7C7C7C7C7C7B7C7C7B7B7B7B7B78787B78787B78787B78787876787876767678 - 7678767676767679777777777777777777777778757878787875787575757575 - 7575767673767373767373767173737373737171737171717171606062606062 - 606062605D60606062605D60605D60605D60605D606060626260606260606060 - 60606060626262696C6C7979796262625D5B5B5B5B5B5B585B585B58585B5B5B - 5B585B5D5B656265676767676765656565676565656565656562656262656260 - 65606265626065606062606062606060606060605D605D5D5D5D5D5D5D5D5D5D - 5D5D5D5D5D5D5D5D5B5B5B5D5B5B5B5B5B5B5B5B585B4B4E4B4E4B4B4B4E4B4B - 4B4B4E4E4E6E6E718D8D8D9597959E9E9EA7A7A7808383464946494946464646 - 4649464646464646464343434343434643434343434343434343434341414141 - 41414141414141413E413E413E413E41413E3E3E3E3E3E3E3E3D3E3D3D3E3D3E - 3D3D3D3D3D3D3D3D3A3D3D3D3D3A3D3D3A3D3A3D3D3A3A3A3A3A3A383A3A383A - 3838383838383838383838383835383838383835353535353535353535353535 - 3532323232323232323232323230323232323213141330303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030302F2F2F2F2F2F2F2F - 2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E - 2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F30303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 3030303030303030303030303030303030303030303030303030303030303030 - 302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D - 2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A - 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A29292929292929292929292929 - 29292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C - 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D - 2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F - 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E - 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B - 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C - 2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E3030303939393C3C3C - 3C3C3C3C3C3C3E3E3E3F3F3F3F3F3F3B3B3B2F302F2E2F2E2E2E2E2E2F2E2E2F - 2E2E2E2E2D2D2D2D2E2D2D2D2D2D2D2D2D2D2D2C2C2D2E2E2D2D2E2E2E2E2E2F - 2F2F3938394242424746464949494B4B4B4F4F4F5151515354535655564D4D4D - 3636362C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D3232323737373838383939 - 393939393A393A3A393A303030292A292A292A2A29292929292C2B2B32313232 - 3231323231323131323131323131313031313030302F303030303030302F2F30 - 2F2F2F302F2F2F302F2F2F2F2F2F2F302F30302F302F302F2F30302F302F302F - 2E2F2E2E2F2E2E2F2E2D2F2E2E2E2D2D2E2D2E2A2A2A26262726262726262726 - 25262625262726272726272726272827282727282B2A2A2D2E2D313132353535 - 3838383736373736363535362727272525242424232424242324242423242324 - 2424252528282829292829292828292829282828282728282727272628262727 - 2727272626272626272626262626262625252526252526262625252525242525 - 242424242525252424252424242424242424201F1F1F1F1E1E1F1E1E1E1E1F1F - 1F2828283838383C3B3C4041404444443F3F3F1C1D1D1D1D1C1C1C1C1C1C1C1C - 1C1C1C1C1C1B1C1C1B1B1B1C1B1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1B1A1B1B - 1A1A1A1A1A1A1A1A1A191A1A191A1A191A191919191919191919191819191818 - 1818181918181818181818171818171718181717171717171717171717171717 - 1617171616161616161616151615161615161616151515151515151515141515 - 141515151414151514141414141414141414} - OnClick = OnCloseClick - end - object Label1: TLabel - Left = 8 - Top = 264 - Width = 312 - Height = 13 - Caption = 'Copyright RemObjects Software, 2002-2007. All rights reserved.' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - Transparent = True - OnClick = OnCloseClick - end - object lbl_Version: TLabel - Left = 253 - Top = 40 - Width = 10 - Height = 16 - Caption = '[]' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -13 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - Transparent = True - end - object Label7: TLabel - Left = 8 - Top = 280 - Width = 91 - Height = 13 - Caption = 'Visit our website at' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - Transparent = True - end - object Label3: TLabel - Left = 102 - Top = 280 - Width = 150 - Height = 13 - Cursor = crHandPoint - Caption = 'http://www.remobjects.com/ro' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsUnderline] - ParentFont = False - Transparent = True - OnClick = Label3Click - end - object btn_Cancel: TButton - Left = 418 - Top = 272 - Width = 77 - Height = 25 - Cancel = True - Caption = 'btn_Cancel' - Default = True - Font.Charset = DEFAULT_CHARSET - Font.Color = clWhite - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - ParentFont = False - TabOrder = 0 - OnClick = OnCloseClick - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.pas deleted file mode 100644 index 792ccdd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROAbout.pas +++ /dev/null @@ -1,107 +0,0 @@ -unit fROAbout; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ExtCtrls; - -type - TAboutForm = class(TForm) - Image1: TImage; - Label1: TLabel; - Label3: TLabel; - btn_Cancel: TButton; - lbl_Version: TLabel; - Label7: TLabel; - procedure OnCloseClick(Sender: TObject); - procedure Label3Click(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -function VersionBuildNo(iInstance:THandle):integer; - -var - AboutForm: TAboutForm; - sVersionName : string = ''; - -implementation - -uses ShellAPI; - -{$R *.dfm} - -type TVersion = record - Major,Minor,Release,Build:word; - end; - -function GetFileVersion(iFileName:string):TVersion; -var whocares:dword; - Size:dword; - Data:pointer; - FixedData:pVSFixedFileInfo; -begin - Size := GetFileVersionInfoSize(pChar(iFileName), whocares); - if Size > 0 then begin - GetMem(Data,Size); - try - if GetFileVersionInfo(pChar(iFileName),0,Size,Data) then begin - Size := sizeof(TVSFixedFileInfo); - if VerQueryValue(Data,'\',pointer(FixedData),Size) then begin - result.Major := HiWord(FixedData^.dwFileVersionMS); - result.Minor := LoWord(FixedData^.dwFileVersionMS); - result.Release := HiWord(FixedData^.dwFileVersionLS); - result.Build := LoWord(FixedData^.dwFileVersionLS); - end; - end; - finally - FreeMem(Data); - end; - end; -end; - -function GetModuleName(iInstance:THandle):string; -var Buffer: array[0..MAX_PATH] of Char; -begin - SetString(result, Buffer, GetModuleFileName(iInstance, Buffer, MAX_PATH)); -end; - -function VersionStringLong:string; -var Version:TVersion; -begin - Version := GetFileVersion(GetModuleName(hInstance)); - result := IntToStr(Version.Major)+'.'+IntToStr(Version.Minor)+'.'+ - IntToStr(Version.Release)+'.'+IntToStr(Version.Build){+'.'+ - FormatDateTime('yymmdd', CompileTime);} -end; - -function VersionBuildNo(iInstance:THandle):integer; -var Version:TVersion; -begin - Version := GetFileVersion(GetModuleName(iInstance)); - result := Version.Build; -end; - -procedure TAboutForm.OnCloseClick(Sender: TObject); -begin - Close(); -end; - -procedure TAboutForm.Label3Click(Sender: TObject); -begin - ShellExecute(Handle,'open','http://www.remobjects.com/ro',nil,nil,SW_SHOWNORMAL); -end; - -procedure TAboutForm.FormCreate(Sender: TObject); -begin - lbl_Version.Caption := 'Version '+VersionStringLong(); - if sVersionName <> '' then - lbl_Version.Caption := sVersionName+' - '+lbl_Version.Caption; - btn_Cancel.Left := Width+10; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.dfm deleted file mode 100644 index e2bb389..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.dfm +++ /dev/null @@ -1,3248 +0,0 @@ -object ROServerClassForm: TROServerClassForm - Left = 381 - Top = 239 - BorderIcons = [] - BorderStyle = bsSingle - Caption = 'Select Ancestor Type for %s' - ClientHeight = 346 - ClientWidth = 500 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Image2: TImage - Left = 0 - Top = 0 - Width = 500 - Height = 64 - Align = alTop - AutoSize = True - Picture.Data = { - 07544269746D617036770100424D36770100000000003600000028000000F401 - 000040000000010018000000000000770100C01E0000C01E0000000000000000 - 0000858585858585858585858585858585858585858585858585858585858585 - 8585858484848484848484848484848484848484848484848484848484848484 - 8484848483838383838383838383838383838383838383838383838383838383 - 8383838383838383838383828282828282828282828282828282828282828282 - 8282828282828282828282828181818181818181818181818181818181818181 - 8181818181818181818181818181818180808081818181818180808080808080 - 80808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F - 7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E - 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D - 7C7C7C7C7C7C7B7B7B7A7A7A7979797979797878787878787777777676767575 - 757575757474747575757474747474747474746A7CC3677FDD677FDD6880DC69 - 80DD6981DD6A81DC6A81DC6B82DC6B82DC6C82DC6C83DC6E83D6808495878787 - 8B8B8B8D8D8D8F8F8F9090909191919292929292929292929292929191919191 - 919090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F90909091919191 - 9191929292929292929292949494949494959595969696969696979797979797 - 9898989A9A9A9A9A9A9A9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9F9F9FA0A0 - A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A5A5A5A5A5A5A6A6A6A7A7A7A8A8A8A8 - A8A8A9A9A9A9A9A9ABABABACACACACACACAEAEAEAFAFAFB0B0B0B2B2B2B3B3B3 - B5B5B5B6B6B6B7B7B7B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBEBFBFBFBFBF - BFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C4 - C4C4C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C8C8C8C9C9C9CACACA - CBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1D1 - D1D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4 - D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8 - D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECEDEDEDECECECEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78686 - 8685858585858585858585858585858585858585858585858585858585858585 - 8585848484848484848484848484848484848484848484848484848484848484 - 8484848383838383838383838383838383838383838383838383838383838383 - 8383838383838383838382828282828283838382828282828282828282828282 - 8282828282828282828282818181818181818181818181818181818181818181 - 8181818181818181818181818181818181818181818080808080808080808080 - 808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F80 - 80808080807F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8080808080807F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7E7E - 7E7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7C - 7C7C7C7C7C7B7B7B7A7A7A7A7A7A797979797979787878777777767676767676 - 7575757676767676767575757575757377896880DD6880DD6981DD6981DD6A81 - DD6A82DD6B82DD6A82DD6C83DD6D83DD6D83DC6E84DC7084D77F87A88C8C8C8E - 8E8E919191919191939393939393949494949595959696969797959797969898 - 9698989596969495959394949293939191919191919191919292929292929393 - 939393939393939494949595959595959797979797979898989898989999999A - 9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA0A0A0A0A0A0A1A1A1 - A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAA - AAABABABACACACADADADADADADAEAEAEAFAFAFB1B1B1B1B2BAB0B3C1AFB3C7B0 - B4C9B2B6CAB2B6CAB4B7CAB5B8CAB8BAC6BBBCC3BFBFC0C0C0C0C0C0C0C1C1C1 - C1C1C1C3C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6C5C5C5C6C6 - C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9C9C9C9CACACACCCCCCCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D3D3D3D3D3D3 - D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADADAD9D9D9DADADADADADADADADADADA - DADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDBDBDBDCDCDCDCDCDCDCDCDCDD - DDDDDCDCDCDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7868686868686 - 8686868686868686868585858585858686868686868686868585858585858585 - 8585858585858585858585858585858584848485858585858584848484848484 - 8484848484848484848484848484848484848484848484848484838383838383 - 8383838383838383838383838383838383838383838383838383838282828282 - 8282828282828282828282828282828282828282828282828282828281818181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181818080808080808080808080808080808080808080 - 808080807F7F7F8080808080808080807F7F7F8080808080808080807F7F7F7F - 7F7F7F7F7F7F7F7F8080808080807F7F7F8080808080808080808080807F7F7F - 8080808080807F7F7F7F7F7F7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7B7B7B7B7B7B7A7A7A79797979797979797978787877777777777776 - 76767676767676767676767676766E7CB06981DE6980DD6A82DE6B82DD6B82DD - 6B82DD6C83DD6C83DE6D84DC6E84DD6E85DD6F85DD6F85DC8089AF8F8F8F9191 - 919393939393939494949797979899999A9C9C9B9E9E9EA1A19FA3A39FA3A39E - A2A29C9F9F999B9B969898949595929393919191919191929292939393939393 - 9494949595959595959696969797979797979898989898989A9A9A9B9B9B9B9B - 9B9C9C9C9C9C9C9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A3A3A3A3 - A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9ACACAC - ACACACADADADAEAEAEAEAFB3ABAFC3AAAFCDABB1D0ACB2CFAEB3CFAEB3CFB0B5 - D0B1B6CFB2B6CFB2B7CFB3B8CFB4B8CFB6BAD0BABCCBBEBFC5C1C1C1C2C2C2C2 - C2C2C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9C8C8C8CACACACACACACACACACCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D1D1D1D3D3D3D3D3D3D3D3D3D3 - D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6 - D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADA - DADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3 - E3E3E3E3E2E2E2E3E3E3E4E4E4E3E3E3E4E4E4E3E3E3E3E3E3E5E5E5E4E4E4E4 - E4E4E5E5E5E4E4E4E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECEC - ECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7 - F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F787878787878787878786 - 8686868686868686868686868686868686868686868686858585858585858585 - 8585858585858585858585858585858585858585858585858484848484848484 - 8484848484848484848484848484848484848484848484848483838383838383 - 8383838383838383838383838383838383838383838383838383838383828282 - 8282828282828282828282828282828282828282828282828282828181818181 - 8181818182828282828281818181818181818181818181818181818181818181 - 8181818181818181828282808080808080808080808080808080808080808080 - 8080808080808080808080808080808080808080808080808080808080808181 - 8181818180808080808081818181818181818181818181818181818181818181 - 81818080808080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C7C7C - 7C7C7C7B7B7B7B7B7B7A7A7A7979797979797878787777777878787777777777 - 7776767676767677777777787E6A80D76A81DD6B82DE6B83DD6B83DD6C83DD6D - 84DE6E84DD6E84DD6E84DD6F85DD6F85DD7086DC7086DC7C8ABF919191939393 - 9494949697979899999C9E9EA0A4A4A5ABABA9B1B1ACB5B5ACB5B5ACB4B4A7AF - AFA3A9A99EA3A39A9D9D96989895969694949493939394949494949495959595 - 95959696969797979797979898989999999999999A9A9A9B9B9B9C9C9C9C9C9C - 9D9D9D9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A2A2A2A3A3A3A4A4A4A4A4 - A4A5A5A5A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAAAAAAAACACACADADADAD - AEB2AAAFC4A9AFD0AAB0D0AAB0D0ACB2D0AEB3D0AEB3D0AFB4D0B0B5D0B2B7D0 - B3B7D0B3B8D0B4B8D0B5B9D0B6BAD0B7BAD0B7BBD0BABDCEBFC0C5C2C2C2C3C3 - C3C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7 - C7C7C9C9C9CACACACACACACACACACBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D3D3D4D4D4D4D4 - D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADA - DADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78787878787878787878787878686 - 8686868686868686868686868686868686868686868686868686868686868685 - 8585858585858585858585858585858585858585858585858585858585858585 - 8484848484848484848585858585858484848484848484848484848484848484 - 8484848484848484848483838384848483838383838383838383838383838383 - 8383838383838383828282838383838383828282828282828282828282828282 - 8282828383838282828282828282828282828181818181818181818282828181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181808080818181818181828282828282818181828282 - 8282828282828282828282828282828282828282828282828282828282828282 - 828181818181818080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A797979787878787878777777777777 - 787878777777787878727CA56B82DE6B83DE6C83DE6C83DE6C84DE6E84DE6E84 - DD6E85DE6F85DD6F85DD7086DD7086DD7086DC7287DC7889CE91929894949497 - 97979A9C9C9FA3A3A6ACACAFB8B8B5C0C0BAC7C7BCCACABBC9C9B7C3C3B0BBBB - A9B1B1A2A7A79B9E9E9698989494949393939494949595959595959595959696 - 969797979797979898989999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9D9D9D9F - 9F9F9F9F9F9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5 - A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAABABABACACACAAADBDA8AECEA8AF - D0AAB0D0AAB0D0ABB1D0ADB3D0AEB3D0AEB4D0AFB4D0B1B6D1B2B7D0B3B7D0B3 - B8D0B4B9D0B5B9D0B7BBD1B8BCD1B8BCD1BABDD0BBBED0BEC0CDC4C4C5C5C5C5 - C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8CACA - CACACACACBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5 - D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D6D6D6D7D7 - D7D8D8D8D8D8D8D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADA - DADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECEDEDEDECECECEDEDEDEDEDEDECECECEDEDEDED - EDEDEDEDEDECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7888888888888878787878787888888878787 - 8787878787878787878787878787878787878787878686868686868686868686 - 8686868686868686868686868686868686868686868685858585858585858585 - 8585858585858585858585858585858585858585858585848484848484848484 - 8484848484848484848484848484848484848484848484848383838383838383 - 8383838383838383838383838383838383838383838383838382828282828283 - 8383838383838383828282828282828282828282828282828282828282828282 - 8282828282828282828181818181818282828181818181818181818181818181 - 8181818181818182828281818182828282828283838382828282828282828283 - 8383838383848484848484838383838383838383848484838383838383838383 - 8383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D7C7C - 7C7C7C7C7B7B7B7A7A7A7A7A7A79797979797979797978787878787878787878 - 78787878787979796D82D26C83DE6C84DE6C83DE6C84DE6D84DE6F85DE6F85DE - 7086DD7086DD7187DD7187DD7287DD7287DC7388DD778AD38D91A19697979B9D - 9DA3A7A7ACB4B44F446B41335E41335E41335E41335E5A52769095A6B7C4C4AC - B5B5A2A8A89B9E9E979898959595959595959595969696979797979797989898 - 9999999999999A9A9A9A9A9A9C9C9C9C9C9C9D9D9D9E9E9E9E9E9E9F9F9FA0A0 - A0A0A0A0A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A8 - A8A8A8A8A8A9A9A9AAAAAAABABABABABABA8ADC3A7AED2A7AED1A8AFD0AAB1D1 - AAB1D0ABB1D0ADB3D0AEB4D1AFB5D1B0B5D1B1B6D1B3B8D1B3B8D1B5B9D1B5B9 - D1B6BAD0B7BBD1B8BCD1B9BDD0BABDD0BBBED0BBBED0BEC0CFC4C4C7C6C6C6C5 - C5C5C6C6C6C7C7C7C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C9C9C9CACACACACACA - CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1 - D1D1D1D1D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADA - DADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFDEDEDEDEDE - DEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2 - E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F788888888888888888888888888888888888888888888 - 8888888888878787878787878787878787878787878787878787878787868686 - 8686868787878787878787878686868686868686868686868686868686868686 - 8686868686868686868686868685858585858585858585858585858585858585 - 8585858585848484858585848484848484848484848484838383848484838383 - 8383838484848484848484848484848383838484848383838383838383838383 - 8383838383838383838383838382828282828283838382828283838382828282 - 8282828282828282818181828282828282818181818181828282828282828282 - 8181818282828383838282828383838383838383838484848484848484848484 - 8484848485858585858585858585858585858585858585858584848484848483 - 83838383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D - 7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797979797979797878787979 - 797A7A7A777D936C84DF6D84DF6D85DE6E85DE6E85DE6F85DE7086DE7087DE71 - 87DE7187DD7187DD7388DD7388DE7489DD7489DD778AD88C93AD9C9E9EA4A9A9 - AEB7B73F32603F32603F32603F32603F32603F32603F3260716F8DB9C6C6ABB3 - B3A1A6A69A9C9C9797979696969696969797979898989898989898989999999A - 9A9A9A9A9A9A9A9A9C9C9C9D9D9D9D9D9D9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0 - A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A8A8A8A9A9 - A9A9A9A9AAAAAAAAAAADA6ACCAA6AED2A7AED2A9B0D2A9B0D1AAB1D1ABB1D1AC - B2D1AEB3D1AEB4D1AFB5D1B0B5D1B2B7D2B3B8D1B4B9D1B4B9D1B6BAD1B7BBD1 - B7BBD1B9BDD2BABED1BBBED1BCBFD1BDC0D2BEC1D2BFC2D1C5C6C9C7C7C7C7C7 - C7C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9CACACAC9C9C9CBCBCBCBCBCBCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D3D3D3 - D3D3D3D4D4D4D5D5D5D5D5D5D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADA - DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2E2E3 - E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEC - ECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78989898989898989898989898888888989898888888888888888 - 8888888888888888888888888888888888888887878787878787878787878786 - 8686878787878787878787878787868686878787868686868686878787868686 - 8686868686868686868686868686868686868585858585858585858585858686 - 8685858585858585858585858585858584848484848484848484848484848484 - 8484848484848484848484848484838383848484838383838383838383838383 - 8383838383838383838383838383838383838383838383838383838383838282 - 8282828283838382828282828282828282828283838382828282828282828282 - 8282838383848484838383848484848484858585858585858585868686868686 - 8686868787878787878787878787878787878787878686868585858585858585 - 858383838383838282828181818080807F7F7F7F7F7F7F7F7F7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A - 7A7A7A7181BF6D84DF6E85DF6F86DF6F85DE7086DF7087DF7187DE7188DE7288 - DE7288DE7389DE7489DD7489DD748ADD758ADD788EDE8E9ABAA1A6A6ACB4B43E - 30633E30633E30633E30633E30633E30633E30633E3063898DA3B5C0C0A7AEAE - 9EA1A19899999696969696969797979898989999999999999A9A9A9A9A9A9B9B - 9B9B9B9B9D9D9D9E9E9E9E9E9E9E9E9EA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3 - A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAA - ABABABA7ACC6A6ADD2A7AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2ADB3D2AFB4 - D2AFB5D2B0B6D2B2B7D2B3B8D2B3B8D2B5BAD2B5BAD1B7BBD2B7BBD1B8BCD2B9 - BDD2BABED1BBBED1BCBFD1BDC1D2BEC1D2BFC2D2C0C3D1C6C6C8C7C7C7C7C7C7 - C9C9C9C8C8C8C9C9C9C9C9C9CACACACACACACBCBCBCCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5 - D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7898989898989898989898989898989898989898989898989888888898989 - 8989898888888888888888888888888888888888888888888888888787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686868686868686868686858585858585868686868686 - 8686868585858585858585858585858585858585858484848484848585858585 - 8585858584848484848484848484848484848484848484848484848484848484 - 8484848484838383838383848484838383838383838383838383838383838383 - 8383838383838383838383838383838282828383838383838383838383838484 - 8484848485858585858585858586868686868687878788888888888889898988 - 8888898989898989898989898989888888888888888888878787878787868686 - 8585858484848383838181818080807F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7C7C - 7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A7A7A7A7A - 7D886E85DF6E85DF6F86DF7086DE7086DF7087DF7188DE7288DE7288DE7389DE - 7389DE758ADE758BDE768BDD768BDD7A8EDE8095E08F9FCAA6ADAD7D7D94B2BD - C1C5D5D5B3C1CB58517D3C2F653C2F653C2F65453A6DBECCCCAEB7B7A2A6A69B - 9D9D9797979898989898989898989999999A9A9A9A9A9A9B9B9B9B9B9B9D9D9D - 9D9D9D9E9E9E9F9F9F9F9F9FA1A1A1A0A0A0A2A2A2A2A2A2A3A3A3A2A2A2A4A4 - A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAAA7ABC1A6 - ADD3A6AED2A8AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2AEB4D3AFB5D2B0B6D2 - B1B6D2B2B7D2B3B9D3B4B9D2B5BAD2B6BAD2B7BBD2B8BCD2B9BDD3BABED3BBBF - D2BCBFD2BDC0D2BDC1D2BFC2D3C0C3D3C1C3D3C3C5D1C7C8C9C8C8C8CACACAC9 - C9C9CACACACACACACBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECECFCFCF - CFCFCFD0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5 - D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9 - E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECEC - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78A8A - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8989898989898A8A8A89898989898989 - 8989888888888888888888898989888888888888888888888888878787888888 - 8888888888888888888888888888888787878787878787878787878787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848585858585858484848484848484848484 - 8484848484848484848484848484848484848484848484848484848483838384 - 8484848484838383838383838383838383838383838383848484858585858585 - 8585858686868686868787878888888888888A8A8A8989898A8A8A8A8A8A8A8A - 8A8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A89898988888888888887878786 - 86868484848383838181818181818080807F7F7F7F7F7F7E7E7E7D7D7D7D7D7D - 7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7A7A7A7B7B7B7B7B7B7B7B7B7681 - AE6F86DF7086DF7187DF7188DF7288DF7288DF7289DF7389DF7489DE748ADE75 - 8BDE768BDE778CDE778CDE7A8EDF7E93E08499E199A3B8A7AEAEAEB7B7B8C4C4 - C4D4D4C6D9DC4E45773B2E673B2E673B2E6799A1B2B4BFBFA6ACAC9EA0A09999 - 999898989898989999999999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9E9E9E9E - 9E9E9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5 - A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAA9ABB5A5ADD4A6ADD3A7AF - D3A8AFD3AAB1D4AAB1D3ABB2D3ACB3D3ADB3D3AFB5D3AFB5D3B1B7D3B2B7D3B3 - B8D3B4B9D3B5BAD3B6BBD3B7BBD3B8BCD3B8BDD3B9BDD3BABED3BCBFD3BDC0D3 - BDC0D2BEC1D3BFC2D3C1C4D4C1C3D3C2C4D3C5C6CEC9C9C9C9C9C9C9C9C9CACA - CACACACACACACACCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6 - D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9DA - DADADBDBDBDADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2 - E2E3E3E3E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A - 8A89898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888898989888888888888888888888888888888 - 8888888888888888888787878787878787878787878787878787878787878787 - 8787878787878787878786868686868686868685858586868686868686868686 - 8686858585858585868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848484848484848484848484848484848484 - 8484848483838384848483838383838384848484848485858586868685858587 - 87878787878787878989898A8A8A8B8B8B8B8B8B8B8B8B8C8C8C8D8D8D8C8C8C - 8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8A8A8A8989898888888686 - 868585858383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7C7C7C7B7B7B7C7C7C7B7B7B7B7B7B7B7B7B7C7C7C7B7F897087E0 - 7087E07187DF7288DF7389E07389E07389DF748ADF7489DE758ADF768BDE768B - DE778CDF778CDE798EDE7C91DF7F94E0939AA79DA1A1A1A7A7AAB2B2B5C1C1C3 - D4D4979FB6392D69392D69392D698184A2B9C5C5AAB1B19FA2A29A9B9B989898 - 9999999A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9F9F9F9F9F9FA0A0 - A0A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A7 - A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAA6ADD0A6AED4A6AED3A8B0D4A9B0D4 - AAB1D4AAB2D4ABB2D3ACB3D3AEB4D3AFB5D3B0B6D3B1B7D3B2B7D3B3B8D3B3B9 - D3B5BAD3B6BBD3B8BCD3B8BCD3B9BDD3BABED4BBBFD4BCBFD3BDC1D3BDC1D3BF - C2D3C0C3D4C1C4D4C2C4D4C2C5D4C3C6D4C8C8CBCACACACBCBCBCBCBCBCBCBCB - CBCBCBCCCCCCCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D1D1D1D2D2 - D2D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7 - D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDDDDDDDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E4E4E4E5E5 - E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B8B8B8B8B - 8B8B8B8B8B8A8A8A8B8B8B8B8B8B8B8B8B8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A - 8989898A8A8A8989898989898989898989898989898989898989898989898989 - 8989898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888888888888888888888888888888888888888 - 8787878888888888888888888787878787878787878787878686868686868686 - 8686868686868686868686868686868686868685858585858585858585858585 - 8585858585858585858585848484848484848484848484848484848484848484 - 8484848383838484848484848484848484848585858686868686868787878888 - 888989898A8A8A8A8A8A8C8C8C8D8D8D8D8D8D8E8E8E8E8E8E8F8F8F8F8F8F8F - 8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8D8E8E8B8C8C8A8B8B888888 - 8686868383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7C7C7C7C7C7C7583BB7188E07187E072 - 88E07289E07389E0748AE0748AE0748AE0758ADF758ADF768CDF778CDF778CDF - 788DDE798DDE7A8FDE7D91DF939494949696989A9A9FA4A4AAB2B2BAC7C7C2D2 - D6382C6C382C6C382C6C5D5989BCCACAACB4B4A2A5A59C9D9D9999999A9A9A9A - 9A9A9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA2A2A2A2A2A2A1A1A1 - A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A7A7A7A8A8 - A8A8A8A8A9A9A9AAAAAAA9ACBBA6AED5A6AED5A7AFD4A8B0D4A9B0D4AAB2D5AB - B2D4ADB4D4AEB4D4AFB5D4AFB5D4B1B7D4B2B8D4B3B8D4B3B9D4B5BAD5B7BCD4 - B8BCD4B8BCD4B9BED4B9BED4BABED4BDC0D4BDC1D4BEC2D4BFC2D4C0C3D4C1C4 - D4C2C5D5C4C7D5C3C6D5C4C7D5C6C9D3CACACACACACACBCBCBCBCBCBCBCBCBCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D2D2D2 - D2D2D2D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D7D7D7D7D7D7D8D8D8D8D8D8D8D8 - D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8C8C8C8C8C8C8C8C8C8B8B - 8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8B8B8B8B - 8C8C8C8D8D8C8D8D8C8D8D8C8D8D8B8C8C8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A - 8A8A8A8A8A8A8989898B8B8B8B8C8C8B8B8B8C8D8D8D8E8E8C8D8D8C8D8D8C8D - 8D8B8C8C8B8B8B8A8A8A8A8A8A8B8B8B8A8B8B8B8C8C8C8E8E8E8F8F8E8F8F8F - 91918F91918E90908E8F8F8D8E8E8B8D8D898A8A888989888888878787878787 - 8686868888888989898889898889898889898888888788888787878686868686 - 8685858586868686878787888887888887888887888886878785858584848484 - 8484848484848484858585868686878888888989898A8A8A8A8A898A8A8B8B8B - 8B8B8B8B8B8B8D8D8D8E8E8E8F8F8F9090909090909191919292929292929394 - 949495959495959496969596969698989598989496969295959092928D8F8F8A - 8B8B8889898586868384848181818080808080807F7F7F7E7E7E7E7E7E7C7C7C - 7C7C7C7C7C7C7C7C7C7C7D7D7C7D7D7983A9738BE1748BE1748BE1758BE1758D - E1768DE1778DE17990E17A90E17C92E17C92E17D93E27D93E17C91E07C90E07B - 90E07C90DF7C8FDA909090929292939393999B9BA3A9A9B2BDBDC5D5D5362A6E - 362A6E362A6E5C588BBECCCCAFB7B7A3A7A79C9D9D9B9B9B9B9B9B9A9A9A9B9B - 9B9D9D9D9E9F9F9FA0A0A1A2A2A2A4A4A5A6A6A6A8A8A6A8A8A7A8A8A6A7A7A6 - A7A7A6A7A7A5A6A6A6A6A6A5A5A5A6A6A6A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9 - AAAAAAABABABA7B0D2A8B2D7AAB2D7ACB4D7AEB6D9AEB7D9AFB8D9B1B8D7B1B8 - D7B1B8D6B0B7D6B2B8D5B2B8D5B4B9D5B4B9D5B5BAD5B6BBD5B8BDD5BABED5BA - C0D6BBC1D6BCC1D6BEC2D7BFC2D5BEC2D5BFC3D5C0C3D5C2C6D6C4C8D7C5C9D8 - C6CAD8C8CCD8C8CCD8C8CBD8CCCDCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECE - CECFCFCFCFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D5 - D5D5D6D6D6D7D7D7D8D9D9D9DADAD9DADAD9DADADADBDBDADBDBDADADAD9DADA - DADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9DADADADADBDBDBDBDBDBDBDBDBDB - DBDCDCDCDCDDDDDCDDDDDCDDDDDCDCDCDCDCDCDDDDDDDDDDDDDCDDDDDCDCDCDD - DDDDDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDE - DEDEDEDEDEDEDFDFDFDFDFDFDEDFDFDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C - 8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8E8F8F9092929295 - 959396969396969194949092928D8E8E8C8D8D8B8B8B8A8A8A8A8A8A8A8A8A8A - 8A8A8B8C8C8C8D8D8F91919294949497979498989498989395959093938E9090 - 8C8D8D8C8C8C8C8D8D8D8F8F909292939595969A9A989D9D9AA0A09BA1A19BA1 - A19AA0A0999E9E969A9A9396969093938E8F8F8B8C8C8A8A8A898A8A8A8B8B8A - 8C8C8D8F8F8E91918F92928F91918C8F8F8A8C8C888989878787878787878888 - 898A8A8B8D8D8C8E8E8D90908D90908C8F8F8A8C8C8889898586868585858585 - 858687878889898A8C8C8C8F8F8D90908F91918E90908D8F8F8C8D8D8C8C8C8D - 8D8D8E8E8E909090919191929292939393949494969696979898999B9B9C9E9E - 9EA1A1A0A4A4A1A6A6A2A7A7A2A8A8A2A8A8A0A6A69DA3A39AA0A0959A9A9094 - 948D9090898B8B8687878383838181818080807F7F7F7E7E7E7E7E7E7D7D7D7D - 7D7D7C7D7D7E7E7E7E86A0778FE37B93E37C94E47C95E47C94E47C94E37D95E4 - 8097E48299E4859DE5889FE589A2E689A1E5899FE5879DE4849AE28297E17F95 - E18393CC919191919191919191989999A1A6A6B0B9B9C2D1D15C588D35297035 - 29705C588DC0CECEB0B8B8A4A8A89D9E9E9A9A9A9B9B9B9C9C9C9E9F9FA1A2A2 - A3A5A5A6A9A9A9ADADACB0B0AEB3B3AFB3B3B0B4B4B0B4B4AFB3B3ADB0B0ACAF - AFAAACACA9AAAAA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A9A9A9AAAAAAACACACAE - B0B8ABB5DAAEB9DBB1BBDCB3BDDCB5C0DDB7C2DEB7C1DDB7C0DCB6BFDBB5BDD9 - B3BBD8B3BAD7B4BAD6B4BAD5B5BAD5B6BCD6BABFD7BCC2D8BFC4DAC0C7DBC1C8 - DBC2C8DBC3C9DBC3C7D9C2C7D8C2C7D8C4C8D8C6CAD9C9CEDBCBD0DDCCD2DECE - D4DFCFD4DFD0D4DED1D4DAD1D3D3CFD0D0CFD0D0CFD0D0CECECECECECECFCFCF - CFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D4D4D5D5D5D6D6D6D8D9 - D9D9DBDBDBDDDDDCDEDEDEDFDFDFE1E1DFE1E1DEE0E0DEE0E0DDDFDFDDDEDEDC - DDDDDBDCDCDBDBDBDADBDBDADBDBDCDCDCDCDDDDDDDEDEDEDFDFDEE0E0DEDFDF - DFE0E0DFE0E0DFE0E0DFE0E0DFE0E0DEDFDFDFDFDFDEDFDFDDDEDEDEDEDEDDDE - DEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDFDFDFDFDFDFE0E0E0E1E1E0 - E1E1E1E2E2E1E2E2E0E1E1E0E0E0DFE0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1 - E2E2E2E2E3E3E3E3E3E3E4E4E2E3E3E2E3E3E2E3E3E2E2E2E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F78D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C - 8C8C8D8D8D8D8D8D8C8C8C8C8C8C8D8D8D8F9191929595979A9A9A9F9F9CA2A2 - 9CA2A29A9F9F969A9A9194948E90908C8C8C8B8B8B8B8B8B8B8B8B8C8D8D8E90 - 90929595969A9A9CA1A19FA5A59FA6A69FA6A69DA2A2989C9C94969691939391 - 92929295959699999B9F9FA0A6A6A3ABABA7B1B1AAB4B4ABB6B6ABB7B7AAB5B5 - A8B2B2A5AEAE9FA7A79AA0A09599998F92928C8E8E8B8D8D8D8E8E9092929498 - 98989D9D989E9E979D9D9498989093938C8E8E888989888989898A8A8D8F8F90 - 9494949999979D9D969C9C949A9A9094948C8E8E898A8A858686858686888A8A - 8C8F8F919595959B9B969C9C969C9C9599999295959091918E8F8F8E8E8E8F8F - 8F9090909292929393939596969899999C9D9D9FA2A2A3A8A8A7ADADABB2B2AF - B8B8B1BBBBB3BEBEB4BFBFB4C0C0B2BEBEAFBABAABB5B5A6B0B09FA7A7999F9F - 9297978D9191898B8B8586868182828080807F7F7F7E7E7E7E7E7E7D7D7D7F7F - 7F7F84947A91DE7F97E6859DE788A1E789A2E78AA3E789A3E78AA3E78EA7E892 - ABE996B0EA99B4EB9CB6EB9CB5EB9AB3EA97AFE991A8E78DA3E5879DE48999CF - 939494929393929292969898A0A4A4AEB7B7C0CECE5A57903328733328735A57 - 8FC0CECEB1B9B9A4A8A89FA0A09C9C9C9D9E9E9FA0A0A3A5A5A7ABABABB0B0B1 - B7B7B5BCBCB8C0C0BBC4C4BCC5C5BCC5C5BDC5C5BAC2C2B7BEBEB4B9B9B1B5B5 - AEB1B1AAACACA9A9A9A8A8A8A8A8A8A9A9A9ABABABACADADB0B2B2B1B8CCB3BE - DFB7C4E1BBC8E2BFCCE4C1CEE5C3D0E6C3CFE5C1CDE3BFC9E1BBC5DEB8C1DBB6 - BED9B6BCD8B6BCD7B7BDD7BAC0D9BEC4DBC2C9DDC5CEE0C8D1E2CAD2E2CAD2E2 - C9D1E0C8CEDEC6CCDCC7CDDCC9CEDDCBD1DFCFD5E1D1D8E3D4DBE5D6DDE6D6DD - E6D6DDE5D6DCE3D6DADAD4D7D7D2D4D4D0D1D1D0D0D0D0D0D0D0D0D0D0D0D0D1 - D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D8D8D8D9DADADCDDDDDEE0E0 - E0E3E3E2E5E5E3E6E6E3E7E7E4E8E8E3E7E7E3E6E6E1E4E4E1E3E3DFE0E0DDDE - DEDCDCDCDBDBDBDBDCDCDCDDDDDEDFDFE0E1E1E1E3E3E2E5E5E4E6E6E4E7E7E4 - E7E7E4E7E7E4E6E6E3E6E6E4E6E6E3E5E5E2E3E3E1E2E2E0E0E0DFDFDFDFDFDF - DEDFDFDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFE0E0E0E1E2E2E2E4E4E3E5E5E3E5 - E5E3E5E5E2E3E3E1E1E1E0E0E0DFE0E0E0E0E0E1E1E1E1E2E2E3E3E3E4E5E5E5 - E7E7E6E8E8E6E8E8E6E7E7E5E6E6E3E4E4E3E4E4E3E3E3E2E2E2E2E2E2E2E2E2 - E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8E8E8E8D8D8D8D8D - 8D8D8D8D8D8D8D8D8D8D8F8F8F929494989C9C9FA5A5A6AEAEAAB4B4AAB4B4A6 - AEAE9FA5A5979B9B9294948E8E8E8C8C8C8C8C8C8D8D8D8F9090939595999D9D - A1A8A8A8B1B1ADB8B8AEBABAACB7B7A6AFAF9FA6A6999E9E969A9A979A9A9BA0 - A0A0A7A7A8B1B1AFBABAB4C2C2B9C8C8AAB6C09AA3B79AA3B798A2B6B8C8C8B4 - C2C2AEBABAA6B0B09DA4A4969A9A9093938F9090919393969B9B9DA4A4A3ABAB - A5AFAFA4ADAD9EA6A6979D9D9194948B8C8C898A8A8C8E8E919595989E9E9FA7 - A7A3ADADA4AEAE9FA8A8989E9E9195958B8D8D8788888788888B8E8E93979799 - A0A0A0A9A9A4AEAEA2ABAB9DA5A5989D9D9395959091918F8F8F8E8F958D909C - 9494949798989A9C9C9FA1A1A4A9A9AAB0B0B1B9B9B7C1C1BCC8C8C0CECEB1BC - C6A0A9BDA1AABE7B7FA69FA9BD9DA7BBACB9C3B9C8C8B2C0C0A9B5B5A1ABAB9A - A1A19297978C8F8F8789898484848181817F7F7F7F7F7F7F7F7F7E81877A8FD8 - 819AE689A3E892ADEB99B3EC9CB7ED9DB8ED9CB7EC9DB8EDA0BBEEA4C0EEAAC5 - F0A6C0E990A3D3A0B7E2AEC9F0AAC5EFA4BDED9CB4EA94ABE792A2CB989A9A95 - 96969494949799999FA4A4AEB7B7BFCDCD5A56913227753227755A5691C1CECE - B2BABAA6AAAA9FA0A09E9F9FA0A1A1A5A8A8ABAFAFB2B8B8B8C0C0BEC8C8C3CF - CFC6D3D3ACB5C4A4ABBFA4ABBFB6C0CAC7D3D3C3CDCDBEC7C7B9BFBFB3B7B7AE - B0B0ABACACA9A9A9AAAAAAACACACAEAFAFB2B5B5B7BBBBB9C4DDBECCE6C4D2E8 - C8D7EBCCDBECB0BBD7A8B1D0BBC6DECDDAEBC9D6E8C4D0E4BEC7E0BBC3DCB8BF - D9B8BED9B9C0D9BFC5DDC3CBDFCAD2E3CED9E7D2DDE9D4DFEAD3DDE9D0DAE6CE - D6E3CCD3E1CCD3E0CED4E1D2D9E5D6DEE8D9E2EAB1B6CFA8ABC89393B9B3B7CF - C8CEDDDDE3E4DBDFDFD7DADAD4D6D6D3D4D4D0D1D1D0D1D1D1D1D1D1D1D1D2D2 - D2D2D2D2D3D3D3D4D4D4D4D5D5D5D6D6D8D9D9DBDDDDDFE2E2E2E6E6E5E9E9E7 - ECECBABCD0BBBDD1BCBDD1BCBDD1C6C8D7E8ECECE5E9E9E3E6E6E1E3E3DFE0E0 - DDDEDEDDDEDEDFE0E0E1E3E3E4E6E6E6E9E9E8ECECE9EDEDE9EEEEE9EEEEE9EE - EEE9EDEDE9EDEDE8ECECE7EBEBE6E9E9E4E7E7E3E5E5E2E3E3E0E1E1DFE0E0DF - DFDFDEDEDEDEDEDEDEDFDFE1E1E1E2E3E3E4E6E6E6E9E9E7EAEAE8EAEAE7E9E9 - E5E6E6E3E4E4E1E2E2E1E1E1E1E1E1E2E2E2E3E4E4E5E7E7E7E9E9E8EBEBEAED - EDE9ECECE8EBEBE6E8E8E4E6E6E4E5E5E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F78F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E - 8E8E8E8E8E8E9192929598989EA3A3A9B2B2514C8A524E8B524E8B514C89A8B2 - B29DA3A39497979091918D8D8D8D8D8D8F90909395959A9E9EA3ABABAEBABA8E - 95AF54508D54508D534E8C514B89656290A1A7A79DA2A2A0A6A6A6AFAFAFBABA - B8C7C78990AF5F5D96302677302677302677302677302677302677423B836464 - 97898FA9979FA99CA2A2959898929595969A9A9EA5A59298A8504C89514D8A51 - 4C8A7D7F9E9FA7A79599998E8F8F8A8C8C8F9292969C9CA2ABAB5F5D90514C8A - 514D8A504B88A2ACAC979D9D8E9191898A8A8A8B8B8F93939AA1A18F96A5504B - 89514C8A504C897B7F9EA0A8A8979B9B919393848EAF7289DE7189E38091C796 - 9BA5A1A4A4A8ADADB1B8B8B8C3C3C0CDCDA2AABF6B6B9E443D85302677302677 - 302677302677302677302677302677433C8468699C9AA5BAB4C4C4A9B6B6A0A9 - A9969C9C8E9292888A8A8485858181818080807E8085788BD27D95E688A1E890 - A8E54D4C954F4F965150966A71AEB3D1F3B2D0F39BB1DD6368A639307F302677 - 3026773026773026775353978492C5AEC9F0A4BDECA0B0CC9FA4A4999C9C9698 - 98989A9AA1A5A5AEB6B6BFCDCD585592302677302677585692C1CFCFB2BABAA8 - ACACA1A3A3A2A3A3A6A9A9ADB2B2B6BDBDBEC9C9BDC8CD7E80AA4E498B302677 - 3026773026773026773026773026775753907C7CA59CA1B5B8BEBEB2B5B5ADAE - AEABACACACACACAEB0B0B3B6B6B9BDBDC0C7C7C5D4EAB8C5DF8184B44F4A8E30 - 2677302677302677302677302677443D86575294C3CDE3BEC7DEBAC2DBBAC1DB - BDC5DCC4CCE1CCD6E6C9D3E4706EA53B317F3026773026773026776E6BA2D2DA - E6D2D9E5CAD1E08E8EB866629C3026773026773026773026773026773026775D - 5795B4B7CCDCE1E1D8DBDBD5D7D7D2D3D3D2D2D2D1D1D1D2D2D2D2D2D2D4D4D4 - D4D4D4D5D5D5D6D6D6D7D8D8DADCDCDFE2E2C1C2D2807CAA534B8E3026773026 - 77302677302677302677302677483F878D8BB4DCE0E6E5E8E8E1E3E3DFE1E1DF - E0E0E0E2E2E4E6E67570A35F58955F5996605997605997605997605997605997 - 6059967873A6A6A5C5D4D7E2EAEEEEE8EBEBE6E8E8E4E5E5E2E3E3E1E1E1E0E0 - E0DFDFDFE0E0E0E1E2E2E4E5E5E7E9E95F57955F58955F58955F5795E7EAEAE4 - E6E6E2E3E3E2E3E3E2E3E3E4E5E5E6E8E8E9ECECE0E2E8605896605996605896 - 5F58955E5794C5C4D4E5E6E6E4E4E4E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78F8F - 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E - 8E8E929393999D9DA4ABABB2BEBE2F257A2F257A2F257A2F257AB1BDBDA2AAAA - 979B9B9192928E8E8E8E8F8F929393999D9DA3AAAAB0BCBCABB8C33830802F25 - 7A2F257A2F257A382F7EA6AFB4A7AEAEA6ADADABB4B4B4C1C1A5B0C04B478C2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A - 6E6F99A1A8A8989D9D9599999A9F9FA4ADAD9199AE2F257A2F257A2F257A7274 - 9FA7B1B1999F9F9093938D8E8E9295959CA3A3AAB6B6514E8E2F257A2F257A2F - 257AACB9B99DA5A59195958A8B8B8B8D8D949999A0A9A98F97AC2F257A2F257A - 2F257A71749FA7B1B196A0AE8094D1738CE5728AE4738DE57892E6809AE896A9 - D4B1BCC4BFCCCCA2ABC05754942F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A54529398A4BAB1C0C0A4AFAF - 99A1A1909595888A8A8485858282827588D17790E48099E78FA9EAA1BDEF2F25 - 7A2F257A2F257A54549AC3E3F87078B12F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A403B8A95A6D5AFC3D8AAB2B2A1A7A79B9E9E9B9D9D - A1A5A5AEB6B6BFCDCD5755942F257A2F257A585595C2CFCFB3BBBBA8ADADA4A7 - A7A6A9A9AEB3B3B8C0C0C2CDCD878AB03830812F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257ABCC3C3B4B8B8AFB1B1ADAEAE - AFB0B0B3B6B6BABFBFC2CACACBD6DA7F83B52F257A2F257A2F257A2F257A2F25 - 7A2F257A2F257A2F257A2F257A2F257AC7D1E5C0C9E0BDC5DEBEC5DEC2CBE0CB - D5E6B6BDD73930822F257A2F257A2F257A2F257A2F257A595597D5DEE9D6DDE8 - AEB2CE2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F25 - 7A9F9FBFDDE2E2D8DBDBD5D7D7D3D4D4D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6 - D6D6D7D7D7DADADADCDEDEE1E4E45D56962F257A2F257A2F257A2F257A2F257A - 2F257A2F257A2F257A2F257A2F257A524B91DDE1E7E5E8E8E2E4E4E1E3E3E4E6 - E6E7EAEA5E58982F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A6B66A1BDBED4EAEEEEE7EAEAE4E6E6E2E3E3E1E1E1E0E0E0 - E1E2E2E3E4E4E6E8E8EAEDED2F257A2F257A2F257A2F257AEAEDEDE7E9E9E4E5 - E5E3E4E4E4E5E5E6E8E8EAEDEDE1E4EA534B912F257A2F257A2F257A2F257AA4 - A2C1E8E9E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - ECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7909090909090 - 9090908F8F8F8F8F8F8F8F8F9090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9395 - 959CA0A0A8B1B1B8C7C72D237C2D237C2D237C2D237CB7C5C5A6AFAF9A9E9E92 - 93938F8F8F929393979A9AA0A7A7AEB9B9BDCDCD4B478F2D237C2D237C2D237C - 372E82A0AABAB0BBBBACB5B5AFB9B9B8C5C58B91B32D237C2D237C2D237C2D23 - 7C2D237C2D237C413B895552945552942D237C2D237C2D237C2D237C6E6F9BA2 - AAAA9A9E9E989D9D9DA3A3AAB4B497A0B62D237C2D237C2D237C7578A5ACB8B8 - 9CA3A39295958E8F8F949898A0A8A8B0BEBE5250922D237C2D237C2D237CB3C2 - C2A1AAAA9398988A8C8C8B8D8D969C9CA5B1B1949FB52D237C2D237C2D237C74 - 79A7A2B9DA89A5EA7C96E7758EE5748DE57993E6819BE88CA8EB9BB7EFA1BEEC - 6E74AE2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C2D237C2D237C2D237C6E72A4ADBDC2A8B4B49C - A4A4909595898B8B7B8AC1748CE47891E5849DE894AEECA9C6F22D237C2D237C - 2D237C53539B666BAB2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C8893BDB7C3C3AAB2B2A0A5A59EA1A1A3A8A8AF - B8B8BFCDCD5653962D237C2D237C565396C2CFCFB4BCBCAAAEAEA7ABABACB1B1 - B6BEBEC3CFCF6A69A12D237C2D237C2D237C2D237C2D237C2D237C5754965754 - 96423B892D237C2D237C2D237C2D237CBDC4C4B6BABAB1B3B3B0B2B2B3B5B5B9 - BEBEC1C9C9C2CCD15754972D237C2D237C2D237C2D237C2D237C2D237C2D237C - 2D237C2D237C2D237C2D237CC7D2E5C1CAE1C0C8DFC2CAE0C8D1E4D2DEEB4E48 - 922D237C2D237C2D237C2D237C2D237C2D237C585398D5DEE8D6DEE8AEB1CE2D - 237C2D237C2D237C5B5699898AB88A8BB85C579A2D237C2D237C2D237C393083 - D7DCE1DBDFDFD7D9D9D5D6D6D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6D6D6D7D7 - D7DADBDBDDDFDFE2E5E55B55982D237C2D237C2D237C5D589A827FB17672A945 - 3D8B2D237C2D237C2D237C2D237C5D579AE9EDEDE5E8E8E4E6E6E5E8E8E9EDED - 5D579A2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C827FB1ECF0F0E8EBEBE5E7E7E3E4E4E1E2E2E2E2E2E4 - E5E5E7E9E9EBEFEF2D237C2D237C2D237C453D8BECF0F0E8EAEAE5E7E7E6E7E7 - E7E9E9EAEDEDEEF2F27772AA2D237C2D237C2D237C2D237CA5A4C5EAEDEDE7E9 - E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F791919191919191919190 - 90909090909090909090909090909090909090909090908F8F8F9495959DA2A2 - ABB5B5BDCDCD2C227E2C227E2C227E403A8BBBCBCBA9B2B29B9F9F9394949091 - 919699999EA3A3ABB4B4BAC9C97174A82C227E2C227E2C227E2C227E959EBAB8 - C5C5B2BCBCB1BBBBB8C4C4A6B2C32C227E2C227E2C227E2C227E413A8B9098BB - BBCBD0C1D1D1BECDCDBDCDCDBECECEA2ADBE7275A33D36866B6B99A0A7A79A9E - 9E989D9DA0A6A6AEB9B99AA5BC2C227E2C227E2C227E777BA9AFBCBC9FA6A692 - 95958F9090959A9AA3ABABB5C4C45351962C227E2C227E2C227EB7C8C8A4AEAE - 949A9A8A8D8D8C8F8F989F9FA9B5B598A4BB2C227E2C227E2C227E727DB9A1BF - F08CA8EB7E98E77891E57992E7809AE98CA7EC9BB9EFA4C1ED4645952C227E2C - 227E2C227E2C227E2C227E61609F9299BBB8C5D0C9D8D8C8D7D7C7D7D7B4C2CD - 8F97B95F5F9E2C227E2C227E2C227E2C227E2C227E484590AFBFC4A9B6B69AA3 - A38799C97B92E7768EE57B93E6869FE998B3EDAFCCF32C227E2C227E2C227E2C - 227E2C227E2C227E2C227E646AAC98ACD8B8D6F5BAD6F4ABC3E6818EC2362E86 - 2C227E2C227E2C227E2C227E8A91B4B5C1C1A9B0B0A3A8A8A6ABABAFB8B8C0CE - CE5553982C227E2C227E565398C2CFCFB5BEBEADB2B2ADB2B2B4BBBBC0CBCB68 - 68A22C227E2C227E2C227E2C227E5754999EA6C2CEDCDCCBD8D8CBD7D7CCD8D8 - CCD8D8999EBB66649E2C227EBBC1C1B6BABAB1B4B4B2B4B4B7BBBBC0C7C7CBD5 - D5615F9E2C227E2C227E2C227E2C227E58559CA2ABCFCBD9EBD5E4F1D4E2F0A8 - B0D26A68A82C227EC4CFE4C2CAE2C1C9E1C5CDE3CCD7E8A1A7CC2C227E2C227E - 2C227E2C227E9396C0D3DDEBB8BED79FA2C6D3DBE6D4DBE7ACB0CE2C227E645F - A1C8CEE0DFE8EFE1EAF0E4EDF1E8F3F57371AB2C227E2C227E2C227E9494BCDE - E3E3D9DCDCD6D7D7D5D5D5D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8DADBDB - DDDFDFE2E5E55B5499382F858B88B6DEE2E8EAEFEFEAEFEFECF1F1EEF5F5A6A6 - C92C227E2C227E2C227E2C227EAFB0CDE7EBEBE5E8E8E6EAEAEBEFEF5D579C2C - 227E2C227E2C227E8E8CBA8E8CBA8E8CBA8E8CBA7672AB453D8D2C227E2C227E - 2C227E2C227E2C227E504A95E0E3E9E8EBEBE5E7E7E3E3E3E3E4E4E5E6E6E8EB - EBEDF2F22C227E2C227E2C227E5E579CEEF2F2EAECECE8EAEAE8EAEAEAEDEDEE - F2F27672AB2C227E2C227E2C227E2C227EA6A5C8ECEFEFE9EBEBE7E8E8E5E6E6 - E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7E8E8E8E7E7E7 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79292929191919191919191919191 - 919191919191919191919191919090909090909090909597979FA4A4AEB8B8C0 - D0D02A21802A21802A2180535299BCCCCCAAB3B39CA1A19597979496969B9F9F - A6AFAFB5C2C29FABC32A21802A21802A21802A21807A80AFBFCDCDB5C0C0B2BB - BBB6C1C1C1D0D03F398C2A21802A21802A2180686BA6C0D0D6C1CFCFB9C5C5B3 - BEBEB0BABAB0BABAB0BBBBB0BABAAEB8B8A3ABB18D92A49CA1A1989B9B9A9E9E - A1A8A8B0BCBC9CA7BF2A21802A21802A21808A92B6B1BEBE9FA6A69396969092 - 92969A9AA4AEAEB7C7C75251982A21802A21802A2180BACCCCA5B1B1959B9B8C - 8E8E8C8F8F989F9FABB8B899A6C02A21802A21802A2180737EBBA4C3F18FAAEC - 819AE87B94E77F99E88AA6EB9AB7EFA4C1EC4645972A21802A21802A21802A21 - 8050519EB1C5DDC7D5D8C2CECEBDC8C8BAC5C5B9C3C3B8C3C3BAC5C5BCC9C9C1 - D1D1B4C3CF5D5E9F2A21802A21802A21802A2180484592AFBEC4A0B7D98DA7EB - 819AE87A92E67D95E788A1EA9AB6EEB2D0F42A21802A21802A21802A21802A21 - 80342D889AAFD9B4D1F4ACC7F1A7C2EFA8C1EFACC7F0B4D0F3B6D0EF5B5EA52A - 21802A21802A2180342D86B7C4CAB1BABAA9AFAFA9AFAFB2BBBBC0CECE545299 - 2A21802A2180545299C3D0D0B7BFBFB1B7B7B2B9B9BCC6C6A2AAC22A21802A21 - 802A21802A2180969DC1CFDDDDC7D3D3C2CCCCC0C8C8BFC7C7C0C8C8C1C9C9C1 - C9C9BFC6C6A1A5B6B7BBBBB3B6B6B2B5B5B5B8B8BDC2C2C7D0D0898DB72A2180 - 2A21802A2180352E8798A0CAD3E3F1CEDCEECAD7EBC9D6EAC9D6EAC9D5E9C8D3 - E8A8AFD2C1CAE2C0C8E0C2CAE1C7D0E4D0DBEA7879B22A21802A21802A218092 - 95C2E0ECF3D8E3EDD3DBE8D0D7E5CFD5E4D1D7E4A8ACCC6A68A7D7DEE8D8DFE9 - D9E1E9DBE3EADFE7EEE6F0F3DDE6EF2A21802A21802A2180726FAAE1E6E6DBDE - DED7D8D8D5D5D5D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D9D9D9DADBDBDDDFDFE0 - E2E2645FA0C2C3D5E6E9E9E6E9E9E7EAEAE7EAEAE8ECECECF1F1F0F6F67571AC - 2A21802A21802A2180817EB3EAEEEEE8EBEBE8ECECECF0F05C579E2A21802A21 - 802A2180F1F7F7F0F6F6EDF2F2ECF0F0ECF0F0EEF3F3BEC1D84F49962A21802A - 21802A21802A21807571ADECF0F0E8EBEBE5E6E6E4E5E5E5E7E7E9ECECEEF2F2 - 2A21802A21802A21805C579EEFF3F3EBEEEEEAEDEDEBEEEEEEF2F28E8BBB2A21 - 802A21802A21802A2180A6A6CAEEF2F2EBEDEDE8EAEAE6E7E7E5E5E5E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7929292929292929292929292929292929292 - 929292929292929292929292919191919191969797A0A5A5AEB8B8C0D1D12820 - 8328208328208352519BBDCDCDABB4B49DA2A2979A9A989C9CA4AAAAB2BDBDB7 - C7CD322B892820832820832820835C5DA1C1D0D0B5C0C0AFB8B8B1BABABBC7C7 - 8C94B92820832820832820835D5EA2D0E3E3C3D2D2B8C3C3B0B8B8AAB2B2A7AE - AEA6ACACA6ACACA5ABABA3AAAAA3A8A89DA2A2999C9C969898989C9CA1A8A8B1 - BDBD9CA8C02820832820832820839DA9C2B1BEBEA0A7A79395958F9191979B9B - A5AEAEB8C8C851509B282083282083282083BACCCCA5B1B1959B9B8B8D8D8C8F - 8F97A0A9A4BBDA94A8D8282083282083282083727EBDA6C3F190ACEC829DE980 - 9AE887A2EB97B4EFAAC8F34D4FA02820832820832820832820837D8CC4B1D0F5 - A3C2F29BB6EDA3B4D4AEB5BAAEB3B3ACB1B1ABB1B1ABB1B1ADB5B5B2BCBCB7C4 - C4C1D2D28E98BD282083282083282083282083454397ABC9F399B4EF8AA3EA7E - 97E77F97E789A2EA9AB6EEB4D1F4282083282083282083282083282083A7BEE2 - B2CEF3A4BEEF9AB3EC95ADEB95ADEB99B1EBA2BBEEB3C7DBC5D9DB4745952820 - 832820832820836566A4B9C5C5AEB7B7ACB4B4B3BDBDC1CFCF52519B28208328 - 208353519CC4D1D1B9C2C2B4BCBCB9C1C1C3CFCF53509B282083282083282083 - 959DC2D2E2E2C8D4D4C1C9C9BBC1C1B8BDBDB8BDBDB7BCBCB8BDBDB8BDBDB7BC - BCB6BABAB3B6B6B2B4B4B3B5B5B8BCBCC2C9C9C4CED5332C8928208328208328 - 2083A2ACD2D1E0F0C9D6EBC2CEE7BFCAE5BEC9E3BFC8E3C0CAE3BFC9E2BFC8E1 - BDC5DEBDC5DEC2CAE1C9D2E6D3DEEC56539F282083282083282083D6E2EEDAE4 - EED2DBE7CED4E3CCD1E1CBD0E0CCD1E0C3C9DBD1D6E3D2D7E4D3D9E4D5DAE5D8 - DEE7DDE5EBE5EEF2DDE6EF28208328208328208358549FE2E7E7DCDFDFD7D9D9 - D6D6D6D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D8D9D9DADBDBDCDDDDDFE0E0D5D7 - DDE2E4E4E2E4E4E2E4E4E3E5E5E4E6E6E6E9E9EAEEEEEFF5F58C8BBD28208328 - 20832820835A55A0EBEFEFE8EBEBE9EDEDEDF1F15A56A0282083282083282083 - F1F7F7EDF2F2EAEDEDE8EBEBE8EBEBEAEDEDECF1F1EFF4F47471AE2820832820 - 83282083282083A4A4C9EAEEEEE7E9E9E6E7E7E7E8E8EAEDEDEFF3F328208328 - 20832820835B56A0F1F5F5EEF1F1EDF1F1EFF2F2A5A5CB282083282083282083 - 2820838D8BBDEFF2F2EBEEEEE8EAEAE6E7E7E5E5E5E5E6E6E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F793939393939393939392929292929293939393939392 - 9292929292929292929292929292979898A1A6A6AEB8B8C1D1D1271F85271F85 - 271F8551509DBDCDCDABB4B49FA4A49B9F9FA0A5A5ADB6B6BCCBCB5B5BA2271F - 85271F85271F853C3891BACAD0B6C1C1ADB5B5ABB2B2B2BBBBC0CDCD47439727 - 1F85271F85322B8BBDCDDACFE1E1C2D0D0B7C2C2B0B8B8ABB1B1A8ADADA6ABAB - A4A9A9A4A9A9A2A7A7A0A4A49CA0A0989B9B9799999A9D9DA3A9A9B2BEBE9CA7 - C1271F85271F85271F859CA8C2B1BDBD9FA6A6939696909292979B9BA5AEAEB8 - C8C850509C271F85271F85271F85BACCCCA5B1B1959B9B8B8D8D8893B18DA7EC - A0BDF093A9DA271F85271F85271F85727EBEA6C4F292AEED87A2EB86A0EA91AD - EDA5C2F2707BBE271F85271F85271F85271F858597CDADCCF49DBAF191ACEE87 - A2EC809BEA8098E5909EC8A1A4A9A2A4A4A1A4A4A2A6A6A5AAAAAAB1B1B2BDBD - BCCCCC8B96BC271F85271F85271F85271F85707BBEA6C3F293AEED859EEA839B - E98AA4EB9CB6EEB4D1F5271F85271F85271F85271F857581BEB7D3F5A4BEF095 - ADEC8CA3E8889FE7889EE790A0CB9CA5ADAAB4B4B9C8C8B6C7D4271F85271F85 - 271F85322A8BC0CECEB4BEBEB0B8B8B5BFBFC2D0D052509D271F85271F855251 - 9DC5D2D2BBC5C5B9C1C1BEC8C8ABB6C9271F85271F85271F855E5EA4D7E8E8D0 - DFDFC6D1D1BFC7C7BAC0C0B7BCBCB6BBBBB6BABAB5B9B9B6BABAB6B9B9B5B8B8 - B3B5B5B3B5B5B6B9B9BEC3C3C8D0D09398BF271F85271F85271F856A6CB0D2E3 - F1C8D5EBBFCAE5B9C3E2B7C1E0B8C0DFB9C1DFB9C2DFB9C1DFBAC2DEBAC1DDBD - C4DFC2C9E2CAD3E7D5E1ED5653A1271F85271F853F3993DEEAF2D5DEEACDD4E3 - C8CEDFC7CCDEC8CCDEC9CEDECCD0DFCDD2E1CFD4E1D1D6E3D4D9E5D9DFE8DFE7 - EDE7F0F49495C4271F85271F85271F857C7BB4E2E6E6DCDFDFD8D9D9D6D6D6D6 - D6D6D6D6D6D8D8D8D9D9D9D9D9D9D9D9D9DBDBDBDBDCDCDEDFDFDFE0E0E0E1E1 - E0E1E1E0E1E1E1E2E2E2E4E4E5E8E8EAEEEEEFF5F5807DB7271F85271F85271F - 855955A1EBEFEFE9ECECEAEDEDEDF2F25A55A2271F85271F85271F85EFF4F4EA - EEEEE7E9E9E5E6E6E4E5E5E6E8E8E8EBEBEBEFEFEFF4F47370B0271F85271F85 - 271F85342C8CEEF2F2E9ECECE7E9E9E7E9E9EAEDEDEFF3F3271F85271F85271F - 855A55A2F2F7F7F0F5F5F0F5F5A6A5CC271F85271F85271F85271F857370B0EF - F3F3EBEEEEE9EBEBE6E7E7E5E5E5E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8 - E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79494949494949494949494949393939393939393939393939393 - 93939393939393939393979898A1A6A6AFB9B9C1D1D1251D87251D87251D874F - 4F9EBECDCDACB6B6A3A9A9A0A5A5A8B0B0B7C4C4949FC0251D87251D87251D87 - 251D879FAAC4BAC6C6ADB5B5A7ADADA9B0B0B5BEBEBAC8CE251D87251D87251D - 876769ABD3E6E6D1E3E3C7D5D5BDC9C9B7C1C1B4BCBCB1B9B9AEB6B6ACB4B4AA - B1B1A8AEAEA5AAAAA1A6A69EA1A19A9D9D9DA1A1A6ADADB3BFBF9CA8C2251D87 - 251D87251D879BA7C1B0BDBDA0A6A6949696909292979B9BA5AFAFB8C8C84F4E - 9E251D87251D87251D87BACCCCA5B1B1959B9B8B8D8D8595C78DA8ECA1BEF193 - A8DA251D87251D87251D87717DBFA7C5F394AFED8BA6EC8EA9ED9CB8F0A0BAE7 - 2F298E251D87251D87251D877C8BC7AFCDF59DB9F08EA8ED829DEA7C95E97791 - E8758EE8748DE8768EE38995C39A9CA29B9C9C9D9F9F9FA3A3A5ABABAEB9B9BB - CCCC828BBA251D87251D87251D87251D87A1BAE79EB9F08EA7EB88A0EA8DA6EB - 9DB7F0B4D1F5251D87251D87251D87251D87B8D3F0ABC5F198B1EC8BA2E98499 - E78494CF8990A38E9090959898A0A6A6B0BBBBC2D3D36568AA251D87251D8725 - 1D879DA7C1B9C4C4B4BDBDB7C2C2C3D1D1504F9F251D87251D87514F9FC6D3D3 - BDC7C7BCC5C5C2CECE858AB9251D87251D87251D87B5C2D6D7E9E9D2E1E1CAD6 - D6C4CDCDC1C9C9BEC5C5BDC4C4BCC2C2BBC0C0BBC1C1BABFBFB9BDBDB7BABAB6 - B9B9BABEBEC2C8C8CDD7D75E5DA5251D87251D87251D87C2D0E5CBDAEEC0CCE7 - B8C3E2B4BCDFB3BBDEB5BCDEB5BDDEB6BDDEB7BFDEB8C0DDB9BFDDBDC3DFC2CA - E1CBD4E7D6E1EE5452A3251D87251D875552A3DBE6F0D2DAE8CBD1E1C8CDDEC7 - CADDC7CBDDC9CDDDCBCEDECED2E0D0D4E2D4D9E4D8DEE8DDE5ECE4EDF1A0A2CD - 251D87251D87251D87251D87A9ACCDE0E4E4DCDEDED9D9D9D6D7D7D7D7D7D8D8 - D8D9D9D9DADADADADADADADADADBDCDCDCDCDCDDDDDDDEDFDFDEDFDFDFDFDFDF - E0E0E2E3E3E4E6E6E8EBEBECF0F0E4E9F0322B8E251D87251D87251D877E7CB7 - EBEFEFE9ECECEAEDEDEDF2F25854A3251D87251D87251D87EEF3F3E9ECECE6E7 - E7E3E4E4E2E3E3E3E4E4E6E7E7E9EBEBEDF0F0E4E8EF322B8E251D87251D8725 - 1D87A4A4CCEBEEEEE9EBEBE9EBEBEBEEEEEFF3F3251D87251D87251D875954A3 - F3F8F8F3F8F8CCCFE3322B8E251D87251D87251D87726FB1EFF3F3ECEEEEE9EB - EBE7E8E8E6E7E7E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7959595959595949494949494949494949494949494949494949494949494 - 939393939393989999A1A6A6AFB9B9C1D2D2241C8A241C8A241C8A4F4EA0BFCF - CFB0BABAA8B0B0A9B1B1B2BEBEB8C8CE2F2890241C8A241C8A241C8A777DB3BD - CBCBAFB8B8A5AAAAA3A7A7AAAFAFB6C0C09FA8C4241C8A241C8A241C8A45429C - 7C81B8868DBEA2ADC9B2BECCC3D0D0C1CDCDBECACABCC8C8B9C5C5B8C2C2B4BF - BFB1BABAACB3B3A5ACACA0A5A5A1A6A6A8B0B0B5C1C19CA7C3241C8A241C8A24 - 1C8A9BA7C2B1BDBDA0A7A7959797919393989C9CA5AFAFB8C8C84E4DA0241C8A - 241C8A241C8ABACCCCA5B1B1959A9A8B8D8D8397D28EA8ECA1BEF193A8DB241C - 8A241C8A241C8A717DC1A8C5F396B3EF90ABED96B1EFA7C5F35E65B3241C8A24 - 1C8A241C8A4C4EA5B4D2F6A0BCF28EAAEE819CEB7B94E9778FE9758DE8748DE8 - 748CE8748CE8738CE8768DE38794C197999E999A9A9CA0A0A3AAAAADBBBEB5D2 - EF4C4EA5241C8A241C8A241C8A5E65B3A9C5F394AFEE8CA5EC90A8EC9EBAF0B4 - D1F5241C8A241C8A241C8A4C4EA6B9D5F5A3BCF092A9EB879BDD898FA98B8B8B - 8B8B8B8E8E8E9294949CA1A1AAB2B2BCCACA99A5C7241C8A241C8A241C8A767B - B2BCC8C8B7C0C0BAC4C4C4D2D2504EA1241C8A241C8A504EA1C7D4D4BEC9C9BE - C8C8C5D2D26667AC241C8A241C8A241C8A6869AE7E82B99FA8CBA5AECAC1CCD3 - CAD5D5C8D3D3C8D2D2C7D0D0C6CFCFC5CDCDC3CBCBC1C8C8BEC4C4BDC2C2BFC5 - C5C6CECED1DCDC3B3696241C8A241C8A47439CD5E4EDC6D4EBBCC8E5B6C0E1B2 - BBDFB4BBDEB4BBDDB5BDDEB6BDDEB7BEDDB8BFDDBAC0DDBCC4E0C3CAE3CBD4E8 - D7E2EE5351A5241C8A241C8A5451A5DAE5EFD2D9E8CBD1E1C8CDDFC6CADDC7CC - DDC9CEDECCD0DFCFD4E2D4D9E4D8DEE8DEE5EDCCD3E5625FAC241C8A241C8A24 - 1C8A241C8A49449DE4E9E9DEE2E2DBDCDCD9D9D9D7D7D7D8D8D8D9D9D9D9D9D9 - DADADADADADADADADADBDBDBDDDDDDDDDEDEDFDFDFDFE0E0E0E1E1E2E4E4E5E7 - E7E8EBEBECF0F0E3E8EF4B459F241C8A241C8A241C8A241C8AAFB0D2EAEDEDE8 - EBEBEAEDEDEDF2F25753A5241C8A241C8A241C8AEFF3F3EAECECE6E7E7E3E4E4 - E2E2E2E3E3E3E4E4E4E6E8E8EAECECEEF2F28B8AC0241C8A241C8A241C8A6561 - ACEDF0F0EAECECEAECECEBEEEEF0F4F4241C8A241C8A241C8A5853A6F3F8F8CC - CFE3312A91241C8A241C8A241C8A4B459EF0F4F4EDEFEFEAEBEBE8E8E8E6E7E7 - E6E7E7E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0 - F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79595 - 9595959595959595959595959595959595959595959595959595959594949494 - 9494999A9AA2A7A7B0BABAC2D2D2221B8C221B8C221B8C4D4DA2C4D6D6B7C4C4 - B1BCBCB4C0C0BFCECE5859A7221B8C221B8C221B8C4D4DA2C0D0D0B2BCBCA6AC - AC9FA2A2A1A5A5A9AFAFB7C2C2A0AAC6221B8C221B8C221B8C221B8C221B8C22 - 1B8C221B8C221B8C221B8C3733964C4BA06C6EAE7579B2939CC09BA5C1BFCECE - BAC6C6B2BCBCA9B1B1A6ADADAAB3B3B7C3C39CA8C4221B8C221B8C221B8C9BA7 - C3B2BEBEA0A7A7949797919393999D9DA6AFAFB9C9C94C4DA1221B8C221B8C22 - 1B8CBACCCCA5B0B0959A9A8A8C8C8398D98FA9ECA2BFF193A8DC221B8C221B8C - 221B8C707CC2A9C6F399B5F096B1EF9DBAF1A7C4EE221B8C221B8C221B8C221B - 8C96ACDDA7C5F393AFEF849EEB7B95E9778FE8758DE8748DE8748DE8748DE974 - 8DE9758DE8748DE8748DE8778EE38693BF979898979FAE96AEE2A6C4F3A9C3EA - 221B8C221B8C221B8C221B8CAAC5EE9CB8F092ABED93ACED9FBAF0B4D1F5221B - 8C221B8C221B8C747FC2B4D1F59FB7EB94A0BA8F91918B8B8B8C8C8C8D8D8D8E - 8E8E9393939A9D9DA8AFAFB9C6C6A1AFCB221B8C221B8C221B8C777CB5BFCCCC - B8C2C2BBC5C5C5D2D24E4EA2221B8C221B8C4F4EA3C8D5D5C0CBCBC0CACAC8D5 - D54F4EA3221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C4E - 4DA14E4CA17A7DB68588BBA5ADCAB9C3D1CDD7D7C9D1D1C6CECEC6CDCDCAD3D3 - D4E0E0221B8C221B8C221B8C514FA4D5E1E6C5D2EBBBC6E5B6BFE1B3BCDEB4BB - DEB4BCDEB6BDDFB7BEDEB8BFDEB9BFDEBAC1DEBDC4DFC3CBE3CCD6E8D7E2EF52 - 50A7221B8C221B8C5250A7DBE5EFD2D9E8CCD1E2C8CCDFC6CADDC8CCDECACFDF - CFD3E2D2D8E4D9E0E9DFE7EE8F91C62E2993221B8C221B8C221B8C221B8C2F29 - 92C1C5DAE1E5E5DDDFDFDADBDBD8D9D9D8D8D8D8D8D8DADADADBDBDBDBDBDBDB - DBDBDBDBDBDCDCDCDEDEDEDEDFDFE0E1E1E1E2E2E3E4E4E5E8E8E9ECECEDF1F1 - BCBFDC3C3799221B8C221B8C221B8C221B8C4944A0ECF0F0E9EBEBE8EAEAE9EC - ECEEF2F25652A7221B8C221B8C221B8CEFF3F3EAECECE6E7E7E3E4E4E2E2E2E3 - E3E3E4E4E4E6E6E6E9EAEAEDF0F0D8DBEA221B8C221B8C221B8C3C379AEEF2F2 - EBEEEEEAEDEDECEFEFF0F4F4221B8C221B8C221B8C5652A7E6EAF13C379A221B - 8C221B8C221B8C4945A0E3E7EEEDF0F0EAECECE8E9E9E7E8E8E7E7E7E6E6E6E6 - E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7969696969696 - 969696969696959595969696969696959595959595959595959595949494999A - 9AA2A7A7B1BABAC2D2D2211A8E211A8E211A8E4C4CA3CDE2E2C2D3D3BECECEC3 - D3D396A3C7211A8E211A8E211A8E2C2793BCCCD3B6C2C2A8AFAF9BA4B4989DA6 - 9FA1A1A9AFAFB7C2C2A0AAC7211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E49 - 479E989FB5AEB7B7AEB8B8B8C5C59DA8C5211A8E211A8E211A8E9CA8C5B3BFBF - A2A9A9959898929494999E9EA6B0B0B9C9C94C4CA3211A8E211A8E211A8EBBCD - CDA6B1B1959A9A8A8C8C829BEA8FAAEDA3C0F293A8DD211A8E211A8E211A8E70 - 7BC3AAC7F39CB8F09AB7F0A6C2F38090CF211A8E211A8E211A8E4A4CA9B2D1F6 - 9CB9F18AA5ED7F98EB7991EA758EE9758EE9758EE9758EE9758EE9758EE9758E - E9758EE9768EE9768EE9768EE97D92DF8198E68AA4EC9CB8F1B2D0F65459B021 - 1A8E211A8E211A8E8091CFA4C0F298B1EF96B0EEA0BBF1B5D1F5211A8E211A8E - 211A8E737FC3B8CDE0A6B2B5999E9E9091918C8C8C8E8E8E8F8F8F9090909393 - 939C9F9FA8B0B0B9C6C6A1AECB211A8E211A8E211A8E777CB6C0CCCCB9C3C3BB - C6C6C5D3D34E4DA4211A8E211A8E4E4DA4C8D5D5C1CBCBC1CBCBC9D5D54E4DA4 - 211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E3733984D4AA1CCD5D5CED8D8D6E2E221 - 1A8E211A8E211A8E504FA6D6E1E1C6D3EABDC7E6B7C0E2B3BDDFB4BCDFB5BDDF - B6BDDFB7BEDFB9C0DEBAC0DEBAC1DEBEC5E0C4CCE4CDD7E8D8E3EF5150A8211A - 8E211A8E5250A8DBE5EFD2DAE8CCD2E3C8CDDFC7CBDEC9CEDFCDD2E1D1D7E4D8 - DEE9DFE7EF6B6AB4211A8E211A8E211A8E211A8E211A8E4743A1CED3E1E3E7E7 - DDE0E0DBDCDCDADADAD9D9D9D9D9D9DADADADBDBDBDCDCDCDCDCDCDCDCDCDDDD - DDDDDDDDDEDFDFDFDFDFE1E2E2E3E5E5E6E9E9EAEEEEE1E5ED6F6DB6211A8E21 - 1A8E211A8E211A8E211A8E2E2895C8CAE0E9ECECE7E9E9E8E9E9EAECECEEF2F2 - 5552A9211A8E211A8E211A8EEFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E3E3 - E3E5E5E5E8E9E9ECEFEFF1F5F5211A8E211A8E211A8E211A8EEFF3F3ECEFEFEB - EEEEEDF0F0F0F4F4211A8E211A8E211A8E4944A24944A2211A8E211A8E211A8E - 4944A2E6E9F0EFF2F2ECEEEEE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F797979797979797979797 - 9797979797969696979797969696969696969696959595959595999A9AA2A7A7 - B1BABAC3D3D31F19911F19911F19914B4CA6CEE3E3CEE3E3CCE0E0C3D6DE3531 - 9B1F19911F19911F199197A4C9C0D0D0AFB9B999ABD28AA2E9859DE889A0E498 - ACDCADC0DC99A7D01F19911F19911F19919CA6CCA8B4D29DA7CC787DB96163AD - 4B4AA335329A1F19911F19911F19911F19911F19911F19911F19911F1991959C - BAB3BDBDB2BCBCBAC6C69CA8C61F19911F19911F19919EAAC8B5C2C2A3AAAA97 - 9A9A939595999E9EA7B1B1BACBCB4A4BA51F19911F19911F1991BCCFCFA7B2B2 - 969C9C8B8E8E849DEB91ACEEA4C0F294AADD1F19911F19911F19916E7BC4AAC8 - F49FBBF19FBBF1ABC8F45C63B81F19911F19911F19918396D1A9C7F495B0EF85 - 9FEC7B94EA7790E9778FE9768FE9768EE9768EE9768EEA768EEA768FE9768EE9 - 768EE9778FEA778FE97790E97C95EA849EEC95B0EFAAC7F48495D11F19911F19 - 911F19915257B2ABC6F39CB6F099B3EFA1BDF1B5D2F51F19911F19911F199155 - 57ABBFD1D1ABB6B69DA2A29395958F90908F8F8F9090909292929798989FA3A3 - ACB4B4BECCCC98A3C91F19911F19911F1991767BB7BFCBCBB8C2C2BCC6C6C6D3 - D34C4CA61F19911F19914D4CA6C9D6D6C1CBCBC1CACAC8D4D45859AB1F19911F - 1991423FA2C2CFDEABB5D3878DC17A7DB95757A94C4BA42A26951F19911F1991 - 1F19911F19911F19911F19911F19912A2695D0DBDBD1DCDCD7E3E32B26961F19 - 911F19914340A2D8E4E4CBD5E1C0CAE8B8C2E3B5BDE1B5BDE0B6BEE0B7BEE0B9 - C0DFB9C0DFBAC1DFBBC2DFBEC5E1C5CDE5CED7E9D9E3F0504FAA1F19911F1991 - 504FAADBE5F0D2DAE8CCD3E3C9CDE0C8CDDFCCD1E1D0D4E4D6DBE8DEE5EE6A69 - B61F19911F19911F19911F19912C27968585C1E5EBEBE1E6E6DEE1E1DCDDDDDA - DBDBDADADAD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDCDCDCDDDDDDDDDDDD - E0E0E0E2E3E3E4E5E5E7E9E9EBEEEEBBBDDB2C26971F19911F19911F19911F19 - 911F19912C2797C8CAE0EBEEEEE8EAEAE6E7E7E7E8E8EAECECEEF2F25451AB1F - 19911F19911F1991EFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E4E4E4E6E6E6 - E8EAEAECEFEFF1F5F55451AB1F19911F19911F1991F0F4F4ECEFEFECEEEEEDF0 - F0F0F4F41F19911F19911F19911F19911F19911F19911F19912C2797CCCFE5F2 - F6F6EEF0F0EAECECE8E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEAEAEAEBEBEB - EBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79898989898989797979797979797 - 979898989797979797979797979696969696969696969A9B9BA3A8A8B1BABAC3 - D3D31E17931E17931E179334319D767DBB767DBB767DBB5557AC1E17931E1793 - 1E1793767DBBCEE3E3BECDCDA8BAD493ACEC8AA2EA859EE989A1EA92ABECA2BD - F0A3BCE91E17931E17931E17937D8BCCCBE6F5C5DFF2BBD4EEBCCFE0C5D0D0C6 - D2D2C8D6D6B8C4D4A7B3D2858CC24C4BA81E17931E17931E1793A2ABC2B6C0C0 - B3BEBEBAC7C79DA9C81E17931E17931E1793757BB9B9C7C7A7AFAF9A9E9E9699 - 999CA1A1A9B3B3BDCECE494AA71E17931E17931E1793C0D3D3AAB6B6989F9F8C - 94A287A0EC93AFEFA7C4F396ABDF1E17931E17931E17936D79C5ABC8F4A0BCF2 - A2BFF3AFCDF53D3DA61E17931E17931E1793A7C2EBA4C0F390ABEF819BEC7993 - EA7790EA778FEA778FEA768FEA778FEA778FEA768FEA778FEA768FEA768FEA78 - 90EA7890EA7890EA7A92EA839CEC90AAEFA3C0F3B1CDF11E17931E17931E1793 - 3331A0AECBF5A0BBF19CB6F0A4BFF1B6D3F61E17931E17931E1793292498C7DA - DAB3C0C0A3ABAB999D9D9495959192929293939696969B9E9EA5ABABB3BEBEC4 - D4D46D71B71E17931E17931E1793949DC4BEC9C9B8C1C1BCC5C5C6D3D34C4BA8 - 1E17931E17934C4BA8C9D5D5C0CACABFC8C8C6D1D1787CBA1E17931E17931E17 - 93CDDCE4D9EAEAD3E0E0CDD8D8CAD5D5CBD5D5CDD8D8D1DDDDA9B2D0ACB6D57D - 81BE2A24991E17931E17934D4BA8D2DDDDD1DBDBD5E0E05A5AAF1E17931E1793 - 1E1793C4CFDED1DBDCC4CFE8BCC7E5B7C0E2B6BFE1B9C0E1BAC1E0BAC2E0BBC2 - E0BCC3E1BDC4E0C0C7E2C7CEE5CFD7EAD9E4F04F4DAC1E17931E1793504EACDC - E6F0D3DBE9CDD4E4CACEE0CACEE1CED2E2D3D8E6DAE1EBB2B6DA1E17931E1793 - 1E17931E1793514EABD0D6E6E5EBEBE2E5E5DEE0E0DCDEDEDBDCDCD9DADADADA - DADADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDDDDDDDEDEDEDFE0E0E1E1E1E3 - E4E4E6E9E9EBEEEEA0A1CF1E17931E17931E17931E17931E17931E1793615DB2 - E2E5EDECEFEFE9EBEBE6E8E8E6E7E7E7E8E8EAECECEEF2F2534FAC1E17931E17 - 931E1793F0F4F4EBEEEEE8E9E9E5E6E6E4E4E4E4E4E4E5E5E5E7E7E7E9EBEBED - F0F0F1F6F61E17931E17931E17931E1793F0F3F3EDF0F0ECEEEEEEF0F0F1F5F5 - 1E17931E17931E17933933A02B25991E17931E17932B2599E7EBF3F2F6F6EEF1 - F1EBECECE9E9E9E8E8E8E7E7E7E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7989898989898999999989898989898989898 - 9898989797979797979797979696969696969B9C9CA3A8A8B1BBBBC3D3D31C16 - 951C16951C16951C16951C16951C16951C16951C16951C16951C16951C169580 - 89C1C3D6DEBED3DFA7C2F198B2ED8DA6EB889FE989A0E990A9EB9EB8EFB1CDF4 - 3130A21C16951C1695474AAEC8E5F9BCD9F7B0CCF4A8C3F2B8C6D2C0C9C9C4CE - CECBD8D8D4E5E5D5E7E75658AF1C16951C169527239AC1CECEB7C1C1B4BEBEBB - C8C89EAAC91C16951C16951C1695757CBCC0D0D0AEB8B8A1A7A79CA1A1A2A9A9 - B0BCBCC2D5D53D3CA31C16951C16951C1695BACED6AFBEBE9EA7A7939DAF8EA9 - EE9BB6F1AECBF58FA2DA1C16951C16951C16957583CDA9C6F4A0BDF2A4C1F3B2 - D0F61C16951C16951C16951C1695B7D5F79FBBF28DA8EE8099EC7992EB7891EB - 7891EB7891EA7890EB7790EB7790EB7790EB7790EA7790EA7890EA7890EB7991 - EB7891EB7A92EA809AEC8DA7EEA0BBF2B7D5F727239B1C16951C16951C1695B3 - CFF6A3BEF29EB9F1A5C0F2B7D4F61C16951C16951C16951C16958A96C6BECECE - AFB9B9A3A9A99CA0A0999B9B9A9C9C9DA0A0A5AAAAB0B8B8BECBCBC2D2DA2723 - 9A1C16951C16951C1695B2BDCDBBC5C5B7BFBFBCC5C5C6D3D34A4AA91C16951C - 16954B4AAAC9D5D5BFC8C8BDC5C5C3CDCDACB7CF1C16951C16951C1695929ACA - D7E7E7D0DCDCC9D2D2C6CECEC4CDCDC8D0D0CDD7D7D5E1E1DCEBEBD0DEE61C16 - 951C16951C16956F71B9D1DBDBCED7D7D2DCDC878BC21C16951C16951C169572 - 74BCD8E3E3CDD6DDC2CEE9BDC7E6BDC5E5BDC5E4BDC6E3BEC7E3BFC7E3C0C8E3 - C1C7E3C3CAE4C9D1E7D1DAEBDAE6F14E4DAE1C16951C16954E4DAEDFE8F1D6DE - EBD0D6E6CED2E4CDD2E3D1D5E5D6DCE9DEE5EE6868B91C16951C16951C16956A - 6ABAEAF3F5E5EBEBE2E6E6DFE2E2DEDFDFDCDDDDDBDCDCDADBDBDBDBDBDADADA - DBDBDBDCDCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE1E1E1E2E3E3E6E7E7E9EC - ECB9BBDB1C16951C16951C16951C16951C16953732A1BCBEDDEEF2F2ECEEEEE9 - EBEBE7E8E8E6E6E6E6E6E6E7E8E8EAEDEDEFF3F3524FAE1C16951C16951C1695 - F0F4F4ECEEEEE8EAEAE6E7E7E5E5E5E5E5E5E6E6E6E7E8E8EAECECEEF1F1D8DB - EB1C16951C16951C16953732A2F0F3F3EDEFEFECEEEEEEF0F0F1F5F51C16951C - 16951C1695524FAEB0B2DA1C16951C16951C16954541A8E6E9F1EFF2F2ECEEEE - EAEAEAE9E9E9E8E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F799999999999999999999999999999999999998989898 - 98989797979797979797979696969B9C9CA4A9A9B1BBBBC3D3D31B15971B1597 - 1B15971B15971B15971B15971B15971B15971B15971B15971B15971B15972622 - 9C8EA0DAB2CDF4A2BCF095ADED8CA4EB89A2EB8EA7EC9AB4EFABC6F26C78C71B - 15971B15971B15979DB2E1BDDAF7B0CCF4A6C1F2A8BEE5BDC5C5C2CCCCCAD7D7 - D4E4E4BFCEDE1B15971B15971B15975F61B2C0CCCCB7C0C0B5BFBFBDCACAA0AC - CC1B15971B15971B15973D3CA5C8DBDBB8C5C5ACB5B5A8B0B0ADB8B8B9C8C8C0 - D3DB1B15971B15971B15971B159792A1CAB9CACAA8B5B59EADC09CB6F1A7C3F3 - B9D6F76670C21B15971B15971B159790A5DFA7C3F4A0BCF3A4C1F3B4D2F71B15 - 971B15971B15974549B0B4D3F79DB9F28BA6EF7F99EC7992EB7991EB7991EB78 - 91EB7891EB7891EB7891EB7890EB7891EB7890EB7991EB7992EB7991EB7991EB - 7A92EB8099EC8CA6EF9EB9F2B4D2F74549B01B15971B15971B1597B5D1F6A4BF - F2A0BAF1A6C1F3B7D4F61B15971B15971B15971B159726229CBFD1DABCCACAB0 - BABAA8AFAFA5ABABA6ACACA9B0B0B1BABABDC9C9CADBDB5457B01B15971B1597 - 1B15974948AAC2CECEB8C0C0B6BDBDBDC6C6C8D6D64A4AAB1B15971B15974A4A - ABC9D5D5BFC7C7BBC2C2BFC7C7CAD5D5332FA11B15971B15973330A1D8E8E8D0 - DCDCC8D2D2C4CCCCC2CACAC6CECECCD5D5D4E0E0DCEBEB7C80C21B15971B1597 - 1B1597B3BBD4CED6D6CBD2D2CDD5D5CAD3DB27239C1B15971B15971B1597AEB6 - D7D7E1E1CED8E7C7D2EBC5CFEAC4CEE9C4CEE8C5CEE8C6CFE8C6CFE7C6CEE7C8 - D0E8CDD6E9D5DFEEDEEAF34E4CAF1B15971B15974E4CAFE2EDF4DAE4EFD5DCEA - D1D7E6D1D6E5D3D8E7D8DEEAE0E7F04E4CAF1B15971B15971B1597DEE6F1E9F1 - F1E4EAEAE2E6E6E0E2E2DFE1E1DFE0E0DCDDDDDCDDDDDBDBDBDBDCDCDCDCDCDD - DDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E4E5E5E7E9E9EBEFEF514DAF - 1B15971B15971B15971B15976C6ABCE4E8F0EEF1F1EBEDEDE9EAEAE7E8E8E6E6 - E6E5E5E5E5E6E6E7E8E8EBEDEDEFF3F3514EAF1B15971B15971B1597F0F4F4EC - EEEEE8EAEAE6E7E7E5E5E5E7E7E7E8E8E8EAEBEBEDEFEFF1F4F49595CE1B1597 - 1B15971B15975F5CB5EFF2F2EDEFEFECEEEEEEF0F0F2F5F51B15971B15971B15 - 97514EB0F4F9F9A2A3D41B15971B15971B15975F5DB6F1F5F5EEF1F1ECEDEDEA - EBEBE9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999898 - 989898989898989797979C9D9DA3A8A8B1BBBBC3D3D319149A19149A19149A30 - 2EA2747BBE747BBE747BBE747BBE5255B019149A19149A19149A19149A19149A - 8090D4AEC9F39FB9F093ABED8CA5EC8DA6EC96AFEEA4BEF1ABC4EF24219F1914 - 9A19149A2F2EA6B8D3F3B7D3F6AECAF3A9C4F3BCCAD5C6D1D1CDDBDBCADAE23D - 3CA919149A19149A19149AB3BFCFBBC6C6B4BDBDB5BEBEBFCDCDA2AED019149A - 19149A19149A19149AA1B0D1C3D5D5BAC8C8B7C4C4BBCACAC6D9D97D88C21914 - 9A19149A19149A19149A3A3BA7C2D7D7B6C7C7ADC3D9ADC9F5B6D4F7BAD7F42F - 2EA619149A19149A19149AA9C4F0A3BFF39DB9F2A3C0F3B4D2F719149A19149A - 19149A4448B2B4D3F79DB9F28CA6EF809AED7A92EC7A92EC7992EC7992EC7992 - EC7991EC7991EC7891EC7991EB7991EB7991EB7A92EC7A92EC7B92EB7B92EB81 - 99EC8CA6EE9DB9F2B5D2F74448B219149A19149A19149AB5D2F6A5C0F3A0BAF1 - A7C2F3B8D4F719149A19149A19149A19149A19149A3B3BA8BECED7BFCECEB8C4 - C4B6C1C1B7C1C1BAC6C6C2CFCFCBDCDC5F63B719149A19149A19149A19149A9D - A8C9BDC7C7B6BDBDB6BDBDBFC8C8CCD9D94949AE19149A19149A4949AECAD6D6 - BFC6C6B9BFBFBBC1C1C4CDCD8B91C319149A19149A19149A6265B8D4E2E2CED9 - D9C9D2D2C8D0D0CAD3D3CFDADAD7E4E4B8C3DD19149A19149A19149A4A49ADD1 - DADAC9CFCFC5CBCBC8CECED0D8D8797DBF19149A19149A19149A25229FAEB6D8 - DAE4E6D3DFEDCFDBEFCEDAEECFDAEECED9EDCFDAEDC3CCE7C2CAE6CFD8EBD3DD - EDDAE5F1E3EFF74C4BB219149A19149A4C4CB2E7F2F8E0EBF3DBE3EFD7DEEBD6 - DCEAD7DDEADBE1ECE1E9F14D4CB119149A19149A19149AECF5F5EBF2F2E7ECEC - E4E8E8E2E6E6E2E5E5BBBCD5DFE1E1DEDFDFDEDEDEDDDDDDDDDDDDDEDEDEDFDF - DFDFDFDFDFDFDFE0E0E0E0E0E0E2E3E3E5E6E6E9EBEBD3D6E719149A19149A19 - 149A19149A7978C3F1F6F6EEF1F1EAEDEDE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6 - E6E7E7E8E9E9EBEDEDEFF3F3504DB219149A19149A19149AF1F5F5EDF0F0EAEB - EBE8E9E9E7E8E8E8E8E8E9EAEAECEEEEEFF2F2E5E9F12722A019149A19149A19 - 149AA0A1D3EEF1F1ECEEEEECEEEEEEF0F0F2F5F519149A19149A19149A504DB2 - F5F9F9F5F9F96C6ABD19149A19149A19149A6B6ABDF1F4F4EFF1F1ECEEEEEBEB - EBEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEAEAEA - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F79C9C9C9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999 - 9898989797979C9D9DA4A9A9B1BBBBC3D3D318139C18139C18139C4647AECEE3 - E3C9DCDCC1D2D2BFCFCFC1D3D3B4C5D65155B418139C18139C18139C18139C92 - A5E0A8C3F299B3EF90A9EC8DA5EC91A9ED9CB5EFABC6F3879ADA18139C18139C - 18139C2E2DA898ACE2BAD7F7B5D2F6BBD3EECEDBDBBBC9DA3C3AAA18139C1813 - 9C18139C676CB9C1CCCCB7BFBFB2B9B9B6BFBFC1CECEA3B0D218139C18139C18 - 139C18139C231FA1A0AED1C6D9D9C5D7D7C9DDDD9FAFD1231FA018139C18139C - 18139C2320A018139C5B60B6B6CAD2BCD5E4BEDCF9BAD7F45A61BF18139C1813 - 9C18139C4246B3ABC7F59DB8F29AB4F2A1BDF3B4D1F718139C18139C18139C2E - 2CA8B6D4F79FBBF38DA7F0829AED7A93EC7A93EC7A93EC7A92EC7A92EC7992EC - 7A92ED7A92EC7A93EC7A92EC7A92EC7B93EC7B93EC7B93EC7B93EC829BED8EA8 - F0A0BBF3B7D4F7393AAE18139C18139C18139CB5D2F6A5C0F3A1BBF2A7C2F3B9 - D5F718139C18139C18139C18139C18139C18139C241FA18891C6BCCBD3C5D4D4 - C6D5D5CADADA97A1CC3B3AAA18139C18139C18139C18139C686DB9C2CECEB8C0 - C0B2B8B8B5BCBCC0C9C9CEDCDC4848AF18139C18139C4848AFC9D5D5BDC5C5B7 - BCBCB7BCBCBEC4C4C9D3D34747AE18139C18139C18139C6163B9CAD6DFD2DDDD - D0DBDBD2DDDDD5E2E29199CD2420A118139C18139C18139CB1B9D2CBD2D2C4C9 - C9C2C5C5C4C8C8CAD0D0D4DDDD3D3BAA18139C18139C18139C18139C6465BBB9 - C2DDDBE9F3DBE9F5DAE7F4CDD9EE8F96D2302CA7A5ACDAD5DFEFD9E4F1E0ECF5 - E5F2F84B4BB318139C18139C4C4BB3E7F3F8E6F1F7E1EAF3DDE5F0DBE2EDDBE1 - EDDDE3EEE1E9F17374C418139C18139C18139CAAAED9EDF4F4EBF1F1E8EEEEE7 - ECECB2B4D7251FA1E2E4E4E0E1E1DEDFDFDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E3E4E4E6E7E7EAEDEDB9BCDE18139C18139C18139C2621 - A2F3F8F8F0F4F4EDEFEFEAECECE8E9E9E7E8E8E7E8E8E8E8E8E6E7E7E7E7E7E8 - E9E9EBEDEDF0F3F34F4DB318139C18139C18139CF2F6F6EFF1F1ECEEEEEAEBEB - EAEBEBEAECECEDEFEFEFF2F2F2F6F66B69BF18139C18139C18139C3430A8F1F4 - F4EEF0F0ECEDEDECEEEEEEF1F1F2F5F518139C18139C18139C4F4DB3F5F9F9F4 - F8F8F4F8F84F4DB318139C18139C18139CA1A1D5F1F4F4EEF0F0ECEDEDEBEBEB - EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEAEA - EAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEB - EBEBECECECECECECECECECEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F2F2F2F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7 - F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79C9C - 9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A99999999999998 - 98989D9E9EA4A9A9B2BBBBC3D3D316129E16129E16129E4447B0CBDFDFBDCCCC - B3BEBEAEB8B8B2BDBDBAC9CCC3DEF65A62C116129E16129E16129E2C2BA9B3CE - F5A1BBF194ADEE8DA5ED8DA5ED95AEEEA1BBF1AFCAF4555DC016129E16129E16 - 129E16129E3739AF6D79CC6D79CC5254B616129E16129E16129E16129E3939AA - C5D1D1B9C2C2B2B8B8B1B6B6ACB3BC979FC37E86C416129E16129E16129E2D2C - A716129E16129E3939AB4446AF3939AB16129E16129E16129E16129E2D2CA670 - 79BF16129E16129E211EA24246B44246B5211EA416129E16129E16129E16129E - 8DA3E1A2BDF396B1F195B0F19FBAF3B1CFF6211FA416129E16129E16129EBBD8 - F9A4BFF491ABF1839DEF7D96ED7B94ED7B93ED7B93ED7A93ED7A93ED7A93ED7B - 93ED7B93ED7B94ED7B93ED7C94ED7B93ED7C94ED7E97EC849DEE92ABF0A4BFF4 - BBD8F816129E16129E16129E16129EB4D0F6A5BFF3A0BAF2A7C2F4B9D5F71612 - 9E16129E16129E4547B05C61B916129E16129E16129E16129E4546B04546B016 - 129E16129E16129E16129E16129E16129E3939ABC5D2D2BAC3C3B3B8B8B2B6B6 - B6BCBCA1A7C2A0A9CD3B3AAC16129E16129E4647B0C7D2D2BDC3C3B5B9B9B4B8 - B8B9BDBDC2CACAC2CCD43A3AAB16129E16129E16129E221FA36062BA777CC36C - 70BF2F2CA816129E16129E16129E16129E8E93C8CED6D6C7CBCBC1C3C3BEC0C0 - C0C2C2C5C9C9CDD4D4C9D2DB3C3BAC16129E16129E16129E16129E16129E1612 - 9E302DA916129E16129E16129E16129EA9B1DEDAE5F24848B416129E16129E16 - 129E16129E16129E16129E16129E16129E16129E16129E16129EACAFDBDDE4EE - E0E7F0B1B6DE16129E16129E16129E16129E7475C48283CA8182C93E3BAE1612 - 9E16129EE4E7E7E1E3E3E0E1E1DFDFDFDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2 - E2E2E2E2E2E4E5E5E7E8E8EAEDEDB9BBDE16129E16129E16129E4E4CB5F4F9F9 - F1F5F5EEF0F0ECEDEDEAECECEAEBEBEAEBEBE9EAEAE8E9E9E8E9E9EAEBEBECEE - EEF1F4F44E4CB516129E16129E16129EF4F9F9F1F5F5EFF1F1EDEFEFEDEFEFEE - F1F1F1F4F4F3F7F76A68C016129E16129E16129E16129EA0A0D5EFF2F2ECEEEE - ECEDEDEDEEEEEFF1F1F2F6F616129E16129E16129E4E4CB5F4F8F8F2F6F6F2F5 - F5E5E9F1403DAF16129E16129E16129EAEAFDBF1F4F4EFF1F1EDEEEEEBECECEB - EBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79D9D9D9C9C9C - 9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9999999999999C9D - 9DA5AAAAB2BBBBC3D3D31510A11510A11510A14345B2C3D5D5B3BEBEA7AEAEA0 - A6A6A2AAAEA8BFE7B5D0F5BBD5F3201DA61510A11510A11510A19CB2E7A8C2F3 - 98B1F08FA7EE8CA4ED8FA8EE98B1F0A3BDF2B0CBF57280D11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A15B5DB7BCC6CFBCC4C4B4 - B9B9AEB2B2AEB3B3ACB2BB2B28A61510A11510A11510A11510A196A2CF3838AD - 1510A11510A11510A11510A11510A11510A11510A11510A1A9BBD6CBE1E13737 - AC1510A11510A11510A11510A11510A11510A11510A11510A1535BC1A9C5F599 - B4F290AAF090ABF19BB6F3AECBF64145B71510A11510A11510A195ABE3A9C6F5 - 96B1F288A1EF7F97EE7C94ED7B94ED7B94ED7B94ED7B93ED7B94EE7B94ED7B94 - ED7C94ED7C94ED7C94ED7C94ED7D95ED8098EE88A1EF97B0F2ABC6F5A0B7E815 - 10A11510A11510A14145B7B1CDF6A3BCF39FB8F2A7C1F4B9D5F71510A11510A1 - 1510A14445B2D2E5E55C60BA1510A11510A11510A11510A11510A11510A11510 - A11510A11510A11510A1676BBCC6D2D2BDC5C5B5BABAB0B3B3B1B4B4B6BBBB6B - 6CB41510A11510A11510A11510A12C2AA9C4CDCDBBC0C0B4B7B7B2B4B4B4B7B7 - BCC1C1C4CCCCC1CCD44545B11510A11510A11510A11510A11510A11510A11510 - A11510A11510A1211EA58D93C9CFD7D7C8CDCDC2C5C5BEC0C0BCBDBDBEBFBFC1 - C3C3C8CCCCCED5D5CAD2DB6D6FC01510A11510A11510A11510A11510A11510A1 - 1510A11510A11510A11510A1AAB3DFDDE8F44847B61510A11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A1ACB0DCDCE3EEDEE5EFE2 - E9EF7172C31510A11510A11510A11510A11510A11510A11510A11510A11510A1 - E5E8E8E1E3E3E0E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E3E3E3E3E3 - E3E4E5E5E7E8E8EBEDEDC7C8E31510A11510A11510A11510A1E6EAF3F2F6F6F0 - F3F3EEF1F1EDF0F0EDF0F0EDEFEF9B9AD1EAECECEAEBEBEBECECEDEFEFF1F4F4 - 4D4AB71510A11510A11510A1F5F9F9F4F8F8F2F6F6F1F5F5F1F5F5F2F6F6BCBE - E23E3CB21510A11510A11510A11510A16967C1F1F4F4EEF0F0ECEDEDEBECECEC - EDEDEFF1F1F2F6F61510A11510A11510A14D4BB7F4F7F7F1F4F4F1F3F3F2F4F4 - CACCE7231FA61510A11510A1221FA7CACCE7F2F4F4EFF1F1EDEEEEECECECEBEC - ECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79E9E9E9E9E9E9D9D9D9D - 9D9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999999999D9E9EA5AAAA - B2BBBBC3D3D3130FA3130FA3130FA34244B3BECECEACB6B69EA4A4979A9A94A8 - DE9DB5F0ACC5F3BDD9F7646EC9130FA3130FA3130FA36A76CDADC8F49CB5F090 - A8EE8AA3ED8CA4ED91AAEE99B1F0A3BCF2ACC7F4A2BAEB535BC3130FA3130FA3 - 130FA3130FA3130FA3130FA34F50B69EA6CAC5CFCFBDC5C5B5BABAAFB2B2ACAF - AFADB1B1B3B9B99297BC130FA3130FA3130FA3130FA39EABD0BFCFD8585CB813 - 0FA3130FA3130FA3130FA3130FA32A29AAA1B0CBBDCECEB9CACAB0BFC8686EB8 - 1E1BA6130FA3130FA3130FA3130FA32929AE6F7DD2AAC6F69CB8F391AAF18BA4 - F08DA6F097B2F2A9C6F66976CE130FA3130FA3130FA3626DCAB2CFF79DB8F48D - A7F1839CEF7E97EE7C95EE7C95EE7C94EE7C95EE7C94EE7C95EE7C95EE7D95EE - 7D95EE7D95EE7D95EE8098EE849DEE8EA7F09DB8F3B2CEF7626DC9130FA3130F - A3130FA3606AC9ADC7F59FB9F39DB7F2A8C1F4B9D5F8130FA3130FA3130FA343 - 45B4D2E6E6D2E4E49FABD04243B2130FA3130FA3130FA3130FA3130FA3130FA3 - 4F51B69EA6CBC4CFCFBEC5C5B6BBBBB1B4B4AEB1B1B1B3B3B6BABABFC6C62A27 - A9130FA3130FA3130FA3130FA3C0C7C7B9BDBDB3B5B5B1B2B2B1B3B3B6B9B9BD - C2C2C4CBCBCCD5D58A8FC73837AF130FA3130FA3130FA3130FA3130FA31F1DA7 - 5D5FBBBBC3D6CED5D5C8CECEC3C6C6BFC1C1BCBDBDBCBDBDBDBDBDBFC0C0C4C6 - C6C9CDCDCED4D4D5DDDDAAAFD46163BF201DA8130FA3130FA3130FA3130FA313 - 0FA3130FA32D2BAEB5BEE4DBE6F34646B8130FA3130FA3130FA3130FA3130FA3 - 130FA3130FA3130FA3130FA3130FA3130FA3AAAEDBDBE0ECDCE1E6E0E4E4E4E8 - E8A5A7D52E2BAD130FA3130FA3130FA3130FA3130FA3201DA84846B5E4E7E7E3 - E5E5E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E3E5E5E5 - E8E9E9EAECECEFF2F22F2CAE130FA3130FA3130FA35A58BEE6EAF4F3F7F7F2F5 - F5F1F4F4C6C8E44A48B74A47B6ECEDEDEBECECEBECECEDEFEFF1F4F44C4AB913 - 0FA3130FA3130FA38484CE8484CE8484CE8384CE7676C92F2CAE130FA3130FA3 - 130FA3130FA3130FA34B49B8E3E7F0EFF1F1ECEEEEEBEBEBECECECEDEEEEEFF1 - F1F3F6F6130FA3130FA3130FA34C4AB9F3F6F6F0F2F2EFF1F1F0F1F1F2F4F4BC - BDE2130FA3130FA3130FA3211EA8E5E8F1F0F2F2EEEFEFEDEDEDECECECEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEEEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9E9E9E9E9E9E9D9D - 9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC3 - D3D3120EA5120EA5120EA54143B5BDCCCCA9B2B29CA0A091A0CC8EA7EE97B0F0 - A5BEF3B8D3F791A3DF120EA5120EA5120EA56B77CFB1CBF59EB8F292AAEF8BA3 - EE8AA2ED8DA4EE90A9EF97B0F09EB8F2A6C1F3ADC8F5B3CEF68DA1E28EA2E28E - A2E28DA0E2ADC3EBC6D0D0C1C9C9BBC2C2B5B9B9AFB2B2ABADADAAABABABAEAE - AFB3B3B5BCBCBBC3C3BEC8C8C0CBCBBFCBCBBDC9C9BCC8C8BBC8C8B2BFC9949E - C3949FC5949FC59CA7C4B6C4C4B1BDBDABB6B6A9B3B3AAB5B5ADB9B9B2C0C08A - 9FE28CA1E28CA1E395ABE7ADC9F6A5C1F59BB5F392ABF18AA3F0879FEF89A3F0 - 93ADF2A4BFF59AB1E8120EA5120EA5120EA51C1BAAB0CCF4A7C3F695B0F388A2 - F0829AF07E96EE7D96EF7C95EE7D95EF7D95EF7D95EE7D95EE7D96EE7D95EE7E - 96EE7F98EE829AEF89A2F095AFF2A7C3F5BCD9F91C1BAA120EA5120EA5120EA5 - 9CB2E9A6C1F59CB5F39CB5F2A6C0F4B9D5F7120EA5120EA5120EA54244B5D2E4 - E4C8D7D7C4D0D0C3CFCFBAC5CE9CA4C99DA5CB9DA6CC9DA6CCC9D5D5C6D0D0C1 - C9C9BBC2C2B5B9B9B2B4B4AEB0B0AEAFAFB1B3B3B4B7B7BBC0C0C2CACAC7D0D0 - C9D3D3C8D1D1C3CBCBBCC2C2B7BABAB2B4B4B0B1B1B0B1B1B3B5B5B8BBBBBCC1 - C1C2C8C8C8D0D0CCD5D5B8C0D3A2A8CEA3A9CFA3AACFAEB5D1D0D9D9CED5D5CB - D1D1C6CBCBC2C5C5BFC1C1BEBEBEBCBCBCBBBBBBBDBDBDBEBEBEC1C2C2C4C6C6 - C9CCCCCED3D3D4DBDBDBE4E4E3EEEEBCC5E24747B8120EA5120EA5120EA5888D - CFDEE8EDD8E1EED6E0F0DAE5F2E0ECF6E6F2F94747BA120EA5120EA54847BAE9 - F3F9E9F2F8E4EDF5DFE7F1DDE3EDDBDFE6DADCDDDBDDDDDDDFDFDFE2E2E3E6E6 - E6EAEAC0C3DFB3B6DBB4B7DCB4B7DCC1C3DFE7EBEBE6E9E9E3E5E5E2E3E3E1E2 - E2E0E1E1E1E1E1E1E1E1E1E1E1E3E3E3E4E4E4E4E4E4E5E5E5E6E6E6E7E8E8EA - EBEBEDF0F0ABACDB120EA5120EA5120EA5120EA51F1DAA4A49BA4A49BA2D2BAF - 120EA5120EA54A47B8EDEFEFECEDEDECEDEDEDEFEFF0F3F34B49BA120EA5120E - A5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA512 - 0EA57575C9F2F5F5F0F2F2EEEFEFECEDEDEBEBEBEBEBEBEDEDEDEFF0F0F2F4F4 - 120EA5120EA5120EA52E2BAFF2F5F5F0F1F1EEF0F0EEF0F0F0F1F1F2F5F59FA0 - D9120EA5120EA5120EA53C3AB4E4E6EFF0F1F1EDEEEEEDEDEDECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D9D9D - 9D9D9D9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC2D2D2100D - A8100DA8100DA84043B7BDCCCCA9B2B29AAAD18FA8EE8FA7EE97AFF0A5BEF2B6 - D1F69CB0E5100DA8100DA8100DA83E43BDB2CCF5A1B9F293ABEF8BA3ED89A1ED - 8BA3EE8DA4EF90A8EF95ADF09AB3F19FB9F2A4BDF3A7C1F4A8C2F4A8C2F4A7C1 - F3A4BDF3B1BED3B8BCBCB4B7B7AFB1B1ADAEAEAAABABAAAAAAAAACACACAFAFAF - B3B3B2B7B7B3BABAB3BABAB3BABAB0B7B7AFB6B6AFB7B7AFB8B8B1BABAB1BBBB - AFB9B9ACB5B5A6AFAFA2A9A99FA5A59CA2A29DA4A49FA7A7A3ABABA1BDF4A4BF - F5A4BFF5A1BCF49CB6F496B0F390A9F28AA3F1859EF0839DF0869FF08FA9F29E - B9F4B1CEF73235B7100DA8100DA8100DA86B79D1B3D0F8A1BCF591ABF287A1F1 - 829BF08098EF7E96EF7D96EF7E96EF7E96EF7E96EF7E96EF7E96EF8098EF849C - F088A0F091ABF1A0BBF4B3D0F86B79D1100DA8100DA8100DA82728B2B4D0F7A1 - BAF399B1F29AB3F2A7C0F4BAD5F8100DA8100DA8100DA84144B8CDDCDCC1CCCC - BCC5C5BAC1C1BBC2C2BEC6C6C1C9C9C1C9C9C1C9C9BEC5C5BBC1C1B8BDBDB4B8 - B8B2B4B4AFB0B0AEAEAEAFAFAFB0B2B2B5B7B7BABEBEBFC5C5C3CBCBC5CDCDC4 - CCCCC1C7C7BBC0C0B6B9B9B3B4B4B0B1B1B1B1B1B2B2B2B4B5B5B8BABABBBFBF - BFC4C4C3C8C8C6CDCDC9D0D0C9D1D1CAD1D1C9CFCFC8CDCDC5CACAC3C6C6C0C2 - C2BFC1C1BCBDBDBCBCBCBBBBBBBCBCBCBEBEBEBEBFBFBFC0C0C2C3C3C5C6C6C7 - CACACDD2D2D5DCDCDEE7E7CAD4E7100DA8100DA8100DA87A7FCCE2EBEBDBE1E1 - D6DADAD4D9DBD8DEE6DEE7EFE6F1F74647BC100DA8100DA84647BCE9F3F8E4EC - F3DFE6EBDDE1E4DBDEDEDADCDCD9DADAD9DADADADCDCDDDEDEDFE1E1E2E4E4E3 - E6E6E4E7E7E5E8E8E6E9E9E6E9E9E5E7E7E4E6E6E2E3E3E2E3E3E2E2E2E1E1E1 - E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E8E8E9EAEAECEE - EEEFF2F29D9ED8100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA810 - 0DA84847BBEEF0F0ECEEEEECEDEDEDEFEFEFF2F24947BC100DA8100DA8100DA8 - 100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA85857C0C8CAE7F1F4 - F4EFF1F1EEEFEFECEDEDEBEBEBEAEBEBECECECEDEEEEEFF0F0F1F4F4100DA810 - 0DA8100DA8100DA8F1F3F3EFF0F0EDEEEEEEEFEFEFF0F0F1F2F2F3F5F55857C0 - 100DA8100DA8100DA84947BBF0F1F1EEEFEFEDEDEDECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEEEEEEEFEFEFEEEEEEEFEFEFEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D - 9D9D9C9C9C9B9B9B9B9B9B9A9A9A9D9E9EA5AAAAB2BBBBC3D3D30F0CAA0F0CAA - 0F0CAA3F42B8BCCBCBA8B8CE99B2F191A9EF92A9EF9AB3F1A8C2F4BBD6F78495 - DD0F0CAA0F0CAA0F0CAA6A77D2B2CCF69FB9F293ACF08CA5EE8AA1EE89A1EE8A - A2EE8CA4EF8EA6EF91A8EF94ACF096AFF198B2F19AB3F19AB3F199B1F196AFF1 - 97ADE9B1B3B3AFB0B0ADAEAEABABABAAAAAAAAAAAAAAABABABACACACAEAEACAE - AEACAFAFABAEAEA9ADADA7ABABA6A9A9A4A8A8A5A9A9A4A9A9A4A9A9A2A7A7A0 - A4A49CA0A0989B9B959898949696949696959999959FB193ADF294AEF294AEF2 - 92ABF28FA9F18CA5F188A1F0859EF0839BEF829AEF859DF08CA5F197B2F3A9C4 - F67B8CDB0F0CAA0F0CAA0F0CAA1A19AF9EB6EBAECAF79EB9F591AAF388A1F184 - 9CF18099F07F98F07E97EF7E97EF7F97EF8098EF8199EF839CF089A2F191ABF2 - 9EB8F4AFCAF7AAC3F01A19AF0F0CAA0F0CAA0F0CAA7D8DDBACC7F69BB3F394AD - F299B1F2A7C0F4BAD5F80F0CAA0F0CAA0F0CAA4043BBCAD7D7BEC6C6B6BCBCB3 - B7B7B2B5B5B5BABAB8BCBCB8BCBCB8BCBCB7BABAB5B8B8B3B5B5B2B3B3B1B2B2 - B0B0B0AEAFAFB0B0B0B1B2B2B4B6B6BABDBDBFC4C4C4CACAC5CCCCC5CCCCC2C8 - C8BCC0C0B7BABAB3B5B5B1B1B1B0B0B0B1B2B2B3B4B4B5B6B6B7B8B8B9BBBBBC - BFBFBEC1C1C0C4C4C1C5C5C2C5C5C1C4C4C1C4C4BFC2C2BEC0C0BEBEBEBCBDBD - BCBCBCBCBCBCBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C5C7C7CACC - CCD1D6D6DAE2E2A1A7D90F0CAA0F0CAA0F0CAAD9E3ECDEE6E6D7DCDCD2D5D5D2 - D5D5D6D9D9DDE3E3E5EDED4646BC0F0CAA0F0CAA4646BCE7EEEEE1E6E6DCDFDF - DADCDCD9DADAD9D9D9D8D8D8D8D9D9D9DADADBDCDCDDDEDEDFE0E0E0E1E1E0E2 - E2E1E3E3E2E4E4E2E4E4E3E4E4E2E3E3E1E1E1E2E2E2E1E1E1E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7EAEAEAEBECECEDEFEF - F0F2F2C7C9E76564C60F0CAA0F0CAA0F0CAA0F0CAA0F0CAA1D1BAF4846BC9B9B - D7EDEFEFECEDEDECECECECEDEDEFF0F06463C54847BC4947BD4947BD4948BD49 - 47BD4947BD4947BD4947BD6665C79E9FDAD6D9ECF2F5F5F1F3F3EFF1F1EEEFEF - EDEDEDECECECEBECECEBEBEBECECECECEDEDEEEFEFF0F2F24846BC4846BC4846 - BC4846BCF0F2F2EFF0F0EEEEEEEDEEEEEEEEEEEFF0F0F1F2F2E4E5EF5755C148 - 47BC4847BC4846BC9B9BD7EFF0F0EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9D9D - 9D9C9C9C9B9B9B9A9A9A9D9F9FA5AAAAB2BBBBC3D3D30D0AAC0D0AAC0D0AAC3D - 40BABED3DEACC5F59EB7F298B1F19AB2F1A4BCF3B1CCF6C3DEF9555ECA0D0AAC - 0D0AAC0D0AAC7381D7AFC9F69EB8F393ABF18DA4EF8AA2EF8AA2EF8AA2EF8AA2 - EF8BA2EF8BA4EF8CA5F08EA6F08FA7F090A7F090A7F08EA7F08DA6F08CA4F0A1 - AAC8AEAEAEADAEAEACACACABABABABABABAAABABAAAAAAAAAAAAA8A9A9A8A9A9 - A6A7A7A5A6A6A3A4A4A1A2A29FA0A09D9F9F9C9E9E9C9E9E9A9C9C989A9A9697 - 979393939192929090908F90908F91918D95A989A2F189A2F189A2F189A1F188 - A0F1859FF1849CF0839BF0829AF0829AF0839CF088A2F192ACF3A0BBF5B2CFF8 - 3B40C00D0AAC0D0AAC0D0AAC3033BBB3CEF5ADC9F79FBAF593AEF38CA6F287A1 - F1859EF1839CF1839CF1849CF1869EF188A1F18DA6F294AFF39FBAF5AEC9F7B3 - CEF53033BB0D0AAC0D0AAC0D0AAC3033BBB5D0F8A3BCF495ADF291A8F198B0F2 - A6C0F5BBD6F80D0AAC0D0AAC0D0AAC3E41BECAD6D6BDC4C4B4B8B8AFB1B1AFB0 - B0B0B2B2B2B3B3B2B4B4B3B4B4B2B3B3B1B2B2B2B2B2B1B1B1B0B1B1B0B0B0B0 - B0B0B0B0B0B2B2B2B6B8B8BCBFBFC1C6C6C7CFCF9BA1C9A6ACCBC5CDCDBFC4C4 - BABDBDB5B6B6B2B3B3B2B2B2B2B2B2B3B3B3B3B4B4B5B5B5B7B7B7B8B8B8B9BB - BBBABBBBBABBBBBCBDBDBCBDBDBCBDBDBCBDBDBBBCBCBCBCBCBCBCBCBDBDBDBD - BDBDBEBEBEBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C4C5C5C8CACACFD3D3 - D7DEDE777ACB0D0AAC0D0AAC0D0AACE5EFEFDDE4E4D6DADAD1D4D4D2D4D4D6D9 - D9DDE2E2E6EEEE4444BE0D0AAC0D0AAC4444BEE4EAEADEE2E2D9DBDBD7D8D8D7 - D8D8D8D8D8D7D8D8D8D8D8D9DADADBDBDBDCDCDCDDDEDEDEDEDEDFE0E0DFE0E0 - E0E0E0E1E1E1E1E2E2E1E1E1E1E1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E4E4E5E5 - E5E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAECEDEDEDEFEFF0 - F1F1F1F3F3F2F5F5C8C9E7BABBE3BABBE3D5D8ECF1F4F4F0F2F2EFF0F0EDEEEE - ECEDEDECECECECEDEDEDEEEEEFF0F0F0F2F2F1F3F3F2F5F5F3F5F5F3F5F5F3F5 - F5F2F5F5F2F5F5F2F4F4F1F3F3F0F2F2EFF1F1EEEFEFEEEFEFEDEEEEEDEDEDEC - ECECECECECECECECECECECEDEDEDEEEEEEEFF0F0F0F2F2F1F2F2F1F2F2F0F2F2 - EFF0F0EEEEEEEDEDEDEDEDEDEEEEEEEFEFEFF0F1F1F1F2F2F1F3F3F2F3F3F1F3 - F3F1F2F2EFF0F0EEEFEFEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7A2A2A2A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9E9E9E9D9D9D - 9B9B9B9A9A9A9D9F9FA6ABABB2BBBBC3D3D30C09AE0C09AE0C09AE3D40BDC3DF - F9B3CDF6A8C1F4A3BCF3A6BFF4B0CAF6BED9F8A8BEED0C09AE0C09AE0C09AE0C - 09AE9CB1EAABC4F59CB4F292AAF08CA4EF8BA3EF8BA3EF8BA2EF8BA3F08BA3F0 - 8BA2F08AA2EF8AA2F08BA3F08BA3F08BA2F08BA2F089A1F089A1F08DA2E7ADAD - ADADADADADADADADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A3 - A3A3A1A1A19F9F9F9C9C9C9A9A9A999999989898969696959595939393919191 - 9090908F8F8F8E8E8E8D8D8D8992B1859DF0859DF0859DF0849DF0839CF0839B - F0839BF0839BF0829BF0829BF0839BF0869EF18DA5F299B3F4A8C3F798AFEB18 - 17B30C09AE0C09AE0C09AE2E32BCB3CFF5B0CDF8A5C0F69BB5F594AEF490AAF3 - 8EA7F28DA7F28EA8F290A9F395AFF39CB6F5A5C0F6B1CDF8B4CFF52F33BC0C09 - AE0C09AE0C09AE1817B39AB0EBAAC4F69BB4F491A8F28FA6F298AFF3A7C0F5BC - D6F80C09AE0C09AE0C09AE3D41C1CAD6D6BDC4C4B5B8B8AFB0B0ADADADAEAFAF - AFB0B0B0B1B1B1B2B2B1B1B1B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3B3B3B3B3B3 - B3B5B5B5B9BABABFC2C2C6CCCC3C3CB80C09AE0C09AE5F62BFC4CACABDC1C1B8 - BABAB4B5B5B3B3B3B3B3B3B4B4B4B4B4B4B5B5B5B5B5B5B6B6B6B7B7B7B7B8B8 - B8B9B9B8B9B9BABBBBBABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBF - BFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C9CACACFD2D2D6DCDC90 - 95D30C09AE0C09AE0C09AED8E2ECDFE7E7D9DEDED5D8D8D5D8D8D9DDDDE0E6E6 - E8F0F00C09AE0C09AE0C09AE4443BFE3E8E8DDE0E0D9DADAD7D7D7D7D7D7D8D8 - D8D8D8D8D9D9D9DADADADBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDEDEDEDFDFDFE0 - E0E0E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9EAEAEAEBECECECEDEDEDEEEEEEEF - EFEFF1F1F0F1F1F0F2F2F0F2F2F0F1F1F0F1F1EFF0F0EEEFEFEDEDEDECECECEC - ECECECECECEDEDEDEEEEEEEEF0F0EFF0F0EFF1F1F0F1F1F0F1F1F0F1F1EFF1F1 - EFF1F1EFF0F0EFF0F0EFF0F0EEEFEFEDEEEEEDEDEDECEDEDECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEFEFEFEFF0F0EFF0F0F0F1F1EFF0F0EFEFEFEE - EEEEEEEEEEEDEDEDEDEDEDEEEEEEEEEFEFEFF0F0EFF0F0F0F1F1F1F1F1EFF0F0 - EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3 - F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A3A3 - A3A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C9A - 9A9A9D9F9FA6ABABB2BCBCC3D3D30A08B10A08B10A08B13B40C3CDE9FBBFD9F9 - B6D0F7B3CCF6B6D1F7C0DBF8A7BDED1616B60A08B10A08B10A08B13A3FC3B6D0 - F7A6BFF498B1F291A9F18DA5F08CA3F08CA3F08CA4F08CA3F08BA3F08BA3F08B - A3F08BA3F08BA2F08BA2F08AA2F08AA2F08AA2F08AA2F08AA1F0A0A9C6AEAEAE - AEAEAEAEAEAEADADADACACACABABABAAAAAAAAAAAAA8A8A8A6A6A6A4A4A4A2A2 - A2A0A0A09E9E9E9B9B9B99999998989897979795959594949493939391919190 - 90908F8F8F8E8E8E8995BF859DF1859DF1849DF1849CF1849CF1849CF1849CF1 - 839CF1839BF1839BF1839BF1859DF189A2F291AAF39DB8F5ACC8F77A8BDE0A08 - B10A08B10A08B10A08B11616B695AAE8B8D4F9AECAF8A6C2F7A1BCF69EB9F59C - B7F59EB9F5A1BCF6A6C2F6AFCAF8B7D4F994AAE82224BA0A08B10A08B10A08B1 - 0A08B17B8CDEAEC9F7A0B8F494ACF28DA4F18EA5F197AFF3A8C1F5BCD7F90A08 - B10A08B10A08B13A40C4C9D7DBBFC5C5B5B8B8B1B1B1AFAFAFB0B0B0B1B1B1B2 - B2B2B2B2B2B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B7B8B8 - BABDBDC1C5C5A5ABCB0A08B10A08B10A08B10A08B1C7CECEBFC3C3B9BBBBB6B6 - B6B4B4B4B5B5B5B4B4B4B5B5B5B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B9B9B9BA - BABABABABABBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1 - C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C6C6C6C9CACACED0D0D6DBDBB7BDDD0A08 - B10A08B10A08B1868BD5E4ECECDFE5E5DCE1E1DCE1E1E0E5E5E6EDED969BDA0A - 08B10A08B10A08B16C6DCCE2E7E7DCDFDFD9DADAD8D8D8D8D8D8D9D9D9D9D9D9 - DADADADADADADBDBDBDDDDDDDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E1E1E1E2E2 - E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E7 - E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBECECECECECECEDEDEDEDEDEDEEEE - EEEFEFEEEFEFEEEFEFEEEFEFEDEEEEEDEDEDECEDEDECECECECECECEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEE - EEEEEDEEEEEDEDEDEDEDEDECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEEEEEEEEEEEDEEEEEDED - EDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFF0F0EFF0F0EFF0F0EFEFEFEFEFEFEF - EFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A5A5A5A4A4A4 - A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09E9E9E9D9D9D9C9C9C9B9B9B9D9F - 9FA5AAAAB2BBBBC2D1D10907B30907B30907B33A40C5CEE9FBCBE5FBC4DFF9C2 - DDF9AEC6F16A78D71415B80907B30907B30907B30907B39CB1ECAEC7F6A0B8F4 - 96AEF290A7F08DA5F18DA5F18DA4F18DA4F18CA4F18CA4F18CA4F18CA4F18CA3 - F18BA3F18BA3F18BA3F18BA3F18BA2F18BA2F18AA2F18FA3E8AEAEAEAEAEAEAE - AEAEAEAEAEAEAEAEADADADACACACABABABA9A9A9A8A8A8A6A6A6A4A4A4A2A2A2 - 9F9F9F9D9D9D9B9B9B9999999898989696969595959393939292929191919090 - 908F8F8F8997C5859DF1859DF1859DF1859DF1859DF2859DF2859DF2849CF184 - 9DF2849CF2849CF2859DF2879FF28BA5F394AEF4A0BAF6AFCAF87A8BDF0907B3 - 0907B30907B30907B30907B3383FC593A9E9BAD7FAB5D1F9B1CEF8B0CDF8B1CD - F8B5D1F9B9D6F993A8E8505BCE0907B30907B30907B30907B30907B37B8CDFB1 - CCF8A3BCF596AFF48FA6F28AA2F28FA6F299B1F4AAC4F6BED9F90907B30907B3 - 0907B33A3FC5C6D6E4BFC6C6B7BABAB3B3B3B0B0B0B2B2B2B3B3B3B4B4B4B4B4 - B4B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B8B9B9BCBEBEC2 - C7C7B2B8CD0907B30907B30907B31514B5C8CFCFC0C4C4BABCBCB7B7B7B5B5B5 - B6B6B6B6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B8B8B8B9B9B9BABABABABABABBBB - BBBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C2C2C2C3 - C3C3C4C4C4C4C4C4C5C5C5C7C7C7C9CACACED0D0D4D8D8DCE3E32424BA0907B3 - 0907B31616B7BFC6E6E5EDEDE3EAEAE4EAEAE7EEEEBFC6E71616B70907B30907 - B30907B3BCC2E2E1E5E5DCDEDED9DADAD7D8D8D9D9D9DADADADADADADBDBDBDC - DCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E2E2E2 - E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEBECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDECEDEDECECECECECECECECECECECECECECEC - ECEDEDECEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEEEEEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFF0F0EFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A5A5A5A4A4A4A3 - A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9E9E9E9C9C9C9B9B9B9E9F9FA4A9A9 - B0B8B8BFCECE0706B50706B50706B51313B9393EC7393EC7393EC72022BE0706 - B50706B50706B50706B50706B50706B57B8BE0B3CDF7A6BEF59AB3F393ACF28F - A7F18EA5F18EA5F18EA5F18DA5F18DA5F18DA5F18DA4F18CA4F18CA4F18CA4F1 - 8CA4F18CA3F18CA4F18BA3F18BA3F18BA3F18BA3F2A1AAC8AEAEAEAFAFAFAFAF - AFAEAEAEAEAEAEADADADACACACABABABA9A9A9A7A7A7A6A6A6A3A3A3A0A0A09E - 9E9E9C9C9C9A9A9A999999979797969696949494939393929292919191909090 - 899AD9869EF2869EF2869EF2869EF2869EF2869EF2859EF2859EF2859DF2859D - F2859DF2849DF2859FF288A0F38DA6F396AFF5A2BCF6AFCBF88497E41314B907 - 06B50706B50706B50706B50706B51313B9434BCB6573D86573D86573D8434BCB - 1F21BE0706B50706B50706B50706B50706B51314B98597E4B1CCF8A3BEF698B1 - F591A8F28CA3F28BA2F191A8F29CB4F4AEC7F7C2DDFA0706B50706B50706B539 - 3FC7C0D6EFC1C7C7B8BBBBB4B4B4B1B1B1B3B3B3B4B4B4B5B5B5B6B6B6B5B5B5 - B6B6B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9B9BCBEBEC1C5C5C8CD - CD6A6EC50706B51413B78386C8C6CCCCC0C3C3BBBDBDB8B9B9B6B6B6B6B6B6B7 - B7B7B7B7B7B7B7B7B8B8B8B8B8B8B9B9B9BABABABABABABABABABBBBBBBDBDBD - BDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C3C3C3C4C4C4C4C4C4C5C5 - C5C5C5C5C6C6C6C7C7C7C9CACACDCECED2D5D5D9DEDE9CA2D90706B50706B507 - 06B50706B55C5FCCA3A8DFA3A8E05C5FCC0706B50706B50706B50706B54E4FC8 - E3E8E8DFE1E1DBDDDDD9D9D9D9D9D9DADADADBDBDBDBDBDBDBDBDBDDDDDDDEDE - DEDFDFDFDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E5E5E5E7E7E7E7E7E7E6E6E6E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEA - EAEAEAEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A6A6A6A5A5A5A4A4A4A3A3 - A3A3A3A3A2A2A2A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9FA0A0A4A7A7ADB4B4BA - C7C70605B80605B80605B80605B80605B80605B80605B80605B80605B80605B8 - 0605B80605B81F21C091A5E9B4CEF8A8C1F69DB6F496AFF392A9F290A7F28FA6 - F28EA6F28EA6F28EA6F28EA5F28EA5F28DA5F28DA5F28DA5F28DA5F28DA4F28C - A4F28CA4F28CA4F28CA4F28CA4F28CA4F290A5EAB0B0B0AFAFAFB0B0B0AFAFAF - AFAFAFAEAEAEADADADABABABABABABA8A8A8A6A6A6A4A4A4A2A2A29F9F9F9D9D - 9D9B9B9B9A9A9A989898979797969696949494939393929292919191899CD987 - 9FF2879FF2869EF2869EF2879FF3869EF2869EF3859EF2869EF3869EF3859EF3 - 859DF3859DF3879FF38AA2F48EA8F496B0F5A1BBF7ACC7F8A3BBF2414ACC0605 - B80605B80605B80605B80605B80605B80605B80605B80605B80605B80605B806 - 05B80605B80605B80605B8363CC8A3BBF1AEC9F8A3BCF698B1F492AAF38DA4F3 - 8AA2F28CA2F294AAF39FB7F5B1CAF8C5DFFB0605B80605B80605B8383EC9BBD3 - F9B3C3E1AAB6D7A4AFD3A2ACD2ABB0C3ACB1C4ADB2C4B1B4BDB7B7B7B7B7B7B7 - B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B9BABABCBDBDBFC1C1C4C8C8C8CDCD - CAD0D0CAD0D0C7CCCCC3C6C6BEC0C0BABBBBB8B8B8B7B7B7B8B8B8B8B8B8B8B8 - B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBCBCBCBDBDBDBDBDBDBFBFBFBF - BFBFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9CCCDCDD0D2D2D5D9D9DDE3E3595CCB0605B80605B80605 - B80605B80605B80605B80605B80605B80605B80605B83131C2D8DDE8E1E4E4DE - E0E0DBDCDCD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A4A4A4 - A3A3A3A2A2A2A1A1A19F9F9F9E9E9E9D9D9D9E9F9FA3A5A5AAAFAFB4BEBE0403 - BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA353BCA7B - 8BE2BBD5F9B2CBF7A7C1F69FB7F498B1F394ABF391A8F28FA7F28FA7F28FA7F2 - 8FA6F28FA6F28FA6F28FA6F38EA6F28EA6F28EA6F38DA5F28DA5F28DA5F28DA5 - F28DA4F28DA4F28DA5F38DA4F38DA4F3A2ABC9B0B0B0B0B0B0B0B0B0AFAFAFAF - AFAFAEAEAEADADADABABABAAAAAAA8A8A8A6A6A6A3A3A3A0A0A09E9E9E9C9C9C - 9B9B9B9A9A9A98989897979796969694949494949491949E889FED88A0F388A0 - F388A0F3879FF2879FF3879FF3879FF3879FF3869FF3869FF3869EF3869EF386 - 9EF3859EF387A0F38AA2F48EA7F495AEF59EB8F6A7C3F8B2CDF98EA3EA4049CE - 0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403 - BA4049CE8EA4EAB3CEF9A9C3F8A0B9F697B0F591A8F48DA4F48BA2F38BA1F28E - A5F395ACF4A2BAF5B2CCF8C6E0FB0403BA0403BA0403BA363CCAB8D1F8A8BFF6 - 9BB1F494A9F392A6F293A7F293A7F294A8F295A8F296A9F296A9F197AAF19DAD - E6A0AEE3A1AEE3A1AFE3AAB3D4ABB4D5ADB7D7B8BDC8C0C2C2C2C5C5C3C6C6C3 - C7C7C1C4C4BEC1C1BCBDBDBABABAB8B9B9B9B9B9B8B8B8B9B9B9B9B9B9B9B9B9 - BABABABABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0 - C0C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C8C8C8C8C8C8C9 - C9C9CACACACCCCCCCFD0D0D3D6D6D9DDDDDEE4E48F93D81212BD0403BA0403BA - 0403BA0403BA0403BA0403BA0403BA696BD1D7DCE7E2E5E5DEE0E0DCDEDEDBDB - DBDADBDBDBDBDBDCDCDCDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E1 - E1E1E1E1E1E2E2E2E3E3E3E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E8E8E8 - E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A9A9A9A7A7A7A6A6A6A6A6A6A5A5A5A4A4A4A3A3A3A2 - A2A2A1A1A1A0A0A09F9F9F9D9D9D9E9F9FA0A2A2A5A9A9ACB3B38890BE8E97C5 - 919ED193A7EA94A7EA93A6EA92A5EA91A5EA9CB1EEBDD7F9B8D2F9B3CCF8ACC5 - F7A4BDF69EB6F598B0F495ACF491A9F390A8F390A8F390A7F390A7F390A7F38F - A7F38FA7F390A7F38FA6F38FA7F38FA7F38EA6F38EA6F38EA6F38EA5F38EA6F3 - 8EA5F38DA5F38DA5F38DA5F392A6EBB0B0B0B0B0B0B0B0B0B0B0B0AFAFAFAFAF - AFAEAEAEACACACABABABA9A9A9A6A6A6A4A4A4A2A2A29F9F9F9D9D9D9C9C9C9A - 9A9A999999989898949AAE8F9CCA8B9FE189A1F489A1F488A0F388A1F488A0F3 - 88A0F4879FF388A0F488A0F487A0F4879FF4879FF4879FF4879FF4869FF4869E - F4869EF487A0F48AA2F48DA6F593ACF599B3F6A1BBF7A9C4F8B1CDF9ADC7F677 - 88E35663D8333ACC333ACC343ACC343ACC333ACC5663D87789E3ADC7F6B2CDF9 - ABC6F8A4BDF79CB4F695ADF591A8F48CA4F48AA1F38AA1F38BA2F38EA6F497AE - F5A4BBF6191BC40302BC0302BC0302BC0302BC3439CCB3CCF8A5BCF59BB0F495 - A9F393A7F394A7F294A8F295A9F295A9F296AAF297AAF297AAF298ABF299ABF2 - 9AACF29BADF29BADF29DAEF19EB0F1A8B5E4BCBDBDBDBFBFBEC0C0BEC0C0BDBE - BEBBBCBCBBBBBBBABABAB8B8B8B9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBB - BBBBBCBCBCBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2 - C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C7C7C7C9C9C9C9C9C9CACACACBCB - CBCDCDCDCECFCFD1D2D2D5D7D7D9DCDCDEE2E2D3D9E49094DA676AD23C3DC93D - 3EC95A5CD08386D8C9CEE5E3E8E8E1E4E4DEE0E0DDDEDEDBDCDCDBDBDBDADADA - DCDCDCDDDDDDDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3 - E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9 - E9E9E9E9E9EBEBEBECECECECECECECECECECECECEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7AAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2 - A2A1A1A19F9F9F9E9E9E9E9F9F9FA0A0A0A3A3A5A9A9AAB0B0ADB6B6B0BABAB2 - C4DAB5CDF8B3CDF8B3CDF8B2CBF8B0C9F7ADC6F7AAC2F6A4BDF6A0B8F59CB4F5 - 98B0F595ADF493AAF492A9F491A9F491A9F491A9F491A8F490A8F391A8F490A7 - F390A8F490A8F490A7F490A7F48FA7F48FA7F48FA7F48FA7F48FA6F48EA6F48E - A6F48EA6F48EA6F48EA5F4A3ACC9B0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAE - ACACACABABABA9A9A9A7A7A7A5A5A5A3A3A3A0A0A09B9EA8979EB8939FC78EA0 - DD8AA2F48AA2F48AA2F48AA2F48AA2F489A2F489A1F489A1F489A1F489A1F489 - A1F488A0F488A0F488A0F488A0F488A0F487A0F487A0F4879FF4879FF4879FF4 - 869FF487A1F489A1F48CA4F590A8F594AEF69AB4F7A0BAF7A5C0F8AAC5F9AEC9 - F9B1CCF9B2CEF9B3CFFAB3CFF9B1CDF9AFCAF9ACC7F9A8C1F8A1BBF79CB5F797 - B0F691AAF58FA6F58CA3F48AA1F48AA1F48BA1F48CA3F48FA6F598AEF5A2B9F6 - 8496E90101BE0101BE0101BE0101BE3036CDAFC6F7A3B9F699AFF494A8F393A7 - F394A8F294A8F295A9F396AAF397AAF398ABF398ABF399ACF39BADF29AADF29C - AEF29DAEF29DAFF29EB0F2A0B1F2B4B8C9BABBBBBABBBBBBBCBCBABBBBBABABA - B9BABAB9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBBBBBBBCBCBCBCBCBCBDBD - BDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C4C4C4C4 - C4C4C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACCCCCCCBCBCBCDCDCD - CFCFCFCFD0D0D3D4D4D6D8D8D8DBDBDCE0E0DFE3E3E1E5E5E2E7E7E3E8E8E3E7 - E7E2E6E6E0E4E4DFE2E2DDDFDFDCDDDDDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDD - DDDDDEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5 - E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEAEA - EAEBEBEBEBEBEBECECECECECECECECECEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2 - A1A1A19F9F9F9E9E9E9E9F9F9E9F9F9FA1A1A1A5A5A2A7A7A3A8A8A3AAAAA6BB - E8A6BEF6A5BDF6A4BCF6A3BBF6A0B9F69EB6F59BB4F599B1F596AFF495ACF494 - ABF493AAF492AAF492AAF492AAF492A9F492A9F491A9F491A9F491A9F491A8F4 - 91A8F491A8F490A8F490A8F490A8F490A7F48FA7F48FA7F48FA7F48FA7F48FA6 - F48FA6F48EA6F493A7ECB0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAEADADADAC - ACACA2A8BC9DA6C499A5CD92A4E08DA4EF8CA4F58BA3F48BA3F48BA3F48BA3F4 - 8BA3F58BA3F58BA3F58AA2F58AA2F58AA2F58AA2F58AA2F589A2F589A1F589A1 - F589A1F589A1F589A1F588A1F588A0F588A0F588A0F588A0F587A0F5879FF587 - 9FF588A0F588A1F58AA3F58CA5F68FA8F693ACF697B0F79AB4F79DB7F89FB9F7 - A1BBF8A2BCF8A2BCF8A0BAF89FB9F89BB5F798B2F796AEF691AAF68FA7F58CA5 - F48CA3F48BA2F48BA1F48BA1F48BA2F48DA3F490A7F495ACF59DB5F6A8C0F764 - 72E05D69DD5E6ADD5C69DC6F7EE3A7BEF69FB5F699AEF496AAF394A8F395A9F3 - 95A9F397ABF397ABF398ABF398ABF399ACF39BADF39BAEF39CAEF39DAFF39DAF - F39EB0F39FB0F3A0B1F3A5B3E8BABABABABABABABABABABABAB9B9B9B9B9B9BA - BABABABABABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBE - BFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C6C6C6C7C7 - C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACACACACCCCCCCCCCCCCDCDCDCECECECF - CFCFD1D1D1D3D4D4D6D7D7D8DADAD9DCDCDBDEDEDDE0E0DEE1E1DEE0E0DEE0E0 - DCDEDEDCDDDDDBDCDCDADBDBDBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDF - DFE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7 - E7E7E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBECECEC - ECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7ADAD - ADABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0 - A0A09E9E9E9E9E9E9C9D9D9C9D9D9C9D9D9B9D9D9A9C9C9A9C9C999EA69CB2EF - 9CB3F59AB3F599B2F598B1F597AFF496AEF595ACF495ACF594ABF594ABF593AB - F593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9F592A9F591A9F591 - A9F591A9F591A8F591A8F590A8F590A8F590A8F590A8F590A7F58FA7F58FA7F5 - 8FA7F58FA7F5A0ABD2A3ACCA9FABD29FABD296A8E396A7E38EA5F58DA5F58DA5 - F58DA5F58DA5F58CA4F58CA4F58CA4F58CA4F58CA4F58CA4F58BA3F58CA4F58C - A4F58BA3F58BA3F58BA3F58BA3F58AA3F58AA2F58AA2F58AA2F58AA2F58AA2F5 - 89A1F589A1F589A1F589A1F589A1F588A1F588A1F588A0F588A0F588A0F587A0 - F587A0F588A0F588A1F58AA2F58CA4F68CA6F68EA7F690A9F692ABF693ACF694 - ADF694ADF693ABF692ABF690A9F68FA7F68DA6F68CA4F58BA2F58CA3F58AA2F5 - 8BA2F58CA2F58BA2F58CA3F58CA3F58FA6F594AAF599B1F59FB7F6A7BFF7ACC4 - F8AEC5F8ACC3F8A7BEF7A1B6F69BB1F598ACF595AAF494A9F496AAF496AAF497 - ABF399ACF499ACF399ACF39BADF49BAEF49CAEF49DAFF49EB0F39EB0F39FB1F3 - A0B1F3A0B2F3A2B3F3B0B6CFB9B9B9BABABABABABABABABABABABABABABABABA - BABBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C5C5C5C7C7C7C7C7C7C8C8C8 - C9C9C9CACACACBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECFCFCFCFCFCFD1D2 - D2D2D2D2D3D4D4D5D6D6D6D7D7D8D9D9D9DADAD9DADAD9DBDBDADBDBD9DADAD9 - DADADBDBDBDADBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1 - E1E1E1E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7E7E7E7E7E7E7 - E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2 - F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7AEAEAEACACAC - ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A1A1A19F9F - 9F9E9E9E9C9C9C9B9B9B999999989898969696969797949595959EB897AEF597 - AEF596AEF595ADF595ADF595ACF595ACF595ACF594ACF594ACF594ABF594ABF5 - 94ABF593ABF593ABF593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9 - F592A9F591A9F591A9F591A9F591A8F590A8F590A8F590A8F590A8F590A7F590 - A7F58FA7F58FA7F58FA7F58FA7F58FA7F68EA6F58EA6F58EA6F58EA6F68EA6F6 - 8EA6F68DA5F58DA5F58DA5F58DA5F58DA5F68CA4F58CA4F58CA4F68CA4F68CA4 - F68CA4F68CA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA3F68AA2F68AA2F68A - A2F68AA2F68AA2F689A2F689A1F689A1F689A1F689A1F688A1F688A0F688A0F6 - 88A0F688A0F687A0F688A1F688A1F689A1F689A2F68AA2F58BA4F58BA3F58BA4 - F58BA3F58AA3F58BA3F58BA2F68BA2F68AA1F68BA2F68BA2F58BA2F58BA3F58C - A3F58DA4F58DA3F58DA4F58FA5F592A9F595ACF69AB1F69EB4F7A2B8F7A2B8F7 - A1B7F79EB5F69BB1F698ADF596ABF496AAF496AAF497ABF497ABF498ACF499AC - F49AACF49AADF49BAEF49BAEF49CAFF49EB0F49EB0F39FB1F49FB1F3A1B2F3A1 - B2F3A3B4F4A5B5F0B8B9BDB9B9B9B9B9B9BABABABABABABABABABBBBBBBBBBBB - BBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC1C1C1C1C1C1C2C2 - C2C2C2C2C3C3C3C3C3C3C4C4C4C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8CACACACB - CBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFCFCFCFD1D1D1D2D2D2D2D2D2 - D3D3D3D5D5D5D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9DADAD9D9D9DADA - DADBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3 - E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9 - EAEAEAEAEAEAEBEBEBEBEBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4 - F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AEAEAEADADADAB - ABABAAAAAAA9A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A2A2A2A0A0A09F9F9F - 9D9D9D9B9B9B9A9A9A98989896969696969694949493939395A3D096AEF696AE - F696ADF696ADF696ADF695ADF695ADF695ADF695ACF695ACF695ACF694ACF694 - ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693AAF692AAF692AAF6 - 92AAF692A9F692A9F691A9F691A9F691A9F691A9F691A8F690A8F690A8F690A8 - F690A8F690A7F690A7F68FA7F68FA7F68FA7F68FA6F68FA6F68FA7F58EA6F68E - A6F68EA6F68EA6F68DA5F68DA5F68DA5F58DA5F68DA5F68DA5F68DA5F68DA5F6 - 8CA4F68CA4F68CA4F68CA4F68BA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA2 - F68AA2F68AA2F68AA2F68AA2F689A2F689A2F689A1F689A1F689A1F688A1F688 - A1F688A0F688A0F688A0F688A0F688A0F688A0F688A0F688A0F689A1F689A1F6 - 89A1F68AA1F68AA1F68AA2F68AA2F68BA2F68CA3F58CA3F58CA3F58DA4F68EA4 - F68EA5F68FA5F68FA5F690A7F692A8F695ABF696ACF698AFF699AFF69AAEF698 - ADF697ADF597ABF596ABF596AAF597ABF597ABF598ACF599ACF599ADF59AADF5 - 9BAEF49CAEF49CAFF49DAFF49EB0F49FB0F49FB1F4A1B2F4A1B2F4A2B3F4A3B4 - F4A4B4F4ADB6D9B8B8B8B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBD - BDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCC - CCCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D5 - D5D5D5D5D5D7D7D7D7D7D7D8D8D8D8D8D8DADADADADADADADADADCDCDCDCDCDC - DDDDDDDEDEDEDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4 - E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8EAEAEAEBEBEBEB - EBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AFAFAFAEAEAEACACACABAB - ABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9D - 9D9D9C9C9C9A9A9A98989897979796969694949493949996A9E397AEF697AEF6 - 96AEF696AEF696AEF696ADF696ADF696ADF695ADF695ADF695ACF695ACF695AC - F694ACF694ACF694ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693 - AAF692AAF692AAF692AAF692A9F691A9F691A9F691A9F691A9F691A8F691A8F6 - 90A8F690A8F690A8F690A8F690A7F68FA7F68FA7F68FA7F68FA7F68FA6F68EA6 - F68FA7F68EA6F68EA6F68EA6F68DA5F68EA6F78EA6F78DA5F78DA5F78DA5F78D - A5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA4F78BA3F78BA3F78BA3F7 - 8BA3F78BA3F78AA3F78AA2F78AA2F78AA2F78AA2F789A2F789A1F789A1F789A1 - F789A1F788A1F788A1F789A1F688A1F689A1F689A1F68AA2F68AA1F68AA2F68B - A2F68AA2F68BA2F68CA3F68BA3F68CA3F68DA4F68CA3F68DA4F68EA5F68FA5F6 - 90A6F68FA5F690A6F691A7F692A8F693A9F695AAF696AAF696ABF695AAF696AA - F695AAF696AAF697ABF697ACF598ACF599ACF59AADF59AADF59BAEF59CAFF59D - AFF59EB0F59EB0F59EB1F59FB1F5A1B2F5A2B3F5A2B4F5A3B4F4A4B5F4A5B5F4 - A5B6F4B3B7C7B8B8B8B9B9B9B9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBEBE - BEBFBFBFBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C5C5C5C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCD - CECECECFCFCFCFCFCFD1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D6D6 - D6D7D7D7D8D8D8D7D7D7D9D9D9DADADADADADADBDBDBDDDDDDDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E6E6E6 - E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBECECECECEC - ECECECECEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7B2B2B2B1B1B1B0B0B0AFAFAFACACACABABAB - AAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9C9C - 9C9B9B9B9999999898989797979696969595959599A697ADF197AFF797AFF797 - AEF797AEF797AEF796AEF796AEF796AEF796ADF796ADF796ADF795ADF795ADF7 - 95ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF793ABF793ABF793AB - F793AAF793AAF792AAF792AAF792AAF792AAF792A9F791A9F791A9F791A9F791 - A9F791A8F791A8F790A8F790A8F790A8F790A7F790A7F78FA7F78FA7F78FA7F7 - 8FA7F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78DA5 - F78DA5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA3F78CA4F78BA3F78B - A3F78BA3F78BA3F78BA3F78AA3F78AA3F78AA2F78AA2F78AA2F789A2F789A2F7 - 89A1F789A1F789A2F789A1F78AA2F78AA1F78AA2F78BA3F78BA2F78BA3F78BA3 - F78BA3F78CA4F78CA4F78DA4F78DA4F68DA4F68EA4F68FA5F68FA6F690A6F691 - A7F691A7F691A7F691A7F693A8F794A9F694A9F694A9F696AAF695AAF696ABF6 - 97ABF697ABF698ACF698ACF59AADF69AADF59BAEF69DAFF69DB0F69DB0F69FB1 - F69FB1F6A0B2F5A1B3F5A2B3F5A3B4F5A3B4F5A4B5F5A4B5F5A5B6F5A7B7F5AA - B8EDB7B8BCB9B9B9B9B9B9BABABABBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBE - BFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7 - C7C8C8C8C9C9C9C9C9C9CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCFCFCFCFCFCFD0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D6D6D6D6D6D6D7D7D7D8D8D8 - D8D8D8D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0 - E0E0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7E7E7E8 - E8E8E7E7E7E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDED - EEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7B3B3B3B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAA - AAAAA9A9A9A8A8A8A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D - 9A9A9A999999989898979797969696959595969FB998AFF798AFF798AFF797AF - F797AFF797AFF797AEF797AEF797AEF796AEF796AEF796ADF796ADF796ADF795 - ADF795ADF795ADF795ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF7 - 93ABF793ABF793ABF793AAF792AAF792AAF792AAF792AAF792A9F792A9F791A9 - F791A9F791A9F791A9F791A8F790A8F790A8F790A8F790A8F790A7F78FA7F78F - A7F78FA7F78FA7F78FA7F78FA7F88EA6F78EA6F78EA6F78EA6F78EA6F78DA5F7 - 8DA5F78DA5F88DA5F78DA5F88CA4F78DA5F88CA4F78CA4F78CA4F78BA3F78CA4 - F88CA4F88BA4F88BA3F88BA3F88BA3F88BA3F88AA3F88AA2F88AA2F88AA2F88A - A2F88AA2F78AA2F78BA2F78AA2F78BA3F78BA3F78BA3F78CA3F78CA3F78CA4F7 - 8DA4F78EA5F78EA5F78EA5F78FA5F78FA5F78FA6F790A6F790A7F791A7F791A7 - F792A7F792A8F793A9F794A9F695A9F695AAF696AAF697ABF698ACF797ABF697 - ACF699ADF79AADF69BAEF69BAEF69CAFF69CB0F69EB0F69DB0F6A0B2F6A0B2F6 - A1B3F6A2B4F6A2B4F6A3B5F6A4B5F6A5B6F6A5B6F6A7B7F6A8B8F6A9B8F6B2B8 - CFB9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFC0C0C0C1 - C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C8C8C8 - CACACACACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1 - D1D2D2D2D2D2D2D3D3D3D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9D9D9DA - DADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E8E8E8E8E8 - E8EAEAEAEAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7B5B5B5B3B3B3B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAA - AAA9A9A9A8A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A19F9F9F9E9E9E9C9C9C9B - 9B9B9A9A9A98989897979796969695959596A4CB99B0F898AFF798B0F898AFF8 - 98AFF898AFF897AFF897AFF897AFF897AEF897AEF897AEF896AEF896AEF896AD - F896ADF895ADF895ADF895ADF895ACF895ADF795ACF894ACF894ACF894ACF894 - ABF894ABF893ABF893ABF893ABF893ABF893AAF892AAF892AAF892AAF892AAF8 - 92A9F892A9F891A9F891A9F891A9F891A8F891A8F890A8F890A8F890A8F890A8 - F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6F88EA6F88EA6F88E - A6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA5F88CA4F88CA4F88CA4F88CA4F8 - 8CA4F88BA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88AA3F88AA3F88BA3 - F88BA3F88BA3F88CA4F88CA4F88CA4F88CA4F88DA4F88DA4F88DA4F88EA5F88E - A5F88EA5F88FA6F88FA6F78FA6F790A7F791A7F791A7F792A8F793A8F793A8F7 - 93A9F794A9F794AAF795AAF796ABF796ABF797ACF798ACF798ACF799ADF79AAE - F79AADF79CAFF69BAFF69CAFF69DB0F69EB1F69FB1F6A0B2F6A0B3F6A1B3F6A2 - B4F6A3B4F6A3B5F6A4B5F6A5B6F6A6B7F6A7B8F6A8B8F6AAB9F2B7B8BCB9B9B9 - BABABABCBCBCBCBCBCBCBCBCBDBDBDBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C8C8C8C9C9C9CACACACACACACB - CBCBCCCCCCCCCCCCCECECECECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D2D2D2 - D3D3D3D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9DADADADADADADBDB - DBDCDCDCDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1E3E3E3E3 - E3E3E5E5E5E4E4E4E6E6E6E6E6E6E8E8E8E7E7E7E8E8E8E8E8E8E9E9E9EBEBEB - EBEBEBEBEBEBECECECEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4 - F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAEAEAEADADADABABABAAAAAA - A9A9A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A19F9F9F9E9E9E9C9C9C9B9B - 9B9A9A9A98989898989897979796969698A8D999B0F899B0F899B0F898B0F898 - B0F898B0F898AFF898AFF898AFF897AFF897AFF897AEF897AEF897AEF896AEF8 - 96AEF896AEF896ADF896ADF895ADF895ADF895ADF895ACF895ACF895ACF894AC - F894ACF894ACF894ABF893ABF893ABF893ABF893ABF893AAF893AAF892AAF892 - AAF892AAF892AAF892A9F891A9F891A9F891A9F891A9F891A8F890A8F890A8F8 - 90A8F890A8F890A8F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6 - F88EA6F88EA6F88DA6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA4F88CA4F88C - A4F88CA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88BA3F88BA3F88BA3F8 - 8BA3F88BA3F88DA4F88CA4F88CA4F88DA5F88DA5F88EA5F88EA6F88FA6F890A6 - F890A6F890A7F891A7F891A7F892A8F892A8F893A9F893A9F893A9F895AAF894 - AAF895AAF896ABF897ABF897ACF798ADF799ADF799ADF79AAEF79BAEF79BAFF7 - 9CAFF79DB0F79DB1F79EB1F79FB2F7A0B2F7A1B3F7A1B3F7A2B4F7A3B4F7A4B6 - F7A4B6F7A5B6F6A6B7F6A7B8F6A8B8F6A9B9F6B0B8D7B8B8B8B9B9B9BABABABB - BBBBBCBCBCBDBDBDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3 - C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9C9C9C9CACACACBCBCBCBCBCBCCCC - CCCCCCCCCFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5D5D5D6 - D6D6D6D6D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDDDDDD - DDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5 - E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEB - EBEBECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F3F3F3F2F2F2F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B8B8 - B8B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAAAAAAA9 - A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09E9E9E9C9C9C9B9B9B - 9A9A9A98989897979797979796979C99ACE69AB1F999B0F899B1F999B0F998B0 - F898B0F898AFF898B0F998AFF898AFF998AFF997AEF897AEF897AEF897AEF996 - AEF896AEF996AEF996ADF896ADF996ADF995ADF895ACF895ADF995ADF995ACF9 - 95ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993ABF993ABF993AA - F993AAF992AAF992AAF992AAF992A9F992A9F991A9F991A9F991A9F991A9F990 - A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98FA7F98FA7F98FA7F9 - 8EA6F98EA6F98EA6F98EA6F98EA6F98DA6F98DA5F98DA5F98DA5F98DA5F98DA5 - F98CA5F98CA4F98CA4F98CA4F98CA4F98BA4F98CA4F88BA4F88CA4F88CA4F88D - A5F88DA5F88DA5F88EA5F88EA5F88EA5F88FA6F88FA6F88FA6F890A7F890A6F8 - 90A7F892A8F992A8F892A8F892A8F893A9F894A9F894AAF895AAF895AAF895AA - F896ABF897ACF898ADF899ADF899ADF799ADF79AAEF79BAEF79CB0F89CB0F79E - B1F89EB1F89FB2F8A0B2F8A0B3F7A1B4F7A2B4F7A3B5F7A3B5F7A4B6F7A6B7F7 - A7B8F7A7B8F7A8B9F7A9B9F7A9BAF7B6B8C0B9B9B9BABABABBBBBBBCBCBCBDBD - BDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3C5C5C5C6C6C6C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6 - D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADBDBDBDBDBDBDEDEDEDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E0E0E0E2E2E2E2E2E2E2E2E2E3E3E3E5E5E5E5E5E5E6E6E6 - E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECECECECEDED - EDEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B9B9B9B8B8B8 - B6B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9 - A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9C9C9C9B9B9B9A - 9A9A999999989898979797979AA39AB0F39AB1F999B1F999B1F999B0F999B0F9 - 99B0F998B0F998B0F998B0F998AFF998AFF998AFF998AFF997AFF997AEF997AF - F997AFF997AEF996AEF996ADF996ADF996ADF996ADF995ADF996ADF995ADF895 - ADF995ADF995ACF994ACF994ACF994ABF994ACF993ABF994ABF993ABF993AAF9 - 93ABF993ABF993AAF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9 - F991A9F991A9F990A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98F - A7F98FA7F98EA7F98EA6F98EA6F98EA6F98EA6F98EA6F98DA5F98DA5F98DA5F9 - 8DA5F98DA5F98CA5F98CA5F98CA4F98CA5F98CA4F98DA5F98DA5F98EA5F98DA5 - F98EA6F98FA6F98EA6F98FA6F98FA7F990A7F990A7F991A7F991A8F991A8F992 - A8F993A9F893A9F893A9F894AAF894AAF895ABF895ABF895ABF897ACF897ACF8 - 98ACF898ADF899ADF89AAEF89AAEF89BAFF89CAFF89CB0F89DB0F89EB1F89EB1 - F89FB2F8A1B3F7A1B3F7A1B4F7A2B4F7A4B5F7A4B6F7A5B7F7A6B7F7A7B8F7A8 - B9F8A8B9F7AABBF8B0BADFB8B8B8B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBE - C0C0C0C0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C5C5C5C5C5C5C6C6C6C7C7C7C8C8 - C8C8C8C8CACACACACACACBCBCBCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D0 - D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8 - D9D9D9D9D9D9DBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0 - E0E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8 - E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEEEEEE - EFEFEFEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F3F3F3F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F5F5F5F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BBBBBBB9B9B9B8B8B8B6 - B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9A9 - A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D9C9C9C9A9A - 9A999999989898989898989CAA9AB0F39AB1F99AB1F99AB1F999B1F999B1F999 - B1F999B0F999B0F999B0F998B0F998B0F998AFF998AFF998AFF997AFF997AFF9 - 97AFF997AEF997AEF996AEF996AEF996AEF996ADF996ADF996ADF995ADF995AD - F995ADF995ACF994ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993 - ABF993ABF993ABF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9FA - 91A9F991A9F990A8F990A8F991A9FA90A8FA90A8FA90A8FA8FA7F98FA7F98FA7 - F98FA7F98FA7FA8EA6F98EA6F98EA6F98EA6F98EA6FA8DA5F98DA5F98DA5F98D - A5F98DA5F98CA5F98DA5F98DA5F98DA5F98DA5F98DA5F98EA6F98EA6F98EA6F9 - 8FA7F98FA6F990A7F990A7F991A8F991A8F992A8F992A9F992A9F992A9F993A9 - F994AAF994AAF995ABF995ABF996ABF996ACF997ACF998ADF999ADF998ADF99A - AEF999AEF99BAFF89BAFF89CB0F89CB0F89DB1F89EB1F89FB2F89FB2F8A1B3F8 - A1B3F8A1B4F8A3B5F8A4B6F8A4B6F8A5B7F8A6B7F8A7B8F8A8B8F8A8B9F8A9BA - F8AABBF8B5B7BFB9B9B9BABABABABABABBBBBBBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C9C9C9C9C9C9 - CACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2 - D2D3D3D3D3D3D3D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8D8DADADADADADADB - DBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E9E9E9E9E9E9E9E9 - E9EAEAEAEBEBEBECECECECECECECECECEDEDEDEEEEEEEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5 - F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BCBCBCBBBBBBBABABAB8B8B8B6B6 - B6B5B5B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8 - A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B - 9A9A9A99999998989899A0B69BB2FA9BB2FA9AB2FA9AB2FA9AB1FA9AB1FA9AB1 - FA99B1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98AFFA98AFFA97 - AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AEFA96ADFA96ADFA - 95ADFA95ADFA95ADFA95ADFA95ACFA94ACFA94ACFA94ACFA94ACFA94ABFA94AB - FA93ABFA93ABFA93ABFA93AAFA93AAFA92AAFA92AAFA92AAFA92AAFA91A9FA91 - A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90A8FA90A8FA8FA7FA - 8FA7FA8FA7FA8FA7FA8FA7FA8EA7FA8EA6FA8EA6FA8EA6FA8EA6FA8EA6FA8DA6 - FA8DA5FA8DA6F98DA6F98DA5F98EA6F98EA5F98EA6F98FA7F98FA6F98FA7F98F - A7F990A7F990A8F991A8F991A8F992A8F992A9F992A9F993A9F993A9F994ABFA - 95ABF994AAF997ACF996ACF996ACF998ADF998ADF999ADF999AEF99AAEF99AAE - F99AAFF99CB0F89DB1F99EB2F99EB1F89FB2F8A0B3F9A0B3F8A1B4F8A2B4F8A3 - B5F9A4B6F9A5B6F9A5B7F9A6B8F9A7B8F8A7B9F8A9BAF8AABAF8ABBBF8B0BAE0 - B8B8B8B9B9B9BABABABBBBBBBCBCBCBEBEBEBFBFBFC0C0C0C0C0C0C1C1C1C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9CACACACACACACBCBCBCC - CCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4 - D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D9D9D9DADADADADADADBDBDBDCDC - DCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4 - E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEA - EBEBEBECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0 - F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7BDBDBDBCBCBCBABABAB9B9B9B8B8B8B6B6B6 - B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8 - A8A7A7A7A6A6A6A5A5A5A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A - 9A9A9999999999999AA2BD9BB2FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA - 9AB1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0 - FA98AFFA98AFFA97AEFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96 - AEFA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA - 94ACFA94ABFA93ABFA93ABFA93ABFA93ABFA93AAFA92AAFA92AAFA92AAFA92AA - FA92AAFA91A9FA91A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90 - A8FA8FA8FA8FA7FA8FA7FA8FA7FA8FA7FA8FA7FA8EA6FA8EA6FA8EA6FA8EA6FA - 8EA6FA8EA6FA8EA6FA8FA6FA8EA6FA8FA7FA8FA7FA8FA7FA90A7FA91A8FA91A8 - FA91A8FA92A9FA92A8FA92A9FA93AAFA94AAFA93AAFA94AAFA94ABFA95ABF996 - ACF997ACF997ACF997ADF998ADF999AEF999AEF99AAFF99BAFF99BAFF99CB0F9 - 9DB1F99DB1F99EB2F99FB2F9A0B3F9A0B3F9A1B4F9A2B4F9A2B5F9A3B5F9A4B6 - F9A5B7F9A5B7F9A6B8F9A7B8F8A9B9F8A9BAF8AABBF8ABBBF8B4B8C7B8B8B8B9 - B9B9BBBBBBBCBCBCBDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C5C5C5C6C6C6C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCD - CDCECECECFCFCFD0D0D0D0D0D0D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D5 - D5D5D7D7D7D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDCDCDC - DDDDDDDEDEDEDFDFDFDFDFDFE1E1E1E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4 - E4E5E5E5E6E6E6E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2 - F3F3F3F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7BEBEBEBDBDBDBCBCBCBBBBBBB9B9B9B8B8B8B6B6B6B5 - B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8A8 - A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A9A - 9A9999999898989AA2BD9BB3FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA9A - B1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0FA - 98AFFA98AFFA97AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AE - FA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA94 - ACFA94ABFA93ABFA93ABFA94ABFB93ABFB93AAFA93ABFB92AAFA92AAFA92AAFB - 92AAFA92AAFB92AAFB92AAFB91A9FB91A9FA91A9FB91A9FB90A8FA90A8FA90A8 - FB90A8FB90A8FB8FA7FA8FA8FB8FA7FA8FA7FA8FA7FB8FA7FB8EA6FA8FA7FA8E - A6FA8FA7FA8FA7FA90A8FA8FA7FA90A7FA8FA7FA91A8FA91A8FA92A9FA91A9FA - 92A9FA93A9FA93A9FA93AAFA94AAFA95AAFA95ABFA95ACFA95ABF996ACF998AD - FA97ACF998ADFA98ADF999AEFA9AAEF99AAFF99BAFF99CB0F99CB0F99EB1FA9D - B1F99FB2FAA0B3FAA0B3F9A1B4F9A2B5F9A2B5F9A3B6F9A4B6F9A5B7F9A6B7F9 - A6B8F9A8B9F9A8BAF9A9BAF9AABBF9ABBBF9AFBBE8B8B8B8B9B9B9BBBBBBBCBC - BCBCBCBCBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C4C4C4C4C4C4C5C5C5C7 - C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCDCFCFCFD0D0D0 - D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8 - D8D8D8D8D9D9D9D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDF - DFDFDFDFDFE0E0E0E2E2E2E2E2E2E2E2E2E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAECECECECECECEDEDEDEDED - EDEEEEEEEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7BFBFBFBEBEBEBEBEBEBCBCBCBBBBBBBABABAB9B9B9B7B7B7B5B5 - B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8A8A8A7 - A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9E9E9E9C9C9C9C9C9C9A9A9A - 9999999999999AA2BD9CB3FB9CB3FB9BB3FB9BB3FB9BB2FB9BB2FB9BB2FB9AB2 - FB9AB2FB9AB2FB9AB1FB9AB1FB9AB1FB99B1FB99B1FB99B0FB99B0FB98B0FB98 - B0FB98B0FB98AFFB98AFFB98AFFB97AFFB97AFFB97AFFB97AEFB97AEFB96AEFB - 96AEFB96AEFB96AEFB96ADFB95ADFB95ADFB95ADFB95ADFB95ACFB95ACFB94AC - FB94ACFB94ACFB94ABFB94ABFB93ABFB93ABFB93ABFB93ABFB92AAFB92AAFB92 - AAFB92AAFB92AAFB92AAFB91A9FB91A9FB91A9FB91A9FB91A9FB90A8FB90A8FB - 90A8FB90A8FB90A8FB8FA8FB8FA7FB8FA7FB8FA7FB8FA7FB8FA7FA8FA7FA8FA7 - FA8FA7FA90A8FA91A8FA90A8FA90A8FA91A8FA92A9FA92A9FA92A9FA93AAFA94 - AAFA93AAFA94AAFA94ABFA95ABFA95ABFA95ACFA96ACFA97ACFA98ADFA98ADFA - 98ADFA99AEFA9AAFFA9AAFFA9BB0FA9BB0FA9CB0FA9DB1FA9EB1FA9EB2FA9FB3 - FAA0B3FAA1B4F9A1B4F9A2B5F9A3B5F9A3B6F9A4B6F9A5B7F9A6B8F9A7B9F9A8 - B9F9A8B9F9A9BAF9AABBF9ABBBF9B4B8C8B8B8B8BABABABBBBBBBCBCBCBDBDBD - BEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C8C8 - C8C9C9C9CACACACACACACCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1 - D1D1D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D8D8D8 - D9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEE0E0E0E0E0 - E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E7 - E7E7E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEDEDEDEDEDEDEEEEEEEEEEEE - EFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7} - end - object Bevel2: TBevel - Left = 0 - Top = 64 - Width = 500 - Height = 2 - Align = alTop - Shape = bsTopLine - end - object Bevel3: TBevel - Left = 0 - Top = 309 - Width = 500 - Height = 2 - Align = alBottom - Shape = bsTopLine - end - object lbl_Caption: TLabel - Left = 5 - Top = 72 - Width = 161 - Height = 13 - Caption = 'Select Ancestor Type for %s' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label2: TLabel - Left = 24 - Top = 92 - Width = 333 - Height = 13 - Caption = - 'Select the class to use as ancestor for your RemObjects SDK Serv' + - 'ice:' - end - object rgClassType: TRadioGroup - Left = 24 - Top = 112 - Width = 471 - Height = 132 - Anchors = [akLeft, akTop, akRight, akBottom] - Caption = ' Available Types ' - Items.Strings = ( - '1' - '2' - '3' - '4' - '5' - '6') - TabOrder = 0 - OnClick = rgClassTypeClick - end - object GroupBox1: TPanel - Left = 24 - Top = 249 - Width = 471 - Height = 55 - Anchors = [akLeft, akRight, akBottom] - BevelOuter = bvLowered - Color = clInfoBk - TabOrder = 1 - DesignSize = ( - 471 - 55) - object lbDescription: TLabel - Left = 5 - Top = 5 - Width = 461 - Height = 43 - Anchors = [akLeft, akTop, akRight, akBottom] - AutoSize = False - Caption = 'Test description goes right here...' - WordWrap = True - end - end - object Panel1: TPanel - Left = 0 - Top = 311 - Width = 500 - Height = 35 - Align = alBottom - BevelOuter = bvNone - TabOrder = 2 - DesignSize = ( - 500 - 35) - object btn_Ok: TBitBtn - Left = 341 - Top = 5 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 0 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object Button2: TBitBtn - Left = 420 - Top = 5 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.pas deleted file mode 100644 index 4ef76ae..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fROServerClassForm.pas +++ /dev/null @@ -1,102 +0,0 @@ -unit fROServerClassForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ExtCtrls, Buttons; - -type - TROServerClassForm = class(TForm) - rgClassType: TRadioGroup; - GroupBox1: TPanel; - lbDescription: TLabel; - Image2: TImage; - Bevel2: TBevel; - Panel1: TPanel; - btn_Ok: TBitBtn; - Button2: TBitBtn; - Bevel3: TBevel; - lbl_Caption: TLabel; - Label2: TLabel; - procedure FormCreate(Sender: TObject); - procedure rgClassTypeClick(Sender: TObject); - private - function GetServerClassName : string; - function GetRequiredUnits: string; - - public - property ServerClassName : string read GetServerClassName; - property RequiredUnits : string read GetRequiredUnits; - end; - -var - ROServerClassForm: TROServerClassForm; - -function SelectROServerClassType(const ServiceName : string; out aServerClassname : string; out someRequiredUnits : string) : boolean; - -implementation - -uses uRODLGenTools, uROServer, uRORemoteDataModule; - -{$R *.dfm} - -function SelectROServerClassType(const ServiceName : string; out aServerClassname : string; out someRequiredUnits : string) : boolean; -begin - with TROServerClassForm.Create(NIL) do try - Caption := Format(Caption, [ServiceName]); - lbl_Caption.Caption := Format(lbl_Caption.Caption, [ServiceName]); - - result := (ShowModal=mrOK); - aServerClassname := ServerClassName; - someRequiredUnits := RequiredUnits; - finally - Free; - end; -end; - -procedure TROServerClassForm.FormCreate(Sender: TObject); -var i : integer; - s : string; -begin - rgClassType.Items.Clear; - - rgClassType.Items.Add('&Simple object'); - for i := (GetRODataModuleClassCount-1) downto 0 do begin - s := GetRODataModuleClass(i).Alias; - //if (i=0) then s := s+' (Reccommended)'; - if GetRODataModuleClass(i).ClassType = TRORemoteDataModule then - s := s+' (recommended)'; - rgClassType.Items.Add(s); - end; - - rgClassType.ItemIndex := 1; { we've added one additional item } - - //Height := (225*(GetRODataModuleClassCount+1)) div 3 - ClientHeight := 250 + (GetRODataModuleClassCount()*25); -end; - -function TROServerClassForm.GetRequiredUnits: string; -begin - if (rgClassType.ItemIndex=0) - then result := '' - else result := GetRODataModuleClass(GetRODataModuleClassCount-rgClassType.ItemIndex).RequiredUnits -end; - -function TROServerClassForm.GetServerClassName : string; -begin - if (rgClassType.ItemIndex=0) - then result := TRORemotable.ClassName - else result := GetRODataModuleClass(GetRODataModuleClassCount-rgClassType.ItemIndex).ClassType.ClassName -end; - -procedure TROServerClassForm.rgClassTypeClick(Sender: TObject); -begin - if (rgClassType.ItemIndex=0) then - lbDescription.Caption := 'Non-visual Delphi object. Recommended for services that do not require additional components '+ - 'and don''t need to provide the design time features of a data module.' - else - lbDescription.Caption := GetRODataModuleClass(GetRODataModuleClassCount-rgClassType.ItemIndex).Description; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.dfm deleted file mode 100644 index 6774e30..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.dfm +++ /dev/null @@ -1,3449 +0,0 @@ -object ServerProjectOptions: TServerProjectOptions - Left = 338 - Top = 184 - ActiveControl = ePrjName - BorderIcons = [biSystemMenu] - BorderStyle = bsDialog - Caption = 'RemObjects SDK Server - Advanced Project Options' - ClientHeight = 317 - ClientWidth = 500 - Color = clBtnFace - Constraints.MinHeight = 238 - Constraints.MinWidth = 300 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnCloseQuery = FormCloseQuery - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 128 - Width = 105 - Height = 13 - Caption = 'Service Library Name:' - end - object Label2: TLabel - Left = 8 - Top = 154 - Width = 69 - Height = 13 - Caption = 'Service Name:' - end - object Label3: TLabel - Left = 8 - Top = 102 - Width = 68 - Height = 13 - Caption = 'Project Name:' - end - object Label5: TLabel - Left = 8 - Top = 244 - Width = 71 - Height = 13 - Caption = 'Project Folder:' - end - object Bevel1: TBevel - Left = 4 - Top = 277 - Width = 494 - Height = 2 - Anchors = [akLeft, akRight, akBottom] - end - object Label4: TLabel - Left = 8 - Top = 76 - Width = 91 - Height = 13 - Caption = 'Template Location:' - end - object Label6: TLabel - Left = 8 - Top = 213 - Width = 74 - Height = 13 - Caption = 'Message Class:' - end - object Label7: TLabel - Left = 8 - Top = 188 - Width = 64 - Height = 13 - Caption = 'Server Class:' - end - object Label8: TLabel - Left = 119 - Top = 188 - Width = 196 - Height = 13 - Caption = 'Not available in this kind of server' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object Image2: TImage - Left = 0 - Top = 0 - Width = 500 - Height = 64 - Align = alTop - AutoSize = True - Picture.Data = { - 07544269746D617036770100424D36770100000000003600000028000000F401 - 000040000000010018000000000000770100C01E0000C01E0000000000000000 - 0000858585858585858585858585858585858585858585858585858585858585 - 8585858484848484848484848484848484848484848484848484848484848484 - 8484848483838383838383838383838383838383838383838383838383838383 - 8383838383838383838383828282828282828282828282828282828282828282 - 8282828282828282828282828181818181818181818181818181818181818181 - 8181818181818181818181818181818180808081818181818180808080808080 - 80808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F - 7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E - 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D - 7C7C7C7C7C7C7B7B7B7A7A7A7979797979797878787878787777777676767575 - 757575757474747575757474747474747474746A7CC3677FDD677FDD6880DC69 - 80DD6981DD6A81DC6A81DC6B82DC6B82DC6C82DC6C83DC6E83D6808495878787 - 8B8B8B8D8D8D8F8F8F9090909191919292929292929292929292929191919191 - 919090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F90909091919191 - 9191929292929292929292949494949494959595969696969696979797979797 - 9898989A9A9A9A9A9A9A9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9F9F9FA0A0 - A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A5A5A5A5A5A5A6A6A6A7A7A7A8A8A8A8 - A8A8A9A9A9A9A9A9ABABABACACACACACACAEAEAEAFAFAFB0B0B0B2B2B2B3B3B3 - B5B5B5B6B6B6B7B7B7B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBEBFBFBFBFBF - BFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C4 - C4C4C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C8C8C8C9C9C9CACACA - CBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1D1 - D1D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4 - D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8 - D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECEDEDEDECECECEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78686 - 8685858585858585858585858585858585858585858585858585858585858585 - 8585848484848484848484848484848484848484848484848484848484848484 - 8484848383838383838383838383838383838383838383838383838383838383 - 8383838383838383838382828282828283838382828282828282828282828282 - 8282828282828282828282818181818181818181818181818181818181818181 - 8181818181818181818181818181818181818181818080808080808080808080 - 808080808080808080808080808080808080808080807F7F7F7F7F7F7F7F7F80 - 80808080807F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8080808080807F7F7F - 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7E7E - 7E7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7C - 7C7C7C7C7C7B7B7B7A7A7A7A7A7A797979797979787878777777767676767676 - 7575757676767676767575757575757377896880DD6880DD6981DD6981DD6A81 - DD6A82DD6B82DD6A82DD6C83DD6D83DD6D83DC6E84DC7084D77F87A88C8C8C8E - 8E8E919191919191939393939393949494949595959696969797959797969898 - 9698989596969495959394949293939191919191919191919292929292929393 - 939393939393939494949595959595959797979797979898989898989999999A - 9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA0A0A0A0A0A0A1A1A1 - A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAA - AAABABABACACACADADADADADADAEAEAEAFAFAFB1B1B1B1B2BAB0B3C1AFB3C7B0 - B4C9B2B6CAB2B6CAB4B7CAB5B8CAB8BAC6BBBCC3BFBFC0C0C0C0C0C0C0C1C1C1 - C1C1C1C3C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6C5C5C5C6C6 - C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9C9C9C9CACACACCCCCCCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D3D3D3D3D3D3 - D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADADAD9D9D9DADADADADADADADADADADA - DADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDBDBDBDCDCDCDCDCDCDCDCDCDD - DDDDDCDCDCDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7868686868686 - 8686868686868686868585858585858686868686868686868585858585858585 - 8585858585858585858585858585858584848485858585858584848484848484 - 8484848484848484848484848484848484848484848484848484838383838383 - 8383838383838383838383838383838383838383838383838383838282828282 - 8282828282828282828282828282828282828282828282828282828281818181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181818080808080808080808080808080808080808080 - 808080807F7F7F8080808080808080807F7F7F8080808080808080807F7F7F7F - 7F7F7F7F7F7F7F7F8080808080807F7F7F8080808080808080808080807F7F7F - 8080808080807F7F7F7F7F7F7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7B7B7B7B7B7B7A7A7A79797979797979797978787877777777777776 - 76767676767676767676767676766E7CB06981DE6980DD6A82DE6B82DD6B82DD - 6B82DD6C83DD6C83DE6D84DC6E84DD6E85DD6F85DD6F85DC8089AF8F8F8F9191 - 919393939393939494949797979899999A9C9C9B9E9E9EA1A19FA3A39FA3A39E - A2A29C9F9F999B9B969898949595929393919191919191929292939393939393 - 9494949595959595959696969797979797979898989898989A9A9A9B9B9B9B9B - 9B9C9C9C9C9C9C9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A3A3A3A3 - A3A3A4A4A4A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9ACACAC - ACACACADADADAEAEAEAEAFB3ABAFC3AAAFCDABB1D0ACB2CFAEB3CFAEB3CFB0B5 - D0B1B6CFB2B6CFB2B7CFB3B8CFB4B8CFB6BAD0BABCCBBEBFC5C1C1C1C2C2C2C2 - C2C2C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9C8C8C8CACACACACACACACACACCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D1D1D1D3D3D3D3D3D3D3D3D3D3 - D3D3D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6 - D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADA - DADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3 - E3E3E3E3E2E2E2E3E3E3E4E4E4E3E3E3E4E4E4E3E3E3E3E3E3E5E5E5E4E4E4E4 - E4E4E5E5E5E4E4E4E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECEC - ECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7 - F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F787878787878787878786 - 8686868686868686868686868686868686868686868686858585858585858585 - 8585858585858585858585858585858585858585858585858484848484848484 - 8484848484848484848484848484848484848484848484848483838383838383 - 8383838383838383838383838383838383838383838383838383838383828282 - 8282828282828282828282828282828282828282828282828282828181818181 - 8181818182828282828281818181818181818181818181818181818181818181 - 8181818181818181828282808080808080808080808080808080808080808080 - 8080808080808080808080808080808080808080808080808080808080808181 - 8181818180808080808081818181818181818181818181818181818181818181 - 81818080808080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C7C7C - 7C7C7C7B7B7B7B7B7B7A7A7A7979797979797878787777777878787777777777 - 7776767676767677777777787E6A80D76A81DD6B82DE6B83DD6B83DD6C83DD6D - 84DE6E84DD6E84DD6E84DD6F85DD6F85DD7086DC7086DC7C8ABF919191939393 - 9494949697979899999C9E9EA0A4A4A5ABABA9B1B1ACB5B5ACB5B5ACB4B4A7AF - AFA3A9A99EA3A39A9D9D96989895969694949493939394949494949495959595 - 95959696969797979797979898989999999999999A9A9A9B9B9B9C9C9C9C9C9C - 9D9D9D9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A2A2A2A3A3A3A4A4A4A4A4 - A4A5A5A5A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAAAAAAAACACACADADADAD - AEB2AAAFC4A9AFD0AAB0D0AAB0D0ACB2D0AEB3D0AEB3D0AFB4D0B0B5D0B2B7D0 - B3B7D0B3B8D0B4B8D0B5B9D0B6BAD0B7BAD0B7BBD0BABDCEBFC0C5C2C2C2C3C3 - C3C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7 - C7C7C9C9C9CACACACACACACACACACBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D3D3D4D4D4D4D4 - D4D4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8 - D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADA - DADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78787878787878787878787878686 - 8686868686868686868686868686868686868686868686868686868686868685 - 8585858585858585858585858585858585858585858585858585858585858585 - 8484848484848484848585858585858484848484848484848484848484848484 - 8484848484848484848483838384848483838383838383838383838383838383 - 8383838383838383828282838383838383828282828282828282828282828282 - 8282828383838282828282828282828282828181818181818181818282828181 - 8181818181818181818181818181818181818181818181818181818181818181 - 8181818181818181818181808080818181818181828282828282818181828282 - 8282828282828282828282828282828282828282828282828282828282828282 - 828181818181818080808080807F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A797979787878787878777777777777 - 787878777777787878727CA56B82DE6B83DE6C83DE6C83DE6C84DE6E84DE6E84 - DD6E85DE6F85DD6F85DD7086DD7086DD7086DC7287DC7889CE91929894949497 - 97979A9C9C9FA3A3A6ACACAFB8B8B5C0C0BAC7C7BCCACABBC9C9B7C3C3B0BBBB - A9B1B1A2A7A79B9E9E9698989494949393939494949595959595959595959696 - 969797979797979898989999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9D9D9D9F - 9F9F9F9F9F9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5 - A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAABABABACACACAAADBDA8AECEA8AF - D0AAB0D0AAB0D0ABB1D0ADB3D0AEB3D0AEB4D0AFB4D0B1B6D1B2B7D0B3B7D0B3 - B8D0B4B9D0B5B9D0B7BBD1B8BCD1B8BCD1BABDD0BBBED0BEC0CDC4C4C5C5C5C5 - C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8CACA - CACACACACBCBCBCBCBCBCBCBCBCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5 - D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D6D6D6D7D7 - D7D8D8D8D8D8D8D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADA - DADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDC - DCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECEDEDEDECECECEDEDEDEDEDEDECECECEDEDEDED - EDEDEDEDEDECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7888888888888878787878787888888878787 - 8787878787878787878787878787878787878787878686868686868686868686 - 8686868686868686868686868686868686868686868685858585858585858585 - 8585858585858585858585858585858585858585858585848484848484848484 - 8484848484848484848484848484848484848484848484848383838383838383 - 8383838383838383838383838383838383838383838383838382828282828283 - 8383838383838383828282828282828282828282828282828282828282828282 - 8282828282828282828181818181818282828181818181818181818181818181 - 8181818181818182828281818182828282828283838382828282828282828283 - 8383838383848484848484838383838383838383848484838383838383838383 - 8383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D7C7C - 7C7C7C7C7B7B7B7A7A7A7A7A7A79797979797979797978787878787878787878 - 78787878787979796D82D26C83DE6C84DE6C83DE6C84DE6D84DE6F85DE6F85DE - 7086DD7086DD7187DD7187DD7287DD7287DC7388DD778AD38D91A19697979B9D - 9DA3A7A7ACB4B44F446B41335E41335E41335E41335E5A52769095A6B7C4C4AC - B5B5A2A8A89B9E9E979898959595959595959595969696979797979797989898 - 9999999999999A9A9A9A9A9A9C9C9C9C9C9C9D9D9D9E9E9E9E9E9E9F9F9FA0A0 - A0A0A0A0A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A8 - A8A8A8A8A8A9A9A9AAAAAAABABABABABABA8ADC3A7AED2A7AED1A8AFD0AAB1D1 - AAB1D0ABB1D0ADB3D0AEB4D1AFB5D1B0B5D1B1B6D1B3B8D1B3B8D1B5B9D1B5B9 - D1B6BAD0B7BBD1B8BCD1B9BDD0BABDD0BBBED0BBBED0BEC0CFC4C4C7C6C6C6C5 - C5C5C6C6C6C7C7C7C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C9C9C9CACACACACACA - CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1 - D1D1D1D1D2D2D2D2D2D2D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D5D5D5D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9DADA - DADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDEDEDEDDDDDDDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFDEDEDEDEDE - DEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2 - E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECEC - ECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F788888888888888888888888888888888888888888888 - 8888888888878787878787878787878787878787878787878787878787868686 - 8686868787878787878787878686868686868686868686868686868686868686 - 8686868686868686868686868685858585858585858585858585858585858585 - 8585858585848484858585848484848484848484848484838383848484838383 - 8383838484848484848484848484848383838484848383838383838383838383 - 8383838383838383838383838382828282828283838382828283838382828282 - 8282828282828282818181828282828282818181818181828282828282828282 - 8181818282828383838282828383838383838383838484848484848484848484 - 8484848485858585858585858585858585858585858585858584848484848483 - 83838383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D - 7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797979797979797878787979 - 797A7A7A777D936C84DF6D84DF6D85DE6E85DE6E85DE6F85DE7086DE7087DE71 - 87DE7187DD7187DD7388DD7388DE7489DD7489DD778AD88C93AD9C9E9EA4A9A9 - AEB7B73F32603F32603F32603F32603F32603F32603F3260716F8DB9C6C6ABB3 - B3A1A6A69A9C9C9797979696969696969797979898989898989898989999999A - 9A9A9A9A9A9A9A9A9C9C9C9D9D9D9D9D9D9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0 - A1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A8A8A8A9A9 - A9A9A9A9AAAAAAAAAAADA6ACCAA6AED2A7AED2A9B0D2A9B0D1AAB1D1ABB1D1AC - B2D1AEB3D1AEB4D1AFB5D1B0B5D1B2B7D2B3B8D1B4B9D1B4B9D1B6BAD1B7BBD1 - B7BBD1B9BDD2BABED1BBBED1BCBFD1BDC0D2BEC1D2BFC2D1C5C6C9C7C7C7C7C7 - C7C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9CACACAC9C9C9CBCBCBCBCBCBCCCCCCCC - CCCCCDCDCDCECECECECECECFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D3D3D3 - D3D3D3D4D4D4D5D5D5D5D5D5D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6 - D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8 - D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADA - DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2E2E3 - E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEC - ECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78989898989898989898989898888888989898888888888888888 - 8888888888888888888888888888888888888887878787878787878787878786 - 8686878787878787878787878787868686878787868686868686878787868686 - 8686868686868686868686868686868686868585858585858585858585858686 - 8685858585858585858585858585858584848484848484848484848484848484 - 8484848484848484848484848484838383848484838383838383838383838383 - 8383838383838383838383838383838383838383838383838383838383838282 - 8282828283838382828282828282828282828283838382828282828282828282 - 8282838383848484838383848484848484858585858585858585868686868686 - 8686868787878787878787878787878787878787878686868585858585858585 - 858383838383838282828181818080807F7F7F7F7F7F7F7F7F7E7E7E7D7D7D7C - 7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A - 7A7A7A7181BF6D84DF6E85DF6F86DF6F85DE7086DF7087DF7187DE7188DE7288 - DE7288DE7389DE7489DD7489DD748ADD758ADD788EDE8E9ABAA1A6A6ACB4B43E - 30633E30633E30633E30633E30633E30633E30633E3063898DA3B5C0C0A7AEAE - 9EA1A19899999696969696969797979898989999999999999A9A9A9A9A9A9B9B - 9B9B9B9B9D9D9D9E9E9E9E9E9E9E9E9EA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3 - A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAA - ABABABA7ACC6A6ADD2A7AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2ADB3D2AFB4 - D2AFB5D2B0B6D2B2B7D2B3B8D2B3B8D2B5BAD2B5BAD1B7BBD2B7BBD1B8BCD2B9 - BDD2BABED1BBBED1BCBFD1BDC1D2BEC1D2BFC2D2C0C3D1C6C6C8C7C7C7C7C7C7 - C9C9C9C8C8C8C9C9C9C9C9C9CACACACACACACBCBCBCCCCCCCCCCCCCCCCCCCDCD - CDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5 - D5D5D5D5D5D5D5D5D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDC - DCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDE - DEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7898989898989898989898989898989898989898989898989888888898989 - 8989898888888888888888888888888888888888888888888888888787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686868686868686868686858585858585868686868686 - 8686868585858585858585858585858585858585858484848484848585858585 - 8585858584848484848484848484848484848484848484848484848484848484 - 8484848484838383838383848484838383838383838383838383838383838383 - 8383838383838383838383838383838282828383838383838383838383838484 - 8484848485858585858585858586868686868687878788888888888889898988 - 8888898989898989898989898989888888888888888888878787878787868686 - 8585858484848383838181818080807F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7C7C - 7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7979797A7A7A7A7A7A7A7A7A7A - 7D886E85DF6E85DF6F86DF7086DE7086DF7087DF7188DE7288DE7288DE7389DE - 7389DE758ADE758BDE768BDD768BDD7A8EDE8095E08F9FCAA6ADAD7D7D94B2BD - C1C5D5D5B3C1CB58517D3C2F653C2F653C2F65453A6DBECCCCAEB7B7A2A6A69B - 9D9D9797979898989898989898989999999A9A9A9A9A9A9B9B9B9B9B9B9D9D9D - 9D9D9D9E9E9E9F9F9F9F9F9FA1A1A1A0A0A0A2A2A2A2A2A2A3A3A3A2A2A2A4A4 - A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A9A9A9A9A9A9AAAAAAA7ABC1A6 - ADD3A6AED2A8AFD3A9B0D3AAB1D2AAB1D2ABB2D2ACB2D2AEB4D3AFB5D2B0B6D2 - B1B6D2B2B7D2B3B9D3B4B9D2B5BAD2B6BAD2B7BBD2B8BCD2B9BDD3BABED3BBBF - D2BCBFD2BDC0D2BDC1D2BFC2D3C0C3D3C1C3D3C3C5D1C7C8C9C8C8C8CACACAC9 - C9C9CACACACACACACBCBCBCBCBCBCCCCCCCCCCCCCDCDCDCDCDCDCECECECFCFCF - CFCFCFD0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5 - D5D5D5D5D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 - D7D7D7D7D7D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 - D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2 - E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9 - E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECEC - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78A8A - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8989898989898A8A8A89898989898989 - 8989888888888888888888898989888888888888888888888888878787888888 - 8888888888888888888888888888888787878787878787878787878787878787 - 8787878787878787878787878787878787878786868686868687878786868686 - 8686868686868686868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848585858585858484848484848484848484 - 8484848484848484848484848484848484848484848484848484848483838384 - 8484848484838383838383838383838383838383838383848484858585858585 - 8585858686868686868787878888888888888A8A8A8989898A8A8A8A8A8A8A8A - 8A8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A89898988888888888887878786 - 86868484848383838181818181818080807F7F7F7F7F7F7E7E7E7D7D7D7D7D7D - 7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7A7A7A7B7B7B7B7B7B7B7B7B7681 - AE6F86DF7086DF7187DF7188DF7288DF7288DF7289DF7389DF7489DE748ADE75 - 8BDE768BDE778CDE778CDE7A8EDF7E93E08499E199A3B8A7AEAEAEB7B7B8C4C4 - C4D4D4C6D9DC4E45773B2E673B2E673B2E6799A1B2B4BFBFA6ACAC9EA0A09999 - 999898989898989999999999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9E9E9E9E - 9E9E9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5 - A5A5A5A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9AAAAAAA9ABB5A5ADD4A6ADD3A7AF - D3A8AFD3AAB1D4AAB1D3ABB2D3ACB3D3ADB3D3AFB5D3AFB5D3B1B7D3B2B7D3B3 - B8D3B4B9D3B5BAD3B6BBD3B7BBD3B8BCD3B8BDD3B9BDD3BABED3BCBFD3BDC0D3 - BDC0D2BEC1D3BFC2D3C1C4D4C1C3D3C2C4D3C5C6CEC9C9C9C9C9C9C9C9C9CACA - CACACACACACACACCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCECECECFCFCFD0D0D0D0 - D0D0D1D1D1D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6 - D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADAD9D9D9DA - DADADBDBDBDADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDD - DDDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDF - DFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E2E2 - E2E3E3E3E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B - 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A - 8A89898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888898989888888888888888888888888888888 - 8888888888888888888787878787878787878787878787878787878787878787 - 8787878787878787878786868686868686868685858586868686868686868686 - 8686858585858585868686858585858585858585858585858585858585858585 - 8585858585858585858585858484848484848484848484848484848484848484 - 8484848483838384848483838383838384848484848485858586868685858587 - 87878787878787878989898A8A8A8B8B8B8B8B8B8B8B8B8C8C8C8D8D8D8C8C8C - 8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8A8A8A8989898888888686 - 868585858383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7C - 7C7C7C7C7C7C7C7C7B7B7B7C7C7C7B7B7B7B7B7B7B7B7B7C7C7C7B7F897087E0 - 7087E07187DF7288DF7389E07389E07389DF748ADF7489DE758ADF768BDE768B - DE778CDF778CDE798EDE7C91DF7F94E0939AA79DA1A1A1A7A7AAB2B2B5C1C1C3 - D4D4979FB6392D69392D69392D698184A2B9C5C5AAB1B19FA2A29A9B9B989898 - 9999999A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9F9F9F9F9F9FA0A0 - A0A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A5A5A5A6A6A6A6A6A6A7 - A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAA6ADD0A6AED4A6AED3A8B0D4A9B0D4 - AAB1D4AAB2D4ABB2D3ACB3D3AEB4D3AFB5D3B0B6D3B1B7D3B2B7D3B3B8D3B3B9 - D3B5BAD3B6BBD3B8BCD3B8BCD3B9BDD3BABED4BBBFD4BCBFD3BDC1D3BDC1D3BF - C2D3C0C3D4C1C4D4C2C4D4C2C5D4C3C6D4C8C8CBCACACACBCBCBCBCBCBCBCBCB - CBCBCBCCCCCCCDCDCDCECECECECECECECECED0D0D0D0D0D0D0D0D0D1D1D1D2D2 - D2D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4D5D5D5D6D6D6D6D6D6D6D6D6D7D7D7D7 - D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9 - D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADADADADADADADADADBDBDBDBDB - DBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDDDDDDDEDEDE - DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDFDFE0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E4E4E4E5E5 - E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78B8B8B8B8B8B8B8B8B8B - 8B8B8B8B8B8A8A8A8B8B8B8B8B8B8B8B8B8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A - 8989898A8A8A8989898989898989898989898989898989898989898989898989 - 8989898989898989898989898989898989898989898989898988888888888888 - 8888888888888888888888888888888888888888888888888888888888888888 - 8787878888888888888888888787878787878787878787878686868686868686 - 8686868686868686868686868686868686868685858585858585858585858585 - 8585858585858585858585848484848484848484848484848484848484848484 - 8484848383838484848484848484848484848585858686868686868787878888 - 888989898A8A8A8A8A8A8C8C8C8D8D8D8D8D8D8E8E8E8E8E8E8F8F8F8F8F8F8F - 8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8D8E8E8B8C8C8A8B8B888888 - 8686868383838282828282828181818080807F7F7F7E7E7E7E7E7E7D7D7D7D7D - 7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7C7C7C7C7C7C7583BB7188E07187E072 - 88E07289E07389E0748AE0748AE0748AE0758ADF758ADF768CDF778CDF778CDF - 788DDE798DDE7A8FDE7D91DF939494949696989A9A9FA4A4AAB2B2BAC7C7C2D2 - D6382C6C382C6C382C6C5D5989BCCACAACB4B4A2A5A59C9D9D9999999A9A9A9A - 9A9A9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9F9F9FA2A2A2A2A2A2A1A1A1 - A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A6A6A6A6A6A6A7A7A7A8A8 - A8A8A8A8A9A9A9AAAAAAA9ACBBA6AED5A6AED5A7AFD4A8B0D4A9B0D4AAB2D5AB - B2D4ADB4D4AEB4D4AFB5D4AFB5D4B1B7D4B2B8D4B3B8D4B3B9D4B5BAD5B7BCD4 - B8BCD4B8BCD4B9BED4B9BED4BABED4BDC0D4BDC1D4BEC2D4BFC2D4C0C3D4C1C4 - D4C2C5D5C4C7D5C3C6D5C4C7D5C6C9D3CACACACACACACBCBCBCBCBCBCBCBCBCC - CCCCCDCDCDCECECECECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D2D2D2 - D2D2D2D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D7D7D7D7D7D7D8D8D8D8D8D8D8D8 - D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADA - DADADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDBDBDBDB - DBDBDBDBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDF - DFDFDFDFDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0 - E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 - E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8C8C8C8C8C8C8C8C8C8B8B - 8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8B8B8B8B - 8C8C8C8D8D8C8D8D8C8D8D8C8D8D8B8C8C8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A - 8A8A8A8A8A8A8989898B8B8B8B8C8C8B8B8B8C8D8D8D8E8E8C8D8D8C8D8D8C8D - 8D8B8C8C8B8B8B8A8A8A8A8A8A8B8B8B8A8B8B8B8C8C8C8E8E8E8F8F8E8F8F8F - 91918F91918E90908E8F8F8D8E8E8B8D8D898A8A888989888888878787878787 - 8686868888888989898889898889898889898888888788888787878686868686 - 8685858586868686878787888887888887888887888886878785858584848484 - 8484848484848484858585868686878888888989898A8A8A8A8A898A8A8B8B8B - 8B8B8B8B8B8B8D8D8D8E8E8E8F8F8F9090909090909191919292929292929394 - 949495959495959496969596969698989598989496969295959092928D8F8F8A - 8B8B8889898586868384848181818080808080807F7F7F7E7E7E7E7E7E7C7C7C - 7C7C7C7C7C7C7C7C7C7C7D7D7C7D7D7983A9738BE1748BE1748BE1758BE1758D - E1768DE1778DE17990E17A90E17C92E17C92E17D93E27D93E17C91E07C90E07B - 90E07C90DF7C8FDA909090929292939393999B9BA3A9A9B2BDBDC5D5D5362A6E - 362A6E362A6E5C588BBECCCCAFB7B7A3A7A79C9D9D9B9B9B9B9B9B9A9A9A9B9B - 9B9D9D9D9E9F9F9FA0A0A1A2A2A2A4A4A5A6A6A6A8A8A6A8A8A7A8A8A6A7A7A6 - A7A7A6A7A7A5A6A6A6A6A6A5A5A5A6A6A6A6A6A6A7A7A7A8A8A8A8A8A8A9A9A9 - AAAAAAABABABA7B0D2A8B2D7AAB2D7ACB4D7AEB6D9AEB7D9AFB8D9B1B8D7B1B8 - D7B1B8D6B0B7D6B2B8D5B2B8D5B4B9D5B4B9D5B5BAD5B6BBD5B8BDD5BABED5BA - C0D6BBC1D6BCC1D6BEC2D7BFC2D5BEC2D5BFC3D5C0C3D5C2C6D6C4C8D7C5C9D8 - C6CAD8C8CCD8C8CCD8C8CBD8CCCDCFCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCECE - CECFCFCFCFCFCFCFCFCFD0D0D0D1D1D1D2D2D2D2D2D2D3D3D3D3D3D3D3D3D3D5 - D5D5D6D6D6D7D7D7D8D9D9D9DADAD9DADAD9DADADADBDBDADBDBDADADAD9DADA - DADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9DADADADADBDBDBDBDBDBDBDBDBDB - DBDCDCDCDCDDDDDCDDDDDCDDDDDCDCDCDCDCDCDDDDDDDDDDDDDCDDDDDCDCDCDD - DDDDDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDE - DEDEDEDEDEDEDFDFDFDFDFDFDEDFDFDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFDF - DFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3 - E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F78C8C8C8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C - 8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8E8F8F9092929295 - 959396969396969194949092928D8E8E8C8D8D8B8B8B8A8A8A8A8A8A8A8A8A8A - 8A8A8B8C8C8C8D8D8F91919294949497979498989498989395959093938E9090 - 8C8D8D8C8C8C8C8D8D8D8F8F909292939595969A9A989D9D9AA0A09BA1A19BA1 - A19AA0A0999E9E969A9A9396969093938E8F8F8B8C8C8A8A8A898A8A8A8B8B8A - 8C8C8D8F8F8E91918F92928F91918C8F8F8A8C8C888989878787878787878888 - 898A8A8B8D8D8C8E8E8D90908D90908C8F8F8A8C8C8889898586868585858585 - 858687878889898A8C8C8C8F8F8D90908F91918E90908D8F8F8C8D8D8C8C8C8D - 8D8D8E8E8E909090919191929292939393949494969696979898999B9B9C9E9E - 9EA1A1A0A4A4A1A6A6A2A7A7A2A8A8A2A8A8A0A6A69DA3A39AA0A0959A9A9094 - 948D9090898B8B8687878383838181818080807F7F7F7E7E7E7E7E7E7D7D7D7D - 7D7D7C7D7D7E7E7E7E86A0778FE37B93E37C94E47C95E47C94E47C94E37D95E4 - 8097E48299E4859DE5889FE589A2E689A1E5899FE5879DE4849AE28297E17F95 - E18393CC919191919191919191989999A1A6A6B0B9B9C2D1D15C588D35297035 - 29705C588DC0CECEB0B8B8A4A8A89D9E9E9A9A9A9B9B9B9C9C9C9E9F9FA1A2A2 - A3A5A5A6A9A9A9ADADACB0B0AEB3B3AFB3B3B0B4B4B0B4B4AFB3B3ADB0B0ACAF - AFAAACACA9AAAAA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A9A9A9AAAAAAACACACAE - B0B8ABB5DAAEB9DBB1BBDCB3BDDCB5C0DDB7C2DEB7C1DDB7C0DCB6BFDBB5BDD9 - B3BBD8B3BAD7B4BAD6B4BAD5B5BAD5B6BCD6BABFD7BCC2D8BFC4DAC0C7DBC1C8 - DBC2C8DBC3C9DBC3C7D9C2C7D8C2C7D8C4C8D8C6CAD9C9CEDBCBD0DDCCD2DECE - D4DFCFD4DFD0D4DED1D4DAD1D3D3CFD0D0CFD0D0CFD0D0CECECECECECECFCFCF - CFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D3D3D3D3D4D4D5D5D5D6D6D6D8D9 - D9D9DBDBDBDDDDDCDEDEDEDFDFDFE1E1DFE1E1DEE0E0DEE0E0DDDFDFDDDEDEDC - DDDDDBDCDCDBDBDBDADBDBDADBDBDCDCDCDCDDDDDDDEDEDEDFDFDEE0E0DEDFDF - DFE0E0DFE0E0DFE0E0DFE0E0DFE0E0DEDFDFDFDFDFDEDFDFDDDEDEDEDEDEDDDE - DEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDFDFDFDFDFDFE0E0E0E1E1E0 - E1E1E1E2E2E1E2E2E0E1E1E0E0E0DFE0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1 - E2E2E2E2E3E3E3E3E3E3E4E4E2E3E3E2E3E3E2E3E3E2E2E2E1E1E1E1E1E1E1E1 - E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F78D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C - 8C8C8D8D8D8D8D8D8C8C8C8C8C8C8D8D8D8F9191929595979A9A9A9F9F9CA2A2 - 9CA2A29A9F9F969A9A9194948E90908C8C8C8B8B8B8B8B8B8B8B8B8C8D8D8E90 - 90929595969A9A9CA1A19FA5A59FA6A69FA6A69DA2A2989C9C94969691939391 - 92929295959699999B9F9FA0A6A6A3ABABA7B1B1AAB4B4ABB6B6ABB7B7AAB5B5 - A8B2B2A5AEAE9FA7A79AA0A09599998F92928C8E8E8B8D8D8D8E8E9092929498 - 98989D9D989E9E979D9D9498989093938C8E8E888989888989898A8A8D8F8F90 - 9494949999979D9D969C9C949A9A9094948C8E8E898A8A858686858686888A8A - 8C8F8F919595959B9B969C9C969C9C9599999295959091918E8F8F8E8E8E8F8F - 8F9090909292929393939596969899999C9D9D9FA2A2A3A8A8A7ADADABB2B2AF - B8B8B1BBBBB3BEBEB4BFBFB4C0C0B2BEBEAFBABAABB5B5A6B0B09FA7A7999F9F - 9297978D9191898B8B8586868182828080807F7F7F7E7E7E7E7E7E7D7D7D7F7F - 7F7F84947A91DE7F97E6859DE788A1E789A2E78AA3E789A3E78AA3E78EA7E892 - ABE996B0EA99B4EB9CB6EB9CB5EB9AB3EA97AFE991A8E78DA3E5879DE48999CF - 939494929393929292969898A0A4A4AEB7B7C0CECE5A57903328733328735A57 - 8FC0CECEB1B9B9A4A8A89FA0A09C9C9C9D9E9E9FA0A0A3A5A5A7ABABABB0B0B1 - B7B7B5BCBCB8C0C0BBC4C4BCC5C5BCC5C5BDC5C5BAC2C2B7BEBEB4B9B9B1B5B5 - AEB1B1AAACACA9A9A9A8A8A8A8A8A8A9A9A9ABABABACADADB0B2B2B1B8CCB3BE - DFB7C4E1BBC8E2BFCCE4C1CEE5C3D0E6C3CFE5C1CDE3BFC9E1BBC5DEB8C1DBB6 - BED9B6BCD8B6BCD7B7BDD7BAC0D9BEC4DBC2C9DDC5CEE0C8D1E2CAD2E2CAD2E2 - C9D1E0C8CEDEC6CCDCC7CDDCC9CEDDCBD1DFCFD5E1D1D8E3D4DBE5D6DDE6D6DD - E6D6DDE5D6DCE3D6DADAD4D7D7D2D4D4D0D1D1D0D0D0D0D0D0D0D0D0D0D0D0D1 - D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D8D8D8D9DADADCDDDDDEE0E0 - E0E3E3E2E5E5E3E6E6E3E7E7E4E8E8E3E7E7E3E6E6E1E4E4E1E3E3DFE0E0DDDE - DEDCDCDCDBDBDBDBDCDCDCDDDDDEDFDFE0E1E1E1E3E3E2E5E5E4E6E6E4E7E7E4 - E7E7E4E7E7E4E6E6E3E6E6E4E6E6E3E5E5E2E3E3E1E2E2E0E0E0DFDFDFDFDFDF - DEDFDFDEDEDEDEDEDEDDDDDDDEDEDEDFDFDFE0E0E0E1E2E2E2E4E4E3E5E5E3E5 - E5E3E5E5E2E3E3E1E1E1E0E0E0DFE0E0E0E0E0E1E1E1E1E2E2E3E3E3E4E5E5E5 - E7E7E6E8E8E6E8E8E6E7E7E5E6E6E3E4E4E3E4E4E3E3E3E2E2E2E2E2E2E2E2E2 - E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F78E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8E8E8E8D8D8D8D8D - 8D8D8D8D8D8D8D8D8D8D8F8F8F929494989C9C9FA5A5A6AEAEAAB4B4AAB4B4A6 - AEAE9FA5A5979B9B9294948E8E8E8C8C8C8C8C8C8D8D8D8F9090939595999D9D - A1A8A8A8B1B1ADB8B8AEBABAACB7B7A6AFAF9FA6A6999E9E969A9A979A9A9BA0 - A0A0A7A7A8B1B1AFBABAB4C2C2B9C8C8AAB6C09AA3B79AA3B798A2B6B8C8C8B4 - C2C2AEBABAA6B0B09DA4A4969A9A9093938F9090919393969B9B9DA4A4A3ABAB - A5AFAFA4ADAD9EA6A6979D9D9194948B8C8C898A8A8C8E8E919595989E9E9FA7 - A7A3ADADA4AEAE9FA8A8989E9E9195958B8D8D8788888788888B8E8E93979799 - A0A0A0A9A9A4AEAEA2ABAB9DA5A5989D9D9395959091918F8F8F8E8F958D909C - 9494949798989A9C9C9FA1A1A4A9A9AAB0B0B1B9B9B7C1C1BCC8C8C0CECEB1BC - C6A0A9BDA1AABE7B7FA69FA9BD9DA7BBACB9C3B9C8C8B2C0C0A9B5B5A1ABAB9A - A1A19297978C8F8F8789898484848181817F7F7F7F7F7F7F7F7F7E81877A8FD8 - 819AE689A3E892ADEB99B3EC9CB7ED9DB8ED9CB7EC9DB8EDA0BBEEA4C0EEAAC5 - F0A6C0E990A3D3A0B7E2AEC9F0AAC5EFA4BDED9CB4EA94ABE792A2CB989A9A95 - 96969494949799999FA4A4AEB7B7BFCDCD5A56913227753227755A5691C1CECE - B2BABAA6AAAA9FA0A09E9F9FA0A1A1A5A8A8ABAFAFB2B8B8B8C0C0BEC8C8C3CF - CFC6D3D3ACB5C4A4ABBFA4ABBFB6C0CAC7D3D3C3CDCDBEC7C7B9BFBFB3B7B7AE - B0B0ABACACA9A9A9AAAAAAACACACAEAFAFB2B5B5B7BBBBB9C4DDBECCE6C4D2E8 - C8D7EBCCDBECB0BBD7A8B1D0BBC6DECDDAEBC9D6E8C4D0E4BEC7E0BBC3DCB8BF - D9B8BED9B9C0D9BFC5DDC3CBDFCAD2E3CED9E7D2DDE9D4DFEAD3DDE9D0DAE6CE - D6E3CCD3E1CCD3E0CED4E1D2D9E5D6DEE8D9E2EAB1B6CFA8ABC89393B9B3B7CF - C8CEDDDDE3E4DBDFDFD7DADAD4D6D6D3D4D4D0D1D1D0D1D1D1D1D1D1D1D1D2D2 - D2D2D2D2D3D3D3D4D4D4D4D5D5D5D6D6D8D9D9DBDDDDDFE2E2E2E6E6E5E9E9E7 - ECECBABCD0BBBDD1BCBDD1BCBDD1C6C8D7E8ECECE5E9E9E3E6E6E1E3E3DFE0E0 - DDDEDEDDDEDEDFE0E0E1E3E3E4E6E6E6E9E9E8ECECE9EDEDE9EEEEE9EEEEE9EE - EEE9EDEDE9EDEDE8ECECE7EBEBE6E9E9E4E7E7E3E5E5E2E3E3E0E1E1DFE0E0DF - DFDFDEDEDEDEDEDEDEDFDFE1E1E1E2E3E3E4E6E6E6E9E9E7EAEAE8EAEAE7E9E9 - E5E6E6E3E4E4E1E2E2E1E1E1E1E1E1E2E2E2E3E4E4E5E7E7E7E9E9E8EBEBEAED - EDE9ECECE8EBEBE6E8E8E4E6E6E4E5E5E3E3E3E2E2E2E2E2E2E2E2E2E2E2E2E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F78F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E - 8E8E8E8E8E8E9192929598989EA3A3A9B2B2514C8A524E8B524E8B514C89A8B2 - B29DA3A39497979091918D8D8D8D8D8D8F90909395959A9E9EA3ABABAEBABA8E - 95AF54508D54508D534E8C514B89656290A1A7A79DA2A2A0A6A6A6AFAFAFBABA - B8C7C78990AF5F5D96302677302677302677302677302677302677423B836464 - 97898FA9979FA99CA2A2959898929595969A9A9EA5A59298A8504C89514D8A51 - 4C8A7D7F9E9FA7A79599998E8F8F8A8C8C8F9292969C9CA2ABAB5F5D90514C8A - 514D8A504B88A2ACAC979D9D8E9191898A8A8A8B8B8F93939AA1A18F96A5504B - 89514C8A504C897B7F9EA0A8A8979B9B919393848EAF7289DE7189E38091C796 - 9BA5A1A4A4A8ADADB1B8B8B8C3C3C0CDCDA2AABF6B6B9E443D85302677302677 - 302677302677302677302677302677433C8468699C9AA5BAB4C4C4A9B6B6A0A9 - A9969C9C8E9292888A8A8485858181818080807E8085788BD27D95E688A1E890 - A8E54D4C954F4F965150966A71AEB3D1F3B2D0F39BB1DD6368A639307F302677 - 3026773026773026775353978492C5AEC9F0A4BDECA0B0CC9FA4A4999C9C9698 - 98989A9AA1A5A5AEB6B6BFCDCD585592302677302677585692C1CFCFB2BABAA8 - ACACA1A3A3A2A3A3A6A9A9ADB2B2B6BDBDBEC9C9BDC8CD7E80AA4E498B302677 - 3026773026773026773026773026775753907C7CA59CA1B5B8BEBEB2B5B5ADAE - AEABACACACACACAEB0B0B3B6B6B9BDBDC0C7C7C5D4EAB8C5DF8184B44F4A8E30 - 2677302677302677302677302677443D86575294C3CDE3BEC7DEBAC2DBBAC1DB - BDC5DCC4CCE1CCD6E6C9D3E4706EA53B317F3026773026773026776E6BA2D2DA - E6D2D9E5CAD1E08E8EB866629C3026773026773026773026773026773026775D - 5795B4B7CCDCE1E1D8DBDBD5D7D7D2D3D3D2D2D2D1D1D1D2D2D2D2D2D2D4D4D4 - D4D4D4D5D5D5D6D6D6D7D8D8DADCDCDFE2E2C1C2D2807CAA534B8E3026773026 - 77302677302677302677302677483F878D8BB4DCE0E6E5E8E8E1E3E3DFE1E1DF - E0E0E0E2E2E4E6E67570A35F58955F5996605997605997605997605997605997 - 6059967873A6A6A5C5D4D7E2EAEEEEE8EBEBE6E8E8E4E5E5E2E3E3E1E1E1E0E0 - E0DFDFDFE0E0E0E1E2E2E4E5E5E7E9E95F57955F58955F58955F5795E7EAEAE4 - E6E6E2E3E3E2E3E3E2E3E3E4E5E5E6E8E8E9ECECE0E2E8605896605996605896 - 5F58955E5794C5C4D4E5E6E6E4E4E4E3E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E3 - E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F78F8F - 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E - 8E8E929393999D9DA4ABABB2BEBE2F257A2F257A2F257A2F257AB1BDBDA2AAAA - 979B9B9192928E8E8E8E8F8F929393999D9DA3AAAAB0BCBCABB8C33830802F25 - 7A2F257A2F257A382F7EA6AFB4A7AEAEA6ADADABB4B4B4C1C1A5B0C04B478C2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A - 6E6F99A1A8A8989D9D9599999A9F9FA4ADAD9199AE2F257A2F257A2F257A7274 - 9FA7B1B1999F9F9093938D8E8E9295959CA3A3AAB6B6514E8E2F257A2F257A2F - 257AACB9B99DA5A59195958A8B8B8B8D8D949999A0A9A98F97AC2F257A2F257A - 2F257A71749FA7B1B196A0AE8094D1738CE5728AE4738DE57892E6809AE896A9 - D4B1BCC4BFCCCCA2ABC05754942F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257A54529398A4BAB1C0C0A4AFAF - 99A1A1909595888A8A8485858282827588D17790E48099E78FA9EAA1BDEF2F25 - 7A2F257A2F257A54549AC3E3F87078B12F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A403B8A95A6D5AFC3D8AAB2B2A1A7A79B9E9E9B9D9D - A1A5A5AEB6B6BFCDCD5755942F257A2F257A585595C2CFCFB3BBBBA8ADADA4A7 - A7A6A9A9AEB3B3B8C0C0C2CDCD878AB03830812F257A2F257A2F257A2F257A2F - 257A2F257A2F257A2F257A2F257A2F257A2F257ABCC3C3B4B8B8AFB1B1ADAEAE - AFB0B0B3B6B6BABFBFC2CACACBD6DA7F83B52F257A2F257A2F257A2F257A2F25 - 7A2F257A2F257A2F257A2F257A2F257AC7D1E5C0C9E0BDC5DEBEC5DEC2CBE0CB - D5E6B6BDD73930822F257A2F257A2F257A2F257A2F257A595597D5DEE9D6DDE8 - AEB2CE2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F25 - 7A9F9FBFDDE2E2D8DBDBD5D7D7D3D4D4D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6 - D6D6D7D7D7DADADADCDEDEE1E4E45D56962F257A2F257A2F257A2F257A2F257A - 2F257A2F257A2F257A2F257A2F257A524B91DDE1E7E5E8E8E2E4E4E1E3E3E4E6 - E6E7EAEA5E58982F257A2F257A2F257A2F257A2F257A2F257A2F257A2F257A2F - 257A2F257A2F257A6B66A1BDBED4EAEEEEE7EAEAE4E6E6E2E3E3E1E1E1E0E0E0 - E1E2E2E3E4E4E6E8E8EAEDED2F257A2F257A2F257A2F257AEAEDEDE7E9E9E4E5 - E5E3E4E4E4E5E5E6E8E8EAEDEDE1E4EA534B912F257A2F257A2F257A2F257AA4 - A2C1E8E9E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - ECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1 - F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7909090909090 - 9090908F8F8F8F8F8F8F8F8F9090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9395 - 959CA0A0A8B1B1B8C7C72D237C2D237C2D237C2D237CB7C5C5A6AFAF9A9E9E92 - 93938F8F8F929393979A9AA0A7A7AEB9B9BDCDCD4B478F2D237C2D237C2D237C - 372E82A0AABAB0BBBBACB5B5AFB9B9B8C5C58B91B32D237C2D237C2D237C2D23 - 7C2D237C2D237C413B895552945552942D237C2D237C2D237C2D237C6E6F9BA2 - AAAA9A9E9E989D9D9DA3A3AAB4B497A0B62D237C2D237C2D237C7578A5ACB8B8 - 9CA3A39295958E8F8F949898A0A8A8B0BEBE5250922D237C2D237C2D237CB3C2 - C2A1AAAA9398988A8C8C8B8D8D969C9CA5B1B1949FB52D237C2D237C2D237C74 - 79A7A2B9DA89A5EA7C96E7758EE5748DE57993E6819BE88CA8EB9BB7EFA1BEEC - 6E74AE2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C2D237C2D237C2D237C6E72A4ADBDC2A8B4B49C - A4A4909595898B8B7B8AC1748CE47891E5849DE894AEECA9C6F22D237C2D237C - 2D237C53539B666BAB2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C2D237C8893BDB7C3C3AAB2B2A0A5A59EA1A1A3A8A8AF - B8B8BFCDCD5653962D237C2D237C565396C2CFCFB4BCBCAAAEAEA7ABABACB1B1 - B6BEBEC3CFCF6A69A12D237C2D237C2D237C2D237C2D237C2D237C5754965754 - 96423B892D237C2D237C2D237C2D237CBDC4C4B6BABAB1B3B3B0B2B2B3B5B5B9 - BEBEC1C9C9C2CCD15754972D237C2D237C2D237C2D237C2D237C2D237C2D237C - 2D237C2D237C2D237C2D237CC7D2E5C1CAE1C0C8DFC2CAE0C8D1E4D2DEEB4E48 - 922D237C2D237C2D237C2D237C2D237C2D237C585398D5DEE8D6DEE8AEB1CE2D - 237C2D237C2D237C5B5699898AB88A8BB85C579A2D237C2D237C2D237C393083 - D7DCE1DBDFDFD7D9D9D5D6D6D3D3D3D3D3D3D3D3D3D5D5D5D5D5D5D6D6D6D7D7 - D7DADBDBDDDFDFE2E5E55B55982D237C2D237C2D237C5D589A827FB17672A945 - 3D8B2D237C2D237C2D237C2D237C5D579AE9EDEDE5E8E8E4E6E6E5E8E8E9EDED - 5D579A2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D237C2D23 - 7C2D237C2D237C2D237C827FB1ECF0F0E8EBEBE5E7E7E3E4E4E1E2E2E2E2E2E4 - E5E5E7E9E9EBEFEF2D237C2D237C2D237C453D8BECF0F0E8EAEAE5E7E7E6E7E7 - E7E9E9EAEDEDEEF2F27772AA2D237C2D237C2D237C2D237CA5A4C5EAEDEDE7E9 - E9E5E6E6E4E4E4E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4 - E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F791919191919191919190 - 90909090909090909090909090909090909090909090908F8F8F9495959DA2A2 - ABB5B5BDCDCD2C227E2C227E2C227E403A8BBBCBCBA9B2B29B9F9F9394949091 - 919699999EA3A3ABB4B4BAC9C97174A82C227E2C227E2C227E2C227E959EBAB8 - C5C5B2BCBCB1BBBBB8C4C4A6B2C32C227E2C227E2C227E2C227E413A8B9098BB - BBCBD0C1D1D1BECDCDBDCDCDBECECEA2ADBE7275A33D36866B6B99A0A7A79A9E - 9E989D9DA0A6A6AEB9B99AA5BC2C227E2C227E2C227E777BA9AFBCBC9FA6A692 - 95958F9090959A9AA3ABABB5C4C45351962C227E2C227E2C227EB7C8C8A4AEAE - 949A9A8A8D8D8C8F8F989F9FA9B5B598A4BB2C227E2C227E2C227E727DB9A1BF - F08CA8EB7E98E77891E57992E7809AE98CA7EC9BB9EFA4C1ED4645952C227E2C - 227E2C227E2C227E2C227E61609F9299BBB8C5D0C9D8D8C8D7D7C7D7D7B4C2CD - 8F97B95F5F9E2C227E2C227E2C227E2C227E2C227E484590AFBFC4A9B6B69AA3 - A38799C97B92E7768EE57B93E6869FE998B3EDAFCCF32C227E2C227E2C227E2C - 227E2C227E2C227E2C227E646AAC98ACD8B8D6F5BAD6F4ABC3E6818EC2362E86 - 2C227E2C227E2C227E2C227E8A91B4B5C1C1A9B0B0A3A8A8A6ABABAFB8B8C0CE - CE5553982C227E2C227E565398C2CFCFB5BEBEADB2B2ADB2B2B4BBBBC0CBCB68 - 68A22C227E2C227E2C227E2C227E5754999EA6C2CEDCDCCBD8D8CBD7D7CCD8D8 - CCD8D8999EBB66649E2C227EBBC1C1B6BABAB1B4B4B2B4B4B7BBBBC0C7C7CBD5 - D5615F9E2C227E2C227E2C227E2C227E58559CA2ABCFCBD9EBD5E4F1D4E2F0A8 - B0D26A68A82C227EC4CFE4C2CAE2C1C9E1C5CDE3CCD7E8A1A7CC2C227E2C227E - 2C227E2C227E9396C0D3DDEBB8BED79FA2C6D3DBE6D4DBE7ACB0CE2C227E645F - A1C8CEE0DFE8EFE1EAF0E4EDF1E8F3F57371AB2C227E2C227E2C227E9494BCDE - E3E3D9DCDCD6D7D7D5D5D5D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8DADBDB - DDDFDFE2E5E55B5499382F858B88B6DEE2E8EAEFEFEAEFEFECF1F1EEF5F5A6A6 - C92C227E2C227E2C227E2C227EAFB0CDE7EBEBE5E8E8E6EAEAEBEFEF5D579C2C - 227E2C227E2C227E8E8CBA8E8CBA8E8CBA8E8CBA7672AB453D8D2C227E2C227E - 2C227E2C227E2C227E504A95E0E3E9E8EBEBE5E7E7E3E3E3E3E4E4E5E6E6E8EB - EBEDF2F22C227E2C227E2C227E5E579CEEF2F2EAECECE8EAEAE8EAEAEAEDEDEE - F2F27672AB2C227E2C227E2C227E2C227EA6A5C8ECEFEFE9EBEBE7E8E8E5E6E6 - E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7E8E8E8E7E7E7 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79292929191919191919191919191 - 919191919191919191919191919090909090909090909597979FA4A4AEB8B8C0 - D0D02A21802A21802A2180535299BCCCCCAAB3B39CA1A19597979496969B9F9F - A6AFAFB5C2C29FABC32A21802A21802A21802A21807A80AFBFCDCDB5C0C0B2BB - BBB6C1C1C1D0D03F398C2A21802A21802A2180686BA6C0D0D6C1CFCFB9C5C5B3 - BEBEB0BABAB0BABAB0BBBBB0BABAAEB8B8A3ABB18D92A49CA1A1989B9B9A9E9E - A1A8A8B0BCBC9CA7BF2A21802A21802A21808A92B6B1BEBE9FA6A69396969092 - 92969A9AA4AEAEB7C7C75251982A21802A21802A2180BACCCCA5B1B1959B9B8C - 8E8E8C8F8F989F9FABB8B899A6C02A21802A21802A2180737EBBA4C3F18FAAEC - 819AE87B94E77F99E88AA6EB9AB7EFA4C1EC4645972A21802A21802A21802A21 - 8050519EB1C5DDC7D5D8C2CECEBDC8C8BAC5C5B9C3C3B8C3C3BAC5C5BCC9C9C1 - D1D1B4C3CF5D5E9F2A21802A21802A21802A2180484592AFBEC4A0B7D98DA7EB - 819AE87A92E67D95E788A1EA9AB6EEB2D0F42A21802A21802A21802A21802A21 - 80342D889AAFD9B4D1F4ACC7F1A7C2EFA8C1EFACC7F0B4D0F3B6D0EF5B5EA52A - 21802A21802A2180342D86B7C4CAB1BABAA9AFAFA9AFAFB2BBBBC0CECE545299 - 2A21802A2180545299C3D0D0B7BFBFB1B7B7B2B9B9BCC6C6A2AAC22A21802A21 - 802A21802A2180969DC1CFDDDDC7D3D3C2CCCCC0C8C8BFC7C7C0C8C8C1C9C9C1 - C9C9BFC6C6A1A5B6B7BBBBB3B6B6B2B5B5B5B8B8BDC2C2C7D0D0898DB72A2180 - 2A21802A2180352E8798A0CAD3E3F1CEDCEECAD7EBC9D6EAC9D6EAC9D5E9C8D3 - E8A8AFD2C1CAE2C0C8E0C2CAE1C7D0E4D0DBEA7879B22A21802A21802A218092 - 95C2E0ECF3D8E3EDD3DBE8D0D7E5CFD5E4D1D7E4A8ACCC6A68A7D7DEE8D8DFE9 - D9E1E9DBE3EADFE7EEE6F0F3DDE6EF2A21802A21802A2180726FAAE1E6E6DBDE - DED7D8D8D5D5D5D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D9D9D9DADBDBDDDFDFE0 - E2E2645FA0C2C3D5E6E9E9E6E9E9E7EAEAE7EAEAE8ECECECF1F1F0F6F67571AC - 2A21802A21802A2180817EB3EAEEEEE8EBEBE8ECECECF0F05C579E2A21802A21 - 802A2180F1F7F7F0F6F6EDF2F2ECF0F0ECF0F0EEF3F3BEC1D84F49962A21802A - 21802A21802A21807571ADECF0F0E8EBEBE5E6E6E4E5E5E5E7E7E9ECECEEF2F2 - 2A21802A21802A21805C579EEFF3F3EBEEEEEAEDEDEBEEEEEEF2F28E8BBB2A21 - 802A21802A21802A2180A6A6CAEEF2F2EBEDEDE8EAEAE6E7E7E5E5E5E4E4E4E4 - E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEC - ECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7929292929292929292929292929292929292 - 929292929292929292929292919191919191969797A0A5A5AEB8B8C0D1D12820 - 8328208328208352519BBDCDCDABB4B49DA2A2979A9A989C9CA4AAAAB2BDBDB7 - C7CD322B892820832820832820835C5DA1C1D0D0B5C0C0AFB8B8B1BABABBC7C7 - 8C94B92820832820832820835D5EA2D0E3E3C3D2D2B8C3C3B0B8B8AAB2B2A7AE - AEA6ACACA6ACACA5ABABA3AAAAA3A8A89DA2A2999C9C969898989C9CA1A8A8B1 - BDBD9CA8C02820832820832820839DA9C2B1BEBEA0A7A79395958F9191979B9B - A5AEAEB8C8C851509B282083282083282083BACCCCA5B1B1959B9B8B8D8D8C8F - 8F97A0A9A4BBDA94A8D8282083282083282083727EBDA6C3F190ACEC829DE980 - 9AE887A2EB97B4EFAAC8F34D4FA02820832820832820832820837D8CC4B1D0F5 - A3C2F29BB6EDA3B4D4AEB5BAAEB3B3ACB1B1ABB1B1ABB1B1ADB5B5B2BCBCB7C4 - C4C1D2D28E98BD282083282083282083282083454397ABC9F399B4EF8AA3EA7E - 97E77F97E789A2EA9AB6EEB4D1F4282083282083282083282083282083A7BEE2 - B2CEF3A4BEEF9AB3EC95ADEB95ADEB99B1EBA2BBEEB3C7DBC5D9DB4745952820 - 832820832820836566A4B9C5C5AEB7B7ACB4B4B3BDBDC1CFCF52519B28208328 - 208353519CC4D1D1B9C2C2B4BCBCB9C1C1C3CFCF53509B282083282083282083 - 959DC2D2E2E2C8D4D4C1C9C9BBC1C1B8BDBDB8BDBDB7BCBCB8BDBDB8BDBDB7BC - BCB6BABAB3B6B6B2B4B4B3B5B5B8BCBCC2C9C9C4CED5332C8928208328208328 - 2083A2ACD2D1E0F0C9D6EBC2CEE7BFCAE5BEC9E3BFC8E3C0CAE3BFC9E2BFC8E1 - BDC5DEBDC5DEC2CAE1C9D2E6D3DEEC56539F282083282083282083D6E2EEDAE4 - EED2DBE7CED4E3CCD1E1CBD0E0CCD1E0C3C9DBD1D6E3D2D7E4D3D9E4D5DAE5D8 - DEE7DDE5EBE5EEF2DDE6EF28208328208328208358549FE2E7E7DCDFDFD7D9D9 - D6D6D6D5D5D5D5D5D5D7D7D7D8D8D8D8D8D8D8D9D9DADBDBDCDDDDDFE0E0D5D7 - DDE2E4E4E2E4E4E2E4E4E3E5E5E4E6E6E6E9E9EAEEEEEFF5F58C8BBD28208328 - 20832820835A55A0EBEFEFE8EBEBE9EDEDEDF1F15A56A0282083282083282083 - F1F7F7EDF2F2EAEDEDE8EBEBE8EBEBEAEDEDECF1F1EFF4F47471AE2820832820 - 83282083282083A4A4C9EAEEEEE7E9E9E6E7E7E7E8E8EAEDEDEFF3F328208328 - 20832820835B56A0F1F5F5EEF1F1EDF1F1EFF2F2A5A5CB282083282083282083 - 2820838D8BBDEFF2F2EBEEEEE8EAEAE6E7E7E5E5E5E5E6E6E5E5E5E5E5E5E5E5 - E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8 - E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEB - EBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F793939393939393939392929292929293939393939392 - 9292929292929292929292929292979898A1A6A6AEB8B8C1D1D1271F85271F85 - 271F8551509DBDCDCDABB4B49FA4A49B9F9FA0A5A5ADB6B6BCCBCB5B5BA2271F - 85271F85271F853C3891BACAD0B6C1C1ADB5B5ABB2B2B2BBBBC0CDCD47439727 - 1F85271F85322B8BBDCDDACFE1E1C2D0D0B7C2C2B0B8B8ABB1B1A8ADADA6ABAB - A4A9A9A4A9A9A2A7A7A0A4A49CA0A0989B9B9799999A9D9DA3A9A9B2BEBE9CA7 - C1271F85271F85271F859CA8C2B1BDBD9FA6A6939696909292979B9BA5AEAEB8 - C8C850509C271F85271F85271F85BACCCCA5B1B1959B9B8B8D8D8893B18DA7EC - A0BDF093A9DA271F85271F85271F85727EBEA6C4F292AEED87A2EB86A0EA91AD - EDA5C2F2707BBE271F85271F85271F85271F858597CDADCCF49DBAF191ACEE87 - A2EC809BEA8098E5909EC8A1A4A9A2A4A4A1A4A4A2A6A6A5AAAAAAB1B1B2BDBD - BCCCCC8B96BC271F85271F85271F85271F85707BBEA6C3F293AEED859EEA839B - E98AA4EB9CB6EEB4D1F5271F85271F85271F85271F857581BEB7D3F5A4BEF095 - ADEC8CA3E8889FE7889EE790A0CB9CA5ADAAB4B4B9C8C8B6C7D4271F85271F85 - 271F85322A8BC0CECEB4BEBEB0B8B8B5BFBFC2D0D052509D271F85271F855251 - 9DC5D2D2BBC5C5B9C1C1BEC8C8ABB6C9271F85271F85271F855E5EA4D7E8E8D0 - DFDFC6D1D1BFC7C7BAC0C0B7BCBCB6BBBBB6BABAB5B9B9B6BABAB6B9B9B5B8B8 - B3B5B5B3B5B5B6B9B9BEC3C3C8D0D09398BF271F85271F85271F856A6CB0D2E3 - F1C8D5EBBFCAE5B9C3E2B7C1E0B8C0DFB9C1DFB9C2DFB9C1DFBAC2DEBAC1DDBD - C4DFC2C9E2CAD3E7D5E1ED5653A1271F85271F853F3993DEEAF2D5DEEACDD4E3 - C8CEDFC7CCDEC8CCDEC9CEDECCD0DFCDD2E1CFD4E1D1D6E3D4D9E5D9DFE8DFE7 - EDE7F0F49495C4271F85271F85271F857C7BB4E2E6E6DCDFDFD8D9D9D6D6D6D6 - D6D6D6D6D6D8D8D8D9D9D9D9D9D9D9D9D9DBDBDBDBDCDCDEDFDFDFE0E0E0E1E1 - E0E1E1E0E1E1E1E2E2E2E4E4E5E8E8EAEEEEEFF5F5807DB7271F85271F85271F - 855955A1EBEFEFE9ECECEAEDEDEDF2F25A55A2271F85271F85271F85EFF4F4EA - EEEEE7E9E9E5E6E6E4E5E5E6E8E8E8EBEBEBEFEFEFF4F47370B0271F85271F85 - 271F85342C8CEEF2F2E9ECECE7E9E9E7E9E9EAEDEDEFF3F3271F85271F85271F - 855A55A2F2F7F7F0F5F5F0F5F5A6A5CC271F85271F85271F85271F857370B0EF - F3F3EBEEEEE9EBEBE6E7E7E5E5E5E4E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 - E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8 - E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79494949494949494949494949393939393939393939393939393 - 93939393939393939393979898A1A6A6AFB9B9C1D1D1251D87251D87251D874F - 4F9EBECDCDACB6B6A3A9A9A0A5A5A8B0B0B7C4C4949FC0251D87251D87251D87 - 251D879FAAC4BAC6C6ADB5B5A7ADADA9B0B0B5BEBEBAC8CE251D87251D87251D - 876769ABD3E6E6D1E3E3C7D5D5BDC9C9B7C1C1B4BCBCB1B9B9AEB6B6ACB4B4AA - B1B1A8AEAEA5AAAAA1A6A69EA1A19A9D9D9DA1A1A6ADADB3BFBF9CA8C2251D87 - 251D87251D879BA7C1B0BDBDA0A6A6949696909292979B9BA5AFAFB8C8C84F4E - 9E251D87251D87251D87BACCCCA5B1B1959B9B8B8D8D8595C78DA8ECA1BEF193 - A8DA251D87251D87251D87717DBFA7C5F394AFED8BA6EC8EA9ED9CB8F0A0BAE7 - 2F298E251D87251D87251D877C8BC7AFCDF59DB9F08EA8ED829DEA7C95E97791 - E8758EE8748DE8768EE38995C39A9CA29B9C9C9D9F9F9FA3A3A5ABABAEB9B9BB - CCCC828BBA251D87251D87251D87251D87A1BAE79EB9F08EA7EB88A0EA8DA6EB - 9DB7F0B4D1F5251D87251D87251D87251D87B8D3F0ABC5F198B1EC8BA2E98499 - E78494CF8990A38E9090959898A0A6A6B0BBBBC2D3D36568AA251D87251D8725 - 1D879DA7C1B9C4C4B4BDBDB7C2C2C3D1D1504F9F251D87251D87514F9FC6D3D3 - BDC7C7BCC5C5C2CECE858AB9251D87251D87251D87B5C2D6D7E9E9D2E1E1CAD6 - D6C4CDCDC1C9C9BEC5C5BDC4C4BCC2C2BBC0C0BBC1C1BABFBFB9BDBDB7BABAB6 - B9B9BABEBEC2C8C8CDD7D75E5DA5251D87251D87251D87C2D0E5CBDAEEC0CCE7 - B8C3E2B4BCDFB3BBDEB5BCDEB5BDDEB6BDDEB7BFDEB8C0DDB9BFDDBDC3DFC2CA - E1CBD4E7D6E1EE5452A3251D87251D875552A3DBE6F0D2DAE8CBD1E1C8CDDEC7 - CADDC7CBDDC9CDDDCBCEDECED2E0D0D4E2D4D9E4D8DEE8DDE5ECE4EDF1A0A2CD - 251D87251D87251D87251D87A9ACCDE0E4E4DCDEDED9D9D9D6D7D7D7D7D7D8D8 - D8D9D9D9DADADADADADADADADADBDCDCDCDCDCDDDDDDDEDFDFDEDFDFDFDFDFDF - E0E0E2E3E3E4E6E6E8EBEBECF0F0E4E9F0322B8E251D87251D87251D877E7CB7 - EBEFEFE9ECECEAEDEDEDF2F25854A3251D87251D87251D87EEF3F3E9ECECE6E7 - E7E3E4E4E2E3E3E3E4E4E6E7E7E9EBEBEDF0F0E4E8EF322B8E251D87251D8725 - 1D87A4A4CCEBEEEEE9EBEBE9EBEBEBEEEEEFF3F3251D87251D87251D875954A3 - F3F8F8F3F8F8CCCFE3322B8E251D87251D87251D87726FB1EFF3F3ECEEEEE9EB - EBE7E8E8E6E7E7E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7959595959595949494949494949494949494949494949494949494949494 - 939393939393989999A1A6A6AFB9B9C1D2D2241C8A241C8A241C8A4F4EA0BFCF - CFB0BABAA8B0B0A9B1B1B2BEBEB8C8CE2F2890241C8A241C8A241C8A777DB3BD - CBCBAFB8B8A5AAAAA3A7A7AAAFAFB6C0C09FA8C4241C8A241C8A241C8A45429C - 7C81B8868DBEA2ADC9B2BECCC3D0D0C1CDCDBECACABCC8C8B9C5C5B8C2C2B4BF - BFB1BABAACB3B3A5ACACA0A5A5A1A6A6A8B0B0B5C1C19CA7C3241C8A241C8A24 - 1C8A9BA7C2B1BDBDA0A7A7959797919393989C9CA5AFAFB8C8C84E4DA0241C8A - 241C8A241C8ABACCCCA5B1B1959A9A8B8D8D8397D28EA8ECA1BEF193A8DB241C - 8A241C8A241C8A717DC1A8C5F396B3EF90ABED96B1EFA7C5F35E65B3241C8A24 - 1C8A241C8A4C4EA5B4D2F6A0BCF28EAAEE819CEB7B94E9778FE9758DE8748DE8 - 748CE8748CE8738CE8768DE38794C197999E999A9A9CA0A0A3AAAAADBBBEB5D2 - EF4C4EA5241C8A241C8A241C8A5E65B3A9C5F394AFEE8CA5EC90A8EC9EBAF0B4 - D1F5241C8A241C8A241C8A4C4EA6B9D5F5A3BCF092A9EB879BDD898FA98B8B8B - 8B8B8B8E8E8E9294949CA1A1AAB2B2BCCACA99A5C7241C8A241C8A241C8A767B - B2BCC8C8B7C0C0BAC4C4C4D2D2504EA1241C8A241C8A504EA1C7D4D4BEC9C9BE - C8C8C5D2D26667AC241C8A241C8A241C8A6869AE7E82B99FA8CBA5AECAC1CCD3 - CAD5D5C8D3D3C8D2D2C7D0D0C6CFCFC5CDCDC3CBCBC1C8C8BEC4C4BDC2C2BFC5 - C5C6CECED1DCDC3B3696241C8A241C8A47439CD5E4EDC6D4EBBCC8E5B6C0E1B2 - BBDFB4BBDEB4BBDDB5BDDEB6BDDEB7BEDDB8BFDDBAC0DDBCC4E0C3CAE3CBD4E8 - D7E2EE5351A5241C8A241C8A5451A5DAE5EFD2D9E8CBD1E1C8CDDFC6CADDC7CC - DDC9CEDECCD0DFCFD4E2D4D9E4D8DEE8DEE5EDCCD3E5625FAC241C8A241C8A24 - 1C8A241C8A49449DE4E9E9DEE2E2DBDCDCD9D9D9D7D7D7D8D8D8D9D9D9D9D9D9 - DADADADADADADADADADBDBDBDDDDDDDDDEDEDFDFDFDFE0E0E0E1E1E2E4E4E5E7 - E7E8EBEBECF0F0E3E8EF4B459F241C8A241C8A241C8A241C8AAFB0D2EAEDEDE8 - EBEBEAEDEDEDF2F25753A5241C8A241C8A241C8AEFF3F3EAECECE6E7E7E3E4E4 - E2E2E2E3E3E3E4E4E4E6E8E8EAECECEEF2F28B8AC0241C8A241C8A241C8A6561 - ACEDF0F0EAECECEAECECEBEEEEF0F4F4241C8A241C8A241C8A5853A6F3F8F8CC - CFE3312A91241C8A241C8A241C8A4B459EF0F4F4EDEFEFEAEBEBE8E8E8E6E7E7 - E6E7E7E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0 - F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79595 - 9595959595959595959595959595959595959595959595959595959594949494 - 9494999A9AA2A7A7B0BABAC2D2D2221B8C221B8C221B8C4D4DA2C4D6D6B7C4C4 - B1BCBCB4C0C0BFCECE5859A7221B8C221B8C221B8C4D4DA2C0D0D0B2BCBCA6AC - AC9FA2A2A1A5A5A9AFAFB7C2C2A0AAC6221B8C221B8C221B8C221B8C221B8C22 - 1B8C221B8C221B8C221B8C3733964C4BA06C6EAE7579B2939CC09BA5C1BFCECE - BAC6C6B2BCBCA9B1B1A6ADADAAB3B3B7C3C39CA8C4221B8C221B8C221B8C9BA7 - C3B2BEBEA0A7A7949797919393999D9DA6AFAFB9C9C94C4DA1221B8C221B8C22 - 1B8CBACCCCA5B0B0959A9A8A8C8C8398D98FA9ECA2BFF193A8DC221B8C221B8C - 221B8C707CC2A9C6F399B5F096B1EF9DBAF1A7C4EE221B8C221B8C221B8C221B - 8C96ACDDA7C5F393AFEF849EEB7B95E9778FE8758DE8748DE8748DE8748DE974 - 8DE9758DE8748DE8748DE8778EE38693BF979898979FAE96AEE2A6C4F3A9C3EA - 221B8C221B8C221B8C221B8CAAC5EE9CB8F092ABED93ACED9FBAF0B4D1F5221B - 8C221B8C221B8C747FC2B4D1F59FB7EB94A0BA8F91918B8B8B8C8C8C8D8D8D8E - 8E8E9393939A9D9DA8AFAFB9C6C6A1AFCB221B8C221B8C221B8C777CB5BFCCCC - B8C2C2BBC5C5C5D2D24E4EA2221B8C221B8C4F4EA3C8D5D5C0CBCBC0CACAC8D5 - D54F4EA3221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C221B8C4E - 4DA14E4CA17A7DB68588BBA5ADCAB9C3D1CDD7D7C9D1D1C6CECEC6CDCDCAD3D3 - D4E0E0221B8C221B8C221B8C514FA4D5E1E6C5D2EBBBC6E5B6BFE1B3BCDEB4BB - DEB4BCDEB6BDDFB7BEDEB8BFDEB9BFDEBAC1DEBDC4DFC3CBE3CCD6E8D7E2EF52 - 50A7221B8C221B8C5250A7DBE5EFD2D9E8CCD1E2C8CCDFC6CADDC8CCDECACFDF - CFD3E2D2D8E4D9E0E9DFE7EE8F91C62E2993221B8C221B8C221B8C221B8C2F29 - 92C1C5DAE1E5E5DDDFDFDADBDBD8D9D9D8D8D8D8D8D8DADADADBDBDBDBDBDBDB - DBDBDBDBDBDCDCDCDEDEDEDEDFDFE0E1E1E1E2E2E3E4E4E5E8E8E9ECECEDF1F1 - BCBFDC3C3799221B8C221B8C221B8C221B8C4944A0ECF0F0E9EBEBE8EAEAE9EC - ECEEF2F25652A7221B8C221B8C221B8CEFF3F3EAECECE6E7E7E3E4E4E2E2E2E3 - E3E3E4E4E4E6E6E6E9EAEAEDF0F0D8DBEA221B8C221B8C221B8C3C379AEEF2F2 - EBEEEEEAEDEDECEFEFF0F4F4221B8C221B8C221B8C5652A7E6EAF13C379A221B - 8C221B8C221B8C4945A0E3E7EEEDF0F0EAECECE8E9E9E7E8E8E7E7E7E6E6E6E6 - E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7969696969696 - 969696969696959595969696969696959595959595959595959595949494999A - 9AA2A7A7B1BABAC2D2D2211A8E211A8E211A8E4C4CA3CDE2E2C2D3D3BECECEC3 - D3D396A3C7211A8E211A8E211A8E2C2793BCCCD3B6C2C2A8AFAF9BA4B4989DA6 - 9FA1A1A9AFAFB7C2C2A0AAC7211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E49 - 479E989FB5AEB7B7AEB8B8B8C5C59DA8C5211A8E211A8E211A8E9CA8C5B3BFBF - A2A9A9959898929494999E9EA6B0B0B9C9C94C4CA3211A8E211A8E211A8EBBCD - CDA6B1B1959A9A8A8C8C829BEA8FAAEDA3C0F293A8DD211A8E211A8E211A8E70 - 7BC3AAC7F39CB8F09AB7F0A6C2F38090CF211A8E211A8E211A8E4A4CA9B2D1F6 - 9CB9F18AA5ED7F98EB7991EA758EE9758EE9758EE9758EE9758EE9758EE9758E - E9758EE9768EE9768EE9768EE97D92DF8198E68AA4EC9CB8F1B2D0F65459B021 - 1A8E211A8E211A8E8091CFA4C0F298B1EF96B0EEA0BBF1B5D1F5211A8E211A8E - 211A8E737FC3B8CDE0A6B2B5999E9E9091918C8C8C8E8E8E8F8F8F9090909393 - 939C9F9FA8B0B0B9C6C6A1AECB211A8E211A8E211A8E777CB6C0CCCCB9C3C3BB - C6C6C5D3D34E4DA4211A8E211A8E4E4DA4C8D5D5C1CBCBC1CBCBC9D5D54E4DA4 - 211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A8E211A - 8E211A8E211A8E211A8E211A8E211A8E3733984D4AA1CCD5D5CED8D8D6E2E221 - 1A8E211A8E211A8E504FA6D6E1E1C6D3EABDC7E6B7C0E2B3BDDFB4BCDFB5BDDF - B6BDDFB7BEDFB9C0DEBAC0DEBAC1DEBEC5E0C4CCE4CDD7E8D8E3EF5150A8211A - 8E211A8E5250A8DBE5EFD2DAE8CCD2E3C8CDDFC7CBDEC9CEDFCDD2E1D1D7E4D8 - DEE9DFE7EF6B6AB4211A8E211A8E211A8E211A8E211A8E4743A1CED3E1E3E7E7 - DDE0E0DBDCDCDADADAD9D9D9D9D9D9DADADADBDBDBDCDCDCDCDCDCDCDCDCDDDD - DDDDDDDDDEDFDFDFDFDFE1E2E2E3E5E5E6E9E9EAEEEEE1E5ED6F6DB6211A8E21 - 1A8E211A8E211A8E211A8E2E2895C8CAE0E9ECECE7E9E9E8E9E9EAECECEEF2F2 - 5552A9211A8E211A8E211A8EEFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E3E3 - E3E5E5E5E8E9E9ECEFEFF1F5F5211A8E211A8E211A8E211A8EEFF3F3ECEFEFEB - EEEEEDF0F0F0F4F4211A8E211A8E211A8E4944A24944A2211A8E211A8E211A8E - 4944A2E6E9F0EFF2F2ECEEEEE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F797979797979797979797 - 9797979797969696979797969696969696969696959595959595999A9AA2A7A7 - B1BABAC3D3D31F19911F19911F19914B4CA6CEE3E3CEE3E3CCE0E0C3D6DE3531 - 9B1F19911F19911F199197A4C9C0D0D0AFB9B999ABD28AA2E9859DE889A0E498 - ACDCADC0DC99A7D01F19911F19911F19919CA6CCA8B4D29DA7CC787DB96163AD - 4B4AA335329A1F19911F19911F19911F19911F19911F19911F19911F1991959C - BAB3BDBDB2BCBCBAC6C69CA8C61F19911F19911F19919EAAC8B5C2C2A3AAAA97 - 9A9A939595999E9EA7B1B1BACBCB4A4BA51F19911F19911F1991BCCFCFA7B2B2 - 969C9C8B8E8E849DEB91ACEEA4C0F294AADD1F19911F19911F19916E7BC4AAC8 - F49FBBF19FBBF1ABC8F45C63B81F19911F19911F19918396D1A9C7F495B0EF85 - 9FEC7B94EA7790E9778FE9768FE9768EE9768EE9768EEA768EEA768FE9768EE9 - 768EE9778FEA778FE97790E97C95EA849EEC95B0EFAAC7F48495D11F19911F19 - 911F19915257B2ABC6F39CB6F099B3EFA1BDF1B5D2F51F19911F19911F199155 - 57ABBFD1D1ABB6B69DA2A29395958F90908F8F8F9090909292929798989FA3A3 - ACB4B4BECCCC98A3C91F19911F19911F1991767BB7BFCBCBB8C2C2BCC6C6C6D3 - D34C4CA61F19911F19914D4CA6C9D6D6C1CBCBC1CACAC8D4D45859AB1F19911F - 1991423FA2C2CFDEABB5D3878DC17A7DB95757A94C4BA42A26951F19911F1991 - 1F19911F19911F19911F19911F19912A2695D0DBDBD1DCDCD7E3E32B26961F19 - 911F19914340A2D8E4E4CBD5E1C0CAE8B8C2E3B5BDE1B5BDE0B6BEE0B7BEE0B9 - C0DFB9C0DFBAC1DFBBC2DFBEC5E1C5CDE5CED7E9D9E3F0504FAA1F19911F1991 - 504FAADBE5F0D2DAE8CCD3E3C9CDE0C8CDDFCCD1E1D0D4E4D6DBE8DEE5EE6A69 - B61F19911F19911F19911F19912C27968585C1E5EBEBE1E6E6DEE1E1DCDDDDDA - DBDBDADADAD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDCDCDCDDDDDDDDDDDD - E0E0E0E2E3E3E4E5E5E7E9E9EBEEEEBBBDDB2C26971F19911F19911F19911F19 - 911F19912C2797C8CAE0EBEEEEE8EAEAE6E7E7E7E8E8EAECECEEF2F25451AB1F - 19911F19911F1991EFF3F3EAEDEDE7E8E8E4E5E5E3E3E3E3E3E3E4E4E4E6E6E6 - E8EAEAECEFEFF1F5F55451AB1F19911F19911F1991F0F4F4ECEFEFECEEEEEDF0 - F0F0F4F41F19911F19911F19911F19911F19911F19911F19912C2797CCCFE5F2 - F6F6EEF0F0EAECECE8E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEAEAEAEBEBEB - EBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F79898989898989797979797979797 - 979898989797979797979797979696969696969696969A9B9BA3A8A8B1BABAC3 - D3D31E17931E17931E179334319D767DBB767DBB767DBB5557AC1E17931E1793 - 1E1793767DBBCEE3E3BECDCDA8BAD493ACEC8AA2EA859EE989A1EA92ABECA2BD - F0A3BCE91E17931E17931E17937D8BCCCBE6F5C5DFF2BBD4EEBCCFE0C5D0D0C6 - D2D2C8D6D6B8C4D4A7B3D2858CC24C4BA81E17931E17931E1793A2ABC2B6C0C0 - B3BEBEBAC7C79DA9C81E17931E17931E1793757BB9B9C7C7A7AFAF9A9E9E9699 - 999CA1A1A9B3B3BDCECE494AA71E17931E17931E1793C0D3D3AAB6B6989F9F8C - 94A287A0EC93AFEFA7C4F396ABDF1E17931E17931E17936D79C5ABC8F4A0BCF2 - A2BFF3AFCDF53D3DA61E17931E17931E1793A7C2EBA4C0F390ABEF819BEC7993 - EA7790EA778FEA778FEA768FEA778FEA778FEA768FEA778FEA768FEA768FEA78 - 90EA7890EA7890EA7A92EA839CEC90AAEFA3C0F3B1CDF11E17931E17931E1793 - 3331A0AECBF5A0BBF19CB6F0A4BFF1B6D3F61E17931E17931E1793292498C7DA - DAB3C0C0A3ABAB999D9D9495959192929293939696969B9E9EA5ABABB3BEBEC4 - D4D46D71B71E17931E17931E1793949DC4BEC9C9B8C1C1BCC5C5C6D3D34C4BA8 - 1E17931E17934C4BA8C9D5D5C0CACABFC8C8C6D1D1787CBA1E17931E17931E17 - 93CDDCE4D9EAEAD3E0E0CDD8D8CAD5D5CBD5D5CDD8D8D1DDDDA9B2D0ACB6D57D - 81BE2A24991E17931E17934D4BA8D2DDDDD1DBDBD5E0E05A5AAF1E17931E1793 - 1E1793C4CFDED1DBDCC4CFE8BCC7E5B7C0E2B6BFE1B9C0E1BAC1E0BAC2E0BBC2 - E0BCC3E1BDC4E0C0C7E2C7CEE5CFD7EAD9E4F04F4DAC1E17931E1793504EACDC - E6F0D3DBE9CDD4E4CACEE0CACEE1CED2E2D3D8E6DAE1EBB2B6DA1E17931E1793 - 1E17931E1793514EABD0D6E6E5EBEBE2E5E5DEE0E0DCDEDEDBDCDCD9DADADADA - DADADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDDDDDDDEDEDEDFE0E0E1E1E1E3 - E4E4E6E9E9EBEEEEA0A1CF1E17931E17931E17931E17931E17931E1793615DB2 - E2E5EDECEFEFE9EBEBE6E8E8E6E7E7E7E8E8EAECECEEF2F2534FAC1E17931E17 - 931E1793F0F4F4EBEEEEE8E9E9E5E6E6E4E4E4E4E4E4E5E5E5E7E7E7E9EBEBED - F0F0F1F6F61E17931E17931E17931E1793F0F3F3EDF0F0ECEEEEEEF0F0F1F5F5 - 1E17931E17931E17933933A02B25991E17931E17932B2599E7EBF3F2F6F6EEF1 - F1EBECECE9E9E9E8E8E8E7E7E7E8E8E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBECECECECECECECECECEBEBEBEBEBEBEBEBEBECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7989898989898999999989898989898989898 - 9898989797979797979797979696969696969B9C9CA3A8A8B1BBBBC3D3D31C16 - 951C16951C16951C16951C16951C16951C16951C16951C16951C16951C169580 - 89C1C3D6DEBED3DFA7C2F198B2ED8DA6EB889FE989A0E990A9EB9EB8EFB1CDF4 - 3130A21C16951C1695474AAEC8E5F9BCD9F7B0CCF4A8C3F2B8C6D2C0C9C9C4CE - CECBD8D8D4E5E5D5E7E75658AF1C16951C169527239AC1CECEB7C1C1B4BEBEBB - C8C89EAAC91C16951C16951C1695757CBCC0D0D0AEB8B8A1A7A79CA1A1A2A9A9 - B0BCBCC2D5D53D3CA31C16951C16951C1695BACED6AFBEBE9EA7A7939DAF8EA9 - EE9BB6F1AECBF58FA2DA1C16951C16951C16957583CDA9C6F4A0BDF2A4C1F3B2 - D0F61C16951C16951C16951C1695B7D5F79FBBF28DA8EE8099EC7992EB7891EB - 7891EB7891EA7890EB7790EB7790EB7790EB7790EA7790EA7890EA7890EB7991 - EB7891EB7A92EA809AEC8DA7EEA0BBF2B7D5F727239B1C16951C16951C1695B3 - CFF6A3BEF29EB9F1A5C0F2B7D4F61C16951C16951C16951C16958A96C6BECECE - AFB9B9A3A9A99CA0A0999B9B9A9C9C9DA0A0A5AAAAB0B8B8BECBCBC2D2DA2723 - 9A1C16951C16951C1695B2BDCDBBC5C5B7BFBFBCC5C5C6D3D34A4AA91C16951C - 16954B4AAAC9D5D5BFC8C8BDC5C5C3CDCDACB7CF1C16951C16951C1695929ACA - D7E7E7D0DCDCC9D2D2C6CECEC4CDCDC8D0D0CDD7D7D5E1E1DCEBEBD0DEE61C16 - 951C16951C16956F71B9D1DBDBCED7D7D2DCDC878BC21C16951C16951C169572 - 74BCD8E3E3CDD6DDC2CEE9BDC7E6BDC5E5BDC5E4BDC6E3BEC7E3BFC7E3C0C8E3 - C1C7E3C3CAE4C9D1E7D1DAEBDAE6F14E4DAE1C16951C16954E4DAEDFE8F1D6DE - EBD0D6E6CED2E4CDD2E3D1D5E5D6DCE9DEE5EE6868B91C16951C16951C16956A - 6ABAEAF3F5E5EBEBE2E6E6DFE2E2DEDFDFDCDDDDDBDCDCDADBDBDBDBDBDADADA - DBDBDBDCDCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE1E1E1E2E3E3E6E7E7E9EC - ECB9BBDB1C16951C16951C16951C16951C16953732A1BCBEDDEEF2F2ECEEEEE9 - EBEBE7E8E8E6E6E6E6E6E6E7E8E8EAEDEDEFF3F3524FAE1C16951C16951C1695 - F0F4F4ECEEEEE8EAEAE6E7E7E5E5E5E5E5E5E6E6E6E7E8E8EAECECEEF1F1D8DB - EB1C16951C16951C16953732A2F0F3F3EDEFEFECEEEEEEF0F0F1F5F51C16951C - 16951C1695524FAEB0B2DA1C16951C16951C16954541A8E6E9F1EFF2F2ECEEEE - EAEAEAE9E9E9E8E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F799999999999999999999999999999999999998989898 - 98989797979797979797979696969B9C9CA4A9A9B1BBBBC3D3D31B15971B1597 - 1B15971B15971B15971B15971B15971B15971B15971B15971B15971B15972622 - 9C8EA0DAB2CDF4A2BCF095ADED8CA4EB89A2EB8EA7EC9AB4EFABC6F26C78C71B - 15971B15971B15979DB2E1BDDAF7B0CCF4A6C1F2A8BEE5BDC5C5C2CCCCCAD7D7 - D4E4E4BFCEDE1B15971B15971B15975F61B2C0CCCCB7C0C0B5BFBFBDCACAA0AC - CC1B15971B15971B15973D3CA5C8DBDBB8C5C5ACB5B5A8B0B0ADB8B8B9C8C8C0 - D3DB1B15971B15971B15971B159792A1CAB9CACAA8B5B59EADC09CB6F1A7C3F3 - B9D6F76670C21B15971B15971B159790A5DFA7C3F4A0BCF3A4C1F3B4D2F71B15 - 971B15971B15974549B0B4D3F79DB9F28BA6EF7F99EC7992EB7991EB7991EB78 - 91EB7891EB7891EB7891EB7890EB7891EB7890EB7991EB7992EB7991EB7991EB - 7A92EB8099EC8CA6EF9EB9F2B4D2F74549B01B15971B15971B1597B5D1F6A4BF - F2A0BAF1A6C1F3B7D4F61B15971B15971B15971B159726229CBFD1DABCCACAB0 - BABAA8AFAFA5ABABA6ACACA9B0B0B1BABABDC9C9CADBDB5457B01B15971B1597 - 1B15974948AAC2CECEB8C0C0B6BDBDBDC6C6C8D6D64A4AAB1B15971B15974A4A - ABC9D5D5BFC7C7BBC2C2BFC7C7CAD5D5332FA11B15971B15973330A1D8E8E8D0 - DCDCC8D2D2C4CCCCC2CACAC6CECECCD5D5D4E0E0DCEBEB7C80C21B15971B1597 - 1B1597B3BBD4CED6D6CBD2D2CDD5D5CAD3DB27239C1B15971B15971B1597AEB6 - D7D7E1E1CED8E7C7D2EBC5CFEAC4CEE9C4CEE8C5CEE8C6CFE8C6CFE7C6CEE7C8 - D0E8CDD6E9D5DFEEDEEAF34E4CAF1B15971B15974E4CAFE2EDF4DAE4EFD5DCEA - D1D7E6D1D6E5D3D8E7D8DEEAE0E7F04E4CAF1B15971B15971B1597DEE6F1E9F1 - F1E4EAEAE2E6E6E0E2E2DFE1E1DFE0E0DCDDDDDCDDDDDBDBDBDBDCDCDCDCDCDD - DDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E4E5E5E7E9E9EBEFEF514DAF - 1B15971B15971B15971B15976C6ABCE4E8F0EEF1F1EBEDEDE9EAEAE7E8E8E6E6 - E6E5E5E5E5E6E6E7E8E8EBEDEDEFF3F3514EAF1B15971B15971B1597F0F4F4EC - EEEEE8EAEAE6E7E7E5E5E5E7E7E7E8E8E8EAEBEBEDEFEFF1F4F49595CE1B1597 - 1B15971B15975F5CB5EFF2F2EDEFEFECEEEEEEF0F0F2F5F51B15971B15971B15 - 97514EB0F4F9F9A2A3D41B15971B15971B15975F5DB6F1F5F5EEF1F1ECEDEDEA - EBEBE9E9E9E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F79B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9999999999999999999898 - 989898989898989797979C9D9DA3A8A8B1BBBBC3D3D319149A19149A19149A30 - 2EA2747BBE747BBE747BBE747BBE5255B019149A19149A19149A19149A19149A - 8090D4AEC9F39FB9F093ABED8CA5EC8DA6EC96AFEEA4BEF1ABC4EF24219F1914 - 9A19149A2F2EA6B8D3F3B7D3F6AECAF3A9C4F3BCCAD5C6D1D1CDDBDBCADAE23D - 3CA919149A19149A19149AB3BFCFBBC6C6B4BDBDB5BEBEBFCDCDA2AED019149A - 19149A19149A19149AA1B0D1C3D5D5BAC8C8B7C4C4BBCACAC6D9D97D88C21914 - 9A19149A19149A19149A3A3BA7C2D7D7B6C7C7ADC3D9ADC9F5B6D4F7BAD7F42F - 2EA619149A19149A19149AA9C4F0A3BFF39DB9F2A3C0F3B4D2F719149A19149A - 19149A4448B2B4D3F79DB9F28CA6EF809AED7A92EC7A92EC7992EC7992EC7992 - EC7991EC7991EC7891EC7991EB7991EB7991EB7A92EC7A92EC7B92EB7B92EB81 - 99EC8CA6EE9DB9F2B5D2F74448B219149A19149A19149AB5D2F6A5C0F3A0BAF1 - A7C2F3B8D4F719149A19149A19149A19149A19149A3B3BA8BECED7BFCECEB8C4 - C4B6C1C1B7C1C1BAC6C6C2CFCFCBDCDC5F63B719149A19149A19149A19149A9D - A8C9BDC7C7B6BDBDB6BDBDBFC8C8CCD9D94949AE19149A19149A4949AECAD6D6 - BFC6C6B9BFBFBBC1C1C4CDCD8B91C319149A19149A19149A6265B8D4E2E2CED9 - D9C9D2D2C8D0D0CAD3D3CFDADAD7E4E4B8C3DD19149A19149A19149A4A49ADD1 - DADAC9CFCFC5CBCBC8CECED0D8D8797DBF19149A19149A19149A25229FAEB6D8 - DAE4E6D3DFEDCFDBEFCEDAEECFDAEECED9EDCFDAEDC3CCE7C2CAE6CFD8EBD3DD - EDDAE5F1E3EFF74C4BB219149A19149A4C4CB2E7F2F8E0EBF3DBE3EFD7DEEBD6 - DCEAD7DDEADBE1ECE1E9F14D4CB119149A19149A19149AECF5F5EBF2F2E7ECEC - E4E8E8E2E6E6E2E5E5BBBCD5DFE1E1DEDFDFDEDEDEDDDDDDDDDDDDDEDEDEDFDF - DFDFDFDFDFDFDFE0E0E0E0E0E0E2E3E3E5E6E6E9EBEBD3D6E719149A19149A19 - 149A19149A7978C3F1F6F6EEF1F1EAEDEDE9EAEAE7E8E8E7E7E7E6E6E6E6E6E6 - E6E7E7E8E9E9EBEDEDEFF3F3504DB219149A19149A19149AF1F5F5EDF0F0EAEB - EBE8E9E9E7E8E8E8E8E8E9EAEAECEEEEEFF2F2E5E9F12722A019149A19149A19 - 149AA0A1D3EEF1F1ECEEEEECEEEEEEF0F0F2F5F519149A19149A19149A504DB2 - F5F9F9F5F9F96C6ABD19149A19149A19149A6B6ABDF1F4F4EFF1F1ECEEEEEBEB - EBEAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEAEAEA - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F79C9C9C9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999 - 9898989797979C9D9DA4A9A9B1BBBBC3D3D318139C18139C18139C4647AECEE3 - E3C9DCDCC1D2D2BFCFCFC1D3D3B4C5D65155B418139C18139C18139C18139C92 - A5E0A8C3F299B3EF90A9EC8DA5EC91A9ED9CB5EFABC6F3879ADA18139C18139C - 18139C2E2DA898ACE2BAD7F7B5D2F6BBD3EECEDBDBBBC9DA3C3AAA18139C1813 - 9C18139C676CB9C1CCCCB7BFBFB2B9B9B6BFBFC1CECEA3B0D218139C18139C18 - 139C18139C231FA1A0AED1C6D9D9C5D7D7C9DDDD9FAFD1231FA018139C18139C - 18139C2320A018139C5B60B6B6CAD2BCD5E4BEDCF9BAD7F45A61BF18139C1813 - 9C18139C4246B3ABC7F59DB8F29AB4F2A1BDF3B4D1F718139C18139C18139C2E - 2CA8B6D4F79FBBF38DA7F0829AED7A93EC7A93EC7A93EC7A92EC7A92EC7992EC - 7A92ED7A92EC7A93EC7A92EC7A92EC7B93EC7B93EC7B93EC7B93EC829BED8EA8 - F0A0BBF3B7D4F7393AAE18139C18139C18139CB5D2F6A5C0F3A1BBF2A7C2F3B9 - D5F718139C18139C18139C18139C18139C18139C241FA18891C6BCCBD3C5D4D4 - C6D5D5CADADA97A1CC3B3AAA18139C18139C18139C18139C686DB9C2CECEB8C0 - C0B2B8B8B5BCBCC0C9C9CEDCDC4848AF18139C18139C4848AFC9D5D5BDC5C5B7 - BCBCB7BCBCBEC4C4C9D3D34747AE18139C18139C18139C6163B9CAD6DFD2DDDD - D0DBDBD2DDDDD5E2E29199CD2420A118139C18139C18139CB1B9D2CBD2D2C4C9 - C9C2C5C5C4C8C8CAD0D0D4DDDD3D3BAA18139C18139C18139C18139C6465BBB9 - C2DDDBE9F3DBE9F5DAE7F4CDD9EE8F96D2302CA7A5ACDAD5DFEFD9E4F1E0ECF5 - E5F2F84B4BB318139C18139C4C4BB3E7F3F8E6F1F7E1EAF3DDE5F0DBE2EDDBE1 - EDDDE3EEE1E9F17374C418139C18139C18139CAAAED9EDF4F4EBF1F1E8EEEEE7 - ECECB2B4D7251FA1E2E4E4E0E1E1DEDFDFDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E3E4E4E6E7E7EAEDEDB9BCDE18139C18139C18139C2621 - A2F3F8F8F0F4F4EDEFEFEAECECE8E9E9E7E8E8E7E8E8E8E8E8E6E7E7E7E7E7E8 - E9E9EBEDEDF0F3F34F4DB318139C18139C18139CF2F6F6EFF1F1ECEEEEEAEBEB - EAEBEBEAECECEDEFEFEFF2F2F2F6F66B69BF18139C18139C18139C3430A8F1F4 - F4EEF0F0ECEDEDECEEEEEEF1F1F2F5F518139C18139C18139C4F4DB3F5F9F9F4 - F8F8F4F8F84F4DB318139C18139C18139CA1A1D5F1F4F4EEF0F0ECEDEDEBEBEB - EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEAEA - EAEAEAEAEAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEB - EBEBECECECECECECECECECEBEBEBEBEBEBECECECECECECECECECECECECECECEC - ECECECEDEDEDECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEEEEEEEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F2F2F2F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F4F4F4F4F4F4F4F4F4F3F3F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7 - F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79C9C - 9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A99999999999998 - 98989D9E9EA4A9A9B2BBBBC3D3D316129E16129E16129E4447B0CBDFDFBDCCCC - B3BEBEAEB8B8B2BDBDBAC9CCC3DEF65A62C116129E16129E16129E2C2BA9B3CE - F5A1BBF194ADEE8DA5ED8DA5ED95AEEEA1BBF1AFCAF4555DC016129E16129E16 - 129E16129E3739AF6D79CC6D79CC5254B616129E16129E16129E16129E3939AA - C5D1D1B9C2C2B2B8B8B1B6B6ACB3BC979FC37E86C416129E16129E16129E2D2C - A716129E16129E3939AB4446AF3939AB16129E16129E16129E16129E2D2CA670 - 79BF16129E16129E211EA24246B44246B5211EA416129E16129E16129E16129E - 8DA3E1A2BDF396B1F195B0F19FBAF3B1CFF6211FA416129E16129E16129EBBD8 - F9A4BFF491ABF1839DEF7D96ED7B94ED7B93ED7B93ED7A93ED7A93ED7A93ED7B - 93ED7B93ED7B94ED7B93ED7C94ED7B93ED7C94ED7E97EC849DEE92ABF0A4BFF4 - BBD8F816129E16129E16129E16129EB4D0F6A5BFF3A0BAF2A7C2F4B9D5F71612 - 9E16129E16129E4547B05C61B916129E16129E16129E16129E4546B04546B016 - 129E16129E16129E16129E16129E16129E3939ABC5D2D2BAC3C3B3B8B8B2B6B6 - B6BCBCA1A7C2A0A9CD3B3AAC16129E16129E4647B0C7D2D2BDC3C3B5B9B9B4B8 - B8B9BDBDC2CACAC2CCD43A3AAB16129E16129E16129E221FA36062BA777CC36C - 70BF2F2CA816129E16129E16129E16129E8E93C8CED6D6C7CBCBC1C3C3BEC0C0 - C0C2C2C5C9C9CDD4D4C9D2DB3C3BAC16129E16129E16129E16129E16129E1612 - 9E302DA916129E16129E16129E16129EA9B1DEDAE5F24848B416129E16129E16 - 129E16129E16129E16129E16129E16129E16129E16129E16129EACAFDBDDE4EE - E0E7F0B1B6DE16129E16129E16129E16129E7475C48283CA8182C93E3BAE1612 - 9E16129EE4E7E7E1E3E3E0E1E1DFDFDFDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2 - E2E2E2E2E2E4E5E5E7E8E8EAEDEDB9BBDE16129E16129E16129E4E4CB5F4F9F9 - F1F5F5EEF0F0ECEDEDEAECECEAEBEBEAEBEBE9EAEAE8E9E9E8E9E9EAEBEBECEE - EEF1F4F44E4CB516129E16129E16129EF4F9F9F1F5F5EFF1F1EDEFEFEDEFEFEE - F1F1F1F4F4F3F7F76A68C016129E16129E16129E16129EA0A0D5EFF2F2ECEEEE - ECEDEDEDEEEEEFF1F1F2F6F616129E16129E16129E4E4CB5F4F8F8F2F6F6F2F5 - F5E5E9F1403DAF16129E16129E16129EAEAFDBF1F4F4EFF1F1EDEEEEEBECECEB - EBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECEBEBEBECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79D9D9D9C9C9C - 9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9999999999999C9D - 9DA5AAAAB2BBBBC3D3D31510A11510A11510A14345B2C3D5D5B3BEBEA7AEAEA0 - A6A6A2AAAEA8BFE7B5D0F5BBD5F3201DA61510A11510A11510A19CB2E7A8C2F3 - 98B1F08FA7EE8CA4ED8FA8EE98B1F0A3BDF2B0CBF57280D11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A15B5DB7BCC6CFBCC4C4B4 - B9B9AEB2B2AEB3B3ACB2BB2B28A61510A11510A11510A11510A196A2CF3838AD - 1510A11510A11510A11510A11510A11510A11510A11510A1A9BBD6CBE1E13737 - AC1510A11510A11510A11510A11510A11510A11510A11510A1535BC1A9C5F599 - B4F290AAF090ABF19BB6F3AECBF64145B71510A11510A11510A195ABE3A9C6F5 - 96B1F288A1EF7F97EE7C94ED7B94ED7B94ED7B94ED7B93ED7B94EE7B94ED7B94 - ED7C94ED7C94ED7C94ED7C94ED7D95ED8098EE88A1EF97B0F2ABC6F5A0B7E815 - 10A11510A11510A14145B7B1CDF6A3BCF39FB8F2A7C1F4B9D5F71510A11510A1 - 1510A14445B2D2E5E55C60BA1510A11510A11510A11510A11510A11510A11510 - A11510A11510A11510A1676BBCC6D2D2BDC5C5B5BABAB0B3B3B1B4B4B6BBBB6B - 6CB41510A11510A11510A11510A12C2AA9C4CDCDBBC0C0B4B7B7B2B4B4B4B7B7 - BCC1C1C4CCCCC1CCD44545B11510A11510A11510A11510A11510A11510A11510 - A11510A11510A1211EA58D93C9CFD7D7C8CDCDC2C5C5BEC0C0BCBDBDBEBFBFC1 - C3C3C8CCCCCED5D5CAD2DB6D6FC01510A11510A11510A11510A11510A11510A1 - 1510A11510A11510A11510A1AAB3DFDDE8F44847B61510A11510A11510A11510 - A11510A11510A11510A11510A11510A11510A11510A1ACB0DCDCE3EEDEE5EFE2 - E9EF7172C31510A11510A11510A11510A11510A11510A11510A11510A11510A1 - E5E8E8E1E3E3E0E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E3E3E3E3E3 - E3E4E5E5E7E8E8EBEDEDC7C8E31510A11510A11510A11510A1E6EAF3F2F6F6F0 - F3F3EEF1F1EDF0F0EDF0F0EDEFEF9B9AD1EAECECEAEBEBEBECECEDEFEFF1F4F4 - 4D4AB71510A11510A11510A1F5F9F9F4F8F8F2F6F6F1F5F5F1F5F5F2F6F6BCBE - E23E3CB21510A11510A11510A11510A16967C1F1F4F4EEF0F0ECEDEDEBECECEC - EDEDEFF1F1F2F6F61510A11510A11510A14D4BB7F4F7F7F1F4F4F1F3F3F2F4F4 - CACCE7231FA61510A11510A1221FA7CACCE7F2F4F4EFF1F1EDEEEEECECECEBEC - ECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79E9E9E9E9E9E9D9D9D9D - 9D9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999999999D9E9EA5AAAA - B2BBBBC3D3D3130FA3130FA3130FA34244B3BECECEACB6B69EA4A4979A9A94A8 - DE9DB5F0ACC5F3BDD9F7646EC9130FA3130FA3130FA36A76CDADC8F49CB5F090 - A8EE8AA3ED8CA4ED91AAEE99B1F0A3BCF2ACC7F4A2BAEB535BC3130FA3130FA3 - 130FA3130FA3130FA3130FA34F50B69EA6CAC5CFCFBDC5C5B5BABAAFB2B2ACAF - AFADB1B1B3B9B99297BC130FA3130FA3130FA3130FA39EABD0BFCFD8585CB813 - 0FA3130FA3130FA3130FA3130FA32A29AAA1B0CBBDCECEB9CACAB0BFC8686EB8 - 1E1BA6130FA3130FA3130FA3130FA32929AE6F7DD2AAC6F69CB8F391AAF18BA4 - F08DA6F097B2F2A9C6F66976CE130FA3130FA3130FA3626DCAB2CFF79DB8F48D - A7F1839CEF7E97EE7C95EE7C95EE7C94EE7C95EE7C94EE7C95EE7C95EE7D95EE - 7D95EE7D95EE7D95EE8098EE849DEE8EA7F09DB8F3B2CEF7626DC9130FA3130F - A3130FA3606AC9ADC7F59FB9F39DB7F2A8C1F4B9D5F8130FA3130FA3130FA343 - 45B4D2E6E6D2E4E49FABD04243B2130FA3130FA3130FA3130FA3130FA3130FA3 - 4F51B69EA6CBC4CFCFBEC5C5B6BBBBB1B4B4AEB1B1B1B3B3B6BABABFC6C62A27 - A9130FA3130FA3130FA3130FA3C0C7C7B9BDBDB3B5B5B1B2B2B1B3B3B6B9B9BD - C2C2C4CBCBCCD5D58A8FC73837AF130FA3130FA3130FA3130FA3130FA31F1DA7 - 5D5FBBBBC3D6CED5D5C8CECEC3C6C6BFC1C1BCBDBDBCBDBDBDBDBDBFC0C0C4C6 - C6C9CDCDCED4D4D5DDDDAAAFD46163BF201DA8130FA3130FA3130FA3130FA313 - 0FA3130FA32D2BAEB5BEE4DBE6F34646B8130FA3130FA3130FA3130FA3130FA3 - 130FA3130FA3130FA3130FA3130FA3130FA3AAAEDBDBE0ECDCE1E6E0E4E4E4E8 - E8A5A7D52E2BAD130FA3130FA3130FA3130FA3130FA3201DA84846B5E4E7E7E3 - E5E5E0E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E3E5E5E5 - E8E9E9EAECECEFF2F22F2CAE130FA3130FA3130FA35A58BEE6EAF4F3F7F7F2F5 - F5F1F4F4C6C8E44A48B74A47B6ECEDEDEBECECEBECECEDEFEFF1F4F44C4AB913 - 0FA3130FA3130FA38484CE8484CE8484CE8384CE7676C92F2CAE130FA3130FA3 - 130FA3130FA3130FA34B49B8E3E7F0EFF1F1ECEEEEEBEBEBECECECEDEEEEEFF1 - F1F3F6F6130FA3130FA3130FA34C4AB9F3F6F6F0F2F2EFF1F1F0F1F1F2F4F4BC - BDE2130FA3130FA3130FA3211EA8E5E8F1F0F2F2EEEFEFEDEDEDECECECEBEBEB - EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECECECECEC - ECECECECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEEEEEEEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9E9E9E9E9E9E9D9D - 9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC3 - D3D3120EA5120EA5120EA54143B5BDCCCCA9B2B29CA0A091A0CC8EA7EE97B0F0 - A5BEF3B8D3F791A3DF120EA5120EA5120EA56B77CFB1CBF59EB8F292AAEF8BA3 - EE8AA2ED8DA4EE90A9EF97B0F09EB8F2A6C1F3ADC8F5B3CEF68DA1E28EA2E28E - A2E28DA0E2ADC3EBC6D0D0C1C9C9BBC2C2B5B9B9AFB2B2ABADADAAABABABAEAE - AFB3B3B5BCBCBBC3C3BEC8C8C0CBCBBFCBCBBDC9C9BCC8C8BBC8C8B2BFC9949E - C3949FC5949FC59CA7C4B6C4C4B1BDBDABB6B6A9B3B3AAB5B5ADB9B9B2C0C08A - 9FE28CA1E28CA1E395ABE7ADC9F6A5C1F59BB5F392ABF18AA3F0879FEF89A3F0 - 93ADF2A4BFF59AB1E8120EA5120EA5120EA51C1BAAB0CCF4A7C3F695B0F388A2 - F0829AF07E96EE7D96EF7C95EE7D95EF7D95EF7D95EE7D95EE7D96EE7D95EE7E - 96EE7F98EE829AEF89A2F095AFF2A7C3F5BCD9F91C1BAA120EA5120EA5120EA5 - 9CB2E9A6C1F59CB5F39CB5F2A6C0F4B9D5F7120EA5120EA5120EA54244B5D2E4 - E4C8D7D7C4D0D0C3CFCFBAC5CE9CA4C99DA5CB9DA6CC9DA6CCC9D5D5C6D0D0C1 - C9C9BBC2C2B5B9B9B2B4B4AEB0B0AEAFAFB1B3B3B4B7B7BBC0C0C2CACAC7D0D0 - C9D3D3C8D1D1C3CBCBBCC2C2B7BABAB2B4B4B0B1B1B0B1B1B3B5B5B8BBBBBCC1 - C1C2C8C8C8D0D0CCD5D5B8C0D3A2A8CEA3A9CFA3AACFAEB5D1D0D9D9CED5D5CB - D1D1C6CBCBC2C5C5BFC1C1BEBEBEBCBCBCBBBBBBBDBDBDBEBEBEC1C2C2C4C6C6 - C9CCCCCED3D3D4DBDBDBE4E4E3EEEEBCC5E24747B8120EA5120EA5120EA5888D - CFDEE8EDD8E1EED6E0F0DAE5F2E0ECF6E6F2F94747BA120EA5120EA54847BAE9 - F3F9E9F2F8E4EDF5DFE7F1DDE3EDDBDFE6DADCDDDBDDDDDDDFDFDFE2E2E3E6E6 - E6EAEAC0C3DFB3B6DBB4B7DCB4B7DCC1C3DFE7EBEBE6E9E9E3E5E5E2E3E3E1E2 - E2E0E1E1E1E1E1E1E1E1E1E1E1E3E3E3E4E4E4E4E4E4E5E5E5E6E6E6E7E8E8EA - EBEBEDF0F0ABACDB120EA5120EA5120EA5120EA51F1DAA4A49BA4A49BA2D2BAF - 120EA5120EA54A47B8EDEFEFECEDEDECEDEDEDEFEFF0F3F34B49BA120EA5120E - A5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA5120EA512 - 0EA57575C9F2F5F5F0F2F2EEEFEFECEDEDEBEBEBEBEBEBEDEDEDEFF0F0F2F4F4 - 120EA5120EA5120EA52E2BAFF2F5F5F0F1F1EEF0F0EEF0F0F0F1F1F2F5F59FA0 - D9120EA5120EA5120EA53C3AB4E4E6EFF0F1F1EDEEEEEDEDEDECECECECECECEC - ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEFEFEFEFEFEFEFEFEFEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F79F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D9D9D - 9D9D9D9C9C9C9B9B9B9B9B9B9A9A9A9999999D9E9EA5AAAAB2BBBBC2D2D2100D - A8100DA8100DA84043B7BDCCCCA9B2B29AAAD18FA8EE8FA7EE97AFF0A5BEF2B6 - D1F69CB0E5100DA8100DA8100DA83E43BDB2CCF5A1B9F293ABEF8BA3ED89A1ED - 8BA3EE8DA4EF90A8EF95ADF09AB3F19FB9F2A4BDF3A7C1F4A8C2F4A8C2F4A7C1 - F3A4BDF3B1BED3B8BCBCB4B7B7AFB1B1ADAEAEAAABABAAAAAAAAACACACAFAFAF - B3B3B2B7B7B3BABAB3BABAB3BABAB0B7B7AFB6B6AFB7B7AFB8B8B1BABAB1BBBB - AFB9B9ACB5B5A6AFAFA2A9A99FA5A59CA2A29DA4A49FA7A7A3ABABA1BDF4A4BF - F5A4BFF5A1BCF49CB6F496B0F390A9F28AA3F1859EF0839DF0869FF08FA9F29E - B9F4B1CEF73235B7100DA8100DA8100DA86B79D1B3D0F8A1BCF591ABF287A1F1 - 829BF08098EF7E96EF7D96EF7E96EF7E96EF7E96EF7E96EF7E96EF8098EF849C - F088A0F091ABF1A0BBF4B3D0F86B79D1100DA8100DA8100DA82728B2B4D0F7A1 - BAF399B1F29AB3F2A7C0F4BAD5F8100DA8100DA8100DA84144B8CDDCDCC1CCCC - BCC5C5BAC1C1BBC2C2BEC6C6C1C9C9C1C9C9C1C9C9BEC5C5BBC1C1B8BDBDB4B8 - B8B2B4B4AFB0B0AEAEAEAFAFAFB0B2B2B5B7B7BABEBEBFC5C5C3CBCBC5CDCDC4 - CCCCC1C7C7BBC0C0B6B9B9B3B4B4B0B1B1B1B1B1B2B2B2B4B5B5B8BABABBBFBF - BFC4C4C3C8C8C6CDCDC9D0D0C9D1D1CAD1D1C9CFCFC8CDCDC5CACAC3C6C6C0C2 - C2BFC1C1BCBDBDBCBCBCBBBBBBBCBCBCBEBEBEBEBFBFBFC0C0C2C3C3C5C6C6C7 - CACACDD2D2D5DCDCDEE7E7CAD4E7100DA8100DA8100DA87A7FCCE2EBEBDBE1E1 - D6DADAD4D9DBD8DEE6DEE7EFE6F1F74647BC100DA8100DA84647BCE9F3F8E4EC - F3DFE6EBDDE1E4DBDEDEDADCDCD9DADAD9DADADADCDCDDDEDEDFE1E1E2E4E4E3 - E6E6E4E7E7E5E8E8E6E9E9E6E9E9E5E7E7E4E6E6E2E3E3E2E3E3E2E2E2E1E1E1 - E2E2E2E2E2E2E2E2E2E4E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E8E8E9EAEAECEE - EEEFF2F29D9ED8100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA810 - 0DA84847BBEEF0F0ECEEEEECEDEDEDEFEFEFF2F24947BC100DA8100DA8100DA8 - 100DA8100DA8100DA8100DA8100DA8100DA8100DA8100DA85857C0C8CAE7F1F4 - F4EFF1F1EEEFEFECEDEDEBEBEBEAEBEBECECECEDEEEEEFF0F0F1F4F4100DA810 - 0DA8100DA8100DA8F1F3F3EFF0F0EDEEEEEEEFEFEFF0F0F1F2F2F3F5F55857C0 - 100DA8100DA8100DA84947BBF0F1F1EEEFEFEDEDEDECECECECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEEEEEEEFEFEFEEEEEEEFEFEFEEEE - EEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F0F0F0F1F1F1F1F1F1F0F0F0F0F0F0F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D - 9D9D9C9C9C9B9B9B9B9B9B9A9A9A9D9E9EA5AAAAB2BBBBC3D3D30F0CAA0F0CAA - 0F0CAA3F42B8BCCBCBA8B8CE99B2F191A9EF92A9EF9AB3F1A8C2F4BBD6F78495 - DD0F0CAA0F0CAA0F0CAA6A77D2B2CCF69FB9F293ACF08CA5EE8AA1EE89A1EE8A - A2EE8CA4EF8EA6EF91A8EF94ACF096AFF198B2F19AB3F19AB3F199B1F196AFF1 - 97ADE9B1B3B3AFB0B0ADAEAEABABABAAAAAAAAAAAAAAABABABACACACAEAEACAE - AEACAFAFABAEAEA9ADADA7ABABA6A9A9A4A8A8A5A9A9A4A9A9A4A9A9A2A7A7A0 - A4A49CA0A0989B9B959898949696949696959999959FB193ADF294AEF294AEF2 - 92ABF28FA9F18CA5F188A1F0859EF0839BEF829AEF859DF08CA5F197B2F3A9C4 - F67B8CDB0F0CAA0F0CAA0F0CAA1A19AF9EB6EBAECAF79EB9F591AAF388A1F184 - 9CF18099F07F98F07E97EF7E97EF7F97EF8098EF8199EF839CF089A2F191ABF2 - 9EB8F4AFCAF7AAC3F01A19AF0F0CAA0F0CAA0F0CAA7D8DDBACC7F69BB3F394AD - F299B1F2A7C0F4BAD5F80F0CAA0F0CAA0F0CAA4043BBCAD7D7BEC6C6B6BCBCB3 - B7B7B2B5B5B5BABAB8BCBCB8BCBCB8BCBCB7BABAB5B8B8B3B5B5B2B3B3B1B2B2 - B0B0B0AEAFAFB0B0B0B1B2B2B4B6B6BABDBDBFC4C4C4CACAC5CCCCC5CCCCC2C8 - C8BCC0C0B7BABAB3B5B5B1B1B1B0B0B0B1B2B2B3B4B4B5B6B6B7B8B8B9BBBBBC - BFBFBEC1C1C0C4C4C1C5C5C2C5C5C1C4C4C1C4C4BFC2C2BEC0C0BEBEBEBCBDBD - BCBCBCBCBCBCBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C5C7C7CACC - CCD1D6D6DAE2E2A1A7D90F0CAA0F0CAA0F0CAAD9E3ECDEE6E6D7DCDCD2D5D5D2 - D5D5D6D9D9DDE3E3E5EDED4646BC0F0CAA0F0CAA4646BCE7EEEEE1E6E6DCDFDF - DADCDCD9DADAD9D9D9D8D8D8D8D9D9D9DADADBDCDCDDDEDEDFE0E0E0E1E1E0E2 - E2E1E3E3E2E4E4E2E4E4E3E4E4E2E3E3E1E1E1E2E2E2E1E1E1E3E3E3E3E3E3E3 - E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7EAEAEAEBECECEDEFEF - F0F2F2C7C9E76564C60F0CAA0F0CAA0F0CAA0F0CAA0F0CAA1D1BAF4846BC9B9B - D7EDEFEFECEDEDECECECECEDEDEFF0F06463C54847BC4947BD4947BD4948BD49 - 47BD4947BD4947BD4947BD6665C79E9FDAD6D9ECF2F5F5F1F3F3EFF1F1EEEFEF - EDEDEDECECECEBECECEBEBEBECECECECEDEDEEEFEFF0F2F24846BC4846BC4846 - BC4846BCF0F2F2EFF0F0EEEEEEEDEEEEEEEEEEEFF0F0F1F2F2E4E5EF5755C148 - 47BC4847BC4846BC9B9BD7EFF0F0EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEE - EEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9D9D - 9D9C9C9C9B9B9B9A9A9A9D9F9FA5AAAAB2BBBBC3D3D30D0AAC0D0AAC0D0AAC3D - 40BABED3DEACC5F59EB7F298B1F19AB2F1A4BCF3B1CCF6C3DEF9555ECA0D0AAC - 0D0AAC0D0AAC7381D7AFC9F69EB8F393ABF18DA4EF8AA2EF8AA2EF8AA2EF8AA2 - EF8BA2EF8BA4EF8CA5F08EA6F08FA7F090A7F090A7F08EA7F08DA6F08CA4F0A1 - AAC8AEAEAEADAEAEACACACABABABABABABAAABABAAAAAAAAAAAAA8A9A9A8A9A9 - A6A7A7A5A6A6A3A4A4A1A2A29FA0A09D9F9F9C9E9E9C9E9E9A9C9C989A9A9697 - 979393939192929090908F90908F91918D95A989A2F189A2F189A2F189A1F188 - A0F1859FF1849CF0839BF0829AF0829AF0839CF088A2F192ACF3A0BBF5B2CFF8 - 3B40C00D0AAC0D0AAC0D0AAC3033BBB3CEF5ADC9F79FBAF593AEF38CA6F287A1 - F1859EF1839CF1839CF1849CF1869EF188A1F18DA6F294AFF39FBAF5AEC9F7B3 - CEF53033BB0D0AAC0D0AAC0D0AAC3033BBB5D0F8A3BCF495ADF291A8F198B0F2 - A6C0F5BBD6F80D0AAC0D0AAC0D0AAC3E41BECAD6D6BDC4C4B4B8B8AFB1B1AFB0 - B0B0B2B2B2B3B3B2B4B4B3B4B4B2B3B3B1B2B2B2B2B2B1B1B1B0B1B1B0B0B0B0 - B0B0B0B0B0B2B2B2B6B8B8BCBFBFC1C6C6C7CFCF9BA1C9A6ACCBC5CDCDBFC4C4 - BABDBDB5B6B6B2B3B3B2B2B2B2B2B2B3B3B3B3B4B4B5B5B5B7B7B7B8B8B8B9BB - BBBABBBBBABBBBBCBDBDBCBDBDBCBDBDBCBDBDBBBCBCBCBCBCBCBCBCBDBDBDBD - BDBDBEBEBEBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C4C5C5C8CACACFD3D3 - D7DEDE777ACB0D0AAC0D0AAC0D0AACE5EFEFDDE4E4D6DADAD1D4D4D2D4D4D6D9 - D9DDE2E2E6EEEE4444BE0D0AAC0D0AAC4444BEE4EAEADEE2E2D9DBDBD7D8D8D7 - D8D8D8D8D8D7D8D8D8D8D8D9DADADBDBDBDCDCDCDDDEDEDEDEDEDFE0E0DFE0E0 - E0E0E0E1E1E1E1E2E2E1E1E1E1E1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E4E4E5E5 - E5E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAECEDEDEDEFEFF0 - F1F1F1F3F3F2F5F5C8C9E7BABBE3BABBE3D5D8ECF1F4F4F0F2F2EFF0F0EDEEEE - ECEDEDECECECECEDEDEDEEEEEFF0F0F0F2F2F1F3F3F2F5F5F3F5F5F3F5F5F3F5 - F5F2F5F5F2F5F5F2F4F4F1F3F3F0F2F2EFF1F1EEEFEFEEEFEFEDEEEEEDEDEDEC - ECECECECECECECECECECECEDEDEDEEEEEEEFF0F0F0F2F2F1F2F2F1F2F2F0F2F2 - EFF0F0EEEEEEEDEDEDEDEDEDEEEEEEEFEFEFF0F1F1F1F2F2F1F3F3F2F3F3F1F3 - F3F1F2F2EFF0F0EEEFEFEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7A2A2A2A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9E9E9E9D9D9D - 9B9B9B9A9A9A9D9F9FA6ABABB2BBBBC3D3D30C09AE0C09AE0C09AE3D40BDC3DF - F9B3CDF6A8C1F4A3BCF3A6BFF4B0CAF6BED9F8A8BEED0C09AE0C09AE0C09AE0C - 09AE9CB1EAABC4F59CB4F292AAF08CA4EF8BA3EF8BA3EF8BA2EF8BA3F08BA3F0 - 8BA2F08AA2EF8AA2F08BA3F08BA3F08BA2F08BA2F089A1F089A1F08DA2E7ADAD - ADADADADADADADADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A3 - A3A3A1A1A19F9F9F9C9C9C9A9A9A999999989898969696959595939393919191 - 9090908F8F8F8E8E8E8D8D8D8992B1859DF0859DF0859DF0849DF0839CF0839B - F0839BF0839BF0829BF0829BF0839BF0869EF18DA5F299B3F4A8C3F798AFEB18 - 17B30C09AE0C09AE0C09AE2E32BCB3CFF5B0CDF8A5C0F69BB5F594AEF490AAF3 - 8EA7F28DA7F28EA8F290A9F395AFF39CB6F5A5C0F6B1CDF8B4CFF52F33BC0C09 - AE0C09AE0C09AE1817B39AB0EBAAC4F69BB4F491A8F28FA6F298AFF3A7C0F5BC - D6F80C09AE0C09AE0C09AE3D41C1CAD6D6BDC4C4B5B8B8AFB0B0ADADADAEAFAF - AFB0B0B0B1B1B1B2B2B1B1B1B2B2B2B2B2B2B2B2B2B2B2B2B3B3B3B3B3B3B3B3 - B3B5B5B5B9BABABFC2C2C6CCCC3C3CB80C09AE0C09AE5F62BFC4CACABDC1C1B8 - BABAB4B5B5B3B3B3B3B3B3B4B4B4B4B4B4B5B5B5B5B5B5B6B6B6B7B7B7B7B8B8 - B8B9B9B8B9B9BABBBBBABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBF - BFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C9CACACFD2D2D6DCDC90 - 95D30C09AE0C09AE0C09AED8E2ECDFE7E7D9DEDED5D8D8D5D8D8D9DDDDE0E6E6 - E8F0F00C09AE0C09AE0C09AE4443BFE3E8E8DDE0E0D9DADAD7D7D7D7D7D7D8D8 - D8D8D8D8D9D9D9DADADADBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDEDEDEDFDFDFE0 - E0E0E1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9EAEAEAEBECECECEDEDEDEEEEEEEF - EFEFF1F1F0F1F1F0F2F2F0F2F2F0F1F1F0F1F1EFF0F0EEEFEFEDEDEDECECECEC - ECECECECECEDEDEDEEEEEEEEF0F0EFF0F0EFF1F1F0F1F1F0F1F1F0F1F1EFF1F1 - EFF1F1EFF0F0EFF0F0EFF0F0EEEFEFEDEEEEEDEDEDECEDEDECECECECECECECEC - ECECECECECECECEDEDEDEDEDEDEFEFEFEFF0F0EFF0F0F0F1F1EFF0F0EFEFEFEE - EEEEEEEEEEEDEDEDEDEDEDEEEEEEEEEFEFEFF0F0EFF0F0F0F1F1F1F1F1EFF0F0 - EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3 - F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A3A3 - A3A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C9A - 9A9A9D9F9FA6ABABB2BCBCC3D3D30A08B10A08B10A08B13B40C3CDE9FBBFD9F9 - B6D0F7B3CCF6B6D1F7C0DBF8A7BDED1616B60A08B10A08B10A08B13A3FC3B6D0 - F7A6BFF498B1F291A9F18DA5F08CA3F08CA3F08CA4F08CA3F08BA3F08BA3F08B - A3F08BA3F08BA2F08BA2F08AA2F08AA2F08AA2F08AA2F08AA1F0A0A9C6AEAEAE - AEAEAEAEAEAEADADADACACACABABABAAAAAAAAAAAAA8A8A8A6A6A6A4A4A4A2A2 - A2A0A0A09E9E9E9B9B9B99999998989897979795959594949493939391919190 - 90908F8F8F8E8E8E8995BF859DF1859DF1849DF1849CF1849CF1849CF1849CF1 - 839CF1839BF1839BF1839BF1859DF189A2F291AAF39DB8F5ACC8F77A8BDE0A08 - B10A08B10A08B10A08B11616B695AAE8B8D4F9AECAF8A6C2F7A1BCF69EB9F59C - B7F59EB9F5A1BCF6A6C2F6AFCAF8B7D4F994AAE82224BA0A08B10A08B10A08B1 - 0A08B17B8CDEAEC9F7A0B8F494ACF28DA4F18EA5F197AFF3A8C1F5BCD7F90A08 - B10A08B10A08B13A40C4C9D7DBBFC5C5B5B8B8B1B1B1AFAFAFB0B0B0B1B1B1B2 - B2B2B2B2B2B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B5B7B8B8 - BABDBDC1C5C5A5ABCB0A08B10A08B10A08B10A08B1C7CECEBFC3C3B9BBBBB6B6 - B6B4B4B4B5B5B5B4B4B4B5B5B5B6B6B6B6B6B6B6B6B6B8B8B8B8B8B8B9B9B9BA - BABABABABABBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1 - C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C6C6C6C9CACACED0D0D6DBDBB7BDDD0A08 - B10A08B10A08B1868BD5E4ECECDFE5E5DCE1E1DCE1E1E0E5E5E6EDED969BDA0A - 08B10A08B10A08B16C6DCCE2E7E7DCDFDFD9DADAD8D8D8D8D8D8D9D9D9D9D9D9 - DADADADADADADBDBDBDDDDDDDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E1E1E1E2E2 - E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E7 - E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBECECECECECECEDEDEDEDEDEDEEEE - EEEFEFEEEFEFEEEFEFEEEFEFEDEEEEEDEDEDECEDEDECECECECECECEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEEEFEFEE - EEEEEDEEEEEDEDEDEDEDEDECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEEEFEFEEEEEEEEEEEEEDEEEEEDED - EDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFF0F0EFF0F0EFF0F0EFEFEFEFEFEFEF - EFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A5A5A5A4A4A4 - A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09E9E9E9D9D9D9C9C9C9B9B9B9D9F - 9FA5AAAAB2BBBBC2D1D10907B30907B30907B33A40C5CEE9FBCBE5FBC4DFF9C2 - DDF9AEC6F16A78D71415B80907B30907B30907B30907B39CB1ECAEC7F6A0B8F4 - 96AEF290A7F08DA5F18DA5F18DA4F18DA4F18CA4F18CA4F18CA4F18CA4F18CA3 - F18BA3F18BA3F18BA3F18BA3F18BA2F18BA2F18AA2F18FA3E8AEAEAEAEAEAEAE - AEAEAEAEAEAEAEAEADADADACACACABABABA9A9A9A8A8A8A6A6A6A4A4A4A2A2A2 - 9F9F9F9D9D9D9B9B9B9999999898989696969595959393939292929191919090 - 908F8F8F8997C5859DF1859DF1859DF1859DF1859DF2859DF2859DF2849CF184 - 9DF2849CF2849CF2859DF2879FF28BA5F394AEF4A0BAF6AFCAF87A8BDF0907B3 - 0907B30907B30907B30907B3383FC593A9E9BAD7FAB5D1F9B1CEF8B0CDF8B1CD - F8B5D1F9B9D6F993A8E8505BCE0907B30907B30907B30907B30907B37B8CDFB1 - CCF8A3BCF596AFF48FA6F28AA2F28FA6F299B1F4AAC4F6BED9F90907B30907B3 - 0907B33A3FC5C6D6E4BFC6C6B7BABAB3B3B3B0B0B0B2B2B2B3B3B3B4B4B4B4B4 - B4B5B5B5B5B5B5B5B5B5B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B8B9B9BCBEBEC2 - C7C7B2B8CD0907B30907B30907B31514B5C8CFCFC0C4C4BABCBCB7B7B7B5B5B5 - B6B6B6B6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B8B8B8B9B9B9BABABABABABABBBB - BBBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C2C2C2C3 - C3C3C4C4C4C4C4C4C5C5C5C7C7C7C9CACACED0D0D4D8D8DCE3E32424BA0907B3 - 0907B31616B7BFC6E6E5EDEDE3EAEAE4EAEAE7EEEEBFC6E71616B70907B30907 - B30907B3BCC2E2E1E5E5DCDEDED9DADAD7D8D8D9D9D9DADADADADADADBDBDBDC - DCDCDCDCDCDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E2E2E2 - E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9 - E9E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEBECECEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDECEDEDECECECECECECECECECECECECECECEC - ECEDEDECEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDEEEEEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFF0F0EFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A5A5A5A4A4A4A3 - A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9E9E9E9C9C9C9B9B9B9E9F9FA4A9A9 - B0B8B8BFCECE0706B50706B50706B51313B9393EC7393EC7393EC72022BE0706 - B50706B50706B50706B50706B50706B57B8BE0B3CDF7A6BEF59AB3F393ACF28F - A7F18EA5F18EA5F18EA5F18DA5F18DA5F18DA5F18DA4F18CA4F18CA4F18CA4F1 - 8CA4F18CA3F18CA4F18BA3F18BA3F18BA3F18BA3F2A1AAC8AEAEAEAFAFAFAFAF - AFAEAEAEAEAEAEADADADACACACABABABA9A9A9A7A7A7A6A6A6A3A3A3A0A0A09E - 9E9E9C9C9C9A9A9A999999979797969696949494939393929292919191909090 - 899AD9869EF2869EF2869EF2869EF2869EF2869EF2859EF2859EF2859DF2859D - F2859DF2849DF2859FF288A0F38DA6F396AFF5A2BCF6AFCBF88497E41314B907 - 06B50706B50706B50706B50706B51313B9434BCB6573D86573D86573D8434BCB - 1F21BE0706B50706B50706B50706B50706B51314B98597E4B1CCF8A3BEF698B1 - F591A8F28CA3F28BA2F191A8F29CB4F4AEC7F7C2DDFA0706B50706B50706B539 - 3FC7C0D6EFC1C7C7B8BBBBB4B4B4B1B1B1B3B3B3B4B4B4B5B5B5B6B6B6B5B5B5 - B6B6B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9B9BCBEBEC1C5C5C8CD - CD6A6EC50706B51413B78386C8C6CCCCC0C3C3BBBDBDB8B9B9B6B6B6B6B6B6B7 - B7B7B7B7B7B7B7B7B8B8B8B8B8B8B9B9B9BABABABABABABABABABBBBBBBDBDBD - BDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C3C3C3C4C4C4C4C4C4C5C5 - C5C5C5C5C6C6C6C7C7C7C9CACACDCECED2D5D5D9DEDE9CA2D90706B50706B507 - 06B50706B55C5FCCA3A8DFA3A8E05C5FCC0706B50706B50706B50706B54E4FC8 - E3E8E8DFE1E1DBDDDDD9D9D9D9D9D9DADADADBDBDBDBDBDBDBDBDBDDDDDDDEDE - DEDFDFDFDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E4 - E4E4E5E5E5E7E7E7E7E7E7E6E6E6E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEA - EAEAEAEBEBEBEBEBEBECECECECECECECECECECECECECECECECECECECECECECEC - ECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEDEDED - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F1F1F1F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7A6A6A6A6A6A6A5A5A5A4A4A4A3A3 - A3A3A3A3A2A2A2A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9FA0A0A4A7A7ADB4B4BA - C7C70605B80605B80605B80605B80605B80605B80605B80605B80605B80605B8 - 0605B80605B81F21C091A5E9B4CEF8A8C1F69DB6F496AFF392A9F290A7F28FA6 - F28EA6F28EA6F28EA6F28EA5F28EA5F28DA5F28DA5F28DA5F28DA5F28DA4F28C - A4F28CA4F28CA4F28CA4F28CA4F28CA4F290A5EAB0B0B0AFAFAFB0B0B0AFAFAF - AFAFAFAEAEAEADADADABABABABABABA8A8A8A6A6A6A4A4A4A2A2A29F9F9F9D9D - 9D9B9B9B9A9A9A989898979797969696949494939393929292919191899CD987 - 9FF2879FF2869EF2869EF2879FF3869EF2869EF3859EF2869EF3869EF3859EF3 - 859DF3859DF3879FF38AA2F48EA8F496B0F5A1BBF7ACC7F8A3BBF2414ACC0605 - B80605B80605B80605B80605B80605B80605B80605B80605B80605B80605B806 - 05B80605B80605B80605B8363CC8A3BBF1AEC9F8A3BCF698B1F492AAF38DA4F3 - 8AA2F28CA2F294AAF39FB7F5B1CAF8C5DFFB0605B80605B80605B8383EC9BBD3 - F9B3C3E1AAB6D7A4AFD3A2ACD2ABB0C3ACB1C4ADB2C4B1B4BDB7B7B7B7B7B7B7 - B7B7B7B7B7B8B8B8B8B8B8B8B8B8B8B8B8B9BABABCBDBDBFC1C1C4C8C8C8CDCD - CAD0D0CAD0D0C7CCCCC3C6C6BEC0C0BABBBBB8B8B8B7B7B7B8B8B8B8B8B8B8B8 - B8B8B8B8B8B8B8BABABABABABABABABABBBBBBBCBCBCBDBDBDBDBDBDBFBFBFBF - BFBFBFBFBFC1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C6C6C6 - C7C7C7C8C8C8C9C9C9CCCDCDD0D2D2D5D9D9DDE3E3595CCB0605B80605B80605 - B80605B80605B80605B80605B80605B80605B80605B83131C2D8DDE8E1E4E4DE - E0E0DBDCDCD9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDEDEDEDFDFDFE0E0E0 - E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7 - E7E7E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEC - ECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A4A4A4 - A3A3A3A2A2A2A1A1A19F9F9F9E9E9E9D9D9D9E9F9FA3A5A5AAAFAFB4BEBE0403 - BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA353BCA7B - 8BE2BBD5F9B2CBF7A7C1F69FB7F498B1F394ABF391A8F28FA7F28FA7F28FA7F2 - 8FA6F28FA6F28FA6F28FA6F38EA6F28EA6F28EA6F38DA5F28DA5F28DA5F28DA5 - F28DA4F28DA4F28DA5F38DA4F38DA4F3A2ABC9B0B0B0B0B0B0B0B0B0AFAFAFAF - AFAFAEAEAEADADADABABABAAAAAAA8A8A8A6A6A6A3A3A3A0A0A09E9E9E9C9C9C - 9B9B9B9A9A9A98989897979796969694949494949491949E889FED88A0F388A0 - F388A0F3879FF2879FF3879FF3879FF3879FF3869FF3869FF3869EF3869EF386 - 9EF3859EF387A0F38AA2F48EA7F495AEF59EB8F6A7C3F8B2CDF98EA3EA4049CE - 0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403BA0403 - BA4049CE8EA4EAB3CEF9A9C3F8A0B9F697B0F591A8F48DA4F48BA2F38BA1F28E - A5F395ACF4A2BAF5B2CCF8C6E0FB0403BA0403BA0403BA363CCAB8D1F8A8BFF6 - 9BB1F494A9F392A6F293A7F293A7F294A8F295A8F296A9F296A9F197AAF19DAD - E6A0AEE3A1AEE3A1AFE3AAB3D4ABB4D5ADB7D7B8BDC8C0C2C2C2C5C5C3C6C6C3 - C7C7C1C4C4BEC1C1BCBDBDBABABAB8B9B9B9B9B9B8B8B8B9B9B9B9B9B9B9B9B9 - BABABABABABABBBBBBBBBBBBBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0 - C0C2C2C2C3C3C3C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C8C8C8C8C8C8C9 - C9C9CACACACCCCCCCFD0D0D3D6D6D9DDDDDEE4E48F93D81212BD0403BA0403BA - 0403BA0403BA0403BA0403BA0403BA696BD1D7DCE7E2E5E5DEE0E0DCDEDEDBDB - DBDADBDBDBDBDBDCDCDCDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E1 - E1E1E1E1E1E2E2E2E3E3E3E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E8E8E8 - E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEDED - EDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F1F1F1F2F2F2F2F2F2F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7A9A9A9A7A7A7A6A6A6A6A6A6A5A5A5A4A4A4A3A3A3A2 - A2A2A1A1A1A0A0A09F9F9F9D9D9D9E9F9FA0A2A2A5A9A9ACB3B38890BE8E97C5 - 919ED193A7EA94A7EA93A6EA92A5EA91A5EA9CB1EEBDD7F9B8D2F9B3CCF8ACC5 - F7A4BDF69EB6F598B0F495ACF491A9F390A8F390A8F390A7F390A7F390A7F38F - A7F38FA7F390A7F38FA6F38FA7F38FA7F38EA6F38EA6F38EA6F38EA5F38EA6F3 - 8EA5F38DA5F38DA5F38DA5F392A6EBB0B0B0B0B0B0B0B0B0B0B0B0AFAFAFAFAF - AFAEAEAEACACACABABABA9A9A9A6A6A6A4A4A4A2A2A29F9F9F9D9D9D9C9C9C9A - 9A9A999999989898949AAE8F9CCA8B9FE189A1F489A1F488A0F388A1F488A0F3 - 88A0F4879FF388A0F488A0F487A0F4879FF4879FF4879FF4879FF4869FF4869E - F4869EF487A0F48AA2F48DA6F593ACF599B3F6A1BBF7A9C4F8B1CDF9ADC7F677 - 88E35663D8333ACC333ACC343ACC343ACC333ACC5663D87789E3ADC7F6B2CDF9 - ABC6F8A4BDF79CB4F695ADF591A8F48CA4F48AA1F38AA1F38BA2F38EA6F497AE - F5A4BBF6191BC40302BC0302BC0302BC0302BC3439CCB3CCF8A5BCF59BB0F495 - A9F393A7F394A7F294A8F295A9F295A9F296AAF297AAF297AAF298ABF299ABF2 - 9AACF29BADF29BADF29DAEF19EB0F1A8B5E4BCBDBDBDBFBFBEC0C0BEC0C0BDBE - BEBBBCBCBBBBBBBABABAB8B8B8B9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBB - BBBBBCBCBCBDBDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2 - C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7C7C7C7C7C9C9C9C9C9C9CACACACBCB - CBCDCDCDCECFCFD1D2D2D5D7D7D9DCDCDEE2E2D3D9E49094DA676AD23C3DC93D - 3EC95A5CD08386D8C9CEE5E3E8E8E1E4E4DEE0E0DDDEDEDBDCDCDBDBDBDADADA - DCDCDCDDDDDDDEDEDEDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3 - E3E3E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9 - E9E9E9E9E9EBEBEBECECECECECECECECECECECECEDEDEDEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7AAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2 - A2A1A1A19F9F9F9E9E9E9E9F9F9FA0A0A0A3A3A5A9A9AAB0B0ADB6B6B0BABAB2 - C4DAB5CDF8B3CDF8B3CDF8B2CBF8B0C9F7ADC6F7AAC2F6A4BDF6A0B8F59CB4F5 - 98B0F595ADF493AAF492A9F491A9F491A9F491A9F491A8F490A8F391A8F490A7 - F390A8F490A8F490A7F490A7F48FA7F48FA7F48FA7F48FA7F48FA6F48EA6F48E - A6F48EA6F48EA6F48EA5F4A3ACC9B0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAE - ACACACABABABA9A9A9A7A7A7A5A5A5A3A3A3A0A0A09B9EA8979EB8939FC78EA0 - DD8AA2F48AA2F48AA2F48AA2F48AA2F489A2F489A1F489A1F489A1F489A1F489 - A1F488A0F488A0F488A0F488A0F488A0F487A0F487A0F4879FF4879FF4879FF4 - 869FF487A1F489A1F48CA4F590A8F594AEF69AB4F7A0BAF7A5C0F8AAC5F9AEC9 - F9B1CCF9B2CEF9B3CFFAB3CFF9B1CDF9AFCAF9ACC7F9A8C1F8A1BBF79CB5F797 - B0F691AAF58FA6F58CA3F48AA1F48AA1F48BA1F48CA3F48FA6F598AEF5A2B9F6 - 8496E90101BE0101BE0101BE0101BE3036CDAFC6F7A3B9F699AFF494A8F393A7 - F394A8F294A8F295A9F396AAF397AAF398ABF398ABF399ACF39BADF29AADF29C - AEF29DAEF29DAFF29EB0F2A0B1F2B4B8C9BABBBBBABBBBBBBCBCBABBBBBABABA - B9BABAB9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBBBBBBBCBCBCBCBCBCBDBD - BDBDBDBDBEBEBEBFBFBFBFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C4C4C4C4 - C4C4C6C6C6C6C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACCCCCCCBCBCBCDCDCD - CFCFCFCFD0D0D3D4D4D6D8D8D8DBDBDCE0E0DFE3E3E1E5E5E2E7E7E3E8E8E3E7 - E7E2E6E6E0E4E4DFE2E2DDDFDFDCDDDDDBDBDBDBDBDBDBDBDBDBDBDBDCDCDCDD - DDDDDEDEDEDEDEDEDEDEDEE1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5 - E5E5E5E6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEAEA - EAEBEBEBEBEBEBECECECECECECECECECEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2 - A1A1A19F9F9F9E9E9E9E9F9F9E9F9F9FA1A1A1A5A5A2A7A7A3A8A8A3AAAAA6BB - E8A6BEF6A5BDF6A4BCF6A3BBF6A0B9F69EB6F59BB4F599B1F596AFF495ACF494 - ABF493AAF492AAF492AAF492AAF492A9F492A9F491A9F491A9F491A9F491A8F4 - 91A8F491A8F490A8F490A8F490A8F490A7F48FA7F48FA7F48FA7F48FA7F48FA6 - F48FA6F48EA6F493A7ECB0B0B0B0B0B0B0B0B0AFAFAFAFAFAFAEAEAEADADADAC - ACACA2A8BC9DA6C499A5CD92A4E08DA4EF8CA4F58BA3F48BA3F48BA3F48BA3F4 - 8BA3F58BA3F58BA3F58AA2F58AA2F58AA2F58AA2F58AA2F589A2F589A1F589A1 - F589A1F589A1F589A1F588A1F588A0F588A0F588A0F588A0F587A0F5879FF587 - 9FF588A0F588A1F58AA3F58CA5F68FA8F693ACF697B0F79AB4F79DB7F89FB9F7 - A1BBF8A2BCF8A2BCF8A0BAF89FB9F89BB5F798B2F796AEF691AAF68FA7F58CA5 - F48CA3F48BA2F48BA1F48BA1F48BA2F48DA3F490A7F495ACF59DB5F6A8C0F764 - 72E05D69DD5E6ADD5C69DC6F7EE3A7BEF69FB5F699AEF496AAF394A8F395A9F3 - 95A9F397ABF397ABF398ABF398ABF399ACF39BADF39BAEF39CAEF39DAFF39DAF - F39EB0F39FB0F3A0B1F3A5B3E8BABABABABABABABABABABABAB9B9B9B9B9B9BA - BABABABABABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBE - BFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C6C6C6C7C7 - C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACACACACCCCCCCCCCCCCDCDCDCECECECF - CFCFD1D1D1D3D4D4D6D7D7D8DADAD9DCDCDBDEDEDDE0E0DEE1E1DEE0E0DEE0E0 - DCDEDEDCDDDDDBDCDCDADBDBDBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDF - DFE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7 - E7E7E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEBEBEBECECEC - ECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEFEFEF - EFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F0F0F0F0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7ADAD - ADABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0 - A0A09E9E9E9E9E9E9C9D9D9C9D9D9C9D9D9B9D9D9A9C9C9A9C9C999EA69CB2EF - 9CB3F59AB3F599B2F598B1F597AFF496AEF595ACF495ACF594ABF594ABF593AB - F593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9F592A9F591A9F591 - A9F591A9F591A8F591A8F590A8F590A8F590A8F590A8F590A7F58FA7F58FA7F5 - 8FA7F58FA7F5A0ABD2A3ACCA9FABD29FABD296A8E396A7E38EA5F58DA5F58DA5 - F58DA5F58DA5F58CA4F58CA4F58CA4F58CA4F58CA4F58CA4F58BA3F58CA4F58C - A4F58BA3F58BA3F58BA3F58BA3F58AA3F58AA2F58AA2F58AA2F58AA2F58AA2F5 - 89A1F589A1F589A1F589A1F589A1F588A1F588A1F588A0F588A0F588A0F587A0 - F587A0F588A0F588A1F58AA2F58CA4F68CA6F68EA7F690A9F692ABF693ACF694 - ADF694ADF693ABF692ABF690A9F68FA7F68DA6F68CA4F58BA2F58CA3F58AA2F5 - 8BA2F58CA2F58BA2F58CA3F58CA3F58FA6F594AAF599B1F59FB7F6A7BFF7ACC4 - F8AEC5F8ACC3F8A7BEF7A1B6F69BB1F598ACF595AAF494A9F496AAF496AAF497 - ABF399ACF499ACF399ACF39BADF49BAEF49CAEF49DAFF49EB0F39EB0F39FB1F3 - A0B1F3A0B2F3A2B3F3B0B6CFB9B9B9BABABABABABABABABABABABABABABABABA - BABBBBBBBBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C5C5C5C7C7C7C7C7C7C8C8C8 - C9C9C9CACACACBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCECECECFCFCFCFCFCFD1D2 - D2D2D2D2D3D4D4D5D6D6D6D7D7D8D9D9D9DADAD9DADAD9DBDBDADBDBD9DADAD9 - DADADBDBDBDADBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1 - E1E1E1E2E2E2E2E2E2E4E4E4E4E4E4E4E4E4E5E5E5E6E6E6E7E7E7E7E7E7E7E7 - E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDEDEEEEEEEE - EEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 - F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2 - F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7AEAEAEACACAC - ABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A1A1A19F9F - 9F9E9E9E9C9C9C9B9B9B999999989898969696969797949595959EB897AEF597 - AEF596AEF595ADF595ADF595ACF595ACF595ACF594ACF594ACF594ABF594ABF5 - 94ABF593ABF593ABF593ABF593AAF593AAF592AAF592AAF592AAF592A9F592A9 - F592A9F591A9F591A9F591A9F591A8F590A8F590A8F590A8F590A8F590A7F590 - A7F58FA7F58FA7F58FA7F58FA7F58FA7F68EA6F58EA6F58EA6F58EA6F68EA6F6 - 8EA6F68DA5F58DA5F58DA5F58DA5F58DA5F68CA4F58CA4F58CA4F68CA4F68CA4 - F68CA4F68CA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA3F68AA2F68AA2F68A - A2F68AA2F68AA2F689A2F689A1F689A1F689A1F689A1F688A1F688A0F688A0F6 - 88A0F688A0F687A0F688A1F688A1F689A1F689A2F68AA2F58BA4F58BA3F58BA4 - F58BA3F58AA3F58BA3F58BA2F68BA2F68AA1F68BA2F68BA2F58BA2F58BA3F58C - A3F58DA4F58DA3F58DA4F58FA5F592A9F595ACF69AB1F69EB4F7A2B8F7A2B8F7 - A1B7F79EB5F69BB1F698ADF596ABF496AAF496AAF497ABF497ABF498ACF499AC - F49AACF49AADF49BAEF49BAEF49CAFF49EB0F49EB0F39FB1F49FB1F3A1B2F3A1 - B2F3A3B4F4A5B5F0B8B9BDB9B9B9B9B9B9BABABABABABABABABABBBBBBBBBBBB - BBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC1C1C1C1C1C1C2C2 - C2C2C2C2C3C3C3C3C3C3C4C4C4C6C6C6C6C6C6C7C7C7C8C8C8C8C8C8CACACACB - CBCBCCCCCCCCCCCCCDCDCDCECECECECECECFCFCFCFCFCFD1D1D1D2D2D2D2D2D2 - D3D3D3D5D5D5D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9DADAD9D9D9DADA - DADBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E3 - E3E3E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9 - EAEAEAEAEAEAEBEBEBEBEBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEE - EEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F2F2F2F1F1F1F1F1F1F2F2F2F1F1F1F2F2F2F1F1F1F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4 - F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AEAEAEADADADAB - ABABAAAAAAA9A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A2A2A2A0A0A09F9F9F - 9D9D9D9B9B9B9A9A9A98989896969696969694949493939395A3D096AEF696AE - F696ADF696ADF696ADF695ADF695ADF695ADF695ACF695ACF695ACF694ACF694 - ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693AAF692AAF692AAF6 - 92AAF692A9F692A9F691A9F691A9F691A9F691A9F691A8F690A8F690A8F690A8 - F690A8F690A7F690A7F68FA7F68FA7F68FA7F68FA6F68FA6F68FA7F58EA6F68E - A6F68EA6F68EA6F68DA5F68DA5F68DA5F58DA5F68DA5F68DA5F68DA5F68DA5F6 - 8CA4F68CA4F68CA4F68CA4F68BA4F68BA3F68BA3F68BA3F68BA3F68BA3F68AA2 - F68AA2F68AA2F68AA2F68AA2F689A2F689A2F689A1F689A1F689A1F688A1F688 - A1F688A0F688A0F688A0F688A0F688A0F688A0F688A0F688A0F689A1F689A1F6 - 89A1F68AA1F68AA1F68AA2F68AA2F68BA2F68CA3F58CA3F58CA3F58DA4F68EA4 - F68EA5F68FA5F68FA5F690A7F692A8F695ABF696ACF698AFF699AFF69AAEF698 - ADF697ADF597ABF596ABF596AAF597ABF597ABF598ACF599ACF599ADF59AADF5 - 9BAEF49CAEF49CAFF49DAFF49EB0F49FB0F49FB1F4A1B2F4A1B2F4A2B3F4A3B4 - F4A4B4F4ADB6D9B8B8B8B9B9B9B9B9B9BBBBBBBBBBBBBBBBBBBBBBBBBCBCBCBD - BDBDBDBDBDBEBEBEBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCC - CCCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D5 - D5D5D5D5D5D7D7D7D7D7D7D8D8D8D8D8D8DADADADADADADADADADCDCDCDCDCDC - DDDDDDDEDEDEDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4 - E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E8E8E8EAEAEAEBEBEBEB - EBEBECECECECECECEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFEFEFEF - F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F1 - F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B0B0B0AFAFAFAEAEAEACACACABAB - ABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9D - 9D9D9C9C9C9A9A9A98989897979796969694949493949996A9E397AEF697AEF6 - 96AEF696AEF696AEF696ADF696ADF696ADF695ADF695ADF695ACF695ACF695AC - F694ACF694ACF694ACF694ABF694ABF693ABF693ABF693ABF693AAF693AAF693 - AAF692AAF692AAF692AAF692A9F691A9F691A9F691A9F691A9F691A8F691A8F6 - 90A8F690A8F690A8F690A8F690A7F68FA7F68FA7F68FA7F68FA7F68FA6F68EA6 - F68FA7F68EA6F68EA6F68EA6F68DA5F68EA6F78EA6F78DA5F78DA5F78DA5F78D - A5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA4F78BA3F78BA3F78BA3F7 - 8BA3F78BA3F78AA3F78AA2F78AA2F78AA2F78AA2F789A2F789A1F789A1F789A1 - F789A1F788A1F788A1F789A1F688A1F689A1F689A1F68AA2F68AA1F68AA2F68B - A2F68AA2F68BA2F68CA3F68BA3F68CA3F68DA4F68CA3F68DA4F68EA5F68FA5F6 - 90A6F68FA5F690A6F691A7F692A8F693A9F695AAF696AAF696ABF695AAF696AA - F695AAF696AAF697ABF697ACF598ACF599ACF59AADF59AADF59BAEF59CAFF59D - AFF59EB0F59EB0F59EB1F59FB1F5A1B2F5A2B3F5A2B4F5A3B4F4A4B5F4A5B5F4 - A5B6F4B3B7C7B8B8B8B9B9B9B9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBEBE - BEBFBFBFBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C3C3C3C5C5C5C5C5C5C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCD - CECECECFCFCFCFCFCFD1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D6D6 - D6D7D7D7D8D8D8D7D7D7D9D9D9DADADADADADADBDBDBDDDDDDDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E6E6E6 - E6E6E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBECECECECEC - ECECECECEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7B2B2B2B1B1B1B0B0B0AFAFAFACACACABABAB - AAAAAAA9A9A9A8A8A8A7A7A7A5A5A5A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9C9C - 9C9B9B9B9999999898989797979696969595959599A697ADF197AFF797AFF797 - AEF797AEF797AEF796AEF796AEF796AEF796ADF796ADF796ADF795ADF795ADF7 - 95ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF793ABF793ABF793AB - F793AAF793AAF792AAF792AAF792AAF792AAF792A9F791A9F791A9F791A9F791 - A9F791A8F791A8F790A8F790A8F790A8F790A7F790A7F78FA7F78FA7F78FA7F7 - 8FA7F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78EA6F78DA5 - F78DA5F78DA5F78CA4F78CA4F78CA4F78CA4F78CA4F78BA3F78CA4F78BA3F78B - A3F78BA3F78BA3F78BA3F78AA3F78AA3F78AA2F78AA2F78AA2F789A2F789A2F7 - 89A1F789A1F789A2F789A1F78AA2F78AA1F78AA2F78BA3F78BA2F78BA3F78BA3 - F78BA3F78CA4F78CA4F78DA4F78DA4F68DA4F68EA4F68FA5F68FA6F690A6F691 - A7F691A7F691A7F691A7F693A8F794A9F694A9F694A9F696AAF695AAF696ABF6 - 97ABF697ABF698ACF698ACF59AADF69AADF59BAEF69DAFF69DB0F69DB0F69FB1 - F69FB1F6A0B2F5A1B3F5A2B3F5A3B4F5A3B4F5A4B5F5A4B5F5A5B6F5A7B7F5AA - B8EDB7B8BCB9B9B9B9B9B9BABABABBBBBBBCBCBCBCBCBCBDBDBDBEBEBEBEBEBE - BFBFBFC0C0C0C0C0C0C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C5C5C5C7C7C7C7C7 - C7C8C8C8C9C9C9C9C9C9CBCBCBCBCBCBCCCCCCCDCDCDCDCDCDCFCFCFCFCFCFD0 - D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D6D6D6D6D6D6D7D7D7D8D8D8 - D8D8D8D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFE0E0 - E0E0E0E0E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E4E4E4E6E6E6E7E7E7E7E7E7E8 - E8E8E7E7E7E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDED - EEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7B3B3B3B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAA - AAAAA9A9A9A8A8A8A6A6A6A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D - 9A9A9A999999989898979797969696959595969FB998AFF798AFF798AFF797AF - F797AFF797AFF797AEF797AEF797AEF796AEF796AEF796ADF796ADF796ADF795 - ADF795ADF795ADF795ACF795ACF794ACF794ACF794ACF794ABF794ABF794ABF7 - 93ABF793ABF793ABF793AAF792AAF792AAF792AAF792AAF792A9F792A9F791A9 - F791A9F791A9F791A9F791A8F790A8F790A8F790A8F790A8F790A7F78FA7F78F - A7F78FA7F78FA7F78FA7F78FA7F88EA6F78EA6F78EA6F78EA6F78EA6F78DA5F7 - 8DA5F78DA5F88DA5F78DA5F88CA4F78DA5F88CA4F78CA4F78CA4F78BA3F78CA4 - F88CA4F88BA4F88BA3F88BA3F88BA3F88BA3F88AA3F88AA2F88AA2F88AA2F88A - A2F88AA2F78AA2F78BA2F78AA2F78BA3F78BA3F78BA3F78CA3F78CA3F78CA4F7 - 8DA4F78EA5F78EA5F78EA5F78FA5F78FA5F78FA6F790A6F790A7F791A7F791A7 - F792A7F792A8F793A9F794A9F695A9F695AAF696AAF697ABF698ACF797ABF697 - ACF699ADF79AADF69BAEF69BAEF69CAFF69CB0F69EB0F69DB0F6A0B2F6A0B2F6 - A1B3F6A2B4F6A2B4F6A3B5F6A4B5F6A5B6F6A5B6F6A7B7F6A8B8F6A9B8F6B2B8 - CFB9B9B9BABABABBBBBBBBBBBBBCBCBCBDBDBDBDBDBDBEBEBEBFBFBFC0C0C0C1 - C1C1C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C8C8C8 - CACACACACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFD0D0D0D0D0D0D1D1 - D1D2D2D2D2D2D2D3D3D3D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9D9D9D9DA - DADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E8E8E8E8E8 - E8EAEAEAEAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEF - EFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4 - F4F4F4F4F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7B5B5B5B3B3B3B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAA - AAA9A9A9A8A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A19F9F9F9E9E9E9C9C9C9B - 9B9B9A9A9A98989897979796969695959596A4CB99B0F898AFF798B0F898AFF8 - 98AFF898AFF897AFF897AFF897AFF897AEF897AEF897AEF896AEF896AEF896AD - F896ADF895ADF895ADF895ADF895ACF895ADF795ACF894ACF894ACF894ACF894 - ABF894ABF893ABF893ABF893ABF893ABF893AAF892AAF892AAF892AAF892AAF8 - 92A9F892A9F891A9F891A9F891A9F891A8F891A8F890A8F890A8F890A8F890A8 - F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6F88EA6F88EA6F88E - A6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA5F88CA4F88CA4F88CA4F88CA4F8 - 8CA4F88BA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88AA3F88AA3F88BA3 - F88BA3F88BA3F88CA4F88CA4F88CA4F88CA4F88DA4F88DA4F88DA4F88EA5F88E - A5F88EA5F88FA6F88FA6F78FA6F790A7F791A7F791A7F792A8F793A8F793A8F7 - 93A9F794A9F794AAF795AAF796ABF796ABF797ACF798ACF798ACF799ADF79AAE - F79AADF79CAFF69BAFF69CAFF69DB0F69EB1F69FB1F6A0B2F6A0B3F6A1B3F6A2 - B4F6A3B4F6A3B5F6A4B5F6A5B6F6A6B7F6A7B8F6A8B8F6AAB9F2B7B8BCB9B9B9 - BABABABCBCBCBCBCBCBCBCBCBDBDBDBEBEBEC0C0C0C0C0C0C1C1C1C2C2C2C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C8C8C8C9C9C9CACACACACACACB - CBCBCCCCCCCCCCCCCECECECECECECFCFCFD0D0D0D0D0D0D1D1D1D2D2D2D2D2D2 - D3D3D3D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8D9D9D9DADADADADADADBDB - DBDCDCDCDCDCDCDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1E3E3E3E3 - E3E3E5E5E5E4E4E4E6E6E6E6E6E6E8E8E8E7E7E7E8E8E8E8E8E8E9E9E9EBEBEB - EBEBEBEBEBEBECECECEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0 - F0F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F3F3F3F4F4 - F4F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAEAEAEADADADABABABAAAAAA - A9A9A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A19F9F9F9E9E9E9C9C9C9B9B - 9B9A9A9A98989898989897979796969698A8D999B0F899B0F899B0F898B0F898 - B0F898B0F898AFF898AFF898AFF897AFF897AFF897AEF897AEF897AEF896AEF8 - 96AEF896AEF896ADF896ADF895ADF895ADF895ADF895ACF895ACF895ACF894AC - F894ACF894ACF894ABF893ABF893ABF893ABF893ABF893AAF893AAF892AAF892 - AAF892AAF892AAF892A9F891A9F891A9F891A9F891A9F891A8F890A8F890A8F8 - 90A8F890A8F890A8F88FA7F88FA7F88FA7F88FA7F88FA7F88FA7F88EA6F88EA6 - F88EA6F88EA6F88DA6F88DA5F88DA5F88DA5F88DA5F88DA5F88CA4F88CA4F88C - A4F88CA4F88CA4F88BA4F88BA4F88BA3F88BA3F88BA3F88BA3F88BA3F88BA3F8 - 8BA3F88BA3F88DA4F88CA4F88CA4F88DA5F88DA5F88EA5F88EA6F88FA6F890A6 - F890A6F890A7F891A7F891A7F892A8F892A8F893A9F893A9F893A9F895AAF894 - AAF895AAF896ABF897ABF897ACF798ADF799ADF799ADF79AAEF79BAEF79BAFF7 - 9CAFF79DB0F79DB1F79EB1F79FB2F7A0B2F7A1B3F7A1B3F7A2B4F7A3B4F7A4B6 - F7A4B6F7A5B6F6A6B7F6A7B8F6A8B8F6A9B9F6B0B8D7B8B8B8B9B9B9BABABABB - BBBBBCBCBCBDBDBDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3 - C5C5C5C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9C9C9C9CACACACBCBCBCBCBCBCCCC - CCCCCCCCCFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D3D3D3D5D5D5D6 - D6D6D6D6D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDDDDDD - DDDDDDDEDEDEDFDFDFE0E0E0E0E0E0E2E2E2E2E2E2E3E3E3E3E3E3E4E4E4E5E5 - E5E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEB - EBEBECECECEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1 - F1F1F1F1F1F1F3F3F3F2F2F2F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B8B8 - B8B6B6B6B5B5B5B4B4B4B2B2B2B0B0B0AFAFAFAFAFAFACACACABABABAAAAAAA9 - A9A9A7A7A7A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09E9E9E9C9C9C9B9B9B - 9A9A9A98989897979797979796979C99ACE69AB1F999B0F899B1F999B0F998B0 - F898B0F898AFF898B0F998AFF898AFF998AFF997AEF897AEF897AEF897AEF996 - AEF896AEF996AEF996ADF896ADF996ADF995ADF895ACF895ADF995ADF995ACF9 - 95ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993ABF993ABF993AA - F993AAF992AAF992AAF992AAF992A9F992A9F991A9F991A9F991A9F991A9F990 - A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98FA7F98FA7F98FA7F9 - 8EA6F98EA6F98EA6F98EA6F98EA6F98DA6F98DA5F98DA5F98DA5F98DA5F98DA5 - F98CA5F98CA4F98CA4F98CA4F98CA4F98BA4F98CA4F88BA4F88CA4F88CA4F88D - A5F88DA5F88DA5F88EA5F88EA5F88EA5F88FA6F88FA6F88FA6F890A7F890A6F8 - 90A7F892A8F992A8F892A8F892A8F893A9F894A9F894AAF895AAF895AAF895AA - F896ABF897ACF898ADF899ADF899ADF799ADF79AAEF79BAEF79CB0F89CB0F79E - B1F89EB1F89FB2F8A0B2F8A0B3F7A1B4F7A2B4F7A3B5F7A3B5F7A4B6F7A6B7F7 - A7B8F7A7B8F7A8B9F7A9B9F7A9BAF7B6B8C0B9B9B9BABABABBBBBBBCBCBCBDBD - BDBDBDBDBFBFBFC0C0C0C0C0C0C1C1C1C2C2C2C2C2C2C3C3C3C5C5C5C6C6C6C6 - C6C6C7C7C7C7C7C7C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCDCDCECECE - CFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6 - D6D7D7D7D8D8D8D8D8D8D9D9D9DADADADBDBDBDBDBDBDEDEDEDDDDDDDEDEDEDE - DEDEE0E0E0E0E0E0E0E0E0E2E2E2E2E2E2E2E2E2E3E3E3E5E5E5E5E5E5E6E6E6 - E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBECECECECECECECECECEDED - EDEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2 - F2F2F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7B9B9B9B8B8B8 - B6B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9 - A9A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9C9C9C9B9B9B9A - 9A9A999999989898979797979AA39AB0F39AB1F999B1F999B1F999B0F999B0F9 - 99B0F998B0F998B0F998B0F998AFF998AFF998AFF998AFF997AFF997AEF997AF - F997AFF997AEF996AEF996ADF996ADF996ADF996ADF995ADF996ADF995ADF895 - ADF995ADF995ACF994ACF994ACF994ABF994ACF993ABF994ABF993ABF993AAF9 - 93ABF993ABF993AAF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9 - F991A9F991A9F990A8F990A8F990A8F990A8F990A8F990A8F98FA7F98FA7F98F - A7F98FA7F98EA7F98EA6F98EA6F98EA6F98EA6F98EA6F98DA5F98DA5F98DA5F9 - 8DA5F98DA5F98CA5F98CA5F98CA4F98CA5F98CA4F98DA5F98DA5F98EA5F98DA5 - F98EA6F98FA6F98EA6F98FA6F98FA7F990A7F990A7F991A7F991A8F991A8F992 - A8F993A9F893A9F893A9F894AAF894AAF895ABF895ABF895ABF897ACF897ACF8 - 98ACF898ADF899ADF89AAEF89AAEF89BAFF89CAFF89CB0F89DB0F89EB1F89EB1 - F89FB2F8A1B3F7A1B3F7A1B4F7A2B4F7A4B5F7A4B6F7A5B7F7A6B7F7A7B8F7A8 - B9F8A8B9F7AABBF8B0BADFB8B8B8B9B9B9BABABABBBBBBBCBCBCBDBDBDBEBEBE - C0C0C0C0C0C0C0C0C0C1C1C1C2C2C2C3C3C3C5C5C5C5C5C5C6C6C6C7C7C7C8C8 - C8C8C8C8CACACACACACACBCBCBCCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D0 - D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D8D8D8 - D9D9D9D9D9D9DBDBDBDBDBDBDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E0E0 - E0E1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E8 - E8E8E8E8E8E9E9E9E9E9E9EAEAEAEBEBEBECECECECECECEDEDEDEDEDEDEEEEEE - EFEFEFEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F2F3F3 - F3F3F3F3F4F4F4F4F4F4F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F5F5F5F4 - F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BBBBBBB9B9B9B8B8B8B6 - B6B6B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEACACACABABABAAAAAAA9A9A9 - A8A8A8A7A7A7A5A5A5A4A4A4A2A2A2A1A1A1A0A0A09E9E9E9D9D9D9C9C9C9A9A - 9A999999989898989898989CAA9AB0F39AB1F99AB1F99AB1F999B1F999B1F999 - B1F999B0F999B0F999B0F998B0F998B0F998AFF998AFF998AFF997AFF997AFF9 - 97AFF997AEF997AEF996AEF996AEF996AEF996ADF996ADF996ADF995ADF995AD - F995ADF995ACF994ACF994ACF994ACF994ACF994ACF994ABF993ABF993ABF993 - ABF993ABF993ABF992AAF992AAF992AAF992AAF992A9F991A9F991A9F991A9FA - 91A9F991A9F990A8F990A8F991A9FA90A8FA90A8FA90A8FA8FA7F98FA7F98FA7 - F98FA7F98FA7FA8EA6F98EA6F98EA6F98EA6F98EA6FA8DA5F98DA5F98DA5F98D - A5F98DA5F98CA5F98DA5F98DA5F98DA5F98DA5F98DA5F98EA6F98EA6F98EA6F9 - 8FA7F98FA6F990A7F990A7F991A8F991A8F992A8F992A9F992A9F992A9F993A9 - F994AAF994AAF995ABF995ABF996ABF996ACF997ACF998ADF999ADF998ADF99A - AEF999AEF99BAFF89BAFF89CB0F89CB0F89DB1F89EB1F89FB2F89FB2F8A1B3F8 - A1B3F8A1B4F8A3B5F8A4B6F8A4B6F8A5B7F8A6B7F8A7B8F8A8B8F8A8B9F8A9BA - F8AABBF8B5B7BFB9B9B9BABABABABABABBBBBBBDBDBDBEBEBEBEBEBEC0C0C0C0 - C0C0C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C6C6C6C7C7C7C7C7C7C9C9C9C9C9C9 - CACACACBCBCBCBCBCBCCCCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D2D2 - D2D3D3D3D3D3D3D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8D8DADADADADADADB - DBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDFDFDFDFDFDFE0E0E0E1E1E1E1E1E1 - E2E2E2E3E3E3E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E9E9E9E9E9E9E9E9 - E9EAEAEAEBEBEBECECECECECECECECECEDEDEDEEEEEEEFEFEFEFEFEFF0F0F0F0 - F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5 - F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7BCBCBCBBBBBBBABABAB8B8B8B6B6 - B6B5B5B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8 - A8A8A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B - 9A9A9A99999998989899A0B69BB2FA9BB2FA9AB2FA9AB2FA9AB1FA9AB1FA9AB1 - FA99B1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98AFFA98AFFA97 - AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AEFA96ADFA96ADFA - 95ADFA95ADFA95ADFA95ADFA95ACFA94ACFA94ACFA94ACFA94ACFA94ABFA94AB - FA93ABFA93ABFA93ABFA93AAFA93AAFA92AAFA92AAFA92AAFA92AAFA91A9FA91 - A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90A8FA90A8FA8FA7FA - 8FA7FA8FA7FA8FA7FA8FA7FA8EA7FA8EA6FA8EA6FA8EA6FA8EA6FA8EA6FA8DA6 - FA8DA5FA8DA6F98DA6F98DA5F98EA6F98EA5F98EA6F98FA7F98FA6F98FA7F98F - A7F990A7F990A8F991A8F991A8F992A8F992A9F992A9F993A9F993A9F994ABFA - 95ABF994AAF997ACF996ACF996ACF998ADF998ADF999ADF999AEF99AAEF99AAE - F99AAFF99CB0F89DB1F99EB2F99EB1F89FB2F8A0B3F9A0B3F8A1B4F8A2B4F8A3 - B5F9A4B6F9A5B6F9A5B7F9A6B8F9A7B8F8A7B9F8A9BAF8AABAF8ABBBF8B0BAE0 - B8B8B8B9B9B9BABABABBBBBBBCBCBCBEBEBEBFBFBFC0C0C0C0C0C0C1C1C1C2C2 - C2C3C3C3C4C4C4C5C5C5C6C6C6C6C6C6C7C7C7C9C9C9CACACACACACACBCBCBCC - CCCCCDCDCDCECECECFCFCFCFCFCFD0D0D0D1D1D1D1D1D1D2D2D2D3D3D3D4D4D4 - D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D9D9D9DADADADADADADBDBDBDCDC - DCDCDCDCDDDDDDDEDEDEDEDEDEDFDFDFE0E0E0E1E1E1E1E1E1E2E2E2E3E3E3E4 - E4E4E4E4E4E5E5E5E6E6E6E6E6E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9EAEAEA - EBEBEBECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F0F0 - F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F5 - F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7BDBDBDBCBCBCBABABAB9B9B9B8B8B8B6B6B6 - B5B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8 - A8A7A7A7A6A6A6A5A5A5A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A - 9A9A9999999999999AA2BD9BB2FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA - 9AB1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0 - FA98AFFA98AFFA97AEFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96 - AEFA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA - 94ACFA94ABFA93ABFA93ABFA93ABFA93ABFA93AAFA92AAFA92AAFA92AAFA92AA - FA92AAFA91A9FA91A9FA91A9FA91A9FA91A9FA91A9FA90A8FA90A8FA90A8FA90 - A8FA8FA8FA8FA7FA8FA7FA8FA7FA8FA7FA8FA7FA8EA6FA8EA6FA8EA6FA8EA6FA - 8EA6FA8EA6FA8EA6FA8FA6FA8EA6FA8FA7FA8FA7FA8FA7FA90A7FA91A8FA91A8 - FA91A8FA92A9FA92A8FA92A9FA93AAFA94AAFA93AAFA94AAFA94ABFA95ABF996 - ACF997ACF997ACF997ADF998ADF999AEF999AEF99AAFF99BAFF99BAFF99CB0F9 - 9DB1F99DB1F99EB2F99FB2F9A0B3F9A0B3F9A1B4F9A2B4F9A2B5F9A3B5F9A4B6 - F9A5B7F9A5B7F9A6B8F9A7B8F8A9B9F8A9BAF8AABBF8ABBBF8B4B8C7B8B8B8B9 - B9B9BBBBBBBCBCBCBDBDBDBEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C3C3C3 - C4C4C4C5C5C5C6C6C6C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCCCCCCCDCD - CDCECECECFCFCFD0D0D0D0D0D0D2D2D2D2D2D2D3D3D3D3D3D3D4D4D4D5D5D5D5 - D5D5D7D7D7D7D7D7D8D8D8D8D8D8D9D9D9DADADADADADADBDBDBDCDCDCDCDCDC - DDDDDDDEDEDEDFDFDFDFDFDFE1E1E1E1E1E1E1E1E1E2E2E2E3E3E3E4E4E4E4E4 - E4E5E5E5E6E6E6E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBECECECED - EDEDEDEDEDEEEEEEEEEEEEEFEFEFF0F0F0F0F0F0F1F1F1F1F1F1F2F2F2F2F2F2 - F3F3F3F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7BEBEBEBDBDBDBCBCBCBBBBBBB9B9B9B8B8B8B6B6B6B5 - B5B5B4B4B4B2B2B2B1B1B1AFAFAFAEAEAEADADADACACACABABABAAAAAAA8A8A8 - A7A7A7A6A6A6A4A4A4A3A3A3A1A1A1A0A0A09F9F9F9D9D9D9C9C9C9B9B9B9A9A - 9A9999999898989AA2BD9BB3FA9BB2FA9BB2FA9BB2FA9AB2FA9AB2FA9AB2FA9A - B1FA9AB1FA9AB1FA99B1FA99B1FA99B0FA99B0FA99B0FA98B0FA98B0FA98B0FA - 98AFFA98AFFA97AFFA97AFFA97AFFA97AEFA97AEFA97AEFA96AEFA96AEFA96AE - FA96ADFA95ADFA95ADFA95ADFA95ADFA95ACFA95ACFA94ACFA94ACFA94ACFA94 - ACFA94ABFA93ABFA93ABFA94ABFB93ABFB93AAFA93ABFB92AAFA92AAFA92AAFB - 92AAFA92AAFB92AAFB92AAFB91A9FB91A9FA91A9FB91A9FB90A8FA90A8FA90A8 - FB90A8FB90A8FB8FA7FA8FA8FB8FA7FA8FA7FA8FA7FB8FA7FB8EA6FA8FA7FA8E - A6FA8FA7FA8FA7FA90A8FA8FA7FA90A7FA8FA7FA91A8FA91A8FA92A9FA91A9FA - 92A9FA93A9FA93A9FA93AAFA94AAFA95AAFA95ABFA95ACFA95ABF996ACF998AD - FA97ACF998ADFA98ADF999AEFA9AAEF99AAFF99BAFF99CB0F99CB0F99EB1FA9D - B1F99FB2FAA0B3FAA0B3F9A1B4F9A2B5F9A2B5F9A3B6F9A4B6F9A5B7F9A6B7F9 - A6B8F9A8B9F9A8BAF9A9BAF9AABBF9ABBBF9AFBBE8B8B8B8B9B9B9BBBBBBBCBC - BCBCBCBCBEBEBEBFBFBFBFBFBFC0C0C0C1C1C1C3C3C3C4C4C4C4C4C4C5C5C5C7 - C7C7C8C8C8C8C8C8C9C9C9CACACACBCBCBCCCCCCCDCDCDCDCDCDCFCFCFD0D0D0 - D0D0D0D1D1D1D2D2D2D3D3D3D4D4D4D4D4D4D5D5D5D5D5D5D6D6D6D7D7D7D8D8 - D8D8D8D8D9D9D9D9D9D9DADADADBDBDBDBDBDBDCDCDCDDDDDDDDDDDDDEDEDEDF - DFDFDFDFDFE0E0E0E2E2E2E2E2E2E2E2E2E4E4E4E5E5E5E5E5E5E5E5E5E6E6E6 - E7E7E7E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAECECECECECECEDEDEDEDED - EDEEEEEEEFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F3 - F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F6F6F6F6F6F6F7F7F7F6F6F6F7F7F7 - F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7BFBFBFBEBEBEBEBEBEBCBCBCBBBBBBBABABAB9B9B9B7B7B7B5B5 - B5B4B4B4B2B2B2B1B1B1B0B0B0AEAEAEADADADACACACABABABAAAAAAA8A8A8A7 - A7A7A6A6A6A5A5A5A3A3A3A2A2A2A0A0A09F9F9F9E9E9E9C9C9C9C9C9C9A9A9A - 9999999999999AA2BD9CB3FB9CB3FB9BB3FB9BB3FB9BB2FB9BB2FB9BB2FB9AB2 - FB9AB2FB9AB2FB9AB1FB9AB1FB9AB1FB99B1FB99B1FB99B0FB99B0FB98B0FB98 - B0FB98B0FB98AFFB98AFFB98AFFB97AFFB97AFFB97AFFB97AEFB97AEFB96AEFB - 96AEFB96AEFB96AEFB96ADFB95ADFB95ADFB95ADFB95ADFB95ACFB95ACFB94AC - FB94ACFB94ACFB94ABFB94ABFB93ABFB93ABFB93ABFB93ABFB92AAFB92AAFB92 - AAFB92AAFB92AAFB92AAFB91A9FB91A9FB91A9FB91A9FB91A9FB90A8FB90A8FB - 90A8FB90A8FB90A8FB8FA8FB8FA7FB8FA7FB8FA7FB8FA7FB8FA7FA8FA7FA8FA7 - FA8FA7FA90A8FA91A8FA90A8FA90A8FA91A8FA92A9FA92A9FA92A9FA93AAFA94 - AAFA93AAFA94AAFA94ABFA95ABFA95ABFA95ACFA96ACFA97ACFA98ADFA98ADFA - 98ADFA99AEFA9AAFFA9AAFFA9BB0FA9BB0FA9CB0FA9DB1FA9EB1FA9EB2FA9FB3 - FAA0B3FAA1B4F9A1B4F9A2B5F9A3B5F9A3B6F9A4B6F9A5B7F9A6B8F9A7B9F9A8 - B9F9A8B9F9A9BAF9AABBF9ABBBF9B4B8C8B8B8B8BABABABBBBBBBCBCBCBDBDBD - BEBEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C4C4C4C4C4C4C5C5C5C6C6C6C8C8 - C8C9C9C9CACACACACACACCCCCCCDCDCDCECECECECECECFCFCFD0D0D0D1D1D1D1 - D1D1D3D3D3D3D3D3D4D4D4D4D4D4D5D5D5D6D6D6D6D6D6D7D7D7D8D8D8D8D8D8 - D9D9D9DADADADADADADBDBDBDCDCDCDCDCDCDDDDDDDEDEDEDEDEDEE0E0E0E0E0 - E0E1E1E1E2E2E2E2E2E2E3E3E3E4E4E4E5E5E5E5E5E5E6E6E6E7E7E7E7E7E7E7 - E7E7E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBEBEBEBEDEDEDEDEDEDEEEEEEEEEEEE - EFEFEFEFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F3F3F3F4F4F4F4F4 - F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F6F6F6F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7} - end - object Bevel2: TBevel - Left = 0 - Top = 64 - Width = 500 - Height = 2 - Align = alTop - Shape = bsTopLine - end - object Bevel3: TBevel - Left = 0 - Top = 274 - Width = 500 - Height = 2 - Align = alBottom - Shape = bsTopLine - end - object eSvcLibName: TEdit - Left = 119 - Top = 125 - Width = 377 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 2 - end - object eSvcName: TEdit - Left = 119 - Top = 151 - Width = 377 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 3 - end - object ePrjName: TEdit - Left = 119 - Top = 99 - Width = 377 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 1 - end - object ePrjDir: TEdit - Left = 119 - Top = 241 - Width = 289 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 6 - end - object eTemplateName: TEdit - Left = 119 - Top = 73 - Width = 377 - Height = 21 - TabStop = False - Anchors = [akLeft, akTop, akRight] - Color = clBtnFace - ReadOnly = True - TabOrder = 0 - end - object BitBtn1: TBitBtn - Left = 420 - Top = 239 - Width = 75 - Height = 25 - Anchors = [akTop, akRight] - Caption = '&Browse' - TabOrder = 7 - TabStop = False - OnClick = sbBrowseForDirClick - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF1C99CE2BA5D51C9DD10A8AC6FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFBFA5A34D5A72FF00FFFF00FF249CCFA6EEF7 - 6CEBF85DD9F04AC7E739B8E020A0D40F91CA0F91C9FF00FFFF00FFBFA5A35766 - 831276E23C91DCFF00FF0C8CC799DDEF8BFFFF80FCFF82FBFF7FFAFF79F3FF65 - E1F74ECEED3CBAE07591A05B66811170D833A1FF2A9AFEFF00FF1296CC59BADE - 9FFEFF75F7FF78F6FF77F2FC89D9E087D7DE7BE2EA91BCC05168891370D531A0 - FF319EFBFF00FFFF00FF26A5D448C1E69FEFF879F6FB87D8DCBACABCDABCA5D0 - B59EAF9A8C817A734179AF32A3FF3DACFE1B9CD4FF00FFFF00FF27AFDE8B97A1 - 88CFE28BD1D3CBB4ADF7F0DDFFFFD8FFFFD9FAF8C5CFB08CC4A9A34DC1FC55D0 - FB41C1E3FF00FFFF00FF25AFE1AD706B5DBCDDB5A69EF7F4EEFFFFFFFFFFE3FF - FFD4FFF7C1FFE6A5D8A0826FD4EB59D7FB68E2F80E90C9FF00FF26AFE1B5776D - A4CFD9CEB69EFFFFEAFFFFF3FFFFEAFFFFD7F7DCA9F6C986E1B89191C0C753D3 - FB7EF3FF28AAD8FF00FF28B0E0BC7F6EFFF4EBD5BCA1FFFFDDFFFFDDFFFFE0FF - FACAEFBD81F4BD77E7C49A93C0C44FD3FB7DF4FF56D5EFFF00FF28AFE1C58870 - FFFCF8CAAA99FEFFCEFFFFC9F8E1ADF0C78CF3CA96FFEBB5D5AF959AC9D37AE0 - FE9DFBFF96F8FF23A1D328B0E1CE9173FFFAF7D8C4BDDCC59EFCE5A7FAC782FB - D08BFFF7E0E7DCCE8CA5AA6BC9E65FBCE060BBDE6CC4E329A1D12DB2E2D59975 - FFF8F3FCFBFAE5D1C9E9CAA6E7C599E1C298CCB59FB18B8875E7F86DEDFE179D - D1FF00FFFF00FFFF00FF1FA1D9DDA077FFFBF6FFFFFFFFFFFFFFFFFEFBF4EBB4 - 8379BF7849B16F5350C0E550C4E71C9DD0FF00FFFF00FFFF00FFFF00FFE2A678 - FFFFFFFFFFFFFFFFFFFFFFFFF8FAFCB6877AE29955FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFE7AB79D1926DD1926DD1926DD1926DD1926DB4 - 7E6FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - end - object cbMessageClass: TComboBox - Left = 119 - Top = 209 - Width = 377 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 0 - TabOrder = 5 - end - object cbServerClass: TComboBox - Left = 119 - Top = 184 - Width = 377 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 0 - TabOrder = 4 - end - object Panel1: TPanel - Left = 0 - Top = 276 - Width = 500 - Height = 41 - Align = alBottom - BevelOuter = bvNone - TabOrder = 8 - DesignSize = ( - 500 - 41) - object Image1: TImage - Left = 5 - Top = 4 - Width = 32 - Height = 32 - Anchors = [akLeft, akBottom] - AutoSize = True - Picture.Data = { - 07544269746D617072080000424D720800000000000036040000280000002000 - 00002000000001000800010000003C040000130B0000130B0000000000000000 - 00000C0C0C0012131300171818001C1C1C0017182200242424002B2B2B00312E - 2E0031302F002D2E3000383635003B3B3B0045363600453C3B00171B45001417 - 4D000B0C5B001319520010155D00151B5C001D214100232B4A003D3C41003A3D - 49002B3359003339520009117A00192D760029356800333C62003C4257003E44 - 5B003A4675003D497700434243004C45440045444B00494748004B4B4B00524B - 4A005A4F4E005B524F0042455100494B55004E5059005353530052555F005A5A - 5A00684F4D00685755006A5E5D007A6A5A00434C6D005C5E6500636363006966 - 66006A6A6A007E646200756C6B007D6D6A007E726B0061677800737372007B76 - 77007D7B7B00A77F4200816F600085756F008A7774008B7C7600817F7E00897B - 7A00907D7800BA823500B5833C00DC800F00DC811100DC881800FE8F0900FF95 - 0500F7921300FE9A1300FE9E1B00FEA11C00DC902300DD972D00DE9E3700E793 - 2A00FEA32200FFAB2B00F8A53300FFAD3200FFAF3800FFB33300FEB43A00FFBC - 3A00AC824200B1834100A1885500B89A570091837C0096907F009D957B00AF9D - 6D00B89F6200A4997600DEA44100DEAB4C00C9A45800DEB25000E1AF4F00FFB7 - 4100FFBA4300FEB64F00E7A95100C9AC6400C4A37A00D3AA7600F4BB6800FFC2 - 4200FFC04E00FFC45300FFC65800FFCA5C00DEC67800FFCD6400FFD06200FFD8 - 6600FFD26A00FFD57300FFD97600FFD97800FFE17A0004088C00183089000005 - A5000009AB00000CB100000FB8001B39AA001131BB00374A8D002C429500344A - 99002D46A3003851A7003C54A8002F4DBC00485A950055669C0060688200566A - A700183BC300153ACA00062FDE00123EE7000332F0000D3CF2000134FD00073A - FF000C3EFF00224ADD00385FDF001442F3001847F3001244FF001C4DFF002853 - E9002758FF003C65EA003C68F4003363FF003C6BFF004A67C200496EE1004C72 - E1004572FA00837E8100FF00FF00818080008C8685008C8B8B00928A8400968D - 8D009B8C8B009C938B00919092009B9293009F959A009E989A00A0969500A098 - 9200A49C9A00AC9C9800A9A29E00A7A7A700ABA6A300ADA6AA00B3A6A600B1AF - AB00BBAFAC00BAB6BB00BCBCBC00E2BB8800C9B4A400CEBAA500C2B7B400C4BC - BC00CABDBA00DAC09A00EDDA8C00FFDE8100FFE18500FEE48A00FFEB8B00FEE6 - 9100F0E59D00FEEC9900FFF09900F8EEA300FFF6AA00C5C4C500CAC4C400C4C5 - C900D5C9C600D5D0CF00DED3C900CFCFD000D1D0D000DCD7D700E0DDDD00F6E2 - C900E3E3E600EBE6E500EEECEC00F4F3F500FCF7F600FEFEFE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000CB200042D0501000200000B05080B262D2723222640B20003B2000009B2 - 012F03030501000C08B5CFDED0C6B8443B290AB202B2000007B2013803050403 - 0201000F16E0EAE9E1C0B6474445483B0BB2B21C000006B2010B020903050014 - 031288871046ECEBE63E3F403E2932446423B2B2000005B20208020904050013 - 0E89888522E6EDDD40E0C1C8C227433B07B2B200000004B2010B030802090106 - 02050011138A1A0F042246382231303944272707B22202B2000003B20125020B - 0308010902060012051411223AB13F32292827230D0C050001B202B2000002B2 - 013F040B010A02080109020600130522C73CD1E7E2D0C6BCBCBBB43A160222B2 - B212000002B201220216020B020A020802090013052DDD3B4C51585C7176CBCD - CECFC9BC2D22B2DD00000013B23F222522160B0B0A0A080809062DE3434B4E06 - 044E000951525A7275CCDEBA0B3100000018B226252522221D989C8C18080809 - 2DE6454C515152585852025200064E5150577435000001B20226022500122A9D - 9F9F9E9A0A08082FE8644D525859595B025B0007595853514F492E3A00000020 - 402D26262520A5A09F9E9E1C0A082FEAB654595B5E6F70706F5E5E5958514A2C - 00000136022D0226001B21A5A0A09F9E190A0A35EBB9555B7078797A7A797870 - 5E59534A2B08000000202D2F2D2D2626A1A6A0A098160B0A2FEDBF5677797B7D - 7D807D7B79705E5961250000022F032D001B262C8F908E2216160B2FEDC06A79 - 7B8081828181807D79705D6124200000032F00042D2F2D260226022503160012 - 2FEDC26B7B8081D3D4D5D382807B795F601600000136032F032D022602250222 - 00130B2FEDC46B7E81D3D5D9D9D7D4817E79774116790000000338362F08022F - 032D0326032200122FEDC66D7F82D5D9DCDCD9D583807A776016000001B50236 - 042F022D032600142A1F2FEDC76263737CD2D8DBDAD684807B776016000001B2 - 0336042F022D00162634A7A536EDE6DFC9C3BFB665666967686C6E6F60220000 - 0003B238367B0236000E35AAAB942D2D91A6A61EC3CAE4E602E6000BE5E4CFC5 - BDB7643C334226D700000020B2B5373636AEACACA92F2692A8A68B861B15090B - 25293840B4B7BEC0BEB83A08000002B2001E383736AFB0ACACA2A2ABA8A8A6A6 - A5A5A0990B0808090505090508082DB2000002B201BA0237013D02B003AC01AB - 03A802A602A5019B0216000A0B080B080907092FB2B2000003B2013F02370196 - 02B002AC02AB02A803A6000CA58E2217170B0A0A08080BB202B2000004B20019 - 3738373DAFB0ACACABABA8ABA8A6A6A48EA39D1D0B0A0A08B2A603B2000005B2 - 02380009373897B0ACACABABA80002A802A60004A5A38E0B020B010A05B20000 - 06B2013E02370236001095ADA9ACABA8A8A7938D2522221625B205B2000007B2 - 0004BA3837360236032F032D03260004252238B206B2000009B20003BA383696 - 0236042F022D0226013E09B200000CB20004B537362F032F01B30CB20001} - Transparent = True - end - object cbCreateClientAndGroup: TCheckBox - Left = 42 - Top = 12 - Width = 201 - Height = 17 - Anchors = [akLeft, akBottom] - Caption = 'Create Test Client and Project Group' - Checked = True - State = cbChecked - TabOrder = 0 - end - object btn_Ok: TBitBtn - Left = 341 - Top = 8 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object Button2: TBitBtn - Left = 420 - Top = 8 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 2 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.pas deleted file mode 100644 index af655ca..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptions.pas +++ /dev/null @@ -1,212 +0,0 @@ -unit fServerProjectOptions; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, - {$IFDEF DELPHI6UP} Variants, {$ENDIF} - Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, ComCtrls, ImgList, uROIDEPrjWizard, ExtCtrls; - -type - TServerProjectOptions = class(TForm) - Label1: TLabel; - eSvcLibName: TEdit; - eSvcName: TEdit; - Label2: TLabel; - Label3: TLabel; - ePrjName: TEdit; - Label5: TLabel; - ePrjDir: TEdit; - Bevel1: TBevel; - Label4: TLabel; - eTemplateName: TEdit; - BitBtn1: TBitBtn; - Label6: TLabel; - cbMessageClass: TComboBox; - Label7: TLabel; - cbServerClass: TComboBox; - Label8: TLabel; - Image2: TImage; - Bevel2: TBevel; - Panel1: TPanel; - Image1: TImage; - cbCreateClientAndGroup: TCheckBox; - btn_Ok: TBitBtn; - Button2: TBitBtn; - Bevel3: TBevel; - procedure sbBrowseForDirClick(Sender: TObject); - procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); - procedure FormCreate(Sender: TObject); - public - fTemplateDir, - fInvalidServers, - fDefaultServer, - fFixedServer, - fFixedChannel: string; - fWizardAvailable: boolean; - fProjectFolders: TStringList; - - procedure LoadConfig; - - public - constructor Create(const aTemplateDir : string); reintroduce; - destructor Destroy; override; - end; - -var - ServerProjectOptions: TServerProjectOptions; - -implementation - -uses FileCtrl, INIFiles, uRODLGenTools, uROClient, uROServer, uROIDETools, fNewProjectForm; - -{$R *.dfm} - -{ TServerProjectOptions } -constructor TServerProjectOptions.Create(const aTemplateDir: string); -begin - inherited Create(NIL); - fTemplateDir := aTemplateDir; - fProjectFolders := TStringList.Create(); - LoadConfig; -end; - -destructor TServerProjectOptions.Destroy; -begin - FreeAndNil(fProjectFolders); - inherited; -end; - -procedure TServerProjectOptions.LoadConfig; -var s : TStringList; - tmpldir : string; -begin - s := TStringList.Create; - - with TIniFile.Create(GetTemplateConfigFileName) do try - ReadSection(sect_ClassFactories, s); - - eTemplateName.Text := fTemplateDir; - eSvcLibName.Text := ReadString(sect_ProjectGeneration, id_SvcLibName, 'NewLibrary'); - eSvcName.Text := ReadString(sect_ProjectGeneration, id_SvcName, 'NewService'); - ePrjName.Text := ReadString(sect_ProjectGeneration, id_PrjName, 'NewProject'); - cbCreateClientAndGroup.Checked := ReadBool(sect_ProjectGeneration, id_CreateClientAndGroup, TRUE); - - tmpldir := GetTemplateDir; - Delete(tmpldir, Pos('Templates', tmpldir), 9); - Insert('Projects', tmpldir, Length(tmpldir)); - - ePrjDir.Text := ReadString(sect_ProjectGeneration, id_PrjDir, tmpldir); - ReadSection(sect_ProjectFolderHistory, fProjectFolders); - finally - Free; - s.Free; - end; - - with TIniFile.Create(fTemplateDir+InfoName) do try - Caption := ReadString(sect_Information, id_Description, Caption); - fInvalidServers := ReadString(sect_Information, id_InvalidServers, ''); - fInvalidServers := StringReplace(fInvalidServers,' ', '',[rfReplaceAll])+','; - - fFixedServer := Trim(ReadString(sect_Information, id_FixedServer, '')); - fDefaultServer := Trim(ReadString(sect_Information, id_DefaultServer, fFixedServer)); - fFixedChannel := Trim(ReadString(sect_Information, id_FixedChannel, '')); - - fWizardAvailable := ReadString(sect_Information, id_WizardType, '') <> ''; - - cbCreateClientAndGroup.Enabled := ReadBool(sect_Information, 'AllowClient', TRUE); - if not cbCreateClientAndGroup.Enabled then cbCreateClientAndGroup.Checked := false; - finally - Free; - end; -end; - -procedure TServerProjectOptions.sbBrowseForDirClick(Sender: TObject); -var dir : string; -begin - dir := ePrjDir.Text; - if SelectDirectory('Select Project Directory','', Dir) then ePrjDir.Text := Dir; - //if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0{SELDIRHELP}) then ePrjDir.Text := Dir; -end; - -procedure TServerProjectOptions.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -var errmsg : string; -begin - if (ModalResult=mrCancel) then begin - CanClose := TRUE; - Exit; - end - else CanClose := FALSE; - - if (Trim(eSvcLibName.Text)='') then errmsg := 'Service Library Name cannot be blank' - else if (Trim(eSvcName.Text)='') then errmsg := 'Service Name cannot be blank' - else if (Trim(ePrjName.Text)='') then errmsg := 'Project name cannot be blank' - else if not DirectoryExists(ePrjDir.Text) and - not ForceDirectories(ePrjDir.Text) then errmsg := 'Specified directory does not exist or cannot be created' - - else begin - CanClose := TRUE; - Exit; - end; - - MessageDlg(errmsg, mtError, [mbOK], 0); -end; - -procedure TServerProjectOptions.FormCreate(Sender: TObject); -var i : integer; - svrclsname : string; -begin - cbMessageClass.Items.Clear; - for i := 0 to (GetMessageClassCount-1) do - cbMessageClass.Items.Add(GetMessageClass(i).ClassName); - - i := cbMessageClass.Items.IndexOf('TROBinMessage'); - if i = -1 then i := 0; - cbMessageClass.ItemIndex := i; - - cbServerClass.Items.Clear; - - for i := 0 to (GetServerClassCount-1) do begin - svrclsname := GetServerClass(i).ClassName; - - if (Pos(svrclsname+',', fInvalidServers)=0) then begin - cbServerClass.Items.Add(svrclsname); - end; - end; - - cbServerClass.Enabled := (cbServerClass.Items.Count>1); - if (cbServerClass.Items.Count=0) then begin - cbServerClass.Visible := FALSE; - Exit; - end; - - if (cbServerClass.Items.IndexOf(fDefaultServer)>0) then - cbServerClass.ItemIndex := cbServerClass.Items.IndexOf(fDefaultServer) - else - cbServerClass.ItemIndex := 0; - - if fFixedServer <> '' then begin - cbServerClass.Enabled := false; - cbServerClass.Color := clBtnFace; - if cbServerClass.Text <> fFixedServer then - cbServerClass.ItemIndex := cbServerClass.Items.Add(fFixedServer); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.dfm deleted file mode 100644 index 4e84830..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.dfm +++ /dev/null @@ -1,1026 +0,0 @@ -object ServerProjectOptions: TServerProjectOptions - Left = 338 - Top = 184 - Width = 426 - Height = 243 - HorzScrollBar.Range = 292 - VertScrollBar.Range = 199 - ActiveControl = ePrjName - BorderIcons = [biSystemMenu] - Caption = 'New RemObjects Server' - Color = clButton - Constraints.MinHeight = 238 - Constraints.MinWidth = 300 - Font.Color = clText - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [] - Font.Weight = 0 - Icon.Data = { - 0000010006003030000001000800A80E0000660000002020000001000800A808 - 00000E0F0000101000000100080068050000B61700003030000001002000A825 - 00001E1D00002020000001002000A8100000C642000010100000010020006804 - 00006E5300002800000030000000600000000100080000000000000000000000 - 0000000000000000000000000000D5D1DA000000000026022600610060001C03 - 1B00590A3C005F10370061113700490622005107260042061F00DBCDD300DAC6 - CE00C9B5BC00B4869500C8A3AE00B49DA400CDC0C400962C4900D2AFB800D1B1 - B9002F091200BE647900C68897009D6B7500CCA6AE00C46677009C5E6A00C6AC - B100B75E6D00C87C8700BE818A00DBD4D500BB4755009E515900D9C0C300C3B8 - B900E1D6D700B9777B00AF878A00DBBABC00F2E5E600D29295009C777900CBAC - AD00D4B5B600D4BCBD00C6595C00C5737500C8888900A47F8000C49E9F00B897 - 9800C7A5A600C6686800D5888700B1818100A97C7C00BA8B8B0087696900D1A6 - A600CEA6A600D3ACAC00837070009884840077686800CAB1B1007E737300DDCC - CC007D787800D2CACA00AFAAAA00747373006D6C6C00DEDDDD00969595009969 - 6800C4969500B18D8C0068585700AA949300832D2500C8918C0040383700CCBC - BA00D3C4C200B9877F00BDB3B100C55E4300A58A8300AB655000DCA39200AD96 - 8F0072311900A84D2C00D1704E00D6917900C8B5AE00A53F1300D19D85009D37 - 0200E9BFAA005A585700A43C0000B04A1000C6642700E38D5600C9A48D00CBA9 - 9400C8BBB300AA460000D6B8A400B1A59D00B54B0000E0996400B69D8B00C65B - 0000BB540000BC5F1200AC632700E9E4E000C66A1400DC975900D9AC8500D66C - 0000CD640000CE721400874C100084542400E3AF7C00E2B89000DB730000D87D - 1A00E48B2F00A65A0000F6A64500E9A34C00E5A85E00F5C58B00FB900100E882 - 020096754900F3E8DA00ED9F2C00DCA85C00F4BA6800DABD9400C97C0100FFA5 - 1000EEC27900B7730000FFB43200FEBA4400FCBF5900FBC76A00F6C775007E69 - 4400D4C5AA00FFB42200FFBD3900FFC24C00FFC45300FFC75900FFC95C00EAC9 - 8C00D8BC8300C7B79900FFC95100FFCC6300FFD06B00FFD47300EBC36F00FFD5 - 7A00C9910500FFC53A00FFDA7C00E3CD9800FFDE8700FFE29100F2DB9D008F6E - 0400FFDB7000FFE69700FFE89C00E5DBB700FFE37A00FFE78600FFEDA600695C - 1B00F3E8B600FFEF9400A6900600C4AF2A00FFF5B500FFF28A00FFF49900FFF6 - AB00F3EEC300F4F3E300FFFCBA00FFFEC400D7D77B00FDFFD300AEC35700E8F4 - B7005E8A0400BEE59E005DA825003D661F002D6D00003593060079B065001B6A - 0400BFF2B3001377000096DB8B0039AF2D0002790000066A020002860000A2E9 - A200FBFCFB0037BD4A0000AB1F0006B22D0055D2720018BB440068DD890030C9 - 6000F0F5F500EBECEC00E4E5E500E0FCFE0076E5FD00ADEBFA00C7D8DC003BC9 - EE008DA9B10026B3E00090C3D3002870880051B9DC002F4A54006994A4008594 - 9900057EAF000D28340012192900838383007F7F7F007A7A7A00636363004747 - 47003A3A3A000303030000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040404040402FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020404F6F6 - F5F5F5F5F5F5F7040404040402FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFDFDFDFDF2EEECECECECEEF253FDFDFDFDFEFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B4B4B4B4BF4 - EEE9E9E9E9EEF34B4B4B4BFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFF4B4A4A4A4AEBF1EAEAEAEAF1EF784A4AE6FC66FFFFFF - FFFFFFFFFF150A08080808080808080808FEFEFEFEFEFEFEFEFF708E8E8E8E4A - F1E8E8E8E8F1EF8E8E8EC66666FFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFF54474747F3EDF1EAEAEAEAF1F37047474757FFFFFFFF - FFFFFFFF08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - EFEFEFF3F0F066FFFFFFFFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD474FF666FFFFFFFFFFFFFFFFFF - FFFFFFFF08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFF8E70661566FFFFFFFFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80775F5F5F5E5D060349FFFFFFFFFFFFFF - FFFFFFFF08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF216969 - 585A58585F5F58510549FFFFFFFFFFFFFFFFFFFF09FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF58695E627FBC6262625E58585E0549FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F68646467 - 7FD0BC676464625E585E0549FFFFFFFFFFFFFFF8F948FBFBFBFBFBFAFFFFFFFF - FFFFFFFFFFFFFFFFFFFF907664676E716ED1DA7F716E67645E5A5103FFFFFFFF - FFF83F3B4E3333333334323B4FFBF8FFFFFFFFFFFFFFFFFFFFFF5F676E717574 - B4D6D9DA867571677F9C5E0749FFFFFF503446E7E74A252555353E2D333B6648 - FFFFFFFFFFFFFFFFFF89696E75747D7CCDDBDBD9B47D7471BCD09C5103FFFF59 - 54E5E6E74A4A200B3550404E3D3E3866F8FFFFFFFFFFFFFFFF8976757D7C8393 - CDDBD2938396D1D4DAD0BC8003FFF842E5E6E6E6E74A4A542D464B2B323E3C2B - 48FFFFFFFFFFFFFFFF72797D8393CDCDD2D2AD8B8CB4DBD9DADAD08003FF35E5 - E5E5E5E5E6E7E735234259594E3D3E3845FFFFFFFFFFFFFFFF727E7C93D2DFCF - D88F948B8B8CCDDBD6D4D4BC03FF2DE5DDDDDDDDE5E6E73528343926563E3C32 - 66F9F8FFFFFFFFFFFF898483CDE0E2E2DECBA097948BBFDBD6D4DABC49FFFF2D - E5DD29E5E5E54A2C3E562626262D333A2B3B4F6649F8FFFFFF898583CFE2E4E4 - E4E1C9A89794BFDBDBD9DA7F49FFFFFF44253126134A2E3D33303036303D4D2D - 2E2D3E3A3B66FAFFFFFF85BFE2E4E1E3D7E3DCB2A194ADCDDBD9D112FFFFFFFF - FF2E528A652A17173036362F304425544E32343E3E3966F8FFFFFFDEE2E4E3CE - D5DCCAD7CBC0BF8CD2D9B48DFFFFFFFFFF1460949EAC652A1E1A2F2130E82042 - 46472B2B3E3C2BFBFFFFFFDEDEE1E3DCD5D5CCE1E4CFBF8C96CD8FFFFFFFFFFF - FF197294949494A38A5B1E1D2620422E46505959333E4D41FFFFFFFFE1E1E3DC - D5D5DCE1E4D8AD8C8C8FFFFFFFFFFFFFFF197A9E9797979E9EA09B81371E2628 - 423938383D3E4D43FFFFFFFFFFD7D7D7D7E3E3E4E2D8AD858FFFFFFFFFFFFFFF - 191388979F989898989F9F9F99896037262626263E3C3840FFFFFFFFFFFFFFCE - A6D7CBCBD3568FFFFFFFFFFFFFFFFFFF2419989FA0A0A1A1A1A1A0A09FAEAE6A - 1D2636363D4D4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - 2435A0A0A2A3A8A8A8A8A3A2A1A0AE6A163636364E4EFFFFFFFFFFFFFFFFFFFF - FFFFFF08FFFFFFFFFFFFFFFFFFFFFFFF0D6CA0A3A8A9A9A9A9A9A9A9A8A3A060 - 1A2F2F36FBFFFFFFFFFFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFFFF19 - 0C7BA3A9AAAAACAFAFACACAAA9A899601730211DFCFBF9FFFFFFFFFFFFFFFFFF - FFFFFF08FFFFFFFFFFFFFFFFFFFFFF240C81A8AAAFB1B1B1B1B1B1AFACB59131 - 819B5B1E171F6649F9FFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFFFF24 - 1195AAAFB1B2B2B6B6B6B2B2B1B99117919E9F9160602A4EF9FFFFFFFFFFFFFF - FFFFFF08FFFFFFFFFFFFFFFFFFFFFF240DAAAFB1B2B7B7BBBBBBB7B6B2BA8117 - 9BAE989F9FA06A22F9FFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFF1946 - 61AABAB2B7BBC4C1C1C4BBBBB6C2811FAAA7A1A1A0AE871BF9FFFFFFFFFFFFFF - FFFFFF08FFFFFFFFFFFFFFFFFFFF240BA69BC2C3C4C7C7C8C8C7C1BBBBBE6363 - AFA8A8A3A2A08918F9FFFFFFFFFFFFFFFFFFFF08FFFFFFFFFFFFFFFFFFFF240B - 705973A6B0BDC8CACACAC8C1C4B6637BB9AAAAA9A8A2722BF9FFFFFFFFFFFFFF - FFFFFF0AFFFFFFFFFFFFFFFFFFFF470B0B00244750595C709DB8BDC7C4B6527B - BAB1AFACAAA86032F9FFFFFFFFFFFFFFFFFFFF15FFFFFFFFFFFFFFFFFFFFFF19 - 24241111460B0C1C3434274E6B7B5682BEB2B1B1AF9A604CF9FF090808080808 - 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1924570D422D23140F0E38B3 - C4B7B6B2BA9B314CF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFF24119BAFA4926F336CC4C4BBB7B6BA9B26F9FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2455ABC2C3C4C4C7C7C7 - C7C1BBB7BE954CF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFF19246D59A5B0B3C4C8CACACAC8C1BBB7814CF9FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1924464647105073A69DB8 - C5C8C8C7C47B4CF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFF1924244611110D0D103434736C92A4632BF9FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1924242446552E1C - 1C130F334D383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFF19242424242C3527FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE07F0000FFFFFFF800010000FFFF - FFF000010000FFFFFFF000010000FFFFFFF000010000FE00001000010000FDFF - FFF000030000FDFFFFFFC07F0000FDFFFFFFF07F0000FDFFFFFFF07F0000FDFF - FFFF801F0000FDFFFFFE000F0000FDFFFFFC00070000FFFFFFF800030000F803 - FFF000030000E0007FF000010000C0003FE00001000080001FE0000100000000 - 1FE00001000000001FE000010000000007E000010000800000E000010000C000 - 007000030000E000003800030000E000003800070000E000003C000F0000E000 - 003E001F0000C000003F807F0000C000007FFFFF0000C00000FFFBFF0000C000 - 01FFFBFF00008000007FFBFF00008000001FFBFF00008000001FFBFF00008000 - 001FFBFF00000000001FFBFF00000000001FFBFF00000000001FFBFF00000000 - 001FFBFF00008000001007FF0000FC00001FFFFF0000FF00003FFFFF0000FF00 - 003FFFFF0000FE00003FFFFF0000FE00003FFFFF0000FF00003FFFFF0000FFC0 - 007FFFFF0000FFFF00FFFFFF0000280000002000000040000000010008000000 - 00000000000000000000000000000000000000000000807EA500D5D2E100988A - CC00B9B0C000CAC3CC0000000000C0BEC000BD7BBA00C983C500C57ABC00C9B9 - C600C8B8C400C16BA200C2AEBA008C768000D9CCD200F3EAEE003D1B2900E09A - B800BC96A500A97286006A1C3500CB97A800C5ADB500B6537000D2C2C700BD69 - 7F00D2CACC0093666F00B8A4A800C86E7F00C0A8AC00B0394800BF636E009F53 - 5A0095787A00BA989A00C5505500C7888B00CB9C9E00B98B8C00C59D9E00BE66 - 6600B66E6E00A5777700C5979700D0A1A1008A6C6C00AE8A8A00D4AAAA00CEA6 - A600A3868600D4B3B300CBAFAF0089767600A99292009885850071636300685B - 5B00D2BBBB005D555500D4C4C400E1D2D200A6A1A100898686005F5E5E009B9A - 9A00BE6C6A00CAA8A700D3928E00D18179008C382C00D39D96009E979600DDAF - A50091432F00CD968600C4ACA500C95F3F0086483500B9512C00C0887500C4B0 - A900DCD6D400AD461F00BC6E4F00D6836200A2380A00BD673F00A73800009F39 - 07009C5A3800A33A0100F6793600DFA98A00B4460000A26B4800C54F0000AE49 - 0200BE541000C7622100E29E6B00D2986B00B7835D00D0BFB200968F8A00CC5E - 0000BA530000C3661C00D7680000924B0E00D5884200D1BCA900E6984900FCF2 - E800EBAE6E00CAA98600DC780000C4690000D58A3500F0AD5400F2B36000EABA - 7900F59202009F8F7800CF7D0000FABA5800FFA10000BC780100FFAB1C00FEAC - 2300FEBD4800DECCAB00C2830400D08F0A00FFB52200FFC24D00FDC45400FBC8 - 6200EDD09500FFB50E00FFC03200FFC44200FFC94F00FFCD6400FFCF6A00FBCF - 7400CC900400FFC32B00FBD67C00D5B66A00FFDB8000FFC73700FFC93C00FFCC - 4500FFD15900FFD56100FFDA7900E2D6B600FFFCF400FFCC3200FFDC7000FFE2 - 8E00FFE49600FFE79A00695309008C731600FFD54800FFDB6200FFE07200A482 - 0000D4B33100FBE69600F3E29F00FFE98400FFEE9F00FFEFA700F8ECB200B6B5 - B000EFE09200FFF5AF006F683100FFF28900FFF793009A900000F5F1AE008C87 - 1600D2D18300FFFDA20060600000FFFFB800FFFFC800FFFFD7006D870000AEB3 - 9D0055691A006CA213008DA36C003D660600B3DC8600418B000035750000479D - 120078B75200C8F4B9001C830000126C010023681800A8E99E001390000048B7 - 3B000B860000096B030095E19100007D00008BDA8A00ABF1B00028B336004CC5 - 5C009DECAA0078DF8B0002B7360015BC460045D3740055D980002ACA6100F3FF - FE00F0F4F400FDFFFF00E3E4E4007AEDFF00C8F4FB00BBDAE000AED3DC004ACA - ED0024B2DE0077CCE60084D4EC0015A9DC001BB5E9006C94A4009EA0A1002F50 - 700097989900E7F0FF00808082007F7F81007E7E7E0079797900717171006B6B - 6B0065656500505050004D4D4D000000000000000000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFDFDFDFDEFEBEBEEFDFDFDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF3F349F0EAE6E6EAF049F1F8FDFFFFFFFFFFFFFEFEFEFE - FEFEFEFEFEFEFEFEFF537272E9EDE7E7ECE9729FB2FDFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFF07090902EDE7E7EC00090807FFFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFF02E8F0F2FDFFFFFFFFFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFF0C726911FDFFFFFFFFFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFF60205856554B15FDFFFFFFFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFF6464505B50504E4E47FDFFFFFFFFFFFFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFF6C63575CA5A5595A544E47FDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFF6C5C6261BDD4A55F5C6E6015FFFFFFFFFFF7F7F7F7F7FF - FFFFFFFFFFFFFFFF6F626B6A76C9D6C96A616EB54FFDFFFF3F36383838233A41 - F5FFFFFFFFFFFFFF6F6B6D75AAD1C87D80C9CECFB5FDFF371BE5E5E53B243230 - 3CF7FFFFFFFFFFFF776D80CACAC47B7B85CDD6D4C3FD35E5E4E3E5533B3F2334 - 28FAFFFFFFFFFFFF716DCADDDECB83827BC1D6CEC6FD34E2E4E4E20F34302C31 - 2DFCF8FFFFFFFFFF7185D9E1DFDFC79181B8D3D6C6FDFF3E100FF41B272B432E - 29302F3AFBFFFFFFFFCBDEE0D0DBCCBBAB93C1D34FFFFFFF16654A161A25253E - 0F1D24322FFBFFFFFFDADAE0D8CCCCDFD29375A6BAFFFFFF277F8C7E5E1E1801 - 0F0636293139FFFFFFFFDAD7D5D0DCE1D9865DBAFFFFFFFF48818787948F7346 - 16242C293136FFFFFFFFFFFF12C2CBC57C7CFFFFFFFFFF175E8D8889898E98A0 - 71182A4844FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A7A9A9091919190A7 - 7818203342FFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF0A7A9C9D9797979DA8 - 6545210E41FAFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF0B929DA2A3A4A3A2A9 - 45899A654623F7FFFFFFFFFFFFFFFEFFFFFFFFFFFFFF173DA9B6B0B4B4B4AFAE - 268A99A08D22F7FFFFFFFFFFFFFFFEFFFFFFFFFFFFFF0A0A96B3B4BFC0BFBEAC - 4CA1909B831CFAFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF170A031D1D52689EB98B - 4CAE97A179F5F9FFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF1719190D13131314 - 74BCA3AE73F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0495B6AD84 - B1BEB0B7660EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1974BBADBE - C0C0BFBC67F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1717031D1F - 4D7084AD5140FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1719 - 1917132928FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFE000FFFF - E000FC002000FBFFE001FBFFFE0FFBFFFE0FFBFFF807FBFFF003FBFFE001FFFF - E001F07FC000C01FC000800FC000000FC0000007C0008001E001C000E001C000 - F003C000FC0F8001FFFF8001FF7F8000FF7F80007F7F00007F7F00007F7F0000 - 40FFC000FFFFF800FFFFF800FFFFF800FFFFFF01FFFF28000000100000002000 - 0000010008000000000000000000000000000000000000000000000000000000 - 0000595252007A76760060595800C2553300B5523400C45E3E00BC502900A251 - 3600644C4300AF573300644C4200B2410C00AC3C0C00CEA39000B43B0000B559 - 2A00845037006F594E00C4C2C100653F2B00B7470000B04504009C410B00A35A - 2E00E7B39300BD4D0000B24A000092400500B2713F00ECE4DE00E8660000B869 - 2A00DBD5D000B3550000D1711B00EA7F2000C8762900D1690000D4D0CC00DB91 - 3500EF8A0000BD6A0000CDCAC600F795050067584300FFAD2800FFAF2A00E090 - 0500C4810000E2C89400E9E6E000865C0000CD8C01009C780000EFD97F007268 - 34006F6B5300F4F3EB0058551000BFBA41008D8F000087870700D3D3CF00D0D0 - CD00CFCFCE00818D07007087000098B83C006E823600709A0500436214004B7E - 00004C890000476D1A00CEE8AE0032640000539A0A002B7300002B6E06008ECB - 6E0043A01E001D6D000081CD70009EDD9000A5E59700B6EFAB00CAF8C4000C7F - 0000B6F1AF00008700000086000000790000006E0100A1EAA30076DB840022B8 - 3D001AB63B0078DE8C0003B52F0030C4540053D67B004DD67B002ACC610045D7 - 7B00CAFFFF00B9DAE0004EDFFE0092E7F90093A7AB003CDBFF00B0CDD40079D2 - E90098CEDD009BB8C0002FC4F1003E889F009CC6D300C9EAF4007BC7E1009FDE - F3001D5972001C576E002B6881002B4D5A00697B8200445E6B00454B4E005759 - 5A0056585900B6B6B600909090007C7C7C007B7B7B007A7A7A00565656004141 - 4100000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008989 - 898984847D7B7A797F8685838989898989838001746E6B737E03818889898989 - 8913331E716C69706F3A3F878989898989412B27757876776D21408289898989 - 89898989896A727C02898989898989898989898920190E140289898989898989 - 8989891D100A0406080B8989898989898989200C173B1C0D0705098989898989 - 8920161522524C1B0F1811028989898989251A1F365A482A3447381289898989 - 892326424D462931585D4A2D8989898989243E63603C2F2C495C4F3989898989 - 892451676562372E3D5B4E028989898989896466595755443543458989898989 - 8989895F5E5668613028898989898989898989894B545350328989898989F003 - FFFFE003FFFFE003FFFFE003FFFFFE1FFFFFFC1F505BF80F4E4EF007FFFFE003 - FFFFE003FFFFE003FFFFE003FFFFE003FF6CF0075CA5F80F5A54FC1FFDFF2800 - 0000300000006000000001002000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000100000007000000280000 - 003300000034000000340000003600000052000000AB000000BD000000BD0000 - 00BD000000BD000000AF000000670000003A0000003400000034000000340000 - 0030000000040000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000141414061111113D0A0A0A950808 - 08B6080808BA080707BA0A0E10C10380B4FE057CABFE057AAAFE057CABFE067F - AFFE0380B7FE0B1D25DB080606BF080808BA080808BA080808BA080808BA0000 - 0093000000180000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000484848184C4C4CDA3D3D3DFF3C3C - 3CFF3C3C3CFF3D3B3BFF37474CFF20BBE7FF3BC9EFFF3BC7ECFF3AC8EBFF3CCB - F0FF1BB0E0FF264C5CFF403837FF3C3C3CFF3C3C3CFF3E3E3EFF2A2A2AFF0000 - 00A6000000170000000000000000000000000000000000000000000000000000 - 0000000000000000001800000018000000180000001800000018000000180000 - 0018000000180000001800000018000000180000001800000018000000180000 - 001800000018000000180000001800000018969696179E9E9ECF949494FF9393 - 93FF939393FF949393FF859499FF2FB5DFFF74DEF7FF74E6FFFF74E5FFFF7CEA - FEFF2DADD9FF608899FF9B9492FF939393FF939393FF9A9A9AFF383838FE0000 - 00A6000000170000000000000000000000000000000000000000000000000000 - 000000000030000000770000008F0000008F0000008F0000008F0000008F0000 - 008F0000008F0000008F0000008F0000008F0000008F0000008F0000008F0000 - 008F0000008F0000008F0000008F0000008F89898917939393CFDBDBDBFFDFDF - DEFFDFDFDEFFE1E0DFFFC7D8DCFF3EB6DBFFA5EBF9FFA0EFFFFF9FEEFFFFACF8 - FFFF40AED6FF94BECEFFE9E4E0FFDFDFDEFFDFDFDEFFEAEAEAFF424242FE0000 - 009F000000180000000000000000000000000000000000000000000000000000 - 00182B0414FF42061FFF490622FF490622FF490622FF490622FF490622FF4906 - 22FF490622FF490622FF490622FF490622FF000000FF000000FF000000FF0000 - 00FF000000FF000000FF000000FF000000FF8F8F9017969696D6EFE4D6FFF3E8 - DAFFF3E8D9FFF3E9D9FFD9DFD8FF55BBDBFFDFF7FBFFDAFBFFFFDAFBFFFFE6FF - FFFF5BB6D7FF9DC3CAFFF5ECDAFFF3E8D9FFF3E8D9FFF4F3E3FF555250FF0000 - 0068000000100000000000000000000000000000000000000000000000004906 - 22FF0000008F0000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000009999990E99999987919191B18F90 - 91B28F9091B2919090B2829197BC57BEDEFFB5E3F3FFB7E2F2FFB6E6F5FFB8EB - FDFF5FC4E7FF5A7F8EE88F8988BB8E8F90B38F9091B28F9091B299999AAF0000 - 0010000000000000000000000000000000000000000000000000000000004906 - 22FF0000008F0000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000239ECA9989B8C4FF9AD2E2FF64A5BBFF3171 - 86FF1F6B86EC181F21750000000E000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000004906 - 22FF0000008F0000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000462788342DCC8B9FFFFFAF0FFB4ACABFF6155 - 51FF13181BDC0000006A00000013000000010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000004906 - 22FF0000008F0000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000D0000002D673F1484C9C3BBFFF6EADEFFACA6A1FF575A - 58FF331705DF0000008A00000041000000180000000400000000000000000000 - 0000000000000000000000000000000000000000000000000000000000004906 - 22FF0000008F0000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000100000019522E006F733C06BCA45615E9CB7644FFD0794FFFC66E47FFA157 - 31FF743514EE351403CA060200A700000074000000360000000A000000000000 - 0000000000000000000000000000000000000000000000000000000000004906 - 22FF000000770000001800000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000010000 - 001F9A5A03A9C5681AF3CA6333FFBC6245FFB1624CFFC35C42FFCA6148FFD268 - 50FFD1684AFFC35E3CFF7C3211EA230C00C10000008D000000400000000A0000 - 0000000000000000000000000000000000000000000000000000000000005107 - 26FF000000180000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000002F20061BBD6F - 0DC4C55F1FFFAC4622FFA73D16FF8F481AFF745C29FFA14010FFA63E11FFAA44 - 1AFFB6502BFFC55F43FFC86248FFA34827F72E1002C90000008D000000360000 - 0004000000000000000000000000000000000000000000000002000000080000 - 000F000000140000001600000016000000160000001600000016000000130000 - 000D000000060000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000CCE861DB8B04A - 10FF9B3506FF9E3801FFA53A00FF8C4503FF386318FF66500BFFA53C00FF9F39 - 00FF9C3603FFA33D0FFFB44E29FFC25D3FFF9D4426F7240C00C2000000760000 - 0019000000010000000000000000000000000000000B00000024000000440000 - 006C0000008C0000009A0000009D0000009D0000009D0000009A000000870000 - 00640000003C0000001600000004000000000000000000000000000000000000 - 00000000000000000000000000000000000000000004B8862E76B95C11FF9D37 - 00FFA74100FFAD4700FFB54A00FFA84F00FF296401FF026A02FF7F5300FFB447 - 00FFA84300FFA23C00FF9D3702FF9F4D25FFA46754FF7A3214EB050200A80000 - 0040000000060000000000000001000000142418185E4A3333B27A5A5ADFAA8A - 8AF7BDA0A0FFBFA0A0FFBD9D9DFFC09F9FFFBB9595FFA07979F46F4F4FDF3825 - 25C10000009D0000007300000037000000080000000000000000000000000000 - 000000000000000000000000000000000000CDA24D39D2913AE0A33D00FFAE48 - 00FFB54F00FFBC5600FFC75B00FF996300FF157400FF007500FF0B7000FFA65A - 00FFBA5100FFB14B00FFA74100FF7F5118FF7B6B47FFA15938FF371501C90000 - 006D0000000F000000000000001C6B49499DB19494F9D4CBCBFFE3E4E4FFE3E3 - E3FFE0DBDBFFDFD6D6FFE0D8D8FFD6C2C2FFC9A8A8FFD0ACACFFD6B4B4FFC69E - 9EFF8A6262EB281B1BBC0000008B000000380000000500000000000000000000 - 000000000000000000000000000000000000ECBA5E91C06D1FF9AF4800FFBC56 - 00FFC55F00FFCE6700FFD06D00FF557B00FF008400FF008100FF097D00FF956D - 00FFD06100FFC75700FFBB4D00FF5D5C12FF51682BFF806741FF70310AE50000 - 009100000015A671710A765353B1CCBDBDFFEAF3F3FFE6EBEBFFE2E3E3FFDFDE - DEFFDDDADAFFDBD6D6FFDBCFCFFFC7A7A7FFAE9494FF9E8282FFB08A8AFFCCA3 - A3FFD6AEAEFFB07E7EFC2A1D1DBD000000770000001600000001000000000000 - 000000000000000000000000000000000000DFA552C7BF6213FFBB5400FFCA64 - 00FFD86D00FFDD7400FFCF7B00FF4C8A00FF009100FF338A00FFC47E00FFDD76 - 00FFBD7100FF357200FF166C00FF0B6704FF306618FF5C6832FF874D19F70000 - 00A300000018AB75758EC8B1B1FFEBF4F4FFECEFEFFFECECECFFECECECFFE6E6 - E6FFDFDFDFFFDFDFDFFFCEB9B9FFD3B7B7FFCDCBCBFF9F9797FF957B7BFFA480 - 80FFD5ADADFFD0A4A4FF986B6BF00705058F0000001D00000002000000000000 - 000000000000000000000000000000000000E2A754EDC66A14FFCA6200FFDC6E - 00FFC87B00FF738F05FF589605FF439908FF369B07FFC38F00FFFC8700FFE882 - 00FF888000FF058000FF007800FF006E00FF076806FF3A6720FF835C1DFE0000 - 00A400000018BC9393D0DAD2D2FFEFF8F8FFF3F3F3FFF5F6F6FFF4F5F5FFEEEE - EEFFE4E6E6FFE1E6E6FFC4A7A7FFDBC2C2FFC8B3B3FFA68787FFA68686FFAD8A - 8AFFCDA6A6FFD4A8A8FFAE8080F61E151593000000250000000E000000080000 - 000100000000000000000000000000000000E0A554EFCE7214FFD96A00FFCA7B - 02FF339C11FF00AB1FFF5DA41CFF45AC26FFE3A71CFFFFA00FFFFB9805FFF590 - 00FFDD8700FF4D8500FF008100FF107400FF1D6800FF1F650FFF756015FF0000 - 009600000016BD8F8FA9DBCFCFFFF4FCFCFFFAFCFCFFFFFFFFFFFCFFFFFFF1F4 - F4FFE9EBEBFFE3E7E7FFC4A2A2FFDBBBBBFFBC9797FFAB7C7CFFB07C7CFFB884 - 84FFD2AEAEFFD0A7A7FFA07575EE000000A90000008100000068000000480000 - 00250000000F000000010000000000000000E9BC6DD6D87D1AFFD87200FF6697 - 12FF06B22DFF1EB63BFF13BC46FF36BB45FFBDBF4CFFFFC04DFFFFB334FFFFA2 - 10FFFF9000FF978900FF048800FF157C00FF1A6E00FF086605FF675C0BF70000 - 007900000010B8818125C6A1A1C4EEF1F1FFFBFFFFFFF2E5E6FFF7F6F8FFF2F7 - F7FFEBF3F3FFDBDADAFFCBAAAAFFD6AFAFFFBB8383FFB67474FFB87272FFBF7E - 7EFFD5B3B3FFCA9C9CFFB98888FF926E6EEF735353E04A3131CC0D0909AB0000 - 009500000064000000280000000400000000F5DE9CA0DE8D2BFADB7700FF5CA3 - 21FF16BD45FF2BC556FF34CB65FF31CD69FF50CF6CFFD7D77BFFFFCC66FFFFB5 - 37FFFF9D0BFFA69000FF068D00FF008300FF007700FF006B00FF805201E60000 - 004F0000000900000000BA828210D1B1B2B5E2D3D4FFC68A8DFFC17880FFD4AF - BBFFDED8DDFFD1BFC0FFCDA2A2FFCD9B9BFFBF7575FFBF7070FFC36969FFC877 - 77FFCEA7A7FFC59797FFD0B5B5FFD5BDBDFFD5B5B5FFD1AEAEFFBB8D8DFF6E4C - 4CE0100B0BAE000000840000003300000004FAF3BA43EFBD6DDB988B0CFF18B9 - 3FFF2CC659FF43D272FF77DB84FF86E190FF57DB85FFADE79DFFFDDF8DFFFFC4 - 55FFFFA619FFC39300FF728A00FF038700FF007900FF287100FF6C3E00B60000 - 002300000001000000000000000000000000B680858ECB918DFFF8C586FFE5BB - B1FFCD9095FFC38695FFC58993FFC36F73FFC66263FFC86767FFC95D5DFFCD70 - 70FFDECECEFFE3D8D8FFCDB8B8FFAF8C8CFFA78282FFBB9595FFD1ACACFFD2A9 - A9FFA67878F91D1414B80000007C0000001BD5D3A906FDF5BE7739BD48FF1CBD - 49FF3BCE6BFF61DC86FFB7E89EFFC7F2B3FF9BEDB0FFF4FDD2FFA0E08DFFBFC5 - 58FFC4AF2AFFB69609FFEB8300FF2A8500FF007C00FF7E7000EF301A00520000 - 000800000000000000000000000000000000B6848D9FCD8E7CFFFFA000FFFFAF - 1CFFFFCF7CFFEDC2A3FFD59796FFC67A89FFC46675FFC3555DFFBD4749FFC67B - 7CFFE5FEFEFFD8D3D3FFCEB1B1FFCFC8C8FFA5A4A4FF947B7BFFA27979FFD2AA - AAFFD2A5A5FF9C6F6FF4050404A10000003500000006FFFFD009CAECA7C937BE - 4EFF42D170FF71E290FF99EFACFFBEFAC2FFB3F4B8FFE8F4B7FF56D87DFF2CC5 - 59FF5EB231FFB19508FFEB8100FFB07500FF5E8200FC7D4A0086000000110000 - 000000000000000000000000000000000000C498A1DCD99564FFFFA910FFFFA9 - 17FFFFA70FFFFFAE16FFFFC85EFFF2C48FFFDEA590FFCA7F86FFB75C70FFBD70 - 7AFFDDD3D6FFCAB3B3FFD3BCBDFFD4C8C8FFA89191FFA38888FFA68787FFC9A1 - A1FFD4AAAAFFC18F8FFF422E2EB8000000350000000500000000FFFFCF22D5DF - 92D36CCF6EFF63DF8DFFA6E79CFFC7EEAAFFBBEEAAFFA5E394FF50D579FF1EC5 - 5AFF39B131FFD98E03FFEC7C00FFE68309FDA66C059B0C070014000000000000 - 000000000000000000000000000000000006CCA5AEFDDC9759FFFFB121FFFFB3 - 2DFFFFB331FFFFB431FFFFB327FFFFB322FFFFC149FFF7C272FFE5AC82FFD38C - 86FFC77A8CFFBF7382FFDAB8BDFFC9B1B0FFA77D7DFFAD8181FFB08080FFCDA7 - A7FFD3ACACFFC39191FD3B2A2AA80000002D000000050000000000000000FFF9 - C217E8F3B5AD9ADA84F58CDE89FF92E08FFF79E290FF5CD980FF3ECA64FF15BF - 4BFF2DB12FFFC69310FFEE951EEBC9851B750000000A00000000000000000000 - 00000000000000000000000000009E747951D3B0B7FFE9A34CFFFFB731FFFFBA - 3EFFFFB941FFFFBB44FFFFBC44FFFFBD43FFFFBC3BFFFFBC30FFFFC038FFFBBE - 58FFECA45CFFDC9073FFD68487FFBC797DFFB07B7BFFB57979FFB97878FFD3AF - AFFFD1A7A7FFA97B7BF3453232960000001B0000000100000000000000000000 - 000000000000FFF7BB50E6E69CB6BBDD8DDC99D982F497CE68FDA5C04FFB6BC2 - 55E7A6BB4DC9E5AF438B976F261B000000010000000000000000000000000000 - 0000000000000000000000000000AF8B918BCBA8AFFFF7B246FFFFBC3EFFFFBF - 4AFFFFC14EFFFFC351FFFFC453FFFFC455FFFFC352FFFFC24FFFFFC048FFFFBE - 39FFFFC137FFFFC53FFFE1804EFFB95F70FFBB7878FFC16F6FFFC36F6FFFCFA7 - A7FFC69999FFAC8484EA1B131339000000040000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000BEA0A7CBC7A2A5FFFFBF46FFFFC54EFFFFC6 - 58FFFFC85DFFFFCA60FFFFCB62FFFFCB63FFFFCA61FFFFC95FFFFFC75AFFFFC5 - 55FFFFC34EFFFFC938FFE8965AFFBE6479FFC56B6BFFC86666FFCB6565FFD9BB - BBFFDBC4C4FC6D56563000000003000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 0000000000000000000000000004C9AFB7EDCDA593FFFFC64FFFFFCB5BFFFFCC - 66FFFFCD6AFFFFD06DFFFFD16DFFFFD16DFFFFD06EFFFFCF6AFFFFCD68FFFFCB - 62FFFFCB5AFFFFC54EFFDE9771FFC36578FFC75B5FFFC55758FFC56363FF0F0D - 0DA10E0D0D300000001500000002000000010000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 0000000000000000000089717132DAC4CCFCD5AB80FFFFC959FFFFCF68FFFFD2 - 70FFFFD577FFFFD77BFFFFD87CFFFFD87CFFFFD77BFFFFD678FFFFD474FFFFD1 - 6EFFFFD365FFFCBF59FFD38F7BFFCB8A98FFC87277FFB7515DFFB65F66FF0000 - 00B30000009B0000008000000034000000180000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 00000000000000000000A08C8D6BD9C8D0FFDEB57CFFFFCF65FFFFD575FFFFD9 - 7DFFFFDC83FFFFDE88FFFFDF8AFFFFDF8AFFFFDE88FFFFDD85FFFFDA80FFFFD7 - 7AFFFFDB70FFF7BD62FFCB8A8CFFE9B27DFFF5C379FFD9A194FFCA7E82FFC887 - 94FFBB7C86F9181111B71713139E000000660000001000000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 00000000000000000000A79799AFD0BEC9FFEFC477FFFFD570FFFFDA7FFFFFDE - 89FFFFE18FFFFFE494FFFFE597FFFFE698FFFFE496FFFFE292FFFFE08CFFFFDC - 85FFFFE27BFFF1B76AFFC58B9AFFF4B766FFFFBF24FFFFBE3BFFF3BB6CFFDE9F - 7AFFD0807AFFD28F95FFAA7E80E7000000700000000F00000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 000000000000A292921FB7ABAEDCC8B8BEFFFFD274FFFFDB7AFFFFDF89FFFFE3 - 93FFFFE79CFFFFEAA1FFFFECA5FFFFEDA6FFFFEBA4FFFFE99FFFFFE698FFFFE1 - 90FFFFE985FFE9B172FFC1879AFFF6C374FFFFC43DFFFFBE45FFFFBD39FFFFBF - 33FFFABE4BFFE0905BFF913B44E20000006E0000000F00000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 000000000000A195965DCDC7CAF0C8B5AEFFFCD373FFFFE285FFFFE493FFFFE8 - 9EFFFFEDA7FFFFF1AEFFFFF3B2FFFFF2B3FFFFF2B1FFFFEEABFFFFEBA3FFFFE7 - 99FFFFF28EFFE1AA7BFFBF838BFFFFD073FFFFC951FFFFC557FFFFC351FFFFC1 - 4AFFFFC837FFF6A645FF8F4856E10000006E0000000F00000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 000000000000AAA5A6A8E7E4E8FFCAB79FFFF5CE75FFFFF18CFFFFF49CFFFFF7 - AAFFFFFBB4FFFFFABCFFFFFDC1FFFFFCC3FFFFFABEFFFFF5B7FFFFEFACFFFFED - A1FFFFEE95FFD6A17FFFD19886FFFFDF78FFFFCD62FFFFCA63FFFFCA5EFFFFC8 - 58FFFFC64BFFEAA15EFF905763E10000006D0000000F00000000000000000000 - 0000000000000000000000000000000000000000000000000000490622FF0000 - 008F000000180000000000000000000000000000000000000000000000000000 - 000000000000BBB9BAFAE9E7EAFFAFA39BFFA08E7AFFBAA387FFCCB590FFE0CD - 9EFFF1E4B0FFFFFFC8FFFFFFD7FFFFFFD4FFFFFFD1FFFFFFC3FFFFF6B3FFFFF4 - A8FFFFE798FFD09F8AFFDDAA87FFFFE379FFFFD473FFFFD270FFFFCF6AFFFFD0 - 63FFFFC658FFDF986BFF916068E10000006B0000000E00000000000000180000 - 001800000018000000180000001800000018000000180000001842061FFF0000 - 0077000000180000000000000000000000000000000000000000000000000000 - 000000000000AFB0AFFFDCDBDCFFEEEDF1FFD5D1DAFFBFB5C1FFB8A8AFFFAA96 - 97FFA38B87FFAD968FFFBCA699FFD2C1A8FFE3D7B5FFF4ECBBFFFFFFBCFFFFFF - AEFFFFE798FFC4918BFFDDAE88FFFFE983FFFFDB83FFFFD97EFFFFD578FFFFD6 - 6FFFFEC861FFD99474FF926A71DF000000670000000D00000018000000770000 - 008F0000008F0000008F0000008F0000008F0000008F0000008F2B0414FF0000 - 0030000000000000000000000000000000000000000000000000000000000000 - 0000000000009797972C9997975AAAA7A796B0ACACC7C2BBBBEECCC2C5FFD5C9 - CDFFDBCDD3FFDAC5CCFFC5ABB1FFB7999FFFB29196FFAB8789FFB38C88FFC9A4 - 8DFFD1AA89FFB88383FFE2B890FFFFF194FFFFE190FFFFDF8AFFFFDA83FFFFDD - 79FFFBC76AFFD08D7CFF996A69FF0000005E0000000D510726FF490622FF4906 - 22FF490622FF490622FF490622FF490622FF490622FF490622FF000000180000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000C2B8B8049D8E - 8E349D8B8B52B29FA1D1C7B4B8FFC8AFAFFFD1B6B9FFD7BDC4FFD0B0BAFFC7A3 - ADFFB48695FFB2807FFFF2D89AFFFFF4A3FFFFE89CFFFFE596FFFFE08EFFFFE4 - 83FFF9C872FFC88581FF996A69FF000000490000000800000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000002B7AFB2B3D1C3C6FFF2CA76FFFFDA7BFFEDCC8AFFDCBD92FFD6B8 - A4FFC7A29FFFCDAC97FFFFF2AFFFFFF5AFFFFFEEA9FFFFEAA1FFFFE598FFFFEB - 8EFFF6C679FFB26F7DFC6E5E5FBE000000340000000500000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00007871711DCDCACEE9D5C7BEFFEBC36FFFFFF285FFFFF495FFFFF8A3FFFFFF - AEFFFFFFB8FFFFFFBFFFFFFCBFFFFFF9BBFFFFF3B4FFFFEFABFFFFEBA1FFFFED - 94FFEDC07AFF996A69FF555050A3000000210000000200000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00009A979851DFDDE1FFC8BBB3FFAE956FFFD8BC83FFE5CD92FFF2DEA0FFFEF1 - B2FFFFFFC5FFFFFFD4FFFFFFD4FFFFFFCFFFFFFFC4FFFFF6B4FFFFF0A7FFFFEB - 9AFFDEAD7BFF996A69FF33333381000000110000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000A6A5A56FD9DADAFFE6E4E7FFBCB6C1FFABA1AFFFAE9DA2FFAF9B95FFB09B - 8BFFC3B097FFD6C9ACFFE6DEB8FFF3EEC3FFFFFCC5FFFFFFC1FFFFFFB3FFFFF6 - 9FFFDBAE83FF9A6765FF0000006F000000100000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00009899991EA6A7A79AC7C6C7C9CDCACAEECEC6C7FFCBC2C5FFCDBFC6FFC8B7 - C0FFC9B1BBFFBA9DA5FFB79899FFB99B95FFB99A8EFFC7A991FFD7BC95FFE6C5 - 8EFFCD9D85FF94676BE60000004F0000000A0000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000008B88880A8F8A8A24AEA7A739C0B8B853B0A4A47EBAAA - ABA0C6B4B4CECDB9BBF2C4ACB0FFC8ACB2FFCEAEB6FFC8A3AFFFC39DA3FFC39A - 98FFB58381FF644748C900000029000000020000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00009F8A8A08BBA8A817CBB7B727BCA3A449B4979774BA9898A2C5A3A5E3C8A5 - A9FFB3878AFFAF7E7E1400000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FFFFFFE000000000FFFFFFE000000000FFFFFFE000000000FF00 - 000000000000FE00000000000000FC00000000000000FC7FFFE000010000FC7F - FFFFC03F0000FC7FFFFF801F0000FC7FFFFF000F0000FC7FFFFC00070000FC7F - FFF800030000FCFFFFF800010000F000FFF000000000E0003FE0000000008000 - 1FE00000000080000FE000000000000007E000000000000007E0000000000000 - 01E000000000000000600000000000000020000000008000000000000000E000 - 000000010000E000000000030000E000000800070000C000000C000F0000C000 - 000F001F0000C000001FFFFF0000C000003FF8FF00008000001FF8FF00008000 - 000FF8FF00008000000FF8FF00008000000FF8FF00000000000FF8FF00000000 - 000FF8FF00000000000FF8FF00000000000800FF00000000000001FF00000000 - 000003FF0000F800000FFFFF0000FE00000FFFFF0000FE00000FFFFF0000FE00 - 001FFFFF0000FE00001FFFFF0000FE00001FFFFF0000FF80001FFFFF0000FFFE - 007FFFFF00002800000020000000400000000100200000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000001010103000000370000 - 00550000005300080B5C002232A2001E2DCC001F2ECA002131CC000508A80000 - 006300000053000000560000004B000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000034343452272727D72222 - 22ED241C1AEB1D4857F61BB5E9FF23AFDCFF24B4DFFF15A9DCFF1A3744F4241E - 1CEB232424EC232323EE080808B6000000000000000000000000000000000000 - 0000000000000000000000000016000000160000001600000016000000160000 - 0016000000160000001600000016000000160000000091919174979899FF9798 - 99FF9C9696FF709DACFF4FD1F3FF79EAFFFF7BEFFFFF45C3E7FF6A8E9EFF9F97 - 96FF9EA0A1FF79797AFF090909C0000000000000000000000000000000000000 - 000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000 - 00FF000000FF000000FF000000FF000000FF000000008C8D8D72DDD9D4FFF7F1 - E9FFFBF0E7FFB1D7DFFF83D5EBFFCAFBFFFFCFFFFFFF75CAE3FFABCFD8FFFEF4 - E9FFFFFCF4FFB6B5B0FF080707AC000000000000000000000000000000000000 - 0000000000FF000000700000002D000000160000001600000016000000160000 - 001600000016000000160000001600000016000000009697974DA6A4A0BAAAA7 - A3BBB4ACA6B889AFBACE84D3EDFFC4E9F4FFC1EBF8FF78CDE9FF6E8F98E0AEA5 - 9FBBB5B3AFBAA5A5A3C12626264C000000000000000000000000000000000000 - 0000000000FF0000008600000016000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000426572106FAEC3C6BBDAE0FF6A92A2FF235568F1020A0D5F0000 - 000000000000A8AAAB0100000000000000000000000000000000000000000000 - 0000000000FF0000008600000016000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000001BA9947FB9FFF4E8FF968F8AFF2B1E15E90000006C0000 - 0013000000000000000000000000000000000000000000000000000000000000 - 0000000000FF0000008600000016000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00054627006384430FC3BB6A39F7D68362FFBC6E4FFF8C4627F5401B09CB0500 - 008E0000003D0000000400000000000000000000000000000000000000000000 - 0000000000FF0000008600000016000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000100C00077D49 - 0A92C6611CF9BD542BFF9C5A38FFAF4D2AFFBF512FFFCB6040FFCA6242FF8239 - 1EF0160700AF0000004400000003000000000000000000000000000000000000 - 0000000000FF0000007000000016000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000915B1388BE54 - 10FFA2380AFFA33803FF60540FFF62500BFFA73800FF9F3907FFAD461FFFC75C - 3BFF893C23F40E0400A100000028000000000000000000000000000000010000 - 00090000000E000000230000000E0000000D0000000600000000000000000000 - 000000000000000000000000000000000000000000008062284BC16516F8A33A - 00FFAF4800FFC04E00FF606000FF056D01FF795600FFB44600FFA33B00FF9B45 - 13FFA36649FF5A2813E10100006400000000000000000000000C000000250000 - 004A000000660000006B0000006B0000005F0000003E0000001A000000040000 - 00000000000000000000000000000000000000000000DFA047B7AD4904FFB951 - 00FFCF5E00FFC46900FF307B00FF007F00FF377400FFC85E00FFC94F00FF8950 - 09FF656C37FF844F2BF91807009B0000000000000016180F0F62584040BE8873 - 73DE8A7373E08B7474E07F6262DC3D2A2AC3000000A00000007E000000350000 - 00040000000000000000000000000000000000000000D28836F0BB5400FFD666 - 00FFDC7400FFA48200FF139000FF418B00FFCF7D00FFBB7400FF377100FF1269 - 01FF236818FF78632BFF2C1505BA0000000C7B5858A6D1CACAFFE5E9E9FFE1E1 - E1FFE3DEDEFFD1BABAFFBA9999FFCDA7A7FFAB8181F5211616BA000000810000 - 00140000000000000000000000000000000000000000D58A35FFD66300FFBC7B - 02FF439A0EFF43A011FF6CA213FFE29805FFFF8C00FFC28500FF1C8300FF0077 - 00FF0D6804FF55691AFF2B1C08B9A271718FE2E5E5FFFAFFFFFFF0F4F4FFE5E9 - E9FFDBD5D5FFD3BCBCFFA59F9FFF967B7BFFD7B2B2FFB58686F9000000960000 - 00280000000E00000006000000000000000000000000E19B44F7DA6E00FF4F9D - 17FF02B736FF18B941FF7DBB45FFFFBD45FFFEAC23FFFF9302FF6F8900FF0082 - 00FF116F00FF376808FF271B049EC19A9ABDF5FFFFFFFFFFFFFFFFFFFFFFF1FE - FDFFD6CFCFFFD4B4B4FFAE8C8CFFA57A7AFFD2ADADFFC49595FB000000AF0000 - 0087000000660000003A000000130000000000000000F5C67BBDC18007FF2EB2 - 34FF29C85CFF49D273FF45D476FFB3DC86FFFFCD68FFFFA71BFF9A9000FF0C89 - 00FF007B00FF416500FC2D140068B4787817DCCCCBD7F3EAEEFFDFC3D4FFE7F0 - FFFFD2CACDFFCD9D9DFFB66E6EFFBE6C6AFFD0A1A1FFC69D9CFFA98686F47C5B - 5BE0322121BF0000009A000000640000001400000000F5E3B24A70BC4DF712BF - 4AFF50D67BFFABE99EFF9DECAAFFC4F4BCFFC6D980FFD4B331FFCE9104FF6B84 - 00FF0A8200FF605500C61004001F0000000000000000BB828EC7E49B62FFDDAF - A5FFC595B0FFBD697FFFC14F58FFC85152FFE0D0D1FFDAD1D0FFB9A2A2FFBB9C - 9CFFCFA5A5FF785555E20000009A000000370000000600000000DCFFC28E4CC5 - 5CFF5ADB84FFABF1B0FFC8F7BFFFCDF1B1FF42D373FF48B73BFFCA8F04FFDB7B - 00FF827D02EB3A220044000000000000000000000001C08A90DCFFA100FFFFB5 - 0EFFFABA58FFE1A78BFFC86E7FFFB34B69FFD5D2E1FFD8CED3FFC0BEC0FF8D78 - 78FFC29D9DFFD6A8A8FF412D2DBE0000003C0000000800000000E7E3C109E2EF - AD9089DD88FB95E191FFA4E89DFF78DF8BFF2ACB65FF21B437FFD08F0AFFF58E - 13D95F39054B0000000000000000000000003E2F360BD3A295FFFFAF1DFFFFB3 - 23FFFFB721FFFFC32BFFFFC94FFFEBAE6AFFD17E77FFD192A2FFBA9498FFA573 - 73FFC79E9EFFD4A9A9FF563D3DB1000000270000000300000001000000000000 - 0000F2F3B34AD1E397AD9CDB87D18BCF6CDD79C151D880BE4CC0D9A6397B5B40 - 131A00000000000000000000000000000000A4839A58DCAB89FFFFBF30FFFFC2 - 4DFFFFC453FFFFC552FFFFC442FFFFC737FFFFCA30FFED9447FFB45D72FFBE66 - 66FFD29796FFCAA8A7FF46303045000000050000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000AF97AE94E4B47DFFFFCE47FFFFCD - 66FFFFCF6AFFFFD06CFFFFCE6AFFFFCB62FFFFD548FFF0AD54FFBB5276FFBF3F - 48FF937172DA3230307D0000002C0000000D0000000000000000000000000000 - 0000000000000000000000000000000000FF0000008600000016000000000000 - 000000000000000000000000000000000000B9A5B5C5EFBF75FFFFD561FFFFD7 - 7AFFFFDB82FFFFDB81FFFFD97EFFFFD878FFFFDB62FFE09E77FFD5918FFFBF63 - 6EFF7F5C6DDD151113AF00000093000000540000000C00000000000000000000 - 0000000000000000000000000000000000FF0000008600000016000000000000 - 000000000000000000000000000037313209C6B5C2F6FBCF74FFFFDE79FFFFE1 - 90FFFFE597FFFFE79AFFFFE496FFFFE38BFFFFE073FFD1938CFFF9C156FFFFC9 - 42FFE3A069FFD1837AFF855D63D70000006A0000000F00000000000000000000 - 0000000000000000000000000000000000FF0000008600000016000000000000 - 00000000000000000000000000008C838858D4C4C4FFFFE070FFFFF08EFFFFF0 - A6FFFFF4AFFFFFF6B2FFFFF0ADFFFFEE9FFFFFE886FFC7888BFFFBC862FFFFC9 - 3CFFFFCD33FFFFC033FF933D45E2000000700000000D00000000000000000000 - 0000000000000000000000000000000000FF0000008600000016000000000000 - 0000000000000000000000000000BFBEC5CBD8CBC2FFD5B66AFFEFE092FFFFF7 - AFFFFFFFCEFFFFFFD7FFFFFFCAFFFFFFB3FFFBE696FFCE9484FFFFDB71FFFFCF - 65FFFFD159FFFCBD4AFF83505ADF000000930000001600000000000000160000 - 0016000000160000001600000016000000FF0000007000000016000000000000 - 0000000000000000000000000000B7B8B9CCDBDADFFFBAB3C1FFB6A4AEFFBCA7 - A3FFC4B0A9FFD0BFB2FFE2D6B6FFF5F1AEFFEDD095FFCC9887FFFFE984FFFFDC - 7FFFFFDD6EFFF2B360FF808082FF0000008E00000016000000FF000000FF0000 - 00FF000000FF000000FF000000FF000000700000002D00000000000000000000 - 000000000000000000000000000000000000A2A0A020B8B5B84CBEB5B966AF9F - A788BEA9B6F1BD9DA7FFBB95A6FFBA90A3FFA97286FFCFA588FFFFFAA1FFFFE4 - 95FFFFEA81FFEBAE71FF808082FF000000530000000800000000000000160000 - 0016000000160000001600000016000000160000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0004C2BAC4DDFBD67CFFFFF383FFF3E1A7FFDCC7ACFFF8ECB2FFFFFFB7FFFFEE - A8FFFFF793FFD2986BFF63525AC4000000330000000500000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000009B98 - 9B32E2DEE3FFC5AD84FFDDC986FFF2E49BFFFFFFBEFFFFFFD9FFFFFFD5FFFFFF - C1FFFFFFA3FFB7835DFF47474AB1000000220000000200000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000009D9E - 9F26C9CBCEDCCAC8D5FFB8ADBFFFB5A4AEFFC0A8ACFFC4ACA5FFD1BCA9FFDFD0 - A9FFF3E19AFFC08875FF201A1B87000000160000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000918D8D0AC2BABC26B7A9AC4FB7A4A885BFA8AFB4B89AA4CFBB95 - A1FCC3999FFFB17E80E300000014000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFC000FFFFC000FE004000FC004000F800 - 4000F8FFFC0DF8FFFC07F8FFF001F8FFE000F8FFE000E03FC000C00FC0008007 - C0000007C0000001C0000000C00000004000C000200180002003800018078000 - 7FFF80007F1F80003F1F00003F1F00003F1F0000201F0000003F8000207FF000 - 3FFFF0003FFFF0007FFFFC00FFFF280000001000000020000000010020000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000505053C000000830000008302202C97034C69D703455EE6024561E4010A - 0EBB000000850202028503030370000000000000000000000000000000000000 - 0000636363B657595AFF595252FF3E889FFF3CDBFFFF4EDFFEFF2FC4F1FF445E - 6BFF605958FF565859FF141414CE000000000000000000000000000000000000 - 0000B2B0AFC5E9E6E0FFECE4DEFF98CEDDFF92E7F9FFCAFFFFFF79D2E9FFB0CD - D4FFF4F3EBFFD3D3CFFF1F1E1EC0000000000000000000000000000000000000 - 00009F9F9D80BAB6B1B9C0BAB4AF85B8C8CE9FDEF3FEC9EAF4FF7AC7E1FE7B93 - 98D0CAC2BAAEBFBFBBBB3839385E000000000000000000000000000000000000 - 00000000000000000000000000002F536122B2D6DDE99BB8C0FF1C404EEE1016 - 1743000000000000000000000000000000000000000000000000000000000000 - 000000000000000000001E08001E4D28087BE6AE8CF0CEA390FF5B321DEF0800 - 00890000002B0000000000000000000000000000000000000000000000000000 - 00000000000037210041A05114D0B55829FEAF5733FFC25533FFC45D3DFE9F4B - 2FF7351609C40000004E00000003000000000000000000000000000000000000 - 000077551B34AE550EE1B2410CFF9C410BFF585510FF924005FFAC3C0CFFBC50 - 29FFB55234FF37170CC500000034000000000000000000000000000000000000 - 0000AB6C25B2B04504FFB74700FFB35500FF1D6D00FF326400FFB24A00FFB43B - 00FFA35A2EFF814C32F911050180000000000000000000000000000000000000 - 0000C77324F9BD4D00FFE86600FF9C7800FF008700FF4B7E00FFBD6A00FF865C - 00FF436214FF726834FF37190AB8000000000000000000000000000000000000 - 0000D1711BFFD16900FF818D07FF539A0AFF709A05FFEF8A00FFC48100FF0C7F - 00FF006E01FF476D1AFF3B280DC6000000000000000000000000000000000000 - 0000EA7F20FF878707FF03B52FFF22B83DFFBFBA41FFFFAF2AFFF79505FF4C89 - 00FF007900FF2B6E06FF2E2906B0000000000000000000000000000000000000 - 0000DEA749E643A01EFF2ACC61FF53D67BFF78DE8CFFEFD97FFFFFAD28FF8D8F - 00FF008600FF2B7300FF331E0075000000000000000000000000000000000000 - 0000E0F0AC7530C454FF4DD67BFFB6F1AFFFCAF8C4FFA5E597FF98B83CFFCD8C - 01FF708700FF476000C91A08001B000000000000000000000000000000000000 - 0000A7A38A0BCFF2AE9C76DB84FFA1EAA3FFB6EFABFF45D77BFF1AB63BFFE090 - 05FFD37909D1452E013400000000000000000000000000000000000000000000 - 000000000000FFFFC808E4EFAB63BEE193C08FD87FDD6FC65BDF71BE49CBC794 - 2D82683F0C1C00000000000000000000000000000000E0030000E0030000E003 - 0000E0030000FC1F0000F80F00FFF0030086E0030016E0030000E0030000E003 - 0000E0030000E0030000E0030000E0070000F00F0000} - ParentFont = False - Position = poScreenCenter - OnCloseQuery = FormCloseQuery - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - TextWidth = 5 - object Bevel1: TBevel - Left = 4 - Top = 203 - Width = 420 - Height = 2 - Anchors = [akLeft, akRight, akBottom] - end - object Label1: TLabel - Left = 8 - Top = 63 - Width = 101 - Height = 13 - Caption = 'Service Library Name:' - end - object Label2: TLabel - Left = 42 - Top = 89 - Width = 66 - Height = 13 - Caption = 'Service Name:' - end - object Label3: TLabel - Left = 45 - Top = 37 - Width = 65 - Height = 13 - Caption = 'Project Name:' - end - object Label5: TLabel - Left = 31 - Top = 179 - Width = 82 - Height = 13 - Caption = 'Project Directory:' - end - object Label4: TLabel - Left = 21 - Top = 11 - Width = 86 - Height = 13 - Caption = 'Template Location:' - end - object Label6: TLabel - Left = 38 - Top = 148 - Width = 71 - Height = 13 - Caption = 'Message Class:' - end - object Label7: TLabel - Left = 50 - Top = 123 - Width = 62 - Height = 13 - Caption = 'Server Class:' - end - object Label8: TLabel - Left = 120 - Top = 123 - Width = 172 - Height = 13 - Caption = 'Not available in this kind of server' - Font.Color = clText - Font.Height = 11 - Font.Name = 'MS Sans Serif' - Font.Pitch = fpVariable - Font.Style = [fsBold] - ParentFont = False - end - object eSvcLibName: TEdit - Left = 120 - Top = 60 - Width = 303 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 2 - end - object eSvcName: TEdit - Left = 120 - Top = 86 - Width = 303 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 3 - end - object ePrjName: TEdit - Left = 120 - Top = 34 - Width = 303 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 1 - end - object ePrjDir: TEdit - Left = 120 - Top = 176 - Width = 270 - Height = 21 - Anchors = [akLeft, akTop, akRight] - TabOrder = 6 - end - object eTemplateName: TEdit - Left = 120 - Top = 8 - Width = 303 - Height = 21 - TabStop = False - Anchors = [akLeft, akTop, akRight] - Color = clButton - ReadOnly = True - TabOrder = 0 - end - object btn_Ok: TBitBtn - Left = 265 - Top = 213 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 8 - Glyph.Data = { - 3A060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object Button2: TBitBtn - Left = 347 - Top = 213 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 9 - Glyph.Data = { - 3A060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object BitBtn1: TBitBtn - Left = 397 - Top = 174 - Width = 25 - Height = 25 - Anchors = [akTop, akRight] - TabOrder = 7 - TabStop = False - OnClick = sbBrowseForDirClick - Glyph.Data = { - 3A030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FF1C99CE2BA5D51C9DD10A8AC6FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFBFA5A34D5A72FF00FFFF00FF249CCFA6EEF7 - 6CEBF85DD9F04AC7E739B8E020A0D40F91CA0F91C9FF00FFFF00FFBFA5A35766 - 831276E23C91DCFF00FF0C8CC799DDEF8BFFFF80FCFF82FBFF7FFAFF79F3FF65 - E1F74ECEED3CBAE07591A05B66811170D833A1FF2A9AFEFF00FF1296CC59BADE - 9FFEFF75F7FF78F6FF77F2FC89D9E087D7DE7BE2EA91BCC05168891370D531A0 - FF319EFBFF00FFFF00FF26A5D448C1E69FEFF879F6FB87D8DCBACABCDABCA5D0 - B59EAF9A8C817A734179AF32A3FF3DACFE1B9CD4FF00FFFF00FF27AFDE8B97A1 - 88CFE28BD1D3CBB4ADF7F0DDFFFFD8FFFFD9FAF8C5CFB08CC4A9A34DC1FC55D0 - FB41C1E3FF00FFFF00FF25AFE1AD706B5DBCDDB5A69EF7F4EEFFFFFFFFFFE3FF - FFD4FFF7C1FFE6A5D8A0826FD4EB59D7FB68E2F80E90C9FF00FF26AFE1B5776D - A4CFD9CEB69EFFFFEAFFFFF3FFFFEAFFFFD7F7DCA9F6C986E1B89191C0C753D3 - FB7EF3FF28AAD8FF00FF28B0E0BC7F6EFFF4EBD5BCA1FFFFDDFFFFDDFFFFE0FF - FACAEFBD81F4BD77E7C49A93C0C44FD3FB7DF4FF56D5EFFF00FF28AFE1C58870 - FFFCF8CAAA99FEFFCEFFFFC9F8E1ADF0C78CF3CA96FFEBB5D5AF959AC9D37AE0 - FE9DFBFF96F8FF23A1D328B0E1CE9173FFFAF7D8C4BDDCC59EFCE5A7FAC782FB - D08BFFF7E0E7DCCE8CA5AA6BC9E65FBCE060BBDE6CC4E329A1D12DB2E2D59975 - FFF8F3FCFBFAE5D1C9E9CAA6E7C599E1C298CCB59FB18B8875E7F86DEDFE179D - D1FF00FFFF00FFFF00FF1FA1D9DDA077FFFBF6FFFFFFFFFFFFFFFFFEFBF4EBB4 - 8379BF7849B16F5350C0E550C4E71C9DD0FF00FFFF00FFFF00FFFF00FFE2A678 - FFFFFFFFFFFFFFFFFFFFFFFFF8FAFCB6877AE29955FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFE7AB79D1926DD1926DD1926DD1926DD1926DB4 - 7E6FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - end - object cbMessageClass: TComboBox - Left = 120 - Top = 144 - Width = 303 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 15 - TabOrder = 5 - end - object cbServerClass: TComboBox - Left = 120 - Top = 119 - Width = 303 - Height = 21 - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - ItemHeight = 15 - TabOrder = 4 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.pas deleted file mode 100644 index 1375c2c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/fServerProjectOptionsKylix.pas +++ /dev/null @@ -1,207 +0,0 @@ -unit fServerProjectOptionsKylix; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ../RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, - {$IFDEF DELPHI6UP} Variants, {$ENDIF} - Classes, QGraphics, QControls, QForms, - QDialogs, QStdCtrls, QButtons, QComCtrls, QImgList, uROIDEPrjWizard, QExtCtrls; - -type - TServerProjectOptions = class(TForm) - Label1: TLabel; - eSvcLibName: TEdit; - eSvcName: TEdit; - Label2: TLabel; - Label3: TLabel; - ePrjName: TEdit; - Label5: TLabel; - ePrjDir: TEdit; - Bevel1: TBevel; - Label4: TLabel; - eTemplateName: TEdit; - btn_Ok: TBitBtn; - Button2: TBitBtn; - BitBtn1: TBitBtn; - Label6: TLabel; - cbMessageClass: TComboBox; - Label7: TLabel; - cbServerClass: TComboBox; - Label8: TLabel; - procedure sbBrowseForDirClick(Sender: TObject); - procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); - procedure FormCreate(Sender: TObject); - private - fTemplateDir, - fInvalidServers, - fDefaultServer : string; - - procedure LoadConfig; - - public - constructor Create(const aTemplateDir : string); reintroduce; - end; - -var - ServerProjectOptions: TServerProjectOptions; - -function PromptProjectOptions( - const aTemplateDir : string; - out someProjectOptions : TROIDEProjectOptions) : boolean; - -implementation - -uses FileCtrl, INIFiles, uRODLGenTools, uROClient, uROServer; - -{$R *.dfm} - -function PromptProjectOptions( - const aTemplateDir : string; - out someProjectOptions : TROIDEProjectOptions) : boolean; -begin - with TServerProjectOptions.Create(aTemplateDir) do try - result := (ShowModal=mrOK); - - if result then with someProjectOptions do begin - TemplateDir := aTemplateDir; - ServiceLibraryName := eSvcLibName.Text; - ServiceName := eSvcName.Text; - ProjectName := ChangeFileExt(ExtractFileName(ePrjName.Text), ''); - ProjectDir := IncludeTrailingBackslash(ePrjDir.Text); - MessageClassName := Copy(cbMessageClass.Text,4,Length(cbMessageClass.Text)); - ServerClassName := Copy(cbServerClass.Text,4,Length(cbServerClass.Text)); - - // Saves last path entered - with TIniFile.Create(GetTemplateConfigFileName) do try - WriteString(sect_ProjectGeneration, id_PrjDir, ExtractFilePath(ProjectDir)); - finally - Free; - end; - end; - finally - Free; - end; -end; - -{ TServerProjectOptions } -constructor TServerProjectOptions.Create(const aTemplateDir: string); -begin - inherited Create(NIL); - - fTemplateDir := aTemplateDir; - LoadConfig; -end; - -procedure TServerProjectOptions.LoadConfig; -var s : TStringList; - tmpldir : string; -begin - s := TStringList.Create; - - with TIniFile.Create(GetTemplateConfigFileName) do try - ReadSection(sect_ClassFactories, s); - - eTemplateName.Text := fTemplateDir; - eSvcLibName.Text := ReadString(sect_ProjectGeneration, id_SvcLibName, ''); - eSvcName.Text := ReadString(sect_ProjectGeneration, id_SvcName, ''); - ePrjName.Text := ReadString(sect_ProjectGeneration, id_PrjName, ''); - - tmpldir := GetTemplateDir; - Delete(tmpldir, Pos('Templates', tmpldir), 9); - Insert('Projects', tmpldir, Length(tmpldir)); - - ePrjDir.Text := ReadString(sect_ProjectGeneration, id_PrjDir, tmpldir); - finally - Free; - s.Free; - end; - - with TIniFile.Create(fTemplateDir+InfoName) do try - Caption := ReadString(sect_Information, id_Description, Caption); - fInvalidServers := ReadString(sect_Information, id_InvalidServers, ''); - fInvalidServers := StringReplace(fInvalidServers,' ', '',[rfReplaceAll])+','; - - fDefaultServer := Trim(ReadString(sect_Information, id_DefaultServer, '')); - finally - Free; - end; -end; - -procedure TServerProjectOptions.sbBrowseForDirClick(Sender: TObject); -var dir : string; -begin - dir := ePrjDir.Text; - if SelectDirectory('Select Project Directory','', Dir) then ePrjDir.Text := Dir; - //if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0{SELDIRHELP}) then ePrjDir.Text := Dir; -end; - -procedure TServerProjectOptions.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -var errmsg : string; -begin - if (ModalResult=mrCancel) then begin - CanClose := TRUE; - Exit; - end - else CanClose := FALSE; - - if (Trim(eSvcLibName.Text)='') then errmsg := 'Service Library Name cannot be blank' - else if (Trim(eSvcName.Text)='') then errmsg := 'Service Name cannot be blank' - else if (Trim(ePrjName.Text)='') then errmsg := 'Project name cannot be blank' - else if not DirectoryExists(ePrjDir.Text) and - not ForceDirectories(ePrjDir.Text) then errmsg := 'Specified directory does not exist or cannot be created' - - else begin - CanClose := TRUE; - Exit; - end; - - MessageDlg(errmsg, mtError, [mbOK], 0); -end; - -procedure TServerProjectOptions.FormCreate(Sender: TObject); -var i : integer; - svrclsname : string; -begin - cbMessageClass.Items.Clear; - for i := 0 to (GetMessageClassCount-1) do - cbMessageClass.Items.Add(GetMessageClass(i).ClassName); - - cbMessageClass.ItemIndex := 0; - - cbServerClass.Items.Clear; - - for i := 0 to (GetServerClassCount-1) do begin - svrclsname := GetServerClass(i).ClassName; - - if (Pos(svrclsname+',', fInvalidServers)=0) - then cbServerClass.Items.Add(svrclsname); - end; - - cbServerClass.Enabled := (cbServerClass.Items.Count>1); - if (cbServerClass.Items.Count=0) then begin - cbServerClass.Visible := FALSE; - Exit; - end; - - if (cbServerClass.Items.IndexOf(fDefaultServer)>0) - then cbServerClass.ItemIndex := cbServerClass.Items.IndexOf(fDefaultServer) - else cbServerClass.ItemIndex := 0; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROExtraEditors.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROExtraEditors.pas deleted file mode 100644 index 0d4c939..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROExtraEditors.pas +++ /dev/null @@ -1,112 +0,0 @@ -unit uROExtraEditors; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses - Classes, uRODL, uRODynamicRequest, - {$IFDEF DELPHI5}DsgnIntf, DMDesigner;{$ELSE}DesignIntf, DesignEditors;{$ENDIF} - -type - { TRODynRequestServiceNameProperty } - TRODynRequestServiceNameProperty = class(TStringProperty) - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TRODynRequestOperationNameProperty } - TRODynRequestOperationNameProperty = class(TStringProperty) - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TRODynamicRequestEditor } - TRODynamicRequestEditor = class(TComponentEditor) - public - function GetVerbCount: Integer; override; - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - end; - -implementation - -uses - SysUtils, Dialogs, uROClientIntf; - -{ TRODynRequestServiceNameProperty } - -function TRODynRequestServiceNameProperty.GetAttributes: TPropertyAttributes; -begin - result := [paValueList] -end; - -procedure TRODynRequestServiceNameProperty.GetValues(Proc: TGetStrProc); -var dynreq : TRODynamicRequest; - i: Integer; -begin - dynreq := TRODynamicRequest(GetComponent(0)); - for i := 0 to (dynreq.RODLLibrary.ServiceCount-1) do - Proc(dynreq.RODLLibrary.Services[i].Info.Name); -end; - -{ TRODynRequestOperationNameProperty } - -function TRODynRequestOperationNameProperty.GetAttributes: TPropertyAttributes; -begin - result := [paValueList] -end; - -procedure TRODynRequestOperationNameProperty.GetValues(Proc: TGetStrProc); -var dynreq : TRODynamicRequest; - i: Integer; - svc : TRODLService; -begin - dynreq := TRODynamicRequest(GetComponent(0)); - - svc := TRODLService(dynreq.RODLLibrary.ItemByName(dynreq.RemoteService.ServiceName)); - if (svc=NIL) then Exit; - - for i := 0 to (svc.Default.Count-1) do - Proc(svc.Default.Items[i].Info.Name); -end; - -{ TRODynamicRequestEditor } - -procedure TRODynamicRequestEditor.ExecuteVerb(Index: Integer); -begin - with TRODynamicRequest(GetComponent).Params do begin - Refresh; - MessageDlg(Format('%d parameters have been created. ', [Count]), mtInformation, [mbOK], 0); - end; -end; - -function TRODynamicRequestEditor.GetVerb(Index: Integer): string; -begin - result := 'Retrieve parameter list'; -end; - -function TRODynamicRequestEditor.GetVerbCount: Integer; -begin - result := 1 -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.dfm deleted file mode 100644 index f64f23f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.dfm +++ /dev/null @@ -1,413 +0,0 @@ -object IdeData: TIdeData - OldCreateOrder = False - Left = 586 - Top = 308 - Height = 150 - Width = 215 - object iml_Actions: TImageList - Left = 32 - Top = 8 - Bitmap = { - 494C010108000900040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 - 0000000000003600000028000000400000003000000001002000000000000030 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00484A4B00484A4B00484A4B00484A4B00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00D5AA9800BDA39800B4968B00C99E8E00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF000000820000008200000082000000820000008200000082000000 - 820000008200000082000000820000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00484A4B00484A4B006B6C6D006B6C6D006B6C6D00484A4B00484A - 4B00484A4B00FF00FF00FF00FF00FF00FF00893615007D3213007D3213007D32 - 13007D3213007D3213007D3213007D3213007D3213007D3213007D3213007D32 - 13007D3213007D3213007D32130089361500FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00D8AA9700CEBFBB00B7BBC0009E9CA0009F8C8600D8AA9700FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF0095655F00A5696A00A5696A00A569 - 6A00A5696A0000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00FF00 - FF00484A4B00A39AA100484A4B00467B4A00727572004D4E7F007F7F7F008080 - 8000484A4B00FF00FF00FF00FF00FF00FF00692A1100FEF3E700FFEFE0006E6C - 6A00FBE7CF00FBE7CF006E6C6A00FEDDBA00FEDDBA006E6C6A00FCD3A700FBCE - 9C006E6C6A00FCCB9700FCCB97007D321300FF00FF00FF00FF00FF00FF00FF00 - FF00D8AF9A00E1D1CE00DADDE100C2917E00B4837000A09A9D00A08E8800C79E - 8C00FF00FF00FF00FF00FF00FF00FF00FF0098686000FBE5C000F4D5AD00F0CF - 9F00EFCA960000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00A39AA100A39AA100484A4B00039E0A00467B4A007B7B7B004C4C7E008080 - 8000484A4B00FF00FF00FF00FF00FF00FF0065281000EFE7DD006E6C6A006E6C - 6A006E6C6A006E6C6A006E6C6A006E6C6A006E6C6A006E6C6A006E6C6A006E6C - 6A006E6C6A006E6C6A006E6C6A00762F1200FF00FF00FF00FF00FF00FF00D8AA - 9700EADED900F2FEFF00C67D5D00A7250300AA260300B1654800A39FA3009E8A - 8700D8AA9700FF00FF00FF00FF00FF00FF009D6B6200FCE7C900F2D5B500F0D0 - A900EECB9E0000008200FFFFFF00FFFFFF00FFFFFF000000820000008200FFFF - FF00FFFFFF00FFFFFF000000820000008200FF00FF00FF00FF00FF00FF00484A - 4B00A39AA100A39AA100484A4B0078787A00747474007B7B7B007B7B7B008080 - 8000484A4B00FF00FF00FF00FF00FF00FF00652810006E6C6A006E6C6A003C5A - F7000B8A09006CB75C00FEE9D200FBE7CF00FEE2C400FEDDBA00FDDAB400FCD7 - AD00FCD3A700E9CC9500FBCE9C00762F1200FF00FF00FF00FF00D8AA9700EFE1 - D900FEFFFF00CE876A00B5411A00DD9F8200DD9E8100B8421A00B05E4000A19E - A3009E8B8700C69D8B00FF00FF00FF00FF00A36F6400FEEED400F4DDC000F2D7 - B500F0D1AA0000008200FFFFFF000000820000008200FFFFFF00FFFFFF000000 - 8200FFFFFF0000008200FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00A9A1A900A59DA500484A4B007B7A7D00737474007B7B7B007B7B7B008080 - 8000484A4B00FF00FF00FF00FF00FF00FF0065281000FEF3E7006E6C6A002243 - FB00326E9F000B8A090073BA6000FBE7CF00FEE2C400FEE2C400FDDAB400FDDA - B40047A030000B8A0900168E0E0050420C00FF00FF00D8AA9700F2E2DD00FFFF - FF00D58F7200A72A0600AD361000F6E5DC00F4E1D700AD361000AC2D0800B162 - 4300A39EA1009E8A8700D8AA9700FF00FF00A7746600FFF4E100F6E1CA00F3DC - BF00F2D7B4000000820000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF0000008200FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00B2ABB100ACA6AC00484A4B007E7F8100737473007B7B7B007B7B7B008080 - 8000484A4B00FF00FF00FF00FF00FF00FF0065280F006E6C6A006E6C6A00C6CC - F2000F31FC00FEF3E7002E9E2800FEE9D200FBE7CF00FEE2C400FEDDBA0081B6 - 5D000B8A0900FCD3A700FCD3A7005F3A0F00D8AA9600F2E1DA00FFFFFF00E1A6 - 8800B43B1000B0350F00AF360F00F2D8CC00F0D4C700AD330E00AC310D00AD2D - 0800B05E4000A0989C0099888400C79E8B00AD786900FFFBEE00F7E7D500F4E1 - CA00F3DCBF0000008200FFFFFF000000820000008200FFFFFF00FFFFFF000000 - 8200FFFFFF0000008200FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00BDB7BC00B8B1B600484A4B0091919300848486007A7A7A007A7A7A008080 - 8000484A4B00FF00FF00FF00FF00FF00FF0065280F00FFF6EE006E6C6A00FEF9 - F2004D69F7001652A600148F1400EEE5D300BFBBDA00D5C9CF00BCCC90000A89 - 070083AC72000525FB00485BDC00762F1200E0BAAA00FFFFFF00F3D9C500C65D - 2700C0542200BB4A1C00B6411700F3DCCF00F0D5C900AD340F00AC320D00AD35 - 0F00AD2C0700B47F6A009F9EA100B1958B00B47E6B00FFFFFB00F8EDE100F7E6 - D400F6E1C90000008200FFFFFF00FFFFFF00FFFFFF000000820000008200FFFF - FF00FFFFFF00FFFFFF000000820000008200FF00FF00FF00FF00FF00FF00484A - 4B00CAC4C900C4BDC200484A4B00828384007676760091919100919192009090 - 8F00484A4B00FF00FF00FF00FF00FF00FF00652810006E6C6A006E6C6A00FEF9 - F200FEF9F2002849FA0004653900056E2A000F31FC000C2DFA000C84110047A0 - 30001635F300546ACB001635F3005E2D2D00E0BAAA00FFFFFF00F6DECB00D376 - 3600CC692F00C65D2800C0542200F6E3D800F2DACE00AF371000AC320D00AC32 - 0D00AB2E0900C2978700B8BBC000C1A39800BA836D00FFFFFF00FCF4EE00FAED - E100F8E9D50000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00D5D1D400D0CBCF00484A4B00939697008A8A8B00818181007E7E7E008888 - 8700484A4B00FF00FF00FF00FF00FF00FF0065280F00FFFCFA006E6C6A00FFFC - FA00FEF9F200FFF6EE00E1DDEA00148F1400FEEED900FEE9D20001760F000A3B - C100405ADE00FDDAB4009191C200642D2400D8AA9600F2E1D900FFFFFF00EFCB - A700D57D3B00CE6F3100D37B4600F2D4BF00E7BA9F00B8451900B0370F00AA2D - 0900CA886D00DAE1E500CFBCB600D5A79300BF877000FFFFFF00FFFBFA00FEF4 - ED00FAEEE00000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00484A - 4B00E0DDE000DAD8DA00484A4B007E7F81006D6E6E0096969500959595009999 - 9900484A4B00FF00FF00FF00FF00FF00FF00692A11006E6C6A006E6C6A00FFFC - FA00FEF9F200FEF9F200FFF6EE00DCE5C5001D9519000B8A090041955300465E - E900EED5C100FDDAB400FDDAB4007D321300FF00FF00D8AA9700EFDDD500FFFF - FF00F3D4B200DC8A4500D57E3E00D8895500D0794800C0542100BB471800D79A - 7F00F0FEFF00E0CFC900D8AA9700FF00FF00C48C7200FFFFFF00FFFFFF00FFFC - FA00FCF4ED000000820000008200000082000000820000008200000082000000 - 820000008200000082000000820000008200FF00FF00FF00FF00FF00FF00484A - 4B00E9E6E900E3E3E300484A4B00686A6A00585A5A0056585800636464007474 - 7400484A4B00FF00FF00FF00FF00FF00FF009E512300CB934600C68C4100C68C - 4100C68C4100C68C4100C68C4100C68C4100C68C4100C68C4100CD995100CB93 - 4600CD995100C1914E00BB955C00A1522200FF00FF00FF00FF00D7A79300EEDD - D400FFFFFF00F6D7B600E0924A00FAEADA00F7E0D000C9642800E1A48200FEFF - FF00E9DCD700D7AA9700FF00FF00FF00FF00CA917400FFFFFF00FFFFFF00FFFF - FF00FFFCFA00FCF4ED00FAEDDE00F8E7D400FCEBD300E3D3BB00B7AD9C00A569 - 6A00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00484A - 4B00EBEAEB00FAFAFB00A7A7AA0074747500767678007D7D7E00656667005556 - 5700484A4B00FF00FF00FF00FF00FF00FF0099411500CE641400CE641400CE64 - 1400CE641400CE641400CE641400CE641400CE641400D1681800F3A96600E070 - 1100F3A966009F6339003553C700A6420C00FF00FF00FF00FF00FF00FF00D8AA - 9700EEDAD000FFFFFF00F6DCBB00F0C58F00EAB07900EBBC9300FFFFFF00F0E2 - DA00D8AA9700FF00FF00FF00FF00FF00FF00CE957600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FEFCFA00FCF6EB00FAEFE000A5696A00A5696A00A5696A00A569 - 6A00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00484A - 4B00FFFFFF00F8F8FA00F7F6F800E6E5E700D0CED000BAB4B800A69FA4009991 - 9700484A4B00FF00FF00FF00FF00FF00FF00FF00FF0093401A0093401A009340 - 1A0093401A0093401A0093401A0093401A0093401A0093401A0099441C00953E - 150099441C008C3C1A00843D2400FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00D7A69100EED9D000FFFFFF00FAEAD300F6E0C600FFFFFF00F4E5DE00D8AD - 9900FF00FF00FF00FF00FF00FF00FF00FF00D3977800FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFC00F4EBE600A5696A00E2A35B00EF993800BB70 - 4F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00484A - 4B00484A4B00F8F8FA00F8F8FA00EAE9EB00D5D3D500BDBABD00484A4B00484A - 4B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00D8AA9700EED9CF00FFFFFF00FFFFFF00F3E6E000D8AA9700FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00D59A7900FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00F8F8FE00A5696A00E5A55F00C2805C00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00484A4B00484A4B00484A4B00484A4B00484A4B00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00D8AA9600E0BAAA00E0BAAA00D8AA9600FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00D0906B00D0906B00D0906B00D090 - 6B00D0906B00D0906B00D0906B00D0906B00A5696A00BB7F6A00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF006262620018181800121212000E0E0E000E0E0E0053535300FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF000000820000008200000082000000820000008200000082000000 - 820000008200000082000000820000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00A3666800A3666800A3666800A3666800A467 - 6900A4676900A4676900A4676900A46769000151CA00004BC100FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF006262 - 62002727270027272700171A39000B0F60000809570007074A0007071A000000 - 000041414100FF00FF00FF00FF00FF00FF0095655F00A5696A00A5696A00A569 - 6A00A5696A0000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF009F646600F7E5C600F2D9B100EED1A100EECC - 9300F0C78700EFC58000F7D08300A4676900004DC400095CD300055BD700FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00414141003131 - 31002C2C2C00272727001A1E4900000CB3000006A70000009A0000009A000202 - 630003030D0012121200FF00FF00FF00FF0098686000FBE5C000F4D5AD00F0CF - 9F00EFCA960000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF008E595B00D8CAB700D3C0A700D1B89A00DCBD - 9700E6C29200E7BF8400F0C68100A4676900004BC0001C74E3002682F7000151 - CA000455CA000454CB00004CC100004CC100FF00FF00FF00FF00FF00FF00FF00 - FF0007E9E700FF00FF00FF00FF00FF00FF00FF00FF00626262003B3B3B003131 - 3100313131002C2C2C00252631000B178D0007108C000006A70000009A000000 - 9A0001017E0003030D0041414100FF00FF009D6B6200FCE7C900F2D5B500F0D0 - A900EECB9E0000008200FFFFFF0000008200FFFFFF0000008200FFFFFF00FFFF - FF0000008200FFFFFF00FFFFFF0000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF0076575100A19C93009E928400A0917F00C0A9 - 8C00DABC9500E6C19000F0C98700A4676900FF00FF00014FC4000C5FD3001167 - DC002581F4001975EB00116CE6000559D000004EC400FF00FF00FF00FF0007EA - E100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0041414100414141003B3B - 3B003B3B3B00313131002C2C2C00272727001A1E4900000CB3000006A7000000 - 9A0000009A000202630000000000FF00FF00A36F6400FEEED400F4DDC000F2D7 - B500F0D1AA0000008200FFFFFF000000820000008200FFFFFF00FFFFFF000000 - 8200FFFFFF0000008200FFFFFF0000008200FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00005CFF0056413B006B696800005CFF00736A5F009688 - 7600C0A98C00DDBD9600EECC9300A4676900FF00FF00FF00FF00014BC1002881 - F0002883F600217FF400136EE600004CC1000966E5000254E100003A1900FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00858585004949490041445000123B - DB000133FC0024337100313131002C2C2C000A1CA2000013BF00000CB3000006 - A70000009A0000009A0007071A0053535300A7746600FFF4E100F6E1CA00F3DC - BF00F2D7B40000008200FFFFFF0000008200FFFFFF0000008200FFFFFF000000 - 8200FFFFFF0000008200FFFFFF0000008200A5686A00A6696A00A4686900A066 - 67008F5B5B006D454500005CFF00005CFF00005CFF00005CFF005B5652007269 - 5F00A0927F00D1B69800F2D3A300A3666800FF00FF00FF00FF000250C600166E - E1002B88F8001A76ED00004CC1000D69E5000862F300004A780001510300015C - 0D00FF00FF00FF00FF00FF00FF00FF00FF00535353004949490043507B001243 - FF00083BFF001335C000313131003131310021285600071CAC000415AC00000C - B3000A0E68000404820007074A000E0E0E00AD786900FFFBEE00F7E7D500F4E1 - CA00F3DCBF0000008200FFFFFF0000008200FFFFFF0000008200FFFFFF000000 - 8200FFFFFF0000008200FFFFFF0000008200A4676900FCE6C100EECFA600E7C5 - 9600005CFF00005CFF00005CFF00005CFF00005CFF00005CFF00005CFF00005C - FF009F928400DAC9AD00EAD8B200A3666800FF00FF00FF00FF00FF00FF000250 - C6002580F300004CC1000F69E2000D69F700004A8900015506000A7813000154 - 030000450000FF00FF00FF00FF00FF00FF0059595900535353004F4F4F00294A - C7001E43D000353E63003B3B3B003B3B3B00242E5E000822B800172266001C1F - 3F001B1C260012133A000E0E35000E0E0E00B47E6B00FFFFFB00F8EDE100F7E6 - D400F6E1C90000008200FFFFFF000000820000008200FFFFFF00FFFFFF00FFFF - FF0000008200FFFFFF00FFFFFF0000008200A5686A00FEEED300F0D5B500EACB - A300CEAD8300005CFF00005CFF005541330077777700005CFF00005CFF006B69 - 6700A19990008C5B51009D665B00A3666800FF00FF00FF00FF00FF00FF000250 - C600004CC100116BE1001672FA00004AA10001520A000D831A0004640C000045 - 0000014E0100FF00FF00FF00FF00FF00FF005959590059595900535353005353 - 530049494900414141004141410030395F00032CE5001F2C7300262A42002727 - 270027272700181818001818180012121200BA836D00FFFFFF00FCF4EE00FAED - E100F8E9D50000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200A7756B00FFF7E300F3DDC400EAD1 - B100D0B59100005CFF00005CFF005441320060606000005CFF00005CFF007676 - 7600A4A19F008C5B5100DA904400BD724700FF00FF00FF00FF00FF00FF00FF00 - FF000758CF001C78FA00024FB000014F11000F891C000870130000450000066C - 110001540300FF00FF00FF00FF00FF00FF006262620062626200595959005353 - 530053535300494949003E445B003B3B3B000433F00021327D00313131001E28 - 62000019CC00121B68001818180018181800BF877000FFFFFF00FFFBFA00FEF4 - ED00FAEEE00000008200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF0000008200A7756B00FFFEF700F7E7D400EFD9 - C100005CFF00005CFF00005CFF00005CFF00005CFF00005CFF00005CFF00005C - FF00C0BABA0095605600C5846000FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF000148B40001511B00119120000C801F000045000009751600076D - 1100035A0600FF00FF00FF00FF00FF00FF0085858500626262005C5F68004860 - AB004F55690043507B001B4CFF001844E7000F3BE70030395F0031313100192B - 8A00001FD8000E1E8E002727270062626200C48C7200FFFFFF00FFFFFF00FFFC - FA00FCF4ED000000820000008200000082000000820000008200000082000000 - 820000008200000082000000820000008200BC826800FFFFFF00FBEFE500F6E5 - D300EED9C000DDC4A600005CFF00005CFF00005CFF00005CFF00D1926D00D192 - 6D00D1926D009D665B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00045E03000F8C2800004500000C811F000B7B1B00066C - 1100035D070000480000FF00FF00FF00FF00FF00FF0068686800556CB100406E - FF003F63D4003C5ABE002454FF001B4CFF001543F300203DAA003B3B3B003B3B - 3B00242E5E00292B370027272700FF00FF00CA917400FFFFFF00FFFFFF00FFFF - FF00FFFCFA00FCF4ED00FAEDDE00F8E7D400FCEBD300E3D3BB00B7AD9C00A569 - 6A00FF00FF00FF00FF00FF00FF00FF00FF00BC826800FFFFFF00FFFBF700FAF0 - E500F6E5D100EFD9C000005CFF00CFB692008C585A00005CFF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF0007F8F600FF00FF00FF00FF0000480000035B0700066B110005680E000464 - 0C0001560300066A0F0001530300FF00FF00FF00FF0085858500666971004D73 - E200406EFF003666FF002D5DFF002454FF001B4CFF001843E7003C3F4B00373A - 4700313131003131310053535300FF00FF00CE957600FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FEFCFA00FCF6EB00FAEFE000A5696A00A5696A00A5696A00A569 - 6A00FF00FF00FF00FF00FF00FF00FF00FF00D1926D00FFFFFF00FFFFFF00FEFB - F700FBEFE500F7E5D100A1695D00A0685C009E636500FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0007E9 - E700FF00FF00FF00FF00FF00FF00FF00FF00004700000046000000490000004A - 0000004600000E8A2500066B100000490000FF00FF00FF00FF00737373006669 - 71005070CF00406EFF003666FF002D5DFF002454FF001B4CFF001843E700203D - AA003B3B3B0041414100FF00FF00FF00FF00D3977800FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFC00F4EBE600A5696A00E2A35B00EF993800BB70 - 4F00FF00FF00FF00FF00FF00FF00FF00FF00DA9D7500FFFFFF00FFFFFF00FFFF - FF00FFFEFC00E5D3CC00A56B5F00CF834300AF6A5400FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF000046000001540300004E0100FF00FF00FF00FF00FF00FF008585 - 8500686868005F6577005065A5004860AB004860AB003B519C00434A60004141 - 410062626200FF00FF00FF00FF00FF00FF00D59A7900FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00F8F8FE00A5696A00E5A55F00C2805C00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00E7AB7900FFFFFF00FFFFFF00FFFF - FF00FFFFFF00E1D5D900A56B5F00D48E5A00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF000046000000460000FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00858585006262620059595900595959005353530085858500FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00D0906B00D0906B00D0906B00D090 - 6B00D0906B00D0906B00D0906B00D0906B00A5696A00BB7F6A00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00E7AB7900D1926D00D1926D00D192 - 6D00D1926D00D1926D00A56B5F00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 - FF00FF00FF00FF00FF00FF00FF00FF00FF00424D3E000000000000003E000000 - 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF0000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000} - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.pas deleted file mode 100644 index acb547e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEData.pas +++ /dev/null @@ -1,44 +0,0 @@ -unit uROIDEData; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library -{ -{ compiler: Delphi 5 and up, Kylix 2 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -uses - {$IFDEF DELPHI5}Forms,{$ENDIF} - SysUtils, Classes, ImgList, Controls; - -type - TIdeData = class(TDataModule) - iml_Actions: TImageList; - private - { Private declarations } - public - { Public declarations } - end; - -const - ICON_REGENERATE = 1; - ICON_IMPORT = 2; - ICON_MAKESERVER = 3; - -var - IdeData: TIdeData; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEEditors.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEEditors.pas deleted file mode 100644 index 3518666..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEEditors.pas +++ /dev/null @@ -1,183 +0,0 @@ -unit uROIDEEditors; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - IDE Integration -{ -{ compiler: Delphi 6 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF VER140UP}DesignEditors, DesignIntf, {$ELSE} DsgnIntf,{$ENDIF} - Classes; - -const prop_ServiceName = 'ServiceName'; - prop_OperationName = 'OperationName'; - prop_Dispatchers = 'Dispatchers'; - - capt_TestConnection = 'Test Connection...'; - -type { TROServiceNameProperty } - TROServiceNameProperty = class(TStringProperty) - protected - public - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; - - { TDispatchersProperty } - TDispatchersProperty = class(TClassProperty) - public - procedure Edit; override; - function GetAttributes: TPropertyAttributes; override; - end; - - {$IFDEF VER140UP} - { TROServerEditor } - TROServerEditor = class(TComponentEditor) - public - procedure Edit; override; - end; - - { TRORemoteServiceEditor } - TRORemoteServiceEditor = class(TComponentEditor) - protected - public - procedure ExecuteVerb(Index: Integer); override; - function GetVerb(Index: Integer): string; override; - function GetVerbCount: Integer; override; - end; - {$ENDIF VER140UP} - - -implementation - -uses Forms, Controls, Dialogs, uRORemoteService, uROServer, uROClasses, - {$IFDEF MSWINDOWS} - fDispatchersEditorForm; - {$ENDIF} - {$IFDEF LINUX} - fDispatchersEditorFormKylix; - {$ENDIF} - -function FindDesigner(Container: TComponent): IDesigner; -begin - Result := nil; - if Container <> nil then begin - if Container is TCustomForm then begin - Result := TCustomForm(Container).Designer as IDesigner; - end - else if (Container is TDataModule) and (Container.Owner <> nil) then begin - Result := (Container.Owner as TForm).Designer as IDesigner; - end - else if (Container is TWinControl) and (Container.Owner <> nil) then begin - Result := (Container.Owner as TForm).Designer as IDesigner; - end; - end; -end; - -{ TROServiceNameProperty } - -function TROServiceNameProperty.GetAttributes: TPropertyAttributes; -begin - result := [paValueList] -end; - -procedure TROServiceNameProperty.GetValues(Proc: TGetStrProc); -var conn : TRORemoteService; - i : integer; - ss : IROStrings; -begin - conn := TRORemoteService(GetComponent(0)); - - ss := conn.GetServiceNames; - if assigned(ss) then - for i := 0 to (ss.Count-1) do - Proc(ss[i]); -end; - -{ TDispatchersProperty } - -procedure TDispatchersProperty.Edit; -begin - with TDispatchersEditorForm.Create(TROServer(GetComponent(0))) do try - ShowModal; - Modified(); - finally - Free; - end; -end; - -function TDispatchersProperty.GetAttributes: TPropertyAttributes; -begin - result := [paDialog] -end; - -{ TROServerEditor } - -{$IFDEF VER140UP} -procedure TROServerEditor.Edit; -var - lDesigner:IDesigner; -begin - with TDispatchersEditorForm.Create(TROServer(GetComponent())) do try - ShowModal; - lDesigner := FindDesigner(GetComponent().Owner); - if Assigned(lDesigner) then lDesigner.Modified() - //else ShowMessage('No designer'); - finally - Free; - end; -end; -{$ENDIF VER140UP} - -{ TRORemoteServiceEditor } - -{$IFDEF VER140UP} -procedure TRORemoteServiceEditor.ExecuteVerb(Index: Integer); -var conn : TRORemoteService; - i : integer; - s : string; - ss : IROStrings; -begin - conn := TRORemoteService(GetComponent); - - case Index of - 0 : begin - ss := conn.GetServiceNames; - if assigned(ss) then begin - s := 'The server exposes the following service(s):'+#13#13; - for i := 0 to (ss.Count-1) do - s := s+ss[i]+#13; - MessageDlg(s, mtInformation, [mbOK], 0); - end - else begin - MessageDlg('The server exposes no services.', mtInformation, [mbOK], 0); - end; - end; - end; -end; - -function TRORemoteServiceEditor.GetVerb(Index: Integer): string; -begin - case Index of - 0 : result := capt_TestConnection; - end; -end; - -function TRORemoteServiceEditor.GetVerbCount: Integer; -begin - result := 1; -end; -{$ENDIF VER140UP} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEMenu.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEMenu.pas deleted file mode 100644 index 73b0672..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEMenu.pas +++ /dev/null @@ -1,551 +0,0 @@ -unit uROIDEMenu; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I ..\RemObjects.inc} - -interface - -{ Service Builder command line parameters: - - /rodlfile:filename : File to load - /projectname:dpr-file-name : Just for display; implies /autosave - /autosave : Auto-save change when SB loses focus or is closed - /register : Quite, register filetypes (.rodl to lauch with SB) - /import-wsdl:file-or-url : Auto-import the WSDL into the specified (or empty) RODL file - /import : Show a selection box to determine what type of file to import. - -} - -uses - Forms, Classes, Windows, SysUtils, - {$IFDEF DELPHI6UP}DesignEditors, DesignIntf, {$ELSE} DsgnIntf,{$ENDIF} - ToolsApi, Menus, Contnrs, ComObj, Graphics, - uEWMenuManager; - -type - { TMenuItemInfo } - TMenuItemInfo = record - Caption, - ShortCut : string; - Menu:TEWMenuItem; - ImageIndex:integer; - Personalities:TEWPersonalitySet; - end; - -resourcestring sMakeServerCaption = 'T&urn %s into a RemObjects SDK Server'; - -const MAX_MENU_ITEM = 14; - -var - MenuItems : array[0..MAX_MENU_ITEM] of TMenuItemInfo = ( - (Caption: '&Service Builder'; ShortCut: 'CTRL+ALT+U'; Menu:nil; ImageIndex: 0; Personalities: [pDelphiWin32, pCppBuilderWin32, pNone]), - (Caption: '&Import RemObjects SDK Service...'; ShortCut: 'CTRL+ALT+I'; Menu:nil; ImageIndex: 1; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: 'Import SOAP &Web Service...'; ShortCut: ''; Menu:nil; ImageIndex: 7; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: '-'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32, pCppBuilderWin32, pNone]), - (Caption: 'Service &Tester'; ShortCut: ''; Menu:nil; ImageIndex: 5; Personalities: [pDelphiWin32, pCppBuilderWin32, pNone]), - (Caption: '-'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32]), - (Caption: '&Hide Preprocessor Window'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32]), - (Caption: '-'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32]), - (Caption: '&Regenerate Units from RODL'; ShortCut: 'CTRL+ALT+E'; Menu:nil; ImageIndex: 2; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: 'Regenerate &Async Unit from RODL'; ShortCut: 'CTRL+ALT+A'; Menu:nil; ImageIndex: 2; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: sMakeServerCaption; ShortCut: ''; Menu:nil; ImageIndex: 3; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: '-'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: 'Launc&h Server Executable'; ShortCut: 'CTRL+ALT+F9'; Menu:nil; ImageIndex: 4; Personalities: [pDelphiWin32, pCppBuilderWin32]), - (Caption: '-'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32, pNone]), - //(Caption: 'Check for New &Versions'; ShortCut: ''; Menu:nil; ImageIndex: -1; Personalities: [pDelphiWin32, pCppBuilderWin32, pNone]), - (Caption: 'A&bout RemObjects SDK'; ShortCut: ''; Menu:nil; ImageIndex: 6; Personalities: [pDelphiWin32, pCppBuilderWin32, pNone]) - //(Caption: '&Import Services'; ShortCut: 'CTRL+ALT+S') - ); - -const - mi_RODLEditor = 0; - mi_ImportServicesRODL = 1; - mi_ImportServicesWSDL = 2; - mi_ServiceTester = 4; - mi_HidePreprocessor = 6; - mi_Regenerate = 8; - mi_RegenerateAsync = 9; - mi_ConvertToServer = 10; - mi_ConvertToServerSeparator = 11; - mi_LaunchExe = 12; - mi_LaunchExeSeparator = 13; - //mi_CheckVersion = 14; - mi_About = 14; - -type - { TROMenuWizard } - TROMenuWizard = class(TInterfacedObject, IOTAWizard, IOTANotifier) - private - fROMenu: TEWMenu; - fHidePreprocessorItem: TEWMenuItem; - fVersionService:string; - - procedure OnHidePreprocessorClick(Sender: TObject); - procedure ImportService(const aType:string); - - protected - { Misc } - procedure CreateMenuItems; - procedure ShowServiceBuilder(Sender : TObject); - procedure ImportServicesRODL(Sender: TObject); - procedure ImportServicesWSDL(Sender: TObject); - procedure LaunchServiceTester(Sender: TObject); - procedure OnRegenerateUnits(Sender: TObject); - procedure OnRegenerateAsyncUnit(Sender: TObject); - procedure OnMenuPopup(Sender: TObject); - procedure OnConvertToServer(Sender: TObject); - procedure OnAbout(Sender: TObject); - procedure OnLaunchEXE(Sender: TObject); - procedure OnCheckForNewVersion(Sender: TObject); - - { IOTANotifier} - procedure AfterSave; - procedure BeforeSave; - procedure Destroyed; - procedure Execute; - procedure Modified; - - { IOTAWizard } - function GetState: TWizardState; - function GetIDString: string; - function GetName: string; - - public - - constructor Create; - destructor Destroy; override; - end; - -procedure Register; - -var - gRemObjectsMenu:TMenuItem; - -implementation - -uses - ShellAPI, Controls, Registry, Dialogs, - uRODL, uROIDETools, uRODLToXML, uRODLToPascalIntf, uRODLGenTools, - uRORODLNotifier, uROPleaseWaitForm, uROIDEData, fROAbout, - fCustomIDEMessagesForm, uROProductVersionInfo, uROClasses, uRODLConvertersUtils; - -{$R Resources.BDS.res} - -procedure RegisterAboutInfo; -const - lProductName = 'RemObjects SDK ''Vinci'' for Delphi'; -begin - {$IFDEF BDS} - {$IFDEF BDS3} - SplashScreenServices.AddPluginBitmap(lProductName, LoadBitmap(HInstance, 'SPLASH2005')); - {$ELSE} - if (BorlandIDEServices as IOTAServices).GetProductIdentifier = 'CodeGear Delphi for Microsoft Windows' then - SplashScreenServices.AddPluginBitmap(lProductName, LoadBitmap(HInstance, 'SPLASH2007')) - else - SplashScreenServices.AddPluginBitmap(lProductName, LoadBitmap(HInstance, 'SPLASH2006')); - {$ENDIF} - (BorlandIDEServices as IOTAAboutBoxServices).AddPluginInfo(lProductName, lProductName+#13#10'Copyright RemObjects Software 2002-2007 .'#13#10'All rights reserved.'#13#10'http://www.remobjects.com/ro.', LoadBitmap(HInstance, 'ABOUT')); - {$ENDIF BDS} -end; - -procedure Register; -begin - RegisterAboutInfo; - RegisterPackageWizard(TROMenuWizard.Create); -end; - -{ TROMenuWizard } - -constructor TROMenuWizard.Create; -begin - inherited Create; - - CreateMenuItems; -end; - -destructor TROMenuWizard.Destroy; -begin - if Assigned(fROMenu) then begin - MenuManager.DestroyMenu(fROMenu); - end; - gRemObjectsMenu := nil; - inherited; -end; - -function TROMenuWizard.GetIDString: string; -begin - Result := '{137E9A72-CBF8-485F-9421-212866E99084}'; -end; - -function TROMenuWizard.GetName: string; -begin - Result := 'ROMenuWizard'; -end; - -// The following are stubs that Delphi never calls. -procedure TROMenuWizard.AfterSave; -begin -end; - -procedure TROMenuWizard.BeforeSave; -begin -end; - -procedure TROMenuWizard.Destroyed; -begin -end; - -procedure TROMenuWizard.Execute; -begin -end; - -function TROMenuWizard.GetState: TWizardState; -begin - Result := []; -end; - -procedure TROMenuWizard.Modified; -begin -end; - -procedure TROMenuWizard.CreateMenuItems; -var - lItem : TEWMenuItem; - i : Integer; - lCaption: string; -begin - - lCaption := 'Rem&Objects SDK'; - with TRegistry.Create(KEY_READ) do try - RootKey := HKEY_CURRENT_USER; - if OpenKey('\Software\RemObjects\RemObjects SDK for Delphi\IDE Integration', False) then - if ValueExists('Menu Caption') then - lCaption := ReadString('Menu Caption'); - if ValueExists('VersionService URL') then - fVersionService := ReadString('VersionService URL'); - finally - Free; - end; - - fROMenu := MenuManager.CreateMenu(lCaption); - fROMenu.OnPopup := OnMenuPopup; - gRemObjectsMenu := fROMenu.Menu; - - with TIdeData.Create(nil) do try - - for i := 0 to High(MenuItems) do begin - - lItem := fROMenu.CreateMenuItem(MenuItems[i].Caption, -1, MenuItems[i].Personalities); - - lItem.MenuItem.ShortCut := TextToShortCut(MenuItems[i].ShortCut); - lItem.MenuItem.Tag := i; - - if MenuItems[i].ImageIndex > -1 then - lItem.SetGlyph(iml_Actions, MenuItems[i].ImageIndex); - - MenuItems[i].Menu := lItem; - - case i of - mi_RODLEditor : lItem.MenuItem.OnClick := ShowServiceBuilder; - mi_ImportServicesRODL : lItem.MenuItem.OnClick := ImportServicesRODL; - mi_ImportServicesWSDL : lItem.MenuItem.OnClick := ImportServicesWSDL; - mi_ServiceTester : lItem.MenuItem.OnClick := LaunchServiceTester; - mi_Regenerate : lItem.MenuItem.OnClick := OnRegenerateUnits; - mi_RegenerateAsync : lItem.MenuItem.OnClick := OnRegenerateAsyncUnit; - mi_ConvertToServer : lItem.MenuItem.OnClick := OnConvertToServer; - //mi_CheckVersion : lItem.MenuItem.OnClick := OnCheckForNewVersion; - mi_About : lItem.MenuItem.OnClick := OnAbout; - mi_LaunchExe : lItem.MenuItem.OnClick := OnLaunchEXE; - mi_HidePreprocessor : begin - lItem.MenuItem.OnClick := OnHidePreprocessorClick; - fHidePreprocessorItem := lItem; - end; - else lItem.MenuItem.OnClick := nil; - end; - end; - - {$IFDEF DELPHI7UP} - MenuItems[mi_HidePreprocessor].Menu.Visible := False; - MenuItems[mi_HidePreprocessor+1].Menu.Visible := False; // separator; - {$ENDIF} - - finally - Free(); - end; - -end; - -procedure TROMenuWizard.OnMenuPopup(Sender: TObject); -var lCurrentProjectIsRodlProject :boolean; - lRodlProject: IOTAProject; - lProject: IOTAProject; -begin - lCurrentProjectIsRodlProject := ProjectIsRodlProject(CurrentProject()); - lRodlProject := FindFirstRodlProject; - - MenuItems[mi_Regenerate].Menu.Visible := lCurrentProjectIsRodlProject; - MenuItems[mi_RegenerateAsync].Menu.Visible := lCurrentProjectIsRodlProject; - - MenuItems[mi_LaunchExe].Menu.Visible := assigned(lRodlProject) or lCurrentProjectIsRodlProject; - //MenuItems[mi_LaunchExeSeparator].Menu.Visible := assigned(lRodlProject) or lCurrentProjectIsRodlProject; - { D7 menu cannot hide separators itself } - - if lCurrentProjectIsRodlProject then begin - MenuItems[mi_RODLEditor].Menu.MenuItem.Caption := 'Edit &Service Library'; - end - else begin - MenuItems[mi_RODLEditor].Menu.MenuItem.Caption := '&Service Builder'; - end; - - if DisplayIDEMessageForm and fHidePreprocessorItem.MenuItem.Checked - then fHidePreprocessorItem.MenuItem.Checked := FALSE; - - lProject := CurrentProject; - if Assigned(lProject) then begin - MenuItems[mi_ConvertToServer].Menu.Visible := not lCurrentProjectIsRodlProject; - MenuItems[mi_ConvertToServer].Menu.MenuItem.Caption := Format(sMakeServerCaption,[ChangeFileExt(ExtractFileName(lProject.GetFileName),'')]); - end - else begin - MenuItems[mi_ConvertToServer].Menu.Visible := false; - end; - MenuItems[mi_ConvertToServerSeparator].Menu.Visible := (MenuItems[mi_ConvertToServer].Menu.Visible or MenuItems[mi_Regenerate].Menu.Visible); -end; - - -resourcestring - sConvertedLaunchSB = 'Your Project was converted into a RemObjects server.'#13#13+ - 'Would you like to launch ServiceBuilder to define your Service, now?'; - -procedure TROMenuWizard.OnConvertToServer(Sender: TObject); -begin - if ConvertProjectToRoServer(CurrentProject()) then begin - if MessageDlg(sConvertedLaunchSB,mtConfirmation,[mbYes,mbNo],0) = idYes then begin - LaunchServiceBuilderForCurrentProject(''); - end; - end; -end; - -procedure TROMenuWizard.OnRegenerateUnits(Sender: TObject); -begin - with TRORODLNotifier.Create do try - GenerateUnits(CurrentProject, [utIntf, utInvk, utImpl]); - finally - Free(); - end; -end; - -procedure TROMenuWizard.OnRegenerateAsyncUnit(Sender: TObject); -begin - with TRORODLNotifier.Create do try - GenerateUnits(CurrentProject, [utAsync]); - finally - Free(); - end; -end; - -procedure TROMenuWizard.ShowServiceBuilder(Sender: TObject); -begin - LaunchServiceBuilderForCurrentProject(''); -end; - -procedure TROMenuWizard.LaunchServiceTester(Sender: TObject); -begin - uROIDETools.LaunchServiceTester(); -end; - -procedure TROMenuWizard.ImportServicesRODL(Sender: TObject); -begin - ImportService('Import.Rodl'); -end; - -procedure TROMenuWizard.ImportServicesWSDL(Sender: TObject); -begin - ImportService('Import.Soap.Wsdl'); -end; - -procedure TROMenuWizard.ImportService(const aType:string); -var params, lUnitName, lRodlName : string; - tempdir : array[0..1000] of char; - - lModule : IOTAModule; - lProject: IOTAProject; - lLibrary: TRODLLibrary; -begin - //if not GetImportInputs(loc) then Exit; - - Windows.GetTempPath(SizeOf(tempdir), tempdir); - lRodlName := IncludeTrailingBackslash(tempdir)+GUIDToString(NewGUID)+'.rodl'; - DeleteFile(lRodlName); - - lProject := CurrentProject; - {$IFDEF SB2} - if assigned(lProject) then begin - params := Format('/import /rodlfile:"%s" /autosave /projectname:"(Import Service for %s)"', [lRodlName,ExtractFileName(lProject.FileName)]); - end - else begin - params := Format('/import /rodlfile:"%s" /autosave', [lRodlName]); - end; - {$ELSE} - if assigned(lProject) then begin - params := Format('"%s" /ns /import:%s /autosave /projectname:"(Importing Service for %s)"', [lRodlName,aType,ExtractFileName(lProject.FileName)]); - end - else begin - params := Format('"%s" /ns /import:%s /autosave', [lRodlName,aType]); - end; - {$ENDIF SB2} - - //params := Format('/import-wsdl:%s /rodlfile:%s /autosave', [loc, fname]); - //params := Format('/import /rodlfile:%s /autosave', [fname]); - //ShowMessage(params); - - with TPleaseWaitForm.Create(Application,'Importing via the ServiceBuilder...') do try - Show(); - LaunchServiceBuilder(lProject.FileName,Params,true); - Hide(); - finally - Free(); - end; - - if FileExists(lRodlName) then try - - lLibrary := LoadLibraryFromXml(lRodlName); - try - - lUnitname := ExtractFilePath(lProject.FileName)+GetTargetFileName(lLibrary, nil, cgtIntf, CodeGenLanuageFromProjectPersonality(lProject)); - - // Checks if the module is already in the project - try - lModule := FindModuleByUnitName(lProject, lUnitname); - except - on E:EFOpenError do lModule := nil; - else raise; - end; - if assigned(lModule) then begin - case MessageDlg(Format('A unit named "%s" already exists in the project.'#13+ - 'Do you want to overwrite the file?', [ExtractFileName(lUnitname)]), - mtWarning, [mbYes, mbCancel], 0) of - mrCancel: Abort; - mrYes: { no-op}; - end - end - else if FileExists(lUnitName) then begin - case MessageDlg(Format('A unit named "%s" already exists, but is not part of the project.'#13+ - 'Do you want to overwrite the file?', [ExtractFileName(lUnitname)]), - mtWarning, [mbYes, mbCancel], 0) of - mrCancel: Abort; - mrYes: { no-op}; - end - end; - - //ToDo: handle read-only files - - {$IFNDEF REMOBJECTS_CODEGEN2} - if CodeGenLanuageFromProjectPersonality(lProject) = cglCppWin32 then begin - {$ENDIF} - - GenerateUnitToFile(lRodlName, nil, cgtIntf, CodeGenLanuageFromProjectPersonality(lProject), '', lUnitName); - lProject.AddFile(lUnitName, true); - //ToDo: properly load from stream into lModule - - {$IFNDEF REMOBJECTS_CODEGEN2} - end - else begin - - with TRODLToIntf.Create(lRodlName,ChangeFileExt(ExtractFileName(lUnitName), '')) do try - Buffer.SaveToFile(lUnitName); - lProject.AddFile(lUnitName, true); - finally - Free; - end; - - end; - {$ENDIF not REMOBJECTS_CODEGEN2} - - finally - FreeAndNil(lLibrary); - end; - - finally - DeleteFile(lRodlName); - end; - -end; - -procedure TROMenuWizard.OnAbout(Sender: TObject); -begin - with TAboutForm.Create(Application) do try - Position := poScreenCenter; - ShowModal(); - finally - Free(); - end -end; - -procedure TROMenuWizard.OnCheckForNewVersion(Sender: TObject); -begin - GetVersionInfos(fVersionService); -end; - -procedure TROMenuWizard.OnHidePreprocessorClick(Sender : TObject); -var - lMenuItem: TMenuItem; -begin - lMenuItem := MenuItems[mi_HidePreprocessor].Menu.MenuItem; - lMenuItem.Checked := not lMenuItem.Checked; - DisplayIDEMessageForm := not lMenuItem.Checked; - if not DisplayIDEMessageForm and IDEMessageForm.Visible then IDEMessageForm.Close; -end; - -{$IFDEF DELPHI5} -const - PathDelim = '\'; - -function IncludeTrailingPathDelimiter(const S: string): string; -begin - Result := S; - if not IsPathDelimiter(Result, Length(Result)) then - Result := Result + PathDelim; -end; -{$ENDIF} - -procedure TROMenuWizard.OnLaunchEXE(Sender: TObject); -var - dirname, exename: string; - lProject: IOTAProject; -begin - if ProjectIsRodlProject(CurrentProject()) then - lProject := CurrentProject() - else - lProject := FindFirstRodlProject(); - - if not assigned(lProject) then exit; // shouldn't happen if menu was active - - exename := GetProjectExe(lProject); - - if not FileExists(exename) then begin - case MessageDlg(Format('The file %s does not exist. Would you like to compile the project now?', [exename]), mtWarning, [mbYes, mbCancel], 0) of - idYes:begin - if lProject.ProjectBuilder.BuildProject(cmOTAMake, true, true) then - ShellExecute(0, 'open', PChar(exename), NIL, PChar(dirname), SW_NORMAL); - end; - idCancel:; - end; - end - else begin - ShellExecute(0, 'open', PChar(exename), NIL, PChar(dirname), SW_NORMAL); - end; - -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEPrjWizard.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEPrjWizard.pas deleted file mode 100644 index 6d3467e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDEPrjWizard.pas +++ /dev/null @@ -1,642 +0,0 @@ -unit uROIDEPrjWizard; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I RemObjects.inc} -{$ELSE} -{$I RemObjects.inc} -{$ENDIF} -interface - -uses Windows, SysUtils, - {$IFDEF KYLIX1UP}DesignEditors, DesignIntf, {$ELSE} - {$IFDEF DELPHI6UP}DesignEditors, DesignIntf, {$ELSE}DsgnIntf, {$ENDIF}{$ENDIF} - ToolsApi, Graphics; - -const - IconName = 'Icon.ico'; - InfoName = 'Info.ini'; - - sect_Information = 'Information'; - sect_ClassFactories = 'Class Factories'; - sect_ProjectGeneration = 'Project Generation'; - sect_ProjectFolderHistory = 'Project Folder History'; - - id_Name = 'Name'; - id_Description = 'Description'; - {$IFDEF LINUX} - id_MinVersion = 'KylixMinimumVersion'; - {$ELSE} - id_MinVersion = 'MinimumVersion'; - {$ENDIF} - id_MaxVersion = 'MaximumVersion'; - id_InvalidServers = 'InvalidServers'; - id_DefaultServer = 'DefaultServer'; - id_FixedChannel = 'FixedChannel'; - id_FixedServer = 'FixedServer'; - - id_SvcLibName = 'SvcLibName'; - id_SvcName = 'SvcName'; - id_PrjName = 'PrjName'; - id_PrjDir = 'PrjDir'; - id_cbSvcInstantMode = 'cbSvcInstantMode'; - id_CreateClientAndGroup = 'CreateClientAndGroup'; - - id_WizardType = 'Wizard'; - - DelphiModules: array[0..8] of string = - ('.dpr', '.pas', '.rodl', '.xml', '.dfm', '.xfm', '.bpg', '.bdsproj', '.bdsgroup'); - -type { TROIDEProjectOptions } - TROIDEProjectOptions = record - TemplateDir, - ServiceLibraryName, - ServiceName, - ProjectDir, - ProjectName, - ServerClassName, - ServerUnitName, - ChannelClassName, - ChannelUnitName, - MessageClassName, - MessageUnitName: string; - CreateClientAndGroup: boolean; - WizardEnabled: boolean; - end; - - TROIDENewProjectInfo = record - Wizard: string; - ServerProject,ClientProject: IOTAProject; - ProjectOptions: TROIDEProjectOptions; - TemplateFolder: string; - TemplateName: string; - end; - TNewProjectEvent = procedure(aNewProjectInfo: TROIDENewProjectInfo); - - { TROProjectWizard } - TROProjectWizard = class(TNotifierObject, - IOTAWizard, - IOTARepositoryWizard, - {$IFDEF BDS} - IOTARepositoryWizard80, - {$ENDIF} - IOTAProjectWizard) - private - fTemplateDir, - fComment, - fName, - fPage: string; - {$IFDEF BDS} - fCategory: IOTAGalleryCategory; - {$ENDIF} - procedure CreateProject(const someProjectOptions: TROIDEProjectOptions; - const ScanExtensions: array of string); - function ReplaceCtrlStrings(const someText: string; - const someProjectOptions: TROIDEProjectOptions): string; - - protected - { support for IOTAWizard } - function GetIDString: string; - function GetName: string; - function GetState: TWizardState; - procedure Execute; - { support for IOTARepositoryWizard } - function GetAuthor: string; - function GetComment: string; - function GetPage: string; - {$IFDEF KYLIX1UP} - function GetGlyph: Cardinal; - {$ELSE} - {$IFDEF DELPHI6UP} - function GetGlyph: Cardinal; - {$ELSE} - function GetGlyph: HIcon; - {$ENDIF} - {$ENDIF} - - {$IFDEF BDS} - function GetDesigner: string; - function GetGalleryCategory: IOTAGalleryCategory; - function GetPersonality: string; - {$ENDIF} - - public - {$IFDEF xBDS} - constructor Create(const aTemplateDir, aName, aComment: string; aCategory: IOTAGalleryCategory); - {$ELSE} - constructor Create(const aTemplateDir, aName, aComment: string; aCategory: string); - {$ENDIF} - destructor Destroy; override; - end; - -procedure Register; -procedure RunGuideWizard(aNewProjectInfo: TROIDENewProjectInfo); -procedure RegisterGuideWizard(aOnNewProject: TNewProjectEvent); -procedure UnregisterGuideWizard(aOnNewProject: TNewProjectEvent); - -implementation - -uses ComObj, Classes, Dialogs, Forms, Controls, uRORes, uRODL, uRODLGenTools, INIFiles, {$IFDEF LINUX}fNewProjectForm{$ELSE}fNewProjectForm{$ENDIF}, - Menus, uROIDETools, uROClasses, Registry {$IFDEF DELPHI5}, FileCtrl{$ENDIF}, - Contnrs; - -procedure Register; -var - dirinfo: TSearchRec; - templdirname, - templname, - templcomment: string; - ini: TIniFile; - tmpcnt: integer; - thisver, minver, maxver: integer; - lTemplateDir: string; - {$IFDEF xBDS} - lGalleryManager: IOTAGalleryCategoryManager; - lRODelphiCategory: IOTAGalleryCategory; - lDADelphiCategory: IOTAGalleryCategory; - lWizardService: IOTAWizardServices; - {$ENDIF} - - procedure ProcessTemplates(aTemplateFolder: string; aCategory: {$IFDEF xBDS}IOTAGalleryCategory{$ELSE}string{$ENDIF}); - begin - if (FindFirst(IncludeTrailingPathDelimiter(aTemplateFolder) + {$IFDEF LINUX} '*'{$ELSE} '*.*'{$ENDIF}, faDirectory, dirinfo) = 0) then try - repeat - ini := nil; - - try - if (dirinfo.Attr and faDirectory = 0) or - (Pos('.', dirinfo.Name) = 1) or - (Pos('_', dirinfo.Name) = 1) then Continue; - - templdirname := IncludeTrailingBackslash(IncludeTrailingBackslash(aTemplateFolder) + dirinfo.Name); - if not FileExists(templdirname + InfoName) then Continue; - - ini := TIniFile.Create(templdirname + InfoName); - minver := ini.ReadInteger(sect_Information, id_MinVersion, {$IFDEF LINUX}10{$ELSE}5{$ENDIF}); - maxver := ini.ReadInteger(sect_Information, id_MaxVersion, 1000); - templname := ini.ReadString(sect_Information, id_Name, '???'); - templcomment := ini.ReadString(sect_Information, id_Description, '???'); - - if thisver < minver then Continue; - if thisver > maxver then Continue; - - {$IFDEF xBDS} - lWizardService.AddWizard(TROProjectWizard.Create(templdirname, templname, templcomment, aCategory) as IOTAProjectWizard); - {$ELSE} - RegisterPackageWizard(TROProjectWizard.Create(templdirname, templname, templcomment, aCategory) as IOTAProjectWizard); - {$ENDIF} - Inc(tmpcnt); - - finally - ini.Free; - end; - - until (FindNext(dirinfo) <> 0); - finally - FindClose(dirinfo); - end; - end; - -begin - {$IFDEF DELPHI5} - thisver := 5; - {$ENDIF} - {$IFDEF DELPHI6} - thisver := 6; - {$ENDIF} - {$IFDEF DELPHI7} - thisver := 7; - {$ENDIF} - {$IFDEF DELPHI9} - thisver := 9; - {$ENDIF} - {$IFDEF DELPHI10} - thisver := 10; - {$ENDIF} - - lTemplateDir := IncludeTrailingPathDelimiter(GetTemplateDir); - - tmpcnt := 0; - - {$IFDEF xBDS} - {lWizardService := Services as IOTAWizardServices; - lGalleryManager := Services as IOTAGalleryCategoryManager; - - if DirectoryExists(lTemplateDir+'RO') then begin - lRODelphiCategory := lGalleryManager.AddCategory(nil, 'RemObjectsSdkDelphi', 'RemObjects SDK for Delphi', 0); - ProcessTemplates(lTemplateDir+'RO', lRODelphiCategory); - end; - if DirectoryExists(lTemplateDir+'DA') then begin - lDADelphiCategory := lGalleryManager.AddCategory(nil, 'RemObjectsDataAbstractDelphi', 'RemObjects Data Abstract for Delphi', 0); - ProcessTemplates(lTemplateDir+'DA', lDADelphiCategory); - end;} - {$ELSE} - if DirectoryExists(lTemplateDir+'RO') then begin - ProcessTemplates(lTemplateDir+'RO','RemObjects SDK'); - end; - if DirectoryExists(lTemplateDir+'DA') then begin - ProcessTemplates(lTemplateDir+'DA', 'RemObjects Data Abstract'); - end; - {$ENDIF} - - // Status message just in case - if (tmpcnt = 0) then - MessageDlg('No RemObject server templates were found under ' + GetTemplateDir, mtWarning, [mbOK], 0) -end; - -{ TROProjectWizard } - -{$IFDEF xBDS} -constructor TROProjectWizard.Create(const aTemplateDir, aName, aComment: string; aCategory: IOTAGalleryCategory); -begin - inherited Create; - - fName := aName; - fTemplateDir := aTemplateDir; - fComment := aComment; - fCategory := aCategory; -end; -{$ELSE} -constructor TROProjectWizard.Create(const aTemplateDir, aName, aComment: string; aCategory: string); -begin - inherited Create; - - fName := aName; - fTemplateDir := aTemplateDir; - fComment := aComment; - fPage := aCategory; -end; -{$ENDIF} - -destructor TROProjectWizard.Destroy; -begin - inherited; -end; - -procedure TROProjectWizard.Execute; -var - prjopt: TROIDEProjectOptions; - lNewProjectInfo: TROIDENewProjectInfo; - i:integer; - lServices: IOTAModuleServices; - lProject: IOTAProject; -begin - if PromptProjectOptions(fTemplateDir, prjopt) then begin - CreateProject(prjopt, DelphiModules); - - with prjopt do begin - {$IFDEF BDS} - if FileExists(ProjectDir + ProjectName + 'Group.bdsgroup') and prjopt.CreateClientAndGroup then - (BorlandIDEServices as IOTAActionServices).OpenProject(ProjectDir + ProjectName + 'Group.bdsgroup', FALSE) - {$ELSE} - if FileExists(ProjectDir + ProjectName + 'Group.bpg') and prjopt.CreateClientAndGroup then - (BorlandIDEServices as IOTAActionServices).OpenProject(ProjectDir + ProjectName + 'Group.bpg', FALSE) - {$ENDIF} - - {$IFDEF BDS} - else if FileExists(ProjectDir + ProjectName + '.bdsproj') then - (BorlandIDEServices as IOTAActionServices).OpenProject(ProjectDir + ProjectName + '.bdsproj', FALSE) - {$ELSE} - else if FileExists(ProjectDir + ProjectName + '.dpr') then - (BorlandIDEServices as IOTAActionServices).OpenProject(ProjectDir + ProjectName + '.dpr', FALSE) - {$ENDIF} - else - raise Exception.Create('Cannot find RemObjects project'); - - // find projects - lServices := ModuleServices; - if not assigned(lServices) then exit; - for i := 0 to (lServices.ModuleCount - 1) do begin - if lServices.Modules[i].QueryInterface(IOTAProject, lProject) = S_OK then begin - if ChangeFileExt(ExtractFileName(lProject.FileName),'') = prjopt.ProjectName then begin - lNewProjectInfo.ServerProject := lProject; - end - else if ChangeFileExt(ExtractFileName(lProject.FileName),'') = prjopt.ProjectName+'Client' then begin - lNewProjectInfo.ClientProject := lProject; - end; - end; - end; - if not assigned(lNewProjectInfo.ServerProject) then exit; - - if WizardEnabled then begin - with TMemIniFile.Create(IncludeTrailingBackslash(prjopt.TemplateDir)+'Info.ini') do try - lNewProjectInfo.Wizard := ReadString('Information', 'Wizard', ''); - if lNewProjectInfo.Wizard <> '' then begin - lNewProjectInfo.TemplateFolder := fTemplateDir; - lNewProjectInfo.TemplateName := ExtractFileName(ExcludeTrailingPathDelimiter(fTemplateDir)); - lNewProjectInfo.ProjectOptions := prjopt; - RunGuideWizard(lNewProjectInfo); - end; - finally - Free(); - end; - end; - - {if (MessageDlg( - 'Your server project needs to be compiled in order to generate the additional units' + #13 + - 'required for remote invocation. Do you want to do that now?', mtInformation, [mbYes, mbNo], 0) = mrYes) then begin - CompileProject; - end;} - end; - end; -end; - -procedure TROProjectWizard.CreateProject(const someProjectOptions: TROIDEProjectOptions; const ScanExtensions: array of string); -var - lIgnoreAll: boolean; - - function CanWriteFile(const aFilename: string): boolean; - begin - result := (not FileExists(aFileName)) or lIgnoreAll; - if not result then begin - case MessageDlg(Format('File %s already exists. Overwrite?', [aFileName]), mtWarning, [mbYes, mbYesToAll, mbNo, mbCancel], 0) of - mrYes: result := true; - mrYesToAll: begin - result := true; - lIgnoreAll := true; - end; - mrCancel: Abort(); - end; - end; - end; - - function CopyTemplateFiles(const SourceDir: string):boolean; - var - s, d, templatedir: string; - dirinfo: TSearchRec; - sl: TStringList; - i: integer; - docopy: boolean; - begin - result := true; - sl := TStringList.Create; - templatedir := IncludeTrailingBackslash(SourceDir); - try - - if (FindFirst(templatedir + '*.*', faArchive, dirinfo) = 0) then try - ForceDirectories(someProjectOptions.ProjectDir); - repeat - if (CompareText(dirinfo.Name, IconName) = 0) or - (CompareText(dirinfo.Name, InfoName) = 0) then Continue; - - s := templatedir + dirinfo.Name; - d := someProjectOptions.ProjectDir + ReplaceCtrlStrings(dirinfo.Name, someProjectOptions); - - docopy := TRUE; - for i := 0 to High(ScanExtensions) do - if (CompareText(ExtractFileExt(dirinfo.Name), ScanExtensions[i]) = 0) then begin - - if not CanWriteFile(d) then Continue; - - sl.LoadFromFile(s); - sl.Text := ReplaceCtrlStrings(sl.Text, someProjectOptions); - sl.SaveToFile(d); - - if SameText(ExtractFileExt(s),'.rodl') then result := false; - - docopy := FALSE; - Break; - end; - - if docopy then begin - if CanWriteFile(d) then begin - CopyFile(PChar(s), PChar(d), FALSE); - { Make sure copied files are not readonly, which they might be - if TEMPLATES folder is. } - SetFileAttributes(PChar(d), FILE_ATTRIBUTE_ARCHIVE); - end; - end; - - until (FindNext(dirinfo) <> 0); - finally - FindClose(dirinfo); - end; - finally - sl.Free; - end; - end; - -var - lNeedsRodl: boolean; - lClientFolder: string; -begin - lNeedsRodl := CopyTemplateFiles(someProjectOptions.TemplateDir); - if lNeedsRodl then CopyTemplateFiles(GetTemplateDir); - {$IFDEF BDS} - CopyTemplateFiles(IncludeTrailingBackslash(GetTemplateDir)+'_BDS\Server'); - {$ENDIF} - - if someProjectOptions.CreateClientAndGroup then begin - lClientFolder := IncludeTrailingBackslash(someProjectOptions.TemplateDir)+'_CLIENT'; - if not DirectoryExists(lClientFolder) then - lClientFolder := IncludeTrailingBackslash(GetTemplateDir)+'_CLIENT'; - CopyTemplateFiles(lClientFolder); - {$IFDEF BDS} - CopyTemplateFiles(IncludeTrailingBackslash(GetTemplateDir)+'_BDS\Client'); - {$ENDIF} - end; - -end; - -function GuidReplace(const S, OldPattern: string; Flags: TReplaceFlags): string; -var - SearchStr, Patt, NewStr: string; - Offset: Integer; -begin - if rfIgnoreCase in Flags then begin - SearchStr := UpperCase(S); - Patt := UpperCase(OldPattern); - end - else begin - SearchStr := S; - Patt := OldPattern; - end; - NewStr := S; - Result := ''; - while SearchStr <> '' do begin - Offset := AnsiPos(Patt, SearchStr); - if Offset = 0 then begin - Result := Result + NewStr; - Break; - end; - Result := Result + Copy(NewStr, 1, Offset - 1) + NewGuidAsString(); - NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); - if not (rfReplaceAll in Flags) then begin - Result := Result + NewStr; - Break; - end; - SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt); - end; -end; - -function TROProjectWizard.ReplaceCtrlStrings(const someText: string; const someProjectOptions: TROIDEProjectOptions): string; -var - cs: string; - lRoFolder, lDaFolder:string; -begin - cs := UpperCase(someText); - with TRegistry.Create do try - RootKey := HKEY_CURRENT_USER; - OpenKey('\Software\RemObjects\RemObjects SDK for Delphi',false); - lRoFolder := ReadString('InstallDir'); - OpenKey('\Software\RemObjects\Data Abstract',false); - lDaFolder := ReadString('InstallDir'); - finally - Free(); - end; - if lRoFolder = '' then lRoFolder := ExpandFileName(IncludeTrailingBackslash(GetBinDir)+'..\'); - if lDaFolder = '' then lDaFolder := ExpandFileName(IncludeTrailingBackslash(GetBinDir)+'..\..\Data Abstract\'); - lRoFolder := IncludeTrailingBackslash(lRoFolder); - lDaFolder := IncludeTrailingBackslash(lDaFolder); - - result := StringReplace(someText, '$ROFOLDER', lRoFolder , [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(someText, '$DAFOLDER', lDaFolder , [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$PRJNAME', someProjectOptions.ProjectName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$SVCNAME', someProjectOptions.ServiceName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$SERVICENAME', someProjectOptions.ServiceName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$SVCLIBNAME', someProjectOptions.ServiceLibraryName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$LIBRARYNAME', someProjectOptions.ServiceLibraryName, [rfReplaceAll, rfIgnoreCase]); - result := GuidReplace(result, '$NEWID', [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$MSGCLSNAME', someProjectOptions.MessageClassName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$MSGCLSNAME', someProjectOptions.MessageClassName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$SRVCLSNAME', someProjectOptions.ServerClassName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$CHNCLSNAME', someProjectOptions.ChannelClassName, [rfReplaceAll, rfIgnoreCase]); - - result := StringReplace(result, '$CHANNELUNIT', someProjectOptions.ChannelUnitName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$SERVERUNIT', someProjectOptions.ServerUnitName, [rfReplaceAll, rfIgnoreCase]); - result := StringReplace(result, '$MESSAGEUNIT', someProjectOptions.MessageUnitName, [rfReplaceAll, rfIgnoreCase]); -end; - -function TROProjectWizard.GetAuthor: string; -begin - Result := str_Author; -end; - -function TROProjectWizard.GetComment: string; -begin - Result := fComment -end; - -{$IFDEF KYLIX1UP} - -function TROProjectWizard.GetGlyph: Cardinal; -var - icon: Graphics.TIcon; -begin - if FileExists(fTemplateDir + IconName) then begin - icon := Graphics.TIcon.Create; - icon.LoadFromFile(fTemplateDir + IconName); - result := icon.Handle; - end - else - result := 0; -end; -{$ELSE} -{$IFDEF DELPHI6UP} - -function TROProjectWizard.GetGlyph: Cardinal; -var - icon: TIcon; -begin - if FileExists(fTemplateDir + IconName) then begin - icon := TIcon.Create; - icon.LoadFromFile(fTemplateDir + IconName); - result := icon.Handle; - end - else - result := 0; -end; -{$ELSE} - -function TROProjectWizard.GetGlyph: HICON; -var - icon: TIcon; -begin - if FileExists(fTemplateDir + IconName) then begin - icon := TIcon.Create; - icon.LoadFromFile(fTemplateDir + IconName); - result := icon.Handle; - end - else - result := 0; -end; -{$ENDIF} -{$ENDIF} - -{$IFDEF BDS} -function TROProjectWizard.GetDesigner: string; -begin - result := ''; -end; - -function TROProjectWizard.GetGalleryCategory: IOTAGalleryCategory; -begin - result := fCategory; -end; - -function TROProjectWizard.GetPersonality: string; -begin - result := sDelphiPersonality; -end; -{$ENDIF} - - -function TROProjectWizard.GetIDString: string; -begin - Result := GUIDToString(NewGUID) -end; - -function TROProjectWizard.GetName: string; -begin - Result := fName -end; - -function TROProjectWizard.GetPage: string; -begin - Result := fPage; -end; - -function TROProjectWizard.GetState: TWizardState; -begin - Result := []; -end; - -var - fGuideWizardList: TList; - -procedure RunGuideWizard(aNewProjectInfo: TROIDENewProjectInfo); -var - i: integer; -begin - for i := 0 to fGuideWizardList.Count-1 do - TNewProjectEvent(fGuideWizardList[i])(aNewProjectInfo); -end; - -procedure RegisterGuideWizard(aOnNewProject: TNewProjectEvent); -begin - fGuideWizardList.Add(@aOnNewProject); -end; - -procedure UnregisterGuideWizard(aOnNewProject: TNewProjectEvent); -begin - if assigned(fGuideWizardList) then - fGuideWizardList.Remove(@aOnNewProject); -end; - -initialization - fGuideWizardList := TList.Create(); -finalization - FreeAndNil(fGuideWizardList); -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDETools.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDETools.pas deleted file mode 100644 index aa105c7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROIDETools.pas +++ /dev/null @@ -1,739 +0,0 @@ -unit uROIDETools; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface - -uses Classes, ToolsAPI, Contnrs, Windows, uRODLConvertersUtils; - -const - MaxSourceSize = 10000; - - kw_RODLGenerationDelphi = '{#ROGEN'; - kw_RODLGenerationCpp = '//#ROGEN'; - -type { TIDEMessage } - TIDEMessageType = (mInfo, mError, mWarning); - - TIDEMessage = class - private - fMessageType: TIDEMessageType; - fFileName, - fMessageStr, - fPrefixStr: string; - - public - constructor Create(aMessageType: TIDEMessageType; - const aMessageStr: string; - const aFileName: string = ''; - const aPrefixStr: string = ''); - - property MessageType: TIDEMessageType read fMessageType; - property FileName: string read fFileName; - property MessageStr: string read fMessageStr; - property PrefixStr: string read fPrefixStr; - end; - - { TIDEMessageList } - TIDEMessageList = class(TObjectList) - private - fPrefixStr: string; - - function GetItems(Index: integer): TIDEMessage; - - public - constructor Create(const aPrefixStr: string); - destructor Destroy; override; - - procedure ClearMessages; - procedure Add(aMessageType: TIDEMessageType; - const aMessageStr: string; - const aFileName: string = ''; - const aPrefixStr: string = ''); - - procedure FlushMessages; - - property Items[Index: integer]: TIDEMessage read GetItems; default; - end; - -// Service access helpers -function ModuleServices: IOTAModuleServices; -function CurrentProject: IOTAProject; -function MessageServices: IOTAMessageServices; -function Services: IOTAServices; -function ActionServices: IOTAActionServices; - -// Module helpers -function ModuleFileName(const aModule: IOTAModule): string; -function ModuleDir(const aModule: IOTAModule): string; -function ModuleSourceSize(const aModule: IOTAModule): integer; - -// Project helpers - -function CodeGenLanuageFromProjectPersonality(aProject: IOTAProject): TROCodeGenLanguage; - -function FindModule(const aProject: IOTAProject; const aModuleName: string): IOTAModule; -function FindModuleByUnitName(const aProject: IOTAProject; const aModuleName: string): IOTAModule; -function GenerateRESFromRODL(const RODLFileName: string; aMessageList: TIDEMessageList): boolean; -function ExtractRODLFileName(const Source: string): string; // Only returns the file name specified in the dpr file - -function FindFirstRodlProject: IOTAProject; -function ProjectIsRodlProject(aProject: IOTAProject):boolean; -function ConvertProjectToRoServer(aProject: IOTAProject):boolean; - -function ExecuteAndWait(const aApp, aCmdLine:string; aWait:boolean=true):dword; - -function GetServiceBuilderPath: string; -procedure LaunchServiceBuilder(const aProjectName, aParams: string; aWait:boolean=false); -procedure LaunchServiceBuilderForCurrentProject(const aAdditionalParameters:string; aOnlyLaunchForROServer:boolean=false; aWait:boolean=false); - -procedure LaunchServiceTester; - -function GetTemplateDir: string; -function GetBinDir: string; -function GetTemplateConfigFileName : string; -function GetTemplateOptionsFileName : string; - -procedure CompileProject; -function GetProjectExe(aProject: IOTAProject): string; - -implementation - -uses SysUtils, Dialogs, ShellAPI, Controls, uRORes, {$IFDEF LINUX} - fCustomIDEMessagesFormKylix, {$ELSE} - fCustomIDEMessagesForm, {$ENDIF}uROResWriter, Forms, uROClasses, Registry, - uEWMenuManager, uEWOTAHelpers; - -function GetProjectExe(aProject: IOTAProject): string; -var - dirname: string; -begin - ChDir(ExtractFilePath(aProject.FileName)); - - dirname := Trim(aProject.ProjectOptions.Values['OutputDir']); - if (dirname='') then begin - dirname := ExtractFilePath(aProject.FileName) - end - else begin - // Checks for relative paths - if (dirname[1]='.') then dirname := ExtractFilePath(aProject.FileName)+dirname; - end; - - result := IncludeTrailingPathDelimiter(dirname)+ChangeFileExt(ExtractFileName(aProject.FileName), '.exe'); -end; - -// Service access helpers - -function CodeGenLanuageFromProjectPersonality(aProject: IOTAProject): TROCodeGenLanguage; -begin - {$IFDEF DELPHI9UP} - if aProject.Personality = sPersonalityDelphiWin32 then - result := cglDelphiWin32 - else if aProject.Personality = sPersonalityCppBuilderWin32 then - result := cglCppWin32 - else - raise Exception.Create('Unsupported project type '+aProject.Personality); - {$ELSE} - result := cglDelphiWin32 - {$ENDIF} -end; - -function ModuleServices: IOTAModuleServices; -begin - result := (BorlandIDEServices as IOTAModuleServices); -end; - -function CurrentProject: IOTAProject; -var - services: IOTAModuleServices; - module: IOTAModule; - project: IOTAProject; - projectgroup: IOTAProjectGroup; - multipleprojects: Boolean; - i: Integer; -begin - result := nil; - - multipleprojects := False; - services := ModuleServices; - - if (services = nil) then Exit; - - for I := 0 to (services.ModuleCount - 1) do begin - module := services.Modules[I]; - if (module.QueryInterface(IOTAProjectGroup, ProjectGroup) = S_OK) then begin - result := ProjectGroup.ActiveProject; - Exit; - end - - else if module.QueryInterface(IOTAProject, Project) = S_OK then begin - if (result = nil) then - result := Project // Found the first project, so save it - else - multipleprojects := True; // It doesn't look good, but keep searching for a project group - end; - end; - - if multipleprojects then result := nil; -end; - -function MessageServices: IOTAMessageServices; -begin - result := (BorlandIDEServices as IOTAMessageServices); -end; - -function Services: IOTAServices; -begin - result := (BorlandIDEServices as IOTAServices); -end; - -function ActionServices: IOTAActionServices; -begin - result := (BorlandIDEServices as IOTAActionServices) -end; - -// Module helpers - -function ModuleFileName(const aModule: IOTAModule): string; -begin - result := aModule.FileName; - { AleF: removed for Delphi5 - result := ''; - - with aModule do - for i := 0 to ModuleFileCount-1 do - if Supports(ModuleFileEditors[i], IOTASourceEditor, editor) then begin - result := editor.FileName; - Exit; - end;} -end; - -function ModuleDir(const aModule: IOTAModule): string; -begin - result := IncludeTrailingBackslash(ExtractFilePath(ModuleFileName(aModule))) -end; - -function ModuleSourceSize(const aModule: IOTAModule): integer; -begin - result := Length(ReadModuleSource(aModule)); -end; - -{ TIDEMessageList } - -{$IFDEF DELPHI7UP} - -procedure TIDEMessageList.Add(aMessageType: TIDEMessageType; - const aMessageStr: string; - const aFileName: string = ''; - const aPrefixStr: string = ''); -var - lGroup: IOTAMessageGroup; - lDummyLineRef: pointer; - lPrefix: string; -begin - with BorlandIDEServices as IOTAMessageServices60 do begin - lGroup := GetGroup(str_ProductName); - if not Assigned(lGroup) then lGroup := AddMessageGroup(str_ProductName); - - lPrefix := aPrefixStr; - if lPrefix = '' then lPrefix := 'Note'; - AddToolMessage(aFilename, aMessageStr, lPrefix, -1, -1, nil, lDummyLineRef, lGroup); - end; { with } -end; -{$ELSE} - -procedure TIDEMessageList.Add(aMessageType: TIDEMessageType; - const aMessageStr: string; - const aFileName: string = ''; - const aPrefixStr: string = ''); -var - msg: TIDEMessage; -begin - msg := TIDEMessage.Create(aMessageType, aMessageStr, aFileName, aPrefixStr); - inherited Add(msg); -end; -{$ENDIF} - -procedure TIDEMessageList.ClearMessages; -{$IFDEF DELPHI7UP} -var - lGroup: IOTAMessageGroup; -begin - with BorlandIDEServices as IOTAMessageServices60 do begin - lGroup := GetGroup(str_ProductName); - if not Assigned(lGroup) then lGroup := AddMessageGroup(str_ProductName); - RemoveMessageGroup(lGroup); - end; -end; -{$ELSE} -begin -end; -{$ENDIF} - -constructor TIDEMessageList.Create(const aPrefixStr: string); -begin - inherited Create; - fPrefixStr := aPrefixStr; -end; - -destructor TIDEMessageList.Destroy; -begin - inherited; -end; - -procedure TIDEMessageList.FlushMessages; -begin - {$IFNDEF DELPHI7UP} - IDEMessageForm.FillList(Self); - Clear; - {$ENDIF DELPHI7UP} -end; - -// Project helpers - -function FindModule(const aProject: IOTAProject; const aModuleName: string): IOTAModule; -var - i: integer; -begin - result := nil; - for i := 0 to aProject.GetModuleCount - 1 do - if (CompareText(aModuleName, aProject.GetModule(i).FileName) = 0) then begin - result := aProject.GetModule(i).OpenModule; - Exit; - end; -end; - -function FindModuleByUnitName(const aProject: IOTAProject; const aModuleName: string): IOTAModule; -var - i: integer; -begin - result := nil; - for i := 0 to aProject.GetModuleCount - 1 do - if (CompareText(ExtractFileName(aModuleName), ExtractFileName(aProject.GetModule(i).FileName)) = 0) then begin - result := aProject.GetModule(i).OpenModule; - Exit; - end; -end; - -function TIDEMessageList.GetItems(Index: integer): TIDEMessage; -begin - result := TIDEMessage(inherited Items[Index]); -end; - -{ TIDEMessage } - -constructor TIDEMessage.Create(aMessageType: TIDEMessageType; - const aMessageStr, aFileName, aPrefixStr: string); -begin - fMessageType := aMessageType; - fMessageStr := aMessageStr; - fFileName := aFileName; - fPrefixStr := aPrefixStr; -end; - -// File names helpers - -function ExtractRODLFileName(const Source: string): string; -var - src: string; - i, lNameStartIndex, idx: integer; -begin - result := ''; - - src := UpperCase(Source); - idx := Pos(kw_RODLGenerationDelphi, src); - if idx = 0 then idx := Pos(kw_RODLGenerationCpp, src); // allow C++-style comment in Delphi, too - if idx = 0 then exit; - - lNameStartIndex := 0; - - for i := idx to Length(src) do begin - case src[i] of - ':': if (lNameStartIndex = 0) then lNameStartIndex := i + 1; - '}',#13, #10, '|': begin - if lNameStartIndex = 0 then - raise Exception.Create('Invalid #ROGEN directive, RODL filename not spcified.'); - result := Trim(Copy(Source, lNameStartIndex, i-lNameStartIndex)); - break; - end; - - end; - end; -end; - -function FindFirstRodlProject: IOTAProject; -var - i: integer; - lServices: IOTAModuleServices; - lProject: IOTAProject; -begin - result := nil; - - lServices := ModuleServices; - - if (lServices = nil) then Exit; - - for i := 0 to (lServices.ModuleCount - 1) do begin - if lServices.Modules[i].QueryInterface(IOTAProject, lProject) = S_OK then begin - if ProjectIsRodlProject(lProject) then begin - result := lProject; - exit; - end; - end; - end; -end; - -function ProjectIsRodlProject(aProject: IOTAProject):boolean; -var - lSource:string; -begin - result := false; - if Assigned(aProject) then begin - lSource := ReadModuleSource(aProject); - result := ExtractRODLFileName(lSource) <> ''; - end; -end; - -function ConvertProjectToRoServer(aProject: IOTAProject):boolean; -var - lSource, lUsesClause: string; - lUsesStarts, lUsesEnds: Integer; -begin - result := false; - if Assigned(aProject) and not ProjectIsRodlProject(aProject) then begin - - lSource := ReadModuleSource(aProject); - - case CodeGenLanuageFromProjectPersonality(aProject) of - cglDelphiWin32: begin - lSource := StringReplace(lSource, 'uses', - 'uses'#13#10+ - ' uROCOMInit,', - [rfIgnoreCase]); - - lUsesStarts := Pos('uses', lSource); - lUsesEnds := Pos(';', Copy(lSource, lUsesStarts, Length(lSource) - lUsesStarts)); - lUsesClause := Copy(lSource, lUsesStarts, lUsesEnds); - - lSource := StringReplace(lSource, lUsesClause, lUsesClause + #13#10#13#10 + - '{#ROGEN:' + ExtractFileName(ChangeFileExt(aProject.FileName,'.rodl'))+'} // RemObjects: Careful, do not remove!'#13#10+ - '{$R RODLFile.res}', - [rfIgnoreCase]); - end; - - cglCppWin32: begin - Insert('#include '#13#10, lSource, Pos('#include', lSource)); - - lSource := StringReplace(lSource,'#pragma hdrstop', - '#pragma hdrstop'#13#10+ - '//#ROGEN:'+ExtractFileName(ChangeFileExt(aProject.FileName,'.rodl'))+' | RemObjects: Careful, do not remove!'#13#10+ - '#pragma resource "RODLFile.res"', - [rfIgnoreCase]); - end; - - end; - result := true; - WriteModuleSource(aProject,lSource, ''); - end; -end; - -function ReadRegistryValue(aBaseKey:HKEY; aPath:string; aName:string; aDefault:string=''):string; -begin - with TRegistry.Create(KEY_READ) do try - RootKey := aBaseKey; - if OpenKey(aPath, False) then - if ValueExists(aName) then - result := ReadString(aName) - else - result := aDefault; - finally - Free; - end; -end; - -function GetServiceBuilderPath: string; -var reg: TRegIniFile; -begin - reg := TRegIniFile.Create('Software\RemObjects\RemObjects SDK'); - try - result := reg.ReadString('ServiceBuilder', 'FullPath', GetBinDir+'ROServiceBuilder3.exe'); - finally - reg.Free; - end; -end; - -function GetServiceTesterPath: string; -begin - {result := ReadRegistryValue(HKEY_CURRENT_USER,'Software\RemObjects\RemObjects SDK for Delphi','InstallDir',''); - if result = '' then - raise Exception.Create('Cannot find RemObjects SDK for Delphi location in Registry.'#13#13'Please make sure RemObjects SDK is installed properly.'); - result := IncludeTrailingBackslash(result)+'Bin\ROServiceTester.exe'; - if not FileExists(result) then - raise Exception.CreateFmt('Cannot find ServiceTester at "%s".'#13#13'Please make sure RemObjects SDK is installed properly.', [result]);} - result := IncludeTrailingPathDelimiter(ExtractFilePath(GetServiceBuilderPath()))+'ROServiceTester.exe'; - if not FileExists(result) then - raise Exception.CreateFmt('Cannot find ServiceTester at "%s".'#13#13'Please make sure RemObjects SDK is installed properly.', [result]); -end; - -{----------------------------------------------------------------------------} -// Taken from eFiles.pas from the eLibrary 6.0 -function ExecuteAndWait(const aApp, aCmdLine:string; aWait:boolean=true):dword; -var StartupInfo:TStartupInfo; - ProcessInfo:TProcessInformation; - lApp:string; - s:array[0..MAX_PATH] of char; -begin - GetStartupInfo(Startupinfo); - - ExpandEnvironmentStrings(pChar(aApp),@s,MAX_PATH); - lApp := string(pChar(@s)); - - if CreateProcess(pChar(lApp), - pChar('"'+lApp+'" '+aCmdLine), - nil,nil,false,0,nil, - pChar(GetCurrentDir), - StartupInfo, - ProcessInfo) then begin - CloseHandle(ProcessInfo.hThread); - - if aWait then begin - { Wait till app terminates, but don't block main thread. } - while WaitForSingleObject(ProcessInfo.hProcess,100) = WAIT_TIMEOUT do - Application.ProcessMessages(); - GetExitCodeProcess(ProcessInfo.hProcess,result); - end; - CloseHandle(ProcessInfo.hProcess); - end - else raise Exception.CreateFmt('could not create process %s %s: %d',[lApp,CmdLine,GetLastError]); -end; - -procedure LaunchServiceBuilder(const aProjectName, aParams: string; aWait:boolean=false); -var - lExeName: string; -begin - lExeName := GetServiceBuilderPath(); - - if aWait then begin - ExecuteAndWait(lExename, aParams); - end - else begin - ShellExecute(0, 'open', PChar(lExeName), PChar(aParams), PChar(ExtractFilePath(aProjectName)), SW_NORMAL); - end; -end; - -procedure LaunchServiceTester; -var - lExeName: string; -begin - lExeName := GetServiceTesterPath(); - ShellExecute(0, 'open', PChar(lExeName), nil, nil, SW_NORMAL); -end; - -procedure LaunchServiceBuilderForCurrentProject(const aAdditionalParameters:string; aOnlyLaunchForROServer:boolean=false; aWait:boolean=false); -var prj : IOTAProject; - fname, - lParams, - src: string; -begin - // TODO: Clean up these hardcoded things - prj := CurrentProject; - - if Assigned(prj) then begin - src := ReadModuleSource(prj); - fname := ModuleDir(prj)+ExtractRODLFileName(src); - - if (ExtractFileName(fname)<>'') then begin - {$IFDEF SB2} - lParams := Format('/rodlfile:"%s" /projectname:"%s" /autosave '+aAdditionalParameters, [fname, ExtractFileName(prj.FileName)]) - {$ELSE} - lParams := Format('"%s" /ns /projectname:"%s" /autosave '+aAdditionalParameters, [fname, ExtractFileName(prj.FileName)]) - {$ENDIF} - end - else begin - if aOnlyLaunchForROServer then - RaiseError('The current project is not a RemObjects Server'); - lParams := '/ns '+aAdditionalParameters; - end; - LaunchServiceBuilder(prj.FileName, lParams, aWait); - - end - else begin - if aOnlyLaunchForROServer then - RaiseError('The current project is not a RemObjects Server'); - LaunchServiceBuilder('', '/ns') - end; -end; - -function GenerateRESFromRODL(const RODLFileName: string; aMessageList: TIDEMessageList): boolean; -var {outname, } - lAttributes: Integer; - resname {, pars}: string; - //res : integer; - resdata, rodldata: TFileStream; -begin - rodldata := nil; - resdata := nil; - - result := false; - try - try - resname := IncludeTrailingBackslash(ExtractFilePath(RODLFileName)) + res_RODLFile + '.res'; - - {$IFDEF MSWINDOWS} - if FileExists(resname) then begin - lAttributes := FileGetAttr(resname); - if (lAttributes and faReadOnly) = faReadOnly then begin - case MessageDlg(Format('%s is readonly, overwrite anyway?',[ExtractFileName(resname)]), - mtConfirmation, [mbYes, mbCancel, mbIgnore], 0) of - mrCancel: Abort(); - mrIgnore: begin - result := true; - exit; - end; - mrYes: FileSetAttr(resname, lAttributes xor faReadOnly); - end; - end; - end; - {$ENDIF} - - resdata := TFileStream.Create(resname, fmCreate); - rodldata := TFileStream.Create(RODLFileName, fmOpenRead + fmShareDenyNone); - rodldata.Position := 0; - - WriteRES(rodldata, resdata, res_RODLFile); - - result := FileExists(resname); - except - on E: EAbort do raise; - on E: Exception do begin - MessageDlg('The following error occourred while trying to generate the resource file.'#13 + - E.Message, mtError, [mbOK], 0); - result := FALSE; - end; - end; - finally - rodldata.Free; - resdata.Free; - end; -{ try - // Creates an rc file called RODLFile.rc and saves it where the RODL file is located - outname := IncludeTrailingBackslash(ExtractFilePath(RODLFileName))+res_RODLFile+'.rc'; - - with TStringList.Create do try - Add(Format('%s RCDATA "%s"', [res_RODLFile, RODLFileName])); - SaveToFile(outname); - finally - Free; - end; - - resname := ChangeFileExt(outname, '.RES'); - DeleteFile(resname); - - if FileExists(resname) then begin - aMessageList.Add(mError,'The file '+resname+' could not be deleted'); - end; - - pars := '"'+outname+'" "'+resname+'"'; - res := ShellExecute(0, 'open', 'BRCC32', PChar(pars), NIL, SW_HIDE); - aMessageList.Add(mInfo, 'BRCC32 '+pars); - - if (res<=32) then begin - aMessageList.Add(mError,Format('ShellExecute returned %s', [res])); - result := FALSE; - end - else result := TRUE; - except - on E:Exception do begin - MessageDlg('The following error occourred while trying to generate the resource file.'#13+ - E.Message, mtError, [mbOK], 0); - result := FALSE; - end; - end;} -end; - -procedure CompileProject; -var - Actions: IOTAEditActions; - ModuleServices: IOTAModuleServices; - Module: IOTAModule; - SourceEdit: IOTASourceEditor; - FileCount: Integer; - cnt: Integer; -begin - ModuleServices := BorlandIDEServices as IOTAModuleServices; - - Module := ModuleServices.CurrentModule; - - FileCount := Module.GetModuleFileCount; - if not FileCount>0 then Exit; - - for cnt := 0 to FileCount - 1 do - if Module.GetModuleFileEditor(cnt).QueryInterface(IOTASourceEditor, SourceEdit) = S_OK then begin - if SourceEdit.EditViews[0].QueryInterface(IOTAEditActions, Actions) = S_OK then - Actions.CompileProject; - exit; - end; -end; - - -function GetDllPath: String; -var TheFileName : array[0..MAX_PATH] of char; -begin - FillChar(TheFileName, SizeOf(TheFileName), #0); - {$IFDEF KYLIX}System.{$ENDIF}GetModuleFileName(hInstance, TheFileName, sizeof(TheFileName)); - Result := ExtractFilePath(TheFileName); -end; - -function GetTemplateDir: string; -begin - result := ReadRegistryValue(HKEY_CURRENT_USER,'Software\RemObjects\RemObjects SDK for Delphi','InstallDir',''); - Result := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(Result) + 'Templates'); -(* - //ToDo: use a more reliable way to find templates; possibly using the same technique as GetServiceBuilderPath() - // This function strips the "DCU\Dx" part of the path where the BPL is - result := ExtractFilePath(GetDllPath); - {$IFDEF DELPHI10UP} - result := IncludeTrailingBackslash(Copy(result,1,Length(result)-8))+{$IFDEF KYLIX}'Templates/'{$ELSE}'Templates\'{$ENDIF}; - {$ELSE} - result := IncludeTrailingBackslash(Copy(result,1,Length(result)-7))+{$IFDEF KYLIX}'Templates/'{$ELSE}'Templates\'{$ENDIF}; - {$ENDIF} -*) -end; - -function GetBinDir: string; -begin - // TODO: Fix this adding a registry key. - - // This function strips the "DCU\Dx" part of the path where the BPL is - result := ExtractFilePath(GetDllPath); - result := IncludeTrailingBackslash(Copy(result,1,Length(result)-7))+'Bin\'; -end; - -function GetTemplateConfigFileName : string; -begin - result := GetTemplateDir+'Config.ini'; -end; - -function GetTemplateOptionsFileName : string; -begin - result := GetTemplateDir+'TemplateOptions.ini'; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.dfm deleted file mode 100644 index 82d7f65..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.dfm +++ /dev/null @@ -1,903 +0,0 @@ -object ROLoginNeededForm: TROLoginNeededForm - Left = 307 - Top = 304 - Caption = 'RemObjects SDK Session Required' - ClientHeight = 266 - ClientWidth = 417 - Color = clBtnFace - Constraints.MinHeight = 300 - Constraints.MinWidth = 425 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - Icon.Data = { - 0000010006003030000001000800A80E0000660000002020000001000800A808 - 00000E0F0000101000000100080068050000B61700003030000001002000A825 - 00001E1D00002020000001002000A8100000C642000010100000010020006804 - 00006E5300002800000030000000600000000100080000000000000900000000 - 0000000000000001000000010000000000000505050006060F00090909000E0E - 0E000C0C160007071A0008081B001111110015151500191919001D1D1D000505 - 2200111125001A1B25001C1D270014152900181A2E000B0B31000B0B3B001316 - 3F00191C3C001F202B002121210024242400292929002D2D2D0025273200282A - 360021243A002F313D003131310035353500393939003D3D3D00060649000909 - 4C00161A430014194D00050552000C0D52000909560003035A00090A58000A0C - 5B000B0E5E000D115800181E540014195900161D5E001C2040002E344D00393C - 49002E375C00343A5400363C55000303630005056F000E14660012186200131C - 690010196F0005057A0001017E0005077E000C157F000F1A7C00121D75001923 - 660015206E001B266B001C286E00172373001E2B730014217A00192779001B2B - 7E002934660023306D002C386A00323C61002432700022337E00333F70003640 - 6400384165003C4568003A467400404040004545450040444F00494949004D4D - 4D00474A560041475E004B4E5900515151005454540052555F00595959005D5D - 5D00454B610040496B005B5E670052586B0045517B00535C78005E616A005D62 - 740057607B005D657F00616161006565650062656D00696969006D6D6D007070 - 700074747400797979007F7F7F00060E8800091285000E1D8D00101E82000000 - 90000102940000009A0000019C0006139C0009199D001728860012228800152C - 980020348C002C3F8800203A9D00233C9E000003A1000005A500010AA300010C - A7000007A900010EAB000009AD000412A6000618A700000BB100000DB5000213 - B400071EB200041AB5000010B9000216B9000012BE00041CB9000B21AB001431 - AD001A37A9000B27B6000C27B600102CB2001737B5001132BC001234BF00223E - AB002E4189002D4395002E4AAF00354EA5003E56A8002645B9003251BC004D59 - 800047568800535F84005E6781005D688A004159AA00455DAB00405DBF004860 - AC00566AA7004E68B900536DBA000014C2000016C600021BC3000018CA00021D - C800001ACE00001CD200001ED7000926C1000624C8000E33CB00183BC200173D - CF000223D4000A2FD0000020DB000022DF00062CD8000027E7000029EB00032D - E800002BEF000332EF00103DE700002DF400002FF8000A39F3000D3CF3000031 - FC000134FE000436FF000739FF000A3CFF000D3FFF00103FF3001740DB002042 - C400284AC600254AD100254DDD003054D3001642E7001645F3001042FF001345 - FF001647FF00194AFF001C4DFF001F50FF002E58E9002354FF002C5CFF003D69 - F4003362FF003867FF003C6BFF004260C0004D6DCD00446AE0004C72E1004B73 - EB00436FF5004974F5004271FF008181810086868600898989008F8F8F009393 - 93009A9A9A00A2A2A200AAAAAA00000000000000000000000000000000000000 - 00735C080804040404596F000000000000000000000000000000000000000000 - 0000000000000000000000000077210A0A080A08080804040400040000187400 - 000000000000000000000000000000000000000000000000000000730A180A0A - 0A0A0A080808080404040404000400006F000000000000000000000000000000 - 0000000000000000007719181818180A180A0A0A0A0808080404000404000000 - 000074000000000000000000000000000000000000000000211919181818180A - 0A0F142E2D2D2D29241205040004040000000018000000000000000000000000 - 00000000000000191919191918181818180F3A8F8D8A89897D897D3F24060004 - 0000000000000000000000000000000000000000007720202019191919181818 - 0A1825928F8D8A89897D89897D8938060400000000006F000000000000000000 - 0000000077202019201920191919181818183092928F8A8A89897D7D897D897D - 2A0204000000006F000000000000000000000000212020202020191919191918 - 18183D9792928F8D8A8989897D897D89893F0601000000000000000000000000 - 0000002121212020201920201919191918182F999992928F8A8A897D897D897D - 7D897C0C01000000000000000000000000005C21212121202020201920191919 - 191818319990793A8B8D8A8A7D897D897D7D897C0C0400000018000000000000 - 00FA59215921212120202020192019191919181818180A183A8F8D8A8A7D897D - 897D7D897C060000000074000000000000595959212121212121202020201920 - 191919181818180A0F8B8F8D8A8A7D897D897D7D893F02040000000000000000 - 745959215959212121212020201920192019191918181818158F928F8D8A8A7D - 897D897D897D2A000400006F000000005C595959592159592121212020202019 - 1920191919181815949992928F8D8A8A7D897D897D897D0600000000000000FD - 5C595C595959212154A1C2A2522020202019191919191D98B8999992928F8D8A - 8A7D897D7D897D38040104007400006F5C5C5959595959A5D7D6D6D6D19C2020 - 2019201919191BBDB9B8999992928F8D8A8A7D897D897D890603000418000060 - 5C5C5C595C595ADAD8D7D6D6D1D152202020192019191998BDB999999992928F - 8D8A8A897D7D897D27040000000000605C5C5C5C595957E3D8D8D6D6D6D1A220 - 20202019201F1948B9B9B9B8999992928F8D8A3F2939897D3F0404040000FA60 - 60605C5C5C5957E3E3D9D8D6D6D6C2212020202019201919194695B8B8998092 - 928F8A100808897D89020404046F74606060605C5C5C66E6E3E3D9D8D7D69D21 - 21202020201920191A194ABD913218419292780A0A093E897D12040004596363 - 606060605C5C5CDEE5E3E3D9D8D237212121202020201920191982BD7A181818 - 3B260F0A0A09297C891202080404636363606060605C5C5DDEE5E3E3DA532159 - 212121202020201A20199BBE98191818170F0A0F0A0A09090D08080804036363 - 6363606060605C5C5C665757595959212121212120204E849EC5C7BEBE1B1818 - 1817170B0A0B09090909080804046363636363606060605C5C5C5B5959595959 - 592121212120C9CBCA9FC1C74619191818181717170A17090909090808046F63 - 63636363606060605C5C5C5B59595921592159212185D1CBA020192019191919 - 1818181717170917090A090808086F6F6363636363606060605C5C5B5C595959 - 595921212153D1D14E20201920191919191818181717170B0A0B09090808776F - 6F6F63636363606060605C5C5B5B5959592159592121A2D6C633202019201919 - 191B45433C170A170B0A0A0A0960FC6F6F636F63636363606060605C5C5C5B59 - 59595921592137D1D1CA332020192019199EBDBBB8991617170A0A0A096F006F - 6F6F636F63636363606060605C5C5B5C59565A59592154D6D6D14D2020201A20 - 46BFBEBDBDB9421717170A170900006F6F6F6F6F6363636363606060605C5C5E - DDE3E2A65954D2D6D6CB35202020201982C7BFBEBDBD81171717170917000077 - 6F736F6F6F63636DB2AE626060605CA8E6E6E6E3E1DAD8D68734212120202020 - 49CABFBEBEBD7B1818171717200000FF736F6F6F6F6F6DECEEEEB360606060AB - E8E6E6E6E3E3D8C4215921212120202020C0C7C7BEBD1B181817171777000000 - 6F736F6F6F6BF5EFEFEEEE68606060E0E8E8E8E6E5E3E3D95921582121212020 - 201E4C824C1F1B191818181700000000FC6F736F6FB5F7F7EFEFEEF06362ADE9 - EBE8E8E6E6E6E3E3DBA488372121212020202019191919191918187000000000 - 007373736F71F3F7F7EFEFEEEEEEEBEBEBE8E8E8E8E6E5E3E3D9D8C358212121 - 2020202020191F19191918000000000000FE736F736FAFF6F7F7EFEFEEEEEBEB - EBEBEBE8E8E6E6E6E3E3D9CF5821212121202020201F191F1919770000000000 - 00007473737070AFF6F7F7EFEFEEEEEEEBEBEBE8E8E8E8E6E5E3E3A559585921 - 2121202020201A1F1921000000000000000000737370736FB0F6F7F7EFEFEEEE - EBEBEBEBEBE8E8E6E6E6DA5958213437212121202020201A1F00000000000000 - 0000000073736F7370AFF4F7F7EFEFEEEEEEEBEBEBE8E8E8E8E6E6AA5AA5DAD7 - 8821212120202020000000000000000000000000FE737370726F72B7F7F7EFEF - EEEEEBEBEBEBEBE8E8E6E6E3E2E3D9D888212121212020770000000000000000 - 0000000000FE73737072716F6DF1F7EFEFEEEEEEEBEBEBE8E8E8E8E6E6E3DC56 - 595921212121770000000000000000000000000000000073736F736F706F6CB6 - F2EFEEEEEBEBEBEBEBE8E8DFA75E595921595921210000000000000000000000 - 0000000000000000747370736F6F6F6F6367AEB2B4B2B2A9A9695F5C5C5C5959 - 59592160000000000000000000000000000000000000000000FE736F73706F6F - 6F6F6363636260606060605C5C5B5C595959FA00000000000000000000000000 - 0000000000000000000000FC70736F706F6F6F63636363636060605C5C5C5B5C - 7400000000000000000000000000000000000000000000000000000000FF7470 - 6F6F6F6F6463636363606060606FFD0000000000000000000000000000000000 - 0000000000000000000000000000000000FC776F6F6F63636376FA0000000000 - 0000000000000000000000000000FFFFE007FFFF0000FFFE00007FFF0000FFF8 - 00001FFF0000FFE0000007FF0000FFC0000003FF0000FF80000001FF0000FE00 - 0000007F0000FC000000003F0000FC000000003F0000F8000000001F0000F000 - 0000000F0000E000000000070000E000000000070000C000000000030000C000 - 0000000300008000000000010000800000000001000080000000000100008000 - 0000000100000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000080000000000100008000 - 00000001000080000000000100008000000000010000C000000000030000C000 - 000000030000E000000000070000E000000000070000F0000000000F0000F800 - 0000001F0000FC000000003F0000FC000000003F0000FE000000007F0000FF80 - 000001FF0000FFC0000003FF0000FFE0000007FF0000FFF800001FFF0000FFFE - 00007FFF0000FFFFE007FFFF0000280000002000000040000000010008000000 - 0000000400000000000000000000000100000001000000000000060606000505 - 0F00090909000D0D0D0010101000161616001A1A1A001D1D1D00040421001616 - 20001D1E2800181A2F000707370005053E00101037001B1D32001F202B002121 - 2100252525002A2A2A002E2E2E0026283300282A350031313100353535003939 - 39003D3D3D000D0E4800171B4500151A4E00181D490010155D00151B5B00151B - 5C001D2141001C245D00262940002126480023294B0031374F00393C48003C3F - 4B002B335900333952000404650005066F0008096A000E14660001017500090F - 750004047800121F790015206E001E2C73001A287A00232F6C0029356800323B - 6100343E630024327000283776002E3D7B003E445B003A4675003D4977004040 - 400044444400494949004E4E4E0042455100484B570051515100555555005959 - 59005D5D5D00434C6D005B5E67006060600066666600696969006C6C6C006167 - 780070707000757575007E7E7E0001018700010188000C188300000090000000 - 9A0000029F000B1D970008199C00172A8A00182A89000F2091001D369B001F39 - 9E000005A5000009AB000411A4000618A6000A1FA700000CB100000FB8000213 - B400071EB1000216BA000012BE00132FAA000B24B1000C27B6001131BB00233F - AB00374A8D002A4094002D439500344A99002D46A3003851A7003C54A8002443 - B8002F4DBC00485A950055669C0060688200566AA7000015C4000018CA00001B - D000001ED7000520C1000E33CB001538C200183BC300153BCE000022DD00062F - DE000028E900032FEA00123EE700002BF000002EF6000332F0000A3AF2000F3E - F3000032FC000336FE00073AFF000C3EFF00224ADD00385FDF003C62DF001442 - F3001847F3001042FF001547FF001A4BFF001E4FFF00204AE8002853E9002354 - FF002758FF002C5CFF003A63EA003E67EA003C68F4003161FF003565FF003A69 - FF003F6EFF004A67C200496EE1004C72E1004570F5004974F5004372FF008A8A - 8A008E8E8E009090900000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000048130505040413480000000000000000000000000000000000000000004A - 0808080505050504040400004300000000000000000000000000000000511313 - 130808080805050504040400000048000000000000000000000000001B141413 - 1313082064645B5A572D0D040400000500000000000000000000001818141414 - 1313131D64645B5B5A5A5A560E000000000000000000000000001B1818181814 - 14131321696864635B5A5A5A5A330200000000000000000000431B1B18181814 - 141413236A6968645B5B5A5A5A5A59090000050000000000531B1B1B1B181818 - 1814141323211030645B5B5A5A5A5A59020000480000000043431B1B1B1B1818 - 181414141313130B68685B5B5A5A5A5A33040000000000534443431B1B181B18 - 1818181414131358696868635B5A5A5A5A0E0000430000444443431B3B879071 - 3A18181414143580696968645B5B5A5A5A570400000000444444444692959494 - 8A181818181424818080696868635B5A5A5A0D0404005548484444409C969594 - 94391A18181417608180696968645B1C335A2D0400434E48484844419C9C9695 - 942C1A1818181814168166216568320A0F5A560404084A4848484844979D9C96 - 871B1B1B1818181425823413111E10080A2F2E0504044A4A4A48484847767775 - 431B1B1A1B183C5E70836713131308080805050505044A4A4A4A484844444443 - 43421B1B1B288E8B5E70261413130B080808080505054E4E4A4A484848484444 - 4343431B1B3D8E6E1815151414131212080808080505514E4A4A4A4A48484844 - 444343421B1B858B3D18181414265C5D230B06080613B24E4E4E4A4A4A484848 - 4444463F431B62948B18181818848181691108080848004E4E4E4E4A4A484848 - 484CA09C7A759594621B181A1589838281231308080000514E4E4E4DA7AA7C48 - 48789F9E9C9C963E1B1B1A18187089836B131312080000B251514EAEABAAA649 - 4878A2A29E9C9C722A1B1B1B18183637171413134A000000514E51ADB1AAAA99 - 99A4A3A29F9E9D9C96881B1A1B1818181714141300000000B4514E52B0B1ABAA - A9A9A4A2A29F9E9C9C8D1B1B1B1B18181818144A00000000005351517EB0B1AA - AAA9A9A4A3A29F9E9D75422A291B1B1818181B00000000000000514E5152AEB1 - ABAAA9A9A4A2A29F9E9B7592913A1A1B181800000000000000000051514E4E7F - B0AAAAA9A9A4A3A29E9E9D9A741B1B1B1B00000000000000000000005351514E - 4E7DACA6A9A9A4A3A17B734343431B4300000000000000000000000000B45151 - 4E4E4E4A4A4A48484844444443435300000000000000000000000000000000B2 - 51514E4E4E4A4A4A484848445500000000000000000000000000000000000000 - 0000B2514E4A4A4A4E55000000000000000000000000FFF00FFFFF8001FFFE00 - 007FFC00003FF800001FF000000FE0000007C0000003C0000003800000018000 - 0001800000010000000000000000000000000000000000000000000000000000 - 000000000000800000018000000180000001C0000003C0000003E0000007F000 - 000FF800001FFC00003FFE00007FFF8001FFFFF00FFF28000000100000002000 - 0000010008000000000000010000000000000000000000010000000100000000 - 00000404040003030D00090909000E0E0E0007071A0012121200181818001D1D - 1D001B1C26000E0E350012133A00171A39001C1F3F0022222200272727002C2C - 2C0025263100292B370031313100363636003B3B3B003F3F3F0007074A001A1E - 490008095700262A4200373A47003C3F4B0021285600242E5E0030395F000202 - 63000B0F60000A0E6800121B680001017E00172266001E2862001F2C7300353E - 63002433710021327D003E445B003D4A77004141410044444400494949004F4F - 4F00414450005353530054545400595959005E5E5E00434A60004F5569005C5F - 680043507B005F65770062626200686868006669710073737300040482000710 - 8C000B178D000E1E8E0000009A0000019C00192B8A000006A7000A1CA2000415 - AC00071CAC00000CB3000013BF000822B800203DAA003B519C003C5ABE004058 - AA00475FAC004860AB005065A500556CB1000019CC00001FD8001335C000123B - DB00032CE5000F3BE7000433F0000133FC00083BFF001E43D000294AC7003F63 - D4001843E7001844E7001543F3001243FF001B4CFF002454FF002D5DFF003666 - FF005070CF004D73E200406EFF00858585009696960000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000003B070604043200000000000000003B0F0F0C21191705002D0000000000 - 2D13100F184A4643432002060000003B1513131011414046434324022D00002D - 2D151513100F184A4643432000006C2F31585C291310474B4A4643430532322F - 39645D5713131D49484A223F17043432305F5E2815151E4C250D090B0A043434 - 32322F2D2D1F59271A0F0F0707063B3B3432322F2B155B2A1326552307076D3B - 3852373965625A1F134556420F3B003C546B604F6665634D15151E120F00006C - 3D6A6B68676665611C1B1313320000003E3D696B68676665614D152D00000000 - 006C3C3A5352524E362D3B00000000000000006D3B3434326C0000000000F81F - 0000E0070000C003000080010000800100000000000000000000000000000000 - 000000000000000000008001000080010000C0030000E0070000F81F00002800 - 0000300000006000000001002000000000008025000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000001919192F1717176F1616169F141414BF121212FF1010 - 10FF0F0F0FFF0D0D0DFF0B0B0BFF0A0A0AFF080808BF0707079F0505056F0404 - 042F000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000002020 - 201F1E1E1E8F1C1C1CDF1A1A1AFF191919FF171717FF151515FF141414FF1212 - 12FF101010FF0F0F0FFF0D0D0DFF0B0B0BFF0A0A0AFF080808FF060606FF0505 - 05FF030303DF0202028F0101011F000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000002424242F232323AF2121 - 21FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF171717FF151515FF1414 - 14FF121212FF101010FF0F0F0FFF0D0D0DFF0B0B0BFF0A0A0AFF080808FF0606 - 06FF050505FF030303FF010101FF0000009F0000001F00000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000002A2A2A0F2828288F262626FF242424FF2323 - 23FF212121FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF171717FF1515 - 15FF141414FF121212FF101010FF0F0F0FFF0D0D0DFF0B0B0BFF0A0A0AFF0808 - 08FF060606FF050505FF030303FF010101FF000000FF0000008F0000000F0000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000002D2D2D3F2B2B2BEF292929FF282828FF262626FF2424 - 24FF232323FF212121FF1F1F1FFF1E1E1EFF1A1B25FF13163FFF0D1158FF0B0E - 5EFF0A0C5BFF090A58FF090956FF09094CFF0B0B31FF0C0C16FF0B0B0BFF0A0A - 0AFF080808FF060606FF050505FF030303FF010101FF000000FF000000DF0000 - 003F000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000003030306F2E2E2EFF2D2D2DFF2B2B2BFF292929FF282828FF2626 - 26FF242424FF232323FF212121FF1F1F1FFF1C1D27FF0E1466FF0009ADFF0007 - A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF00009AFF02027FFF0606 - 49FF08081BFF080808FF060606FF050505FF030303FF010101FF000000FF0000 - 00FF0000005F0000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00003333339F323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF2828 - 28FF262626FF242424FF232323FF212121FF1F1F1FFF161A43FF000BB1FF0009 - ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF00009AFF0000 - 9AFF00009AFF030363FF07071AFF060606FF050505FF030303FF010101FF0000 - 00FF000000FF0000009F00000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000003737 - 379F353535FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF2929 - 29FF282828FF262626FF242424FF232323FF212121FF141959FF000DB5FF000B - B1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF0000 - 9AFF00009AFF00009AFF00009AFF03035AFF06060FFF050505FF030303FF0101 - 01FF000000FF000000FF0000009F000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000003A3A3A6F3838 - 38FF373737FF353535FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B - 2BFF292929FF282828FF262626FF242424FF232323FF10196FFF0010B9FF000D - B5FF000BB1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF0000 - 9AFF00009AFF00009AFF00009AFF00009AFF01017EFF050522FF050505FF0303 - 03FF010101FF000000FF000000FF0000005F0000000000000000000000000000 - 000000000000000000000000000000000000000000003D3D3D3F3B3B3BFF3A3A - 3AFF383838FF373737FF353535FF333333FF323232FF303030FF2E2E2EFF2D2D - 2DFF2B2B2BFF292929FF282828FF262626FF242424FF181E54FF0012BEFF0010 - B9FF000DB5FF000BB1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF0000 - 9AFF00009AFF00009AFF00009AFF00009AFF00009AFF000090FF050522FF0505 - 05FF030303FF010101FF000000FF000000FF0000003F00000000000000000000 - 0000000000000000000000000000000000004141410F3F3F3FEF3D3D3DFF3B3B - 3BFF3A3A3AFF383838FF373737FF353535FF333333FF323232FF303030FF2E2E - 2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF242424FF161D5EFF0012 - BEFF0412A6FF091285FF0E1466FF010AA3FF0007A9FF0005A5FF0003A1FF0001 - 9CFF00009AFF00009AFF00009AFF00009AFF00009AFF00009AFF000090FF0505 - 22FF050505FF030303FF010101FF000000FF000000DF0000000F000000000000 - 0000000000000000000000000000000000004242429F404040FF3F3F3FFF3D3D - 3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF333333FF323232FF3030 - 30FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF242424FF2323 - 23FF212121FF1F1F1FFF1E1E1EFF0E1466FF0009ADFF0007A9FF0005A5FF0003 - A1FF00019CFF00009AFF00009AFF00009AFF00009AFF00009AFF00009AFF0000 - 90FF050522FF050505FF030303FF010101FF000000FF0000008F000000000000 - 00000000000000000000000000004545452F444444FF424242FF404040FF3F3F - 3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF333333FF3232 - 32FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF2424 - 24FF232323FF212121FF1F1F1FFF1C1D27FF010CA7FF0009ADFF0007A9FF0005 - A5FF0003A1FF00019CFF00009AFF00009AFF00009AFF00009AFF00009AFF0000 - 9AFF01017EFF06060FFF050505FF030303FF010101FF000000FF0000001F0000 - 0000000000000000000000000000474747BF454545FF444444FF424242FF4040 - 40FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF3333 - 33FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF282828FF2626 - 26FF242424FF232323FF212121FF191C3CFF010EABFF000BB1FF0009ADFF0007 - A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF00009AFF00009AFF0000 - 9AFF00009AFF03035AFF060606FF050505FF030303FF010101FF0000009F0000 - 000000000000000000004A4A4A1F494949FF474747FF454545FF444444FF4242 - 42FF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF3535 - 35FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF2828 - 28FF262626FF242424FF1C2040FF0213B4FF0010B9FF000DB5FF000BB1FF0009 - ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF00009AFF0000 - 9AFF00009AFF00009AFF07071AFF060606FF050505FF030303FF010101FF0101 - 011F00000000000000004C4C4C8F4A4A4AFF494949FF474747FF454545FF4444 - 44FF424242FF404040FF3F3F3FFF323C61FF1737B5FF0E33CBFF1132BCFF2233 - 7EFF353535FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF2929 - 29FF282828FF21243AFF0217BBFF0014C2FF0012BEFF0010B9FF000DB5FF000B - B1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF00009AFF0000 - 9AFF00009AFF00009AFF030363FF080808FF060606FF050505FF030303FF0202 - 028F00000000000000004E4E4EDF4C4C4CFF4A4A4AFF494949FF474747FF4545 - 45FF444444FF424242FF2C3F88FF0739FFFF0436FFFF0134FEFF0031FCFF002F - F8FF1431ADFF353535FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B - 2BFF292929FF252732FF0018CAFF0016C6FF0014C2FF0012BEFF0010B9FF000D - B5FF000BB1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF00009AFF0000 - 9AFF00009AFF00009AFF00009AFF08081BFF080808FF060606FF050505FF0303 - 03DF000000005151512F4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF494949FF4747 - 47FF454545FF40444FFF103FF3FF0A3CFFFF0739FFFF0436FFFF0134FEFF0031 - FCFF002FF8FF22337EFF353535FF333333FF323232FF303030FF2E2E2EFF2D2D - 2DFF2B2B2BFF292929FF051CB9FF0018CAFF0016C6FF0014C2FF0012BEFF0010 - B9FF000DB5FF000BB1FF0009ADFF0007A9FF0005A5FF0003A1FF00019CFF0000 - 9AFF00009AFF00009AFF00009AFF050552FF0A0A0AFF080808FF060606FF0505 - 05FF0404042F5252526F515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF4949 - 49FF474747FF394574FF1042FFFF0D3FFFFF0A3CFFFF0739FFFF0436FFFF0134 - FEFF0031FCFF1132BCFF373737FF353535FF333333FF323232FF303030FF2E2E - 2EFF2D2D2DFF2B2B2BFF172373FF021BC3FF0018CAFF0016C6FF0014C2FF0012 - BEFF0010B9FF000DB5FF000BB1FF0009ADFF0007A9FF0005A5FF05077EFF0A0A - 58FF05056FFF00009AFF00009AFF02027FFF0B0B0BFF0A0A0AFF080808FF0606 - 06FF0505056F545454AF535353FF515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A - 4AFF494949FF3B4775FF1345FFFF1042FFFF0D3FFFFF0A3CFFFF0739FFFF0436 - FFFF0134FEFF0E33CBFF383838FF373737FF353535FF333333FF323232FF3030 - 30FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF192366FF041AB5FF0016C6FF0014 - C2FF0012BEFF06139CFF000DB5FF000BB1FF0009ADFF0007A9FF141529FF1515 - 15FF141414FF00009AFF00009AFF00009AFF0C0C16FF0B0B0BFF0A0A0AFF0808 - 08FF0707079F565656CF545454FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C - 4CFF4A4A4AFF40496BFF1647FFFF1345FFFF1042FFFF0D3FFFFF0A3CFFFF0739 - FFFF0436FFFF1A37A9FF3A3A3AFF383838FF373737FF353535FF333333FF3232 - 32FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF14217AFF0018CAFF0618 - A7FF1C2040FF212121FF0C157FFF000DB5FF000BB1FF060E88FF191919FF1717 - 17FF151515FF05057AFF00009AFF00009AFF0B0B31FF0D0D0DFF0B0B0BFF0A0A - 0AFF080808BF585858FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E - 4EFF4C4C4CFF4A4A4AFF254AD1FF1647FFFF1345FFFF1042FFFF0D3FFFFF0A3C - FFFF0A39F3FF363C55FF3B3B3BFF3A3A3AFF383838FF373737FF353535FF3333 - 33FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF122288FF001ACEFF0E1D - 8DFF242424FF232323FF212121FF121862FF14194DFF181A2EFF1A1A1AFF1919 - 19FF171717FF0C0D52FF010294FF00009AFF0B0B3BFF0F0F0FFF0D0D0DFF0B0B - 0BFF0A0A0AFF595959FF585858FF565656FF545454FF535353FF515151FF4F4F - 4FFF4E4E4EFF4C4C4CFF474A56FF254AD1FF1647FFFF1345FFFF1042FFFF103F - F3FF333F70FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF3535 - 35FF333333FF323232FF303030FF2E2E2EFF2D2D2DFF0B21ABFF001CD2FF041C - B9FF262626FF242424FF232323FF212121FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A - 1AFF191919FF171717FF151515FF111125FF121212FF101010FF0F0F0FFF0D0D - 0DFF0B0B0BFF5B5B5BFF595959FF585858FF565656FF545454FF535353FF5151 - 51FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF40496BFF3B4775FF394574FF4444 - 44FF424242FF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF3737 - 37FF353535FF23306DFF152C98FF0B27B6FF0223D4FF0020DBFF001ED7FF001C - D2FF252732FF262626FF242424FF232323FF212121FF1F1F1FFF1E1E1EFF1C1C - 1CFF1A1A1AFF191919FF171717FF151515FF141414FF121212FF101010FF0F0F - 0FFF0D0D0DFF5D5D5DFF5B5B5BFF595959FF585858FF565656FF545454FF5353 - 53FF515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF494949FF474747FF4545 - 45FF444444FF424242FF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF3838 - 38FF373737FF062CD8FF0029EBFF0027E7FF0C27B6FF0624C8FF0020DBFF1B26 - 6BFF292929FF282828FF262626FF242424FF232323FF212121FF1F1F1FFF1E1E - 1EFF1C1C1CFF1A1A1AFF191919FF171717FF151515FF141414FF121212FF1010 - 10FF0F0F0FFF5E5E5EFF5D5D5DFF5B5B5BFF595959FF585858FF565656FF5454 - 54FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF494949FF4747 - 47FF454545FF444444FF424242FF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A - 3AFF20348CFF002DF4FF002BEFFF102CB2FF323232FF303030FF2E2E2EFF2D2D - 2DFF2B2B2BFF292929FF282828FF262626FF242424FF232323FF212121FF1F1F - 1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF171717FF151515FF141414FF1212 - 12FF101010FF606060FF5E5E5EFF5D5D5DFF5B5B5BFF595959FF585858FF5656 - 56FF545454FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A4AFF4949 - 49FF474747FF454545FF444444FF424242FF404040FF3F3F3FFF3D3D3DFF3B3B - 3BFF2C386AFF002FF8FF002DF4FF243270FF333333FF323232FF303030FF2E2E - 2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF242424FF232323FF2121 - 21FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF171717FF151515FF1414 - 14FF121212FF626262CF606060FF5E5E5EFF5D5D5DFF5B5B5BFF595959FF5858 - 58FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C4CFF4A4A - 4AFF494949FF474747FF454545FF444444FF424242FF404040FF3F3F3FFF3D3D - 3DFF3B3B3BFF1234BFFF002FF8FF0A2FD0FF2E344DFF333333FF323232FF3030 - 30FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF252732FF15206EFF121D75FF131C - 69FF1F202BFF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF171717FF1515 - 15FF141414BF636363AF626262FF606060FF5E5E5EFF5D5D5DFF5B5B5BFF5959 - 59FF585858FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C - 4CFF4A4A4AFF494949FF474747FF454545FF444444FF424242FF404040FF3F3F - 3FFF3D3D3DFF343A54FF0031FCFF002FF8FF032DE8FF2E344DFF333333FF3232 - 32FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF071EB2FF001ACEFF0018CAFF0016 - C6FF0215B8FF1F202BFF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF191919FF1717 - 17FF161616AF6565656F636363FF626262FF606060FF5E5E5EFF5D5D5DFF5B5B - 5BFF595959FF585858FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E - 4EFF4C4C4CFF4A4A4AFF494949FF474747FF3C4568FF41444FFF424242FF4040 - 40FF3F3F3FFF323C61FF0134FEFF0031FCFF002FF8FF293466FF353535FF3333 - 33FF323232FF303030FF2E2E2EFF1C286EFF001ED7FF001CD2FF001ACEFF0018 - CAFF0016C6FF0F1A7CFF212121FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A1AFF1919 - 19FF1717176F6666662F656565FF636363FF626262FF606060FF5E5E5EFF5D5D - 5DFF5B5B5BFF595959FF585858FF565656FF545454FF535353FF515151FF4F4F - 4FFF4E4E4EFF4C4C4CFF454B61FF284AC6FF1647FFFF1645F3FF2D4395FF4242 - 42FF364064FF0A39F3FF0436FFFF0134FEFF0332EFFF2E375CFF373737FF3535 - 35FF333333FF323232FF303030FF172886FF0020DBFF001ED7FF001CD2FF001A - CEFF0018CAFF09199DFF232323FF212121FF1F1F1FFF1E1E1EFF1C1C1CFF1A1A - 1AFF1919192F00000000676767DF656565FF636363FF626262FF606060FF5E5E - 5EFF5D5D5DFF5B5B5BFF535C78FF465EABFF4D5980FF52555FFF535353FF5151 - 51FF4F4F4FFF4E4E4EFF354EA5FF1C4DFFFF194AFFFF1647FFFF1345FFFF1642 - E7FF103FF3FF0A3CFFFF0739FFFF203A9EFF383B48FF3A3A3AFF383838FF3737 - 37FF353535FF333333FF323232FF1E2B73FF0022DFFF0020DBFF001ED7FF001C - D2FF001ACEFF101E82FF242424FF232323FF212121FF1F1F1FFF1E1E1EFF1C1C - 1CDF00000000000000006868688F676767FF656565FF636363FF626262FF6060 - 60FF5E5E5EFF57607BFF3D69F4FF3867FFFF3564FFFF405DBFFF545454FF5353 - 53FF515151FF4F4F4FFF3251BCFF1F50FFFF1C4DFFFF194AFFFF1647FFFF1345 - FFFF1042FFFF0D3FFFFF173DCFFF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF3838 - 38FF373737FF353535FF333333FF323232FF0926C1FF0022DFFF0020DBFF001E - D7FF021DC8FF252732FF262626FF242424FF232323FF212121FF1F1F1FFF1E1E - 1E8F00000000000000006969691F686868FF676767FF656565FF636363FF6262 - 62FF5E616AFF436FF5FF3E6DFFFF3B6AFFFF3867FFFF3564FFFF52586BFF5454 - 54FF535353FF515151FF3054D3FF2253FFFF1F50FFFF1C4DFFFF194AFFFF1647 - FFFF1345FFFF1042FFFF0D3FFFFF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A - 3AFF383838FF373737FF353535FF333333FF2F313DFF1B2B7EFF172886FF1927 - 79FF282A36FF292929FF282828FF262626FF242424FF232323FF212121FF2020 - 201F0000000000000000000000006A6A6ABF686868FF676767FF656565FF6363 - 63FF566AA7FF4473FFFF4170FFFF3E6DFFFF3B6AFFFF3867FFFF4260C0FF5656 - 56FF52555FFF475688FF2E58E9FF2556FFFF2253FFFF1F50FFFF1C4DFFFF194A - FFFF1647FFFF1345FFFF1042FFFF1740DBFF223EABFF233C9EFF363C55FF3B3B - 3BFF3A3A3AFF383838FF373737FF353535FF333333FF323232FF303030FF2E2E - 2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF242424FF232323AF0000 - 00000000000000000000000000006B6B6B3F6A6A6AFF686868FF676767FF6565 - 65FF62656DFF4C72E1FF4473FFFF4170FFFF3E6DFFFF3B6AFFFF3867FFFF3564 - FFFF3261FFFF2F5FFFFF2C5CFFFF2959FFFF2556FFFF2253FFFF1F50FFFF1C4D - FFFF194AFFFF1647FFFF1345FFFF1042FFFF0D3FFFFF0A3CFFFF183BC2FF3D3D - 3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF333333FF323232FF3030 - 30FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF282828FF262626FF2424242F0000 - 0000000000000000000000000000000000006B6B6B9F6A6A6AFF686868FF6767 - 67FF656565FF5E6781FF4974F5FF4473FFFF4170FFFF3E6DFFFF3B6AFFFF3867 - FFFF3564FFFF3261FFFF2F5FFFFF2C5CFFFF2959FFFF2556FFFF2253FFFF1F50 - FFFF1C4DFFFF194AFFFF1647FFFF1345FFFF1042FFFF0D3FFFFF103DE7FF3F3F - 3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF333333FF3232 - 32FF303030FF2E2E2EFF2D2D2DFF2B2B2BFF292929FF2828289F000000000000 - 0000000000000000000000000000000000006B6B6B0F6B6B6BEF6A6A6AFF6868 - 68FF676767FF656565FF5E6781FF4776FFFF4473FFFF4170FFFF3E6DFFFF3B6A - FFFF3867FFFF3564FFFF3261FFFF2F5FFFFF2C5CFFFF2959FFFF2556FFFF2253 - FFFF1F50FFFF1C4DFFFF194AFFFF1647FFFF1345FFFF1042FFFF2E4189FF4040 - 40FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A3AFF383838FF373737FF353535FF3333 - 33FF323232FF303030FF2E2E2EFF2D2D2DFF2B2B2BEF2A2A2A0F000000000000 - 000000000000000000000000000000000000000000006B6B6B3F6B6B6BFF6A6A - 6AFF686868FF676767FF656565FF5D688AFF4974F5FF4473FFFF4170FFFF3E6D - FFFF3B6AFFFF3867FFFF3564FFFF3261FFFF2F5FFFFF2C5CFFFF2959FFFF2556 - FFFF2253FFFF1F50FFFF1C4DFFFF194AFFFF1647FFFF1645F3FF444444FF4242 - 42FF404040FF3B3E4BFF363C55FF3B3B3BFF3A3A3AFF383838FF373737FF3535 - 35FF333333FF323232FF303030FF2E2E2EFF2D2D2D3F00000000000000000000 - 00000000000000000000000000000000000000000000000000006B6B6B7F6B6B - 6BFF6A6A6AFF686868FF676767FF656565FF5E6781FF4B73EBFF4473FFFF4170 - FFFF3E6DFFFF3B6AFFFF3867FFFF3564FFFF3261FFFF2F5FFFFF2C5CFFFF2959 - FFFF2556FFFF2253FFFF1F50FFFF1C4DFFFF194AFFFF1647FFFF2645B9FF4144 - 4FFF2E4189FF0D3CF3FF0739FFFF213A9DFF3B3B3BFF3A3A3AFF383838FF3737 - 37FF353535FF333333FF323232FF3030306F0000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000006B6B - 6B9F6B6B6BFF6A6A6AFF686868FF676767FF656565FF62656DFF536DBAFF4473 - FFFF4170FFFF3E6DFFFF3B6AFFFF3867FFFF3564FFFF3261FFFF2F5FFFFF2C5C - FFFF2959FFFF2556FFFF2253FFFF1F50FFFF1C4DFFFF194AFFFF1647FFFF1645 - F3FF1042FFFF0D3FFFFF0A3CFFFF233C9FFF3D3D3DFF3B3B3BFF3A3A3AFF3838 - 38FF373737FF353535FF3333339F000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00006B6B6B9F6B6B6BFF6A6A6AFF686868FF676767FF656565FF636363FF5D65 - 7FFF4D6DCDFF4170FFFF3E6DFFFF3B6AFFFF3867FFFF3564FFFF3261FFFF2F5F - FFFF2C5CFFFF2959FFFF2556FFFF2253FFFF1F50FFFF1C4DFFFF194AFFFF1647 - FFFF1345FFFF2042C4FF384165FF404040FF3F3F3FFF3D3D3DFF3B3B3BFF3A3A - 3AFF383838FF3737379F00000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000006B6B6B7F6B6B6BFF6A6A6AFF686868FF676767FF656565FF6363 - 63FF626262FF5D6274FF4E68B9FF446AE0FF3B6AFFFF3867FFFF3564FFFF3261 - FFFF2F5FFFFF2C5CFFFF2959FFFF2556FFFF2253FFFF1F50FFFF254DDDFF2E4A - AFFF41475EFF454545FF444444FF424242FF404040FF3F3F3FFF3D3D3DFF3B3B - 3BFF3A3A3A6F0000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000006B6B6B4F6B6B6BEF6A6A6AFF686868FF676767FF6565 - 65FF636363FF626262FF606060FF5E5E5EFF5B5E67FF535F84FF4860ACFF465E - ABFF445CABFF4159AAFF3F57A9FF3D55A8FF45517BFF4B4E59FF4C4C4CFF4A4A - 4AFF494949FF474747FF454545FF444444FF424242FF404040FF3F3F3FEF3D3D - 3D3F000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000006B6B6B0F6B6B6B9F6A6A6AFF686868FF6767 - 67FF656565FF636363FF626262FF606060FF5E5E5EFF5D5D5DFF5B5B5BFF5959 - 59FF585858FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E4EFF4C4C - 4CFF4A4A4AFF494949FF474747FF454545FF444444FF4242429F4141410F0000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000006B6B6B3F6A6A6ABF6868 - 68FF676767FF656565FF636363FF626262FF606060FF5E5E5EFF5D5D5DFF5B5B - 5BFF595959FF585858FF565656FF545454FF535353FF515151FF4F4F4FFF4E4E - 4EFF4C4C4CFF4A4A4AFF494949FF474747BF4545453F00000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000006969 - 691F6868688F676767EF656565FF636363FF626262FF606060FF5E5E5EFF5D5D - 5DFF5B5B5BFF595959FF585858FF565656FF545454FF535353FF515151FF4F4F - 4FFF4E4E4EDF4C4C4C8F4A4A4A1F000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000006666662F6565657F636363AF626262CF606060FF5E5E - 5EFF5D5D5DFF5B5B5BFF595959FF585858FF565656CF545454AF5252527F5151 - 512F000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000FFFF8001FFFF0000FFFC00003FFF0000FFF000000FFF0000FFC0 - 000003FF0000FF80000001FF0000FF00000000FF0000FE000000007F0000FC00 - 0000003F0000F8000000001F0000F0000000000F0000E000000000070000E000 - 000000070000C000000000030000C00000000003000080000000000100008000 - 0000000100008000000000010000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000008000 - 00000001000080000000000100008000000000010000C000000000030000C000 - 000000030000E000000000070000E000000000070000F0000000000F0000F800 - 0000001F0000FC000000003F0000FE000000007F0000FF00000000FF0000FF80 - 000001FF0000FFC0000003FF0000FFF000000FFF0000FFFC00003FFF0000FFFF - 8001FFFF00002800000020000000400000000100200000000000801000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000001C1C1C1F1A1A1A6F1717 - 17BF151515EF121212FF101010FF0D0D0DFF0B0B0BFF080808DF060606AF0404 - 046F0303031F0000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000002424243F212121BF1F1F1FFF1C1C1CFF1A1A - 1AFF171717FF151515FF121212FF101010FF0D0D0DFF0B0B0BFF080808FF0606 - 06FF030303FF010101BF0000003F000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000002B2B2B0F292929AF262626FF242424FF212121FF1F1F1FFF1C1C - 1CFF1A1A1AFF171717FF151515FF121212FF101010FF0D0D0DFF0B0B0BFF0808 - 08FF060606FF030303FF010101FF000000AF0000000F00000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00003030303F2E2E2EEF2B2B2BFF292929FF262626FF242424FF212121FF1F1F - 1FFF10155DFF0009ABFF0005A5FF00029FFF00009AFF010188FF040465FF0707 - 37FF080808FF060606FF030303FF010101FF000000EF0000002F000000000000 - 0000000000000000000000000000000000000000000000000000000000003535 - 355F333333FF303030FF2E2E2EFF2B2B2BFF292929FF262626FF242424FF2121 - 21FF171B45FF000CB1FF0009ABFF0005A5FF00029FFF00009AFF00009AFF0000 - 9AFF010187FF05053EFF060606FF030303FF010101FF000000FF0000005F0000 - 00000000000000000000000000000000000000000000000000003A3A3A3F3838 - 38FF353535FF333333FF303030FF2E2E2EFF2B2B2BFF292929FF262626FF2424 - 24FF151B5CFF000FB8FF000CB1FF0009ABFF0005A5FF00029FFF00009AFF0000 - 9AFF00009AFF00009AFF010175FF05050FFF030303FF010101FF000000FF0000 - 002F00000000000000000000000000000000000000003F3F3F1F3C3C3CEF3A3A - 3AFF383838FF353535FF333333FF303030FF2E2E2EFF2B2B2BFF292929FF2626 - 26FF1D2141FF0213B4FF000FB8FF000CB1FF0009ABFF0005A5FF00029FFF0000 - 9AFF00009AFF00009AFF00009AFF000090FF040421FF030303FF010101FF0000 - 00EF0000000F00000000000000000000000000000000414141BF3F3F3FFF3C3C - 3CFF3A3A3AFF383838FF353535FF333333FF303030FF2E2E2EFF2B2B2BFF2929 - 29FF262626FF1D2141FF151B5CFF1B1D32FF0E1466FF0009ABFF0005A5FF0002 - 9FFF00009AFF00009AFF00009AFF00009AFF000090FF05050FFF030303FF0101 - 01FF000000AF0000000000000000000000004646463F444444FF414141FF3F3F - 3FFF3C3C3CFF3A3A3AFF383838FF353535FF333333FF303030FF2E2E2EFF2B2B - 2BFF292929FF262626FF242424FF212121FF1D1E28FF000CB1FF0009ABFF0005 - A5FF00029FFF00009AFF00009AFF00009AFF00009AFF010175FF060606FF0303 - 03FF010101FF0000003F0000000000000000494949BF464646FF444444FF4141 - 41FF3F3F3FFF3C3C3CFF3A3A3AFF383838FF353535FF333333FF303030FF2E2E - 2EFF2B2B2BFF292929FF262626FF242424FF0C1883FF000FB8FF000CB1FF0009 - ABFF0005A5FF00029FFF00009AFF00009AFF00009AFF00009AFF05053EFF0606 - 06FF030303FF010101BF000000004E4E4E1F4B4B4BFF494949FF464646FF4444 - 44FF414141FF343E63FF1538C2FF0332F0FF1131BBFF2B3359FF333333FF3030 - 30FF2E2E2EFF2B2B2BFF292929FF15206EFF0015C4FF0012BEFF000FB8FF000C - B1FF0009ABFF0005A5FF00029FFF00009AFF00009AFF00009AFF010187FF0808 - 08FF060606FF030303FF0303031F5050506F4E4E4EFF4B4B4BFF494949FF4646 - 46FF414450FF0F3EF3FF073AFFFF0336FEFF0032FCFF062FDEFF353535FF3333 - 33FF303030FF2E2E2EFF2B2B2BFF1C245DFF0018CAFF0015C4FF0012BEFF000F - B8FF000CB1FF0009ABFF0005A5FF00029FFF00009AFF00009AFF00009AFF0707 - 37FF080808FF060606FF0404046F535353BF515151FF4E4E4EFF4B4B4BFF4949 - 49FF3A4675FF1042FFFF0C3EFFFF073AFFFF0336FEFF0032FCFF293568FF3535 - 35FF333333FF303030FF2E2E2EFF282A35FF0F2091FF0018CAFF0015C4FF0012 - BEFF000FB8FF000CB1FF0009ABFF0005A5FF0D0E48FF040478FF00009AFF0404 - 65FF0B0B0BFF080808FF060606BF565656EF535353FF515151FF4E4E4EFF4B4B - 4BFF3D4977FF1547FFFF1042FFFF0C3EFFFF073AFFFF0336FEFF333952FF3838 - 38FF353535FF333333FF303030FF2E2E2EFF2B2B2BFF262833FF0018CAFF0618 - A6FF151B5BFF0411A4FF000CB1FF090F75FF171717FF101037FF00009AFF0101 - 88FF0D0D0DFF0B0B0BFF080808EF585858FF565656FF535353FF515151FF4E4E - 4EFF4B4B4BFF224ADDFF1547FFFF1042FFFF0C3EFFFF183BC3FF3C3C3CFF3A3A - 3AFF383838FF353535FF333333FF303030FF2E2E2EFF262940FF001BD0FF121F - 79FF242424FF1F202BFF151A4EFF181A2FFF1A1A1AFF161620FF08096AFF0506 - 6FFF101010FF0D0D0DFF0B0B0BFF5B5B5BFF585858FF565656FF535353FF5151 - 51FF4E4E4EFF484B57FF344A99FF2D46A3FF2D4396FF414141FF3F3F3FFF3C3C - 3CFF3A3A3AFF383838FF353535FF232F6CFF172A8AFF0B25B1FF001ED7FF0A1F - A7FF262626FF242424FF212121FF1F1F1FFF1C1C1CFF1A1A1AFF171717FF1515 - 15FF121212FF101010FF0D0D0DFF5D5D5DFF5B5B5BFF585858FF565656FF5353 - 53FF515151FF4E4E4EFF4B4B4BFF494949FF464646FF444444FF414141FF3F3F - 3FFF3C3C3CFF3A3A3AFF31374FFF002BF0FF0028E9FF182A89FF0B24B1FF2329 - 4BFF292929FF262626FF242424FF212121FF1F1F1FFF1C1C1CFF1A1A1AFF1717 - 17FF151515FF121212FF101010FF606060FF5D5D5DFF5B5B5BFF585858FF5656 - 56FF535353FF515151FF4E4E4EFF4B4B4BFF494949FF464646FF444444FF4141 - 41FF3F3F3FFF3C3C3CFF283776FF002EF6FF132FAAFF333333FF303030FF2E2E - 2EFF2B2B2BFF292929FF262626FF242424FF212121FF1F1F1FFF1C1C1CFF1A1A - 1AFF171717FF151515FF121212FF626262EF606060FF5D5D5DFF5B5B5BFF5858 - 58FF565656FF535353FF515151FF4E4E4EFF4B4B4BFF494949FF464646FF4444 - 44FF414141FF3F3F3FFF3C3C3CFF0E33CBFF032FEAFF243270FF333333FF3030 - 30FF2E2E2EFF2B2B2BFF212648FF0B1D97FF08199CFF181D49FF1F1F1FFF1C1C - 1CFF1A1A1AFF171717FF151515EF646464BF626262FF606060FF5D5D5DFF5B5B - 5BFF585858FF565656FF535353FF515151FF4E4E4EFF4B4B4BFF494949FF4346 - 52FF3E445BFF414141FF3F3F3FFF1F399EFF0032FCFF032FEAFF353535FF3333 - 33FF303030FF2E2E2EFF0520C1FF001BD0FF0018CAFF0216BAFF1F202BFF1F1F - 1FFF1C1C1CFF1A1A1AFF171717BF6666666F656565FF626262FF606060FF5D5D - 5DFF5B5B5BFF585858FF565656FF535353FF515151FF4E4E4EFF434C6DFF204A - E8FF1547FFFF2443B8FF2A4094FF073AFFFF0336FEFF1D369BFF383838FF3535 - 35FF333333FF303030FF0022DDFF001ED7FF001BD0FF0018CAFF1D2142FF2121 - 21FF1F1F1FFF1C1C1CFF1A1A1A6F6868681F676767FF656565FF626262FF6060 - 60FF5B5E67FF3C68F4FF3565FFFF485A95FF535353FF515151FF3851A7FF1E4F - FFFF1A4BFFFF1547FFFF1042FFFF0C3EFFFF2E3D7BFF3C3C3CFF3A3A3AFF3838 - 38FF353535FF333333FF0C27B6FF0022DDFF001ED7FF071EB1FF262626FF2424 - 24FF212121FF1F1F1FFF1C1C1C1F00000000696969BF676767FF656565FF6262 - 62FF496EE1FF3F6EFFFF3A69FFFF3A63EAFF565656FF535353FF3C54A8FF2354 - FFFF1E4FFFFF1A4BFFFF1547FFFF1042FFFF233FABFF3C3F4BFF3C3C3CFF3A3A - 3AFF383838FF353535FF333333FF1E2C73FF1A287AFF282A36FF292929FF2626 - 26FF242424FF212121BF00000000000000006B6B6B3F696969FF676767FF6565 - 65FF4C72E1FF4372FFFF3F6EFFFF3A69FFFF3C62DFFF385FDFFF2C5CFFFF2758 - FFFF2354FFFF1E4FFFFF1A4BFFFF1547FFFF1042FFFF0C3EFFFF153BCEFF3C3C - 3CFF3A3A3AFF383838FF353535FF333333FF303030FF2E2E2EFF2B2B2BFF2929 - 29FF262626FF2424243F0000000000000000000000006B6B6BBF696969FF6767 - 67FF616778FF4974F5FF4372FFFF3F6EFFFF3A69FFFF3565FFFF3161FFFF2C5C - FFFF2758FFFF2354FFFF1E4FFFFF1A4BFFFF1547FFFF1042FFFF123EE7FF3F3F - 3FFF3C3C3CFF3A3A3AFF383838FF353535FF333333FF303030FF2E2E2EFF2B2B - 2BFF292929BF000000000000000000000000000000006B6B6B1F6B6B6BEF6969 - 69FF676767FF606882FF4974F5FF4372FFFF3F6EFFFF3A69FFFF3565FFFF3161 - FFFF2C5CFFFF2758FFFF2354FFFF1E4FFFFF1A4BFFFF1547FFFF2E4395FF4141 - 41FF3C3F4BFF393C48FF3A3A3AFF383838FF353535FF333333FF303030FF2E2E - 2EEF2B2B2B1F00000000000000000000000000000000000000006B6B6B3F6B6B - 6BFF696969FF676767FF616778FF4C72E1FF4372FFFF3F6EFFFF3A69FFFF3565 - FFFF3161FFFF2C5CFFFF2758FFFF2354FFFF1E4FFFFF1A4BFFFF1847F3FF2E43 - 95FF0F3EF3FF0A3AF2FF323B61FF3A3A3AFF383838FF353535FF333333FF3030 - 303F000000000000000000000000000000000000000000000000000000006B6B - 6B5F6B6B6BFF696969FF676767FF656565FF566AA7FF4570F5FF3F6EFFFF3A69 - FFFF3565FFFF3161FFFF2C5CFFFF2758FFFF2354FFFF1E4FFFFF1A4BFFFF1547 - FFFF1442F3FF2A4094FF3F3F3FFF3C3C3CFF3A3A3AFF383838FF3535355F0000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00006B6B6B3F6B6B6BEF696969FF676767FF656565FF626262FF55669CFF4A67 - C2FF3E67EAFF3565FFFF3161FFFF2C5CFFFF2758FFFF2853E9FF2F4DBCFF374A - 8DFF464646FF444444FF414141FF3F3F3FFF3C3C3CEF3A3A3A3F000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000006B6B6B1F6B6B6BBF696969FF676767FF656565FF626262FF6060 - 60FF5D5D5DFF5B5B5BFF585858FF565656FF535353FF515151FF4E4E4EFF4B4B - 4BFF494949FF464646FF444444FF414141BF3F3F3F1F00000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000006B6B6B3F696969BF676767FF656565FF6262 - 62FF606060FF5D5D5DFF5B5B5BFF585858FF565656FF535353FF515151FF4E4E - 4EFF4B4B4BFF494949BF4646463F000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000006868681F6666666F6464 - 64BF626262EF606060FF5D5D5DFF5B5B5BFF585858FF565656EF535353BF5050 - 506F4E4E4E1F0000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFC003FFFF0000FFFC00003FF800001FF000 - 000FE0000007C0000003C0000003800000018000000100000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000008000000180000001C0000003C0000003E0000007F000000FF800 - 001FFC00003FFF0000FFFFC003FF280000001000000020000000010020000000 - 0000400400000000000000000000000000000000000000000000000000000000 - 0000000000002323235F1D1D1DAF181818FF131313FF0E0E0EFF090909FF0505 - 05AF0101015F0000000000000000000000000000000000000000000000003232 - 321F2C2C2CBF272727FF222222FF171A39FF0B0F60FF080957FF07074AFF0707 - 1AFF040404FF000000BF0000000F0000000000000000000000003A3A3A1F3636 - 36EF313131FF2C2C2CFF272727FF1A1E49FF000CB3FF0006A7FF00019CFF0000 - 9AFF020263FF03030DFF000000EF0000000F00000000000000003F3F3FCF3B3B - 3BFF363636FF313131FF2C2C2CFF252631FF0B178DFF07108CFF0006A7FF0001 - 9CFF00009AFF01017EFF03030DFF000000BF000000004848485F444444FF3F3F - 3FFF3B3B3BFF363636FF313131FF2C2C2CFF272727FF1A1E49FF000CB3FF0006 - A7FF00019CFF00009AFF020263FF040404FF0101015F4E4E4EAF494949FF4144 - 50FF123BDBFF0133FCFF243371FF313131FF2C2C2CFF0A1CA2FF0013BFFF000C - B3FF0006A7FF00019CFF00009AFF07071AFF050505AF545454FF4F4F4FFF3D4A - 77FF1243FFFF083BFFFF1335C0FF363636FF313131FF212856FF071CACFF0415 - ACFF000CB3FF0A0E68FF040482FF07074AFF090909FF595959FF545454FF4F4F - 4FFF294AC7FF1E43D0FF353E63FF3B3B3BFF363636FF242E5FFF0822B8FF1722 - 66FF1C1F3FFF1B1C26FF12133AFF0E0E35FF0E0E0EFF5E5E5EFF595959FF5454 - 54FF4F4F4FFF494949FF444444FF3F3F3FFF30395FFF032CE5FF1F2C73FF262A - 42FF272727FF222222FF1D1D1DFF181818FF131313FF636363FF5E5E5EFF5959 - 59FF545454FF4F4F4FFF494949FF3E445BFF3F3F3FFF0433F0FF21327DFF3131 - 31FF1E2862FF0019CCFF121B68FF1D1D1DFF181818FF676767AF636363FF5C5F - 68FF4860ABFF4F5569FF43507BFF1B4CFFFF1844E7FF0F3BE7FF30395FFF3636 - 36FF192B8AFF001FD8FF0E1E8EFF222222FF1D1D1DAF6A6A6A5F686868FF556C - B1FF406EFFFF3F63D4FF3C5ABEFF2454FFFF1B4CFFFF1543F3FF213DAAFF3B3B - 3BFF363636FF252E5DFF292B37FF272727FF2323235F000000006A6A6ACF6669 - 71FF4D73E2FF406EFFFF3666FFFF2D5DFFFF2454FFFF1B4CFFFF1843E7FF3C3F - 4BFF373A47FF363636FF313131FF2C2C2CCF00000000000000006B6B6B1F6A6A - 6AEF666971FF5070CFFF406EFFFF3666FFFF2D5DFFFF2454FFFF1B4CFFFF1843 - E7FF203DABFF3B3B3BFF363636EF3232321F0000000000000000000000006B6B - 6B1F6A6A6ACF686868FF5F6577FF5065A5FF475FACFF4058AAFF3B519CFF434A - 60FF444444FF3F3F3FCF3A3A3A1F000000000000000000000000000000000000 - 0000000000006A6A6A5F676767AF636363FF5E5E5EFF595959FF545454FF4E4E - 4EAF4848485F00000000000000000000000000000000F00F0000C00300008001 - 0000800100000000000000000000000000000000000000000000000000000000 - 0000000000008001000080010000C0030000F00F0000} - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 8 - Width = 373 - Height = 13 - Caption = - 'A session is required on the server to execute the selected acti' + - 'on.' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [fsBold] - ParentFont = False - end - object Label2: TLabel - Left = 24 - Top = 32 - Width = 341 - Height = 26 - Caption = - 'Please select your Login service and Login method from the drop ' + - 'down boxes below and execute the login, to create an appropriate' + - ' session.' - WordWrap = True - end - object Label3: TLabel - Left = 24 - Top = 75 - Width = 39 - Height = 13 - Caption = 'Service:' - end - object Label4: TLabel - Left = 24 - Top = 99 - Width = 40 - Height = 13 - Caption = 'Method:' - end - object Label5: TLabel - Left = 24 - Top = 124 - Width = 59 - Height = 13 - Caption = 'Parameters:' - end - object cb_ServiceName: TComboBox - Left = 88 - Top = 72 - Width = 323 - Height = 21 - Anchors = [akLeft, akTop, akRight] - ItemHeight = 0 - TabOrder = 0 - OnChange = cb_ServiceNameChange - end - object cb_MethodName: TComboBox - Left = 88 - Top = 96 - Width = 323 - Height = 21 - Anchors = [akLeft, akTop, akRight] - ItemHeight = 0 - TabOrder = 1 - OnChange = cb_MethodNameChange - end - object grd_Params: TValueListEditor - Left = 88 - Top = 120 - Width = 324 - Height = 85 - Anchors = [akLeft, akTop, akRight, akBottom] - DisplayOptions = [doColumnTitles, doAutoColResize] - TabOrder = 2 - TitleCaptions.Strings = ( - 'Parameter' - 'Value') - ColWidths = ( - 150 - 168) - end - object cb_MoreCallsNeeded: TCheckBox - Left = 88 - Top = 206 - Width = 241 - Height = 17 - Anchors = [akLeft, akBottom] - Caption = 'Additional calls are required to complete login' - TabOrder = 3 - end - object btn_Ok: TBitBtn - Left = 257 - Top = 236 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 4 - OnClick = btn_OkClick - Glyph.Data = { - D6020000424DD602000000000000D60000002800000020000000100000000100 - 08000000000000020000C30E0000C30E0000280000002800000000000000FFFF - FF00FF00FF0000660000149D210019AA2B00179D27001AB02D001BA92E001DB1 - 32001EB231001FB133001EAE310022B7380021B4370025A83B0031C24F0031B5 - 4D003BCB5E0041C5630047D36D004FD6790053DE7F00CACACA00C4C4C400BFBF - BF00B5B5B500ABABAB00A5A5A5009E9E9E009C9C9C009A9A9A00999999009898 - 98009797970094949400939393008C8C8C008A8A8A0065656500020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020203 - 030202020202020202020202020202272702020202020202020202020202030A - 0B03020202020202020202020202271F1F27020202020202020202020203100D - 070E0302020202020202020202271B1D221E270202020202020202020314120F - 03080903020202020202020227191A2127232027020202020202020315161103 - 0203060C030202020202022718171C2702272521270202020202020203130302 - 020202030503020202020202271A270202020227242702020202020202030202 - 0202020203040302020202020227020202020202272627020202020202020202 - 0202020202020303020202020202020202020202020227270202020202020202 - 0202020202020203030202020202020202020202020202272702020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202} - NumGlyphs = 2 - end - object btn_Cancel: TBitBtn - Left = 337 - Top = 236 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 5 - Glyph.Data = { - 8A030000424D8A030000000000008A0100002800000020000000100000000100 - 08000000000000020000C30E0000C30E0000550000005500000000000000FFFF - FF00FF00FF004071FA004274FF00497AFC00275AFF002C5FFF003664FA00386B - FF00174AFD001A4CFF001B4DFF001D50FF002355FF002558FF002655FA002E5B - F9002D59F400325DF1003B66F3000030FC000132FF000134FF000C3CFF00103D - FB00103BF4001342FF001743F6001847FF001A48F9001A47F8001B46F6001D4B - FF001C47F6001D48F6001D49F600214EFC00204BF800204CF800224DF800224C - F400224DF1002550F400002CF800002DF800002CF600002AF300012DF600032B - F2000431FE000733F600123BF100143EF40000009A00C0C0C000BEBEBE00BBBB - BB00B9B9B900B6B6B600B5B5B500B3B3B300B1B1B100B0B0B000AFAFAF00AEAE - AE00ACACAC00ABABAB00AAAAAA00A9A9A900A8A8A800A7A7A700A6A6A600A4A4 - A400A3A3A300A2A2A200A0A0A0009F9F9F009E9E9E009C9C9C009A9A9A009999 - 990098989800979797006B6B6B00020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202020202363602020202020236360202020202 - 02545402020202020254540202020202360A1A3602020202362C153602020202 - 54464C540202020254504F5402020202361F0B343602023630162F3602020202 - 5447444D54020254514E5354020202020236220C3536362D1731360202020202 - 025447434B5454504E52540202020202020236230D1932162E36020202020202 - 02025447424A4D4E5154020202020202020202361E1B18333602020202020202 - 0202025447474A4F54020202020202020202023625211D1C3602020202020202 - 02020254424245495402020202020202020236110728260E2036020202020202 - 0202543E3D434440485402020202020202360809123636290F24360202020202 - 02543B3A415454453F4754020202020236030413360202362A06273602020202 - 5439384054020254473E4454020202023605143602020202362B103602020202 - 54373C5402020202544441540202020202363602020202020236360202020202 - 0254540202020202025454020202020202020202020202020202020202020202 - 0202020202020202020202020202020202020202020202020202020202020202 - 0202020202020202020202020202} - NumGlyphs = 2 - end - object fDynamicRequest: TRODynamicRequest - RemoteService = fRemoteService - Params = <> - Left = 16 - Top = 224 - end - object fRemoteService: TRORemoteService - Left = 48 - Top = 224 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.pas deleted file mode 100644 index f2683c2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROLoginNeededForm.pas +++ /dev/null @@ -1,185 +0,0 @@ -unit uROLoginNeededForm; -{$I RemObjects.inc} -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, Grids, ValEdit, uRORemoteService, - uROServiceComponent, uROClient, uRODynamicRequest, uRODL; - -type - TROLoginNeededForm = class(TForm) - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - Label4: TLabel; - Label5: TLabel; - cb_ServiceName: TComboBox; - cb_MethodName: TComboBox; - grd_Params: TValueListEditor; - cb_MoreCallsNeeded: TCheckBox; - btn_Ok: TBitBtn; - btn_Cancel: TBitBtn; - fDynamicRequest: TRODynamicRequest; - fRemoteService: TRORemoteService; - procedure cb_ServiceNameChange(Sender: TObject); - procedure cb_MethodNameChange(Sender: TObject); - procedure btn_OkClick(Sender: TObject); - private - fRodl: TRODLLibrary; - procedure ValidateInput; - public - constructor Create(aRemoteService: TRORemoteService); reintroduce; - class function Execute(aRemoteService: TRORemoteService): boolean; - end; - -var - ROLoginNeededForm: TROLoginNeededForm; - -implementation - -uses - uROTypes; - -{$R *.dfm} - -{ TROLoginNeededForm } - -class function TROLoginNeededForm.Execute(aRemoteService: TRORemoteService): boolean; -var - lContinue: boolean; -begin - repeat - with self.Create(aRemoteService) do try - result := (ShowModal() = idOk); - lContinue := result and cb_MoreCallsNeeded.Checked; - finally - Free(); - end; - until not lContinue; -end; - -constructor TROLoginNeededForm.Create(aRemoteService: TRORemoteService); -var - i: integer; - s: TRODLService; -begin - inherited Create(Application); - fDynamicRequest.RemoteService.Channel := aRemoteService.Channel; - fDynamicRequest.RemoteService.Message := aRemoteService.Message; - fRodl := fDynamicRequest.RemoteService.GetRODLLibrary; //ToDo: show PleaseWaitForm? - - cb_ServiceName.Items.Clear(); - for i := 0 to fRodl.ServiceCount-1 do begin - s := fRodl.Services[i]; - if not s.Abstract then begin - cb_ServiceName.Items.Add(s.Name); - if Pos('Login',s.Name) = 1 then - cb_ServiceName.ItemIndex := cb_ServiceName.Items.Count-1 - else if Pos('DALogin',s.Name) = 1 then - cb_ServiceName.ItemIndex := cb_ServiceName.Items.Count-1; - end; - end; - cb_ServiceNameChange(nil); - ValidateInput(); -end; - -procedure TROLoginNeededForm.cb_ServiceNameChange(Sender: TObject); -var - lService: TRODLService; - m: TRODLOperation; - i: integer; -begin - cb_MethodName.Items.Clear(); - cb_MethodName.Text := ''; - cb_MethodNameChange(Sender); - - lService := fRodl.FindService(cb_ServiceName.Text); - while assigned(lService) do begin - for i := 0 to lService.Default.Count-1 do begin - m := lService.Default.Items[i]; - cb_MethodName.Items.Add(m.Name); - if Pos('Login',m.Name) = 1 then - cb_MethodName.ItemIndex := cb_MethodName.Items.Count-1; - end; - lService := fRodl.FindService(lService.Ancestor); - end; - cb_MethodNameChange(Sender); - ValidateInput(); -end; - -procedure TROLoginNeededForm.cb_MethodNameChange(Sender: TObject); -var - lService: TRODLService; - lMethod: TRODLOperation; - i: integer; - p: TRORequestParam; -begin - grd_Params.Strings.Clear(); - fDynamicRequest.MethodName := ''; - fDynamicRequest.RemoteService.ServiceName := ''; - fDynamicRequest.Params.Clear(); - ValidateInput(); - - lService := fRodl.FindService(cb_ServiceName.Text); - lMethod := nil; - while assigned(lService) and not assigned(lMethod) do begin - for i := 0 to lService.Default.Count-1 do begin - if LowerCase(lService.Default[i].Name) = LowerCase(cb_MethodName.Text) then begin - lMethod := lService.Default[i]; - break; - end; - end; - lService := fRodl.FindService(lService.Ancestor); - end; - if not assigned(lMethod) then exit; - - fDynamicRequest.MethodName := lMethod.Name; - fDynamicRequest.RemoteService.ServiceName := cb_ServiceName.Text; - fDynamicRequest.RefreshParams(lMethod, true); - - for i := 0 to fDynamicRequest.Params.Count-1 do begin - p := fDynamicRequest.Params[i]; - if p.Flag in [fIn, fInOut] then - grd_Params.Strings.Add(p.Name+'='{+string(p.Value)}); - end; - - ValidateInput(); -end; - -procedure TROLoginNeededForm.btn_OkClick(Sender: TObject); -var - i: integer; - lParam: TRORequestParam; - lValue: string; -begin - if fDynamicRequest.MethodName = '' then exit; - - for i := 0 to grd_Params.Strings.Count-1 do begin - lParam := fDynamicRequest.ParamByName(grd_Params.Strings.Names[i]); -{$IFDEF DELPHI7UP} - lValue := grd_Params.Strings.ValueFromIndex[i]; -{$ELSE} - lValue := grd_Params.Strings[i]; - Delete(lValue, 1, pos('=', lValue)); -{$ENDIF} - if assigned(lParam) then begin - case lParam.DataType of - rtString: lParam.Value := lValue; - rtInteger: lParam.Value := StrToInt(lValue); - rtInt64: lParam.Value := StrToInt64(lValue); - rtBoolean: lParam.Value := LowerCase(lValue) = 'true'; - end; - end; - end; - - //using f := new PleaseWaitForm() do - fDynamicRequest.Execute(); -end; - -procedure TROLoginNeededForm.ValidateInput; -begin - btn_Ok.Enabled := (fDynamicRequest.RemoteService.ServiceName <> '') and (fDynamicRequest.MethodName <> ''); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo.pas deleted file mode 100644 index 556b729..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo.pas +++ /dev/null @@ -1,103 +0,0 @@ -unit uROProductVersionInfo; - -interface - -procedure GetVersionInfos(const iTargetUrl:string=''); -procedure RegisterProduct(const iProductID:string; iBuildNo:integer=-1); -procedure UnregisterProduct(const iProductID:string); - -implementation - -uses - uROPleaseWaitForm, uROProductVersionInfo_Intf, uROBinMessage, - uROWinInetHttpChannel, Classes, SysUtils, Forms, uRoProductVersionInfoForm, - Dialogs; - -var - gProducts:TStringList; - -procedure GetVersionInfos(const iTargetUrl:string=''); -var - lProducts:TProductInfoRequestArray; - lInfo:TProductInfoArray; - i:integer; - lMessage:TROBINMessage; - lChannel:TROWinInetHTTPChannel; -begin - lProducts := TProductInfoRequestArray.Create(); - try - for i := 0 to gProducts.Count-1 do begin - with lProducts.Add do begin - ProductID := gProducts[i]; - CurrentBuild := integer(gProducts.Objects[i]); - end; - end; - - lMessage := TROBinMessage.Create(nil); - lChannel := TROWinInetHTTPChannel.Create(nil); - lChannel.TargetURL := iTargetUrl; - if lChannel.TargetURL = '' then - lChannel.TargetURL := 'http://www.remobjects.com/isapi/roversioninfo.dll/bin'; - //lChannel.TargetURL := 'http://localhost:8099/bin'; - - try - - with TPleaseWaitForm.Create(Application,'Checking for new product versions...','RemObjects Software') do try - Show(); - - with CoIProductVersionInfo.Create(lMessage,lChannel) do begin - lInfo := GetProductVersions(lProducts); - end; - try - - Hide(); - if Assigned(lInfo) and (lInfo.Count > 0) then begin - with TProductVersionInfoForm.Create(Application) do try - LoadFromInfo(lInfo); - ShowModal(); - finally - Free(); - end; - end - else begin - ShowMessage('You are running the latest versions of all installed products.'); - end; - - finally - FreeAndNil(lInfo); - end; - - finally - Free(); - end; - - finally - FreeAndNil(lMessage); - FreeAndNil(lChannel); - end; - - finally - lProducts.Free(); - end; -end; - -procedure RegisterProduct(const iProductID:string; iBuildNo:integer=-1); -begin - gProducts.AddObject(iProductID,pointer(iBuildNo)); -end; - -procedure UnregisterProduct(const iProductID:string); -var - lIndex:integer; -begin - lIndex := gProducts.IndexOf(iProductID); - if lIndex <> -1 then gProducts.Delete(lIndex); -end; - -initialization - gProducts := TStringList.Create(); - gProducts.Sorted := true; - gProducts.Duplicates := dupIgnore; -finalization - FreeAndNil(gProducts); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.dfm deleted file mode 100644 index fbfc08f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.dfm +++ /dev/null @@ -1,157 +0,0 @@ -object ProductVersionInfoForm: TProductVersionInfoForm - Left = 349 - Top = 212 - Caption = 'RemObjects Software - New Product Versions' - ClientHeight = 225 - ClientWidth = 393 - Color = clBtnFace - Constraints.MinHeight = 250 - Constraints.MinWidth = 280 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 8 - Width = 345 - Height = 26 - Caption = - 'New versions of the following RemObjects Software products you h' + - 'ave installed are available:' - WordWrap = True - end - object lv_Info: TListView - Left = 8 - Top = 40 - Width = 377 - Height = 146 - Anchors = [akLeft, akTop, akRight, akBottom] - Columns = < - item - Caption = 'Product' - Width = 150 - end - item - Caption = 'Version' - Width = 100 - end - item - Caption = 'Date' - Width = -2 - WidthType = ( - -2) - end> - HotTrack = True - ReadOnly = True - RowSelect = True - TabOrder = 0 - ViewStyle = vsReport - OnDblClick = btn_ShowDetailsClick - end - object BitBtn1: TBitBtn - Left = 310 - Top = 192 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object btn_ShowDetails: TBitBtn - Left = 8 - Top = 192 - Width = 97 - Height = 25 - Anchors = [akLeft, akBottom] - Caption = 'Show Details' - TabOrder = 2 - OnClick = btn_ShowDetailsClick - Glyph.Data = { - 36030000424D3603000000000000360000002800000010000000100000000100 - 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF - 015603FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF015603015503FF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF025904 - 035D06FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF046208096F11FF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF06690D - 18932D015603FF00FFFF00FFFF00FFFF00FFFF00FF015403FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF06680D2CB84F096B10FF00FFFF00FFFF00FFFF - 00FFFF00FF015403015403FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF035A06 - 2BB44C25AB43015202FF00FFFF00FFFF00FFFF00FF01540307840F015403FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF168A2842E2761C9C3301540301540301 - 5302015202015403099813047D0B015403FF00FFFF00FFFF00FFFF00FFFF00FF - 02560429B1493FE06F28B74816982A139825169C280E911C099313058F0D0582 - 0D015403FF00FFFF00FFFF00FFFF00FFFF00FF03580524A94136D3622ECC5424 - BD421BAF3213A3250C9818068F0F06920E078110015403FF00FFFF00FFFF00FF - FF00FFFF00FF0156030D77181FA53923B43F1EB13718AA2D0F9D1F0A98150A7F - 14015403FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF02570403 - 5B06035D0701540315AB29097811015403FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF015403097611015403FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FF015403015403FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF015403FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.pas deleted file mode 100644 index 5dcdc52..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfoForm.pas +++ /dev/null @@ -1,68 +0,0 @@ -unit uROProductVersionInfoForm; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library -{ -{ compiler: Delphi 5 and up, Kylix 2 and up -{ platform: Win32, Linux -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, Buttons, ComCtrls, uROProductVersionInfo_Intf; - -type - TProductVersionInfoForm = class(TForm) - Label1: TLabel; - lv_Info: TListView; - BitBtn1: TBitBtn; - btn_ShowDetails: TBitBtn; - procedure btn_ShowDetailsClick(Sender: TObject); - private - { Private declarations } - public - procedure LoadFromInfo(iInfo:TProductInfoArray); - end; - -var - ProductVersionInfoForm: TProductVersionInfoForm; - -implementation - -uses {$IFDEF VER140UO}DateUtils,{$ENDIF} ShellAPI; - -{$R *.dfm} - -{ TProductVersionInfoForm } - -procedure TProductVersionInfoForm.LoadFromInfo(iInfo: TProductInfoArray); -var - i:integer; -begin - for i := 0 to iInfo.Count-1 do begin - with lv_Info.Items.Add do begin - Caption := iInfo[i].Name; - SubItems.Add(iInfo[i].Version); - SubItems.Add(DateToStr(iInfo[i].Date)); - SubItems.Add(iInfo[i].Url); - end; - if (lv_Info.Items.Count > 0) then lv_Info.Selected := lv_Info.Items[0]; - end; -end; - -procedure TProductVersionInfoForm.btn_ShowDetailsClick(Sender: TObject); -begin - if Assigned(lv_Info.Selected) then - ShellExecute(Handle,'open',pChar(lv_Info.Selected.SubItems[2]),nil,nil,SW_SHOWNORMAL); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo_Intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo_Intf.pas deleted file mode 100644 index f2801e2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROProductVersionInfo_Intf.pas +++ /dev/null @@ -1,781 +0,0 @@ -unit uROProductVersionInfo_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClient, uROTypes, uROClientIntf; - -const - LibraryUID = '{5CC581CD-7668-485C-A064-8005B23FDE09}'; - - IProductVersionInfo_IID : TGUID = '{E733F99C-DEC6-45F9-ACBD-B93A9D35E924}'; - -type - { Forward declarations } - IProductVersionInfo = interface; - TProductInfoRequestArray = class; - TProductInfoArray = class; - TProductArray = class; - TProductInfo = class; - TProductInfoRequest = class; - TProduct = class; - - { TProductInfo } - TProductInfo = class(TROComplexType) - private - fProductVersionID:String; - fName:String; - fVersion:String; - fInfo:String; - fUrl:String; - fBeta:Boolean; - fTrial:Boolean; - fFinal:Boolean; - fPaid:Boolean; - fDate:DateTime; - public - procedure Assign(iSource:TPersistent); override; - published - property ProductVersionID:String read fProductVersionID write fProductVersionID; - property Name:String read fName write fName; - property Version:String read fVersion write fVersion; - property Info:String read fInfo write fInfo; - property Url:String read fUrl write fUrl; - property Beta:Boolean read fBeta write fBeta; - property Trial:Boolean read fTrial write fTrial; - property Final:Boolean read fFinal write fFinal; - property Paid:Boolean read fPaid write fPaid; - property Date:DateTime read fDate write fDate; - end; - - { TProductInfoCollection } - TProductInfoCollection = class(TCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TProductInfo; - procedure SetItems(Index: integer; const Value: TProductInfo); - public - constructor Create; overload; - function Add: TProductInfo; reintroduce; - procedure SaveToArray(anArray : TProductInfoArray); - procedure LoadFromArray(anArray : TProductInfoArray); - property Items[Index : integer] : TProductInfo read GetItems write SetItems; default; - end; - - { TProductInfoRequest } - TProductInfoRequest = class(TROComplexType) - private - fProductID:String; - fCurrentBuild:Integer; - fTrialOnly:Boolean; - fBetasToo:Boolean; - public - procedure Assign(iSource:TPersistent); override; - published - property ProductID:String read fProductID write fProductID; - property CurrentBuild:Integer read fCurrentBuild write fCurrentBuild; - property TrialOnly:Boolean read fTrialOnly write fTrialOnly; - property BetasToo:Boolean read fBetasToo write fBetasToo; - end; - - { TProductInfoRequestCollection } - TProductInfoRequestCollection = class(TCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TProductInfoRequest; - procedure SetItems(Index: integer; const Value: TProductInfoRequest); - public - constructor Create; overload; - function Add: TProductInfoRequest; reintroduce; - procedure SaveToArray(anArray : TProductInfoRequestArray); - procedure LoadFromArray(anArray : TProductInfoRequestArray); - property Items[Index : integer] : TProductInfoRequest read GetItems write SetItems; default; - end; - - { TProduct } - TProduct = class(TROComplexType) - private - fProductID:String; - fName:String; - public - procedure Assign(iSource:TPersistent); override; - published - property ProductID:String read fProductID write fProductID; - property Name:String read fName write fName; - end; - - { TProductCollection } - TProductCollection = class(TCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TProduct; - procedure SetItems(Index: integer; const Value: TProduct); - public - constructor Create; overload; - function Add: TProduct; reintroduce; - procedure SaveToArray(anArray : TProductArray); - procedure LoadFromArray(anArray : TProductArray); - property Items[Index : integer] : TProduct read GetItems write SetItems; default; - end; - - { TProductInfoRequestArray } - TProductInfoRequestArray = class(TROArray) - private - fItems : array of TProductInfoRequest; - protected - function GetItems(Index : integer) : TProductInfoRequest; - procedure SetItems(Index : integer; const Value : TProductInfoRequest); - function GetCount : integer; override; - public - class function GetItemType : PTypeInfo; override; - class function GetItemClass : TClass; override; - class function GetItemSize : integer; override; - function GetItemRef(Index : integer) : pointer; override; - procedure SetItemRef(Index: integer; Ref : pointer); override; - procedure Clear; override; - procedure Delete(Index : integer); override; - procedure Resize(ElementCount : integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add:TProductInfoRequest; overload; - function Add(const Value:TProductInfoRequest):integer; overload; - - property Count : integer read GetCount; - property Items[Index : integer] : TProductInfoRequest read GetItems write SetItems; default; - end; - - { TProductInfoArray } - TProductInfoArray = class(TROArray) - private - fItems : array of TProductInfo; - protected - function GetItems(Index : integer) : TProductInfo; - procedure SetItems(Index : integer; const Value : TProductInfo); - function GetCount : integer; override; - public - class function GetItemType : PTypeInfo; override; - class function GetItemClass : TClass; override; - class function GetItemSize : integer; override; - function GetItemRef(Index : integer) : pointer; override; - procedure SetItemRef(Index: integer; Ref : pointer); override; - procedure Clear; override; - procedure Delete(Index : integer); override; - procedure Resize(ElementCount : integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add:TProductInfo; overload; - function Add(const Value:TProductInfo):integer; overload; - - property Count : integer read GetCount; - property Items[Index : integer] : TProductInfo read GetItems write SetItems; default; - end; - - { TProductArray } - TProductArray = class(TROArray) - private - fItems : array of TProduct; - protected - function GetItems(Index : integer) : TProduct; - procedure SetItems(Index : integer; const Value : TProduct); - function GetCount : integer; override; - public - class function GetItemType : PTypeInfo; override; - class function GetItemClass : TClass; override; - class function GetItemSize : integer; override; - function GetItemRef(Index : integer) : pointer; override; - procedure SetItemRef(Index: integer; Ref : pointer); override; - procedure Clear; override; - procedure Delete(Index : integer); override; - procedure Resize(ElementCount : integer); override; - - procedure Assign(iSource:TPersistent); override; - function Add:TProduct; overload; - function Add(const Value:TProduct):integer; overload; - - property Count : integer read GetCount; - property Items[Index : integer] : TProduct read GetItems write SetItems; default; - end; - - { IProductVersionInfo } - IProductVersionInfo = interface - ['{E733F99C-DEC6-45F9-ACBD-B93A9D35E924}'] - function GetProducts: TProductArray; - function GetProductVersions(const iProducts: TProductInfoRequestArray): TProductInfoArray; - end; - - { CoIProductVersionInfo } - CoIProductVersionInfo = class - class function Create(const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IProductVersionInfo; - end; - - TIProductVersionInfo_Proxy = class(TROProxy, IProductVersionInfo) - protected - function __GetInterfaceName:string; override; - - function GetProducts: TProductArray; - function GetProductVersions(const iProducts: TProductInfoRequestArray): TProductInfoArray; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROClasses, uRORes; - -{ TProductInfoRequestArray } - -procedure TProductInfoRequestArray.Assign(iSource:TPersistent); -var lSource:TProductInfoRequestArray; - i:integer; -begin - if (iSource is TProductInfoRequestArray) then begin - lSource := TProductInfoRequestArray(iSource); - Clear(); - Resize(lSource.Count); - for i := 0 to Count-1 do begin - if Assigned(lSource.Items[i]) then begin - Items[i] := lSource.Items[i].Clone() as TProductInfoRequest; - end; - end; - end - else begin - inherited Assign(iSource); - end; -end; - -class function TProductInfoRequestArray.GetItemType : PTypeInfo; -begin - result := TypeInfo(TProductInfoRequest); -end; - -class function TProductInfoRequestArray.GetItemClass : TClass; -begin - result := TProductInfoRequest; -end; - -class function TProductInfoRequestArray.GetItemSize : integer; -begin - result := SizeOf(TProductInfoRequest); -end; - -function TProductInfoRequestArray.GetItems(Index : integer) : TProductInfoRequest; -begin - if (Index < 0) or (Index >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[Index]); - result := fItems[Index]; -end; - -function TProductInfoRequestArray.GetItemRef(Index : integer) : pointer; -begin - result := fItems[Index]; -end; - -procedure TProductInfoRequestArray.SetItemRef(Index: integer; Ref : pointer); -begin - fItems[Index] := ref -end; - -procedure TProductInfoRequestArray.Clear; -var i : integer; -begin - for i := 0 to (Count-1) do fItems[i].Free; - SetLength(fItems, 0); -end; - -procedure TProductInfoRequestArray.Delete(Index : integer); -var i : integer; -begin - if (Index>=Count) then RaiseError(err_InvalidIndex, [Index]); - - fItems[Index].Free; - - if (Index= Count) then RaiseError(err_ArrayIndexOutOfBounds,[Index]); - result := fItems[Index]; -end; - -function TProductInfoArray.GetItemRef(Index : integer) : pointer; -begin - result := fItems[Index]; -end; - -procedure TProductInfoArray.SetItemRef(Index: integer; Ref : pointer); -begin - fItems[Index] := ref -end; - -procedure TProductInfoArray.Clear; -var i : integer; -begin - for i := 0 to (Count-1) do fItems[i].Free; - SetLength(fItems, 0); -end; - -procedure TProductInfoArray.Delete(Index : integer); -var i : integer; -begin - if (Index>=Count) then RaiseError(err_InvalidIndex, [Index]); - - fItems[Index].Free; - - if (Index= Count) then RaiseError(err_ArrayIndexOutOfBounds,[Index]); - result := fItems[Index]; -end; - -function TProductArray.GetItemRef(Index : integer) : pointer; -begin - result := fItems[Index]; -end; - -procedure TProductArray.SetItemRef(Index: integer; Ref : pointer); -begin - fItems[Index] := ref -end; - -procedure TProductArray.Clear; -var i : integer; -begin - for i := 0 to (Count-1) do fItems[i].Free; - SetLength(fItems, 0); -end; - -procedure TProductArray.Delete(Index : integer); -var i : integer; -begin - if (Index>=Count) then RaiseError(err_InvalidIndex, [Index]); - - fItems[Index].Free; - - if (Index-1) - then Services.RemoveNotifier(notifieridx); -end; - -{ RODL file processing } - -function ProcessProject(const Project: IOTAProject; aMessageList : TIDEMessageList; aTypes: TROUnitTypes = [utIntf, utInvk, utImpl, utRes]) : boolean; - - {$IFNDEF REMOBJECTS_CODEGEN2} - function GenUnit(aConverterClass : TRODLConverterClass; aLibrary : TRODLLibrary; aShortRodlFilename: string; aService : TRODLService = nil; SkipIfPresent : boolean = FALSE) : boolean; overload; - var - conv : TRODLConverter; - lAttributes: Integer; - lServiceName: string; - unitname : string; - module : IOTAModule; - clsnme, requnits : string; - passaveaborted : boolean; - begin - result := FALSE; - - conv := NIL; - try - conv := aConverterClass.Create(NIL); - - if Assigned(aService) then lServiceName := aService.Info.Name else lServiceName := ''; - unitname := ExtractFilePath(Project.FileName)+conv.GetTargetFileName(aLibrary, lServiceName); - - // Checks the module is already in the project - try - module := FindModuleByUnitName(Project, unitname); - except - on E:EFOpenError do module := nil; - else raise; - end; - - // If it is and the file is not supposed to be regenerated just exists - if (module<>NIL) and SkipIfPresent then begin - aMessageList.Add(mWarning, aShortRodlFilename+': Skipping regeneration of unit '+ExtractFileName(unitname)); - result := TRUE; - Exit; - end - {$IFDEF MSWINDOWS} - else if (conv is TRODLToImpl) and (aService.Ancestor='') then begin - if not SelectROServerClassType(lServiceName, clsnme, requnits) then Abort; - TRODLToImpl(conv).ServerClassName := clsnme; - TRODLToImpl(conv).RequiredUnits := requnits; - end{$ENDIF}; - - {$IFDEF MSWINDOWS} - if FileExists(unitname) then begin - lAttributes := FileGetAttr(unitname); - if (lAttributes and faReadOnly) = faReadOnly then begin - //case MessageDlg(Format('%s is readonly, overwrite anyway?',[ExtractFileName(unitname)]), - case MessageDlg(Format('%s is readonly and cannot be regenerated.',[ExtractFileName(unitname)]), - mtConfirmation, [{mbYes, mbYesToAll} mbCancel, mbIgnore], 0) of - mrCancel: Abort(); - mrIgnore: begin - result := true; - exit; - end; - mrYes: begin - FileSetAttr(unitname, lAttributes xor faReadOnly); - //ToDo: need to turn buffer non-readonly, too. - exit; - end; - mrYesToAll: //ToDo. - end; - end; - end; - {$ENDIF} - - // Converts the RODL file - conv.Convert(aLibrary, lServiceName); - - if (module=NIL) then begin - // If not present adds it double checking for file existance if SkipIfPresent. It's for implementation - // units that might be there and have code already in but not be part of the DPR (for any weird reason) - - passaveaborted := FALSE; - if SkipIfPresent and FileExists(unitname) then begin - case MessageDlg( - Format('Unit "%s" has been prepared but a file with the same name already exist in "%s".'#13+ - 'Do you want to overwrite file %s?', - [ExtractFileName(unitname), ExtractFilePath(unitname), ExtractFileName(unitname)]), - mtWarning, [mbYes, mbNo, mbCancel], 0) of - - mrCancel : Exit; - mrNo : passaveaborted := TRUE; - mrYes: { no-op}; - end - end; - - if not passaveaborted then begin - if conv is TRODLToImpl then with conv as TRODLToImpl do begin - if WriteDataModule then - WriteDFM(aLibrary, lServiceName, ChangeFileExt(unitname, '.dfm')); - end; - - conv.Buffer.SaveToFile(unitname); - end; - - {$IFDEF BDS} - Project.AddFile(unitname, false); - {$ELSE} - Project.AddFile(unitname, (aConverterClass=TRODLToImpl) and TRODLToImpl(conv).WriteDataModule); - {$ENDIF} - - if (aConverterClass <> TRODLToInvk) - then ActionServices.OpenFile(unitname); - - end - else begin - // Otherwise updates the source - - WriteModuleSource(module, Trim(conv.Buffer.Text), ''); - end; - - if SkipIfPresent then - aMessageList.Add(mInfo, Format(aShortRodlFilename+': Implementation unit for service %s generated', - [lServiceName])); - - - result := TRUE; - finally - conv.Free; - end; - end; - {$ENDIF} - - function GenUnit(aType: TROCodeGenType; aLibrary : TRODLLibrary; aShortRodlFilename: string; aService : TRODLService = nil; SkipIfPresent : boolean = FALSE) : boolean; overload; - var - lAttributes: Integer; - lServiceName: string; - lLanguage: TROCodeGenLanguage; - lUnitname: string; - lModule : IOTAModule; - lClassname, lRequiredUnits: string; - lCodeStream, lHeaderStream: TStringStream; - - begin - result := FALSE; - - lLanguage := CodeGenLanuageFromProjectPersonality(Project); - - if Assigned(aService) then lServiceName := aService.Info.Name else lServiceName := ''; - lUnitname := ExtractFilePath(Project.FileName)+GetTargetFileName(aLibrary, aService, aType, lLanguage); - - // Checks the module is already in the project - try - lModule := FindModuleByUnitName(Project, lUnitname); - except - on E:EFOpenError do lModule := nil; - else raise; - end; - - // If it is and the file is not supposed to be regenerated just exists - if SkipIfPresent and assigned(lModule) then begin - aMessageList.Add(mWarning, aShortRodlFilename+': Skipping regeneration of unit '+ExtractFileName(lUnitname)); - result := TRUE; - Exit; - end; - if SkipIfPresent and FileExists(lUnitname) then begin - case MessageDlg(Format('A unit named "%s" already exist, but is not part of the project.'#13+ - 'Do you want to overwrite the file?', [ExtractFileName(lUnitname)]), - mtWarning, [mbYes, mbNo, mbCancel], 0) of - mrCancel: Abort; - mrNo: begin - result := true; - Exit; - end; - mrYes: { no-op}; - end - end; - - lRequiredUnits := ''; - lClassname := ''; - if (aType = cgtImpl) and (aService.Ancestor='') then begin - {$IFDEF MSWINDOWS} - if not SelectROServerClassType(lServiceName, lClassname, lRequiredUnits) then Abort; - {$ELSE} - lClassname := 'TRORemoteDataModule'; - {$ENDIF}; - end; - - {$IFDEF MSWINDOWS} - if FileExists(lUnitname) then begin - lAttributes := FileGetAttr(lUnitname); - if (lAttributes and faReadOnly) = faReadOnly then begin - //case MessageDlg(Format('%s is readonly, overwrite anyway?',[ExtractFileName(unitname)]), - case MessageDlg(Format('%s is readonly and cannot be regenerated.',[ExtractFileName(lUnitname)]), - mtConfirmation, [{mbYes, mbYesToAll} mbCancel, mbIgnore], 0) of - mrCancel: Abort(); - mrIgnore: begin - result := true; - exit; - end; - mrYes: begin - FileSetAttr(lUnitname, lAttributes xor faReadOnly); - //ToDo: need to turn buffer non-readonly, too. - exit; - end; - mrYesToAll: //ToDo. - end; - end; - end; - {$ENDIF} - - // Converts the RODL file - - if (not assigned(lModule)) or (lLanguage = cglCppWin32) then begin // going via the Module doesn't work for .H files :( - - GenerateUnitToFile(aLibrary, aService, aType, lLanguage, lClassname); - - {$IFDEF BDS} - Project.AddFile(lUnitname, true); // false - if lLanguage = cglCppWin32 then - Project.AddFileWithParent(ChangeFileExt(lUnitname,'.h'), true, lUnitname); - {$ELSE} - Project.AddFile(lUnitname, true); - {$ENDIF} - - if (aType <> cgtInvk) then - ActionServices.OpenFile(lUnitName); - - end - else begin - - lCodeStream := TStringStream.Create(''); - lHeaderStream := TStringStream.Create(''); // C++ only - GenerateUnitToStream(aLibrary, aService, aType, lLanguage, lCodeStream, lHeaderStream, lClassname); - WriteModuleSource(lModule, Trim(lCodeStream.DataString), Trim(lHeaderStream.DataString)); - end; - - {if SkipIfPresent then - aMessageList.Add(mInfo, Format(aShortRodlFilename+': Implementation unit for service %s generated', - [lServiceName]));} - - - result := TRUE; - end; - - procedure ProcessRodl(aFilename: string; aNested: boolean); - var - lShortRodlFilename: string; - lib : TRODLLibrary; - i : integer; - begin - if (aFileName = '') then exit; - if not FileExists(aFilename) then begin - aMessageList.Add(mError,Format('RODL file %s does not exist.',[aFilename])); - exit; - end; - - lShortRodlFilename := ExtractFileName(aFilename); - - // Processes RODL - lib := ReadRODLFromFile(TXMLToRODL, aFilename); - try - //aMessageList.Add(mInfo, rodlname+' has been loaded'); - - {$IFNDEF REMOBJECTS_CODEGEN2} - if CodeGenLanuageFromProjectPersonality(Project) = cglCppWin32 then begin - {$ENDIF} - - if utIntf in aTypes then begin - if not GenUnit(cgtIntf, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Interface unit generated'); - end; - - if utAsync in aTypes then begin - if not GenUnit(cgtAsync, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Async Interface unit generated'); - end; - - if utInvk in aTypes then begin - if not GenUnit(cgtInvk, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Invoker unit generated'); - end; - - if utImpl in aTypes then begin - for i := 0 to (lib.ServiceCount-1) do if (not lib.Services[i].IsFromUsedRodl) then begin - - if not GenUnit(cgtImpl, lib, lShortRodlFilename, lib.Services[i], true) then begin - result := FALSE; - Exit; - end - end; - end; - - {$IFNDEF REMOBJECTS_CODEGEN2} - end - else begin - - // Generates the units - if utIntf in aTypes then begin - if not GenUnit(TRODLToIntf, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Interface unit generated'); - end; - - if utAsync in aTypes then begin - if not GenUnit(TRODLToPascalAsync, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Async Interface unit generated'); - end; - - if utInvk in aTypes then begin - if not GenUnit(TRODLToInvk, lib, lShortRodlFilename) then begin - result := FALSE; - Exit; - end - else aMessageList.Add(mInfo, lShortRodlFilename+': Invoker unit generated'); - end; - - if utImpl in aTypes then begin - for i := 0 to (lib.ServiceCount-1) do if (not lib.Services[i].IsFromUsedRodl) then begin - - if not GenUnit(TRODLToImpl, lib, lShortRodlFilename, lib.Services[i], true) then begin - result := FALSE; - Exit; - end - end; - end; - - end; - {$ENDIF not REMOBJECTS_CODEGEN2} - - for i := 0 to lib.UseCount-1 do begin - if (lib.Use[i].GenerateCode) then begin - if FileExists(ExpandVariables(lib.Use[i].RodlFile)) then - ProcessRodl(lib.Use[i].RodlFile, true) - else - ProcessRodl(lib.Use[i].AbsoluteRodlFile, true); - end; - end; - - if (utRes in aTypes) and (not aNested) then begin - - // flatten RODL if needed - if lib.UseCount > 0 then begin - aFilename := ExtractFilePath(aFilename)+'temp_'+NewStrippedGuidAsString()+'.rodl'; - - with TRODLToXML.Create(lib,true) do try - Buffer.SaveToFile(aFilename); - aMessageList.Add(mInfo,Format(lShortRodlFilename+': Flattening RODL to %s',[ExtractFileName(aFilename)])); - finally - Free; - end; - end; - - // generate RES - if GenerateRESFromRODL(aFilename, aMessageList) then begin - aMessageList.Add(mInfo, lShortRodlFilename+': RODL resource generated.') - end - else begin - aMessageList.Add(mError, lShortRodlFilename+': RODL resource could not be generated.'); - result := FALSE - end; - - // delete temp file - if lib.UseCount > 0 then begin - DeleteFile(aFilename); - end; - - end; - - finally - FreeAndNil(lib); - end; - end; - - -var prjname, - source, - rodlname : string; -begin - result := TRUE; - - // Only processes DPRs - prjname := Project.FileName; - {$IFDEF BDS} - if (CompareText(ExtractFileExt(prjname), '.bdsproj')<>0) and (CompareText(ExtractFileExt(prjname), '.dproj')<>0) then Exit; - {$ELSE} - if (CompareText(ExtractFileExt(prjname), '.dpr')<>0) then Exit; - {$ENDIF} - - // Extract useful data and exists if the file does not reference a RODL file - source := ReadModuleSource(Project); - rodlname := ExtractRODLFileName(source); - - if (rodlname='') then exit - else if (ExtractFilePath(rodlname)='') then - rodlname := ExtractFilePath(prjname)+rodlname; // If there's no path specified assumes the file is in the DPR folder - - ProcessRodl(rodlname, false); - -end; - -{ TRORODLNotifier } - -procedure TRORODLNotifier.AfterCompile(Succeeded, IsCodeInsight: Boolean); -begin -end; - -procedure TRORODLNotifier.AfterCompile(Succeeded: Boolean); -begin - -end; - -procedure TRORODLNotifier.BeforeCompile(const Project: IOTAProject; - var Cancel: Boolean); -begin - -end; - -procedure TRORODLNotifier.BeforeCompile(const Project: IOTAProject; - IsCodeInsight: Boolean; var Cancel: Boolean); -begin - if IsCodeInsight then Exit; - - fMessages.ClearMessages(); - - try - Cancel := not ProcessProject(Project, fMessages); - except - on E:Exception do begin - { mh: for some reason, this message doesn't get displayed. So let's add a message box too, for now. } - fMessages.Add(mInfo, E.Message); - Cancel := TRUE; - raise; - end; - end; - - if Cancel then begin - DisplayIDEMessageForm := TRUE; - end; - if (fMessages.Count>0) - then fMessages.FlushMessages; -end; - -procedure TRORODLNotifier.GenerateUnits(const aProject: IOTAProject; aTypes: TROUnitTypes); -begin - ProcessProject(aProject, fMessages, aTypes); -end; - -constructor TRORODLNotifier.Create; -begin - fMessages := TIDEMessageList.Create(str_ProductName); -end; - -destructor TRORODLNotifier.Destroy; -begin - fMessages.Free; - inherited; -end; - -procedure TRORODLNotifier.FileNotification( - NotifyCode: TOTAFileNotification; const FileName: string; - var Cancel: Boolean); -begin - -end; - -initialization - -finalization - RemoveNotifier; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROResWriter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROResWriter.pas deleted file mode 100644 index be5e563..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/IDE/uROResWriter.pas +++ /dev/null @@ -1,60 +0,0 @@ -unit uROResWriter; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration -{ -{ compiler: Delphi 5 and up -{ platform: Win32 -{ -{ (c)opyright RemObjects Software. all rights reserved. -{ -{ Using this code requires a valid license of the RemObjects SDK -{ which can be obtained at http://www.remobjects.com. -{----------------------------------------------------------------------------} - -{$IFDEF LINUX} -{$I ../RemObjects.inc} -{$ELSE} -{$I ..\RemObjects.inc} -{$ENDIF LINUX} - -interface -uses - SysUtils, Classes; - - -procedure WriteRES(InData, OutStream: TStream; const Name: WideString); - -implementation - -const - FirstEmptyResource: array[0..31] of char = - (#$00,#$00,#$00,#$00,#$20,#$00,#$00,#$00,#$FF,#$FF,#$00,#$00,#$FF,#$FF,#$00, - #$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00,#$00, - #$00,#$00); -procedure WriteRES(InData, OutStream: TStream; const Name: WideString); - procedure WriteStr(const s: string); - begin - OutStream.Write(s[1], length(s)); - end; - procedure WriteLong(l: Cardinal); - begin - OutStream.Write(l, 4); - end; -begin - Outstream.Write(FirstEmptyResource, 32); - WriteLong(Indata.Size - Indata.Position); // Resource Size - WriteLong(32 + Length(Name) * 2); // Header Size - WriteLong($000AFFFF); // RT_RCDATA - OutStream.Write(Name[1], Length(Name) * 2); - WriteStr(#$00#$00); // Null terminater - if (Length(Name) * 2 + 2) mod 4 <> 0 then - WriteStr(#$00#$00); // extra 0 for dword alignment - WriteLong(0); // Data Version - WriteLong(0); // Flags + Language - WriteLong(0); // Resource Version - WriteLong(0); // Characteristics - OutStream.CopyFrom(Indata, Indata.Size - Indata.Position); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_Core_D10/RemObjects_Core_D10.prjconfig b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_Core_D10/RemObjects_Core_D10.prjconfig deleted file mode 100644 index c8f2834..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_Core_D10/RemObjects_Core_D10.prjconfig +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_Core_D10/default.txaPackage b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_Core_D10/default.txaPackage deleted file mode 100644 index e69de29..0000000 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_WebBroker_D10/RemObjects_WebBroker_D10.prjconfig b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_WebBroker_D10/RemObjects_WebBroker_D10.prjconfig deleted file mode 100644 index c8f2834..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_WebBroker_D10/RemObjects_WebBroker_D10.prjconfig +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_WebBroker_D10/default.txaPackage b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ModelSupport_RemObjects_WebBroker_D10/default.txaPackage deleted file mode 100644 index e69de29..0000000 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher.pas deleted file mode 100644 index 63de7e9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher.pas +++ /dev/null @@ -1,4126 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Part I from Delphi Encryption Compendium ( DEC Part I) - Delphi 2-4, designed and testet under D3 & D4 - Description: Include a Selection of various RO_Cipher's (Encryption Algo) - impl. Algo: - Gost, Blowfish, IDEA, SAFER in 6 Types, - SAFER-K40 (konvetional), SAFER-SK40 (with Keyscheduling), - SAFER-K64, SAFER-SK64, SAFER-K128, SAFER-SK128, - TEA, TEAN (TEA extended), SCOP, Q128, 3Way, - Twofish, Shark, Square - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -} - -unit uROCipher; - -interface - -{$I uROVer.inc} - -uses SysUtils, Classes, uRODECUtil, uROHash; - -const {ErrorCode's for EROCipherException} - errGeneric = 0; {generic Error} - errInvalidKey = 1; {Decode Key is not correct} - errInvalidKeySize = 2; {Size of the Key is too large} - errNotInitialized = 3; {Methods Init() or InitKey() were not called} - errInvalidMACMode = 4; {CalcMAC can't use cmECB, cmOFB} - errCantCalc = 5; - -type - EROCipherException = class(Exception) - public - Errorcode: Integer; - end; - - {all RO_Cipher Classes in this Unit, a good Selection} - TROCipher_Gost = class; - TROCipher_Blowfish = class; - TROCipher_IDEA = class; - TROCipher_SAFER = class; - TROCipher_SAFER_K40 = class; - TROCipher_SAFER_SK40 = class; - TROCipher_SAFER_K64 = class; - TROCipher_SAFER_SK64 = class; - TROCipher_SAFER_K128 = class; - TROCipher_SAFER_SK128 = class; - TROCipher_TEA = class; - TROCipher_TEAN = class; - TROCipher_SCOP = class; {Streamcipher} - TROCipher_Q128 = class; - TROCipher_3Way = class; - TROCipher_Twofish = class; - TROCipher_Shark = class; - TROCipher_Square = class; - - TCipherMode = (cmCTS, cmCBC, cmCFB, cmOFB, cmECB, cmCTSMAC, cmCBCMAC, cmCFBMAC); - { the RO_Cipher Modes: - cmCTS RO_Cipher Text Stealing, a Variant from cmCBC, but relaxes - the restriction that the DataSize must be a mulitply from BufSize, - this is the Defaultmode, fast and Bytewise - cmCBC RO_Cipher Block Chaining - cmCFB K-bit RO_Cipher Feedback, here is K = 8 -> 1 Byte - cmOFB K-bit Output Feedback, here is K = 8 -> 1 Byte - cmECB * Electronic Codebook, DataSize must be a multiply from BufSize - - cmCTSMAC Build a Message Authentication Code in cmCTS Mode - cmCBCMAC Build a CBC-MAC - cmCFBMAC Build a CFB-MAC - } - - TROCipherClass = class of TROCipher; - - TROCipher = class(TROProtection) - private - FMode: TCipherMode; - FHash: TROHash; - FHashClass: TROHashClass; - FKeySize: Integer; - FBufSize: Integer; - FUserSize: Integer; - FBuffer: Pointer; - FVector: Pointer; - FFeedback: Pointer; - FUser: Pointer; - FFlags: Integer; - function GetHash: TROHash; - procedure SetHashClass(Value: TROHashClass); - procedure InternalCodeStream(Source, Dest: TStream; DataSize: Integer; Encode: Boolean); - procedure InternalCodeFile(const Source, Dest: string; Encode: Boolean); - protected - function GetFlag(Index: Integer): Boolean; - procedure SetFlag(Index: Integer; Value: Boolean); virtual; - {used in method Init()} - procedure InitBegin(var Size: Integer); - procedure InitEnd(IVector: Pointer); virtual; - {must override} - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); virtual; - class function TestVector: Pointer; virtual; - {override TROProtection Methods} - procedure CodeInit(Action: TPAction); override; - procedure CodeDone(Action: TPAction); override; - procedure CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); override; - {the encode function, must override} - procedure Encode(Data: Pointer); virtual; - {the decode function, must override} - procedure Decode(Data: Pointer); virtual; - {the individual Userdata and Buffer} - property User: Pointer read FUser; - property Buffer: Pointer read FBuffer; - property UserSize: Integer read FUserSize; - public - constructor Create(const Password: string; AProtection: TROProtection); - destructor Destroy; override; - class function MaxKeySize: Integer; - {performs a Test of correct work} - class function SelfTest: Boolean; - {initialization form the RO_Cipher} - procedure Init(const Key; Size: Integer; IVector: Pointer); virtual; - procedure InitKey(const Key: string; IVector: Pointer); - {reset the Feedbackregister with the actual IVector} - procedure Done; virtual; - {protect the security Data's, Feedback, Buffer, Vector etc.} - procedure Protect; virtual; - - procedure EncodeBuffer(const Source; var Dest; DataSize: Integer); - procedure DecodeBuffer(const Source; var Dest; DataSize: Integer); - function EncodeString(const Source: string): string; - function DecodeString(const Source: string): string; - procedure EncodeFile(const Source, Dest: string); - procedure DecodeFile(const Source, Dest: string); - procedure EncodeStream(const Source, Dest: TStream; DataSize: Integer); - procedure DecodeStream(const Source, Dest: TStream; DataSize: Integer); - - {calculate a MAC, Message Authentication Code, can be use in - cmCBCMAC, cmCTSMAC, cmCFBMAC Modes -> Dest is not modified, or - cmCBC, cmCTS, cmCFB Modes -> normal En/Decoding of Dest.} - function CalcMAC(Format: Integer): string; - - {the RO_Cipher Mode = cmXXX} - property Mode: TCipherMode read FMode write FMode; - {the Current RO_Hash-Object, to build a Digest from InitKey()} - property RO_Hash: TROHash read GetHash; - {the Class of the RO_Hash-Object} - property HashClass: TROHashClass read FHashClass write SetHashClass; - {the maximal KeySize and BufSize (Size of Feedback, Buffer and Vector} - property KeySize: Integer read FKeySize; - property BufSize: Integer read FBufSize; - - {Init() was called} - property Initialized: Boolean index 1 read GetFlag write SetFlag; - {the actual IVector, BufSize Bytes long} - property Vector: Pointer read FVector; - {the Feedback register, BufSize Bytes long} - property Feedback: Pointer read FFeedback; - {the Key is set from InitKey() and the RO_Hash.DigestKey^ include the encrypted RO_Hash-Key} - property HasHashKey: Boolean index 0 read GetFlag; - end; - - // now the RO_Cipher's - - TROCipher_Gost = class(TROCipher) {russian RO_Cipher} - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Blowfish = class(TROCipher) - private - {$IFDEF UseASM} - {$IFNDEF 486GE} // no Support for <= CPU 386 - procedure Encode386(Data: Pointer); - procedure Decode386(Data: Pointer); - {$ENDIF} - {$ENDIF} - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_IDEA = class(TROCipher) {International Data Encryption Algorithm } - private - procedure RO_Cipher(Data, Key: PWordArray); - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TSAFERMode = (smDefault, smK40, smK64, smK128, smStrong, smSK40, smSK64, smSK128); - {smDefault Mode is build from KeyLength "Size" - if Size <= 5 then is smK40 used - if Size <= 8 then is smK64 used - if Size <= 16 then is smK128 used - smK40 SAFER K-40 Keysize is 40bit -> 5 Byte - smK64 SAFER K-64 Keysize is 64bit -> 8 Byte - smK128 SAFER K-128 KeySize is 128bit -> 16 Byte - smStrong Mode is build from KeyLength "Size" and stronger as smDefault, - if Size <= 5 then is smSK40 used - if Size <= 8 then is smSK64 used - if Size <= 16 then is smSK128 used - this is the Defaultmode for TROCipher_SAFER - smSK40 SAFER SK-40 stronger Version from K-40 with better Keyscheduling - smSK64 SAFER SK-64 stronger Version from K-64 with better Keyscheduling - smSK128 SAFER SK-128 stronger Version from K-128 with better Keyscheduling} - - TROCipher_SAFER = class(TROCipher) {SAFER = Secure And Fast Encryption Routine} - private - FRounds: Integer; - FSAFERMode: TSAFERMode; - procedure SetRounds(Value: Integer); - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure InitNew(const Key; Size: Integer; IVector: Pointer; SAFERMode: TSAFERMode); - property Rounds: Integer read FRounds write SetRounds; - end; - - TROCipher_SAFER_K40 = class(TROCipher_SAFER) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_SAFER_SK40 = class(TROCipher_SAFER_K40) - protected - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_SAFER_K64 = class(TROCipher_SAFER) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_SAFER_SK64 = class(TROCipher_SAFER_K64) - protected - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_SAFER_K128 = class(TROCipher_SAFER) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_SAFER_SK128 = class(TROCipher_SAFER_K128) - protected - class function TestVector: Pointer; override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_TEA = class(TROCipher) {Tiny Encryption Algorithm} - private - FRounds: Integer; {16 - 32, default 16 is sufficient, 32 is ample} - procedure SetRounds(Value: Integer); - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROCipher_TEAN = class(TROCipher_TEA) {Tiny Encryption Algorithm, extended Version} - protected - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - end; - - TROCipher_SCOP = class(TROCipher) {Stream RO_Cipher in Blockmode} - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure Done; override; - end; - - TROCipher_Q128 = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_3Way = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Twofish = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Shark = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Square = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - -function DefaultCipherClass: TROCipherClass; -procedure SetDefaultCipherClass(CipherClass: TROCipherClass); -procedure RaiseCipherException(const Errorcode: Integer; const Msg: string); -function RegisterCipher(const ACipher: TROCipherClass; const aName, ADescription: string): Boolean; -function UnregisterCipher(const ACipher: TROCipherClass): Boolean; -function CipherList: TStrings; -procedure CipherNames(List: TStrings); -function GetCipherClass(const Name: string): TROCipherClass; -function GetCipherName(CipherClass: TROCipherClass): string; - -const - CheckCipherKeySize: Boolean = False; - {set to True raises Exception when Size of the Key is too large, (Method Init()) - otherwise will truncate the Key, default mode is False} - -implementation - -uses uRODECConst, Windows; - -{$I *.inc} -{$I uROSquare.inc} - -const - FDefaultCipherClass: TROCipherClass = TROCipher_Blowfish; - FCipherList : TStringList = nil; - -function DefaultCipherClass: TROCipherClass; -begin - Result := FDefaultCipherClass; -end; - -procedure SetDefaultCipherClass(CipherClass: TROCipherClass); -begin - if CipherClass = nil then - FDefaultCipherClass := TROCipher_Blowfish - else - FDefaultCipherClass := CipherClass; -end; - -procedure RaiseCipherException(const Errorcode: Integer; const Msg: string); -var - e : EROCipherException; -begin - e := EROCipherException.Create(Msg); - e.Errorcode := Errorcode; - raise e; -end; - -function RegisterCipher(const ACipher: TROCipherClass; const aName, ADescription: string): Boolean; -var - i : Integer; - S : string; -begin - Result := False; - if ACipher = nil then - Exit; - S := Trim(aName); - if S = '' then - begin - S := ACipher.ClassName; - if S[1] = 'T' then - Delete(S, 1, 1); - i := Pos('_', S); - if i > 0 then - Delete(S, 1, i); - end; - S := S + '=' + ADescription; - i := CipherList.IndexOfObject(Pointer(ACipher)); - if i < 0 then - CipherList.AddObject(S, Pointer(ACipher)) - else - CipherList[i] := S; - Result := True; -end; - -function UnregisterCipher(const ACipher: TROCipherClass): Boolean; -var - i : Integer; -begin - Result := False; - repeat - i := CipherList.IndexOfObject(Pointer(ACipher)); - if i < 0 then - Break; - Result := True; - CipherList.Delete(i); - until False; -end; - -function CipherList: TStrings; -begin - if not IsObject(FCipherList, TStringList) then - FCipherList := TStringList.Create; - Result := FCipherList; -end; - -procedure CipherNames(List: TStrings); -var - i : Integer; -begin - if not IsObject(List, TStrings) then - Exit; - for i := 0 to CipherList.Count - 1 do - List.AddObject(FCipherList.Names[i], FCipherList.Objects[i]); -end; - -function GetCipherClass(const Name: string): TROCipherClass; -var - i : Integer; - N : string; -begin - Result := nil; - N := Name; - i := Pos('_', N); - if i > 0 then - Delete(N, 1, i); - for i := 0 to CipherList.Count - 1 do - if AnsiCompareText(N, GetShortClassName(TClass(FCipherList.Objects[i]))) = 0 then - begin - Result := TROCipherClass(FCipherList.Objects[i]); - Exit; - end; - i := FCipherList.IndexOfName(N); - if i >= 0 then - Result := TROCipherClass(FCipherList.Objects[i]); -end; - -function GetCipherName(CipherClass: TROCipherClass): string; -var - i : Integer; -begin - i := CipherList.IndexOfObject(Pointer(CipherClass)); - if i >= 0 then - Result := FCipherList.Names[i] - else - Result := GetShortClassName(CipherClass); -end; - -function TROCipher.GetFlag(Index: Integer): Boolean; -begin - Result := FFlags and (1 shl Index) <> 0; -end; - -procedure TROCipher.SetFlag(Index: Integer; Value: Boolean); -begin - Index := 1 shl Index; - if Value then - FFlags := FFlags or Index - else - FFlags := FFlags and not Index; -end; - -procedure TROCipher.InitBegin(var Size: Integer); -begin - Initialized := False; - Protect; - if Size < 0 then - Size := 0; - if Size > KeySize then - if not CheckCipherKeySize then - Size := KeySize - else - RaiseCipherException(errInvalidKeySize, Format(sInvalidKeySize, [ClassName, 0, KeySize])); -end; - -procedure TROCipher.InitEnd(IVector: Pointer); -begin - if IVector = nil then - Encode(Vector) - else - Move(IVector^, Vector^, BufSize); - Move(Vector^, Feedback^, BufSize); - Initialized := True; -end; - -class procedure TROCipher.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 0; - AKeySize := 0; - AUserSize := 0; -end; - -class function TROCipher.TestVector: Pointer; -begin - Result := GetTestVector; -end; - -procedure TROCipher.Encode(Data: Pointer); -begin -end; - -procedure TROCipher.Decode(Data: Pointer); -begin -end; - -constructor TROCipher.Create(const Password: string; AProtection: TROProtection); -begin - inherited Create(AProtection); - FHashClass := DefaultHashClass; - GetContext(FBufSize, FKeySize, FUserSize); - GetMem(FVector, FBufSize); - GetMem(FFeedback, FBufSize); - GetMem(FBuffer, FBufSize); - GetMem(FUser, FUserSize); - Protect; - if Password <> '' then - InitKey(Password, nil); -end; - -destructor TROCipher.Destroy; -begin - Protect; - ReallocMem(FVector, 0); - ReallocMem(FFeedback, 0); - ReallocMem(FBuffer, 0); - ReallocMem(FUser, 0); - FHash.release; - FHash := nil; - inherited Destroy; -end; - -class function TROCipher.MaxKeySize: Integer; -var - Dummy : Integer; -begin - GetContext(Dummy, Result, Dummy); -end; - -class function TROCipher.SelfTest: Boolean; -var - Data : array[0..63] of Char; - Key : string; - SaveKeyCheck : Boolean; -begin - Result := InitTestIsOk; {have anonyme modified the testvectors ?} - {we will use the ClassName as Key :-)} - Key := ClassName; - SaveKeyCheck := CheckCipherKeySize; - with Self.Create('', nil) do - try - CheckCipherKeySize := False; - Mode := cmCTS; - Init(PChar(Key)^, Length(Key), nil); - EncodeBuffer(GetTestVector^, Data, 32); - Result := Result and (MemCompare(TestVector, @Data, 32) = 0); - Done; - DecodeBuffer(Data, Data, 32); - Result := Result and (MemCompare(GetTestVector, @Data, 32) = 0); - finally - CheckCipherKeySize := SaveKeyCheck; - Free; - end; - FillChar(Data, SizeOf(Data), 0); -end; - -procedure TROCipher.Init(const Key; Size: Integer; IVector: Pointer); -begin -end; - -procedure TROCipher.InitKey(const Key: string; IVector: Pointer); -var - i : Integer; -begin - RO_Hash.Init; - RO_Hash.Calc(PChar(Key)^, Length(Key)); - RO_Hash.Done; - i := RO_Hash.DigestKeySize; - if i > FKeySize then - i := FKeySize; {generaly will truncate to large Keys} - - Init(RO_Hash.DigestKey^, i, IVector); - EncodeBuffer(RO_Hash.DigestKey^, RO_Hash.DigestKey^, RO_Hash.DigestKeySize); - Done; - SetFlag(0, True); -end; - -procedure TROCipher.Done; -begin - if MemCompare(FVector, FFeedback, FBufSize) = 0 then - Exit; - Move(FFeedback^, FBuffer^, FBufSize); - Move(FVector^, FFeedback^, FBufSize); -end; - -procedure TROCipher.Protect; -begin - SetFlag(0, False); - Initialized := False; - // a Crypto Fanatican say: this is better !! - FillChar(FVector^, FBufSize, $AA); - FillChar(FFeedback^, FBufSize, $AA); - FillChar(FBuffer^, FBufSize, $AA); - FillChar(FUser^, FUserSize, $AA); - - FillChar(FVector^, FBufSize, $55); - FillChar(FFeedback^, FBufSize, $55); - FillChar(FBuffer^, FBufSize, $55); - FillChar(FUser^, FUserSize, $55); - - FillChar(FVector^, FBufSize, $FF); - FillChar(FFeedback^, FBufSize, $FF); - FillChar(FBuffer^, FBufSize, 0); - FillChar(FUser^, FUserSize, 0); -end; - -function TROCipher.GetHash: TROHash; -begin - if not IsObject(FHash, TROHash) then - begin - if FHashClass = nil then - FHashClass := DefaultHashClass; - FHash := FHashClass.Create(nil); - FHash.AddRef; - end; - Result := FHash; -end; - -procedure TROCipher.SetHashClass(Value: TROHashClass); -begin - if Value <> FHashClass then - begin - FHash.release; - FHash := nil; - FHashClass := Value; - if FHashClass = nil then - FHashClass := DefaultHashClass; - end; -end; - -procedure TROCipher.InternalCodeStream(Source, Dest: TStream; DataSize: Integer; Encode: Boolean); -const - maxBufSize = 1024 * 4; -var - Buf : PChar; - SPos : Integer; - dPos : Integer; - Len : Integer; - Proc : procedure(const Source; var Dest; DataSize: Integer) of object; - Size : Integer; -begin - if Source = nil then - Exit; - if Encode or (Mode in [cmCBCMAC, cmCTSMAC, cmCFBMAC]) then - Proc := EncodeBuffer - else - Proc := DecodeBuffer; - if Dest = nil then - Dest := Source; - if DataSize < 0 then - begin - DataSize := Source.Size; - Source.Position := 0; - end; - Buf := nil; - Size := DataSize; - DoProgress(Self, 0, Size); - try - Buf := AllocMem(maxBufSize); - dPos := Dest.Position; - SPos := Source.Position; - if Mode in [cmCTSMAC, cmCBCMAC, cmCFBMAC] then - begin - while DataSize > 0 do - begin - Len := DataSize; - if Len > maxBufSize then - Len := maxBufSize; - Len := Source.read(Buf^, Len); - if Len <= 0 then - Break; - Proc(Buf^, Buf^, Len); - Dec(DataSize, Len); - DoProgress(Self, Size - DataSize, Size); - end; - end - else - while DataSize > 0 do - begin - Source.Position := SPos; - Len := DataSize; - if Len > maxBufSize then - Len := maxBufSize; - Len := Source.read(Buf^, Len); - SPos := Source.Position; - if Len <= 0 then - Break; - Proc(Buf^, Buf^, Len); - Dest.Position := dPos; - Dest.Write(Buf^, Len); - dPos := Dest.Position; - Dec(DataSize, Len); - DoProgress(Self, Size - DataSize, Size); - end; - finally - DoProgress(Self, 0, 0); - ReallocMem(Buf, 0); - end; -end; - -procedure TROCipher.InternalCodeFile(const Source, Dest: string; Encode: Boolean); -var - S, d : tfilestream; -begin - S := nil; - d := nil; - try - if Mode in [cmCBCMAC, cmCTSMAC, cmCFBMAC] then - begin - S := tfilestream.Create(Source, fmOpenRead or fmShareDenyNone); - d := S; - end - else - if (AnsiCompareText(Source, Dest) <> 0) and (Trim(Dest) <> '') then - begin - S := tfilestream.Create(Source, fmOpenRead or fmShareDenyNone); - d := tfilestream.Create(Dest, fmCreate); - end - else - begin - S := tfilestream.Create(Source, fmOpenReadWrite); - d := S; - end; - InternalCodeStream(S, d, -1, Encode); - finally - S.Free; - if S <> d then - begin - {$IFDEF VER_D3H} - d.Size := d.Position; - {$ENDIF} - d.Free; - end; - end; -end; - -procedure TROCipher.EncodeStream(const Source, Dest: TStream; DataSize: Integer); -begin - InternalCodeStream(Source, Dest, DataSize, True); -end; - -procedure TROCipher.DecodeStream(const Source, Dest: TStream; DataSize: Integer); -begin - InternalCodeStream(Source, Dest, DataSize, False); -end; - -procedure TROCipher.EncodeFile(const Source, Dest: string); -begin - InternalCodeFile(Source, Dest, True); -end; - -procedure TROCipher.DecodeFile(const Source, Dest: string); -begin - InternalCodeFile(Source, Dest, False); -end; - -function TROCipher.EncodeString(const Source: string): string; -begin - SetLength(Result, Length(Source)); - EncodeBuffer(PChar(Source)^, PChar(Result)^, Length(Source)); - if Mode in [cmCBCMAC, cmCTSMAC, cmCFBMAC] then - Result := ''; -end; - -function TROCipher.DecodeString(const Source: string): string; -begin - SetLength(Result, Length(Source)); - DecodeBuffer(PChar(Source)^, PChar(Result)^, Length(Source)); - if Mode in [cmCBCMAC, cmCTSMAC, cmCFBMAC] then - Result := ''; -end; - -procedure TROCipher.EncodeBuffer(const Source; var Dest; DataSize: Integer); -var - S, d, f : PByte; -begin - if not Initialized then - RaiseCipherException(errNotInitialized, Format(sNotInitialized, [ClassName])); - S := @Source; - d := @Dest; - case FMode of - cmECB: - begin - if S <> d then - Move(S^, d^, DataSize); - while DataSize >= FBufSize do - begin - Encode(d); - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - if DataSize > 0 then - begin - Move(d^, FBuffer^, DataSize); - Encode(FBuffer); - Move(FBuffer^, d^, DataSize); - end; - end; - cmCTS: - begin - while DataSize >= FBufSize do - begin - XORBuffers(S, FFeedback, FBufSize, d); - Encode(d); - XORBuffers(d, FFeedback, FBufSize, FFeedback); - Inc(S, FBufSize); - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(S, FBuffer, DataSize, d); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCBC: - begin - f := FFeedback; - while DataSize >= FBufSize do - begin - XORBuffers(S, f, FBufSize, d); - Encode(d); - f := d; - Inc(S, FBufSize); - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - Move(f^, FFeedback^, FBufSize); - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(S, FBuffer, DataSize, d); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCFB: - while DataSize > 0 do - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - d^ := S^ xor PByte(FBuffer)^; - Move(PByteArray(FFeedback)[1], FFeedback^, FBufSize - 1); - PByteArray(FFeedback)[FBufSize - 1] := d^; - Inc(d); - Inc(S); - Dec(DataSize); - end; - cmOFB: - while DataSize > 0 do - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - d^ := S^ xor PByte(FBuffer)^; - Move(PByteArray(FFeedback)[1], FFeedback^, FBufSize - 1); - PByteArray(FFeedback)[FBufSize - 1] := PByte(FBuffer)^; - Inc(d); - Inc(S); - Dec(DataSize); - end; - cmCTSMAC: - begin - while DataSize >= FBufSize do - begin - XORBuffers(S, FFeedback, FBufSize, FBuffer); - Encode(FBuffer); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - Inc(S, FBufSize); - Dec(DataSize, FBufSize); - end; - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCBCMAC: - begin - while DataSize >= FBufSize do - begin - XORBuffers(S, FFeedback, FBufSize, FBuffer); - Encode(FBuffer); - Move(FBuffer^, FFeedback^, FBufSize); - Inc(S, FBufSize); - Dec(DataSize, FBufSize); - end; - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCFBMAC: - while DataSize > 0 do - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - Move(PByteArray(FFeedback)[1], FFeedback^, FBufSize - 1); - PByteArray(FFeedback)[FBufSize - 1] := S^ xor PByte(FBuffer)^; - Inc(S); - Dec(DataSize); - end; - end; -end; - -procedure TROCipher.DecodeBuffer(const Source; var Dest; DataSize: Integer); -var - S, d, f, b : PByte; -begin - if not Initialized then - RaiseCipherException(errNotInitialized, Format(sNotInitialized, [ClassName])); - S := @Source; - d := @Dest; - case FMode of - cmECB: - begin - if S <> d then - Move(S^, d^, DataSize); - while DataSize >= FBufSize do - begin - Decode(d); - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - if DataSize > 0 then - begin - Move(d^, FBuffer^, DataSize); - Encode(FBuffer); - Move(FBuffer^, d^, DataSize); - end; - end; - cmCTS: - begin - if S <> d then - Move(S^, d^, DataSize); - f := FFeedback; - b := FBuffer; - while DataSize >= FBufSize do - begin - XORBuffers(d, f, FBufSize, b); - Decode(d); - XORBuffers(d, f, FBufSize, d); - S := b; - b := f; - f := S; - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - if f <> FFeedback then - Move(f^, FFeedback^, FBufSize); - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(FBuffer, d, DataSize, d); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCBC: - begin - if S <> d then - Move(S^, d^, DataSize); - f := FFeedback; - b := FBuffer; - while DataSize >= FBufSize do - begin - Move(d^, b^, FBufSize); - Decode(d); - XORBuffers(f, d, FBufSize, d); - S := b; - b := f; - f := S; - Inc(d, FBufSize); - Dec(DataSize, FBufSize); - end; - if f <> FFeedback then - Move(f^, FFeedback^, FBufSize); - if DataSize > 0 then - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - XORBuffers(d, FBuffer, DataSize, d); - XORBuffers(FBuffer, FFeedback, FBufSize, FFeedback); - end; - end; - cmCFB: - while DataSize > 0 do - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - Move(PByteArray(FFeedback)[1], FFeedback^, FBufSize - 1); - PByteArray(FFeedback)[FBufSize - 1] := S^; - d^ := S^ xor PByte(FBuffer)^; - Inc(d); - Inc(S); - Dec(DataSize); - end; - cmOFB: - while DataSize > 0 do - begin - Move(FFeedback^, FBuffer^, FBufSize); - Encode(FBuffer); - d^ := S^ xor PByte(FBuffer)^; - Move(PByteArray(FFeedback)[1], FFeedback^, FBufSize - 1); - PByteArray(FFeedback)[FBufSize - 1] := PByte(FBuffer)^; - Inc(d); - Inc(S); - Dec(DataSize); - end; - cmCTSMAC, cmCBCMAC, cmCFBMAC: - begin - EncodeBuffer(Source, Dest, DataSize); - Exit; - end; - end; -end; - -procedure TROCipher.CodeInit(Action: TPAction); -begin - if not Initialized then - RaiseCipherException(errNotInitialized, Format(sNotInitialized, [ClassName])); - { if (Mode in [cmCBCMAC, cmCTSMAC, cmCFBMAC]) <> (Action = paCalc) then - RaiseCipherException(errCantCalc, Format(sCantCalc, [ClassName]));} - if Action <> paCalc then - if Action <> paWipe then - Done - else - RndXORBuffer(RndTimeSeed, FFeedback^, FBufSize); - inherited CodeInit(Action); -end; - -procedure TROCipher.CodeDone(Action: TPAction); -begin - inherited CodeDone(Action); - if Action <> paCalc then - if Action <> paWipe then - Done - else - RndXORBuffer(RndTimeSeed, FFeedback^, FBufSize); -end; - -procedure TROCipher.CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); -begin - if Action = paDecode then - begin - if Action in Actions then - DecodeBuffer(Buffer, Buffer, BufferSize); - inherited CodeBuf(Buffer, BufferSize, Action); - end - else - begin - inherited CodeBuf(Buffer, BufferSize, Action); - if Action in Actions then - EncodeBuffer(Buffer, Buffer, BufferSize); - end; -end; - -function TROCipher.CalcMAC(Format: Integer): string; -var - b : PByteArray; -begin - if Mode in [cmECB, cmOFB] then - RaiseCipherException(errInvalidMACMode, sInvalidMACMode); - Done; - b := AllocMem(FBufSize); - try - Move(FBuffer^, b^, FBufSize); - EncodeBuffer(b^, b^, FBufSize); - SetLength(Result, FBufSize); - Move(FFeedback^, PChar(Result)^, FBufSize); - if Protection <> nil then - Result := Protection.CodeString(Result, paScramble, Format) - else - Result := StrToFormat(PChar(Result), Length(Result), Format); - finally - ReallocMem(b, 0); - Done; - end; -end; - -class procedure TROCipher_Gost.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 32; - AUserSize := 32; -end; - -class function TROCipher_Gost.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0B3h,003h,0A0h,03Fh,0B5h,07Bh,091h,04Dh - DB 097h,051h,024h,040h,0BDh,0CFh,025h,015h - DB 034h,005h,09Ch,0F8h,0ABh,010h,086h,09Fh - DB 0F2h,080h,047h,084h,047h,09Bh,01Ah,0D1h -end; - -type - PCipherRec = ^TCipherRec; - TCipherRec = packed record - case Integer of - 0: (x: array[0..7] of Byte); - 1: (A, b: LongWord); - end; - -procedure TROCipher_Gost.Encode(Data: Pointer); -var - i, A, b, t : LongWord; - k : pintarray; -begin - k := User; - A := PCipherRec(Data).A; - b := PCipherRec(Data).b; - for i := 0 to 11 do - begin - if i and 3 = 0 then - k := User; - 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]; - Inc(PInteger(k), 2); - end; - k := @pintarray(User)[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(PInteger(k), 2); - end; - PCipherRec(Data).A := b; - PCipherRec(Data).b := A; -end; - -procedure TROCipher_Gost.Decode(Data: Pointer); -var - i, A, b, t : LongWord; - k : pintarray; -begin - A := PCipherRec(Data).A; - b := PCipherRec(Data).b; - k := User; - 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]; - Inc(PInteger(k), 2); - end; - for i := 0 to 11 do - begin - if i and 3 = 0 then - k := @pintarray(User)[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(PInteger(k), 2); - end; - PCipherRec(Data).A := b; - PCipherRec(Data).b := A; -end; - -procedure TROCipher_Gost.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitBegin(Size); - Move(Key, User^, Size); - InitEnd(IVector); -end; - -class procedure TROCipher_Blowfish.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 56; - AUserSize := SizeOf(Blowfish_Data) + SizeOf(Blowfish_Key); -end; - -class function TROCipher_Blowfish.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 019h,071h,0CAh,0CDh,02Bh,09Ch,085h,029h - DB 0DAh,081h,047h,0B7h,0EBh,0CEh,016h,0C6h - DB 091h,00Eh,01Dh,0C8h,040h,012h,03Eh,035h - DB 070h,0EDh,0BCh,096h,04Ch,013h,0D0h,0B8h -end; - -type - PBlowfish = ^TBlowfish; - TBlowfish = array[0..3, 0..255] of LongWord; - - {$IFDEF UseASM} - {$IFNDEF 486GE} // no Support for <= CPU 386 - -procedure TROCipher_Blowfish.Encode386(Data: Pointer); -asm // specaly for CPU < 486 - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV ESI,[EAX].TROCipher_Blowfish.FUser - - MOV EBX,[EDX] // A - MOV EDX,[EDX + 4] // B - - XCHG BL,BH // here BSWAP EBX,EDX - XCHG DL,DH - ROL EBX,16 - ROL EDX,16 - XCHG BL,BH - XCHG DL,DH - - XOR EBX,[ESI + 4 * 256 * 4] - XOR EDI,EDI - -@@1: MOV EAX,EBX - SHR EBX,16 - - MOVZX ECX,BH - MOV EBP,[ESI + ECX * 4 + 1024 * 0] - MOVZX ECX,BL - ADD EBP,[ESI + ECX * 4 + 1024 * 1] - - MOVZX ECX,AH - XOR EBP,[ESI + ECX * 4 + 1024 * 2] - MOVZX ECX,AL - ADD EBP,[ESI + ECX * 4 + 1024 * 3] - XOR EDX,[ESI + 4 * 256 * 4 + 4 + EDI * 4] - - XOR EBP,EDX - MOV EDX,EAX - MOV EBX,EBP - INC EDI - TEST EDI,010h - JZ @@1 - - POP EAX - XOR EDX,[ESI + 4 * 256 * 4 + 17 * 4] - - XCHG BL,BH // here BSWAP EBX,EDX - XCHG DL,DH - ROL EBX,16 - ROL EDX,16 - XCHG BL,BH - XCHG DL,DH - - MOV [EAX],EDX - MOV [EAX + 4],EBX - - POP EBP - POP EBX - POP ESI - POP EDI -end; - -procedure TROCipher_Blowfish.Decode386(Data: Pointer); -asm // specaly for CPU < 486 - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV ESI,[EAX].TROCipher_Blowfish.FUser - - MOV EBX,[EDX] // A - MOV EDX,[EDX + 4] // B - - XCHG BL,BH - XCHG DL,DH - ROL EBX,16 - ROL EDX,16 - XCHG BL,BH - XCHG DL,DH - - XOR EBX,[ESI + 4 * 256 * 4 + 17 * 4] - - MOV EDI,16 - -@@1: MOV EAX,EBX - SHR EBX,16 - - MOVZX ECX,BH - MOV EBP,[ESI + ECX * 4 + 1024 * 0] - MOVZX ECX,BL - ADD EBP,[ESI + ECX * 4 + 1024 * 1] - - MOVZX ECX,AH - XOR EBP,[ESI + ECX * 4 + 1024 * 2] - MOVZX ECX,AL - ADD EBP,[ESI + ECX * 4 + 1024 * 3] - XOR EDX,[ESI + 4 * 256 * 4 + EDI * 4] - - XOR EBP,EDX - MOV EDX,EAX - MOV EBX,EBP - - DEC EDI - JNZ @@1 - - POP EAX - XOR EDX,[ESI + 4 * 256 * 4] - - XCHG BL,BH // BSWAP - XCHG DL,DH - ROL EBX,16 - ROL EDX,16 - XCHG BL,BH - XCHG DL,DH - - MOV [EAX],EDX - MOV [EAX + 4],EBX - - POP EBP - POP EBX - POP ESI - POP EDI -end; -{$ENDIF} //486GE -{$ENDIF} - -procedure TROCipher_Blowfish.Encode(Data: Pointer); -{$IFDEF UseASM} // specialy for CPU >= 486 -asm - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV ESI,[EAX].TROCipher_Blowfish.FUser - MOV EBX,[EDX] // A - MOV EBP,[EDX + 4] // B - - BSWAP EBX // CPU >= 486 - BSWAP EBP - - XOR EDI,EDI - XOR EBX,[ESI + 4 * 256 * 4] -// XOR ECX,ECX -@@1: - - MOV EAX,EBX - SHR EBX,16 - MOVZX ECX,BH // it's faster with AMD Chips, -// MOV CL,BH // it's faster with PII's - MOV EDX,[ESI + ECX * 4 + 1024 * 0] - MOVZX ECX,BL -// MOV CL,BL - ADD EDX,[ESI + ECX * 4 + 1024 * 1] - - MOVZX ECX,AH -// MOV CL,AH - XOR EDX,[ESI + ECX * 4 + 1024 * 2] - MOVZX ECX,AL -// MOV CL,AL - ADD EDX,[ESI + ECX * 4 + 1024 * 3] - XOR EBP,[ESI + 4 * 256 * 4 + 4 + EDI * 4] - - INC EDI - XOR EDX,EBP - TEST EDI,010h - MOV EBP,EAX - MOV EBX,EDX - JZ @@1 - - POP EAX - XOR EBP,[ESI + 4 * 256 * 4 + 17 * 4] - - BSWAP EBX - BSWAP EBP - - MOV [EAX],EBP - MOV [EAX + 4],EBX - - POP EBP - POP EBX - POP ESI - POP EDI -end; -{$ELSE} -var - i, A, b : LongWord; - p : pintarray; - d : PBlowfish; -begin - d := User; - p := Pointer(PChar(User) + SizeOf(Blowfish_Data)); - A := SwapInteger(PCipherRec(Data).A) xor p[0]; - Inc(PInteger(p)); - b := SwapInteger(PCipherRec(Data).b); - for i := 0 to 7 do - begin - 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]); - Inc(PInteger(p), 2); - end; - PCipherRec(Data).A := SwapInteger(b xor p[0]); - PCipherRec(Data).b := SwapInteger(A); -end; -{$ENDIF} - -procedure TROCipher_Blowfish.Decode(Data: Pointer); -{$IFDEF UseASM} -asm - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV ESI,[EAX].TROCipher_Blowfish.FUser - MOV EBX,[EDX] // A - MOV EBP,[EDX + 4] // B - - BSWAP EBX - BSWAP EBP - - XOR EBX,[ESI + 4 * 256 * 4 + 17 * 4] - MOV EDI,16 -// XOR ECX,ECX - -@@1: MOV EAX,EBX - SHR EBX,16 - - MOVZX ECX,BH -// MOV CL,BH - MOV EDX,[ESI + ECX * 4 + 1024 * 0] - MOVZX ECX,BL -// MOV CL,BL - ADD EDX,[ESI + ECX * 4 + 1024 * 1] - - MOVZX ECX,AH -// MOV CL,AH - XOR EDX,[ESI + ECX * 4 + 1024 * 2] - MOVZX ECX,AL -// MOV CL,AL - ADD EDX,[ESI + ECX * 4 + 1024 * 3] - XOR EBP,[ESI + 4 * 256 * 4 + EDI * 4] - - XOR EDX,EBP - DEC EDI - MOV EBP,EAX - MOV EBX,EDX - JNZ @@1 - - POP EAX - XOR EBP,[ESI + 4 * 256 * 4] - - BSWAP EBX - BSWAP EBP - - MOV [EAX],EBP - MOV [EAX + 4],EBX - - POP EBP - POP EBX - POP ESI - POP EDI -end; -{$ELSE} -var - i, A, b : LongWord; - p : pintarray; - d : PBlowfish; -begin - d := User; - p := Pointer(PChar(User) + SizeOf(Blowfish_Data) + SizeOf(Blowfish_Key) - SizeOf(Integer)); - A := SwapInteger(PCipherRec(Data).A) xor p[0]; - b := SwapInteger(PCipherRec(Data).b); - for i := 0 to 7 do - begin - Dec(PInteger(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(PInteger(p)); - PCipherRec(Data).A := SwapInteger(b xor p[0]); - PCipherRec(Data).b := SwapInteger(A); -end; -{$ENDIF} - -procedure TROCipher_Blowfish.Init(const Key; Size: Integer; IVector: Pointer); -var - i, j : Integer; - b : array[0..7] of Byte; - k : PByteArray; - p : pintarray; - S : PBlowfish; -begin - InitBegin(Size); - k := @Key; - S := User; - p := Pointer(PChar(User) + SizeOf(Blowfish_Data)); - Move(Blowfish_Data, S^, SizeOf(Blowfish_Data)); - Move(Blowfish_Key, p^, SizeOf(Blowfish_Key)); - j := 0; - 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]); - j := (j + 4) mod Size; - end; - FillChar(b, SizeOf(b), 0); - for i := 0 to 8 do - begin - Encode(@b); - p[i * 2] := SwapInteger(PCipherRec(@b).A); - p[i * 2 + 1] := SwapInteger(PCipherRec(@b).b); - end; - for i := 0 to 3 do - for j := 0 to 127 do - begin - Encode(@b); - S[i, j * 2] := SwapInteger(PCipherRec(@b).A); - S[i, j * 2 + 1] := SwapInteger(PCipherRec(@b).b); - end; - - FillChar(b, SizeOf(b), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_IDEA.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 208; -end; - -class function TROCipher_IDEA.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 08Ch,065h,0CAh,0D8h,043h,0E7h,099h,093h - DB 0EDh,041h,0EAh,048h,0FDh,066h,050h,094h - DB 0A2h,025h,06Dh,0D7h,0B1h,0D0h,09Ah,023h - DB 03Dh,0D2h,0E8h,0ECh,0C9h,045h,07Fh,07Eh -end; - -function IDEAMul(x, y: LongWord): LongWord; assembler; register; -asm - AND EAX,0FFFFh - JZ @@1 - AND EDX,0FFFFh - JZ @@1 - MUL EDX - MOV ECX,EAX - MOV EDX,EAX - SHR EDX,16 - SUB EAX,EDX - CMP AX,CX - JNA @@2 - INC EAX -@@2: RET -@@1: MOV ECX,1 - SUB ECX,EAX - SUB ECX,EDX - MOV EAX,ECX -end; - -procedure TROCipher_IDEA.RO_Cipher(Data, Key: PWordArray); -var - i : LongWord; - x, y, A, b, c, d : LongWord; -begin - i := SwapInteger(pintarray(Data)[0]); - A := LongRec(i).Hi; - b := LongRec(i).Lo; - i := SwapInteger(pintarray(Data)[1]); - c := LongRec(i).Hi; - d := LongRec(i).Lo; - 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; - Inc(PWord(Key), 6); - end; - LongRec(i).Hi := IDEAMul(A, Key[0]); - LongRec(i).Lo := c + Key[1]; - pintarray(Data)[0] := SwapInteger(i); - LongRec(i).Hi := b + Key[2]; - LongRec(i).Lo := IDEAMul(d, Key[3]); - pintarray(Data)[1] := SwapInteger(i); -end; - -procedure TROCipher_IDEA.Encode(Data: Pointer); -begin - RO_Cipher(Data, User); -end; - -procedure TROCipher_IDEA.Decode(Data: Pointer); -begin - RO_Cipher(Data, @pintarray(User)[26]); -end; - -procedure TROCipher_IDEA.Init(const Key; Size: Integer; IVector: Pointer); - - 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 - InitBegin(Size); - e := User; - 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; - InitEnd(IVector); -end; - -type - PSAFERRec = ^TSAFERRec; - TSAFERRec = packed record - case Integer of - 0: (A, b, c, d, e, f, G, H: Byte); - 1: (x, y: Integer); - end; - -procedure TROCipher_SAFER.SetRounds(Value: Integer); -begin - if (Value < 4) or (Value > 13) then - case FSAFERMode of {Default Rounds} - smK40, smSK40: Value := 5; - smK64, smSK64: Value := 6; - smK128, smSK128: Value := 10; - else - Value := 8; - end; - FRounds := Value; -end; - -class procedure TROCipher_SAFER.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 768; -end; - -class function TROCipher_SAFER.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 000h,03Dh,049h,020h,073h,063h,085h,0AAh - DB 0D9h,0C2h,00Ah,0DEh,07Eh,09Eh,0E9h,0ABh - DB 024h,0D0h,074h,034h,047h,07Eh,021h,01Dh - DB 055h,0F9h,035h,028h,098h,084h,0A8h,075h -end; - -procedure TROCipher_SAFER.Encode(Data: Pointer); -var - EXP, Log, Key : PByteArray; - i : Integer; - t : Byte; -begin - EXP := User; - Log := Pointer(PChar(User) + 256); - Key := Pointer(PChar(User) + 512); - with PSAFERRec(Data)^ do - begin - for i := 1 to FRounds 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; - - Inc(PByte(Key), 16); - end; - 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]; - end; -end; - -procedure TROCipher_SAFER.Decode(Data: Pointer); -var - EXP, Log, Key : PByteArray; - i : Integer; - t : Byte; -begin - EXP := User; - Log := Pointer(PChar(User) + 256); - Key := Pointer(PChar(User) + 504 + 8 * (FRounds * 2 + 1)); - with PSAFERRec(Data)^ do - begin - H := H xor Key[7]; - G := G - Key[6]; - f := f - Key[5]; - e := e xor Key[4]; - d := d xor Key[3]; - c := c - Key[2]; - b := b - Key[1]; - A := A xor Key[0]; - - for i := 1 to FRounds 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; - end; -end; - -procedure TROCipher_SAFER.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smStrong); -end; - -procedure TROCipher_SAFER.InitNew(const Key; Size: Integer; IVector: Pointer; SAFERMode: TSAFERMode); - - procedure InitTab; - var - i, e : Integer; - EXP : PByte; - Log : PByteArray; - begin - EXP := User; - Log := Pointer(PChar(User) + 256); - e := 1; - for i := 0 to 255 do - begin - EXP^ := e and $FF; - Log[e and $FF] := i; - e := (e * 45) mod 257; - Inc(EXP); - end; - end; - - procedure InitKey; - - function ROR3(Value: Byte): Byte; assembler; - asm - ROR AL,3 - end; - - function ROL6(Value: Byte): Byte; assembler; - asm - ROL AL,6 - end; - - var - d : PByte; - EXP : PByteArray; - Strong : Boolean; - k : array[Boolean, 0..8] of Byte; - i, j : Integer; - begin - Strong := FSAFERMode in [smStrong, smSK40, smSK64, smSK128]; - EXP := User; - d := User; - Inc(d, 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 FSAFERMode in [smK40, smSK40] 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] := ROR3(k[False, i]); - - for i := 1 to FRounds do - begin - for j := 0 to 8 do - begin - k[False, j] := ROL6(k[False, j]); - k[True, j] := ROL6(k[True, j]); - 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; - FillChar(k, SizeOf(k), 0); - end; - -begin - InitBegin(Size); - FSAFERMode := SAFERMode; - if SAFERMode = smDefault then - if Size <= 5 then - FSAFERMode := smK40 - else - if Size <= 8 then - FSAFERMode := smK64 - else - FSAFERMode := smK128 - else - if SAFERMode = smStrong then - if Size <= 5 then - FSAFERMode := smSK40 - else - if Size <= 8 then - FSAFERMode := smSK64 - else - FSAFERMode := smSK128; - SetRounds(FRounds); - InitTab; - InitKey; - InitEnd(IVector); -end; - -class procedure TROCipher_SAFER_K40.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - AKeySize := 5; -end; - -class function TROCipher_SAFER_K40.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 005h,0B4h,019h,057h,026h,05Ch,013h,060h - DB 0A0h,082h,094h,045h,0D6h,0A5h,046h,0D8h - DB 073h,050h,096h,080h,04Fh,06Dh,0F7h,0E5h - DB 0C8h,01Ah,0EFh,044h,04Ch,0B4h,059h,013h -end; - -procedure TROCipher_SAFER_K40.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smK40); -end; - -class function TROCipher_SAFER_SK40.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D9h,003h,003h,06Dh,018h,038h,0D1h,0C1h - DB 089h,0E8h,038h,012h,07Fh,028h,0FCh,0C7h - DB 0C5h,00Bh,0B7h,0C4h,0DBh,021h,0A4h,031h - DB 020h,008h,08Ah,077h,0F7h,0DFh,026h,0FFh -end; - -procedure TROCipher_SAFER_SK40.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smSK40); -end; - -class procedure TROCipher_SAFER_K64.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - AKeySize := 8; -end; - -class function TROCipher_SAFER_K64.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 08Ch,0B2h,032h,0F0h,00Eh,0C2h,0DAh,0CBh - DB 039h,008h,02Dh,05Ch,093h,0FFh,0CEh,0F3h - DB 08Fh,01Fh,0B7h,02Ch,0C5h,0C7h,0A7h,0E9h - DB 089h,0BEh,061h,08Bh,000h,0E6h,09Fh,00Eh -end; - -procedure TROCipher_SAFER_K64.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smK64); -end; - -class function TROCipher_SAFER_SK64.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0DDh,09Ch,01Ah,0D6h,029h,00Ch,0EEh,04Fh - DB 0E5h,04Bh,0C0h,055h,0BFh,022h,00Eh,0BCh - DB 019h,041h,078h,0CFh,094h,0DBh,02Fh,039h - DB 06Bh,01Eh,0A7h,0CAh,04Bh,05Fh,077h,0E0h -end; - -procedure TROCipher_SAFER_SK64.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smSK64); -end; - -class procedure TROCipher_SAFER_K128.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - AKeySize := 16; -end; - -class function TROCipher_SAFER_K128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 00Ch,0A9h,070h,0B9h,0F3h,014h,087h,0D9h - DB 09Eh,05Eh,078h,031h,074h,0DFh,0A8h,0BBh - DB 03Dh,040h,0A5h,0D9h,08Ch,07Ch,004h,0B7h - DB 09Ch,001h,0DAh,063h,0ABh,026h,035h,0BCh -end; - -procedure TROCipher_SAFER_K128.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smK128); -end; - -class function TROCipher_SAFER_SK128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0C8h,0A6h,070h,033h,029h,038h,038h,02Bh - DB 069h,0ACh,061h,072h,08Fh,0DCh,09Fh,0A4h - DB 09Eh,06Fh,0C4h,053h,0D8h,089h,0FFh,042h - DB 072h,009h,07Dh,0CDh,0D0h,0EAh,07Eh,028h -end; - -procedure TROCipher_SAFER_SK128.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitNew(Key, Size, IVector, smSK128); -end; - -type - PTEARec = ^TTEARec; - TTEARec = packed record - A, b, c, d: LongWord; - end; - -const - TEA_Delta = $9E3779B9; - -procedure TROCipher_TEA.SetRounds(Value: Integer); -begin - FRounds := Value; - if FRounds < 16 then - FRounds := 16 - else - if FRounds > 32 then - FRounds := 32; -end; - -class procedure TROCipher_TEA.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 32; -end; - -class function TROCipher_TEA.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0B7h,0B8h,0AAh,0BBh,026h,04Bh,006h,0F9h - DB 070h,086h,0B0h,0E4h,056h,004h,029h,0CCh - DB 0BFh,055h,0EAh,04Eh,0EFh,059h,026h,018h - DB 019h,0B0h,003h,07Ch,029h,08Ch,0E2h,077h -end; - -procedure TROCipher_TEA.Encode(Data: Pointer); -{$IFDEF UseASM} -asm - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV EBX,[EDX] // X - MOV EDX,[EDX + 4] // Y - XOR EDI,EDI // Sum - - MOV ESI,[EAX].TROCipher_TEA.FUser // User - MOV ECX,[EAX].TROCipher_TEA.FRounds // Rounds - -@@1: ADD EDI,TEA_Delta - - MOV EAX,EDX - MOV EBP,EDX - SHL EAX,4 - SHR EBP,5 - ADD EAX,[ESI] - ADD EBP,[ESI + 4] - XOR EAX,EDX - ADD EAX,EDI - - XOR EAX,EBP - ADD EAX,EBX - MOV EBX,EAX - SHL EAX,4 - MOV EBP,EBX - SHR EBP,5 - ADD EAX,[ESI + 8] - XOR EAX,EBX - ADD EBP,[ESI + 12] - ADD EAX,EDI - - XOR EAX,EBP - ADD EDX,EAX - - DEC ECX - JNZ @@1 - - POP EAX - MOV [EAX],EBX - MOV [EAX + 4],EDX - - POP EBP - POP EBX - POP ESI - POP EDI -end; -{$ELSE} -var - i, sum, x, y : LongWord; -begin - sum := 0; - x := PTEARec(Data).A; - y := PTEARec(Data).b; - with PTEARec(User)^ do - for i := 1 to FRounds 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; - PTEARec(Data).A := x; - PTEARec(Data).b := y; -end; -{$ENDIF} - -procedure TROCipher_TEA.Decode(Data: Pointer); -{$IFDEF UseASM} -asm - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV EBX,[EDX] // X - MOV EDX,[EDX + 4] // Y - - MOV ESI,[EAX].TROCipher_TEA.FUser // User - MOV EDI,TEA_Delta - MOV ECX,[EAX].TROCipher_TEA.FRounds // Rounds - IMUL EDI,ECX - -@@1: MOV EAX,EBX - MOV EBP,EBX - SHL EAX,4 - SHR EBP,5 - ADD EAX,[ESI + 8] - ADD EBP,[ESI + 12] - XOR EAX,EBX - ADD EAX,EDI - XOR EAX,EBP - SUB EDX,EAX - MOV EAX,EDX - SHL EAX,4 - MOV EBP,EDX - SHR EBP,5 - ADD EAX,[ESI] - XOR EAX,EDX - ADD EBP,[ESI + 4] - ADD EAX,EDI - - XOR EAX,EBP - SUB EDI,TEA_Delta - SUB EBX,EAX - - DEC ECX - JNZ @@1 - - POP EAX - MOV [EAX],EBX - MOV [EAX + 4],EDX - - POP EBP - POP EBX - POP ESI - POP EDI -end; -{$ELSE} -var - i, sum, x, y : LongWord; -begin - sum := TEA_Delta * LongWord(FRounds); - x := PTEARec(Data).A; - y := PTEARec(Data).b; - with PTEARec(User)^ do - for i := 1 to FRounds 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; - PTEARec(Data).A := x; - PTEARec(Data).b := y; -end; -{$ENDIF} - -procedure TROCipher_TEA.Init(const Key; Size: Integer; IVector: Pointer); -begin - InitBegin(Size); - Move(Key, User^, Size); - SetRounds(FRounds); - InitEnd(IVector); -end; - -class function TROCipher_TEAN.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0CDh,07Eh,0BBh,0A2h,092h,01Ah,04Bh,03Bh - DB 0E2h,09Eh,062h,0CFh,0F7h,01Dh,0A5h,0DFh - DB 063h,033h,094h,029h,0E2h,036h,07Ch,066h - DB 03Fh,0F8h,01Ah,0F9h,002h,078h,0BFh,0A1h -end; - -procedure TROCipher_TEAN.Encode(Data: Pointer); -var - i, sum, x, y : LongWord; - k : pintarray; -begin - sum := 0; - x := PTEARec(Data).A; - y := PTEARec(Data).b; - k := User; - for i := 1 to FRounds 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; - PTEARec(Data).A := x; - PTEARec(Data).b := y; -end; - -procedure TROCipher_TEAN.Decode(Data: Pointer); -var - i, sum, x, y : LongWord; - k : pintarray; -begin - sum := TEA_Delta * LongWord(FRounds); - x := PTEARec(Data).A; - y := PTEARec(Data).b; - k := User; - with PTEARec(User)^ do - for i := 1 to FRounds 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; - PTEARec(Data).A := x; - PTEARec(Data).b := y; -end; - -const - SCOP_SIZE = 32; {is the Maximum} - -class procedure TROCipher_SCOP.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := SCOP_SIZE * SizeOf(Integer); - AKeySize := 48; - AUserSize := (384 * 4 + 4 * SizeOf(Integer)) * 2; -end; - -class function TROCipher_SCOP.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 014h,0C0h,009h,0E8h,073h,0B6h,053h,092h - DB 08Bh,013h,069h,0A9h,0F2h,099h,0FEh,05Eh - DB 0EEh,03Bh,0FDh,0C1h,050h,059h,00Eh,094h - DB 062h,017h,008h,01Eh,0A4h,01Ah,04Dh,08Fh -end; - -procedure TROCipher_SCOP.Encode(Data: Pointer); -var - i, j, w : Byte; - t, t1, T2, T3 : Integer; - p : pintarray; - b : PInteger; -begin - p := User; - i := p[0]; - j := p[1]; - T3 := p[3]; - p := @p[4 + 128]; - b := Data; - for w := 1 to SCOP_SIZE do - begin - t1 := p[j]; - Inc(j, T3); - t := p[i - 128]; - T2 := p[j]; - Inc(i); - T3 := T2 + t; - p[j] := T3; - Inc(j, T2); - Inc(b^, t1 + T2); - Inc(b); - end; -end; - -procedure TROCipher_SCOP.Decode(Data: Pointer); -var - i, j, w : Byte; - t, t1, T2, T3 : Integer; - p : pintarray; - b : PInteger; -begin - p := User; - i := p[0]; - j := p[1]; - T3 := p[3]; - p := @p[4 + 128]; - b := Data; - for w := 1 to SCOP_SIZE do - begin - t1 := p[j]; - Inc(j, T3); - t := p[i - 128]; - T2 := p[j]; - Inc(i); - T3 := T2 + t; - p[j] := T3; - Inc(j, T2); - Dec(b^, t1 + T2); - Inc(b); - end; -end; - -procedure TROCipher_SCOP.Init(const Key; Size: Integer; IVector: Pointer); -var - Init_State : packed record - Coef: array[0..7, 0..3] of Byte; - x: array[0..3] of LongWord; - end; - - procedure ExpandKey; - var - p : PByteArray; - 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: pintarray); - var - i, i2 : Integer; - NewX : array[0..3] of LongWord; - x1, x2, X3, X4 : LongWord; - y1, y2 : LongWord; - begin - i := 0; - while i < 8 do - begin - i2 := i shr 1; - 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(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 : pintarray; -begin - InitBegin(Size); - FillChar(Init_State, SizeOf(Init_State), 0); - FillChar(t, SizeOf(t), 0); - p := Pointer(PChar(User) + 12); - 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 := User; - p[0] := t[3] shr 24; - p[1] := t[3] shr 16; - p[2] := t[3] shr 8; - FillChar(Init_State, SizeOf(Init_State), 0); - InitEnd(IVector); - p := Pointer(PChar(User) + FUserSize shr 1); - Move(User^, p^, FUserSize shr 1); -end; - -procedure TROCipher_SCOP.Done; -begin - inherited Done; - Move(PByteArray(User)[FUserSize shr 1], User^, FUserSize shr 1); -end; - -class procedure TROCipher_Q128.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 16; - AUserSize := 256; -end; - -class function TROCipher_Q128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 099h,0AAh,0D0h,03Dh,0CAh,014h,04Eh,02Ah - DB 0F8h,01Eh,001h,0A0h,0EAh,0ABh,09Fh,048h - DB 023h,02Dh,059h,054h,054h,07Eh,02Bh,012h - DB 086h,080h,0E8h,033h,0EBh,0E1h,05Eh,0AEh -end; - -procedure TROCipher_Q128.Encode(Data: Pointer); -{$IFDEF UseASM} -asm - PUSH ESI - PUSH EDI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV EDI,[EAX].TROCipher_Q128.FUser - - MOV EAX,[EDX] // B0 - MOV EBX,[EDX + 4] // B1 - MOV ECX,[EDX + 8] // B2 - MOV EDX,[EDX + 12] // B3 - - MOV EBP,16 - -@@1: MOV ESI,EAX - AND EAX,03FFh - MOV EAX,[EAX * 4 + OFFSET Q128_DATA] - ROL ESI,10 - ADD EAX,[EDI] - XOR EAX,EBX - - MOV EBX,EAX - AND EAX,03FFh - MOV EAX,[EAX * 4 + OFFSET Q128_DATA] - ROL EBX,10 - ADD EAX,[EDI + 4] - XOR EAX,ECX - - MOV ECX,EAX - AND EAX,03FFh - MOV EAX,[EAX * 4 + OFFSET Q128_DATA] - ROL ECX,10 - ADD EAX,[EDI + 8] - XOR EAX,EDX - - MOV EDX,EAX - AND EAX,03FFh - MOV EAX,[EAX * 4 + OFFSET Q128_DATA] - ROL EDX,10 - ADD EAX,[EDI + 12] - XOR EAX,ESI - - ADD EDI,16 - - DEC EBP - JNZ @@1 - - POP ESI - - MOV [ESI],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} -var - d : PInteger; - B0, B1, B2, B3, i : LongWord; -begin - d := User; - B0 := pintarray(Data)[0]; - B1 := pintarray(Data)[1]; - B2 := pintarray(Data)[2]; - B3 := pintarray(Data)[3]; - for i := 1 to 16 do - begin - B1 := B1 xor (Q128_Data[B0 and $03FF] + d^); - Inc(d); - B0 := B0 shl 10 or B0 shr 22; - B2 := B2 xor (Q128_Data[B1 and $03FF] + d^); - Inc(d); - B1 := B1 shl 10 or B1 shr 22; - B3 := B3 xor (Q128_Data[B2 and $03FF] + d^); - Inc(d); - B2 := B2 shl 10 or B2 shr 22; - B0 := B0 xor (Q128_Data[B3 and $03FF] + d^); - Inc(d); - B3 := B3 shl 10 or B3 shr 22; - end; - pintarray(Data)[0] := B0; - pintarray(Data)[1] := B1; - pintarray(Data)[2] := B2; - pintarray(Data)[3] := B3; -end; -{$ENDIF} - -procedure TROCipher_Q128.Decode(Data: Pointer); -{$IFDEF UseASM} -asm - PUSH ESI - PUSH EDI - PUSH EBX - PUSH EBP - PUSH EDX - - MOV EDI,[EAX].TROCipher_Q128.FUser - LEA EDI,[EDI + 64 * 4] - - MOV ESI,[EDX] // 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],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} -var - d : PInteger; - B0, B1, B2, B3, i : LongWord; -begin - d := @pintarray(User)[63]; - B0 := pintarray(Data)[0]; - B1 := pintarray(Data)[1]; - B2 := pintarray(Data)[2]; - B3 := pintarray(Data)[3]; - for i := 1 to 16 do - begin - B3 := B3 shr 10 or B3 shl 22; - B0 := B0 xor (Q128_Data[B3 and $03FF] + d^); - Dec(d); - B2 := B2 shr 10 or B2 shl 22; - B3 := B3 xor (Q128_Data[B2 and $03FF] + d^); - Dec(d); - B1 := B1 shr 10 or B1 shl 22; - B2 := B2 xor (Q128_Data[B1 and $03FF] + d^); - Dec(d); - B0 := B0 shr 10 or B0 shl 22; - B1 := B1 xor (Q128_Data[B0 and $03FF] + d^); - Dec(d); - end; - pintarray(Data)[0] := B0; - pintarray(Data)[1] := B1; - pintarray(Data)[2] := B2; - pintarray(Data)[3] := B3; -end; -{$ENDIF} - -procedure TROCipher_Q128.Init(const Key; Size: Integer; IVector: Pointer); -var - k : array[0..3] of LongWord; - i : Integer; - d : PInteger; -begin - InitBegin(Size); - FillChar(k, SizeOf(k), 0); - Move(Key, k, Size); - d := User; - 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^ := k[0]; - Inc(d); - d^ := k[1]; - Inc(d); - d^ := k[2]; - Inc(d); - d^ := k[3]; - Inc(d); - end; - end; - FillChar(k, SizeOf(k), 0); - InitEnd(IVector); -end; - -type - P3Way_Key = ^T3Way_Key; - T3Way_Key = packed record - E_Key: array[0..2] of Integer; - E_Data: array[0..11] of Integer; - D_Key: array[0..2] of Integer; - D_Data: array[0..11] of Integer; - end; - -class procedure TROCipher_3Way.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 12; - AKeySize := 12; - AUserSize := SizeOf(T3Way_Key); -end; - -class function TROCipher_3Way.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 077h,0FCh,077h,094h,07Ch,08Fh,0DEh,021h - DB 0E9h,081h,0DFh,02Ah,0B1h,0BCh,07Eh,0F8h - DB 0A3h,0B6h,044h,04Bh,0B6h,0FCh,079h,0C4h - DB 09Bh,068h,04Fh,009h,0C7h,0BFh,00Eh,005h -end; - -procedure TROCipher_3Way.Encode(Data: Pointer); -var - i : Integer; - A0, A1, A2 : LongWord; - B0, B1, B2 : LongWord; - K0, k1, K2 : LongWord; - e : PLongWord; -begin - with P3Way_Key(User)^ do - begin - K0 := E_Key[0]; - k1 := E_Key[1]; - K2 := E_Key[2]; - e := @E_Data; - end; - A0 := pintarray(Data)[0]; - A1 := pintarray(Data)[1]; - A2 := pintarray(Data)[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; - asm - ROR B0,10 - ROL B2,1 - end; - A0 := B0 xor (B1 or not B2); - A1 := B1 xor (B2 or not B0); - A2 := B2 xor (B0 or not B1); - asm - ROL A0,1 - ROR A2,10 - end; - end; - A0 := A0 xor K0 xor e^ shl 16; - A1 := A1 xor k1; - A2 := A2 xor K2 xor e^; - pintarray(Data)[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; - pintarray(Data)[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; - pintarray(Data)[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 TROCipher_3Way.Decode(Data: Pointer); -var - i : Integer; - A0, A1, A2 : LongWord; - B0, B1, B2 : LongWord; - K0, k1, K2 : LongWord; - e : PLongWord; -begin - with P3Way_Key(User)^ do - begin - K0 := D_Key[0]; - k1 := D_Key[1]; - K2 := D_Key[2]; - e := @D_Data; - end; - A0 := SwapBits(pintarray(Data)[2]); - A1 := SwapBits(pintarray(Data)[1]); - A2 := SwapBits(pintarray(Data)[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; - asm - ROR B0,10 - ROL B2,1 - end; - A0 := B0 xor (B1 or not B2); - A1 := B1 xor (B2 or not B0); - A2 := B2 xor (B0 or not B1); - asm - ROL A0,1 - ROR A2,10 - end; - 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; - - pintarray(Data)[2] := SwapBits(B0); - pintarray(Data)[1] := SwapBits(B1); - pintarray(Data)[0] := SwapBits(B2); -end; - -procedure TROCipher_3Way.Init(const Key; Size: Integer; IVector: Pointer); - - procedure RANDGenerate(start: Integer; var p: array of Integer); - 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 : Integer; - B0, B1, B2 : Integer; -begin - InitBegin(Size); - with P3Way_Key(User)^ do - begin - Move(Key, E_Key, Size); - Move(Key, D_Key, Size); - RANDGenerate($0B0B, E_Data); - RANDGenerate($B1B1, D_Data); - - A0 := D_Key[0]; - A1 := D_Key[1]; - A2 := 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; - D_Key[2] := SwapBits(B0); - D_Key[1] := SwapBits(B1); - D_Key[0] := SwapBits(B2); - end; - InitEnd(IVector); -end; - -class procedure TROCipher_Twofish.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 32; - AUserSize := 4256; -end; - -class function TROCipher_Twofish.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0A5h,053h,057h,003h,0EFh,033h,048h,079h - DB 09Fh,022h,0B4h,054h,097h,005h,084h,019h - DB 087h,0BDh,083h,01Ch,04Dh,0AEh,012h,013h - DB 060h,07Ch,07Ch,0D1h,098h,045h,002h,019h -end; - -type - PTwofishBox = ^TTwofishBox; - TTwofishBox = array[0..3, 0..255] of LongWord; - - TLongRec = record - case Integer of - 0: (L: LongWord); - 1: (A, b, c, d: Byte); - end; - -procedure TROCipher_Twofish.Encode(Data: Pointer); -var - S : pintarray; - Box : PTwofishBox; - i, x, y : LongWord; - A, b, c, d : TLongRec; -begin - S := User; - A.L := pintarray(Data)[0] xor S[0]; - b.L := pintarray(Data)[1] xor S[1]; - c.L := pintarray(Data)[2] xor S[2]; - d.L := pintarray(Data)[3] xor S[3]; - - S := @pintarray(User)[8]; - Box := @pintarray(User)[40]; - 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]; - asm ROL D.L,1 - end; - c.L := c.L xor (x + y + S[0]); - d.L := d.L xor (x + y shl 1 + S[1]); - asm ROR C.L,1 - end; - - 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]; - asm ROL B.L,1 - end; - A.L := A.L xor (x + y + S[2]); - b.L := b.L xor (x + y shl 1 + S[3]); - asm ROR A.L,1 - end; - Inc(PInteger(S), 4); - end; - S := User; - pintarray(Data)[0] := c.L xor S[4]; - pintarray(Data)[1] := d.L xor S[5]; - pintarray(Data)[2] := A.L xor S[6]; - pintarray(Data)[3] := b.L xor S[7]; -end; - -procedure TROCipher_Twofish.Decode(Data: Pointer); -var - S : pintarray; - Box : PTwofishBox; - i, x, y : LongWord; - A, b, c, d : TLongRec; -begin - S := User; - Box := @pintarray(User)[40]; - c.L := pintarray(Data)[0] xor S[4]; - d.L := pintarray(Data)[1] xor S[5]; - A.L := pintarray(Data)[2] xor S[6]; - b.L := pintarray(Data)[3] xor S[7]; - S := @pintarray(User)[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]; - asm ROL A.L,1 - end; - b.L := b.L xor (x + y shl 1 + S[3]); - A.L := A.L xor (x + y + S[2]); - asm ROR B.L,1 - end; - - 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]; - asm ROL C.L,1 - end; - d.L := d.L xor (x + y shl 1 + S[1]); - c.L := c.L xor (x + y + S[0]); - asm ROR D.L,1 - end; - Dec(PByte(S), 16); - end; - S := User; - pintarray(Data)[0] := A.L xor S[0]; - pintarray(Data)[1] := b.L xor S[1]; - pintarray(Data)[2] := c.L xor S[2]; - pintarray(Data)[3] := d.L xor S[3]; -end; - -procedure TROCipher_Twofish.Init(const Key; Size: Integer; IVector: Pointer); -var - BoxKey : array[0..3] of TLongRec; - SubKey : pintarray; - 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 : Integer; - 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 := ROL(F32(j + $01010101, o), 8); - SubKey[i shl 1] := A + b; - b := A + b shr 1; - SubKey[i shl 1 + 1] := ROL(b, 9); - Inc(j, $02020202); - end; - end; - - procedure DoXOR(d, S: pintarray; Value: LongWord); - var - i : LongWord; - 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 - InitBegin(Size); - SubKey := User; - Box := @SubKey[40]; - SetupKey; - if Size = 16 then - SetupBox128 - else - if Size = 24 then - SetupBox192 - else - SetupBox256; - InitEnd(IVector); -end; - -class procedure TROCipher_Shark.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 112; -end; - -class function TROCipher_Shark.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D9h,065h,021h,0AAh,0C0h,0C3h,084h,060h - DB 09Dh,0CEh,01Fh,08Bh,0FBh,0ABh,018h,03Fh - DB 0A1h,021h,0ACh,0F8h,053h,049h,0C0h,06Fh - DB 027h,03Ah,089h,015h,0D3h,07Ah,0E9h,00Bh -end; - -{$IFDEF VER_D4H} // >= D4 -{.$DEFINE Shark64}//use this with D4 64bit Operation, but the 32 bit Code is 174 % faster -{$ENDIF} - -type - PInt64 = ^TInt64; - {$IFDEF Shark64} - TInt64 = Int64; - {$ELSE} - TInt64 = packed record - L, R: Integer; - end; - {$ENDIF} - - PInt64Array = ^TInt64Array; - TInt64Array = array[0..1023] of TInt64; - - {$IFDEF Shark64} - TShark_Data = array[0..7, 0..255] of Int64; - {$ENDIF} - -procedure TROCipher_Shark.Encode(Data: Pointer); -var - i, t : Integer; - {$IFDEF Shark64} - d : TInt64; - k : PInt64; - {$ELSE} - L, R : LongWord; - k : pintarray; - {$ENDIF} -begin - k := User; - {$IFDEF Shark64} - d := PInt64(Data)^; - for i := 0 to 4 do - begin - d := d xor k^; - Inc(k); - d := TShark_Data(Shark_CE)[0, d shr 56 and $FF] xor - TShark_Data(Shark_CE)[1, d shr 48 and $FF] xor - TShark_Data(Shark_CE)[2, d shr 40 and $FF] xor - TShark_Data(Shark_CE)[3, d shr 32 and $FF] xor - TShark_Data(Shark_CE)[4, d shr 24 and $FF] xor - TShark_Data(Shark_CE)[5, d shr 16 and $FF] xor - TShark_Data(Shark_CE)[6, d shr 8 and $FF] xor - TShark_Data(Shark_CE)[7, d and $FF]; - end; - d := d xor k^; - Inc(k); - d := (Int64(Shark_SE[d shr 56 and $FF]) shl 56) xor - (Int64(Shark_SE[d shr 48 and $FF]) shl 48) xor - (Int64(Shark_SE[d shr 40 and $FF]) shl 40) xor - (Int64(Shark_SE[d shr 32 and $FF]) shl 32) xor - (Int64(Shark_SE[d shr 24 and $FF]) shl 24) xor - (Int64(Shark_SE[d shr 16 and $FF]) shl 16) xor - (Int64(Shark_SE[d shr 8 and $FF]) shl 8) xor - (Int64(Shark_SE[d and $FF])); - PInt64(Data)^ := d xor k^; - {$ELSE} - L := PInt64(Data).L; - R := PInt64(Data).R; - for i := 0 to 4 do - begin - L := L xor k[0]; - R := R xor k[1]; - Inc(PInteger(k), 2); - 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[0]; - R := R xor k[1]; - Inc(PInteger(k), 2); - L := LongWord(Shark_SE[L shr 24]) shl 24 xor - LongWord(Shark_SE[L shr 16 and $FF]) shl 16 xor - LongWord(Shark_SE[L shr 8 and $FF]) shl 8 xor - LongWord(Shark_SE[L and $FF]); - R := LongWord(Shark_SE[R shr 24]) shl 24 xor - LongWord(Shark_SE[R shr 16 and $FF]) shl 16 xor - LongWord(Shark_SE[R shr 8 and $FF]) shl 8 xor - LongWord(Shark_SE[R and $FF]); - PInt64(Data).L := L xor k[0]; - PInt64(Data).R := R xor k[1]; - {$ENDIF} -end; - -procedure TROCipher_Shark.Decode(Data: Pointer); -var - i, t : Integer; - {$IFDEF Shark64} - d : TInt64; - k : PInt64; - {$ELSE} - R, L : LongWord; - k : pintarray; - {$ENDIF} -begin - k := User; - {$IFDEF Shark64} - Inc(k, 7); - d := PInt64(Data)^; - for i := 0 to 4 do - begin - d := d xor k^; - Inc(k); - d := TShark_Data(Shark_CD)[0, d shr 56 and $FF] xor - TShark_Data(Shark_CD)[1, d shr 48 and $FF] xor - TShark_Data(Shark_CD)[2, d shr 40 and $FF] xor - TShark_Data(Shark_CD)[3, d shr 32 and $FF] xor - - TShark_Data(Shark_CD)[4, d shr 24 and $FF] xor - TShark_Data(Shark_CD)[5, d shr 16 and $FF] xor - TShark_Data(Shark_CD)[6, d shr 8 and $FF] xor - TShark_Data(Shark_CD)[7, d and $FF]; - end; - d := d xor k^; - Inc(k); - d := (Int64(Shark_SD[d shr 56 and $FF]) shl 56) xor - (Int64(Shark_SD[d shr 48 and $FF]) shl 48) xor - (Int64(Shark_SD[d shr 40 and $FF]) shl 40) xor - (Int64(Shark_SD[d shr 32 and $FF]) shl 32) xor - (Int64(Shark_SD[d shr 24 and $FF]) shl 24) xor - (Int64(Shark_SD[d shr 16 and $FF]) shl 16) xor - (Int64(Shark_SD[d shr 8 and $FF]) shl 8) xor - (Int64(Shark_SD[d and $FF])); - PInt64(Data)^ := d xor k^; - {$ELSE} - Inc(PInteger(k), 14); - L := PInt64(Data).L; - R := PInt64(Data).R; - for i := 0 to 4 do - begin - L := L xor k[0]; - R := R xor k[1]; - Inc(PInteger(k), 2); - 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[0]; - R := R xor k[1]; - Inc(PInteger(k), 2); - L := Integer(Shark_SD[L shr 24]) shl 24 xor - Integer(Shark_SD[L shr 16 and $FF]) shl 16 xor - Integer(Shark_SD[L shr 8 and $FF]) shl 8 xor - Integer(Shark_SD[L and $FF]); - R := Integer(Shark_SD[R shr 24]) shl 24 xor - Integer(Shark_SD[R shr 16 and $FF]) shl 16 xor - Integer(Shark_SD[R shr 8 and $FF]) shl 8 xor - Integer(Shark_SD[R and $FF]); - PInt64(Data).L := L xor k[0]; - PInt64(Data).R := R xor k[1]; - {$ENDIF} -end; - -procedure TROCipher_Shark.Init(const Key; Size: Integer; IVector: Pointer); -var - Log, ALog : array[0..255] of Byte; - - 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 $01F5; - ALog[i] := j; - end; - for i := 1 to 254 do - Log[ALog[i]] := i; - end; - - function Transform(A: TInt64): TInt64; - type - TInt64Rec = packed record - Lo, Hi: Integer; - end; - - function Mul(A, b: Integer): Byte; - begin - Result := ALog[(Log[A] + Log[b]) mod 255]; - end; - - var - i, j : Byte; - k, t : array[0..7] of Byte; - begin - {$IFDEF Shark64} - Move(TInt64Rec(A).Hi, k[0], 4); - Move(TInt64Rec(A).Lo, k[4], 4); - SwapIntegerBuffer(@k, @k, 2); - {$ELSE} - Move(A.R, k[0], 4); - Move(A.L, k[4], 4); - SwapIntegerBuffer(@k, @k, 2); - {$ENDIF} - 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; - {$IFDEF Shark64} - Result := t[0]; - for i := 1 to 7 do - Result := Result shl 8 xor t[i]; - {$ELSE} - 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; - {$ENDIF} - end; - - function Shark(d: TInt64; k: PInt64): TInt64; - var - R, t : Integer; - begin - {$IFDEF Shark64} - for R := 0 to 4 do - begin - d := d xor k^; - Inc(k); - d := TShark_Data(Shark_CE)[0, d shr 56 and $FF] xor - TShark_Data(Shark_CE)[1, d shr 48 and $FF] xor - TShark_Data(Shark_CE)[2, d shr 40 and $FF] xor - TShark_Data(Shark_CE)[3, d shr 32 and $FF] xor - TShark_Data(Shark_CE)[4, d shr 24 and $FF] xor - TShark_Data(Shark_CE)[5, d shr 16 and $FF] xor - TShark_Data(Shark_CE)[6, d shr 8 and $FF] xor - TShark_Data(Shark_CE)[7, d and $FF]; - end; - d := d xor k^; - Inc(k); - d := (Int64(Shark_SE[d shr 56 and $FF]) shl 56) xor - (Int64(Shark_SE[d shr 48 and $FF]) shl 48) xor - (Int64(Shark_SE[d shr 40 and $FF]) shl 40) xor - (Int64(Shark_SE[d shr 32 and $FF]) shl 32) xor - (Int64(Shark_SE[d shr 24 and $FF]) shl 24) xor - (Int64(Shark_SE[d shr 16 and $FF]) shl 16) xor - (Int64(Shark_SE[d shr 8 and $FF]) shl 8) xor - (Int64(Shark_SE[d and $FF])); - Result := d xor k^; - {$ELSE} - 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 := Integer(Shark_SE[d.L shr 24 and $FF]) shl 24 xor - Integer(Shark_SE[d.L shr 16 and $FF]) shl 16 xor - Integer(Shark_SE[d.L shr 8 and $FF]) shl 8 xor - Integer(Shark_SE[d.L and $FF]); - d.R := Integer(Shark_SE[d.R shr 24 and $FF]) shl 24 xor - Integer(Shark_SE[d.R shr 16 and $FF]) shl 16 xor - Integer(Shark_SE[d.R shr 8 and $FF]) shl 8 xor - Integer(Shark_SE[d.R and $FF]); - Result.L := d.L xor k.L; - Result.R := d.R xor k.R; - {$ENDIF} - end; - -var - t : array[0..6] of TInt64; - A : array[0..6] of TInt64; - k : array[0..15] of Byte; - i, j, R : Byte; - e, d : PInt64Array; - L : TInt64; -begin - InitBegin(Size); - FillChar(k, SizeOf(k), 0); - Move(Key, k, Size); - InitLog; - e := User; - d := @e[7]; - Move(Shark_CE[0], t, SizeOf(t)); - t[6] := Transform(t[6]); - i := 0; - {$IFDEF Shark64} - for R := 0 to 6 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 Shark(0, @t); - for R := 1 to 6 do - e[R] := A[R] xor Shark(e[R - 1], @t); - {$ELSE} - 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; - {$ENDIF} - - e[6] := Transform(e[6]); - d[0] := e[6]; - d[6] := e[0]; - for R := 1 to 5 do - d[R] := Transform(e[6 - R]); - - FillChar(Log, SizeOf(Log), 0); - FillChar(ALog, SizeOf(ALog), 0); - FillChar(t, SizeOf(t), 0); - FillChar(A, SizeOf(A), 0); - FillChar(k, SizeOf(k), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_Square.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 16; - AUserSize := 9 * 4 * 2 * SizeOf(LongWord); -end; - -class function TROCipher_Square.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 043h,09Ch,0A6h,0C4h,067h,0E8h,02Eh,047h - DB 022h,095h,066h,085h,006h,039h,06Ah,0C9h - DB 018h,021h,020h,0F7h,044h,036h,0F1h,061h - DB 07Dh,014h,090h,0B1h,0A9h,068h,056h,0C7h -end; - -procedure TROCipher_Square.Encode(Data: Pointer); -var - Key : pintarray; - A, b, c, d : LongWord; - AA, BB, CC : LongWord; - i : Integer; -begin - Key := User; - A := pintarray(Data)[0] xor Key[0]; - b := pintarray(Data)[1] xor Key[1]; - c := pintarray(Data)[2] xor Key[2]; - d := pintarray(Data)[3] xor Key[3]; - Inc(PInteger(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]; - - Inc(PInteger(Key), 4); - - A := AA; - b := BB; - c := CC; - end; - - pintarray(Data)[0] := LongWord(Square_SE[A and $FF]) xor - LongWord(Square_SE[b and $FF]) shl 8 xor - LongWord(Square_SE[c and $FF]) shl 16 xor - LongWord(Square_SE[d and $FF]) shl 24 xor Key[0]; - pintarray(Data)[1] := LongWord(Square_SE[A shr 8 and $FF]) xor - LongWord(Square_SE[b shr 8 and $FF]) shl 8 xor - LongWord(Square_SE[c shr 8 and $FF]) shl 16 xor - LongWord(Square_SE[d shr 8 and $FF]) shl 24 xor Key[1]; - pintarray(Data)[2] := LongWord(Square_SE[A shr 16 and $FF]) xor - LongWord(Square_SE[b shr 16 and $FF]) shl 8 xor - LongWord(Square_SE[c shr 16 and $FF]) shl 16 xor - LongWord(Square_SE[d shr 16 and $FF]) shl 24 xor Key[2]; - pintarray(Data)[3] := LongWord(Square_SE[A shr 24]) xor - LongWord(Square_SE[b shr 24]) shl 8 xor - LongWord(Square_SE[c shr 24]) shl 16 xor - LongWord(Square_SE[d shr 24]) shl 24 xor Key[3]; -end; - -procedure TROCipher_Square.Decode(Data: Pointer); -var - Key : pintarray; - A, b, c, d : LongWord; - AA, BB, CC : LongWord; - i : Integer; -begin - Key := @pintarray(User)[9 * 4]; - A := pintarray(Data)[0] xor Key[0]; - b := pintarray(Data)[1] xor Key[1]; - c := pintarray(Data)[2] xor Key[2]; - d := pintarray(Data)[3] xor Key[3]; - Inc(PInteger(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]; - - Inc(PInteger(Key), 4); - A := AA; - b := BB; - c := CC; - end; - - pintarray(Data)[0] := LongWord(Square_SD[A and $FF]) xor - LongWord(Square_SD[b and $FF]) shl 8 xor - LongWord(Square_SD[c and $FF]) shl 16 xor - LongWord(Square_SD[d and $FF]) shl 24 xor Key[0]; - pintarray(Data)[1] := LongWord(Square_SD[A shr 8 and $FF]) xor - LongWord(Square_SD[b shr 8 and $FF]) shl 8 xor - LongWord(Square_SD[c shr 8 and $FF]) shl 16 xor - LongWord(Square_SD[d shr 8 and $FF]) shl 24 xor Key[1]; - pintarray(Data)[2] := LongWord(Square_SD[A shr 16 and $FF]) xor - LongWord(Square_SD[b shr 16 and $FF]) shl 8 xor - LongWord(Square_SD[c shr 16 and $FF]) shl 16 xor - LongWord(Square_SD[d shr 16 and $FF]) shl 24 xor Key[2]; - pintarray(Data)[3] := LongWord(Square_SD[A shr 24]) xor - LongWord(Square_SD[b shr 24]) shl 8 xor - LongWord(Square_SD[c shr 24]) shl 16 xor - LongWord(Square_SD[d shr 24]) shl 24 xor Key[3]; -end; - -procedure TROCipher_Square.Init(const Key; Size: Integer; IVector: Pointer); -type - PSquare_Key = ^TSquare_Key; - TSquare_Key = array[0..8, 0..3] of LongWord; -var - e, d : PSquare_Key; - t, i : Integer; -begin - InitBegin(Size); - e := User; - d := User; - Inc(d); - Move(Key, e^, Size); - for t := 1 to 8 do - begin - e[t, 0] := e[t - 1, 0] xor ROR(e[t - 1, 3], 8) xor 1 shl (t - 1); - d[8 - t, 0] := e[t, 0]; - e[t, 1] := e[t - 1, 1] xor e[t, 0]; - d[8 - t, 1] := e[t, 1]; - e[t, 2] := e[t - 1, 2] xor e[t, 1]; - d[8 - t, 2] := e[t, 2]; - e[t, 3] := e[t - 1, 3] xor e[t, 2]; - d[8 - t, 3] := e[t, 3]; - for i := 0 to 3 do - e[t - 1, i] := Square_PHI[e[t - 1, i] and $FF] xor - ROL(Square_PHI[e[t - 1, i] shr 8 and $FF], 8) xor - ROL(Square_PHI[e[t - 1, i] shr 16 and $FF], 16) xor - ROL(Square_PHI[e[t - 1, i] shr 24], 24); - end; - d[8] := e[0]; - InitEnd(IVector); -end; - -{$IFDEF UseASM} -{$IFNDEF 486GE} // no Support for <= CPU 386 - -{ Ok, follow a BAD BAD dirty Trick, BUT realy realistic and correct - - The Problem: - I will use for CPU's >= 486 the BSWAP Mnemonic to speedup Blowfish more. - ( BSWAP swaps the Byteorder from a 32bit Word A,B,C,D to D,C,B,A and back - and is the fastes Solution, but only for >= 486 CPU) - I must wrote two assembler optimated function, one for >= 486 - and one for <= 386. -> En/Decode() and En/Decode386(). - - The normal Solution: - See in RO_Hash.pas the SwapInteger proc. We can define a private - procedural Field in TROCipher_Blowfish that contains a pointer to the CPU - depended code procedure. - i.E. an implementation: - TROCipher_Blowfish.Encode() - begin - FProc(Data); - end; - The Program must make a call to the virtual Method Encode() and - a second call to FProc(Data), and in the Init() or Constructor must - we initialize these FProc Field. - - The Dirty Solution: - A virtual Method, and ONLY a virtual Method, is identicaly to a - private Field in the Object Class. - This Class Definition is stored in the Code Segment. - Now, we modifying, when CPU <= 386, these Field, from the Classdefinition - in the Code Segment !!!, and save a new Methodaddress, the Address from - TROCipher_Blowfish.Encode386 etc. - This changes have Effect to all TROCipher_Blowfish Instances, - but not descending Classes from TROCipher_Blowfish :-) - This Trick work's theoretical with BP5? upto D4. - - Ok, You say many expense for a little speed more !? - YES, but have You this here known ? NO ?, but now. -} - -procedure FindVirtualMethodAndChange(aClass: TClass; MethodAddr, NewAddress: Pointer); -// MethodAddr must explicit exists -type - PPointer = ^Pointer; -const - PageSize = SizeOf(Pointer); -var - Table : PPointer; - SaveFlag : DWord; -begin - Table := PPointer(aClass); - while Table^ <> MethodAddr do - Inc(Table); - if VirtualProtect(Table, PageSize, PAGE_EXECUTE_READWRITE, @SaveFlag) then - try - Table^ := NewAddress; - finally - VirtualProtect(Table, PageSize, SaveFlag, @SaveFlag); - end; -end; -{$ENDIF} -{$ENDIF} - -{$IFDEF VER_D3H} - -procedure ModuleUnload(Module: Longword); -var - i : Integer; -begin - if IsObject(FCipherList, TStringList) then - for i := FCipherList.Count - 1 downto 0 do - if FindClassHInstance(TClass(FCipherList.Objects[i])) = Module then - FCipherList.Delete(i); -end; -{$ENDIF} - -initialization - {$IFDEF UseASM} - {$IFNDEF 486GE} // no Support for <= CPU 386 - if CPUType <= 3 then // CPU <= 386 - begin - FindVirtualMethodAndChange(TROCipher_Blowfish, @TROCipher_Blowfish.Encode, - @TROCipher_Blowfish.Encode386); - FindVirtualMethodAndChange(TROCipher_Blowfish, @TROCipher_Blowfish.Decode, - @TROCipher_Blowfish.Decode386); - end; - {$ENDIF} - {$ENDIF} - {$IFDEF VER_D3H} - AddModuleUnloadProc(ModuleUnload); - {$ENDIF} - {$IFNDEF ManualRegisterClasses} - RegisterCipher(TROCipher_3Way, '', ''); - RegisterCipher(TROCipher_Blowfish, '', ''); - RegisterCipher(TROCipher_Gost, '', ''); - RegisterCipher(TROCipher_IDEA, '', 'free for non-commercial'); - RegisterCipher(TROCipher_Q128, '', ''); - RegisterCipher(TROCipher_SAFER_K40, 'SAFER-K40', ''); - RegisterCipher(TROCipher_SAFER_SK40, 'SAFER-SK40', 'Keyscheduling'); - RegisterCipher(TROCipher_SAFER_K64, 'SAFER-K64', ''); - RegisterCipher(TROCipher_SAFER_SK64, 'SAFER-SK64', 'Keyscheduling'); - RegisterCipher(TROCipher_SAFER_K128, 'SAFER-K128', ''); - RegisterCipher(TROCipher_SAFER_SK128, 'SAFER-SK128', 'Keyscheduling'); - RegisterCipher(TROCipher_SCOP, '', ''); - RegisterCipher(TROCipher_Shark, '', ''); - RegisterCipher(TROCipher_Square, '', ''); - RegisterCipher(TROCipher_TEA, 'TEA', ''); - RegisterCipher(TROCipher_TEAN, 'TEA extended', ''); - RegisterCipher(TROCipher_Twofish, '', ''); - {$ENDIF} -finalization - {$IFDEF VER_D3H} - RemoveModuleUnloadProc(ModuleUnload); - {$ENDIF} - FCipherList.Free; - FCipherList := nil; -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher1.pas deleted file mode 100644 index f9aa6b6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCipher1.pas +++ /dev/null @@ -1,3493 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Part I from Delphi Encryption Compendium ( DEC Part I) - Delphi 2-4, designed and testet under D3 & D4 - Description: Include a Selection of various RO_Cipher's (Encryption Algo) - impl. Algo: - Cast128, Cast256, Mars, Misty 1, RC2, RC4, RC5, RC6, - FROG, Rijndael, Skipjack, Single DES, Double DES, - Triple DES, Double DES 16byte Plain, Triple DES 16, - Triple DES 24, DESX, NewDES, Diamond II, - Diamond II Lite, Sapphire II - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -} -unit uROCipher1; - -interface - -{$I uROVer.inc} - -uses SysUtils, uRODECUtil, uROCipher, uROHash; - -type - TROCipher_Cast128 = class; - TROCipher_Cast256 = class; - TROCipher_Mars = class; - TROCipher_Misty = class; - TROCipher_RC2 = class; - TROCipher_RC4 = class; {Streamcipher} - TROCipher_RC5 = class; - TROCipher_RC6 = class; - TROCipher_FROG = class; - TROCipher_Rijndael = class; -{$IFDEF VER_D3H} - TROCipher_Skipjack = class; -{$ENDIF} - TROCipher_1DES = class; {Single DES 8 byte Blocksize, 8 byte Keysize 56 bits relevant} - TROCipher_2DES = class; {Double DES 8 byte Blocksize, 16 byte Keysize 112 bits relevant} - TROCipher_3DES = class; {Triple DES 8 byte Blocksize, 24 byte Keysize 168 bits relevant} - TROCipher_2DDES = class; {Double DES 16 byte Blocksize, 16 byte Keysize 112 bits relevant} - TROCipher_3DDES = class; {Triple DES 16 byte Blocksize, 24 byte Keysize 168 bits relevant} - TROCipher_3TDES = class; {Triple DES 24 byte Blocksize, 24 byte Keysize 168 bits relevant} - TROCipher_DESX = class; {Single DES 8 byte Blocksize, by RSA added XOR Keying} - TROCipher_NewDES = class; - TROCipher_Diamond2 = class; {very slow, but demonstrate a RO_Cipher without} - TROCipher_Diamond2Lite = class; {static- and keydepends S-Boxes} - TROCipher_Sapphire = class; {Stream RO_Cipher, eq. Design from german ENIGMA Machine} - - TROCipher_Cast128 = class(TROCipher) {Carlisle Adams and Stafford Tavares } - private - FRounds: Byte; - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Cast256 = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Mars = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Misty = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_RC2 = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_RC4 = class(TROCipher) - private - FI: Byte; - FJ: Byte; - FSI: Byte; - FSJ: Byte; - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure Done; override; - end; - - TROCipher_RC5 = class(TROCipher) - private - FRounds: Integer; {8-16, default 12} - procedure SetRounds(Value: Integer); - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROCipher_RC6 = class(TROCipher) - private - FRounds: Integer; {16-24, default 20} - procedure SetRounds(Value: Integer); - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROCipher_FROG = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Rijndael = class(TROCipher) - private - FRounds: Integer; - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; -{$IFDEF VER_D3H} - TROCipher_Skipjack = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; -{$ENDIF} - TROCipher_1DES = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - procedure MakeKey(const Data: array of Byte; Key: PInteger; Reverse: Boolean); - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_2DES = class(TROCipher_1DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_3DES = class(TROCipher_1DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_2DDES = class(TROCipher_2DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - end; - - TROCipher_3DDES = class(TROCipher_3DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - end; - - TROCipher_3TDES = class(TROCipher_3DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - end; - - TROCipher_DESX = class(TROCipher_1DES) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure InitNew(const Key, Whitening; Size: Integer; IVector: Pointer); - end; - -{ This algorithm resembles the Data Encryption Standard (DES), but 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.} - - TROCipher_NewDES = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - end; - - TROCipher_Diamond2 = class(TROCipher) - private - FRounds: Integer; - FBoxE: PByteArray; {dynamicly allociated Boxes} - FBoxD: PByteArray; - procedure SetRounds(Value: Integer); virtual; {5-15, default is 10} - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure Protect; override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROCipher_Diamond2Lite = class(TROCipher_Diamond2) - private - procedure SetRounds(Value: Integer); override; {4-30, default is 10} - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - end; - - TROCipher_Sapphire = class(TROCipher) - protected - class procedure GetContext(var ABufSize, AKeySize, AUserSize: Integer); override; - class function TestVector: Pointer; override; - procedure Encode(Data: Pointer); override; - procedure Decode(Data: Pointer); override; - public - procedure Init(const Key; Size: Integer; IVector: Pointer); override; - procedure Done; override; - end; - -implementation - -{$I *.inc} - -type - PCipherRec = ^TCipherRec; - TCipherRec = packed record - case Integer of - 0: (X: array[0..7] of Byte); - 1: (A, B: LongWord); - end; - -class procedure TROCipher_Cast128.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 128; -end; - -class function TROCipher_Cast128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 06Ch,027h,0D1h,04Ch,0F6h,0BAh,076h,0E7h - DB 0A4h,078h,01Ch,020h,018h,08Ch,030h,0BCh - DB 0D2h,09Ah,0F6h,02Ah,063h,01Fh,0FDh,004h - DB 089h,03Fh,0C7h,00Eh,007h,0A9h,094h,09Bh -end; - -procedure TROCipher_Cast128.Encode(Data: Pointer); -var - T,I,A,B: LongWord; - K: PInteger; -begin - K := User; - A := SwapInteger(PCipherRec(Data).A); - B := SwapInteger(PCipherRec(Data).B); - for I := 0 to 2 do - begin - T := ROL(K^ + B, PIntArray(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]); - Inc(K); - T := ROL(K^ xor A, PIntArray(K)[16]); - 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]); - Inc(K); - T := ROL(K^ - B, PIntArray(K)[16]); - 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]); - Inc(K); - T := ROL(K^ + A, PIntArray(K)[16]); - 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; - Inc(K); - T := ROL(K^ xor B, PIntArray(K)[16]); - 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]); - Inc(K); - T := ROL(K^ - A, PIntArray(K)[16]); - 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]); - Inc(K); - if (I = 1) and (FRounds <= 12) then Break; - end; - PCipherRec(Data).B := SwapInteger(A); - PCipherRec(Data).A := SwapInteger(B); -end; - -procedure TROCipher_Cast128.Decode(Data: Pointer); -var - T,I,A,B: LongWord; - K: PInteger; -label - Start; -begin - K := @PIntArray(User)[15]; - B := SwapInteger(PCipherRec(Data).A); - A := SwapInteger(PCipherRec(Data).B); - I := 2; - if FRounds <= 12 then Dec(K, 4) else goto Start; - while I > 0 do - begin - Dec(I); - T := ROL(K^ - A, PIntArray(K)[16]); - 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]); - Dec(K); - T := ROL(K^ xor B, PIntArray(K)[16]); - 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]); - Dec(K); -Start: - T := ROL(K^ + A, PIntArray(K)[16]); - 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]); - Dec(K); - T := ROL(K^ - B, PIntArray(K)[16]); - 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]); - Dec(K); - T := ROL(K^ xor A, PIntArray(K)[16]); - 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]); - Dec(K); - T := ROL(K^ + B, PIntArray(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(K); - end; - PCipherRec(Data).A := SwapInteger(A); - PCipherRec(Data).B := SwapInteger(B); -end; - -procedure TROCipher_Cast128.Init(const Key; Size: Integer; IVector: Pointer); -var - Z,X,T: array[0..3] of LongWord; - K: PIntArray; - I: LongWord; -begin - InitBegin(Size); - if Size <= 10 then FRounds := 12 else FRounds := 16; - K := User; - FillChar(X, SizeOf(X), 0); - Move(Key, X, Size); - SwapIntegerBuffer(@X, @X, 4); -// for I := 0 to 3 do X[I] := SwapInteger(X[I]); - 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; - FillChar(X, SizeOf(X), 0); - FillChar(Z, SizeOf(Z), 0); - FillChar(T, SizeOf(T), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_Cast256.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 32; - AUserSize := 384; -end; - -class function TROCipher_Cast256.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0C5h,0F1h,095h,087h,08Ah,031h,01Eh,042h - DB 01Ch,045h,010h,007h,049h,0DFh,0F2h,02Dh - DB 075h,012h,005h,0B7h,0A9h,0A3h,030h,0DAh - DB 09Eh,0F1h,03Bh,010h,0FEh,062h,04Fh,079h -end; - -type - PCast256Rec = ^TCast256Rec; - TCast256Rec = packed record - case Integer of - 0: (A,B,C,D: Integer); - 1: (Z: array[0..3] of Integer); - end; - -procedure TROCipher_Cast256.Encode(Data: Pointer); -var - I,T,A,B,C,D: LongWord; - K: PInteger; -begin - K := User; - SwapIntegerBuffer(Data, Data, 4); - A := PCast256Rec(Data).A; - B := PCast256Rec(Data).B; - C := PCast256Rec(Data).C; - D := PCast256Rec(Data).D; - for I := 0 to 5 do - begin - T := ROL(K^ + D, PIntArray(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]); - Inc(K); - T := ROL(K^ xor C, PIntArray(K)[48]); - 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]); - Inc(K); - T := ROL(K^ - B, PIntArray(K)[48]); - 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]); - Inc(K); - T := ROL(K^ + A, PIntArray(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]); - Inc(K); - end; - for I := 0 to 5 do - begin - T := ROL(K^ + A, PIntArray(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]); - Inc(K); - T := ROL(K^ - B, PIntArray(K)[48]); - 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]); - Inc(K); - T := ROL(K^ xor C, PIntArray(K)[48]); - 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]); - Inc(K); - T := ROL(K^ + D, PIntArray(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]); - Inc(K); - end; - PCast256Rec(Data).A := A; - PCast256Rec(Data).B := B; - PCast256Rec(Data).C := C; - PCast256Rec(Data).D := D; - SwapIntegerBuffer(Data, Data, 4); -end; - -procedure TROCipher_Cast256.Decode(Data: Pointer); -var - I,T,A,B,C,D: LongWord; - K: PInteger; -begin - K := @PIntArray(User)[47]; - SwapIntegerBuffer(Data, Data, 4); - A := PCast256Rec(Data).A; - B := PCast256Rec(Data).B; - C := PCast256Rec(Data).C; - D := PCast256Rec(Data).D; - for I := 0 to 5 do - begin - T := ROL(K^ + D, PIntArray(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(K); - T := ROL(K^ xor C, PIntArray(K)[48]); - 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]); - Dec(K); - T := ROL(K^ - B, PIntArray(K)[48]); - 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]); - Dec(K); - T := ROL(K^ + A, PIntArray(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(K); - end; - for I := 0 to 5 do - begin - T := ROL(K^ + A, PIntArray(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(K); - T := ROL(K^ - B, PIntArray(K)[48]); - 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]); - Dec(K); - T := ROL(K^ xor C, PIntArray(K)[48]); - 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]); - Dec(K); - T := ROL(K^ + D, PIntArray(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(K); - end; - PCast256Rec(Data).A := A; - PCast256Rec(Data).B := B; - PCast256Rec(Data).C := C; - PCast256Rec(Data).D := D; - SwapIntegerBuffer(Data, Data, 4); -end; - -procedure TROCipher_Cast256.Init(const Key; Size: Integer; IVector: Pointer); -var - X: array[0..7] of LongWord; - M, R, I, J, T: LongWord; - K: PInteger; -begin - InitBegin(Size); - FillChar(X, SizeOf(X), 0); - Move(Key, X, Size); -// SwapIntegerBuffer(@X, @X, 8); - for I := 0 to 7 do X[I] := SwapInteger(X[I]); - K := User; - M := $5A827999; - R := 19; - for I := 0 to 11 do - begin - for J := 0 to 1 do - begin - T := ROL(M + X[7], 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 := ROL(M xor X[6], 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 := ROL(M - X[5], 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 := ROL(M + X[4], 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 := ROL(M xor X[3], 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 := ROL(M - X[2], 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 := ROL(M + X[1], 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 := ROL(M xor X[0], 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 - PIntArray(K)[48] := X[0] and $1F; - PIntArray(K)[49] := X[2] and $1F; - PIntArray(K)[50] := X[4] and $1F; - PIntArray(K)[51] := X[6] and $1F; - PIntArray(K)[0] := X[7]; - PIntArray(K)[1] := X[5]; - PIntArray(K)[2] := X[3]; - PIntArray(K)[3] := X[1]; - end else - begin - PIntArray(K)[48] := X[6] and $1F; - PIntArray(K)[49] := X[4] and $1F; - PIntArray(K)[50] := X[2] and $1F; - PIntArray(K)[51] := X[0] and $1F; - PIntArray(K)[0] := X[1]; - PIntArray(K)[1] := X[3]; - PIntArray(K)[2] := X[5]; - PIntArray(K)[3] := X[7]; - end; - Inc(K, 4); - end; - FillChar(X, SizeOf(X), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_Mars.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 156; - AUserSize := 160; -end; - -class function TROCipher_Mars.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D8h,06Ah,0DFh,00Ch,0B5h,066h,024h,00Dh - DB 0C5h,000h,0E0h,0A5h,0D8h,0C1h,0C2h,013h - DB 045h,0EDh,0F1h,04Fh,0AFh,05Ch,075h,002h - DB 01Dh,00Ah,08Dh,010h,06Dh,031h,05Ch,0D5h -end; - -type - PMarsRec = ^TMarsRec; - TMarsRec = packed record - case Integer of - 0: (X: array[0..3] of LongWord); - 1: (A,B,C,D: LongWord); - end; - -procedure TROCipher_Mars.Encode(Data: Pointer); -var - K: PInteger; - I,L,R,A,B,C,D: LongWord; -begin - K := User; - A := PMarsRec(Data).A + K^; Inc(K); - B := PMarsRec(Data).B + K^; Inc(K); - C := PMarsRec(Data).C + K^; Inc(K); - D := PMarsRec(Data).D + K^; Inc(K); - 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^; Inc(K); - A := A shl 13 or A shr 19; - R := A * K^; Inc(K); - 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^; Inc(K); - B := B shl 13 or B shr 19; - R := B * K^; Inc(K); - 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^; Inc(K); - C := C shl 13 or C shr 19; - R := C * K^; Inc(K); - 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^; Inc(K); - D := D shl 13 or D shr 19; - R := D * K^; Inc(K); - 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; - 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; - PMarsRec(Data).A := A - K^; Inc(K); - PMarsRec(Data).B := B - K^; Inc(K); - PMarsRec(Data).C := C - K^; Inc(K); - PMarsRec(Data).D := D - K^; -end; - -procedure TROCipher_Mars.Decode(Data: Pointer); -var - K: PInteger; - I,L,R,A,B,C,D: LongWord; -begin - K := @PIntArray(User)[39]; - D := PMarsRec(Data).D + K^; Dec(K); - C := PMarsRec(Data).C + K^; Dec(K); - B := PMarsRec(Data).B + K^; Dec(K); - A := PMarsRec(Data).A + K^; Dec(K); - 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^; Dec(K); - R := R shl 5 or R shr 27; - D := D shr 13 or D shl 19; - L := D + K^; Dec(K); - 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^; Dec(K); - R := R shl 5 or R shr 27; - C := C shr 13 or C shl 19; - L := C + K^; Dec(K); - 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^; Dec(K); - R := R shl 5 or R shr 27; - B := B shr 13 or B shl 19; - L := B + K^; Dec(K); - 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^; Dec(K); - R := R shl 5 or R shr 27; - A := A shr 13 or A shl 19; - L := A + K^; Dec(K); - 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; - 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; - PMarsRec(Data).D := D - K^; Dec(K); - PMarsRec(Data).C := C - K^; Dec(K); - PMarsRec(Data).B := B - K^; Dec(K); - PMarsRec(Data).A := A - K^; -end; - -procedure TROCipher_Mars.Init(const Key; Size: Integer; IVector: Pointer); - - procedure Mask(var X, M: LongWord); - var - U: LongWord; - begin - U := X and (X shr 1); - U := U and (U shr 2); - U := U and (U shr 4); - U := U and (U shr 1) and (U shr 2); - M := U; - U := (X xor $FFFFFFFF) and ((X xor $FFFFFFFF) shr 1); - U := U and (U shr 2); - U := U and (U shr 4); - U := U and (U shr 1) and (U shr 2); - U := U or M; - M := (U shl 1) or (U shl 2) or (U shl 3) or (U shl 4) or - (U shl 5) or (U shl 6) or (U shl 7) or (U shl 8); - M := (M or U or (U shl 9)) and ((X xor $FFFFFFFF) xor (X shl 1)) and ((X xor $FFFFFFFF) xor (X shr 1)); - M := M and $FFFFFFFC; - end; - -var - T: array[-7..39] of LongWord; - I,J: Integer; - M,U,W: LongWord; - K,B: PIntArray; -begin - InitBegin(Size); - K := User; - B := @Mars_Data; - Move(Key, K^, Size); - Move(Mars_Key, T, SizeOf(Mars_Key)); - Size := Size div 4; - for I := 0 to 38 do - begin - U := T[I - 7] xor T[I - 2]; - T[I] := ROL(U, 3) xor K[I mod Size] xor LongWord(I); - end; - T[39] := Size; - for J := 0 to 6 do - begin - for I := 1 to 39 do - begin - U := T[I] + B[T[I - 1] and $1FF]; - T[I] := ROL(U, 9); - end; - U := T[0] + B[T[39] and $1FF]; - T[0] := ROL(U, 9); - end; - for I := 0 to 39 do K[(I * 7) mod 40] := T[I]; - I := 5; - repeat - U := B[256 + (K[I] and $3)]; - J := K[I + 3] and $1F; - W := K[I] or $3; - Mask(W, M); - K[I] := W xor (ROL(U, J) and M); - Inc(I, 2); - until I >= 37; - InitEnd(IVector); -end; - -class procedure TROCipher_Misty.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 128; -end; - -class function TROCipher_Misty.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 064h,07Bh,0C5h,0C6h,049h,045h,0AAh,095h - DB 05Dh,064h,0CDh,056h,07Ch,06Ch,0B6h,047h - DB 081h,057h,0FEh,08Ch,0F4h,084h,019h,0BCh - DB 027h,060h,00Ch,0A6h,079h,085h,00Fh,0C9h -end; - -function Misty_I(Value, Key: LongWord): LongWord; -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: LongWord; Key: PIntArray): LongWord; -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: LongWord; Key: PIntArray): LongWord; -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: LongWord; Key: PIntArray): LongWord; -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 TROCipher_Misty.Encode(Data: Pointer); -var - A,B: LongWord; - Key: PIntArray; -begin - Key := User; - A := PCipherRec(Data).A; - B := PCipherRec(Data).B; - A := Misty_E(A, 0, Key); - B := Misty_E(B, 1, Key) xor Misty_O(A, 0, Key); - A := A xor Misty_O(B, 1, Key); - A := Misty_E(A, 2, Key); - B := Misty_E(B, 3, Key) xor Misty_O(A, 2, Key); - A := A xor Misty_O(B, 3, Key); - A := Misty_E(A, 4, Key); - B := Misty_E(B, 5, Key) xor Misty_O(A, 4, Key); - A := A xor Misty_O(B, 5, Key); - A := Misty_E(A, 6, Key); - B := Misty_E(B, 7, Key) xor Misty_O(A, 6, Key); - A := A xor Misty_O(B, 7, Key); - PCipherRec(Data).B := Misty_E(A, 8, Key); - PCipherRec(Data).A := Misty_E(B, 9, Key); -end; - -procedure TROCipher_Misty.Decode(Data: Pointer); -var - A,B: LongWord; - Key: PIntArray; -begin - Key := User; - B := Misty_D(PCipherRec(Data).A, 9, Key); - A := Misty_D(PCipherRec(Data).B, 8, Key); - A := A xor Misty_O(B, 7, Key); - B := Misty_D(B xor Misty_O(A, 6, Key), 7, Key); - A := Misty_D(A, 6, Key); - A := A xor Misty_O(B, 5, Key); - B := Misty_D(B xor Misty_O(A, 4, Key), 5, Key); - A := Misty_D(A, 4, Key); - A := A xor Misty_O(B, 3, Key); - B := Misty_D(B xor Misty_O(A, 2, Key), 3, Key); - A := Misty_D(A, 2, Key); - A := A xor Misty_O(B, 1, Key); - PCipherRec(Data).B := Misty_D(B xor Misty_O(A, 0, Key), 1, Key); - PCipherRec(Data).A := Misty_D(A, 0, Key); -end; - -procedure TROCipher_Misty.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..15] of Byte; - D: PIntArray; - I: Integer; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - D := User; - 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; - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_RC2.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 128; - AUserSize := 128; -end; - -class function TROCipher_RC2.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 00Eh,0C8h,0E5h,04Fh,0CCh,032h,0EAh,0BEh - DB 029h,064h,0EFh,0BEh,053h,014h,0EDh,0DCh - DB 0D7h,0ADh,0CFh,010h,047h,067h,0EEh,061h - DB 0D9h,073h,0F2h,013h,0FCh,031h,008h,0EAh -end; - -type - PRC2Rec = ^TRC2Rec; - TRC2Rec = packed record - case Integer of - 0: (X: array[0..3] of Word); - 1: (A,B,C,D: Word); - end; - -procedure TROCipher_RC2.Encode(Data: Pointer); - - function ROLADD16(Value, Add, Shift: Integer): Word; assembler; - asm - ADD EAX,EDX - ROL AX,CL - end; - -var - I: Integer; - K: PWord; - L: PWordArray; -begin - K := User; - L := User; - with PRC2Rec(Data)^ do - begin - for I := 0 to 4 do - begin - A := ROLADD16(A, (B and not D) + (C and D) + K^, 1); Inc(K); - B := ROLADD16(B, (C and not A) + (D and A) + K^, 2); Inc(K); - C := ROLADD16(C, (D and not B) + (A and B) + K^, 3); Inc(K); - D := ROLADD16(D, (A and not C) + (B and C) + K^, 5); Inc(K); - end; - Inc(A, L[D and $3F]); - Inc(B, L[A and $3F]); - Inc(C, L[B and $3F]); - Inc(D, L[C and $3F]); - for I := 0 to 5 do - begin - A := ROLADD16(A, (B and not D) + (C and D) + K^, 1); Inc(K); - B := ROLADD16(B, (C and not A) + (D and A) + K^, 2); Inc(K); - C := ROLADD16(C, (D and not B) + (A and B) + K^, 3); Inc(K); - D := ROLADD16(D, (A and not C) + (B and C) + K^, 5); Inc(K); - end; - Inc(A, L[D and $3F]); - Inc(B, L[A and $3F]); - Inc(C, L[B and $3F]); - Inc(D, L[C and $3F]); - for I := 0 to 4 do - begin - A := ROLADD16(A, (B and not D) + (C and D) + K^, 1); Inc(K); - B := ROLADD16(B, (C and not A) + (D and A) + K^, 2); Inc(K); - C := ROLADD16(C, (D and not B) + (A and B) + K^, 3); Inc(K); - D := ROLADD16(D, (A and not C) + (B and C) + K^, 5); Inc(K); - end; - end; -end; - -procedure TROCipher_RC2.Decode(Data: Pointer); - - function RORSUB16(Value, Sub, Shift: Integer): Word; assembler; - asm - ROR AX,CL - SUB EAX,EDX - end; - -var - I: Integer; - K: PWord; - L: PWordArray; -begin - L := User; - K := @L[63]; - with PRC2Rec(Data)^ do - begin - for I := 0 to 4 do - begin - D := RORSUB16(D, (A and not C) + (B and C) + K^, 5); Dec(K); - C := RORSUB16(C, (D and not B) + (A and B) + K^, 3); Dec(K); - B := RORSUB16(B, (C and not A) + (D and A) + K^, 2); Dec(K); - A := RORSUB16(A, (B and not D) + (C and D) + K^, 1); Dec(K); - end; - Dec(D, L[C and $3F]); - Dec(C, L[B and $3F]); - Dec(B, L[A and $3F]); - Dec(A, L[D and $3F]); - for I := 0 to 5 do - begin - D := RORSUB16(D, (A and not C) + (B and C) + K^, 5); Dec(K); - C := RORSUB16(C, (D and not B) + (A and B) + K^, 3); Dec(K); - B := RORSUB16(B, (C and not A) + (D and A) + K^, 2); Dec(K); - A := RORSUB16(A, (B and not D) + (C and D) + K^, 1); Dec(K); - end; - Dec(D, L[C and $3F]); - Dec(C, L[B and $3F]); - Dec(B, L[A and $3F]); - Dec(A, L[D and $3F]); - for I := 0 to 4 do - begin - D := RORSUB16(D, (A and not C) + (B and C) + K^, 5); Dec(K); - C := RORSUB16(C, (D and not B) + (A and B) + K^, 3); Dec(K); - B := RORSUB16(B, (C and not A) + (D and A) + K^, 2); Dec(K); - A := RORSUB16(A, (B and not D) + (C and D) + K^, 1); Dec(K); - end; - end; -end; - -procedure TROCipher_RC2.Init(const Key; Size: Integer; IVector: Pointer); -var - I: Integer; - K: PByteArray; -begin - InitBegin(Size); - K := User; - Move(Key, K^, Size); - for I := Size to 127 do - K[I] := RC2_Data[(K[I - Size] + K[I - 1]) and $FF]; - K[0] := RC2_Data[K[0]]; - InitEnd(IVector); -end; - -const - RC4_BufSize = 16; - -class procedure TROCipher_RC4.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := RC4_BufSize; - AKeySize := 256; - AUserSize := 256 * 2; -end; - -class function TROCipher_RC4.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 02Dh,08Fh,0EEh,042h,087h,07Bh,0AEh,072h - DB 0F8h,02Bh,08Ch,0A5h,012h,014h,0A8h,07Eh - DB 07Eh,08Ch,0DBh,05Eh,096h,049h,06Ch,09Ch - DB 0EEh,05Eh,020h,06Ch,07Ah,067h,002h,05Dh -end; - -procedure TROCipher_RC4.Encode(Data: Pointer); -var - D: PByteArray; - B: PByte; - X,S: Byte; -begin - D := User; - B := Data; - for X := 0 to RC4_BufSize -1 do - begin - Inc(FI); - S := D[FI]; - Inc(FJ, S); - D[FI] := D[FJ]; - D[FJ] := S; - B^ := B^ xor D[(D[FI] + S) and $FF]; - Inc(B); - end; -end; - -procedure TROCipher_RC4.Decode(Data: Pointer); -begin - Encode(Data); -end; - -procedure TROCipher_RC4.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..255] of Byte; - D: PByteArray; - I,J,S: Integer; -begin - InitBegin(Size); - FI := 0; - FJ := 0; - J := 0; - D := User; - for I := 0 to 255 do - begin - D[I] := I; - K[I] := PByteArray(@Key)[I mod Size]; - end; - for I := 0 to 255 do - begin - J := (J + D[I] + K[I]) and $FF; - S := D[I]; - D[I] := D[J]; - D[J] := S; - end; - InitEnd(IVector); -{Save the Key} - Move(D[0], D[256], 256); - FSI := FI; - FSJ := FJ; - FillChar(K, SizeOf(K), 0); -end; - -procedure TROCipher_RC4.Done; -begin - inherited Done; - FI := FSI; - FJ := FSJ; - Move(PByteArray(User)[256], User^, 256); -end; - -procedure TROCipher_RC5.SetRounds(Value: Integer); -begin - if Value < 8 then Value := 8 else - if Value > 16 then Value := 16; - FRounds := Value; -end; - -class procedure TROCipher_RC5.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 256; - AUserSize := 136; -end; - -class function TROCipher_RC5.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 010h,039h,02Ch,0E0h,00Bh,05Fh,009h,07Fh - DB 0D6h,0B1h,06Ch,00Eh,0B9h,075h,0D5h,0CCh - DB 0FCh,0BEh,0B5h,08Dh,041h,0ACh,054h,07Ch - DB 083h,030h,026h,09Dh,0ACh,0CBh,00Ah,069h -end; - -procedure TROCipher_RC5.Encode(Data: Pointer); - - function XORROLADD(Value, Add, Shift: Integer): Integer; assembler; - asm - XOR EAX,ECX - ROL EAX,CL - ADD EAX,EDX - end; - -var - K: PInteger; - I,A,B: LongWord; -begin - K := User; - A := PCipherRec(Data).A + K^; Inc(K); - B := PCipherRec(Data).B + K^; Inc(K); - for I := 1 to FRounds do - begin - A := XORROLADD(A, K^, B); Inc(K); - B := XORROLADD(B, K^, A); Inc(K); - end; - PCipherRec(Data).A := A; - PCipherRec(Data).B := B; -end; - -procedure TROCipher_RC5.Decode(Data: Pointer); - - function RORSUBXOR(Value, Sub, Shift: Integer): Integer; assembler; - asm - SUB EAX,EDX - ROR EAX,CL - XOR EAX,ECX - end; - -var - I,A,B: LongWord; - K: PInteger; -begin - K := @PIntArray(User)[FRounds shl 1 +1]; - A := PCipherRec(Data).A; - B := PCipherRec(Data).B; - for I := 1 to FRounds do - begin - B := RORSUBXOR(B, K^, A); Dec(K); - A := RORSUBXOR(A, K^, B); Dec(K); - end; - PCipherRec(Data).B := B - K^; Dec(K); - PCipherRec(Data).A := A - K^; -end; - -procedure TROCipher_RC5.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..63] of LongWord; - D: PIntArray; - I,J,L,A,B,Z: LongWord; -begin - InitBegin(Size); - if (FRounds < 8) or (FRounds > 16) then FRounds := 12; - D := User; - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - L := Size shr 2; - if Size and 3 <> 0 then Inc(L); - J := $B7E15163; - for I := 0 to (FRounds + 1) * 2 do - begin - D[I] := J; - Inc(J, $9E3779B9); - end; - if L > LongWord(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 := ROL(D[I] + A + B, 3); - D[I] := A; - B := ROL(K[J] + A + B, A + B); - K[J] := B; - I := (I + 1) mod (LongWord(FRounds + 1) * 2); - J := (J + 1) mod L; - end; - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -procedure TROCipher_RC6.SetRounds(Value: Integer); -begin - if Value < 16 then Value := 16 else - if Value > 24 then Value := 24; - FRounds := Value; -end; - -class procedure TROCipher_RC6.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 256; - AUserSize := 272; -end; - -class function TROCipher_RC6.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 098h,071h,065h,0A1h,010h,0FEh,0BDh,0F9h - DB 007h,085h,03Eh,0FCh,021h,0DBh,0FCh,0A1h - DB 08Fh,05Fh,08Bh,0F7h,045h,028h,081h,00Dh - DB 0EFh,09Ah,022h,07Ah,0F0h,062h,02Ch,0C6h -end; - -type - PRC6Rec = ^TRC6Rec; - TRC6Rec = packed record - case Integer of - 0: (X: array[0..3] of LongWord); - 1: (A,B,C,D: LongWord); - end; - -function MULROL(Value: Integer): Integer; assembler; -asm - MOV EDX,EAX - SHL EDX,1 - INC EDX - IMUL EAX,EDX - ROL EAX,5 -end; - -procedure TROCipher_RC6.Encode(Data: Pointer); -var - K: PInteger; - I,T,U: LongWord; -begin - K := User; - with PRC6Rec(Data)^ do - begin - Inc(B, K^); Inc(K); - Inc(D, K^); Inc(K); - for I := 1 to FRounds do - begin - T := MULROL(B); - U := MULROL(D); - A := ROLADD(A xor T, K^, U); Inc(K); - C := ROLADD(C xor U, K^, T); Inc(K); - - T := A; A := B; B := C; C := D; D := T; - end; - Inc(A, K^); Inc(K); - Inc(C, K^); - end; -end; - -procedure TROCipher_RC6.Decode(Data: Pointer); -var - I,U,T: LongWord; - K: PInteger; -begin - K := @PIntArray(User)[FRounds * 2 +3]; - with PRC6Rec(Data)^ do - begin - Dec(C, K^); Dec(K); - Dec(A, K^); Dec(K); - for I := 1 to FRounds do - begin - T := A; A := D; D := C; C := B; B := T; - - U := MULROL(D); - T := MULROL(B); - C := ROR(C - K^, T) xor U; Dec(K); - A := ROR(A - K^, U) xor T; Dec(K); - end; - Dec(D, K^); Dec(K); - Dec(B, K^); - end; -end; - -procedure TROCipher_RC6.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..63] of LongWord; - D: PIntArray; - I,J,L,A,B,Z: LongWord; -begin - InitBegin(Size); - if (FRounds < 16) or (FRounds > 24) then FRounds := 20; - D := User; - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - L := Size shr 2; - if Size and 3 <> 0 then Inc(L); - J := $B7E15163; - for I := 0 to (FRounds + 2) * 2 do - begin - D[I] := J; - Inc(J, $9E3779B9); - end; - if L > LongWord(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 := ROL(D[I] + A + B, 3); - D[I] := A; - B := ROL(K[J] + A + B, A + B); - K[J] := B; - I := (I + 1) mod (LongWord(FRounds + 2) * 2); - J := (J + 1) mod L; - end; - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -const - FROG_BufSize = 32; {change this to 8,16,32,64,128} - FROG_Rounds = 8; - -class procedure TROCipher_FROG.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := FROG_BufSize; - AKeySize := 125; - AUserSize := (FROG_BufSize * 2 + 256) * FROG_Rounds * 2; -end; - -class function TROCipher_FROG.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 022h,02Dh,006h,067h,016h,031h,09Ch,0C8h - DB 0A5h,056h,04Bh,04Ch,0F7h,069h,0B0h,07Ah - DB 0D5h,01Fh,09Fh,0B8h,0D0h,00Eh,0EDh,0D1h - DB 070h,050h,09Bh,0C8h,00Bh,035h,028h,04Ah -end; - -procedure TROCipher_FROG.Encode(Data: Pointer); -var - D,U: PByteArray; - I,J,A: Integer; - X,Y: PByte; -begin - D := Data; - U := User; - for I := 1 to FROG_Rounds do - begin - X := Pointer(U); - Inc(PChar(U), BufSize); - Y := Pointer(PChar(U) + 256); - for J := 0 to BufSize-2 do - begin - A := D[J]; {holds in A, Compiler make faster Code} - A := U[A xor X^]; - Inc(X); - D[J + 1] := D[J + 1] xor A; - D[Y^] := D[Y^] xor A; - Inc(Y); - D[J] := A; - end; - J := BufSize-1; - A := D[J]; - A := U[A xor X^]; - D[0] := D[0] xor A; - D[Y^] := D[Y^] xor A; - D[J] := A; - Inc(PChar(U), BufSize + 256); - end; -end; - -procedure TROCipher_FROG.Decode(Data: Pointer); -var - D,U: PByteArray; - I,J,A: Integer; - X,Y: PByte; -begin - D := Data; - U := User; - Inc(PChar(U), UserSize); - for I := 1 to FROG_Rounds do - begin - Y := Pointer(U); - Dec(PChar(U), BufSize + 256); - X := Pointer(U); - J := BufSize -1; - Dec(Y); - A := D[J]; {holds in A, Compiler make faster Code} - D[Y^] := D[Y^] xor A; - D[0] := D[0] xor A; - Dec(X); - D[J] := U[A] xor X^; - repeat - Dec(J); - Dec(Y); - A := D[J]; - D[Y^] := D[Y^] xor A; - D[J +1] := D[J +1] xor A; - Dec(X); - D[J] := U[A] xor X^; - until J = 0; - Dec(PChar(U), BufSize); - end; -end; - -procedure TROCipher_FROG.Init(const Key; Size: Integer; IVector: Pointer); - - procedure MakeKey(D: PByteArray; Invert: Boolean); - - procedure InvertPermutation(D: PByteArray); - var - Inv: array[0..255] of Byte; - I: Integer; - begin - for I := 0 to 255 do Inv[D[I]] := I; - Move(Inv, D^, 256); - end; - - procedure MakePermutation(D: PByteArray; Size: Integer); - var - Use: array[0..255] of Byte; - I,J,Last: Integer; - begin - for I := 0 to 255 do Use[I] := I; - Last := Size-1; - J := 0; - for I := 0 to Size-2 do - begin - J := (J + D[I]) mod (Last + 1); - D[I] := Use[J]; - if J < Last then Move(Use[J + 1], Use[J], Last - J); - Dec(Last); - if J > Last then J := 0; - end; - D[Size-1] := Use[0]; - end; - - var - Used: array[0..127] of Boolean; - X,J,I,K,L: Integer; - P: PByteArray; - begin - P := D; - for X := 1 to FROG_Rounds do - begin - Inc(PChar(P), BufSize); - MakePermutation(P, 256); - if Invert then InvertPermutation(P); - Inc(PChar(P), 256); - MakePermutation(P, BufSize); - FillChar(Used, BufSize, False); - J := 0; - for I := 0 to BufSize -2 do - begin - if P[J] = 0 then - begin - K := J; - repeat - K := (K + 1) mod BufSize; - until not Used[K]; - P[J] := K; - L := K; - while P[L] <> K do L := P[L]; - P[L] := 0; - end; - Used[J] := True; - J := P[J]; - end; - for I := 0 to BufSize - 1 do - if P[I] = (I + 1) mod BufSize then - P[I] := (I + 2) mod BufSize; - Inc(PChar(P), BufSize); - end; - end; - - procedure HashKey(D: PByteArray); - var - I,J,K: Integer; - P: PByte; - begin - J := 0; - K := 0; - P := User; - for I := 0 to UserSize div 2 -1 do - begin - P^ := FROG_Data[J] xor TByteArray(Key)[K]; - Inc(P); - if J < 250 then Inc(J) else J := 0; - if K < Size-1 then Inc(K) else K := 0; - end; - MakeKey(PByteArray(User), False); - I := Size; - if I > BufSize then I := BufSize; - XORBuffers(Buffer, @Key, I, Buffer); - PByte(Buffer)^ := PByte(Buffer)^ xor Size; - I := UserSize div 2; - P := Pointer(D); - while I > 0 do - begin - Encode(Buffer); - J := I; - if J > BufSize then J := BufSize; - Move(Buffer^, P^, J); - Inc(P, J); - Dec(I, J); - end; - end; - -var - UKey: PByteArray; -begin - InitBegin(Size); - UKey := AllocMem(UserSize shr 1); - try - HashKey(UKey); - Protect; - Move(UKey^, User^, UserSize shr 1); - MakeKey(User, False); {encyption Key} - MakeKey(UKey, True); {decryption Key} - Move(UKey^, PByteArray(User)[UserSize shr 1], UserSize shr 1); - InitEnd(IVector); - finally - ReallocMem(UKey, 0); - end; -end; - -const -{don't change this} - Rijndael_Blocks = 4; - Rijndael_Rounds = 14; - -class procedure TROCipher_Rijndael.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := Rijndael_Blocks * 4; - AKeySize := 32; - AUserSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(Integer) * 2; -end; - -class function TROCipher_Rijndael.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 094h,06Dh,02Bh,05Eh,0E0h,0ADh,01Bh,05Ch - DB 0A5h,023h,0A5h,013h,095h,08Bh,03Dh,02Dh - DB 093h,087h,0F3h,037h,045h,051h,0F6h,058h - DB 09Bh,0E7h,090h,01Bh,036h,087h,0F9h,0A9h -end; - -procedure TROCipher_Rijndael.Encode(Data: Pointer); -var - P,K: PInteger; - I,A,B,C,D: Integer; -begin - P := User; - K := Data; - for I := 2 to FRounds do - begin - A := K^ xor P^; Inc(P); Inc(K); - B := K^ xor P^; Inc(P); Inc(K); - C := K^ xor P^; Inc(P); Inc(K); - D := K^ xor P^; Inc(P); - - K^ := Rijndael_T[0, D and $FF] xor - Rijndael_T[1, A shr 8 and $FF] xor - Rijndael_T[2, B shr 16 and $FF] xor - Rijndael_T[3, C shr 24]; Dec(K); - K^ := Rijndael_T[0, C and $FF] xor - Rijndael_T[1, D shr 8 and $FF] xor - Rijndael_T[2, A shr 16 and $FF] xor - Rijndael_T[3, B shr 24]; Dec(K); - K^ := Rijndael_T[0, B and $FF] xor - Rijndael_T[1, C shr 8 and $FF] xor - Rijndael_T[2, D shr 16 and $FF] xor - Rijndael_T[3, A shr 24]; Dec(K); - K^ := Rijndael_T[0, A and $FF] xor - Rijndael_T[1, B shr 8 and $FF] xor - Rijndael_T[2, C shr 16 and $FF] xor - Rijndael_T[3, D shr 24]; - end; - - A := K^ xor P^; Inc(P); Inc(K); - B := K^ xor P^; Inc(P); Inc(K); - C := K^ xor P^; Inc(P); Inc(K); - D := K^ xor P^; Inc(P); - - K^ := Rijndael_S[0, D and $FF] or - Rijndael_S[0, A shr 8 and $FF] shl 8 or - Rijndael_S[0, B shr 16 and $FF] shl 16 or - Rijndael_S[0, C shr 24] shl 24; Dec(K); - K^ := Rijndael_S[0, C and $FF] or - Rijndael_S[0, D shr 8 and $FF] shl 8 or - Rijndael_S[0, A shr 16 and $FF] shl 16 or - Rijndael_S[0, B shr 24] shl 24; Dec(K); - K^ := Rijndael_S[0, B and $FF] or - Rijndael_S[0, C shr 8 and $FF] shl 8 or - Rijndael_S[0, D shr 16 and $FF] shl 16 or - Rijndael_S[0, A shr 24] shl 24; Dec(K); - K^ := Rijndael_S[0, A and $FF] or - Rijndael_S[0, B shr 8 and $FF] shl 8 or - Rijndael_S[0, C shr 16 and $FF] shl 16 or - Rijndael_S[0, D shr 24] shl 24; - - for I := 1 to Rijndael_Blocks do - begin - K^ := K^ xor P^; - Inc(P); - Inc(K); - end; -end; - -procedure TROCipher_Rijndael.Decode(Data: Pointer); -var - P,K: PInteger; - I,A,B,C,D: Integer; -begin - P := Pointer(PChar(User) + UserSize shr 1); - Inc(P, FRounds * 4 +3); - K := Pointer(PChar(Data) + 12); - for I := 2 to FRounds do - begin - D := K^ xor P^; Dec(P); Dec(K); - C := K^ xor P^; Dec(P); Dec(K); - B := K^ xor P^; Dec(P); Dec(K); - A := K^ xor P^; Dec(P); - - K^ := Rijndael_T[4, A and $FF] xor - Rijndael_T[5, D shr 8 and $FF] xor - Rijndael_T[6, C shr 16 and $FF] xor - Rijndael_T[7, B shr 24]; Inc(K); - K^ := Rijndael_T[4, B and $FF] xor - Rijndael_T[5, A shr 8 and $FF] xor - Rijndael_T[6, D shr 16 and $FF] xor - Rijndael_T[7, C shr 24]; Inc(K); - K^ := Rijndael_T[4, C and $FF] xor - Rijndael_T[5, B shr 8 and $FF] xor - Rijndael_T[6, A shr 16 and $FF] xor - Rijndael_T[7, D shr 24]; Inc(K); - K^ := Rijndael_T[4, D and $FF] xor - Rijndael_T[5, C shr 8 and $FF] xor - Rijndael_T[6, B shr 16 and $FF] xor - Rijndael_T[7, A shr 24]; - end; - - D := K^ xor P^; Dec(P); Dec(K); - C := K^ xor P^; Dec(P); Dec(K); - B := K^ xor P^; Dec(P); Dec(K); - A := K^ xor P^; Dec(P); - - K^ := Rijndael_S[1, A and $FF] or - Rijndael_S[1, D shr 8 and $FF] shl 8 or - Rijndael_S[1, C shr 16 and $FF] shl 16 or - Rijndael_S[1, B shr 24] shl 24; Inc(K); - K^ := Rijndael_S[1, B and $FF] or - Rijndael_S[1, A shr 8 and $FF] shl 8 or - Rijndael_S[1, D shr 16 and $FF] shl 16 or - Rijndael_S[1, C shr 24] shl 24; Inc(K); - K^ := Rijndael_S[1, C and $FF] or - Rijndael_S[1, B shr 8 and $FF] shl 8 or - Rijndael_S[1, A shr 16 and $FF] shl 16 or - Rijndael_S[1, D shr 24] shl 24; Inc(K); - K^ := Rijndael_S[1, D and $FF] or - Rijndael_S[1, C shr 8 and $FF] shl 8 or - Rijndael_S[1, B shr 16 and $FF] shl 16 or - Rijndael_S[1, A shr 24] shl 24; - - for I := 0 to 3 do - begin - K^ := K^ xor P^; - Dec(P); - Dec(K); - end; -end; - -procedure TROCipher_Rijndael.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..7] of Integer; - - 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 - PIntArray(User)[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: PInteger; - begin - D := Pointer(PChar(User) + UserSize shr 1); - Move(User^, D^, UserSize shr 1); - Inc(D, 4); - for I := 0 to FRounds * 4 - 5 do - begin - D^ := Rijndael_Key[D^ and $FF] xor - ROL(Rijndael_Key[D^ shr 8 and $FF], 8) xor - ROL(Rijndael_Key[D^ shr 16 and $FF], 16) xor - ROL(Rijndael_Key[D^ shr 24], 24); - Inc(D); - end; - end; - -begin - InitBegin(Size); - if Size <= 16 then FRounds := 10 else - if Size <= 24 then FRounds := 12 else FRounds := 14; - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - BuildEncodeKey; - BuildDecodeKey; - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; -{$IFDEF VER_D3H} -type - PSkipjackTab = ^TSkipjackTab; - TSkipjackTab = array[0..255] of Byte; - -class procedure TROCipher_Skipjack.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 10; - AUserSize := $A00; -end; - -class function TROCipher_Skipjack.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D5h,013h,0A6h,092h,0ECh,024h,035h,0E8h - DB 017h,04Eh,02Bh,055h,05Eh,08Dh,027h,0DAh - DB 0C9h,09Ah,0A9h,0B9h,021h,03Dh,0A0h,001h - DB 018h,002h,0B3h,00Eh,0B7h,0B5h,051h,0EAh -end; - -procedure TROCipher_Skipjack.Encode(Data: Pointer); -var - Tab,Min: PSkipjackTab; - Max: PChar; - K,T,A,B,C,D: Integer; -begin - Min := User; - Max := PChar(Min) + 9 * 256; - Tab := Min; - A := Swap(PWordArray(Data)[0]); {holds as Integer, Compiler make faster Code} - B := Swap(PWordArray(Data)[1]); - C := Swap(PWordArray(Data)[2]); - D := Swap(PWordArray(Data)[3]); - K := 0; - repeat - Inc(K); - T := A; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - 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; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - B := T; - until K = 16; - repeat - Inc(K); - T := A; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - 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; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T and $FF] shl 8; Inc(Tab); if Tab > Max then Tab := Min; - T := T xor Tab[T shr 8]; Inc(Tab); if Tab > Max then Tab := Min; - B := T; - until K = 32; - PWordArray(Data)[0] := Swap(A); - PWordArray(Data)[1] := Swap(B); - PWordArray(Data)[2] := Swap(C); - PWordArray(Data)[3] := Swap(D); -end; - -procedure TROCipher_Skipjack.Decode(Data: Pointer); -var - Tab,Max: PSkipjackTab; - Min: PChar; - K,T,A,B,C,D: Integer; -begin - Min := User; - Max := Pointer(Min + 9 * 256); - Tab := Pointer(Min + 7 * 256); - A := Swap(PWordArray(Data)[0]); {holds as Integer, Compiler make faster Code} - B := Swap(PWordArray(Data)[1]); - C := Swap(PWordArray(Data)[2]); - D := Swap(PWordArray(Data)[3]); - K := 32; - repeat - T := B; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := 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]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - A := T; - Dec(K); - until K = 16; - repeat - T := B; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := 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]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T shr 8]; Dec(Tab); if Tab < Min then Tab := Max; - T := T xor Tab[T and $FF] shl 8; Dec(Tab); if Tab < Min then Tab := Max; - A := T; - Dec(K); - until K = 0; - PWordArray(Data)[0] := Swap(A); - PWordArray(Data)[1] := Swap(B); - PWordArray(Data)[2] := Swap(C); - PWordArray(Data)[3] := Swap(D); -end; - -procedure TROCipher_Skipjack.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..9] of Byte; - D: PByte; - I,J: Integer; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - D := User; - for I := 0 to 9 do - for J := 0 to 255 do - begin - D^ := Skipjack_Data[J xor K[I]]; - Inc(D); - end; - InitEnd(IVector); -end; -{$ENDIF} -{DES} -procedure DES_Func(Data: PIntArray; Key: PInteger); register; -var - L,R,X,Y,I: LongWord; -begin - L := SwapInteger(Data[0]); - R := SwapInteger(Data[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^; Inc(Key); - Y := R xor Key^; Inc(Key); - 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^; Inc(Key); - Y := L xor Key^; Inc(Key); - 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]); - 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; - - Data[0] := SwapInteger(R); - Data[1] := SwapInteger(L); -end; - -class procedure TROCipher_1DES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 8; - AUserSize := 32 * 4 * 2; -end; - -class function TROCipher_1DES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0ADh,069h,042h,0BBh,0F6h,068h,020h,04Dh - DB 053h,0CDh,0C7h,062h,013h,093h,098h,0C0h - DB 030h,00Dh,085h,00Bh,0E2h,0AAh,072h,009h - DB 06Fh,0DBh,05Fh,08Eh,0D3h,0E4h,0CFh,08Ah -end; - -procedure TROCipher_1DES.Encode(Data: Pointer); -begin - DES_Func(Data, User); -end; - -procedure TROCipher_1DES.Decode(Data: Pointer); -begin - DES_Func(Data, @PIntArray(User)[32]); -end; - -procedure TROCipher_1DES.MakeKey(const Data: array of Byte; Key: PInteger; 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: LongWord; - PC_M, PC_R: array[0..55] of Byte; - K: array[0..31] of LongWord; -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^ := 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; - Inc(Key); - Key^ := 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; - Inc(Key); - end; -end; - -procedure TROCipher_1DES.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..7] of Byte; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - MakeKey(K, User, False); - MakeKey(K, @PIntArray(User)[32], True); - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_2DES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 16; - AUserSize := 32 * 4 * 2 * 2; -end; - -class function TROCipher_2DES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 066h,05Ch,079h,027h,0E9h,01Ch,08Bh,0A0h - DB 0A9h,0E4h,099h,05Ah,015h,08Ch,0BDh,046h - DB 05Ch,09Ch,075h,091h,03Ch,038h,006h,09Dh - DB 075h,0B4h,07Eh,068h,0E9h,047h,0FDh,0ABh -end; - -procedure TROCipher_2DES.Encode(Data: Pointer); -begin - DES_Func(Data, User); - DES_Func(Data, @PIntArray(User)[32]); - DES_Func(Data, User); -end; - -procedure TROCipher_2DES.Decode(Data: Pointer); -begin - DES_Func(Data, @PIntArray(User)[64]); - DES_Func(Data, @PIntArray(User)[96]); - DES_Func(Data, @PIntArray(User)[64]); -end; - -procedure TROCipher_2DES.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..15] of Byte; - P: PInteger; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - P := User; - MakeKey(K[0], P, False); Inc(P, 32); - MakeKey(K[8], P, True); Inc(P, 32); - MakeKey(K[0], P, True); Inc(P, 32); - MakeKey(K[8], P, False); - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_3DES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 24; - AUserSize := 32 * 4 * 2 * 3; -end; - -class function TROCipher_3DES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 007h,04Ch,014h,0F3h,0E2h,02Eh,008h,0D9h - DB 064h,0BFh,06Fh,082h,0B5h,0DFh,0F0h,0A2h - DB 02Fh,02Dh,03Bh,0DBh,017h,0DBh,025h,0B6h - DB 0B5h,01Eh,0FAh,071h,037h,02Fh,0D1h,072h -end; - -procedure TROCipher_3DES.Encode(Data: Pointer); -begin - DES_Func(Data, User); - DES_Func(Data, @PIntArray(User)[32]); - DES_Func(Data, @PIntArray(User)[64]); -end; - -procedure TROCipher_3DES.Decode(Data: Pointer); -begin - DES_Func(Data, @PIntArray(User)[96]); - DES_Func(Data, @PIntArray(User)[128]); - DES_Func(Data, @PIntArray(User)[160]); -end; - -procedure TROCipher_3DES.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..23] of Byte; - P: PInteger; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - P := User; - MakeKey(K[ 0], P, False); Inc(P, 32); - MakeKey(K[ 8], P, True); Inc(P, 32); - MakeKey(K[16], P, False); Inc(P, 32); - MakeKey(K[16], P, True); Inc(P, 32); - MakeKey(K[ 8], P, False); Inc(P, 32); - MakeKey(K[ 0], P, True); - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -class procedure TROCipher_2DDES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - ABufSize := 16; -end; - -class function TROCipher_2DDES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 093h,06Ch,0F6h,043h,0C6h,0A7h,07Fh,0EDh - DB 04Dh,0B4h,070h,04Ah,0E2h,0A6h,006h,08Bh - DB 075h,013h,019h,0AFh,0E1h,082h,0EDh,035h - DB 04Eh,013h,0F6h,088h,0A4h,06Bh,033h,026h -end; - -procedure TROCipher_2DDES.Encode(Data: Pointer); -var - T: Integer; -begin - DES_Func(Data, User); - DES_Func(@PIntArray(Data)[2], User); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[32]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[32]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, User); - DES_Func(@PIntArray(Data)[2], User); -end; - -procedure TROCipher_2DDES.Decode(Data: Pointer); -var - T: Integer; -begin - DES_Func(Data, @PIntArray(User)[64]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[64]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[96]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[96]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[64]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[64]); -end; - -class procedure TROCipher_3DDES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - ABufSize := 16; -end; - -class function TROCipher_3DDES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 02Fh,05Ah,05Eh,0D4h,05Eh,08Ah,0AAh,04Eh - DB 0D2h,066h,059h,048h,01Dh,0E1h,095h,094h - DB 02Ah,09Fh,0CCh,01Fh,04Dh,0E6h,014h,0F0h - DB 050h,004h,003h,064h,066h,09Ah,077h,08Eh -end; - -procedure TROCipher_3DDES.Encode(Data: Pointer); -var - T: Integer; -begin - DES_Func(Data, User); - DES_Func(@PIntArray(Data)[2], User); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[32]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[32]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[64]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[64]); -end; - -procedure TROCipher_3DDES.Decode(Data: Pointer); -var - T: Integer; -begin - DES_Func(Data, @PIntArray(User)[96]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[96]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[128]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[128]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - DES_Func(Data, @PIntArray(User)[160]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[160]); -end; - -class procedure TROCipher_3TDES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - inherited GetContext(ABufSize, AKeySize, AUserSize); - ABufSize := 24; -end; - -class function TROCipher_3TDES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 00Bh,012h,0E4h,08Bh,0D9h,0CDh,008h,0BFh - DB 0CAh,0AEh,03Eh,05Fh,0F6h,0FEh,013h,0CDh - DB 03Fh,070h,06Eh,0CDh,053h,056h,03Fh,05Ah - DB 080h,00Fh,01Bh,01Eh,0FBh,09Ah,057h,096h -end; - -procedure TROCipher_3TDES.Encode(Data: Pointer); -var - T: Integer; -begin - DES_Func(@PIntArray(Data)[0], User); - DES_Func(@PIntArray(Data)[2], User); - DES_Func(@PIntArray(Data)[4], User); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - T := PIntArray(Data)[3]; PIntArray(Data)[3] := PIntArray(Data)[4]; PIntArray(Data)[3] := T; - DES_Func(@PIntArray(Data)[0], @PIntArray(User)[32]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[32]); - DES_Func(@PIntArray(Data)[4], @PIntArray(User)[32]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - T := PIntArray(Data)[3]; PIntArray(Data)[3] := PIntArray(Data)[4]; PIntArray(Data)[3] := T; - DES_Func(@PIntArray(Data)[0], @PIntArray(User)[64]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[64]); - DES_Func(@PIntArray(Data)[4], @PIntArray(User)[64]); -end; - -procedure TROCipher_3TDES.Decode(Data: Pointer); -var - T: Integer; -begin - DES_Func(@PIntArray(Data)[0], @PIntArray(User)[96]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[96]); - DES_Func(@PIntArray(Data)[4], @PIntArray(User)[96]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - T := PIntArray(Data)[3]; PIntArray(Data)[3] := PIntArray(Data)[4]; PIntArray(Data)[3] := T; - DES_Func(@PIntArray(Data)[0], @PIntArray(User)[128]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[128]); - DES_Func(@PIntArray(Data)[4], @PIntArray(User)[128]); - T := PIntArray(Data)[1]; PIntArray(Data)[1] := PIntArray(Data)[2]; PIntArray(Data)[2] := T; - T := PIntArray(Data)[3]; PIntArray(Data)[3] := PIntArray(Data)[4]; PIntArray(Data)[3] := T; - DES_Func(@PIntArray(Data)[0], @PIntArray(User)[160]); - DES_Func(@PIntArray(Data)[2], @PIntArray(User)[160]); - DES_Func(@PIntArray(Data)[4], @PIntArray(User)[160]); -end; - -class procedure TROCipher_DESX.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 8 * 2; {Key 8 bytes and Whitening 8 bytes} - AUserSize := 32 * 4 * 2 + 2 * 4 * 2; -end; - -class function TROCipher_DESX.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 039h,049h,0ECh,05Bh,065h,01Bh,01Eh,01Fh - DB 08Eh,085h,0FDh,0D9h,06Fh,0D1h,0D5h,0FBh - DB 015h,003h,009h,027h,0B0h,069h,067h,0F9h - DB 0A6h,0C8h,01Ch,02Ah,09Fh,08Eh,04Fh,06Eh -end; - -procedure TROCipher_DESX.Encode(Data: Pointer); -begin - PIntArray(Data)[0] := PIntArray(Data)[0] xor PIntArray(User)[64]; - PIntArray(Data)[1] := PIntArray(Data)[1] xor PIntArray(User)[65]; - DES_Func(Data, User); - PIntArray(Data)[0] := PIntArray(Data)[0] xor PIntArray(User)[66]; - PIntArray(Data)[1] := PIntArray(Data)[1] xor PIntArray(User)[67]; -end; - -procedure TROCipher_DESX.Decode(Data: Pointer); -begin - PIntArray(Data)[0] := PIntArray(Data)[0] xor PIntArray(User)[66]; - PIntArray(Data)[1] := PIntArray(Data)[1] xor PIntArray(User)[67]; - DES_Func(Data, @PIntArray(User)[32]); - PIntArray(Data)[0] := PIntArray(Data)[0] xor PIntArray(User)[64]; - PIntArray(Data)[1] := PIntArray(Data)[1] xor PIntArray(User)[65]; -end; - -procedure TROCipher_DESX.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..15] of Byte; -begin - FillChar(K, SizeOf(K), 0); - if Size > SizeOf(K) then Size := SizeOf(K); - Move(Key, K, Size); - InitNew(K, K[8], 8, IVector); - FillChar(K, SizeOf(K), 0); -end; - -procedure TROCipher_DESX.InitNew(const Key, Whitening; Size: Integer; IVector: Pointer); -const - Clorox: array[0..255] of Byte = ( - 189, 86,234,242,162,241,172, 42,176,147,209,156, 27, 51,253,208, - 48, 4,182,220,125,223, 50, 75,247,203, 69,155, 49,187, 33, 90, - 65,159,225,217, 74, 77,158,218,160,104, 44,195, 39, 95,128, 54, - 62,238,251,149, 26,254,206,168, 52,169, 19,240,166, 63,216, 12, - 120, 36,175, 35, 82,193,103, 23,245,102,144,231,232, 7,184, 96, - 72,230, 30, 83,243,146,164,114,140, 8, 21,110,134, 0,132,250, - 244,127,138, 66, 25,246,219,205, 20,141, 80, 18,186, 60, 6, 78, - 236,179, 53, 17,161,136,142, 43,148,153,183,113,116,211,228,191, - 58,222,150, 14,188, 10,237,119,252, 55,107, 3,121,137, 98,198, - 215,192,210,124,106,139, 34,163, 91, 5, 93, 2,117,213, 97,227, - 24,143, 85, 81,173, 31, 11, 94,133,229,194, 87, 99,202, 61,108, - 180,197,204,112,178,145, 89, 13, 71, 32,200, 79, 88,224, 1,226, - 22, 56,196,111, 59, 15,101, 70,190,126, 45,123,130,249, 64,181, - 29,115,248,235, 38,199,135,151, 37, 84,177, 40,170,152,157,165, - 100,109,122,212, 16,129, 68,239, 73,214,174, 46,221,118, 92, 47, - 167, 28,201, 9,105,154,131,207, 41, 57,185,233, 76,255, 67,171); - -var - K,H,W: array[0..7] of Byte; - I: Integer; - T: Byte; -begin - Size := Size * 2; - InitBegin(Size); - Size := Size shr 1; - FillChar(K, SizeOf(K), 0); Move(Key, K, Size); - FillChar(H, SizeOf(H), 0); Move(Whitening, H, Size); - MakeKey(K, @PIntArray(User)[0], False); - MakeKey(K, @PIntArray(User)[32], True); - - Move(H, PIntArray(User)[64], 8); - FillChar(W, SizeOf(W), 0); - for I := 0 to 7 do - begin - T := W[0] xor W[1]; - Move(W[1], W[0], 7); - W[7] := Clorox[T] xor K[I]; - end; - for I := 0 to 7 do - begin - T := W[0] xor W[1]; - Move(W[1], W[0], 7); - W[7] := Clorox[T] xor H[I]; - end; - Move(W, PIntArray(User)[66], 8); - InitEnd(IVector); -end; - -class procedure TROCipher_NewDES.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 15; - AUserSize := 60 * 2; -end; - -class function TROCipher_NewDES.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D5h,091h,04Fh,09Ch,074h,035h,046h,0FBh - DB 0D5h,0ADh,091h,031h,075h,014h,064h,0FEh - DB 0A7h,079h,021h,06Ah,029h,099h,047h,089h - DB 0D2h,00Dh,076h,00Ch,073h,09Ch,0CDh,017h -end; - - -procedure NewDES_Func(Data: Pointer; Key: PByte); -type - PNewDESRec = ^TNewDESRec; - TNewDESRec = packed record - A,B,C,D,E,F,G,H: Byte; - end; -var - I: Integer; -begin - with PNewDESRec(Data)^ do - begin - for I := 0 to 7 do - begin - E := E xor NewDES_Data[A xor Key^]; Inc(Key); - F := F xor NewDES_Data[B xor Key^]; Inc(Key); - G := G xor NewDES_Data[C xor Key^]; Inc(Key); - H := H xor NewDES_Data[D xor Key^]; Inc(Key); - - B := B xor NewDES_Data[E xor Key^]; Inc(Key); - C := C xor NewDES_Data[F xor E]; - D := D xor NewDES_Data[G xor Key^]; Inc(Key); - A := A xor NewDES_Data[H xor Key^]; Inc(Key); - end; - E := E xor NewDES_Data[A xor Key^]; Inc(Key); - F := F xor NewDES_Data[B xor Key^]; Inc(Key); - G := G xor NewDES_Data[C xor Key^]; Inc(Key); - H := H xor NewDES_Data[D xor Key^]; - end; -end; - -procedure TROCipher_NewDES.Encode(Data: Pointer); -begin - NewDES_Func(Data, User); -end; - -procedure TROCipher_NewDES.Decode(Data: Pointer); -begin - NewDES_Func(Data, @PByteArray(User)[60]); -end; - -procedure TROCipher_NewDES.Init(const Key; Size: Integer; IVector: Pointer); -var - K: array[0..14] of Byte; - E: PByte; - I: Integer; -begin - InitBegin(Size); - FillChar(K, SizeOf(K), 0); - Move(Key, K, Size); - E := User; - Move(K, E^, 15); Inc(E, 15); - Move(K, E^, 15); Inc(E, 15); - Move(K, E^, 15); Inc(E, 15); - Move(K, E^, 15); Inc(E, 15); - I := 11; - repeat - E^ := K[I]; Inc(E); Inc(I); - if I = 15 then I := 0; - E^ := K[I]; Inc(E); Inc(I); - if I = 15 then I := 0; - E^ := K[I]; Inc(E); Inc(I); - if I = 15 then I := 0; - E^ := K[I]; Inc(E); - I := (I + 9) mod 15; - if I = 12 then Break; - E^ := K[I]; Inc(E); Inc(I); - E^ := K[I]; Inc(E); Inc(I); - E^ := K[I]; Inc(E); - I := (I + 9) mod 15; - until False; - FillChar(K, SizeOf(K), 0); - InitEnd(IVector); -end; - -procedure TROCipher_Diamond2.SetRounds(Value: Integer); -begin - if (Value < 5) or (Value > 15) then Value := 10; - if Value = FRounds then Exit; - FRounds := Value; -end; - -class procedure TROCipher_Diamond2.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 16; - AKeySize := 256; - AUserSize := 0; -end; - -class function TROCipher_Diamond2.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 020h,0B3h,058h,0B4h,0CEh,022h,0FBh,076h - DB 02Dh,03Bh,093h,069h,005h,09Fh,006h,0C7h - DB 0E4h,0F7h,0C6h,09Ch,0E1h,0DBh,055h,023h - DB 052h,070h,0A1h,0DFh,0B1h,05Eh,0EDh,08Dh -end; - -procedure TROCipher_Diamond2.Encode(Data: Pointer); -var - I,J: Integer; - Key: PByteArray; - D: PByteArray; - Z: array[0..15] of Byte; -begin - Key := FBoxE; - D := Data; - for J := 0 to BufSize-1 do - begin - D[J] := Key[D[J]]; - Inc(PByte(Key), 256); - end; - for I := 0 to FRounds-2 do - begin - if BufSize = 8 then - begin - Z[ 0] := D[ 0] and 1 or D[ 1] and 2 or D[ 2] and 4 or D[ 3] and 8 or - D[ 4] and 16 or D[ 5] and 32 or D[ 6] and 64 or D[ 7] and 128; - Z[ 1] := D[ 1] and 1 or D[ 2] and 2 or D[ 3] and 4 or D[ 4] and 8 or - D[ 5] and 16 or D[ 6] and 32 or D[ 7] and 64 or D[ 0] and 128; - Z[ 2] := D[ 2] and 1 or D[ 3] and 2 or D[ 4] and 4 or D[ 5] and 8 or - D[ 6] and 16 or D[ 7] and 32 or D[ 0] and 64 or D[ 1] and 128; - Z[ 3] := D[ 3] and 1 or D[ 4] and 2 or D[ 5] and 4 or D[ 6] and 8 or - D[ 7] and 16 or D[ 0] and 32 or D[ 1] and 64 or D[ 2] and 128; - Z[ 4] := D[ 4] and 1 or D[ 5] and 2 or D[ 6] and 4 or D[ 7] and 8 or - D[ 0] and 16 or D[ 1] and 32 or D[ 2] and 64 or D[ 3] and 128; - Z[ 5] := D[ 5] and 1 or D[ 6] and 2 or D[ 7] and 4 or D[ 0] and 8 or - D[ 1] and 16 or D[ 2] and 32 or D[ 3] and 64 or D[ 4] and 128; - Z[ 6] := D[ 6] and 1 or D[ 7] and 2 or D[ 0] and 4 or D[ 1] and 8 or - D[ 2] and 16 or D[ 3] and 32 or D[ 4] and 64 or D[ 5] and 128; - Z[ 7] := D[ 7] and 1 or D[ 0] and 2 or D[ 1] and 4 or D[ 2] and 8 or - D[ 3] and 16 or D[ 4] and 32 or D[ 5] and 64 or D[ 6] and 128; - end else - begin - Z[ 0] := D[ 0] and 1 or D[ 1] and 2 or D[ 2] and 4 or D[ 3] and 8 or - D[ 4] and 16 or D[ 5] and 32 or D[ 6] and 64 or D[ 7] and 128; - Z[ 1] := D[ 1] and 1 or D[ 2] and 2 or D[ 3] and 4 or D[ 4] and 8 or - D[ 5] and 16 or D[ 6] and 32 or D[ 7] and 64 or D[ 8] and 128; - Z[ 2] := D[ 2] and 1 or D[ 3] and 2 or D[ 4] and 4 or D[ 5] and 8 or - D[ 6] and 16 or D[ 7] and 32 or D[ 8] and 64 or D[ 9] and 128; - Z[ 3] := D[ 3] and 1 or D[ 4] and 2 or D[ 5] and 4 or D[ 6] and 8 or - D[ 7] and 16 or D[ 8] and 32 or D[ 9] and 64 or D[10] and 128; - Z[ 4] := D[ 4] and 1 or D[ 5] and 2 or D[ 6] and 4 or D[ 7] and 8 or - D[ 8] and 16 or D[ 9] and 32 or D[10] and 64 or D[11] and 128; - Z[ 5] := D[ 5] and 1 or D[ 6] and 2 or D[ 7] and 4 or D[ 8] and 8 or - D[ 9] and 16 or D[10] and 32 or D[11] and 64 or D[12] and 128; - Z[ 6] := D[ 6] and 1 or D[ 7] and 2 or D[ 8] and 4 or D[ 9] and 8 or - D[10] and 16 or D[11] and 32 or D[12] and 64 or D[13] and 128; - Z[ 7] := D[ 7] and 1 or D[ 8] and 2 or D[ 9] and 4 or D[10] and 8 or - D[11] and 16 or D[12] and 32 or D[13] and 64 or D[14] and 128; - Z[ 8] := D[ 8] and 1 or D[ 9] and 2 or D[10] and 4 or D[11] and 8 or - D[12] and 16 or D[13] and 32 or D[14] and 64 or D[15] and 128; - Z[ 9] := D[ 9] and 1 or D[10] and 2 or D[11] and 4 or D[12] and 8 or - D[13] and 16 or D[14] and 32 or D[15] and 64 or D[ 0] and 128; - Z[10] := D[10] and 1 or D[11] and 2 or D[12] and 4 or D[13] and 8 or - D[14] and 16 or D[15] and 32 or D[ 0] and 64 or D[ 1] and 128; - Z[11] := D[11] and 1 or D[12] and 2 or D[13] and 4 or D[14] and 8 or - D[15] and 16 or D[ 0] and 32 or D[ 1] and 64 or D[ 2] and 128; - Z[12] := D[12] and 1 or D[13] and 2 or D[14] and 4 or D[15] and 8 or - D[ 0] and 16 or D[ 1] and 32 or D[ 2] and 64 or D[ 3] and 128; - Z[13] := D[13] and 1 or D[14] and 2 or D[15] and 4 or D[ 0] and 8 or - D[ 1] and 16 or D[ 2] and 32 or D[ 3] and 64 or D[ 4] and 128; - Z[14] := D[14] and 1 or D[15] and 2 or D[ 0] and 4 or D[ 1] and 8 or - D[ 2] and 16 or D[ 3] and 32 or D[ 4] and 64 or D[ 5] and 128; - Z[15] := D[15] and 1 or D[ 0] and 2 or D[ 1] and 4 or D[ 2] and 8 or - D[ 3] and 16 or D[ 4] and 32 or D[ 5] and 64 or D[ 6] and 128; - end; - for J := 0 to BufSize-1 do - begin - D[J] := Key[Z[J]]; - Inc(PByte(Key), 256); - end; - end; -end; - -procedure TROCipher_Diamond2.Decode(Data: Pointer); -var - I,J: Integer; - Key: PByteArray; - D: PByteArray; - Z: array[0..15] of Byte; -begin - D := Data; - Key := FBoxD; - for J := 0 to BufSize-1 do - begin - D[J] := Key[D[J]]; - Inc(PByte(Key), 256); - end; - for I := 0 to FRounds-2 do - begin - if BufSize = 8 then - begin - Z[ 0] := D[ 0] and 1 or D[ 7] and 2 or D[ 6] and 4 or D[ 5] and 8 or - D[ 4] and 16 or D[ 3] and 32 or D[ 2] and 64 or D[ 1] and 128; - Z[ 1] := D[ 1] and 1 or D[ 0] and 2 or D[ 7] and 4 or D[ 6] and 8 or - D[ 5] and 16 or D[ 4] and 32 or D[ 3] and 64 or D[ 2] and 128; - Z[ 2] := D[ 2] and 1 or D[ 1] and 2 or D[ 0] and 4 or D[ 7] and 8 or - D[ 6] and 16 or D[ 5] and 32 or D[ 4] and 64 or D[ 3] and 128; - Z[ 3] := D[ 3] and 1 or D[ 2] and 2 or D[ 1] and 4 or D[ 0] and 8 or - D[ 7] and 16 or D[ 6] and 32 or D[ 5] and 64 or D[ 4] and 128; - Z[ 4] := D[ 4] and 1 or D[ 3] and 2 or D[ 2] and 4 or D[ 1] and 8 or - D[ 0] and 16 or D[ 7] and 32 or D[ 6] and 64 or D[ 5] and 128; - Z[ 5] := D[ 5] and 1 or D[ 4] and 2 or D[ 3] and 4 or D[ 2] and 8 or - D[ 1] and 16 or D[ 0] and 32 or D[ 7] and 64 or D[ 6] and 128; - Z[ 6] := D[ 6] and 1 or D[ 5] and 2 or D[ 4] and 4 or D[ 3] and 8 or - D[ 2] and 16 or D[ 1] and 32 or D[ 0] and 64 or D[ 7] and 128; - Z[ 7] := D[ 7] and 1 or D[ 6] and 2 or D[ 5] and 4 or D[ 4] and 8 or - D[ 3] and 16 or D[ 2] and 32 or D[ 1] and 64 or D[ 0] and 128; - end else - begin - Z[ 0] := D[ 0] and 1 or D[15] and 2 or D[14] and 4 or D[13] and 8 or - D[12] and 16 or D[11] and 32 or D[10] and 64 or D[ 9] and 128; - Z[ 1] := D[ 1] and 1 or D[ 0] and 2 or D[15] and 4 or D[14] and 8 or - D[13] and 16 or D[12] and 32 or D[11] and 64 or D[10] and 128; - Z[ 2] := D[ 2] and 1 or D[ 1] and 2 or D[ 0] and 4 or D[15] and 8 or - D[14] and 16 or D[13] and 32 or D[12] and 64 or D[11] and 128; - Z[ 3] := D[ 3] and 1 or D[ 2] and 2 or D[ 1] and 4 or D[ 0] and 8 or - D[15] and 16 or D[14] and 32 or D[13] and 64 or D[12] and 128; - Z[ 4] := D[ 4] and 1 or D[ 3] and 2 or D[ 2] and 4 or D[ 1] and 8 or - D[ 0] and 16 or D[15] and 32 or D[14] and 64 or D[13] and 128; - Z[ 5] := D[ 5] and 1 or D[ 4] and 2 or D[ 3] and 4 or D[ 2] and 8 or - D[ 1] and 16 or D[ 0] and 32 or D[15] and 64 or D[14] and 128; - Z[ 6] := D[ 6] and 1 or D[ 5] and 2 or D[ 4] and 4 or D[ 3] and 8 or - D[ 2] and 16 or D[ 1] and 32 or D[ 0] and 64 or D[15] and 128; - Z[ 7] := D[ 7] and 1 or D[ 6] and 2 or D[ 5] and 4 or D[ 4] and 8 or - D[ 3] and 16 or D[ 2] and 32 or D[ 1] and 64 or D[ 0] and 128; - Z[ 8] := D[ 8] and 1 or D[ 7] and 2 or D[ 6] and 4 or D[ 5] and 8 or - D[ 4] and 16 or D[ 3] and 32 or D[ 2] and 64 or D[ 1] and 128; - Z[ 9] := D[ 9] and 1 or D[ 8] and 2 or D[ 7] and 4 or D[ 6] and 8 or - D[ 5] and 16 or D[ 4] and 32 or D[ 3] and 64 or D[ 2] and 128; - Z[10] := D[10] and 1 or D[ 9] and 2 or D[ 8] and 4 or D[ 7] and 8 or - D[ 6] and 16 or D[ 5] and 32 or D[ 4] and 64 or D[ 3] and 128; - Z[11] := D[11] and 1 or D[10] and 2 or D[ 9] and 4 or D[ 8] and 8 or - D[ 7] and 16 or D[ 6] and 32 or D[ 5] and 64 or D[ 4] and 128; - Z[12] := D[12] and 1 or D[11] and 2 or D[10] and 4 or D[ 9] and 8 or - D[ 8] and 16 or D[ 7] and 32 or D[ 6] and 64 or D[ 5] and 128; - Z[13] := D[13] and 1 or D[12] and 2 or D[11] and 4 or D[10] and 8 or - D[ 9] and 16 or D[ 8] and 32 or D[ 7] and 64 or D[ 6] and 128; - Z[14] := D[14] and 1 or D[13] and 2 or D[12] and 4 or D[11] and 8 or - D[10] and 16 or D[ 9] and 32 or D[ 8] and 64 or D[ 7] and 128; - Z[15] := D[15] and 1 or D[14] and 2 or D[13] and 4 or D[12] and 8 or - D[11] and 16 or D[10] and 32 or D[ 9] and 64 or D[ 8] and 128; - end; - for J := 0 to BufSize-1 do - begin - D[J] := Key[Z[J]]; - Inc(PByte(Key), 256); - end; - end; -end; - -procedure TROCipher_Diamond2.Init(const Key; Size: Integer; IVector: Pointer); -var - KI,Accum: Integer; - Prev: PByteArray; - - function KeyRand(const Max: Byte): Byte; - var - I, M: Integer; - B: Byte; - begin - Result := 0; - if Max = 0 then Exit; - M := 0; - I := Max; - while I > 0 do - begin - M := M shl 1 or 1; - I := I shr 1; - end; - I := 0; - repeat - if Prev <> nil then B := Prev[TByteArray(Key)[KI]] - else B := TByteArray(Key)[KI]; - Accum := CRC32(Accum, @B, 1); - Inc(KI); - if KI >= Size then - begin - KI := 0; - B := Size and $FF; Accum := CRC32(Accum, @B, 1); - B := Size shr 8 and $FF; Accum := CRC32(Accum, @B, 1); - end; - Result := Accum and M; - Inc(I); - if (I > 97) and (Result > Max) then Dec(Result, Max); - until Result <= Max; - end; - -var - I,J: Integer; - P,M,N: Byte; - D,E: PByteArray; - F: array[0..255] of Boolean; -begin - SetRounds(FRounds); - InitBegin(Size); - ReallocMem(FBoxE, FRounds * BufSize * 256); - ReallocMem(FBoxD, FRounds * BufSize * 256); - Accum := Integer($FFFFFFFF); - Prev := nil; - KI := 0; - E := FBoxE; - for I := 0 to FRounds-1 do - begin - for J := 0 to BufSize-1 do - begin - FillChar(F, SizeOf(F), False); - for N := 255 downto 0 do - begin - M := KeyRand(N); - P := 0; - while F[P] do Inc(P); - while M > 0 do - begin - Dec(M); - Inc(P); - while F[P] do Inc(P); - end; - E[P] := N; - F[P] := True; - end; - Prev := E; - Inc(PByte(E), 256); - end; - end; - E := FBoxE; - D := FBoxD; - Inc(PByte(D), FRounds * BufSize * 256); - for I := 0 to FRounds -1 do - begin - Dec(PByte(D), BufSize * 256); - for J := 0 to BufSize -1 do - begin - for N := 0 to 255 do - begin - D[PByte(E)^] := N; - Inc(PByte(E)); - end; - Inc(PByte(D), 256); - end; - Dec(PByte(D), BufSize * 256); - end; - InitEnd(IVector); -end; - -procedure TROCipher_Diamond2.Protect; -begin - inherited Protect; - ReallocMem(FBoxE, 0); - ReallocMem(FBoxD, 0); -end; - -procedure TROCipher_Diamond2Lite.SetRounds(Value: Integer); -begin - if (Value < 4) or (Value > 30) then Value := 10; - if Value = FRounds then Exit; - FRounds := Value; -end; - -class procedure TROCipher_Diamond2Lite.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 8; - AKeySize := 256; - AUserSize := 0; -end; - -class function TROCipher_Diamond2Lite.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 06Bh,02Dh,03Dh,0D1h,0F2h,0B1h,029h,0FFh - DB 055h,0C8h,081h,0A9h,0A5h,04Ch,027h,07Fh - DB 08Eh,0ABh,089h,071h,034h,0DCh,0D1h,0D7h - DB 09Bh,02Dh,01Fh,0CEh,09Bh,043h,0C1h,045h -end; - -type - PSapphireKey = ^TSapphireKey; - TSapphireKey = packed record - Rotor: Byte; - Ratchet: Byte; - Avalanche: Byte; - Plain: Byte; - RO_Cipher: Byte; - Cards: array[0..255] of Byte; - end; - -class procedure TROCipher_Sapphire.GetContext(var ABufSize, AKeySize, AUserSize: Integer); -begin - ABufSize := 32; - AKeySize := 1024; - AUserSize := SizeOf(TSapphireKey) * 2; -end; - -class function TROCipher_Sapphire.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 07Ch,082h,028h,0B7h,039h,045h,043h,09Dh - DB 044h,0E0h,09Ch,019h,083h,0D0h,039h,0ACh - DB 0B9h,0B7h,075h,018h,02Bh,05Dh,0F3h,06Ah - DB 0B2h,02Dh,024h,007h,05Fh,041h,0CDh,073h -end; - -procedure TROCipher_Sapphire.Encode(Data: Pointer); -var - I,C: Integer; - T: Byte; -begin - with PSapphireKey(User)^ do - begin - C := RO_Cipher; - for I := 0 to 31 do - begin - Inc(Ratchet, Cards[Rotor]); - Inc(Rotor); - T := Cards[C]; - Cards[C] := Cards[Ratchet]; - Cards[Ratchet] := Cards[Plain]; - Cards[Plain] := Cards[Rotor]; - Cards[Rotor] := T; - Inc(Avalanche, Cards[T]); - T := Cards[Plain] + Cards[C] + Cards[Avalanche]; - Plain := PByte(Data)^; - C := PByte(Data)^ xor Cards[Cards[T]] xor - Cards[(Cards[Ratchet] + Cards[Rotor]) and $FF]; - PByte(Data)^ := C; - Inc(PByte(Data)); - end; - RO_Cipher := C; - end; -end; - -procedure TROCipher_Sapphire.Decode(Data: Pointer); -var - I,C: Integer; - T: Byte; -begin - with PSapphireKey(User)^ do - begin - C := RO_Cipher; - for I := 0 to 31 do - begin - Inc(Ratchet, Cards[Rotor]); - Inc(Rotor); - T := Cards[C]; - Cards[C] := Cards[Ratchet]; - Cards[Ratchet] := Cards[Plain]; - Cards[Plain] := Cards[Rotor]; - Cards[Rotor] := T; - Inc(Avalanche, Cards[T]); - T := Cards[Plain] + Cards[C] + Cards[Avalanche]; - C := PByte(Data)^; - Plain := C xor Cards[Cards[T]] xor Cards[(Cards[Ratchet] + Cards[Rotor]) and $FF]; - PByte(Data)^ := Plain; - Inc(PByte(Data)); - end; - RO_Cipher := C; - end; -end; - -procedure TROCipher_Sapphire.Init(const Key; Size: Integer; IVector: Pointer); -var - Sum: Byte; - P: Integer; - - function KeyRand(const Max: Integer): Byte; - var - I, M: Integer; - begin - Result := 0; - if Max = 0 then Exit; - I := 0; - M := 1; - while M < Max do M := M shl 1 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; -begin - InitBegin(Size); - with PSapphireKey(User)^ do - if Size <= 0 then - begin - Rotor := 1; - Ratchet := 3; - Avalanche := 5; - Plain := 7; - RO_Cipher := 11; - for I := 0 to 255 do Cards[I] := 255 - I; - end else - begin - for I := 0 to 255 do Cards[I] := I; - P := 0; - Sum := 0; - for I := 255 downto 1 do - begin - S := KeyRand(I); - T := Cards[I]; - Cards[I] := Cards[S]; - Cards[S] := T; - end; - Rotor := Cards[1]; - Ratchet := Cards[3]; - Avalanche := Cards[5]; - Plain := Cards[7]; - RO_Cipher := Cards[Sum]; - end; - InitEnd(IVector); - Move(User^, Pointer(PChar(User) + SizeOf(TSapphireKey))^, SizeOf(TSapphireKey)); -end; - -procedure TROCipher_Sapphire.Done; -begin - inherited Done; - Move(Pointer(PChar(User) + SizeOf(TSapphireKey))^, User^, SizeOf(TSapphireKey)); -end; - -initialization -{$IFNDEF ManualRegisterClasses} - RegisterCipher(TROCipher_Cast128, 'Cast 128', ''); - RegisterCipher(TROCipher_Cast256, 'Cast 256', 'Patented'); - RegisterCipher(TROCipher_1DES, 'DES Single 8byte', ''); - RegisterCipher(TROCipher_2DES, 'DES Double 8byte', ''); - RegisterCipher(TROCipher_2DDES, 'DES Double 16byte', ''); - RegisterCipher(TROCipher_3DES, 'DES Triple 8byte', ''); - RegisterCipher(TROCipher_3DDES, 'DES Triple 16byte', ''); - RegisterCipher(TROCipher_3TDES, 'DES Triple 24byte', ''); - RegisterCipher(TROCipher_DESX, 'DESX', 'Copyright by RSA'); - RegisterCipher(TROCipher_Diamond2, 'Diamond II', ''); - RegisterCipher(TROCipher_Diamond2Lite, 'Diamond II Lite', ''); - RegisterCipher(TROCipher_FROG, '', ''); - RegisterCipher(TROCipher_Mars, '', 'Patented'); - RegisterCipher(TROCipher_Misty, 'Misty 1', 'free for non-commercial'); - RegisterCipher(TROCipher_NewDES, '', ''); - RegisterCipher(TROCipher_RC2, '', ''); - RegisterCipher(TROCipher_RC4, '', 'Patented by RSA'); - RegisterCipher(TROCipher_RC5, '', 'Patented by RSA'); - RegisterCipher(TROCipher_RC6, '', 'Patented by RSA'); - RegisterCipher(TROCipher_Rijndael, '', ''); - RegisterCipher(TROCipher_Sapphire, 'Sapphire II', ''); - {$IFDEF VER_D3H} - RegisterCipher(TROCipher_Skipjack, '', ''); - {$ENDIF} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCiphers.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCiphers.pas deleted file mode 100644 index 1366ac3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROCiphers.pas +++ /dev/null @@ -1,67 +0,0 @@ -unit uROCiphers; - -interface - -uses - Windows, SysUtils, Classes, uroCipher, uroCipher1, uroHash, uroDECUtil; - -type - TROBaseCipher = class(TObject) - public - procedure EncryptStream(const Plaintext, Ciphertext: TStream); virtual; abstract; - procedure DecryptStream(const Ciphertext, Plaintext: TStream); virtual; abstract; - end; - - TRODECCipher = class(TROBaseCipher) - protected - fCipher: TROCipher; - public - constructor Create(aCipherClass: TROCipherClass; aKey: string); - destructor Destroy; override; - procedure EncryptStream(const Plaintext, Ciphertext: TStream); override; - procedure DecryptStream(const Ciphertext, Plaintext: TStream); override; - end; - -implementation - -{ TRODECCipher } - -constructor TRODECCipher.Create(aCipherClass: TROCipherClass; aKey: string); -var - i : Integer; - keyval : string; -begin - fCipher := aCipherClass.Create('', nil); - fCipher.Mode := cmCTS; - fCipher.HashClass := TROHash_RipeMD256; - - i := Length(aKey) div 2; - if i > fCipher.KeySize then - i := fCipher.KeySize; - - //convert key to binary - keyval := formattostr(PChar(aKey), Length(aKey), fmthex); - - fCipher.Init(keyval[1], i, nil); -end; - -procedure TRODECCipher.DecryptStream(const Ciphertext, Plaintext: TStream); -begin - fCipher.CodeStream(Ciphertext, Plaintext, Ciphertext.Size - Ciphertext.Position, paDecode); -end; - -destructor TRODECCipher.Destroy; -begin - fCipher.Free; - - inherited; -end; - -procedure TRODECCipher.EncryptStream(const Plaintext, Ciphertext: TStream); -begin - //Plaintext.seek(0, soFromBeginning); - fCipher.CodeStream(Plaintext, Ciphertext, Plaintext.Size, paEncode); -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECConst.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECConst.pas deleted file mode 100644 index 5bb4b61..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECConst.pas +++ /dev/null @@ -1,78 +0,0 @@ -unit uRODECConst; - -interface - -{$I uROVer.inc} - -{$IFDEF VER_D3H} -resourcestring -{$ELSE} -const -{$ENDIF} -// DECUTils.pas (all parts) - sProtectionCircular = 'Circular Protection detected, Protection Object is invalid.'; - sStringFormatExists = 'String Format "%d" does not exist.'; - sInvalidStringFormat = 'Input is not a valid %s Format.'; - sInvalidFormatString = 'Input cannot be converted to %s Format.'; - sFMT_COPY = 'copy Input to Output'; - sFMT_HEX = 'Hexadecimal'; - sFMT_HEXL = 'Hexadecimal lowercase'; - sFMT_MIME64 = 'MIME Base 64'; - sFMT_UU = 'UU Coding'; - sFMT_XX = 'XX Coding'; - -// RO_Cipher.pas (Part I) - sInvalidKey = 'Encryptionkey is invalid'; - sInvalidCRC = 'Encrypted Data is corrupt, invalid Checksum'; - sInvalidKeySize = 'Length from Encryptionkey is invalid.'#13#10+ - 'Keysize for %s must be within %d-%d bytes'; - sNotInitialized = '%s is not initialized, call Init() or InitKey() first.'; - sInvalidMACMode = 'Invalid Ciphermode selected to produce MAC.'#13#10 + - 'Please use Modes cmCBC, cmCTS, cmCFB, cmCBCMAC, cmCFBMAC or cmCTSMAC for CalcMAC.'; - sCantCalc = 'Invalid Ciphermode selected.'; -// RO_Rng.pas (Part I) - sInvalidRandomStream = 'Invalid Random Data detected.'; - sRandomDataProtected = 'Random Data is protected.'; -// BNG.pas (Part II) - sBBSnotSeekable = 'BBS Generator is not seekable.'; - sBigNumDestroy = 'Bignums used in a BBS Generator cannot be destroyed.'; - sIndexOutOfRange = 'BBS Error: Index out of Range.'; -// BigNum.pas (Part II) - sBigNumAborted = 'BigNum aborted by User.'; - sErrGeneric = 'Bignum Generic Error.'; - sErrAsInteger = 'BigNum overflow in AsInteger.'; - sErrAsComp = 'BigNum overflow in AsComp.'; - sErrAsFloat = 'BigNum overflow in AsFloat.'; - sNumberFormat = 'BigNum invalid Numberformat for Base %d.'#13#10'Value: %s'; - sDivByZero = 'BigNum division by Zero.'; - sStackIndex = 'BigNum Stackindex out of range.'; - sLoadFail = 'BigNum invalid data format.'; - sParams = 'BigNum parameter error.'#13#10'%s.'; - sJacobi = 'BigNum Jacobi(A, B), B must be >= 3, Odd and B < A'; - sSPPrime = 'BigNum IsSPPrime(A, Base), |Base| must be > 1, |A| > |Base| and |A| >= 3'; - sSetPrime = 'BigNum SetPrime(Base, Residue, Modulus), Invalid Parameter.'#13#10'%s.'; - sSetPrimeSize = 'Value must be greater than 32767'; - sSetPrimeParam = 'GCD(Residue, Modulus) must be 1 and Residue < Modulus'; - sSqrt = 'BigNum Sqrt(A) A must be positive'; - sExpMod = 'BigNum ExpMod(E, M) M must be positive'; - sCalcName = 'Calculation No %d'; -// OTPass.pas (Part III) - sInvalidState = 'Invalid Protector State detected.'; - sIDOutOfRange = 'Protector Error: ID is out of Range.'; -// RO_Compress.pas (Part I) - sInvalidZIPData = 'Invalid compressed Data detected.'; -// RO_RFC2289.pas (Part I) - sInvalidChallenge = 'Challenge is not in RO_RFC2289 Format.'; - sInvalidPassword = 'Invalid Passphraselength, must be more than 9 Chars.'; - sInvalidSeed = 'Invalid Seed Value in OTPCalc.'; - sInvalidCalc = 'Invalid Parameters in OTPCalc.'; - sInvalidDictionary = 'Used Dictionary in %s is invalid.'; - sOTPIdent = 'otp-'; // RO_RFC2289 Ident - sOTPExt = 'ext'; // RFC2444 - sOTPWord = 'word:'; // RFC2444 - sOTPHex = 'hex:'; // RFC2444 - sSKeyIdent = 's/key'; // RFC1760 Ident - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.pas deleted file mode 100644 index a134522..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.pas +++ /dev/null @@ -1,175 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Delphi Encryption Compendium - Delphi 2-4, designed and testet under D3 & D4 - Remarks: remove RO_Cipher1 from the Uses Clausel to - use only a Selection from Ciphers (RO_Cipher.pas) -} -unit uRODECReg; - -{$INCLUDE ..\RemObjects.inc} - -{$DEFINE Part_II} -{$DEFINE Part_III} - -interface - -uses - uRODECConst, uRODECUtil, uROHash, uROCipher, uROHCMngr, SysUtils, Classes, - {$IFDEF DELPHI5} DsgnIntf, {$ELSE} DesignIntf, DesignEditors, {$ENDIF} - uROCipher1, uRORFC2289 -{$IFDEF Part_II} -{$ENDIF} -{$IFDEF Part_III} -{$ENDIF}; - - -type -// List all registered RO_Hash Names - TROAlgorithmHashProperty = class(TStringProperty) - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; -// List only Checksums - TROAlgorithmChecksumProperty = class(TROAlgorithmHashProperty) - procedure GetValues(Proc: TGetStrProc); override; - end; -// List only Secure Hashs (excludes Checksum) - TROAlgorithmSecureHashProperty = class(TROAlgorithmHashProperty) - procedure GetValues(Proc: TGetStrProc); override; - end; -// List all registered Ciphers - TROAlgorithmCipherProperty = class(TROAlgorithmHashProperty) - procedure GetValues(Proc: TGetStrProc); override; - end; -// List all valid Idents ("otp-", "s/key") - TROOTPIdentProperty = class(TStringProperty) - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - end; -// List all registered Stringformats - TROStringFormatProperty = class(TIntegerProperty) - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - function GetValue: String; override; - procedure SetValue(const Value: String); override; - end; - -procedure Register; - -implementation - -{$R *.RES} - -function TROAlgorithmHashProperty.GetAttributes: TPropertyAttributes; -begin - Result := [paReadOnly, paValueList, paMultiSelect]; -end; - -procedure TROAlgorithmHashProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; -begin - with HashList do - for I := 0 to Count-1 do Proc(Names[I]); -end; - -procedure TROAlgorithmChecksumProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; -begin - with HashList do - for I := 0 to Count-1 do - if TROHashClass(Objects[I]).InheritsFrom(TROChecksum) then Proc(Names[I]); -end; - -procedure TROAlgorithmSecureHashProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; -begin - with HashList do - for I := 0 to Count-1 do - if not TROHashClass(Objects[I]).InheritsFrom(TROChecksum) then Proc(Names[I]); -end; - -procedure TROAlgorithmCipherProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; -begin - with CipherList do - for I := 0 to Count-1 do Proc(Names[I]); -end; - -function TROOTPIdentProperty.GetAttributes: TPropertyAttributes; -begin - Result := [paValueList, paMultiSelect]; -end; - -procedure TROOTPIdentProperty.GetValues(Proc: TGetStrProc); -begin - Proc(sOTPIdent); - Proc(sSKeyIdent); -end; - -function TROStringFormatProperty.GetAttributes: TPropertyAttributes; -begin - Result := [paValueList, paMultiSelect]; -end; - -procedure TROStringFormatProperty.GetValues(Proc: TGetStrProc); -var - I: Integer; - S: TStringList; -begin - S := TStringList.Create; - try - GetStringFormats(S); - for I := 0 to S.Count-1 do Proc(S[I]); - finally - S.Free; - end; -end; - -function TROStringFormatProperty.GetValue: String; -var - Fmt: TROStringFormatClass; -begin - Fmt := StringFormat(GetOrdValue); - if Fmt <> nil then Result := Fmt.Name else Result := '(unknown)'; -end; - -procedure TROStringFormatProperty.SetValue(const Value: String); -var - I: Integer; - S: TStringList; -begin - S := TStringList.Create; - try - GetStringFormats(S); - I := S.IndexOf(Value); - if I < 0 then SetOrdValue(StrToIntDef(Value, DefaultStringFormat)) - else SetOrdValue(TROStringFormatClass(S.Objects[I]).Format); - finally - S.Free; - end; -end; - -procedure Register; -begin - {$IFDEF REGISTER_RODEC} - RegisterComponents('RemObjects DEC', [TROHashManager, TROCipherManager, TROOneTimePassword]); - RegisterPropertyEditor(TypeInfo(String), TROOneTimePassword, 'Algorithm', TROAlgorithmSecureHashProperty); - RegisterPropertyEditor(TypeInfo(String), TROOneTimePassword, 'Ident', TROOTPIdentProperty); - RegisterPropertyEditor(TypeInfo(Integer), TROOneTimePassword, 'Format', TROStringFormatProperty); - RegisterPropertyEditor(TypeInfo(String), TROHashManager, 'Algorithm', TROAlgorithmHashProperty); - RegisterPropertyEditor(TypeInfo(String), TROCipherManager, 'Algorithm', TROAlgorithmCipherProperty); - {$ENDIF REGISTER_RODEC} -{$IFDEF Part_II} -{$ENDIF} -{$IFDEF Part_III} -{$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.res deleted file mode 100644 index 915f25d..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECReg.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECUtil.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECUtil.pas deleted file mode 100644 index 3dda5e8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRODECUtil.pas +++ /dev/null @@ -1,1672 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Delphi Encryption Compendium - Delphi 2-4, BCB 3-4, designed and testet under D3 and D4 - Description: Utilitys for the DEC Packages - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -} -unit uRODECUtil; - -interface - -uses SysUtils, Classes; - -{$I uROVer.inc} -{$I RemObjects.inc} - -const -// String Formats - fmtDEFAULT = -1; // use DefaultStringFormat - fmtNONE = 0; // allways an Empty String, nothing Action - fmtCOPY = 1; // One to One binary (input = output) - fmtHEX = 16; // Hexadecimal - fmtHEXL = 1016; // Hexadecimal lowercase - fmtMIME64 = $1064; // MIME Base 64 - fmtUU = $5555; // UU Coding $5555 = 'UU' - fmtXX = $5858; // XX Coding $5858 = 'XX' - -// 2 - 64 reserved for Formats to the Base 2 - 64 -// over 1000 all other Formats - -type -{$IFNDEF VER_D4H} - LongWord = LongInt; - PLongWord = ^LongWord; -{$ENDIF} - PByte = ^Byte; - PInteger = ^LongWord; - PWord = ^Word; - PIntArray = ^TIntArray; - TIntArray = array[0..1023] of LongWord; - - EROProtection = class(Exception); - EROStringFormat = class(Exception); - -// basic Class for all Protection Classes, TROCipher, TROHash, TRORandom -// TProtect can build a chain with varios Encryption Algos. -// i.E. CodeBuffer() can en/decode the Buffer with more as one RO_Cipher when -// property Protection is set to a other RO_Cipher :-) - TPAction = (paEncode, paDecode, paScramble, paCalc, paWipe); - TPActions = set of TPAction; - -{$IFDEF VER_D3H} - TROProtection = class(TInterfacedObject) - private -{$ELSE} - TROProtection = class(TObject) - private - FRefCount: Integer; -{$ENDIF} - FProtection: TROProtection; - FActions: TPActions; - function GetProtection: TROProtection; - procedure SetProtection(Value: TROProtection); - protected - procedure CodeInit(Action: TPAction); virtual; - procedure CodeDone(Action: TPAction); virtual; - procedure CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); virtual; - public - constructor Create(AProtection: TROProtection); - destructor Destroy; override; - - class function Identity: Word; - - function Release: Integer; - function AddRef: Integer; - - procedure CodeStream(Source, Dest: TStream; DataSize: Integer; Action: TPAction); virtual; - procedure CodeFile(const Source, Dest: String; Action: TPAction); virtual; - function CodeString(const Source: String; Action: TPAction; Format: Integer): String; virtual; - function CodeBuffer(var Buffer; BufferSize: Integer; Action: TPAction): Integer; virtual; -// Protection Object, to cascade more Protection - property Protection: TROProtection read GetProtection write SetProtection; - property Actions: TPActions read FActions write FActions default [paEncode..paWipe]; -{$IFNDEF VER_D3H} - property RefCount: Integer read FRefCount; -{$ENDIF} - end; - -// String converting - - TROStringFormatClass = class of TROStringFormat; - - TROStringFormat = class(TObject) // for binary one to one convert = fmtCOPY - public - class function ToStr(Value: PChar; Len: Integer): String; virtual; - class function StrTo(Value: PChar; Len: Integer): String; virtual; - class function Name: String; virtual; - class function Format: Integer; virtual; - class function IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; virtual; - end; - - TROStringFormat_HEX = class(TROStringFormat) // Hexadecimal = fmtHEX - public - class function ToStr(Value: PChar; Len: Integer): String; override; - class function StrTo(Value: PChar; Len: Integer): String; override; - class function Name: String; override; - class function Format: Integer; override; - class function IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; override; - class function CharTable: PChar; virtual; - end; - - TROStringFormat_HEXL = class(TROStringFormat_HEX) // Hexadecimal lowercase = fmtHEXL - public - class function Name: String; override; - class function Format: Integer; override; - class function CharTable: PChar; override; - end; - - TROStringFormat_MIME64 = class(TROStringFormat_HEX) // MIME Base 64 = fmtMIME64 - public - class function ToStr(Value: PChar; Len: Integer): String; override; - class function StrTo(Value: PChar; Len: Integer): String; override; - class function Name: String; override; - class function Format: Integer; override; - class function CharTable: PChar; override; - end; - - TROStringFormat_UU = class(TROStringFormat) // UU Encode = fmtUU - public - class function ToStr(Value: PChar; Len: Integer): String; override; - class function StrTo(Value: PChar; Len: Integer): String; override; - class function Name: String; override; - class function Format: Integer; override; - class function IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; override; - class function CharTable: PChar; virtual; - end; - - TROStringFormat_XX = class(TROStringFormat_UU) // XX Encode = fmtXX - public - class function Name: String; override; - class function Format: Integer; override; - class function CharTable: PChar; override; - end; - -{Progress (gauge) for RO_Hash and RO_Cipher} - TProgressEvent = procedure(Sender: TObject; Current, Maximal: Integer) of Object; - -//calculate CRCR16/CRC32 Checksum, CRC is default $FFFFFFFF, -//after calc you must inverse Result with NOT -function CRC16(CRC: Word; Data: Pointer; DataSize: LongWord): Word; -function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord; -// the basicly used TestVector for all RO_Hash/RO_Cipher classes -// used for SelfTest, random Data, don't modify -function GetTestVector: PChar; register; - -// String/Format routines -// convert any String to Format -function StrToFormat(Value: PChar; Len, Format: Integer): String; -// convert any Format to String -function FormatToStr(Value: PChar; Len, Format: Integer): String; -// convert any Format to Format -function ConvertFormat(Value: PChar; Len, FromFormat, ToFormat: Integer): String; -// Check is String convertable to Format -function IsValidString(Value: PChar; Len, Format: Integer): Boolean; -// Check is Format an valid Format -function IsValidFormat(Value: PChar; Len, Format: Integer): Boolean; -// register a new Format -procedure RegisterStringFormats(const StringFormats: array of TROStringFormatClass); -// give all registered Formats in Strings -procedure GetStringFormats(Strings: TStrings); -// the Default, = fmtMIME64 -function DefaultStringFormat: Integer; -// set the Default -procedure SetDefaultStringFormat(Format: Integer); -// give StringFormatClass from Format -function StringFormat(Format: Integer): TROStringFormatClass; -// insert #13#10 Chars in Blocks from BlockSize -function InsertCR(const Value: String; BlockSize: Integer): String; -// delete all #13 and #10 Chars -function DeleteCR(const Value: String): String; -// format any String to a Block -function InsertBlocks(const Value, BlockStart, BlockEnd: String; BlockSize: Integer): String; -// remove any Block format -function RemoveBlocks(const Value, BlockStart, BlockEnd: String): String; -// give back a shorter Name, i.E. TROHash_MD4 -> "MD4" or TROCipher_Blowfish -> "Blowfish" -function GetShortClassName(Value: TClass): String; - -// Result := Value shl Shift or Value shr (32 - Shift) -function ROL(Value: LongWord; Shift: Integer): LongWord; -// Result := ROL(Value, Shift) + Add -function ROLADD(Value, Add: LongWord; Shift: Integer): LongWord; -// Result := ROL(Value, Shift) - Sub -function ROLSUB(Value, Sub: LongWord; Shift: Integer): LongWord; -// Result := Value shr Shift or Value shl (32 - Shift) -function ROR(Value: LongWord; Shift: Integer): LongWord; -// Result := ROR(Value, Shift) + Add -function RORADD(Value, Add: LongWord; Shift: Integer): LongWord; -// Result := ROR(Value, Shift) - Sub -function RORSUB(Value, Sub: LongWord; Shift: Integer): LongWord; -// Reverse the Bitorder from Value -function SwapBits(Value: LongWord): LongWord; -// Index of Least Significant Bit from Value -function LSBit(Value: Integer): Integer; -// Index of Most Significant Bit from Value -function MSBit(Value: Integer): Integer; -// Check iff only One Bit is set and give back the Index -function OneBit(Value: Integer): Integer; -// Compare Memory, D2 have no CompareMem, Result can be -1, 0, 1 -function MemCompare(P1, P2: Pointer; Size: Integer): Integer; -// XOR's Buffers I1 and I2 Size Bytes to Dest -procedure XORBuffers(I1, I2: Pointer; Size: Integer; Dest: Pointer); -// Processor Type -function CPUType: Integer; {3 = 386, 4 = 486, 5 = Pentium, 6 > Pentium i.E. PII} -// call a installed Progress Event -procedure DoProgress(Sender: TObject; Current, Maximal: Integer); -// saver Test -function IsObject(AObject: Pointer; AClass: TClass): Boolean; -// Time Seed produced from GetSystemTime and QueryPerformanceCounter -function RndTimeSeed: Integer; -// XOR Buffer Size Bytes with Seed Randoms, -// the initial State from Buffer have effect on the Output -function RndXORBuffer(Seed: Integer; var Buffer; Size: Integer): Integer; -// encapsulate QueryPerformanceCounter/Frequency - -{$IFNDEF DELPHI10UP} -function PerfCounter: Comp; -function PerfFreq: Comp; -{$ENDIF} - -const - InitTestIsOk : Boolean = False; - IdentityBase : Word = $1234; - -{this is set to SwapInt for <= 386 and BSwapInt >= 486 CPU, don't modify} - SwapInteger : function(Value: LongWord): LongWord; register = nil; -{Count of Integers Buffer} - SwapIntegerBuffer : procedure(Source, Dest: Pointer; Count: Integer); register = nil; -{Progress callback function, set this to your Progresscallback} - Progress: TProgressEvent = nil; - -implementation - -uses Windows, uRODECConst; - -const - FCPUType : Integer = 0; - FStrFMTs : TList = nil; // registered Stringformats - FStrFMT : Integer = fmtMIME64; // Default Stringformat - -function PerfCounter: Comp; -begin -{$IFDEF VER_D4H} - if not QueryPerformanceCounter(TULargeInteger(Result).QuadPart) then -{$ELSE} - if not QueryPerformanceCounter(TLargeInteger(Result)) then -{$ENDIF} - Result := GetTickCount; -end; - -function PerfFreq: Comp; -begin -{$IFDEF VER_D4H} - if not QueryPerformanceFrequency(TULargeInteger(Result).QuadPart) then -{$ELSE} - if not QueryPerformanceFrequency(TLargeInteger(Result)) then -{$ENDIF} - Result := 1000; -end; - -function DefaultStringFormat: Integer; -begin - Result := FStrFMT; -end; - -procedure SetDefaultStringFormat(Format: Integer); -begin - if (Format = fmtDEFAULT) or (StringFormat(Format) = nil) then FStrFMT := fmtMIME64 - else FStrFMT := Format; -end; - -// TROProtection Class -function TROProtection.GetProtection: TROProtection; -begin - if (FProtection <> nil) and not IsObject(FProtection, TROProtection) then FProtection := nil; - Result := FProtection; -end; - -procedure TROProtection.SetProtection(Value: TROProtection); - - function CheckProtection(P: TROProtection): Boolean; - begin - Result := True; - if IsObject(P, TROProtection) then - if P = Self then Result := False - else Result := CheckProtection(P.FProtection) - end; - -begin - if Value <> FProtection then - if CheckProtection(Value) then - begin - FProtection.Release; - FProtection := Value; - FProtection.AddRef; - end else raise EROProtection.Create(sProtectionCircular) -end; - -procedure TROProtection.CodeInit(Action: TPAction); -begin - if Protection <> nil then Protection.CodeInit(Action); -end; - -procedure TROProtection.CodeDone(Action: TPAction); -begin - if Protection <> nil then Protection.CodeDone(Action); -end; - -procedure TROProtection.CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); -begin - if Protection <> nil then Protection.CodeBuf(Buffer, BufferSize, Action); -end; - -function TROProtection.Release: Integer; -begin - if IsObject(Self, TROProtection) then - begin -{$IFDEF VER_D3H} - Result := IUnknown(Self)._Release; -{$ELSE} - Dec(FRefCount); - Result := FRefCount; - if FRefCount = 0 then Destroy; -{$ENDIF} - end else Result := 0; -end; - -function TROProtection.AddRef: Integer; -begin - if IsObject(Self, TROProtection) then - begin -{$IFDEF VER_D3H} - Result := IUnknown(Self)._AddRef; -{$ELSE} - Inc(FRefCount); - Result := FRefCount; -{$ENDIF} - end else Result := 0; -end; - -procedure TROProtection.CodeStream(Source, Dest: TStream; DataSize: Integer; Action: TPAction); -const - maxBufSize = 1024 * 4; -var - Buf: PChar; - SPos: Integer; - DPos: Integer; - Len: Integer; - Size: Integer; -begin - if Source = nil then Exit; - if Dest = nil then Dest := Source; - if DataSize < 0 then - begin - DataSize := Source.Size; - Source.Position := 0; - end; - CodeInit(Action); - Buf := nil; - Size := DataSize; - DoProgress(Self, 0, Size); - try - Buf := AllocMem(maxBufSize); - DPos := Dest.Position; - SPos := Source.Position; - if Action = paCalc then - begin - while DataSize > 0 do - begin - Len := DataSize; - if Len > maxBufSize then Len := maxBufSize; - Len := Source.Read(Buf^, Len); - if Len <= 0 then Break; - CodeBuf(Buf^, Len, paCalc); - Dec(DataSize, Len); - DoProgress(Self, Size - DataSize, Size); - end; - end else - begin - while DataSize > 0 do - begin - Source.Position := SPos; - Len := DataSize; - if Len > maxBufSize then Len := maxBufSize; - Len := Source.Read(Buf^, Len); - SPos := Source.Position; - if Len <= 0 then Break; - CodeBuf(Buf^, Len, Action); - Dest.Position := DPos; - Dest.Write(Buf^, Len); - DPos := Dest.Position; - Dec(DataSize, Len); - DoProgress(Self, Size - DataSize, Size); - end; - end; - finally - DoProgress(Self, 0, 0); - ReallocMem(Buf, 0); - CodeDone(Action); - end; -end; - -procedure TROProtection.CodeFile(const Source, Dest: String; Action: TPAction); -var - S,D: TFileStream; -begin - S := nil; - D := nil; - try - if (AnsiCompareText(Source, Dest) <> 0) and ((Trim(Dest) <> '') or (Action = paCalc)) then - begin - S := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone); - if Action = paCalc then D := S - else D := TFileStream.Create(Dest, fmCreate); - end else - begin - S := TFileStream.Create(Source, fmOpenReadWrite); - D := S; - end; - CodeStream(S, D, S.Size, Action); - finally - S.Free; - if S <> D then - begin -{$IFDEF VER_D3H} - D.Size := D.Position; -{$ENDIF} - D.Free; - end; - end; -end; - -function TROProtection.CodeBuffer(var Buffer; BufferSize: Integer; Action: TPAction): Integer; -begin - Result := BufferSize; - CodeInit(Action); - try - CodeBuf(Buffer, BufferSize, Action); - finally - CodeDone(Action); - end; -end; - -function TROProtection.CodeString(const Source: String; Action: TPAction; Format: Integer): String; -var - M: TMemoryStream; -begin - Result := ''; - if Length(Source) <= 0 then Exit; - M := TMemoryStream.Create; - try - if Action <> paDecode then Result := Source - else Result := FormatToStr(PChar(Source), Length(Source), Format); - M.Write(PChar(Result)^, Length(Result)); - M.Position := 0; - CodeStream(M, M, M.Size, Action); - if Action = paDecode then - begin - SetLength(Result, M.Size); - Move(M.Memory^, PChar(Result)^, M.Size); - end else - Result := StrToFormat(M.Memory, M.Size, Format); - finally - M.Free; - end; -end; - -constructor TROProtection.Create(AProtection: TROProtection); -begin - inherited Create; - Protection := AProtection; - FActions := [paEncode..paWipe]; -end; - -destructor TROProtection.Destroy; -begin - Protection := nil; - inherited Destroy; -end; - -class function TROProtection.Identity: Word; -var - S: String; -begin - S := ClassName; - Result := not CRC16(IdentityBase, PChar(S), Length(S)); -end; - -class function TROStringFormat.ToStr(Value: PChar; Len: Integer): String; -begin - SetLength(Result, Len); - Move(Value^, PChar(Result)^, Len); -end; - -class function TROStringFormat.StrTo(Value: PChar; Len: Integer): String; -begin - SetLength(Result, Len); - Move(Value^, PChar(Result)^, Len); -end; - -class function TROStringFormat.Name: String; -begin - if Self = TROStringFormat then Result := sFMT_COPY - else Result := GetShortClassName(Self); -end; - -class function TROStringFormat.Format: Integer; -begin - Result := fmtCOPY; -end; - -class function TROStringFormat.IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; -begin - Result := True; -end; - -function TableFind(Value: Char; Table: PChar; Len: Integer): Integer; assembler; -asm // Utility for TStringFormat_XXXXX - PUSH EDI - MOV EDI,EDX - REPNE SCASB - MOV EAX,0 - JNE @@1 - MOV EAX,EDI - SUB EAX,EDX -@@1: DEC EAX - POP EDI -end; - -class function TROStringFormat_HEX.ToStr(Value: PChar; Len: Integer): String; -var - D: PByte; - T: PChar; - I,P: Integer; - HasIdent: Boolean; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len div 2 +1); - T := CharTable; - D := PByte(Result); - I := 0; - HasIdent := False; - while Len > 0 do - begin - P := TableFind(UpCase(Value^), T, 18); - Inc(Value); - if P >= 0 then - if P > 16 then - begin - if not HasIdent then - begin - HasIdent := True; - I := 0; - D := PByte(Result); - 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(Len); - end; - SetLength(Result, PChar(D) - PChar(Result)); -end; - -class function TROStringFormat_HEX.StrTo(Value: PChar; Len: Integer): String; -var - D,T: PChar; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len * 2); - T := CharTable; - D := PChar(Result); - while Len > 0 do - begin - D[0] := T[Byte(Value^) shr 4]; - D[1] := T[Byte(Value^) and $F]; - Inc(D, 2); - Inc(Value); - Dec(Len); - end; -end; - -class function TROStringFormat_HEX.IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; -var - T: PChar; - L: Integer; -begin - Result := not ToStr; - if not Result then - begin - T := CharTable; - L := StrLen(T); - while Len > 0 do - if TableFind(Value^, T, L) >= 0 then - begin - Dec(Len); - Inc(Value); - end else Exit; - end; - Result := True; -end; - -class function TROStringFormat_HEX.Name: String; -begin - Result := sFMT_HEX; -end; - -class function TROStringFormat_HEX.Format: Integer; -begin - Result := fmtHEX; -end; - -class function TROStringFormat_HEX.CharTable: PChar; assembler; -asm - MOV EAX,OFFSET @@1 - RET -@@1: DB '0123456789ABCDEF' // Table must be >= 18 Chars - DB 'X$ abcdefhHx()[]{},;:-_/\*+"''',9,10,13,0 -end; - -class function TROStringFormat_HEXL.Name: String; -begin - Result := sFMT_HEXL; -end; - -class function TROStringFormat_HEXL.Format: Integer; -begin - Result := fmtHEXL; -end; - -class function TROStringFormat_HEXL.CharTable: PChar; -asm - MOV EAX,OFFSET @@1 - RET -@@1: DB '0123456789abcdef' // Table must be >= 18 Chars - DB 'X$ ABCDEFhHx()[]{},;:-_/\*+"''',9,10,13,0 -end; - -class function TROStringFormat_MIME64.ToStr(Value: PChar; Len: Integer): String; -var - B: Cardinal; - J,I: Integer; - S,D,L,T: PChar; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := Length(Value); - if Len = 0 then Exit; - SetLength(Result, Len); - Move(PChar(Value)^, PChar(Result)^, Len); - T := CharTable; - while Len mod 4 <> 0 do - begin - Result := Result + T[64]; - Inc(Len); - end; - D := PChar(Result); - S := D; - L := S + Len; - Len := Len * 3 div 4; - while Len > 0 do - begin - B := 0; - J := 4; - while (J > 0) and (S <= L) do - begin - I := TableFind(S^, T, 65); - if I >= 0 then - begin - B := B shl 6; - if I >= 64 then Dec(Len) else B := B or Byte(I); - Dec(J); - end; - Inc(S); - end; - J := 2; - repeat - D[J] := Char(B); - B := B shr 8; - Dec(J); - until J < 0; - if Len > 3 then Inc(D, 3) else Inc(D, Len); - Dec(Len, 3); - end; - SetLength(Result, D - PChar(Result)); -end; - -class function TROStringFormat_MIME64.StrTo(Value: PChar; Len: Integer): String; -var - B: Cardinal; - I: Integer; - D,T: PChar; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len * 4 div 3 + 4); - D := PChar(Result); - T := CharTable; - while Len > 0 do - begin - B := 0; - for I := 0 to 2 do - begin - B := B shl 8; - if Len > 0 then - begin - B := B or Byte(Value^); - Inc(Value); - end; - Dec(Len); - end; - for I := 3 downto 0 do - begin - if Len < 0 then - begin - D[I] := T[64]; - Inc(Len); - end else D[I] := T[B and $3F]; - B := B shr 6; - end; - Inc(D, 4); - end; - SetLength(Result, D - PChar(Result)); -end; - -class function TROStringFormat_MIME64.Name: String; -begin - Result := sFMT_MIME64; -end; - -class function TROStringFormat_MIME64.Format: Integer; -begin - Result := fmtMIME64; -end; - -class function TROStringFormat_MIME64.CharTable: PChar; assembler; -asm - MOV EAX,OFFSET @@1 - RET // must be >= 65 Chars -@@1: DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - DB ' $()[]{},;:-_\*"''',9,10,13,0 -end; - -class function TROStringFormat_UU.ToStr(Value: PChar; Len: Integer): String; -var - T,D,L: PChar; - I,E: Integer; - B: Cardinal; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len); - L := Value + Len; - D := PChar(Result); - T := CharTable; - repeat - Len := TableFind(Value^, T, 64); - if (Len < 0) or (Len > 45) then - raise EROStringFormat.CreateFMT(sInvalidStringFormat, [Name]); - Inc(Value); - while Len > 0 do - begin - B := 0; - I := 4; - while (I > 0) and (Value <= L) do - begin - E := TableFind(Value^, T, 64); - if E >= 0 then - begin - B := B shl 6 or Byte(E); - Dec(I); - end; - Inc(Value); - end; - I := 2; - repeat - D[I] := Char(B); - B := B shr 8; - Dec(I); - until I < 0; - if Len > 3 then Inc(D, 3) else Inc(D, Len); - Dec(Len, 3); - end; - until Value >= L; - SetLength(Result, D - PChar(Result)); -end; - -class function TROStringFormat_UU.StrTo(Value: PChar; Len: Integer): String; -var - T,D: PChar; - L,I: Integer; - B: Cardinal; -begin - Result := ''; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len * 4 div 3 + Len div 45 + 10); - D := PChar(Result); - T := CharTable; - while Len > 0 do - begin - L := Len; - if L > 45 then L := 45; - Dec(Len, 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 Byte(Value^); - Inc(Value); - 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(Result, D - PChar(Result)); -end; - -class function TROStringFormat_UU.Name: String; -begin - Result := sFMT_UU; -end; - -class function TROStringFormat_UU.Format: Integer; -begin - Result := fmtUU; -end; - -class function TROStringFormat_UU.IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; -var - T: PChar; - L,I,P: Integer; -begin - Result := not ToStr; - if not Result then - begin - T := CharTable; - L := StrLen(T); - P := 0; - while Len > 0 do - begin - I := TableFind(Value^, T, L); - if I >= 0 then - begin - Dec(Len); - Inc(Value); - 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; - end; - Result := True; -end; - -class function TROStringFormat_UU.CharTable: PChar; -asm - MOV EAX,OFFSET @@1 - RET // must be >= 64 Chars -@@1: DB '`!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' - DB ' ',9,10,13,0 -end; - -class function TROStringFormat_XX.Name: String; -begin - Result := sFMT_XX; -end; - -class function TROStringFormat_XX.Format: Integer; -begin - Result := fmtXX; -end; - -class function TROStringFormat_XX.CharTable: PChar; -asm - MOV EAX,OFFSET @@1 - RET -@@1: DB '+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' - DB ' "()[]''',9,10,13,0 -end; - -function CPUType: Integer; -begin - Result := FCPUType; -end; - -function IsObject(AObject: Pointer; AClass: TClass): Boolean; -var - E: Pointer; -begin - Result := False; - if AObject = nil then Exit; - E := ExceptionClass; - ExceptionClass := nil; - try - if TObject(AObject) is AClass then Result := True; - except - end; - ExceptionClass := E; -end; - -function ROL(Value: LongWord; Shift: Integer): LongWord; assembler; -asm - MOV ECX,EDX - ROL EAX,CL -end; - -function ROLADD(Value, Add: LongWord; Shift: Integer): LongWord; assembler; -asm - ROL EAX,CL - ADD EAX,EDX -end; - -function ROLSUB(Value, Sub: LongWord; Shift: Integer): LongWord; assembler; -asm - ROL EAX,CL - SUB EAX,EDX -end; - -function ROR(Value: LongWord; Shift: Integer): LongWord; assembler; -asm - MOV ECX,EDX - ROR EAX,CL -end; - -function RORADD(Value, Add: LongWord; Shift: Integer): LongWord; assembler; -asm - ROR EAX,CL - ADD EAX,EDX -end; - -function RORSUB(Value, Sub: LongWord; Shift: Integer): LongWord; assembler; -asm - ROR EAX,CL - SUB EAX,EDX -end; -{swap 4 Bytes Intel, Little/Big Endian Conversion} -function SwapInt(Value: LongWord): LongWord; assembler; register; -asm - XCHG AH,AL - ROL EAX,16 - XCHG AH,AL -end; - -function BSwapInt(Value: LongWord): LongWord; assembler; register; -asm - BSWAP EAX -end; - -procedure SwapIntBuf(Source,Dest: Pointer; Count: Integer); assembler; register; -asm - TEST ECX,ECX - JLE @Exit - PUSH EBX - SUB EAX,4 - SUB EDX,4 -@@1: MOV EBX,[EAX + ECX * 4] - XCHG BL,BH - ROL EBX,16 - XCHG BL,BH - MOV [EDX + ECX * 4],EBX - DEC ECX - JNZ @@1 - POP EBX -@Exit: -end; - -procedure BSwapIntBuf(Source, Dest: Pointer; Count: Integer); assembler; register; -asm - TEST ECX,ECX - JLE @Exit - PUSH EBX - SUB EAX,4 - SUB EDX,4 -@@1: MOV EBX,[EAX + ECX * 4] - BSWAP EBX - MOV [EDX + ECX * 4],EBX - DEC ECX - JNZ @@1 - POP EBX -@Exit: -end; -{reverse the bit order from a integer} -function SwapBits(Value: LongWord): LongWord; -asm - CMP FCPUType,3 - JLE @@1 - BSWAP EAX - JMP @@2 -@@1: XCHG AH,AL - ROL EAX,16 - XCHG AH,AL -@@2: MOV EDX,EAX - AND EAX,0AAAAAAAAh - SHR EAX,1 - AND EDX,055555555h - SHL EDX,1 - OR EAX,EDX - MOV EDX,EAX - AND EAX,0CCCCCCCCh - SHR EAX,2 - AND EDX,033333333h - SHL EDX,2 - OR EAX,EDX - MOV EDX,EAX - AND EAX,0F0F0F0F0h - SHR EAX,4 - AND EDX,00F0F0F0Fh - SHL EDX,4 - OR EAX,EDX -end; - -function LSBit(Value: Integer): Integer; assembler; -asm - BSF EAX,EAX -end; - -function MSBit(Value: Integer): Integer; assembler; -asm - BSR EAX,EAX -end; - -function OneBit(Value: Integer): Integer; assembler; -asm - MOV ECX,EAX - MOV EDX,EAX - BSF EDX,EDX - JZ @@1 - BSR ECX,ECX - CMP ECX,EDX - JNE @@1 - MOV EAX,EDX - RET -@@1: XOR EAX,EAX -end; - -function MemCompare(P1, P2: Pointer; Size: Integer): Integer; assembler; register; -asm - PUSH ESI - PUSH EDI - MOV ESI,P1 - MOV EDI,P2 - XOR EAX,EAX - REPE CMPSB - JE @@1 - MOVZX EAX,BYTE PTR [ESI-1] - MOVZX EDX,BYTE PTR [EDI-1] - SUB EAX,EDX -@@1: POP EDI - POP ESI -end; - -procedure XORBuffers(I1, I2: Pointer; Size: Integer; Dest: Pointer); assembler; -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; - -procedure DoProgress(Sender: TObject; Current, Maximal: Integer); -begin -{saver access} - if (TMethod(Progress).Code <> nil) and - ((TMethod(Progress).Data = nil) or - IsObject(TMethod(Progress).Data, TObject)) then - Progress(Sender, Current, Maximal); -end; - -function StringFormat(Format: Integer): TROStringFormatClass; -var - I: Integer; -begin - if Format = fmtDefault then Format := DefaultStringFormat; - Result := nil; - if FStrFmts <> nil then - for I := 0 to FStrFMTs.Count-1 do - if TROStringFormatClass(FStrFmts[I]).Format = Format then - begin - Result := FStrFMTS[I]; - Exit; - end; -end; - -function StrToFormat(Value: PChar; Len, Format: Integer): String; -var - Fmt: TROStringFormatClass; -begin - Result := ''; - if (Value = nil) or (Format = fmtNONE) then Exit; - if Len < 0 then Len := StrLen(Value); - if Len <= 0 then Exit; - Fmt := StringFormat(Format); - if Fmt <> nil then - if Fmt.IsValid(Value, Len, False) then Result := Fmt.StrTo(Value, Len) - else raise EROStringFormat.CreateFMT(sInvalidFormatString, [FMT.Name]) - else raise EROStringFormat.CreateFMT(sStringFormatExists, [Format]); -end; - -function FormatToStr(Value: PChar; Len, Format: Integer): String; -var - Fmt: TROStringFormatClass; -begin - Result := ''; - if (Value = nil) or (Format = fmtNONE) then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - Fmt := StringFormat(Format); - if Fmt <> nil then - if Fmt.IsValid(Value, Len, True) then Result := Fmt.ToStr(Value, Len) - else raise EROStringFormat.CreateFMT(sInvalidStringFormat, [FMT.Name]) - else raise EROStringFormat.CreateFMT(sStringFormatExists, [Format]); -end; - -function ConvertFormat(Value: PChar; Len, FromFormat, ToFormat: Integer): String; -begin - Result := ''; - if (FromFormat = fmtNONE) or (ToFormat = fmtNONE) then Exit; - if FromFormat <> ToFormat then - begin - Result := FormatToStr(Value, Len, FromFormat); - Result := StrToFormat(PChar(Result), Length(Result), ToFormat); - end else - begin - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - SetLength(Result, Len); - Move(Value^, PChar(Result)^, Len); - end; -end; - -function IsValidFormat(Value: PChar; Len, Format: Integer): Boolean; -var - Fmt: TROStringFormatClass; -begin - Result := True; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - Fmt := StringFormat(Format); - if Fmt = nil then Result := False - else Result := Fmt.IsValid(Value, Len, True); -end; - -function IsValidString(Value: PChar; Len, Format: Integer): Boolean; -var - Fmt: TROStringFormatClass; -begin - Result := True; - if Value = nil then Exit; - if Len < 0 then Len := StrLen(Value); - if Len = 0 then Exit; - Fmt := StringFormat(Format); - if Fmt = nil then Result := False - else Result := Fmt.IsValid(Value, Len, False); -end; - -procedure RegisterStringFormats(const StringFormats: array of TROStringFormatClass); -var - I,J: Integer; - FMT: TROStringFormatClass; -begin - if FStrFMTs = nil then FStrFMTs := TList.Create; - for I := Low(StringFormats) to High(StringFormats) do - if (StringFormats[I] <> nil) and - (StringFormats[I].Format <> fmtDEFAULT) then - begin - FMT := StringFormat(StringFormats[I].Format); - if FMT <> nil then - begin - J := FStrFMTs.IndexOf(FMT); - FStrFMTs[J] := StringFormats[I]; - end else FStrFMTs.Add(StringFormats[I]); - end; -end; - -procedure GetStringFormats(Strings: TStrings); -var - I: Integer; -begin - if IsObject(Strings, TStrings) and (FStrFMTs <> nil) then - for I := 0 to FStrFMTs.Count-1 do - Strings.AddObject(TROStringFormatClass(FStrFMTs[I]).Name, FStrFMTs[I]); -end; - -function InsertCR(const Value: String; BlockSize: Integer): String; -var - I: Integer; - S,D: PChar; -begin - if (BlockSize <= 0) or (Length(Value) <= BlockSize) then - begin - Result := Value; - Exit; - end; - I := Length(Value); - SetLength(Result, I + I * 2 div BlockSize + 2); - S := PChar(Value); - D := PChar(Result); - repeat - Move(S^, D^, BlockSize); - Inc(S, BlockSize); - Inc(D, BlockSize); - D^ := #13; Inc(D); - D^ := #10; Inc(D); - Dec(I, BlockSize); - until I < BlockSize; - Move(S^, D^, I); - Inc(D, I); - SetLength(Result, D - PChar(Result)); -end; - -function DeleteCR(const Value: String): String; -var - S,D: PChar; - I: Integer; -begin - I := Length(Value); - SetLength(Result, I); - D := PChar(Result); - S := PChar(Value); - while I > 0 do - begin - if (S^ <> #10) and (S^ <> #13) then - begin - D^ := S^; - Inc(D); - end; - Inc(S); - Dec(I); - end; - SetLength(Result, D - PChar(Result)); -end; - -function InsertBlocks(const Value, BlockStart, BlockEnd: String; BlockSize: Integer): String; -var - I,LS,LE: Integer; - D,S: PChar; -begin - if (BlockSize <= 0) or (Length(Value) <= BlockSize) then - begin - Result := Value; - Exit; - end; - I := Length(Value); - LS := Length(BlockStart); - LE := Length(BlockEnd); - SetLength(Result, I + (I div BlockSize + 1) * (LS + LE)); - S := PChar(Value); - D := PChar(Result); - repeat - Move(PChar(BlockStart)^, D^, LS); Inc(D, LS); - Move(S^, D^, BlockSize); Inc(D, BlockSize); - Move(PChar(BlockEnd)^, D^, LE); Inc(D, LE); - Dec(I, BlockSize); - Inc(S, BlockSize); - until I < BlockSize; - if I > 0 then - begin - Move(PChar(BlockStart)^, D^, LS); Inc(D, LS); - Move(S^, D^, I); Inc(D, I); - Move(PChar(BlockEnd)^, D^, LE); Inc(D, LE); - end; - SetLength(Result, D - PChar(Result)); -end; - -function RemoveBlocks(const Value, BlockStart, BlockEnd: String): String; -var - LS,LE: Integer; - S,D,L,K: PChar; -begin - SetLength(Result, Length(Value)); - LS := Length(BlockStart); - LE := Length(BlockEnd); - D := PChar(Result); - S := PChar(Value); - L := S + Length(Value); - - repeat - if S > L then Break; - if LS > 0 then - begin - S := StrPos(S, PChar(BlockStart)); - if S = nil then Break; - Inc(S, LS); - if S > L then Break; - end; - K := StrPos(S, PChar(BlockEnd)); - if K = nil then K := L; - Move(S^, D^, K - S); - Inc(D, K - S); - S := K + LE; - until S >= L; - SetLength(Result, D - PChar(Result)); -end; - -function GetShortClassName(Value: TClass): String; -var - I: Integer; -begin - Result := ''; - if Value = nil then Exit; - Result := Value.ClassName; - I := Pos('_', Result); - if I > 0 then Delete(Result, 1, I); -end; - -function RndXORBuffer(Seed: Integer; var Buffer; Size: Integer): Integer; assembler; -asm - AND EDX,EDX - JZ @@2 - AND ECX,ECX - JLE @@2 - PUSH EBX -@@1: XOR AL,[EDX] - IMUL EAX,EAX,134775813 - INC EAX - MOV EBX,EAX - SHR EBX,24 - MOV [EDX],BL - INC EDX - DEC ECX - JNZ @@1 - POP EBX -@@2: -end; - -// use Systemtime and XOR's with Performancecounter -function RndTimeSeed: Integer; assembler; -var - SysTime: record - Year: Word; - Month: Word; - DayOfWeek: Word; - Day: Word; - Hour: Word; - Minute: Word; - Second: Word; - MilliSeconds: Word; - Reserved: array [0..7] of Byte; - end; - Counter: record - Lo,Hi: Integer; - end; -asm - LEA EAX,SysTime - PUSH EAX - CALL GetSystemTime - MOVZX EAX,Word Ptr SysTime.Hour - IMUL EAX,60 - ADD AX,SysTime.Minute - IMUL EAX,60 - MOVZX EDX,Word Ptr SysTime.Second - ADD EAX,EDX - IMUL EAX,1000 - MOV DX,SysTime.MilliSeconds - ADD EAX,EDX - PUSH EAX - LEA EAX,Counter - PUSH EAX - CALL QueryPerformanceCounter - POP EAX - XOR EAX,Counter.Lo - XOR EAX,Counter.Hi -end; - -function CRC16(CRC: Word; Data: Pointer; DataSize: LongWord): Word; assembler; -asm - AND EDX,EDX - JZ @Exit - AND ECX,ECX - JLE @Exit - PUSH EBX - PUSH EDI - XOR EBX,EBX - LEA EDI,CS:[OFFSET @CRC16] -@Start: MOV BL,[EDX] - XOR BL,AL - SHR AX,8 - XOR AX,[EDI + EBX * 2] - INC EDX - DEC ECX - JNZ @Start - POP EDI - POP EBX -@Exit: RET - NOP -@CRC16: DW 00000h, 0C0C1h, 0C181h, 00140h, 0C301h, 003C0h, 00280h, 0C241h - DW 0C601h, 006C0h, 00780h, 0C741h, 00500h, 0C5C1h, 0C481h, 00440h - DW 0CC01h, 00CC0h, 00D80h, 0CD41h, 00F00h, 0CFC1h, 0CE81h, 00E40h - DW 00A00h, 0CAC1h, 0CB81h, 00B40h, 0C901h, 009C0h, 00880h, 0C841h - DW 0D801h, 018C0h, 01980h, 0D941h, 01B00h, 0DBC1h, 0DA81h, 01A40h - DW 01E00h, 0DEC1h, 0DF81h, 01F40h, 0DD01h, 01DC0h, 01C80h, 0DC41h - DW 01400h, 0D4C1h, 0D581h, 01540h, 0D701h, 017C0h, 01680h, 0D641h - DW 0D201h, 012C0h, 01380h, 0D341h, 01100h, 0D1C1h, 0D081h, 01040h - DW 0F001h, 030C0h, 03180h, 0F141h, 03300h, 0F3C1h, 0F281h, 03240h - DW 03600h, 0F6C1h, 0F781h, 03740h, 0F501h, 035C0h, 03480h, 0F441h - DW 03C00h, 0FCC1h, 0FD81h, 03D40h, 0FF01h, 03FC0h, 03E80h, 0FE41h - DW 0FA01h, 03AC0h, 03B80h, 0FB41h, 03900h, 0F9C1h, 0F881h, 03840h - DW 02800h, 0E8C1h, 0E981h, 02940h, 0EB01h, 02BC0h, 02A80h, 0EA41h - DW 0EE01h, 02EC0h, 02F80h, 0EF41h, 02D00h, 0EDC1h, 0EC81h, 02C40h - DW 0E401h, 024C0h, 02580h, 0E541h, 02700h, 0E7C1h, 0E681h, 02640h - DW 02200h, 0E2C1h, 0E381h, 02340h, 0E101h, 021C0h, 02080h, 0E041h - DW 0A001h, 060C0h, 06180h, 0A141h, 06300h, 0A3C1h, 0A281h, 06240h - DW 06600h, 0A6C1h, 0A781h, 06740h, 0A501h, 065C0h, 06480h, 0A441h - DW 06C00h, 0ACC1h, 0AD81h, 06D40h, 0AF01h, 06FC0h, 06E80h, 0AE41h - DW 0AA01h, 06AC0h, 06B80h, 0AB41h, 06900h, 0A9C1h, 0A881h, 06840h - DW 07800h, 0B8C1h, 0B981h, 07940h, 0BB01h, 07BC0h, 07A80h, 0BA41h - DW 0BE01h, 07EC0h, 07F80h, 0BF41h, 07D00h, 0BDC1h, 0BC81h, 07C40h - DW 0B401h, 074C0h, 07580h, 0B541h, 07700h, 0B7C1h, 0B681h, 07640h - DW 07200h, 0B2C1h, 0B381h, 07340h, 0B101h, 071C0h, 07080h, 0B041h - DW 05000h, 090C1h, 09181h, 05140h, 09301h, 053C0h, 05280h, 09241h - DW 09601h, 056C0h, 05780h, 09741h, 05500h, 095C1h, 09481h, 05440h - DW 09C01h, 05CC0h, 05D80h, 09D41h, 05F00h, 09FC1h, 09E81h, 05E40h - DW 05A00h, 09AC1h, 09B81h, 05B40h, 09901h, 059C0h, 05880h, 09841h - DW 08801h, 048C0h, 04980h, 08941h, 04B00h, 08BC1h, 08A81h, 04A40h - DW 04E00h, 08EC1h, 08F81h, 04F40h, 08D01h, 04DC0h, 04C80h, 08C41h - DW 04400h, 084C1h, 08581h, 04540h, 08701h, 047C0h, 04680h, 08641h - DW 08201h, 042C0h, 04380h, 08341h, 04100h, 081C1h, 08081h, 04040h -end; - -function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord; assembler; -asm - AND EDX,EDX - JZ @Exit - AND ECX,ECX - JLE @Exit - PUSH EBX - PUSH EDI - XOR EBX,EBX - LEA EDI,CS:[OFFSET @CRC32] -@Start: MOV BL,AL - SHR EAX,8 - XOR BL,[EDX] - XOR EAX,[EDI + EBX * 4] - INC EDX - DEC ECX - JNZ @Start - POP EDI - POP EBX -@Exit: RET - DB 0, 0, 0, 0, 0 // Align Table -@CRC32: DD 000000000h, 077073096h, 0EE0E612Ch, 0990951BAh - DD 0076DC419h, 0706AF48Fh, 0E963A535h, 09E6495A3h - DD 00EDB8832h, 079DCB8A4h, 0E0D5E91Eh, 097D2D988h - DD 009B64C2Bh, 07EB17CBDh, 0E7B82D07h, 090BF1D91h - DD 01DB71064h, 06AB020F2h, 0F3B97148h, 084BE41DEh - DD 01ADAD47Dh, 06DDDE4EBh, 0F4D4B551h, 083D385C7h - DD 0136C9856h, 0646BA8C0h, 0FD62F97Ah, 08A65C9ECh - DD 014015C4Fh, 063066CD9h, 0FA0F3D63h, 08D080DF5h - DD 03B6E20C8h, 04C69105Eh, 0D56041E4h, 0A2677172h - DD 03C03E4D1h, 04B04D447h, 0D20D85FDh, 0A50AB56Bh - DD 035B5A8FAh, 042B2986Ch, 0DBBBC9D6h, 0ACBCF940h - DD 032D86CE3h, 045DF5C75h, 0DCD60DCFh, 0ABD13D59h - DD 026D930ACh, 051DE003Ah, 0C8D75180h, 0BFD06116h - DD 021B4F4B5h, 056B3C423h, 0CFBA9599h, 0B8BDA50Fh - DD 02802B89Eh, 05F058808h, 0C60CD9B2h, 0B10BE924h - DD 02F6F7C87h, 058684C11h, 0C1611DABh, 0B6662D3Dh - DD 076DC4190h, 001DB7106h, 098D220BCh, 0EFD5102Ah - DD 071B18589h, 006B6B51Fh, 09FBFE4A5h, 0E8B8D433h - DD 07807C9A2h, 00F00F934h, 09609A88Eh, 0E10E9818h - DD 07F6A0DBBh, 0086D3D2Dh, 091646C97h, 0E6635C01h - DD 06B6B51F4h, 01C6C6162h, 0856530D8h, 0F262004Eh - DD 06C0695EDh, 01B01A57Bh, 08208F4C1h, 0F50FC457h - DD 065B0D9C6h, 012B7E950h, 08BBEB8EAh, 0FCB9887Ch - DD 062DD1DDFh, 015DA2D49h, 08CD37CF3h, 0FBD44C65h - DD 04DB26158h, 03AB551CEh, 0A3BC0074h, 0D4BB30E2h - DD 04ADFA541h, 03DD895D7h, 0A4D1C46Dh, 0D3D6F4FBh - DD 04369E96Ah, 0346ED9FCh, 0AD678846h, 0DA60B8D0h - DD 044042D73h, 033031DE5h, 0AA0A4C5Fh, 0DD0D7CC9h - DD 05005713Ch, 0270241AAh, 0BE0B1010h, 0C90C2086h - DD 05768B525h, 0206F85B3h, 0B966D409h, 0CE61E49Fh - DD 05EDEF90Eh, 029D9C998h, 0B0D09822h, 0C7D7A8B4h - DD 059B33D17h, 02EB40D81h, 0B7BD5C3Bh, 0C0BA6CADh - DD 0EDB88320h, 09ABFB3B6h, 003B6E20Ch, 074B1D29Ah - DD 0EAD54739h, 09DD277AFh, 004DB2615h, 073DC1683h - DD 0E3630B12h, 094643B84h, 00D6D6A3Eh, 07A6A5AA8h - DD 0E40ECF0Bh, 09309FF9Dh, 00A00AE27h, 07D079EB1h - DD 0F00F9344h, 08708A3D2h, 01E01F268h, 06906C2FEh - DD 0F762575Dh, 0806567CBh, 0196C3671h, 06E6B06E7h - DD 0FED41B76h, 089D32BE0h, 010DA7A5Ah, 067DD4ACCh - DD 0F9B9DF6Fh, 08EBEEFF9h, 017B7BE43h, 060B08ED5h - DD 0D6D6A3E8h, 0A1D1937Eh, 038D8C2C4h, 04FDFF252h - DD 0D1BB67F1h, 0A6BC5767h, 03FB506DDh, 048B2364Bh - DD 0D80D2BDAh, 0AF0A1B4Ch, 036034AF6h, 041047A60h - DD 0DF60EFC3h, 0A867DF55h, 0316E8EEFh, 04669BE79h - DD 0CB61B38Ch, 0BC66831Ah, 0256FD2A0h, 05268E236h - DD 0CC0C7795h, 0BB0B4703h, 0220216B9h, 05505262Fh - DD 0C5BA3BBEh, 0B2BD0B28h, 02BB45A92h, 05CB36A04h - DD 0C2D7FFA7h, 0B5D0CF31h, 02CD99E8Bh, 05BDEAE1Dh - DD 09B64C2B0h, 0EC63F226h, 0756AA39Ch, 0026D930Ah - DD 09C0906A9h, 0EB0E363Fh, 072076785h, 005005713h - DD 095BF4A82h, 0E2B87A14h, 07BB12BAEh, 00CB61B38h - DD 092D28E9Bh, 0E5D5BE0Dh, 07CDCEFB7h, 00BDBDF21h - DD 086D3D2D4h, 0F1D4E242h, 068DDB3F8h, 01FDA836Eh - DD 081BE16CDh, 0F6B9265Bh, 06FB077E1h, 018B74777h - DD 088085AE6h, 0FF0F6A70h, 066063BCAh, 011010B5Ch - DD 08F659EFFh, 0F862AE69h, 0616BFFD3h, 0166CCF45h - DD 0A00AE278h, 0D70DD2EEh, 04E048354h, 03903B3C2h - DD 0A7672661h, 0D06016F7h, 04969474Dh, 03E6E77DBh - DD 0AED16A4Ah, 0D9D65ADCh, 040DF0B66h, 037D83BF0h - DD 0A9BCAE53h, 0DEBB9EC5h, 047B2CF7Fh, 030B5FFE9h - DD 0BDBDF21Ch, 0CABAC28Ah, 053B39330h, 024B4A3A6h - DD 0BAD03605h, 0CDD70693h, 054DE5729h, 023D967BFh - DD 0B3667A2Eh, 0C4614AB8h, 05D681B02h, 02A6F2B94h - DD 0B40BBE37h, 0C30C8EA1h, 05A05DF1Bh, 02D02EF8Dh - DD 074726F50h, 0736E6F69h, 0706F4320h, 067697279h - DD 028207468h, 031202963h, 020393939h, 048207962h - DD 06E656761h, 064655220h, 06E616D64h, 06FBBA36Eh -end; - -{a Random generated Testvector 256bit - 32 Bytes, it's used for Self Test} -function GetTestVector: PChar; assembler; register; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 030h,044h,0EDh,06Eh,045h,0A4h,096h,0F5h - DB 0F6h,035h,0A2h,0EBh,03Dh,01Ah,05Dh,0D6h - DB 0CBh,01Dh,009h,082h,02Dh,0BDh,0F5h,060h - DB 0C2h,0B8h,058h,0A1h,091h,0F9h,081h,0B1h - DB 000h,000h,000h,000h,000h,000h,000h,000h -end; - -{get the CPU Type from your system} -function GetCPUType: Integer; assembler; -asm - PUSH EBX - PUSH ECX - PUSH EDX - MOV EBX,ESP - AND ESP,0FFFFFFFCh - PUSHFD - PUSHFD - POP EAX - MOV ECX,EAX - XOR EAX,40000h - PUSH EAX - POPFD - PUSHFD - POP EAX - XOR EAX,ECX - MOV EAX,3 - JE @Exit - PUSHFD - POP EAX - MOV ECX,EAX - XOR EAX,200000h - PUSH EAX - POPFD - PUSHFD - POP EAX - XOR EAX,ECX - MOV EAX,4 - JE @Exit - PUSH EBX - MOV EAX,1 - DB 0Fh,0A2h //CPUID - MOV AL,AH - AND EAX,0Fh - POP EBX -@Exit: POPFD - MOV ESP,EBX - POP EDX - POP ECX - POP EBX -end; - -procedure ModuleUnload(Instance: Longword); -var // automaticaly deregistration - I: Integer; -begin - if FStrFMTs <> nil then - for I := FStrFMTs.Count-1 downto 0 do - if FindClassHInstance(TClass(FStrFMTs[I])) = Instance then - FStrFMTs.Delete(I); -end; - -initialization - AddModuleUnloadProc(ModuleUnload); - FCPUType := GetCPUType; - if FCPUType > 3 then - begin - SwapInteger := BSwapInt; - SwapIntegerBuffer := BSwapIntBuf; - end else - begin - SwapInteger := SwapInt; - SwapIntegerBuffer := SwapIntBuf; - end; - RegisterStringFormats([TROStringFormat, TROStringFormat_HEX, TROStringFormat_HEXL, - TROStringFormat_MIME64, TROStringFormat_UU, TROStringFormat_XX]); -{this calculate a Checksum (CRC32) over the function CRC32 and the TestVector, - if InitTestIsOk = False any modification from Testvector or CRC32() detected, :-) } - InitTestIsOk := CRC32(CRC32($29524828, PChar(@CRC32) + 41, 1076), GetTestVector, 32) = $848B5964; -finalization - RemoveModuleUnloadProc(ModuleUnload); - FStrFMTs.Free; - FStrFMTs := nil; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.dfm deleted file mode 100644 index c7fd43d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.dfm +++ /dev/null @@ -1,209 +0,0 @@ -object CryptoKeyGenForm: TCryptoKeyGenForm - Left = 325 - Top = 258 - BorderStyle = bsDialog - Caption = 'Generate Encryption Key' - ClientHeight = 115 - ClientWidth = 500 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - OnCloseQuery = FormCloseQuery - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object LHAlgorithm: TLabel - Left = 4 - Top = 8 - Width = 43 - Height = 13 - Caption = 'Algorithm' - end - object LCKey: TLabel - Left = 4 - Top = 40 - Width = 71 - Height = 13 - Caption = 'Encryption Key' - end - object LHashKey: TLabel - Left = 4 - Top = 64 - Width = 70 - Height = 13 - Caption = 'Converted Key' - end - object LHashInfo: TLabel - Left = 248 - Top = 6 - Width = 248 - Height = 16 - AutoSize = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clNavy - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - end - object eHashKey: TEdit - Left = 84 - Top = 60 - Width = 412 - Height = 21 - TabOrder = 0 - Text = 'eHashKey' - end - object BitBtn1: TBitBtn - Left = 344 - Top = 86 - Width = 76 - Height = 25 - Caption = 'OK' - ModalResult = 1 - TabOrder = 1 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF0066001EB2311FB133006600FF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6565659A9A9A9A9A9A65 - 6565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00660031C24F22B7381AB02D21B437006600FF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565ABABAB9E9E9E9797979C - 9C9C656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660047D36D3BCB5E25A83B0066001BA92E1DB132006600FF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565BFBFBFB5B5B598989865656594 - 9494999999656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600 - 4FD67953DE7F31B54D006600FF00FF006600179D271EAE31006600FF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FF656565C4C4C4CACACAA5A5A5656565FF00FF65 - 65658C8C8C989898656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - 00660041C563006600FF00FFFF00FFFF00FFFF00FF00660019AA2B006600FF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FF656565B5B5B5656565FF00FFFF00FFFF - 00FFFF00FF656565939393656565FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF006600149D210066 - 00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565FF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FF6565658A8A8A656565FF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0066 - 00006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FF006600006600FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FF656565656565FF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object BitBtn2: TBitBtn - Left = 420 - Top = 86 - Width = 75 - Height = 25 - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 2 - Glyph.Data = { - 36060000424D3606000000000000360000002800000020000000100000000100 - 18000000000000060000C40E0000C40E00000000000000000000FF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A174AFD103BF400009AFF00FFFF00FFFF00FFFF00FF00009A002CF80030 - FC00009AFF00FFFF00FFFF00FFFF00FF6B6B6BA8A8A8A0A0A06B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6B9A9A9A9C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A1A47F81A4CFF123BF100009AFF00FFFF00FF00009A012DF60132FF002A - F300009AFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7AAAAAA9F9F9F6B6B6BFF - 00FFFF00FF6B6B6B9999999E9E9E9797976B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A1C47F61B4DFF143EF400009A00009A002DF80134FF032BF20000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ABABABA2A2A26B - 6B6B6B6B6B9A9A9A9E9E9E9898986B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A1D48F61D50FF103DFB0431FE0132FF002CF600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7ACACACA3 - A3A39F9F9F9E9E9E9999996B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A1A48F91342FF0C3CFF0733F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BA7A7A7A7 - A7A7A3A3A39C9C9C6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FF00009A214EFC1D4BFF1847FF1743F600009AFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BACACACAC - ACACA9A9A9A4A4A46B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FF00009A2E5BF92C5FFF224DF8204BF82355FF1B46F600009AFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB1B1B1B3B3B3AB - ABABAAAAAAAFAFAFA6A6A66B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FF00009A3664FA386BFF2D59F400009A00009A224CF42558FF1D49F60000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6BB6B6B6B9B9B9AEAEAE6B - 6B6B6B6B6BA9A9A9B0B0B0A7A7A76B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - 00009A4071FA4274FF325DF100009AFF00FFFF00FF00009A224DF1275AFF204C - F800009AFF00FFFF00FFFF00FFFF00FF6B6B6BBBBBBBBEBEBEAFAFAF6B6B6BFF - 00FFFF00FF6B6B6BA7A7A7B1B1B1AAAAAA6B6B6BFF00FFFF00FFFF00FFFF00FF - 00009A497AFC3B66F300009AFF00FFFF00FFFF00FFFF00FF00009A2550F42655 - FA00009AFF00FFFF00FFFF00FFFF00FF6B6B6BC0C0C0B5B5B56B6B6BFF00FFFF - 00FFFF00FFFF00FF6B6B6BAAAAAAAEAEAE6B6B6BFF00FFFF00FFFF00FFFF00FF - FF00FF00009A00009AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00009A0000 - 9AFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FF6B6B6B6B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF - FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 - FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF - 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} - NumGlyphs = 2 - end - object CBHash: TComboBox - Left = 84 - Top = 4 - Width = 161 - Height = 21 - Style = csDropDownList - DropDownCount = 24 - ItemHeight = 13 - TabOrder = 3 - OnClick = CBHashClick - end - object EKey: TEdit - Left = 84 - Top = 35 - Width = 412 - Height = 21 - TabOrder = 4 - Text = 'All work and no play makes Jack a dull boy.' - OnChange = EKeyChange - end - object HashManager: TROHashManager - Left = 300 - Top = 20 - Hash = 'TROHash_RipeMD256' - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.pas deleted file mode 100644 index 4d65be2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROEncKeyPropEditor.pas +++ /dev/null @@ -1,146 +0,0 @@ -unit uROEncKeyPropEditor; - -{$I ..\RemObjects.inc} - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - {$IFDEF DELPHI5} DsgnIntf, {$ELSE} DesignIntf, DesignEditors, {$ENDIF} - StdCtrls, Buttons, uROHCMngr; - -{.$DEFINE TestComp} - -type - TROCryptoKeyProperty = class(TStringProperty) - function GetAttributes: TPropertyAttributes; override; - procedure Edit; override; - end; - - {$IFDEF TestComp} - TBrazilCryptoTest = class(TComponent) - private - fkey: TBrazilCryptoKey; - procedure SetKey(const Value: TBrazilCryptoKey); - published - property Key: TBrazilCryptoKey read fkey write SetKey; - end; - {$ENDIF} - - TCryptoKeyGenForm = class(TForm) - eHashKey: TEdit; - BitBtn1: TBitBtn; - BitBtn2: TBitBtn; - LHAlgorithm: TLabel; - CBHash: TComboBox; - LCKey: TLabel; - EKey: TEdit; - LHashKey: TLabel; - HashManager: TROHashManager; - LHashInfo: TLabel; - procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); - procedure EKeyChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure CBHashClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - CryptoKeyGenForm : TCryptoKeyGenForm; - -procedure Register; - -implementation - -{$R *.dfm} - -uses - uROEncryption, uroHash, urodecutil; - -procedure Register; -begin - RegisterPropertyEditor(TypeInfo(TROCryptoKey), nil, '', - TROCryptoKeyProperty); - - {$IFDEF TestComp} - RegisterComponents('Brazil', [TBrazilCryptoTest]); - {$ENDIF} -end; - -{ TROCryptoKeyProperty } - -procedure TROCryptoKeyProperty.Edit; -begin - inherited; - - with TCryptoKeyGenForm.Create(nil) do - try - // Initialize form... - ehashkey.Text := GetStrValue; - // Show form... - if ShowModal = mrOK then // Transfer form properties back - begin - SetStrValue(ehashkey.Text); - end; // if - finally // wrap up - Free; - end; // try/finally -end; - -function TROCryptoKeyProperty.GetAttributes: TPropertyAttributes; -begin - Result := [paDialog]; -end; - -procedure TCryptoKeyGenForm.FormCloseQuery(Sender: TObject; - var CanClose: Boolean); -var - S : string; -begin - try - S := formattostr(PChar(ehashkey.Text), Length(ehashkey.Text), fmtHex); - except - on e: Exception do - begin - ShowMessage('Invalid key!'); - CanClose := False; - end; - end; // try/except -end; - -{$IFDEF TestComp} -{ TBrazilCryptoTest } - -procedure TBrazilCryptoTest.SetKey(const Value: TBrazilCryptoKey); -begin - fkey := Value; -end; -{$ENDIF} - -procedure TCryptoKeyGenForm.EKeyChange(Sender: TObject); -begin - EHashKey.Text := HashManager.HashClass.CalcString(EKey.Text, nil, fmtHEX); -end; - -procedure TCryptoKeyGenForm.FormCreate(Sender: TObject); -begin - HashNames(CBHash.Items); -end; - -procedure TCryptoKeyGenForm.CBHashClick(Sender: TObject); -begin - CBHash.ItemIndex := CBHash.ItemIndex; - -{1. Variant to select the Hash} - HashManager.Algorithm := CBHash.Text; - LHashInfo.Caption := HashManager.Description (*+ ', ' + - HashManager.HashClass.ClassName*); - - EKeyChange(nil); -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHCMngr.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHCMngr.pas deleted file mode 100644 index 543691d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHCMngr.pas +++ /dev/null @@ -1,428 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Part I from Delphi Encryption Compendium - Delphi 2-4, designed and testet under D3 - Description: included the Designtime Components - TROHashManager for the TROHash-Administration - TROCipherManager for the TROCipher-Administration - for Programmers with "Drop and Design any Component Fealing" - the normaly way is without any Manager's - - Version 3.0 - Versionsmanagement, no chnages on TManager Classes - - Version 2.2 - added Progress Event to fill a gauge - - bug fixes: TROHashManager memory leak, .Destroy frees now FDigest - - Version 2.1 - TROCipherManager: Methods added - EncodeBuffer(), DecodeBuffer() - EncodeString(), DecodeString() - -} -unit uROHCMngr; - -interface - -{$I uROVer.inc} - -uses Classes, uRODECUtil, uROHash, uROCipher; - -type - TProgressEvent = procedure(Sender: TObject; Current, Maximal: Integer) of Object; - - TROHashManager = class(TComponent) - private - FHashClass: TROHashClass; - FHash: TROHash; - FDigest: String; - FOnProgress: TProgressEvent; - function GetInfo(Index: Integer): String; - procedure SetInfo(Index: Integer; Value: String); - function GetClass: TROHashClass; - procedure SetClass(Value: TROHashClass); - function GetHash: TROHash; - function GetAlgorithm: String; - procedure SetAlgorithm(Value: String); - function GetDigestStr(Index: Integer): String; - function GetDigestSize: Integer; - procedure ReadHash(Reader: TReader); - procedure WriteHash(Writer: TWriter); - protected - procedure DefineProperties(Filer: TFiler); override; - public - destructor Destroy; override; - procedure CalcBuffer(const Buffer; BufferSize: Integer); - procedure CalcStream(const Stream: TStream; StreamSize: Integer); - procedure CalcString(const Data: String); - procedure CalcFile(const FileName: String); - - property Digest: String read FDigest; - property DigestSize: Integer read GetDigestSize; - property DigestString[Format: Integer]: String read GetDigestStr; - property HashClass: TROHashClass read GetClass write SetClass; - property Hash: TROHash read GetHash; - published - property Algorithm: String read GetAlgorithm write SetAlgorithm stored False; - property Description: String index 0 read GetInfo write SetInfo stored False; - property OnProgress: TProgressEvent read FOnProgress write FOnProgress; - end; - - TROCipherManager = class(TComponent) - private - FHashManager: TROHashManager; - FCipherClass: TROCipherClass; - FCipher: TROCipher; - FMode: TCipherMode; - FOnProgress: TProgressEvent; - procedure SetHashManager(Value: TROHashManager); - procedure SetMode(Value: TCipherMode); - function GetCipher: TROCipher; - function GetClass: TROCipherClass; - procedure SetClass(Value: TROCipherClass); - function GetAlgorithm: String; - procedure SetAlgorithm(Value: String); - function GetInfo(Index: Integer): String; - procedure SetInfo(Index: Integer; Value: String); - procedure ReadCipher(Reader: TReader); - procedure WriteCipher(Writer: TWriter); - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure DefineProperties(Filer: TFiler); override; - public - destructor Destroy; override; - procedure InitKey(const Key: String; IVector: Pointer); - - procedure EncodeFile(const Source, Dest: String); - procedure DecodeFile(const Source, Dest: String); - procedure EncodeStream(Source, Dest: TStream; DataSize: Integer); - procedure DecodeStream(Source, Dest: TStream; DataSize: Integer); - procedure EncodeBuffer(const Source; var Dest; DataSize: Integer); - procedure DecodeBuffer(const Source; var Dest; DataSize: Integer); - function EncodeString(const Source: String): String; - function DecodeString(const Source: String): String; - - property Cipher: TROCipher read GetCipher; - property CipherClass: TROCipherClass read GetClass write SetClass; - published - property Algorithm: String read GetAlgorithm write SetAlgorithm stored False; - property Description: String index 0 read GetInfo write SetInfo stored False; - property Mode: TCipherMode read FMode write SetMode default cmCBC; - property HashManager: TROHashManager read FHashManager write SetHashManager; - property OnProgress: TProgressEvent read FOnProgress write FOnProgress; - end; - -implementation - -uses SysUtils, Windows; - -procedure TROHashManager.ReadHash(Reader: TReader); -var - CN: String; - I: Integer; -begin - CN := Reader.ReadString; - for I := 0 to HashList.Count-1 do - if CN = TROHashClass(HashList.Objects[I]).ClassName then - begin - SetClass(TROHashClass(HashList.Objects[I])); - Exit; - end; -end; - -procedure TROHashManager.WriteHash(Writer: TWriter); -begin - Writer.WriteString(HashClass.ClassName); -end; - -procedure TROHashManager.DefineProperties(Filer: TFiler); -begin - inherited DefineProperties(Filer); - Filer.DefineProperty('Hash', ReadHash, WriteHash, FHashClass <> nil); -end; - -function TROHashManager.GetInfo(Index: Integer): String; -begin - Result := ''; - case Index of - 0: begin - Index := HashList.IndexOfObject(Pointer(HashClass)); - if Index >= 0 then - begin - Result := Trim(HashList[Index]); - Delete(Result, 1, Pos('=', Result)); - end; - if Length(Result) > 0 then Result := Result + ', '; - Result := Result + IntToStr(DigestSize * 8) + 'bit Digestsize'; - end; - end; -end; - -procedure TROHashManager.SetInfo(Index: Integer; Value: String); -begin -end; - -function TROHashManager.GetDigestStr(Index: Integer): String; -begin - Result := StrToFormat(PChar(FDigest), Length(FDigest), Index); -end; - -function TROHashManager.GetDigestSize: Integer; -begin - Result := HashClass.DigestKeySize; -end; - -function TROHashManager.GetClass: TROHashClass; -begin - if FHashClass = nil then SetClass(DefaultHashClass); - Result := FHashClass; -end; - -function TROHashManager.GetHash: TROHash; -begin - if FHash = nil then FHash := HashClass.Create(nil); - Result := FHash; -end; - -procedure TROHashManager.SetClass(Value: TROHashClass); -begin - if Value <> FHashClass then - begin - if Value = nil then Value := DefaultHashClass; - FHashClass := Value; - FHash.Free; - FHash := nil; - FDigest := ''; - end; -end; - -function TROHashManager.GetAlgorithm: String; -begin - Result := GetHashName(HashClass); -end; - -procedure TROHashManager.SetAlgorithm(Value: String); -begin - SetClass(GetHashClass(Value)); -end; - -destructor TROHashManager.Destroy; -begin - FHash.Free; - FHash := nil; - inherited Destroy; -end; - -procedure TROHashManager.CalcBuffer(const Buffer; BufferSize: Integer); -begin - FDigest := HashClass.CalcBuffer(Buffer, BufferSize, nil, fmtCOPY); -end; - -procedure TROHashManager.CalcStream(const Stream: TStream; StreamSize: Integer); -begin - Progress := FOnProgress; - try - FDigest := HashClass.CalcStream(Stream, StreamSize, nil, fmtCOPY); - finally - Progress := nil; - end; -end; - -procedure TROHashManager.CalcString(const Data: String); -begin - FDigest := HashClass.CalcString(Data, nil, fmtCOPY); -end; - -procedure TROHashManager.CalcFile(const FileName: String); -begin - Progress := FOnProgress; - try - FDigest := HashClass.CalcFile(FileName, nil, fmtCOPY); - finally - Progress := nil; - end; -end; - -procedure TROCipherManager.SetHashManager(Value: TROHashManager); -begin - if Value <> FHashManager then - begin - FHashManager := Value; - if FHashManager <> nil then FHashManager.FreeNotification(Self); - end; -end; - -procedure TROCipherManager.SetMode(Value: TCipherMode); -begin - FMode := Value; - if FCipher <> nil then FCipher.Mode := FMode; -end; - -function TROCipherManager.GetCipher: TROCipher; -begin - if FCipher = nil then - begin - FCipher := CipherClass.Create('', nil); - FCipher.Mode := FMode; - end; - Result := FCipher; -end; - -function TROCipherManager.GetClass: TROCipherClass; -begin - if FCipherClass = nil then FCipherClass := DefaultCipherClass; - Result := FCipherClass; -end; - -procedure TROCipherManager.SetClass(Value: TROCipherClass); -begin - if Value <> CipherClass then - begin - FCipher.Free; - FCipher := nil; - FCipherClass := Value; - end; -end; - -function TROCipherManager.GetAlgorithm: String; -begin - Result := GetCipherName(CipherClass); -end; - -procedure TROCipherManager.SetAlgorithm(Value: String); -begin - SetClass(GetCipherClass(Value)); -end; - -function TROCipherManager.GetInfo(Index: Integer): String; -begin - Result := ''; - case Index of - 0: begin - Index := CipherList.IndexOfObject(Pointer(CipherClass)); - if Index >= 0 then - begin - Result := Trim(CipherList[Index]); - Delete(Result, 1, Pos('=', Result)); - end; - if Length(Result) > 0 then Result := Result + ', '; - Result := Result + IntToStr(CipherClass.MaxKeySize * 8) + 'bit Key'; - end; - end; -end; - -procedure TROCipherManager.SetInfo(Index: Integer; Value: String); -begin -end; - -procedure TROCipherManager.ReadCipher(Reader: TReader); -var - CN: String; - I: Integer; -begin - CN := Reader.ReadString; - for I := 0 to CipherList.Count-1 do - if CN = TROCipherClass(CipherList.Objects[I]).ClassName then - begin - SetClass(TROCipherClass(CipherList.Objects[I])); - Exit; - end; -end; - -procedure TROCipherManager.WriteCipher(Writer: TWriter); -begin - Writer.WriteString(CipherClass.ClassName); -end; - -procedure TROCipherManager.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited Notification(AComponent, Operation); - if (Operation = opRemove) and (AComponent = FHashManager) then - HashManager := nil; -end; - -procedure TROCipherManager.DefineProperties(Filer: TFiler); -begin - inherited DefineProperties(Filer); - Filer.DefineProperty('Cipher', ReadCipher, WriteCipher, FCipherClass <> nil); -end; - -destructor TROCipherManager.Destroy; -begin - FCipher.Free; - FCipher := nil; - inherited Destroy; -end; - -procedure TROCipherManager.InitKey(const Key: String; IVector: Pointer); -begin - if FHashManager <> nil then Cipher.HashClass := FHashManager.HashClass; - Cipher.InitKey(Key, IVector); -end; - -procedure TROCipherManager.EncodeFile(const Source, Dest: String); -begin - Progress := FOnProgress; - try - Cipher.CodeFile(Source, Dest, paEncode); - finally - Progress := nil; - end; -end; - -procedure TROCipherManager.DecodeFile(const Source, Dest: String); -begin - Progress := FOnProgress; - try - Cipher.CodeFile(Source, Dest, paDecode); - finally - Progress := nil; - end; -end; - -procedure TROCipherManager.EncodeStream(Source, Dest: TStream; DataSize: Integer); -begin - Progress := FOnProgress; - try - Cipher.CodeStream(Source, Dest, DataSize, paEncode); - finally - Progress := nil; - end; -end; - -procedure TROCipherManager.DecodeStream(Source, Dest: TStream; DataSize: Integer); -begin - Progress := FOnProgress; - try - Cipher.CodeStream(Source, Dest, DataSize, paDecode); - finally - Progress := nil; - end; -end; - -procedure TROCipherManager.EncodeBuffer(const Source; var Dest; DataSize: Integer); -begin - Cipher.EncodeBuffer(Source, Dest, DataSize); -end; - -procedure TROCipherManager.DecodeBuffer(const Source; var Dest; DataSize: Integer); -begin - Cipher.DecodeBuffer(Source, Dest, DataSize); -end; - -function TROCipherManager.EncodeString(const Source: String): String; -begin - Result := Cipher.CodeString(Source, paEncode, fmtDEFAULT); -end; - -function TROCipherManager.DecodeString(const Source: String): String; -begin - Result := Cipher.CodeString(Source, paDecode, fmtDEFAULT); -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.inc deleted file mode 100644 index ef75bd7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.inc +++ /dev/null @@ -1,802 +0,0 @@ -const - Haval_Data: array[0..127] of LongWord = - ($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 LongWord = ( - ($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 LongWord = ( - ($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)); - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.pas deleted file mode 100644 index a45deb7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROHash.pas +++ /dev/null @@ -1,4038 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Part I from Delphi Encryption Compendium (DEC Part I) - Delphi 2-4, BCB 3-4, designed and testet under D3 and D4 - Description: Include Objects for calculating various RO_Hash's (fingerprints) - used RO_Hash-Algorithm: - MD4, MD5, SHA, SHA1, RipeMD (128 - 320), - Haval (128 - 256), Snefru, Square, Tiger, - Sapphire II (128 - 320) - used Checksum-Algo: - CRC32, XOR32bit, XOR16bit, CRC16-CCITT, CRC16-Standard - - Comments: for Designer's, the Buffer from Method Transform must be readonly - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Digest size, Result from DigestKeySize and Datasize for Digest - MD4 16 byte 128 bit 4x Integer - MD5 16 byte 128 bit 4x Integer - SHA 20 byte 160 bit 5x Integer - SHA1 20 byte 160 bit 5x Integer - RMD128 16 byte 128 bit 4x Integer - RMD160 20 byte 160 bit 5x Integer - RMD256 32 byte 256 bit 8x Integer - RMD320 40 byte 320 bit 10x Integer - Haval256 32 byte 256 bit 8x Integer - Haval224 28 byte 224 bit 7x Integer - Haval192 24 byte 192 bit 6x Integer - Haval160 20 byte 160 bit 5x Integer - Haval128 16 byte 128 bit 4x Integer - Sapphire320 40 byte 320 bit 10x Integer - Sapphire288 36 byte 288 bit 9x Integer - Sapphire256 32 byte 256 bit 8x Integer - Sapphire224 28 byte 224 bit 7x Integer - Sapphire192 24 byte 192 bit 6x Integer - Sapphire160 20 byte 160 bit 5x Integer - Sapphire128 16 byte 128 bit 4x Integer - Snefru 32 byte 256 bit 8x Integer - Square 16 byte 128 bit 4x Integer - Tiger 24 byte 192 bit 6x Integer in D4 used 64bit Arithmetic - - XOR16 2 byte 16 bit 1x Word - XOR32 4 byte 32 bit 1x Integer - CRC32 4 byte 32 bit 1x Integer - CRC16 2 byte 16 bit 1x Word -} - -unit uROHash; - -interface - -uses SysUtils, Classes, Windows, uRODECUtil; - -{$I uROVer.inc} - -type -{all RO_Hash Classes} - TROHash_MD4 = class; - TROHash_MD5 = class; - TROHash_RipeMD128 = class; - TROHash_RipeMD160 = class; - TROHash_RipeMD256 = class; - TROHash_RipeMD320 = class; - TROHash_SHA = class; - TROHash_SHA1 = class; - TROHash_Haval256 = class; - TROHash_Haval224 = class; - TROHash_Haval192 = class; - TROHash_Haval160 = class; - TROHash_Haval128 = class; - TROHash_Snefru = class; - TROHash_Tiger = class; - TROHash_Sapphire320 = class; {demonstrate the using from a RO_Cipher to hashing} - TROHash_Sapphire288 = class; - TROHash_Sapphire256 = class; - TROHash_Sapphire224 = class; - TROHash_Sapphire192 = class; - TROHash_Sapphire160 = class; - TROHash_Sapphire128 = class; - TROHash_Square = class; {demonstrate the using from a RO_Cipher to hashing} -{all Checksum Classes} - TROHash_XOR16 = class; - TROHash_XOR32 = class; - TROHash_CRC16_CCITT = class; - TROhash_CRC16_Standard = class; - TROHash_CRC32 = class; - - - {the Base-Class of all Hashs} - - TROHashClass = class of TROHash; - - TROHash = class(TROProtection) - protected - class function TestVector: Pointer; virtual; {must override} - procedure CodeInit(Action: TPAction); override; {TROProtection Methods, You can use a RO_Hash to En/Decode} - procedure CodeDone(Action: TPAction); override; {TROProtection Methods} - procedure CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); override; {TROProtection Methods} - procedure Protect(IsInit: Boolean); {calls any installed Protection} - public - destructor Destroy; override; - procedure Init; virtual; - procedure Calc(const Data; DataSize: Integer); virtual; {must override} - procedure Done; virtual; - function DigestKey: Pointer; virtual; {must override} - function DigestStr(Format: Integer): String; - - class function DigestKeySize: Integer; virtual; {must override} -{$IFDEF VER_D4H} // new features from D4 - class function CalcBuffer(const Buffer; BufferSize: Integer; Protection: TROProtection = nil; Format: Integer = fmtDEFAULT): String; overload; - class function CalcStream(const Stream: TStream; StreamSize: Integer; Protection: TROProtection = nil; Format: Integer = fmtDEFAULT): String; overload; - class function CalcString(const Data: String; Protection: TROProtection = nil; Format: Integer = fmtDEFAULT): String; overload; - class function CalcFile(const FileName: String; Protection: TROProtection = nil; Format: Integer = fmtDEFAULT): String; overload; -{$ELSE} - class function CalcBuffer(const Buffer; BufferSize: Integer; Protection: TROProtection; Format: Integer): String; - class function CalcStream(const Stream: TStream; StreamSize: Integer; Protection: TROProtection; Format: Integer): String; - class function CalcString(const Data: String; Protection: TROProtection; Format: Integer): String; - class function CalcFile(const FileName: String; Protection: TROProtection; Format: Integer): String; -{$ENDIF} -{test the correct working} - class function SelfTest: Boolean; - end; - -// HMAC's - RO_Hash Message Authentication Code's - TROMAC = class(TROProtection) // generic MAC, encrypt Password with any AProtection and XOR's with - protected // the Initstate from the RO_Hash (DigestKey) - FPassword: String; // final Digest is encrypted with AProtecion - procedure Init(RO_Hash: TROHash); virtual; // Only used in all TROHash Descends - procedure Done(RO_Hash: TROHash); virtual; // Only used in all TROHash Descends - public - constructor Create(const Password: String; AProtection: TROProtection); - destructor Destroy; override; - end; - - TROMAC_RFC2104 = class(TROMAC) // RFC2104 HMAC Protection, these make from any THash_XXX an HMAC-XXXX - private // full compatible with RFC2104 Standard, see Docus\RFC2104 & RFC2202 - function CalcPad(RO_Hash: TROHash; XORCode: Byte): String; - protected - procedure Init(RO_Hash: TROHash); override; - procedure Done(RO_Hash: TROHash); override; - end; - - TROHash_MD4 = class(TROHash) - private - FCount: LongWord; - FBuffer: array[0..63] of Byte; - FDigest: array[0..9] of LongWord; - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); virtual; - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Done; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; - end; - - TROHash_MD5 = class(TROHash_MD4) - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - end; - - TROHash_RipeMD128 = class(TROHash_MD4) {RACE Integrity Primitives Evaluation Message Digest} - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - end; - - TROHash_RipeMD160 = class(TROHash_MD4) - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - public -{DigestKey-Size 160 bit} - class function DigestKeySize: Integer; override; - end; - - TROHash_RipeMD256 = class(TROHash_MD4) - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - public -{DigestKey-Size 256 bit} - class function DigestKeySize: Integer; override; - procedure Init; override; - end; - - TROHash_RipeMD320 = class(TROHash_MD4) - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - public -{DigestKey-Size 320 bit} - class function DigestKeySize: Integer; override; - end; - - TROHash_SHA = class(TROHash_RipeMD160) - private - FRotate: Boolean; - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - public - procedure Done; override; - end; - - TROHash_SHA1 = class(TROHash_SHA) - protected - class function TestVector: Pointer; override; - public - procedure Init; override; - end; - - TROHash_Haval256 = class(TROHash) {default Rounds = 5} - private - FCount: Integer; - FBuffer: array[0..127] of Byte; - FDigest: array[0..7] of LongWord; - FRounds: Integer; {3 - 5} - FTransform: procedure(Buffer: PIntArray) of Object; - procedure SetRounds(Value: Integer); - protected - class function TestVector: Pointer; override; - procedure Transform3(Buffer: PIntArray); - procedure Transform4(Buffer: PIntArray); - procedure Transform5(Buffer: PIntArray); - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Done; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROHash_Haval224 = class(TROHash_Haval256) {default Rounds = 4} - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Haval192 = class(TROHash_Haval256) {default Rounds = 4} - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Haval160 = class(TROHash_Haval256) {default Rounds = 3} - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Haval128 = class(TROHash_Haval256) {default Rounds = 3} - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Snefru = class(TROHash) {"derived from the Xerox Secure RO_Hash Function"} - private - FSecurity_Level: Integer; - FCount: Integer; - FDigest: array[0..15] of LongWord; {first 8 Integer is the Digest} - FBuffer: array[0..31] of Byte; - procedure SetSecurity_Level(Value: Integer); - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Done; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; -{can set from 2 to 8, default is 8} - property Security_Level: Integer read FSecurity_Level write SetSecurity_Level; - end; - - TROHash_Tiger = class(TROHash_MD4) {Tiger use 64bit Operation's} - private - FRounds: Integer; { 3 - 32 , default is 3 , >3 slower but higher Security} - procedure SetRounds(Value: Integer); - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); override; - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Done; override; - property Rounds: Integer read FRounds write SetRounds; - end; - - TROHash_Sapphire320 = class(TROHash) - private - FCount: LongWord; - FRotor: Byte; - FRatchet: Byte; - FAvalanche: Byte; - FPlain: Byte; - FCipher: Byte; - FCards: array[0..255] of Byte; - FDigest: array[0..9] of LongWord; - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Calc(const Data; DataSize: Integer); override; - procedure Done; override; - function DigestKey: Pointer; override; - end; - - TROHash_Sapphire288 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Sapphire256 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Sapphire224 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Sapphire192 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Sapphire160 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Sapphire128 = class(TROHash_Sapphire320) - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - end; - - TROHash_Square = class(TROHash) - private - FCount: Integer; - FBuffer: array[0..15] of Byte; - FDigest: array[0..3] of LongWord; - protected - class function TestVector: Pointer; override; - procedure Transform(Buffer: PIntArray); - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Done; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; - end; - - TROChecksum = class(TROHash); - - TROHash_XOR16 = class(TROChecksum) - private - FCRC: Word; - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; - end; - - TROHash_XOR32 = class(TROChecksum) - private - FCRC: LongWord; - protected - class function TestVector: Pointer; override; - public - class function DigestKeySize: Integer; override; - procedure Init; override; - procedure Calc(const Data; DataSize: Integer); override; - function DigestKey: Pointer; override; - end; - - TROHash_CRC32 = class(TROHash_XOR32) - private - protected - class function TestVector: Pointer; override; - public - procedure Init; override; - procedure Calc(const Data; DataSize: Integer); override; - procedure Done; override; - end; - - TROHash_CRC16_CCITT = class(TROHash_XOR16) - private - protected - class function TestVector: Pointer; override; - public - procedure Init; override; - procedure Calc(const Data; DataSize: Integer); override; - end; - - TROhash_CRC16_Standard = class(TROHash_XOR16) - private - protected - class function TestVector: Pointer; override; - public - procedure Calc(const Data; DataSize: Integer); override; - end; - -function DefaultHashClass: TROHashClass; -procedure SetDefaultHashClass(HashClass: TROHashClass); -function RegisterHash(const AHash: TROHashClass; const AName, ADescription: String): Boolean; -function UnregisterHash(const AHash: TROHashClass): Boolean; -function HashList: TStrings; -procedure HashNames(List: TStrings); -function GetHashClass(const Name: String): TROHashClass; -function GetHashName(HashClass: TROHashClass): String; - -implementation - -{$I *.inc} -{$I uROSquare.inc} - -const -// used as default for TROCipher in .InitKey(), -// the hashed Password is used as real Key, -// RipeMD256 produce a 256 bit Key (32 Bytes) -// a Key Attack have 2^256 Variants to test, when the -// RO_Cipher all Bit's use, i.E. Blowfish, Gost, SCOP, Twofish - FDefaultHashClass: TROHashClass = TROHash_RipeMD256; - FHashList: TStringList = nil; - -// RFC2104 HMAC Algorithm Parameters - RFC2104_Size = 64; // Size of Padding in Bytes - RFC2104_IPad = $36; // XOR Value from Inner Pad - RFC2104_OPad = $5C; // XOR Value from outer Pad - -function DefaultHashClass: TROHashClass; -begin - Result := FDefaultHashClass; -end; - -procedure SetDefaultHashClass(HashClass: TROHashClass); -begin - if HashClass = nil then FDefaultHashClass := TROHash_RipeMD256 - else FDefaultHashClass := HashClass; -end; - -function RegisterHash(const AHash: TROHashClass; const AName, ADescription: String): Boolean; -var - I: Integer; - S: String; -begin - Result := False; - if AHash = nil then Exit; - S := Trim(AName); - if S = '' then - begin - S := AHash.ClassName; - if S[1] = 'T' then Delete(S, 1, 1); - I := Pos('_', S); - if I > 0 then Delete(S, 1, I); - end; - S := S + '=' + ADescription; - I := HashList.IndexOfObject(Pointer(AHash)); - if I < 0 then HashList.AddObject(S, Pointer(AHash)) - else HashList[I] := S; - Result := True; -end; - -function UnregisterHash(const AHash: TROHashClass): Boolean; -var - I: Integer; -begin - Result := False; - repeat - I := HashList.IndexOfObject(Pointer(AHash)); - if I < 0 then Break; - Result := True; - HashList.Delete(I); - until False; -end; - -function HashList: TStrings; -begin - if not IsObject(FHashList, TStringList) then FHashList := TStringList.Create; - Result := FHashList; -end; - -procedure HashNames(List: TStrings); -var - I: Integer; -begin - if not IsObject(List, TStrings) then Exit; - for I := 0 to HashList.Count-1 do - List.AddObject(FHashList.Names[I], FHashList.Objects[I]); -end; - -function GetHashClass(const Name: String): TROHashClass; -var - I: Integer; - N: String; -begin - Result := nil; - N := Name; - I := Pos('_', N); - if I > 0 then Delete(N, 1, I); - for I := 0 to HashList.Count-1 do - if AnsiCompareText(N, GetShortClassName(TClass(FHashList.Objects[I]))) = 0 then - begin - Result := TROHashClass(FHashList.Objects[I]); - Exit; - end; - I := FHashList.IndexOfName(N); - if I >= 0 then Result := TROHashClass(FHashList.Objects[I]); -end; - -function GetHashName(HashClass: TROHashClass): String; -var - I: Integer; -begin - I := HashList.IndexOfObject(Pointer(HashClass)); - if I >= 0 then Result := FHashList.Names[I] - else Result := GetShortClassName(HashClass); -end; - -destructor TROHash.Destroy; -begin - FillChar(DigestKey^, DigestKeySize, 0); - inherited Destroy; -end; - -procedure TROHash.Init; -begin - Protect(True); -end; - -procedure TROHash.Calc(const Data; DataSize: Integer); -begin -end; - -procedure TROHash.Protect(IsInit: Boolean); -begin - if Protection <> nil then - if IsObject(Protection, TROMAC) then - begin - with TROMAC(Protection) do - if IsInit then Init(Self) else Done(Self); - end else - if not IsInit then - Protection.CodeBuffer(DigestKey^, DigestKeySize, paScramble); -end; - -procedure TROHash.Done; -begin - Protect(False); -end; - -function TROHash.DigestKey: Pointer; -begin - Result := GetTestVector; -end; - -class function TROHash.DigestKeySize: Integer; -begin - Result := 0; -end; - -function TROHash.DigestStr(Format: Integer): String; -begin - Result := StrToFormat(DigestKey, DigestKeySize, Format); -end; - -class function TROHash.TestVector: Pointer; -begin - Result := GetTestVector; -end; - -class function TROHash.CalcStream(const Stream: TStream; StreamSize: Integer; Protection: TROProtection; Format: Integer): String; -const - maxBufSize = 1024 * 4; {Buffersize for File, Stream-Access} -var - Buf: Pointer; - BufSize: Integer; - Size: Integer; - RO_Hash: TROHash; -begin - RO_Hash := Create(Protection); - with RO_Hash do - try - Buf := AllocMem(maxBufSize); - Init; - if StreamSize < 0 then - {if Size < 0 then reset the Position, otherwise, calc with the specific - Size and from the aktual Position in the Stream} - begin - Stream.Position := 0; - StreamSize := Stream.Size; - end; - Size := StreamSize; - DoProgress(RO_Hash, 0, Size); - repeat - BufSize := StreamSize; - if BufSize > maxBufSize then BufSize := maxBufSize; - BufSize := Stream.Read(Buf^, BufSize); - if BufSize <= 0 then Break; - Calc(Buf^, BufSize); - Dec(StreamSize, BufSize); - DoProgress(RO_Hash, Size - StreamSize, Size); - until BufSize <= 0; - Done; - Result := StrToFormat(DigestKey, DigestKeySize, Format); - finally - DoProgress(RO_Hash, 0, 0); - Free; - ReallocMem(Buf, 0); - end; -end; - -class function TROHash.CalcString(const Data: String; Protection: TROProtection; Format: Integer): String; -begin - with Create(Protection) do - try - Init; - Calc(PChar(Data)^, Length(Data)); - Done; - Result := StrToFormat(DigestKey, DigestKeySize, Format); - finally - Free; - end; -end; - -class function TROHash.CalcFile(const FileName: String; Protection: TROProtection; Format: Integer): String; -var - S: TFileStream; -begin - S := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); - try - Result := CalcStream(S, S.Size, Protection, Format); - finally - S.Free; - end; -end; - -class function TROHash.CalcBuffer(const Buffer; BufferSize: Integer; Protection: TROProtection; Format: Integer): String; -begin - with Create(Protection) do {create an Object from my Classtype} - try - Init; - Calc(Buffer, BufferSize); - Done; - Result := StrToFormat(DigestKey, DigestKeySize, Format); - finally - Free; {destroy it} - end; -end; - -class function TROHash.SelfTest: Boolean; -var - Test: String; -begin - Test := CalcBuffer(GetTestVector^, 32, nil, fmtCOPY); - Result := InitTestIsOk and (MemCompare(PChar(Test), TestVector, Length(Test)) = 0); -end; - -procedure TROHash.CodeInit(Action: TPAction); -begin - Init; - if Action = paWipe then RndXORBuffer(RndTimeSeed, DigestKey^, DigestKeySize); - inherited CodeInit(Action); -end; - -procedure TROHash.CodeDone(Action: TPAction); -begin - inherited CodeDone(Action); - if (Action <> paCalc) then Init else Done; -end; - -procedure TROHash.CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); -var - BPtr: PByte; - CSize,DSize,BSize: Integer; -begin - if Action <> paDecode then inherited CodeBuf(Buffer, BufferSize, Action); - if Action in Actions then - begin - BPtr := @Buffer; - if BPtr = nil then Exit; - DSize := DigestKeySize; - CSize := BufferSize; - if Action = paCalc then - begin - Calc(Buffer, BufferSize); - end else - begin - if Action in [paScramble, paWipe] then - begin - while CSize > 0 do - begin - BSize := CSize; - if BSize > DSize then BSize := DSize; - Calc(BPtr^, BSize); - Done; - Move(DigestKey^, BPtr^, BSize); - Dec(CSize, BSize); - Inc(BPtr, BSize); - end; - end else - while CSize > 0 do - begin - BSize := DSize; - if BSize > CSize then BSize := CSize; - Calc(DigestKey^, DSize); - Done; - XORBuffers(DigestKey, BPtr, BSize, BPtr); - Dec(CSize, BSize); - Inc(BPtr, BSize); - end; - end; - end; - if Action = paDecode then - inherited CodeBuf(Buffer, BufferSize, Action); -end; - -procedure TROMAC.Init(RO_Hash: TROHash); -var - Key: String; -begin - if Length(FPassword) > 0 then - begin - Key := RO_Hash.CalcString(FPassword, Protection, fmtCOPY); - XORBuffers(RO_Hash.DigestKey, PChar(Key), Length(Key), RO_Hash.DigestKey); - FillChar(PChar(Key)^, Length(Key), $AA); - FillChar(PChar(Key)^, Length(Key), $55); - FillChar(PChar(Key)^, Length(Key), 0); - end; -end; - -procedure TROMAC.Done(RO_Hash: TROHash); -begin - if Protection <> nil then - Protection.CodeBuffer(RO_Hash.DigestKey^, RO_Hash.DigestKeySize, paScramble); -end; - -constructor TROMAC.Create(const Password: String; AProtection: TROProtection); -begin - inherited Create(AProtection); - SetLength(FPassword, Length(Password)); - Move(PChar(Password)^, PChar(FPassword)^, Length(Password)); -end; - -destructor TROMAC.Destroy; -var - I: Integer; -begin - I := Length(FPassword); - if I > 0 then - begin - FillChar(PChar(FPassword)^, I, $AA); - FillChar(PChar(FPassword)^, I, $55); - FillChar(PChar(FPassword)^, I, 0); - end; - FPassword := ''; - inherited Destroy; -end; - -function TROMAC_RFC2104.CalcPad(RO_Hash: TROHash; XORCode: Byte): String; -var - I: Integer; -begin - I := Length(FPassword); - if I > RFC2104_Size then Result := RO_Hash.CalcString(FPassword, nil, fmtCOPY) - else Result := FPassword; - UniqueString(Result); - for I := 1 to Length(Result) do - Byte(Result[I]) := Byte(Result[I]) xor XORCode; - I := Length(Result); - SetLength(Result, RFC2104_Size); - FillChar(Result[I +1], RFC2104_Size - I, XORCode); -end; - -procedure TROMAC_RFC2104.Init(RO_Hash: TROHash); -var - IPad: String; -begin - if Length(FPassword) > 0 then - begin - IPad := CalcPad(RO_Hash, RFC2104_IPad); - RO_Hash.Calc(PChar(IPad)^, Length(IPad)); - end; -end; - -procedure TROMAC_RFC2104.Done(RO_Hash: TROHash); -var - OPad: String; -begin - if Length(FPassword) > 0 then - begin - OPad := CalcPad(RO_Hash, RFC2104_OPad); - with TROHashClass(RO_Hash.ClassType).Create(nil) do - try - Init; - Calc(PChar(OPad)^, Length(OPad)); - Calc(RO_Hash.DigestKey^, DigestKeySize); - Done; - Move(DigestKey^, RO_Hash.DigestKey^, DigestKeySize); - finally - Free; - end; - end; - if Protection <> nil then - Protection.CodeBuffer(RO_Hash.DigestKey^, RO_Hash.DigestKeySize, paScramble); -end; - -class function TROHash_MD4.TestVector: Pointer; assembler; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 025h,0EAh,0BFh,0CCh,08Ch,0C9h,06Fh,0D9h - DB 02Dh,0CFh,07Eh,0BDh,07Fh,087h,07Ch,07Ch -end; - -procedure TROHash_MD4.Transform(Buffer: PIntArray); -{calculate the Digest, fast} -var - A, B, C, D: LongWord; -begin - A := FDigest[0]; - B := FDigest[1]; - C := FDigest[2]; - D := FDigest[3]; - - Inc(A, Buffer[ 0] + (B and C or not B and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 1] + (A and B or not A and C)); D := D shl 7 or D shr 25; - Inc(C, Buffer[ 2] + (D and A or not D and B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[ 3] + (C and D or not C and A)); B := B shl 19 or B shr 13; - Inc(A, Buffer[ 4] + (B and C or not B and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 5] + (A and B or not A and C)); D := D shl 7 or D shr 25; - Inc(C, Buffer[ 6] + (D and A or not D and B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[ 7] + (C and D or not C and A)); B := B shl 19 or B shr 13; - Inc(A, Buffer[ 8] + (B and C or not B and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 9] + (A and B or not A and C)); D := D shl 7 or D shr 25; - Inc(C, Buffer[10] + (D and A or not D and B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[11] + (C and D or not C and A)); B := B shl 19 or B shr 13; - Inc(A, Buffer[12] + (B and C or not B and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[13] + (A and B or not A and C)); D := D shl 7 or D shr 25; - Inc(C, Buffer[14] + (D and A or not D and B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[15] + (C and D or not C and A)); B := B shl 19 or B shr 13; - - Inc(A, Buffer[ 0] + $5A827999 + (B and C or B and D or C and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 4] + $5A827999 + (A and B or A and C or B and C)); D := D shl 5 or D shr 27; - Inc(C, Buffer[ 8] + $5A827999 + (D and A or D and B or A and B)); C := C shl 9 or C shr 23; - Inc(B, Buffer[12] + $5A827999 + (C and D or C and A or D and A)); B := B shl 13 or B shr 19; - Inc(A, Buffer[ 1] + $5A827999 + (B and C or B and D or C and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 5] + $5A827999 + (A and B or A and C or B and C)); D := D shl 5 or D shr 27; - Inc(C, Buffer[ 9] + $5A827999 + (D and A or D and B or A and B)); C := C shl 9 or C shr 23; - Inc(B, Buffer[13] + $5A827999 + (C and D or C and A or D and A)); B := B shl 13 or B shr 19; - Inc(A, Buffer[ 2] + $5A827999 + (B and C or B and D or C and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 6] + $5A827999 + (A and B or A and C or B and C)); D := D shl 5 or D shr 27; - Inc(C, Buffer[10] + $5A827999 + (D and A or D and B or A and B)); C := C shl 9 or C shr 23; - Inc(B, Buffer[14] + $5A827999 + (C and D or C and A or D and A)); B := B shl 13 or B shr 19; - Inc(A, Buffer[ 3] + $5A827999 + (B and C or B and D or C and D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 7] + $5A827999 + (A and B or A and C or B and C)); D := D shl 5 or D shr 27; - Inc(C, Buffer[11] + $5A827999 + (D and A or D and B or A and B)); C := C shl 9 or C shr 23; - Inc(B, Buffer[15] + $5A827999 + (C and D or C and A or D and A)); B := B shl 13 or B shr 19; - - Inc(A, Buffer[ 0] + $6ED9EBA1 + (B xor C xor D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 8] + $6ED9EBA1 + (A xor B xor C)); D := D shl 9 or D shr 23; - Inc(C, Buffer[ 4] + $6ED9EBA1 + (D xor A xor B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[12] + $6ED9EBA1 + (C xor D xor A)); B := B shl 15 or B shr 17; - Inc(A, Buffer[ 2] + $6ED9EBA1 + (B xor C xor D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[10] + $6ED9EBA1 + (A xor B xor C)); D := D shl 9 or D shr 23; - Inc(C, Buffer[ 6] + $6ED9EBA1 + (D xor A xor B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[14] + $6ED9EBA1 + (C xor D xor A)); B := B shl 15 or B shr 17; - Inc(A, Buffer[ 1] + $6ED9EBA1 + (B xor C xor D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[ 9] + $6ED9EBA1 + (A xor B xor C)); D := D shl 9 or D shr 23; - Inc(C, Buffer[ 5] + $6ED9EBA1 + (D xor A xor B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[13] + $6ED9EBA1 + (C xor D xor A)); B := B shl 15 or B shr 17; - Inc(A, Buffer[ 3] + $6ED9EBA1 + (B xor C xor D)); A := A shl 3 or A shr 29; - Inc(D, Buffer[11] + $6ED9EBA1 + (A xor B xor C)); D := D shl 9 or D shr 23; - Inc(C, Buffer[ 7] + $6ED9EBA1 + (D xor A xor B)); C := C shl 11 or C shr 21; - Inc(B, Buffer[15] + $6ED9EBA1 + (C xor D xor A)); 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; - -class function TROHash_MD4.DigestKeySize: Integer; -begin - Result := 16; -end; - -function TROHash_MD4.DigestKey: Pointer; -begin - Result := @FDigest; -end; - -procedure TROHash_MD4.Init; -begin - FillChar(FBuffer, SizeOf(FBuffer), 0); -{all Descend from MD4 (MD4, SHA1, RipeMD128, RipeMD160, RipeMD256) use this Init-Key} - FDigest[0] := $67452301; - FDigest[1] := $EFCDAB89; - FDigest[2] := $98BADCFE; - FDigest[3] := $10325476; - FDigest[4] := $C3D2E1F0; -{for RMD320} - FDigest[5] := $76543210; - FDigest[6] := $FEDCBA98; - FDigest[7] := $89ABCDEF; - FDigest[8] := $01234567; - FDigest[9] := $3C2D1E0F; - FCount := 0; - Protect(True); -end; - -procedure TROHash_MD4.Done; -var - I: Integer; - S: Comp; -begin - I := FCount and $3F; - FBuffer[I] := $80; - Inc(I); - if I > 64 - 8 then - begin - FillChar(FBuffer[I], 64 - I, 0); - Transform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 64 - I, 0); - S := FCount * 8; - Move(S, FBuffer[64 - 8], SizeOf(S)); - Transform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); - Protect(False); -end; - -procedure TROHash_MD4.Calc(const Data; DataSize: Integer); -var - Index: Integer; - P: PChar; -begin - if DataSize <= 0 then Exit; - Index := FCount and $3F; - Inc(FCount, DataSize); - if Index > 0 then - begin - if DataSize < 64 - Index then - begin - Move(Data, FBuffer[Index], DataSize); - Exit; - end; - Move(Data, FBuffer[Index], 64 - Index); - Transform(@FBuffer); - Index := 64 - Index; - Dec(DataSize, Index); - end; - P := @TByteArray(Data)[Index]; - Inc(Index, DataSize and not $3F); - while DataSize >= 64 do - begin - Transform(Pointer(P)); - Inc(P, 64); - Dec(DataSize, 64); - end; - Move(TByteArray(Data)[Index], FBuffer, DataSize); -end; - -class function TROHash_MD5.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 03Eh,0D8h,034h,08Ch,0D2h,0A4h,045h,0D6h - DB 075h,05Dh,04Bh,0C9h,0FEh,0DCh,0C2h,0C6h -end; - -procedure TROHash_MD5.Transform(Buffer: PIntArray); -var - A, B, C, D: LongWord; -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; - -class function TROHash_RipeMD128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0CFh,0A0h,032h,0CFh,0D0h,08Fh,087h,03Ah - DB 078h,0DFh,013h,0E7h,0EBh,0CDh,098h,00Fh -end; - -procedure TROHash_RipeMD128.Transform(Buffer: PIntArray); -var - A1, B1, C1, D1: LongWord; - A2, B2, C2, D2: LongWord; -begin - A1 := FDigest[0]; - B1 := FDigest[1]; - C1 := FDigest[2]; - D1 := FDigest[3]; - A2 := A1; - B2 := B1; - C2 := C1; - D2 := D1; - - 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] + $5A827999); A1 := A1 shl 7 or A1 shr 25; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 4] + $5A827999); D1 := D1 shl 6 or D1 shr 26; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[13] + $5A827999); C1 := C1 shl 8 or C1 shr 24; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 1] + $5A827999); B1 := B1 shl 13 or B1 shr 19; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + $5A827999); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 6] + $5A827999); D1 := D1 shl 9 or D1 shr 23; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[15] + $5A827999); C1 := C1 shl 7 or C1 shr 25; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + $5A827999); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[12] + $5A827999); A1 := A1 shl 7 or A1 shr 25; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + $5A827999); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 9] + $5A827999); C1 := C1 shl 15 or C1 shr 17; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 5] + $5A827999); B1 := B1 shl 9 or B1 shr 23; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 2] + $5A827999); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + $5A827999); D1 := D1 shl 7 or D1 shr 25; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[11] + $5A827999); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 8] + $5A827999); B1 := B1 shl 12 or B1 shr 20; - - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 3] + $6ED9EBA1); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, (A1 or not B1) xor C1 + Buffer[10] + $6ED9EBA1); D1 := D1 shl 13 or D1 shr 19; - Inc(C1, (D1 or not A1) xor B1 + Buffer[14] + $6ED9EBA1); C1 := C1 shl 6 or C1 shr 26; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 4] + $6ED9EBA1); B1 := B1 shl 7 or B1 shr 25; - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 9] + $6ED9EBA1); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, (A1 or not B1) xor C1 + Buffer[15] + $6ED9EBA1); D1 := D1 shl 9 or D1 shr 23; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 8] + $6ED9EBA1); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 1] + $6ED9EBA1); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 2] + $6ED9EBA1); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, (A1 or not B1) xor C1 + Buffer[ 7] + $6ED9EBA1); D1 := D1 shl 8 or D1 shr 24; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 0] + $6ED9EBA1); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 6] + $6ED9EBA1); B1 := B1 shl 6 or B1 shr 26; - Inc(A1, (B1 or not C1) xor D1 + Buffer[13] + $6ED9EBA1); A1 := A1 shl 5 or A1 shr 27; - Inc(D1, (A1 or not B1) xor C1 + Buffer[11] + $6ED9EBA1); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 5] + $6ED9EBA1); C1 := C1 shl 7 or C1 shr 25; - Inc(B1, (C1 or not D1) xor A1 + Buffer[12] + $6ED9EBA1); B1 := B1 shl 5 or B1 shr 27; - - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + $8F1BBCDC); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 9] + $8F1BBCDC); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + $8F1BBCDC); C1 := C1 shl 14 or C1 shr 18; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[10] + $8F1BBCDC); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + $8F1BBCDC); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 8] + $8F1BBCDC); D1 := D1 shl 15 or D1 shr 17; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[12] + $8F1BBCDC); C1 := C1 shl 9 or C1 shr 23; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + $8F1BBCDC); B1 := B1 shl 8 or B1 shr 24; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + $8F1BBCDC); A1 := A1 shl 9 or A1 shr 23; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 3] + $8F1BBCDC); D1 := D1 shl 14 or D1 shr 18; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + $8F1BBCDC); C1 := C1 shl 5 or C1 shr 27; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[15] + $8F1BBCDC); B1 := B1 shl 6 or B1 shr 26; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + $8F1BBCDC); A1 := A1 shl 8 or A1 shr 24; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 5] + $8F1BBCDC); D1 := D1 shl 6 or D1 shr 26; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 6] + $8F1BBCDC); C1 := C1 shl 5 or C1 shr 27; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 2] + $8F1BBCDC); B1 := B1 shl 12 or B1 shr 20; - - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 5] + $50A28BE6); A2 := A2 shl 8 or A2 shr 24; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[14] + $50A28BE6); D2 := D2 shl 9 or D2 shr 23; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[ 7] + $50A28BE6); C2 := C2 shl 9 or C2 shr 23; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 0] + $50A28BE6); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 9] + $50A28BE6); A2 := A2 shl 13 or A2 shr 19; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[ 2] + $50A28BE6); D2 := D2 shl 15 or D2 shr 17; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[11] + $50A28BE6); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 4] + $50A28BE6); B2 := B2 shl 5 or B2 shr 27; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[13] + $50A28BE6); A2 := A2 shl 7 or A2 shr 25; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[ 6] + $50A28BE6); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[15] + $50A28BE6); C2 := C2 shl 8 or C2 shr 24; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 8] + $50A28BE6); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 1] + $50A28BE6); A2 := A2 shl 14 or A2 shr 18; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[10] + $50A28BE6); D2 := D2 shl 14 or D2 shr 18; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[ 3] + $50A28BE6); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[12] + $50A28BE6); B2 := B2 shl 6 or B2 shr 26; - - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 6] + $5C4DD124); A2 := A2 shl 9 or A2 shr 23; - Inc(D2, (A2 or not B2) xor C2 + Buffer[11] + $5C4DD124); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 3] + $5C4DD124); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, (C2 or not D2) xor A2 + Buffer[ 7] + $5C4DD124); B2 := B2 shl 7 or B2 shr 25; - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 0] + $5C4DD124); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, (A2 or not B2) xor C2 + Buffer[13] + $5C4DD124); D2 := D2 shl 8 or D2 shr 24; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 5] + $5C4DD124); C2 := C2 shl 9 or C2 shr 23; - Inc(B2, (C2 or not D2) xor A2 + Buffer[10] + $5C4DD124); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, (B2 or not C2) xor D2 + Buffer[14] + $5C4DD124); A2 := A2 shl 7 or A2 shr 25; - Inc(D2, (A2 or not B2) xor C2 + Buffer[15] + $5C4DD124); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 8] + $5C4DD124); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, (C2 or not D2) xor A2 + Buffer[12] + $5C4DD124); B2 := B2 shl 7 or B2 shr 25; - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 4] + $5C4DD124); A2 := A2 shl 6 or A2 shr 26; - Inc(D2, (A2 or not B2) xor C2 + Buffer[ 9] + $5C4DD124); D2 := D2 shl 15 or D2 shr 17; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 1] + $5C4DD124); C2 := C2 shl 13 or C2 shr 19; - Inc(B2, (C2 or not D2) xor A2 + Buffer[ 2] + $5C4DD124); B2 := B2 shl 11 or B2 shr 21; - - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[15] + $6D703EF3); A2 := A2 shl 9 or A2 shr 23; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 5] + $6D703EF3); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 1] + $6D703EF3); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 3] + $6D703EF3); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[ 7] + $6D703EF3); A2 := A2 shl 8 or A2 shr 24; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[14] + $6D703EF3); D2 := D2 shl 6 or D2 shr 26; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 6] + $6D703EF3); C2 := C2 shl 6 or C2 shr 26; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 9] + $6D703EF3); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[11] + $6D703EF3); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 8] + $6D703EF3); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[12] + $6D703EF3); C2 := C2 shl 5 or C2 shr 27; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 2] + $6D703EF3); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[10] + $6D703EF3); A2 := A2 shl 13 or A2 shr 19; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 0] + $6D703EF3); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 4] + $6D703EF3); C2 := C2 shl 7 or C2 shr 25; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[13] + $6D703EF3); B2 := B2 shl 5 or B2 shr 27; - - Inc(A2, B2 xor C2 xor D2 + Buffer[ 8]); A2 := A2 shl 15 or A2 shr 17; - Inc(D2, A2 xor B2 xor C2 + Buffer[ 6]); D2 := D2 shl 5 or D2 shr 27; - Inc(C2, D2 xor A2 xor B2 + Buffer[ 4]); C2 := C2 shl 8 or C2 shr 24; - Inc(B2, C2 xor D2 xor A2 + Buffer[ 1]); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 3]); A2 := A2 shl 14 or A2 shr 18; - Inc(D2, A2 xor B2 xor C2 + Buffer[11]); D2 := D2 shl 14 or D2 shr 18; - Inc(C2, D2 xor A2 xor B2 + Buffer[15]); C2 := C2 shl 6 or C2 shr 26; - Inc(B2, C2 xor D2 xor A2 + Buffer[ 0]); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 5]); A2 := A2 shl 6 or A2 shr 26; - Inc(D2, A2 xor B2 xor C2 + Buffer[12]); D2 := D2 shl 9 or D2 shr 23; - Inc(C2, D2 xor A2 xor B2 + Buffer[ 2]); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, C2 xor D2 xor A2 + Buffer[13]); B2 := B2 shl 9 or B2 shr 23; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 9]); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, A2 xor B2 xor C2 + Buffer[ 7]); D2 := D2 shl 5 or D2 shr 27; - Inc(C2, D2 xor A2 xor B2 + Buffer[10]); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 xor D2 xor A2 + Buffer[14]); B2 := B2 shl 8 or B2 shr 24; - - Inc(D2, C1 + FDigest[1]); - FDigest[1] := FDigest[2] + D1 + A2; - FDigest[2] := FDigest[3] + A1 + B2; - FDigest[3] := FDIgest[0] + B1 + C2; - FDigest[0] := D2; -end; - -class function TROHash_RipeMD160.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 019h,054h,0DEh,0BCh,01Bh,055h,035h,030h - DB 008h,01Dh,09Bh,080h,070h,0A0h,0F2h,04Ah - DB 09Dh,0F7h,034h,004h -end; - -procedure TROHash_RipeMD160.Transform(Buffer: PIntArray); -var - A1, B1, C1, D1, E1: LongWord; - A, B, C, D, E: LongWord; -begin - A := FDigest[0]; - B := FDigest[1]; - C := FDigest[2]; - D := FDigest[3]; - E := FDigest[4]; - - Inc(A, Buffer[ 0] + (B xor C xor D)); A := A shl 11 or A shr 21 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 1] + (A xor B xor C)); E := E shl 14 or E shr 18 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 2] + (E xor A xor B)); D := D shl 15 or D shr 17 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 3] + (D xor E xor A)); C := C shl 12 or C shr 20 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 4] + (C xor D xor E)); B := B shl 5 or B shr 27 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 5] + (B xor C xor D)); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 6] + (A xor B xor C)); E := E shl 7 or E shr 25 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 7] + (E xor A xor B)); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 8] + (D xor E xor A)); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 9] + (C xor D xor E)); B := B shl 13 or B shr 19 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[10] + (B xor C xor D)); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[11] + (A xor B xor C)); E := E shl 15 or E shr 17 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[12] + (E xor A xor B)); D := D shl 6 or D shr 26 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[13] + (D xor E xor A)); C := C shl 7 or C shr 25 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[14] + (C xor D xor E)); B := B shl 9 or B shr 23 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[15] + (B xor C xor D)); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - - Inc(E, Buffer[ 7] + $5A827999 + ((A and B) or (not A and C))); E := E shl 7 or E shr 25 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 4] + $5A827999 + ((E and A) or (not E and B))); D := D shl 6 or D shr 26 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[13] + $5A827999 + ((D and E) or (not D and A))); C := C shl 8 or C shr 24 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 1] + $5A827999 + ((C and D) or (not C and E))); B := B shl 13 or B shr 19 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[10] + $5A827999 + ((B and C) or (not B and D))); A := A shl 11 or A shr 21 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 6] + $5A827999 + ((A and B) or (not A and C))); E := E shl 9 or E shr 23 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[15] + $5A827999 + ((E and A) or (not E and B))); D := D shl 7 or D shr 25 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 3] + $5A827999 + ((D and E) or (not D and A))); C := C shl 15 or C shr 17 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[12] + $5A827999 + ((C and D) or (not C and E))); B := B shl 7 or B shr 25 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 0] + $5A827999 + ((B and C) or (not B and D))); A := A shl 12 or A shr 20 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 9] + $5A827999 + ((A and B) or (not A and C))); E := E shl 15 or E shr 17 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 5] + $5A827999 + ((E and A) or (not E and B))); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 2] + $5A827999 + ((D and E) or (not D and A))); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[14] + $5A827999 + ((C and D) or (not C and E))); B := B shl 7 or B shr 25 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[11] + $5A827999 + ((B and C) or (not B and D))); A := A shl 13 or A shr 19 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 8] + $5A827999 + ((A and B) or (not A and C))); E := E shl 12 or E shr 20 + D; B := B shl 10 or B shr 22; - - Inc(D, Buffer[ 3] + $6ED9EBA1 + ((E or not A) xor B)); D := D shl 11 or D shr 21 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[10] + $6ED9EBA1 + ((D or not E) xor A)); C := C shl 13 or C shr 19 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[14] + $6ED9EBA1 + ((C or not D) xor E)); B := B shl 6 or B shr 26 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 4] + $6ED9EBA1 + ((B or not C) xor D)); A := A shl 7 or A shr 25 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 9] + $6ED9EBA1 + ((A or not B) xor C)); E := E shl 14 or E shr 18 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[15] + $6ED9EBA1 + ((E or not A) xor B)); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 8] + $6ED9EBA1 + ((D or not E) xor A)); C := C shl 13 or C shr 19 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 1] + $6ED9EBA1 + ((C or not D) xor E)); B := B shl 15 or B shr 17 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 2] + $6ED9EBA1 + ((B or not C) xor D)); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 7] + $6ED9EBA1 + ((A or not B) xor C)); E := E shl 8 or E shr 24 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 0] + $6ED9EBA1 + ((E or not A) xor B)); D := D shl 13 or D shr 19 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 6] + $6ED9EBA1 + ((D or not E) xor A)); C := C shl 6 or C shr 26 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[13] + $6ED9EBA1 + ((C or not D) xor E)); B := B shl 5 or B shr 27 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[11] + $6ED9EBA1 + ((B or not C) xor D)); A := A shl 12 or A shr 20 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 5] + $6ED9EBA1 + ((A or not B) xor C)); E := E shl 7 or E shr 25 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[12] + $6ED9EBA1 + ((E or not A) xor B)); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - - Inc(C, Buffer[ 1] + $8F1BBCDC + ((D and A) or (E and not A))); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 9] + $8F1BBCDC + ((C and E) or (D and not E))); B := B shl 12 or B shr 20 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[11] + $8F1BBCDC + ((B and D) or (C and not D))); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[10] + $8F1BBCDC + ((A and C) or (B and not C))); E := E shl 15 or E shr 17 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 0] + $8F1BBCDC + ((E and B) or (A and not B))); D := D shl 14 or D shr 18 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 8] + $8F1BBCDC + ((D and A) or (E and not A))); C := C shl 15 or C shr 17 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[12] + $8F1BBCDC + ((C and E) or (D and not E))); B := B shl 9 or B shr 23 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 4] + $8F1BBCDC + ((B and D) or (C and not D))); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[13] + $8F1BBCDC + ((A and C) or (B and not C))); E := E shl 9 or E shr 23 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 3] + $8F1BBCDC + ((E and B) or (A and not B))); D := D shl 14 or D shr 18 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 7] + $8F1BBCDC + ((D and A) or (E and not A))); C := C shl 5 or C shr 27 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[15] + $8F1BBCDC + ((C and E) or (D and not E))); B := B shl 6 or B shr 26 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[14] + $8F1BBCDC + ((B and D) or (C and not D))); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 5] + $8F1BBCDC + ((A and C) or (B and not C))); E := E shl 6 or E shr 26 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 6] + $8F1BBCDC + ((E and B) or (A and not B))); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 2] + $8F1BBCDC + ((D and A) or (E and not A))); C := C shl 12 or C shr 20 + B; E := E shl 10 or E shr 22; - - Inc(B, Buffer[ 4] + $A953FD4E + (C xor (D or not E))); B := B shl 9 or B shr 23 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 0] + $A953FD4E + (B xor (C or not D))); A := A shl 15 or A shr 17 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 5] + $A953FD4E + (A xor (B or not C))); E := E shl 5 or E shr 27 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 9] + $A953FD4E + (E xor (A or not B))); D := D shl 11 or D shr 21 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 7] + $A953FD4E + (D xor (E or not A))); C := C shl 6 or C shr 26 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[12] + $A953FD4E + (C xor (D or not E))); B := B shl 8 or B shr 24 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 2] + $A953FD4E + (B xor (C or not D))); A := A shl 13 or A shr 19 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[10] + $A953FD4E + (A xor (B or not C))); E := E shl 12 or E shr 20 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[14] + $A953FD4E + (E xor (A or not B))); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 1] + $A953FD4E + (D xor (E or not A))); C := C shl 12 or C shr 20 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 3] + $A953FD4E + (C xor (D or not E))); B := B shl 13 or B shr 19 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 8] + $A953FD4E + (B xor (C or not D))); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[11] + $A953FD4E + (A xor (B or not C))); E := E shl 11 or E shr 21 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 6] + $A953FD4E + (E xor (A or not B))); D := D shl 8 or D shr 24 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[15] + $A953FD4E + (D xor (E or not A))); C := C shl 5 or C shr 27 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[13] + $A953FD4E + (C xor (D or not E))); B := B shl 6 or B shr 26 + A; D := D shl 10 or D shr 22; - - A1 := A; - B1 := B; - C1 := C; - D1 := D; - E1 := E; - - A := FDigest[0]; - B := FDigest[1]; - C := FDigest[2]; - D := FDigest[3]; - E := FDigest[4]; - - Inc(A, Buffer[ 5] + $50A28BE6 + (B xor (C or not D))); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[14] + $50A28BE6 + (A xor (B or not C))); E := E shl 9 or E shr 23 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 7] + $50A28BE6 + (E xor (A or not B))); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 0] + $50A28BE6 + (D xor (E or not A))); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 9] + $50A28BE6 + (C xor (D or not E))); B := B shl 13 or B shr 19 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 2] + $50A28BE6 + (B xor (C or not D))); A := A shl 15 or A shr 17 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[11] + $50A28BE6 + (A xor (B or not C))); E := E shl 15 or E shr 17 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 4] + $50A28BE6 + (E xor (A or not B))); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[13] + $50A28BE6 + (D xor (E or not A))); C := C shl 7 or C shr 25 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 6] + $50A28BE6 + (C xor (D or not E))); B := B shl 7 or B shr 25 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[15] + $50A28BE6 + (B xor (C or not D))); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 8] + $50A28BE6 + (A xor (B or not C))); E := E shl 11 or E shr 21 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 1] + $50A28BE6 + (E xor (A or not B))); D := D shl 14 or D shr 18 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[10] + $50A28BE6 + (D xor (E or not A))); C := C shl 14 or C shr 18 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 3] + $50A28BE6 + (C xor (D or not E))); B := B shl 12 or B shr 20 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[12] + $50A28BE6 + (B xor (C or not D))); A := A shl 6 or A shr 26 + E; C := C shl 10 or C shr 22; - - Inc(E, Buffer[ 6] + $5C4DD124 + ((A and C) or (B and not C))); E := E shl 9 or E shr 23 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[11] + $5C4DD124 + ((E and B) or (A and not B))); D := D shl 13 or D shr 19 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 3] + $5C4DD124 + ((D and A) or (E and not A))); C := C shl 15 or C shr 17 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 7] + $5C4DD124 + ((C and E) or (D and not E))); B := B shl 7 or B shr 25 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 0] + $5C4DD124 + ((B and D) or (C and not D))); A := A shl 12 or A shr 20 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[13] + $5C4DD124 + ((A and C) or (B and not C))); E := E shl 8 or E shr 24 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 5] + $5C4DD124 + ((E and B) or (A and not B))); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[10] + $5C4DD124 + ((D and A) or (E and not A))); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[14] + $5C4DD124 + ((C and E) or (D and not E))); B := B shl 7 or B shr 25 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[15] + $5C4DD124 + ((B and D) or (C and not D))); A := A shl 7 or A shr 25 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 8] + $5C4DD124 + ((A and C) or (B and not C))); E := E shl 12 or E shr 20 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[12] + $5C4DD124 + ((E and B) or (A and not B))); D := D shl 7 or D shr 25 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 4] + $5C4DD124 + ((D and A) or (E and not A))); C := C shl 6 or C shr 26 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 9] + $5C4DD124 + ((C and E) or (D and not E))); B := B shl 15 or B shr 17 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 1] + $5C4DD124 + ((B and D) or (C and not D))); A := A shl 13 or A shr 19 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 2] + $5C4DD124 + ((A and C) or (B and not C))); E := E shl 11 or E shr 21 + D; B := B shl 10 or B shr 22; - - Inc(D, Buffer[15] + $6D703EF3 + ((E or not A) xor B)); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 5] + $6D703EF3 + ((D or not E) xor A)); C := C shl 7 or C shr 25 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 1] + $6D703EF3 + ((C or not D) xor E)); B := B shl 15 or B shr 17 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 3] + $6D703EF3 + ((B or not C) xor D)); A := A shl 11 or A shr 21 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 7] + $6D703EF3 + ((A or not B) xor C)); E := E shl 8 or E shr 24 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[14] + $6D703EF3 + ((E or not A) xor B)); D := D shl 6 or D shr 26 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 6] + $6D703EF3 + ((D or not E) xor A)); C := C shl 6 or C shr 26 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 9] + $6D703EF3 + ((C or not D) xor E)); B := B shl 14 or B shr 18 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[11] + $6D703EF3 + ((B or not C) xor D)); A := A shl 12 or A shr 20 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 8] + $6D703EF3 + ((A or not B) xor C)); E := E shl 13 or E shr 19 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[12] + $6D703EF3 + ((E or not A) xor B)); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 2] + $6D703EF3 + ((D or not E) xor A)); C := C shl 14 or C shr 18 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[10] + $6D703EF3 + ((C or not D) xor E)); B := B shl 13 or B shr 19 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 0] + $6D703EF3 + ((B or not C) xor D)); A := A shl 13 or A shr 19 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 4] + $6D703EF3 + ((A or not B) xor C)); E := E shl 7 or E shr 25 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[13] + $6D703EF3 + ((E or not A) xor B)); D := D shl 5 or D shr 27 + C; A := A shl 10 or A shr 22; - - Inc(C, Buffer[ 8] + $7A6D76E9 + ((D and E) or (not D and A))); C := C shl 15 or C shr 17 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 6] + $7A6D76E9 + ((C and D) or (not C and E))); B := B shl 5 or B shr 27 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 4] + $7A6D76E9 + ((B and C) or (not B and D))); A := A shl 8 or A shr 24 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 1] + $7A6D76E9 + ((A and B) or (not A and C))); E := E shl 11 or E shr 21 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 3] + $7A6D76E9 + ((E and A) or (not E and B))); D := D shl 14 or D shr 18 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[11] + $7A6D76E9 + ((D and E) or (not D and A))); C := C shl 14 or C shr 18 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[15] + $7A6D76E9 + ((C and D) or (not C and E))); B := B shl 6 or B shr 26 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 0] + $7A6D76E9 + ((B and C) or (not B and D))); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 5] + $7A6D76E9 + ((A and B) or (not A and C))); E := E shl 6 or E shr 26 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[12] + $7A6D76E9 + ((E and A) or (not E and B))); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 2] + $7A6D76E9 + ((D and E) or (not D and A))); C := C shl 12 or C shr 20 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[13] + $7A6D76E9 + ((C and D) or (not C and E))); B := B shl 9 or B shr 23 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 9] + $7A6D76E9 + ((B and C) or (not B and D))); A := A shl 12 or A shr 20 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 7] + $7A6D76E9 + ((A and B) or (not A and C))); E := E shl 5 or E shr 27 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[10] + $7A6D76E9 + ((E and A) or (not E and B))); D := D shl 15 or D shr 17 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[14] + $7A6D76E9 + ((D and E) or (not D and A))); C := C shl 8 or C shr 24 + B; E := E shl 10 or E shr 22; - - Inc(B, Buffer[12] + (C xor D xor E)); B := B shl 8 or B shr 24 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[15] + (B xor C xor D)); A := A shl 5 or A shr 27 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[10] + (A xor B xor C)); E := E shl 12 or E shr 20 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 4] + (E xor A xor B)); D := D shl 9 or D shr 23 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 1] + (D xor E xor A)); C := C shl 12 or C shr 20 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[ 5] + (C xor D xor E)); B := B shl 5 or B shr 27 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[ 8] + (B xor C xor D)); A := A shl 14 or A shr 18 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 7] + (A xor B xor C)); E := E shl 6 or E shr 26 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 6] + (E xor A xor B)); D := D shl 8 or D shr 24 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 2] + (D xor E xor A)); C := C shl 13 or C shr 19 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[13] + (C xor D xor E)); B := B shl 6 or B shr 26 + A; D := D shl 10 or D shr 22; - Inc(A, Buffer[14] + (B xor C xor D)); A := A shl 5 or A shr 27 + E; C := C shl 10 or C shr 22; - Inc(E, Buffer[ 0] + (A xor B xor C)); E := E shl 15 or E shr 17 + D; B := B shl 10 or B shr 22; - Inc(D, Buffer[ 3] + (E xor A xor B)); D := D shl 13 or D shr 19 + C; A := A shl 10 or A shr 22; - Inc(C, Buffer[ 9] + (D xor E xor A)); C := C shl 11 or C shr 21 + B; E := E shl 10 or E shr 22; - Inc(B, Buffer[11] + (C xor D xor E)); B := B shl 11 or B shr 21 + A; D := D shl 10 or D shr 22; - - Inc(D, C1 + FDigest[1]); - FDigest[1] := FDigest[2] + D1 + E; - FDigest[2] := FDigest[3] + E1 + A; - FDigest[3] := FDigest[4] + A1 + B; - FDigest[4] := FDigest[0] + B1 + C; - FDigest[0] := D; -end; - -class function TROHash_RipeMD160.DigestKeySize: Integer; -begin - Result := 20; -end; - -class function TROHash_RipeMD256.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0C3h,0B1h,0D7h,0ACh,0A8h,09Ah,047h,07Ah - DB 038h,0D3h,06Dh,039h,0EFh,000h,0FBh,045h - DB 0FCh,04Eh,0C3h,01Ah,071h,021h,0DBh,09Eh - DB 01Ch,076h,0C5h,0DEh,099h,088h,018h,0C2h -end; - -procedure TROHash_RipeMD256.Transform(Buffer: PIntArray); -var - A1, B1, C1, D1: LongWord; - A2, B2, C2, D2: LongWord; - T: LongWord; -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; - - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 5] + $50A28BE6); A2 := A2 shl 8 or A2 shr 24; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[14] + $50A28BE6); D2 := D2 shl 9 or D2 shr 23; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[ 7] + $50A28BE6); C2 := C2 shl 9 or C2 shr 23; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 0] + $50A28BE6); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 9] + $50A28BE6); A2 := A2 shl 13 or A2 shr 19; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[ 2] + $50A28BE6); D2 := D2 shl 15 or D2 shr 17; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[11] + $50A28BE6); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 4] + $50A28BE6); B2 := B2 shl 5 or B2 shr 27; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[13] + $50A28BE6); A2 := A2 shl 7 or A2 shr 25; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[ 6] + $50A28BE6); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[15] + $50A28BE6); C2 := C2 shl 8 or C2 shr 24; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[ 8] + $50A28BE6); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and D2 or C2 and not D2 + Buffer[ 1] + $50A28BE6); A2 := A2 shl 14 or A2 shr 18; - Inc(D2, A2 and C2 or B2 and not C2 + Buffer[10] + $50A28BE6); D2 := D2 shl 14 or D2 shr 18; - Inc(C2, D2 and B2 or A2 and not B2 + Buffer[ 3] + $50A28BE6); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, C2 and A2 or D2 and not A2 + Buffer[12] + $50A28BE6); B2 := B2 shl 6 or B2 shr 26; - - T := A1; A1 := A2; A2 := T; - - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 7] + $5A827999); A1 := A1 shl 7 or A1 shr 25; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 4] + $5A827999); D1 := D1 shl 6 or D1 shr 26; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[13] + $5A827999); C1 := C1 shl 8 or C1 shr 24; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 1] + $5A827999); B1 := B1 shl 13 or B1 shr 19; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + $5A827999); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 6] + $5A827999); D1 := D1 shl 9 or D1 shr 23; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[15] + $5A827999); C1 := C1 shl 7 or C1 shr 25; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + $5A827999); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[12] + $5A827999); A1 := A1 shl 7 or A1 shr 25; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + $5A827999); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 9] + $5A827999); C1 := C1 shl 15 or C1 shr 17; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 5] + $5A827999); B1 := B1 shl 9 or B1 shr 23; - Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 2] + $5A827999); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + $5A827999); D1 := D1 shl 7 or D1 shr 25; - Inc(C1, D1 and A1 or not D1 and B1 + Buffer[11] + $5A827999); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 8] + $5A827999); B1 := B1 shl 12 or B1 shr 20; - - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 6] + $5C4DD124); A2 := A2 shl 9 or A2 shr 23; - Inc(D2, (A2 or not B2) xor C2 + Buffer[11] + $5C4DD124); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 3] + $5C4DD124); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, (C2 or not D2) xor A2 + Buffer[ 7] + $5C4DD124); B2 := B2 shl 7 or B2 shr 25; - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 0] + $5C4DD124); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, (A2 or not B2) xor C2 + Buffer[13] + $5C4DD124); D2 := D2 shl 8 or D2 shr 24; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 5] + $5C4DD124); C2 := C2 shl 9 or C2 shr 23; - Inc(B2, (C2 or not D2) xor A2 + Buffer[10] + $5C4DD124); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, (B2 or not C2) xor D2 + Buffer[14] + $5C4DD124); A2 := A2 shl 7 or A2 shr 25; - Inc(D2, (A2 or not B2) xor C2 + Buffer[15] + $5C4DD124); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 8] + $5C4DD124); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, (C2 or not D2) xor A2 + Buffer[12] + $5C4DD124); B2 := B2 shl 7 or B2 shr 25; - Inc(A2, (B2 or not C2) xor D2 + Buffer[ 4] + $5C4DD124); A2 := A2 shl 6 or A2 shr 26; - Inc(D2, (A2 or not B2) xor C2 + Buffer[ 9] + $5C4DD124); D2 := D2 shl 15 or D2 shr 17; - Inc(C2, (D2 or not A2) xor B2 + Buffer[ 1] + $5C4DD124); C2 := C2 shl 13 or C2 shr 19; - Inc(B2, (C2 or not D2) xor A2 + Buffer[ 2] + $5C4DD124); B2 := B2 shl 11 or B2 shr 21; - - T := B1; B1 := B2; B2 := T; - - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 3] + $6ED9EBA1); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, (A1 or not B1) xor C1 + Buffer[10] + $6ED9EBA1); D1 := D1 shl 13 or D1 shr 19; - Inc(C1, (D1 or not A1) xor B1 + Buffer[14] + $6ED9EBA1); C1 := C1 shl 6 or C1 shr 26; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 4] + $6ED9EBA1); B1 := B1 shl 7 or B1 shr 25; - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 9] + $6ED9EBA1); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, (A1 or not B1) xor C1 + Buffer[15] + $6ED9EBA1); D1 := D1 shl 9 or D1 shr 23; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 8] + $6ED9EBA1); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 1] + $6ED9EBA1); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, (B1 or not C1) xor D1 + Buffer[ 2] + $6ED9EBA1); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, (A1 or not B1) xor C1 + Buffer[ 7] + $6ED9EBA1); D1 := D1 shl 8 or D1 shr 24; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 0] + $6ED9EBA1); C1 := C1 shl 13 or C1 shr 19; - Inc(B1, (C1 or not D1) xor A1 + Buffer[ 6] + $6ED9EBA1); B1 := B1 shl 6 or B1 shr 26; - Inc(A1, (B1 or not C1) xor D1 + Buffer[13] + $6ED9EBA1); A1 := A1 shl 5 or A1 shr 27; - Inc(D1, (A1 or not B1) xor C1 + Buffer[11] + $6ED9EBA1); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, (D1 or not A1) xor B1 + Buffer[ 5] + $6ED9EBA1); C1 := C1 shl 7 or C1 shr 25; - Inc(B1, (C1 or not D1) xor A1 + Buffer[12] + $6ED9EBA1); B1 := B1 shl 5 or B1 shr 27; - - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[15] + $6D703EF3); A2 := A2 shl 9 or A2 shr 23; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 5] + $6D703EF3); D2 := D2 shl 7 or D2 shr 25; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 1] + $6D703EF3); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 3] + $6D703EF3); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[ 7] + $6D703EF3); A2 := A2 shl 8 or A2 shr 24; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[14] + $6D703EF3); D2 := D2 shl 6 or D2 shr 26; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 6] + $6D703EF3); C2 := C2 shl 6 or C2 shr 26; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 9] + $6D703EF3); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[11] + $6D703EF3); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 8] + $6D703EF3); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[12] + $6D703EF3); C2 := C2 shl 5 or C2 shr 27; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[ 2] + $6D703EF3); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 and C2 or not B2 and D2 + Buffer[10] + $6D703EF3); A2 := A2 shl 13 or A2 shr 19; - Inc(D2, A2 and B2 or not A2 and C2 + Buffer[ 0] + $6D703EF3); D2 := D2 shl 13 or D2 shr 19; - Inc(C2, D2 and A2 or not D2 and B2 + Buffer[ 4] + $6D703EF3); C2 := C2 shl 7 or C2 shr 25; - Inc(B2, C2 and D2 or not C2 and A2 + Buffer[13] + $6D703EF3); B2 := B2 shl 5 or B2 shr 27; - - T := C1; C1 := C2; C2 := T; - - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + $8F1BBCDC); A1 := A1 shl 11 or A1 shr 21; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 9] + $8F1BBCDC); D1 := D1 shl 12 or D1 shr 20; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + $8F1BBCDC); C1 := C1 shl 14 or C1 shr 18; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[10] + $8F1BBCDC); B1 := B1 shl 15 or B1 shr 17; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + $8F1BBCDC); A1 := A1 shl 14 or A1 shr 18; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 8] + $8F1BBCDC); D1 := D1 shl 15 or D1 shr 17; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[12] + $8F1BBCDC); C1 := C1 shl 9 or C1 shr 23; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + $8F1BBCDC); B1 := B1 shl 8 or B1 shr 24; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + $8F1BBCDC); A1 := A1 shl 9 or A1 shr 23; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 3] + $8F1BBCDC); D1 := D1 shl 14 or D1 shr 18; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + $8F1BBCDC); C1 := C1 shl 5 or C1 shr 27; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[15] + $8F1BBCDC); B1 := B1 shl 6 or B1 shr 26; - Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + $8F1BBCDC); A1 := A1 shl 8 or A1 shr 24; - Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 5] + $8F1BBCDC); D1 := D1 shl 6 or D1 shr 26; - Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 6] + $8F1BBCDC); C1 := C1 shl 5 or C1 shr 27; - Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 2] + $8F1BBCDC); B1 := B1 shl 12 or B1 shr 20; - - Inc(A2, B2 xor C2 xor D2 + Buffer[ 8]); A2 := A2 shl 15 or A2 shr 17; - Inc(D2, A2 xor B2 xor C2 + Buffer[ 6]); D2 := D2 shl 5 or D2 shr 27; - Inc(C2, D2 xor A2 xor B2 + Buffer[ 4]); C2 := C2 shl 8 or C2 shr 24; - Inc(B2, C2 xor D2 xor A2 + Buffer[ 1]); B2 := B2 shl 11 or B2 shr 21; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 3]); A2 := A2 shl 14 or A2 shr 18; - Inc(D2, A2 xor B2 xor C2 + Buffer[11]); D2 := D2 shl 14 or D2 shr 18; - Inc(C2, D2 xor A2 xor B2 + Buffer[15]); C2 := C2 shl 6 or C2 shr 26; - Inc(B2, C2 xor D2 xor A2 + Buffer[ 0]); B2 := B2 shl 14 or B2 shr 18; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 5]); A2 := A2 shl 6 or A2 shr 26; - Inc(D2, A2 xor B2 xor C2 + Buffer[12]); D2 := D2 shl 9 or D2 shr 23; - Inc(C2, D2 xor A2 xor B2 + Buffer[ 2]); C2 := C2 shl 12 or C2 shr 20; - Inc(B2, C2 xor D2 xor A2 + Buffer[13]); B2 := B2 shl 9 or B2 shr 23; - Inc(A2, B2 xor C2 xor D2 + Buffer[ 9]); A2 := A2 shl 12 or A2 shr 20; - Inc(D2, A2 xor B2 xor C2 + Buffer[ 7]); D2 := D2 shl 5 or D2 shr 27; - Inc(C2, D2 xor A2 xor B2 + Buffer[10]); C2 := C2 shl 15 or C2 shr 17; - Inc(B2, C2 xor D2 xor A2 + Buffer[14]); B2 := B2 shl 8 or B2 shr 24; - - T := D1; D1 := D2; D2 := T; - - Inc(FDigest[0], A1); - Inc(FDigest[1], B1); - Inc(FDigest[2], C1); - Inc(FDigest[3], D1); - Inc(FDigest[4], A2); - Inc(FDigest[5], B2); - Inc(FDigest[6], C2); - Inc(FDigest[7], D2); -end; - -class function TROHash_RipeMD256.DigestKeySize: Integer; -begin - Result := 32; -end; - -procedure TROHash_RipeMD256.Init; -begin - FillChar(FBuffer, SizeOf(FBuffer), 0); - 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; - FCount := 0; - Protect(True); -end; - -class function TROHash_RipeMD320.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0B7h,0BDh,02Ch,075h,0B7h,013h,050h,091h - DB 0E4h,067h,009h,046h,0F1h,041h,05Ah,048h - DB 045h,0DFh,08Eh,007h,0BAh,067h,04Eh,0A9h - DB 0FDh,066h,0EDh,001h,0D9h,06Fh,023h,020h - DB 0B5h,011h,012h,0C5h,0A7h,041h,0A6h,05Ch -end; - -procedure TROHash_RipeMD320.Transform(Buffer: PIntArray); -var - A1, B1, C1, D1, E1: LongWord; - A2, B2, C2, D2, E2: LongWord; - T: LongWord; -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, Buffer[ 0] + (B1 xor C1 xor D1)); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 1] + (A1 xor B1 xor C1)); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 2] + (E1 xor A1 xor B1)); D1 := D1 shl 15 or D1 shr 17 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 3] + (D1 xor E1 xor A1)); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 4] + (C1 xor D1 xor E1)); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 5] + (B1 xor C1 xor D1)); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 6] + (A1 xor B1 xor C1)); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 7] + (E1 xor A1 xor B1)); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 8] + (D1 xor E1 xor A1)); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 9] + (C1 xor D1 xor E1)); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[10] + (B1 xor C1 xor D1)); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[11] + (A1 xor B1 xor C1)); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[12] + (E1 xor A1 xor B1)); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[13] + (D1 xor E1 xor A1)); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[14] + (C1 xor D1 xor E1)); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[15] + (B1 xor C1 xor D1)); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; - - Inc(A2, Buffer[ 5] + $50A28BE6 + (B2 xor (C2 or not D2))); A2 := A2 shl 8 or A2 shr 24 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[14] + $50A28BE6 + (A2 xor (B2 or not C2))); E2 := E2 shl 9 or E2 shr 23 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 7] + $50A28BE6 + (E2 xor (A2 or not B2))); D2 := D2 shl 9 or D2 shr 23 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 0] + $50A28BE6 + (D2 xor (E2 or not A2))); C2 := C2 shl 11 or C2 shr 21 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 9] + $50A28BE6 + (C2 xor (D2 or not E2))); B2 := B2 shl 13 or B2 shr 19 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 2] + $50A28BE6 + (B2 xor (C2 or not D2))); A2 := A2 shl 15 or A2 shr 17 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[11] + $50A28BE6 + (A2 xor (B2 or not C2))); E2 := E2 shl 15 or E2 shr 17 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 4] + $50A28BE6 + (E2 xor (A2 or not B2))); D2 := D2 shl 5 or D2 shr 27 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[13] + $50A28BE6 + (D2 xor (E2 or not A2))); C2 := C2 shl 7 or C2 shr 25 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 6] + $50A28BE6 + (C2 xor (D2 or not E2))); B2 := B2 shl 7 or B2 shr 25 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[15] + $50A28BE6 + (B2 xor (C2 or not D2))); A2 := A2 shl 8 or A2 shr 24 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 8] + $50A28BE6 + (A2 xor (B2 or not C2))); E2 := E2 shl 11 or E2 shr 21 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 1] + $50A28BE6 + (E2 xor (A2 or not B2))); D2 := D2 shl 14 or D2 shr 18 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[10] + $50A28BE6 + (D2 xor (E2 or not A2))); C2 := C2 shl 14 or C2 shr 18 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 3] + $50A28BE6 + (C2 xor (D2 or not E2))); B2 := B2 shl 12 or B2 shr 20 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[12] + $50A28BE6 + (B2 xor (C2 or not D2))); A2 := A2 shl 6 or A2 shr 26 + E2; C2 := C2 shl 10 or C2 shr 22; - - T := A1; A1 := A2; A2 := T; - - Inc(E1, Buffer[ 7] + $5A827999 + ((A1 and B1) or (not A1 and C1))); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 4] + $5A827999 + ((E1 and A1) or (not E1 and B1))); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[13] + $5A827999 + ((D1 and E1) or (not D1 and A1))); C1 := C1 shl 8 or C1 shr 24 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 1] + $5A827999 + ((C1 and D1) or (not C1 and E1))); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[10] + $5A827999 + ((B1 and C1) or (not B1 and D1))); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 6] + $5A827999 + ((A1 and B1) or (not A1 and C1))); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[15] + $5A827999 + ((E1 and A1) or (not E1 and B1))); D1 := D1 shl 7 or D1 shr 25 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 3] + $5A827999 + ((D1 and E1) or (not D1 and A1))); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[12] + $5A827999 + ((C1 and D1) or (not C1 and E1))); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 0] + $5A827999 + ((B1 and C1) or (not B1 and D1))); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 9] + $5A827999 + ((A1 and B1) or (not A1 and C1))); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 5] + $5A827999 + ((E1 and A1) or (not E1 and B1))); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 2] + $5A827999 + ((D1 and E1) or (not D1 and A1))); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[14] + $5A827999 + ((C1 and D1) or (not C1 and E1))); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[11] + $5A827999 + ((B1 and C1) or (not B1 and D1))); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 8] + $5A827999 + ((A1 and B1) or (not A1 and C1))); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; - - Inc(E2, Buffer[ 6] + $5C4DD124 + ((A2 and C2) or (B2 and not C2))); E2 := E2 shl 9 or E2 shr 23 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[11] + $5C4DD124 + ((E2 and B2) or (A2 and not B2))); D2 := D2 shl 13 or D2 shr 19 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 3] + $5C4DD124 + ((D2 and A2) or (E2 and not A2))); C2 := C2 shl 15 or C2 shr 17 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 7] + $5C4DD124 + ((C2 and E2) or (D2 and not E2))); B2 := B2 shl 7 or B2 shr 25 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 0] + $5C4DD124 + ((B2 and D2) or (C2 and not D2))); A2 := A2 shl 12 or A2 shr 20 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[13] + $5C4DD124 + ((A2 and C2) or (B2 and not C2))); E2 := E2 shl 8 or E2 shr 24 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 5] + $5C4DD124 + ((E2 and B2) or (A2 and not B2))); D2 := D2 shl 9 or D2 shr 23 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[10] + $5C4DD124 + ((D2 and A2) or (E2 and not A2))); C2 := C2 shl 11 or C2 shr 21 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[14] + $5C4DD124 + ((C2 and E2) or (D2 and not E2))); B2 := B2 shl 7 or B2 shr 25 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[15] + $5C4DD124 + ((B2 and D2) or (C2 and not D2))); A2 := A2 shl 7 or A2 shr 25 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 8] + $5C4DD124 + ((A2 and C2) or (B2 and not C2))); E2 := E2 shl 12 or E2 shr 20 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[12] + $5C4DD124 + ((E2 and B2) or (A2 and not B2))); D2 := D2 shl 7 or D2 shr 25 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 4] + $5C4DD124 + ((D2 and A2) or (E2 and not A2))); C2 := C2 shl 6 or C2 shr 26 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 9] + $5C4DD124 + ((C2 and E2) or (D2 and not E2))); B2 := B2 shl 15 or B2 shr 17 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 1] + $5C4DD124 + ((B2 and D2) or (C2 and not D2))); A2 := A2 shl 13 or A2 shr 19 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 2] + $5C4DD124 + ((A2 and C2) or (B2 and not C2))); E2 := E2 shl 11 or E2 shr 21 + D2; B2 := B2 shl 10 or B2 shr 22; - - T := B1; B1 := B2; B2 := T; - - Inc(D1, Buffer[ 3] + $6ED9EBA1 + ((E1 or not A1) xor B1)); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[10] + $6ED9EBA1 + ((D1 or not E1) xor A1)); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[14] + $6ED9EBA1 + ((C1 or not D1) xor E1)); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 4] + $6ED9EBA1 + ((B1 or not C1) xor D1)); A1 := A1 shl 7 or A1 shr 25 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 9] + $6ED9EBA1 + ((A1 or not B1) xor C1)); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[15] + $6ED9EBA1 + ((E1 or not A1) xor B1)); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 8] + $6ED9EBA1 + ((D1 or not E1) xor A1)); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 1] + $6ED9EBA1 + ((C1 or not D1) xor E1)); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 2] + $6ED9EBA1 + ((B1 or not C1) xor D1)); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 7] + $6ED9EBA1 + ((A1 or not B1) xor C1)); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 0] + $6ED9EBA1 + ((E1 or not A1) xor B1)); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 6] + $6ED9EBA1 + ((D1 or not E1) xor A1)); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[13] + $6ED9EBA1 + ((C1 or not D1) xor E1)); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[11] + $6ED9EBA1 + ((B1 or not C1) xor D1)); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 5] + $6ED9EBA1 + ((A1 or not B1) xor C1)); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[12] + $6ED9EBA1 + ((E1 or not A1) xor B1)); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; - - Inc(D2, Buffer[15] + $6D703EF3 + ((E2 or not A2) xor B2)); D2 := D2 shl 9 or D2 shr 23 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 5] + $6D703EF3 + ((D2 or not E2) xor A2)); C2 := C2 shl 7 or C2 shr 25 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 1] + $6D703EF3 + ((C2 or not D2) xor E2)); B2 := B2 shl 15 or B2 shr 17 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 3] + $6D703EF3 + ((B2 or not C2) xor D2)); A2 := A2 shl 11 or A2 shr 21 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 7] + $6D703EF3 + ((A2 or not B2) xor C2)); E2 := E2 shl 8 or E2 shr 24 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[14] + $6D703EF3 + ((E2 or not A2) xor B2)); D2 := D2 shl 6 or D2 shr 26 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 6] + $6D703EF3 + ((D2 or not E2) xor A2)); C2 := C2 shl 6 or C2 shr 26 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 9] + $6D703EF3 + ((C2 or not D2) xor E2)); B2 := B2 shl 14 or B2 shr 18 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[11] + $6D703EF3 + ((B2 or not C2) xor D2)); A2 := A2 shl 12 or A2 shr 20 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 8] + $6D703EF3 + ((A2 or not B2) xor C2)); E2 := E2 shl 13 or E2 shr 19 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[12] + $6D703EF3 + ((E2 or not A2) xor B2)); D2 := D2 shl 5 or D2 shr 27 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 2] + $6D703EF3 + ((D2 or not E2) xor A2)); C2 := C2 shl 14 or C2 shr 18 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[10] + $6D703EF3 + ((C2 or not D2) xor E2)); B2 := B2 shl 13 or B2 shr 19 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 0] + $6D703EF3 + ((B2 or not C2) xor D2)); A2 := A2 shl 13 or A2 shr 19 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 4] + $6D703EF3 + ((A2 or not B2) xor C2)); E2 := E2 shl 7 or E2 shr 25 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[13] + $6D703EF3 + ((E2 or not A2) xor B2)); D2 := D2 shl 5 or D2 shr 27 + C2; A2 := A2 shl 10 or A2 shr 22; - - T := C1; C1 := C2; C2 := T; - - Inc(C1, Buffer[ 1] + $8F1BBCDC + ((D1 and A1) or (E1 and not A1))); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 9] + $8F1BBCDC + ((C1 and E1) or (D1 and not E1))); B1 := B1 shl 12 or B1 shr 20 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[11] + $8F1BBCDC + ((B1 and D1) or (C1 and not D1))); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[10] + $8F1BBCDC + ((A1 and C1) or (B1 and not C1))); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 0] + $8F1BBCDC + ((E1 and B1) or (A1 and not B1))); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 8] + $8F1BBCDC + ((D1 and A1) or (E1 and not A1))); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[12] + $8F1BBCDC + ((C1 and E1) or (D1 and not E1))); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 4] + $8F1BBCDC + ((B1 and D1) or (C1 and not D1))); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[13] + $8F1BBCDC + ((A1 and C1) or (B1 and not C1))); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 3] + $8F1BBCDC + ((E1 and B1) or (A1 and not B1))); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 7] + $8F1BBCDC + ((D1 and A1) or (E1 and not A1))); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[15] + $8F1BBCDC + ((C1 and E1) or (D1 and not E1))); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[14] + $8F1BBCDC + ((B1 and D1) or (C1 and not D1))); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 5] + $8F1BBCDC + ((A1 and C1) or (B1 and not C1))); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 6] + $8F1BBCDC + ((E1 and B1) or (A1 and not B1))); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 2] + $8F1BBCDC + ((D1 and A1) or (E1 and not A1))); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; - - Inc(C2, Buffer[ 8] + $7A6D76E9 + ((D2 and E2) or (not D2 and A2))); C2 := C2 shl 15 or C2 shr 17 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 6] + $7A6D76E9 + ((C2 and D2) or (not C2 and E2))); B2 := B2 shl 5 or B2 shr 27 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 4] + $7A6D76E9 + ((B2 and C2) or (not B2 and D2))); A2 := A2 shl 8 or A2 shr 24 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 1] + $7A6D76E9 + ((A2 and B2) or (not A2 and C2))); E2 := E2 shl 11 or E2 shr 21 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 3] + $7A6D76E9 + ((E2 and A2) or (not E2 and B2))); D2 := D2 shl 14 or D2 shr 18 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[11] + $7A6D76E9 + ((D2 and E2) or (not D2 and A2))); C2 := C2 shl 14 or C2 shr 18 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[15] + $7A6D76E9 + ((C2 and D2) or (not C2 and E2))); B2 := B2 shl 6 or B2 shr 26 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 0] + $7A6D76E9 + ((B2 and C2) or (not B2 and D2))); A2 := A2 shl 14 or A2 shr 18 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 5] + $7A6D76E9 + ((A2 and B2) or (not A2 and C2))); E2 := E2 shl 6 or E2 shr 26 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[12] + $7A6D76E9 + ((E2 and A2) or (not E2 and B2))); D2 := D2 shl 9 or D2 shr 23 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 2] + $7A6D76E9 + ((D2 and E2) or (not D2 and A2))); C2 := C2 shl 12 or C2 shr 20 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[13] + $7A6D76E9 + ((C2 and D2) or (not C2 and E2))); B2 := B2 shl 9 or B2 shr 23 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 9] + $7A6D76E9 + ((B2 and C2) or (not B2 and D2))); A2 := A2 shl 12 or A2 shr 20 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 7] + $7A6D76E9 + ((A2 and B2) or (not A2 and C2))); E2 := E2 shl 5 or E2 shr 27 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[10] + $7A6D76E9 + ((E2 and A2) or (not E2 and B2))); D2 := D2 shl 15 or D2 shr 17 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[14] + $7A6D76E9 + ((D2 and E2) or (not D2 and A2))); C2 := C2 shl 8 or C2 shr 24 + B2; E2 := E2 shl 10 or E2 shr 22; - - T := D1; D1 := D2; D2 := T; - - Inc(B1, Buffer[ 4] + $A953FD4E + (C1 xor (D1 or not E1))); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 0] + $A953FD4E + (B1 xor (C1 or not D1))); A1 := A1 shl 15 or A1 shr 17 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[ 5] + $A953FD4E + (A1 xor (B1 or not C1))); E1 := E1 shl 5 or E1 shr 27 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 9] + $A953FD4E + (E1 xor (A1 or not B1))); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 7] + $A953FD4E + (D1 xor (E1 or not A1))); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[12] + $A953FD4E + (C1 xor (D1 or not E1))); B1 := B1 shl 8 or B1 shr 24 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 2] + $A953FD4E + (B1 xor (C1 or not D1))); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[10] + $A953FD4E + (A1 xor (B1 or not C1))); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[14] + $A953FD4E + (E1 xor (A1 or not B1))); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[ 1] + $A953FD4E + (D1 xor (E1 or not A1))); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[ 3] + $A953FD4E + (C1 xor (D1 or not E1))); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; - Inc(A1, Buffer[ 8] + $A953FD4E + (B1 xor (C1 or not D1))); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; - Inc(E1, Buffer[11] + $A953FD4E + (A1 xor (B1 or not C1))); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; - Inc(D1, Buffer[ 6] + $A953FD4E + (E1 xor (A1 or not B1))); D1 := D1 shl 8 or D1 shr 24 + C1; A1 := A1 shl 10 or A1 shr 22; - Inc(C1, Buffer[15] + $A953FD4E + (D1 xor (E1 or not A1))); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; - Inc(B1, Buffer[13] + $A953FD4E + (C1 xor (D1 or not E1))); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; - - Inc(B2, Buffer[12] + (C2 xor D2 xor E2)); B2 := B2 shl 8 or B2 shr 24 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[15] + (B2 xor C2 xor D2)); A2 := A2 shl 5 or A2 shr 27 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[10] + (A2 xor B2 xor C2)); E2 := E2 shl 12 or E2 shr 20 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 4] + (E2 xor A2 xor B2)); D2 := D2 shl 9 or D2 shr 23 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 1] + (D2 xor E2 xor A2)); C2 := C2 shl 12 or C2 shr 20 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[ 5] + (C2 xor D2 xor E2)); B2 := B2 shl 5 or B2 shr 27 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[ 8] + (B2 xor C2 xor D2)); A2 := A2 shl 14 or A2 shr 18 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 7] + (A2 xor B2 xor C2)); E2 := E2 shl 6 or E2 shr 26 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 6] + (E2 xor A2 xor B2)); D2 := D2 shl 8 or D2 shr 24 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 2] + (D2 xor E2 xor A2)); C2 := C2 shl 13 or C2 shr 19 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[13] + (C2 xor D2 xor E2)); B2 := B2 shl 6 or B2 shr 26 + A2; D2 := D2 shl 10 or D2 shr 22; - Inc(A2, Buffer[14] + (B2 xor C2 xor D2)); A2 := A2 shl 5 or A2 shr 27 + E2; C2 := C2 shl 10 or C2 shr 22; - Inc(E2, Buffer[ 0] + (A2 xor B2 xor C2)); E2 := E2 shl 15 or E2 shr 17 + D2; B2 := B2 shl 10 or B2 shr 22; - Inc(D2, Buffer[ 3] + (E2 xor A2 xor B2)); D2 := D2 shl 13 or D2 shr 19 + C2; A2 := A2 shl 10 or A2 shr 22; - Inc(C2, Buffer[ 9] + (D2 xor E2 xor A2)); C2 := C2 shl 11 or C2 shr 21 + B2; E2 := E2 shl 10 or E2 shr 22; - Inc(B2, Buffer[11] + (C2 xor D2 xor E2)); B2 := B2 shl 11 or B2 shr 21 + A2; D2 := D2 shl 10 or D2 shr 22; - - T := E1; E1 := E2; E2 := T; - - Inc(FDigest[0], A1); - Inc(FDigest[1], B1); - Inc(FDigest[2], C1); - Inc(FDigest[3], D1); - Inc(FDigest[4], E1); - Inc(FDigest[5], A2); - Inc(FDigest[6], B2); - Inc(FDigest[7], C2); - Inc(FDigest[8], D2); - Inc(FDigest[9], E2); -end; - -class function TROHash_RipeMD320.DigestKeySize: Integer; -begin - Result := 40; -end; - -class function TROHash_SHA.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0DCh,01Fh,07Dh,07Ch,096h,0DDh,0C7h,0FCh - DB 04Dh,00Ah,0F2h,0CCh,012h,0E7h,0F7h,066h - DB 05Bh,0B1h,085h,0ACh -end; - -procedure SHABuffer386(S, D: Pointer; Rotate: Boolean); assembler; -asm - PUSH EBX - PUSH ECX - MOV EBX,EAX - XOR ECX,ECX -@@1: MOV EAX,[EDX + ECX * 4] - XCHG AL,AH - ROL EAX,16 - XCHG AL,AH - MOV [EBX],EAX - ADD EBX,4 - INC ECX - CMP ECX,16 - JNZ @@1 - MOV ECX,64 - POP EDX - CMP DL,0 - JZ @@3 -@@2: MOV EAX,[EBX - 3 * 4] - XOR EAX,[EBX - 8 * 4] - XOR EAX,[EBX - 14 * 4] - XOR EAX,[EBX - 16 * 4] - ROL EAX,1 - MOV [EBX],EAX - ADD EBX,4 - DEC ECX - JNZ @@2 - JMP @@4 - -@@3: MOV EAX,[EBX - 3 * 4] - XOR EAX,[EBX - 8 * 4] - XOR EAX,[EBX - 14 * 4] - XOR EAX,[EBX - 16 * 4] - MOV [EBX],EAX - ADD EBX,4 - DEC ECX - JNZ @@3 - -@@4: POP EBX -end; - -procedure SHABuffer486(S, D: Pointer; Rotate: Boolean); assembler; -asm - PUSH EBX - PUSH ECX - MOV EBX,EAX - XOR ECX,ECX -@@1: MOV EAX,[EDX + ECX * 4] - BSWAP EAX - MOV [EBX],EAX - ADD EBX,4 - INC ECX - CMP ECX,16 - JNZ @@1 - MOV ECX,64 - POP EDX - CMP DL,0 - JZ @@3 -@@2: MOV EAX,[EBX - 3 * 4] - XOR EAX,[EBX - 8 * 4] - XOR EAX,[EBX - 14 * 4] - XOR EAX,[EBX - 16 * 4] - ROL EAX,1 - MOV [EBX],EAX - ADD EBX,4 - DEC ECX - JNZ @@2 - JMP @@4 - -@@3: MOV EAX,[EBX - 3 * 4] - XOR EAX,[EBX - 8 * 4] - XOR EAX,[EBX - 14 * 4] - XOR EAX,[EBX - 16 * 4] - MOV [EBX],EAX - ADD EBX,4 - DEC ECX - JNZ @@3 - -@@4: POP EBX -end; - -const - SHABuffer: procedure(S, D: Pointer; Rotate: Boolean) = SHABuffer486; - -procedure TROHash_SHA.Transform(Buffer: PIntArray); -var - A, B, C, D, E: LongWord; - W: array[0..79] of LongWord; -begin - SHABuffer(@W, Buffer, FRotate); - - 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; - -procedure TROHash_SHA.Done; -var - I: Integer; - S: Comp; -begin - I := FCount mod 64; - FBuffer[I] := $80; - Inc(I); - if I > 64 - 8 then - begin - FillChar(FBuffer[I], 64 - I, 0); - Transform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 64 - I, 0); - S := FCount * 8; - for I := 0 to 7 do FBuffer[63 - I] := PByteArray(@S)^[I]; - Transform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); -{and here the Endian conversion} - SwapIntegerBuffer(@FDigest, @FDigest, 5); - Protect(False); -end; - -class function TROHash_SHA1.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 09Ah,001h,02Eh,063h,096h,02Ah,092h,0EBh - DB 0D8h,02Eh,0F0h,0BCh,01Ch,0A4h,051h,06Ah - DB 008h,069h,02Eh,068h -end; - -procedure TROHash_SHA1.Init; -begin - FRotate := True; - inherited Init; -end; - -class function TROHash_Haval256.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0E9h,092h,0C1h,0FBh,079h,0E9h,0BAh,0A8h - DB 028h,05Ch,07Ah,073h,00Bh,0EBh,00Ch,07Ch - DB 0ADh,0F3h,0F7h,0ADh,026h,0D7h,0EFh,0E2h - DB 01Fh,0F4h,0BFh,067h,057h,069h,0D5h,09Ah -end; - -procedure TROHash_Haval256.SetRounds(Value: Integer); -begin - if (Value < 3) or (Value > 5) then - if DigestKeySize <= 20 then Value := 3 else - if DigestKeySize <= 28 then Value := 4 - else Value := 5; - FRounds := Value; - case FRounds of - 3: FTransform := Transform3; - 4: FTransform := Transform4; - 5: FTransform := Transform5; - end; -end; -{3 Rounds} -procedure TROHash_Haval256.Transform3(Buffer: PIntArray); -var - A,B,C,D,E,F,G,H,I,T: LongWord; - Data: PInteger; - 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; -{4 Rounds} -procedure TROHash_Haval256.Transform4(Buffer: PIntArray); -var - A,B,C,D,E,F,G,H,I,T: LongWord; - Data: PInteger; - 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; - -{5 Rounds} -procedure TROHash_Haval256.Transform5(Buffer: PIntArray); -var - A,B,C,D,E,F,G,H,I,T: LongWord; - Data: PInteger; - 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; - -class function TROHash_Haval256.DigestKeySize: Integer; -begin - Result := 32; -end; - -procedure TROHash_Haval256.Init; -begin - FillChar(FBuffer, SizeOf(FBuffer), 0); - SetRounds(FRounds); - FCount := 0; - FDigest[0] := $243F6A88; - FDigest[1] := $85A308D3; - FDigest[2] := $13198A2E; - FDigest[3] := $03707344; - FDigest[4] := $A4093822; - FDigest[5] := $299F31D0; - FDigest[6] := $082EFA98; - FDigest[7] := $EC4E6C89; - Protect(True); -end; - -procedure TROHash_Haval256.Done; -var - I: Integer; - S: Comp; -begin - I := FCount mod 128; - FBuffer[I] := $01; -{ops, $80 in the C Reference Implementation, but $01 in the Documentation ???} - Inc(I); - if I > 118 then - begin - FillChar(FBuffer[I], 118 - I, 0); - FTransform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 118 - I, 0); - I := DigestKeySize * 8; {in bits} - FBuffer[118] := I and 3 shl 6 or FRounds shl 3 or 1; - FBuffer[119] := I shr 2 and $FF; - S := FCount * 8; - Move(S, FBuffer[120], SizeOf(S)); - FTransform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); - case I of - 128: 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; - 160: 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 ($37 shl 25) or - FDigest[6] and ($3F shl 19) or - FDigest[5] and ($7F shl 12)) shr 12); - end; - 192: begin - Inc(FDigest[0], ROR(FDigest[7] and ($3F) 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; - 224: 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; - Protect(False); -end; - -procedure TROHash_Haval256.Calc(const Data; DataSize: Integer); -var - Index: Integer; - P: PChar; -begin - if DataSize <= 0 then Exit; - Index := FCount and $3F; - Inc(FCount, DataSize); - if Index > 0 then - begin - if DataSize < 128 - Index then - begin - Move(Data, FBuffer[Index], DataSize); - Exit; - end; - Move(Data, FBuffer[Index], 128 - Index); - FTransform(@FBuffer); - Index := 128 - Index; - Dec(DataSize, Index); - end; - P := @TByteArray(Data)[Index]; - Inc(Index, DataSize and not $7F); - while DataSize >= 128 do - begin - FTransform(Pointer(P)); - Inc(P, 128); - Dec(DataSize, 128); - end; - Move(TByteArray(Data)[Index], FBuffer, DataSize); -end; - -function TROHash_Haval256.DigestKey: Pointer; -begin - Result := @FDigest; -end; - -class function TROHash_Haval224.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 032h,03Ah,0DCh,0B3h,075h,0B5h,08Fh,05Ah - DB 06Ah,0F1h,066h,089h,099h,05Ah,07Ah,098h - DB 071h,06Eh,022h,077h,0BCh,002h,029h,038h - DB 067h,0A5h,0CCh,0E1h -end; - -class function TROHash_Haval224.DigestKeySize: Integer; -begin - Result := 28; -end; - -class function TROHash_Haval192.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 030h,0AEh,0ECh,03Fh,0C1h,08Eh,061h,018h - DB 0A4h,0F2h,0A3h,0E8h,006h,06Ch,03Bh,064h - DB 0A6h,0A9h,02Eh,07Dh,0E2h,052h,0A0h,0B5h -end; - -class function TROHash_Haval192.DigestKeySize: Integer; -begin - Result := 24; -end; - -class function TROHash_Haval160.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 013h,0DDh,0BDh,032h,033h,0BCh,004h,08Dh - DB 06Dh,0F6h,063h,056h,037h,0E2h,0A0h,0D0h - DB 053h,01Bh,090h,003h -end; - -class function TROHash_Haval160.DigestKeySize: Integer; -begin - Result := 20; -end; - -class function TROHash_Haval128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D8h,0CBh,0CDh,0ECh,07Ah,0FDh,0C8h,0A5h - DB 0F2h,07Bh,0D2h,012h,0B9h,033h,09Ah,0BDh -end; - -class function TROHash_Haval128.DigestKeySize: Integer; -begin - Result := 16; -end; - -procedure TROHash_Snefru.SetSecurity_Level(Value: Integer); -begin - if (Value < 2) or (Value > 8) then Value := 8; - FSecurity_Level := Value; -end; - -class function TROHash_Snefru.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D6h,090h,0EEh,067h,028h,0D9h,0BAh,002h - DB 0A3h,0C7h,090h,0EEh,050h,073h,019h,074h - DB 01Fh,0BFh,06Bh,083h,0EBh,09Ah,06Bh,0DFh - DB 0F5h,07Ah,0D8h,0C3h,007h,08Dh,0A4h,034h -end; - -class function TROHash_Snefru.DigestKeySize: Integer; -begin - Result := 32; -end; - -procedure TROHash_Snefru.Init; -begin - FillChar(FDigest, SizeOf(FDigest), 0); - FillChar(FBuffer, SizeOf(FBuffer), 0); - FSecurity_Level := 8; - FCount := 0; - Protect(True); -end; - -procedure TROHash_Snefru.Transform(Buffer: PIntArray); -const - ShiftTable: array[0..3] of Integer = (16, 8, 16, 24); -var - I,Index,ByteInWord, T, S: LongWord; - D,Box: PIntArray; -begin - D := @FDigest; - Move(Buffer^, D[8], 32); - for Index := 0 to FSecurity_Level-1 do - begin - for ByteInWord := 0 to 3 do - begin - I := 0; - while I < 16 do - begin - Box := @Snefru_Data[(Index shl 1) + ((I shr 1) and 1)]; - S := Box[D[I] and $FF]; - T := (I + 1) and 15; D[T] := D[T] xor S; - T := (I + 15) and 15; D[T] := D[T] xor S; - Inc(I); - S := Box[D[I] and $FF]; - T := (I + 1) and 15; D[T] := D[T] xor S; - T := (I + 15) and 15; D[T] := D[T] xor S; - Inc(I); - 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; - end; - for I := 0 to 7 do D[I] := D[I] xor D[15 - I]; -end; - -procedure TROHash_Snefru.Done; -var - I: Integer; - S: Comp; -begin - I := FCount and $1F; - Inc(I); - if I > 32 - 8 then - begin - FillChar(FBuffer[I], 32 - I, 0); - Transform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 32 - I, 0); - S := FCount * 8; - Move(S, FBuffer[32 - 8], SizeOf(S)); - Transform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); - Protect(False); -end; - -procedure TROHash_Snefru.Calc(const Data; DataSize: Integer); -var - Index: Integer; - P: PChar; -begin - if DataSize <= 0 then Exit; - Index := FCount and $1F; - Inc(FCount, DataSize); - if Index > 0 then - begin - if DataSize < 32 - Index then - begin - Move(Data, FBuffer[Index], DataSize); - Exit; - end; - Move(Data, FBuffer[Index], 32 - Index); - Transform(@FBuffer); - Index := 32 - Index; - Dec(DataSize, Index); - end; - P := @TByteArray(Data)[Index]; - Inc(Index, DataSize and not $1F); - while DataSize >= 32 do - begin - Transform(Pointer(P)); - Inc(P, 32); - Dec(DataSize, 32); - end; - Move(TByteArray(Data)[Index], FBuffer, DataSize); -end; - -function TROHash_Snefru.DigestKey: Pointer; -begin - Result := @FDigest; -end; - -procedure TROHash_Tiger.SetRounds(Value: Integer); -begin - if (Value < 3) or (Value > 32) then Value := 3; - FRounds := Value; -end; - -class function TROHash_Tiger.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 076h,010h,0D2h,0CDh,0A5h,017h,0A4h,0D6h - DB 0FFh,035h,073h,04Fh,0CEh,05Ch,077h,095h - DB 0F3h,0A1h,051h,06Eh,01Eh,002h,04Dh,087h -end; - -{$IFDEF _VER_D4H} -// the Code for D4, but courios, the code is slower of a PII -// and faster with AMD K6 ???? -(* -procedure TROHash_Tiger.Transform(Buffer: PIntArray); -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: Int64; - 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's 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, LongWord(C) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(C) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(C shr 32) shr 16 and $FF]); - Inc(B, TTiger_Data(Tiger_Data)[3, LongWord(C) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(C) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(C shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(C shr 32) shr 24]); - if I = 1 then B := B shl 2 + B else - if I = 2 then B := B shl 3 - B - else B := B shl 3 + B; - - A := A xor x1; - Dec(B, TTiger_Data(Tiger_Data)[0, LongWord(A) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(A) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(A shr 32) shr 16 and $FF]); - Inc(C, TTiger_Data(Tiger_Data)[3, LongWord(A) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(A) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(A shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(A shr 32) shr 24]); - if I = 1 then C := C shl 2 + C else - if I = 2 then C := C shl 3 - C - else C := C shl 3 + C; - - B := B xor x2; - Dec(C, TTiger_Data(Tiger_Data)[0, LongWord(B) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(B) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, B shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(B shr 32) shr 16 and $FF]); - Inc(A, TTiger_Data(Tiger_Data)[3, LongWord(B) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(B) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(B shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(B shr 32) shr 24]); - if I = 1 then A := A shl 2 + A else - if I = 2 then A := A shl 3 - A - else A := A shl 3 + A; - - C := C xor x3; - Dec(A, TTiger_Data(Tiger_Data)[0, LongWord(C) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(C) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(C shr 32) shr 16 and $FF]); - Inc(B, TTiger_Data(Tiger_Data)[3, LongWord(C) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(C) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(C shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(C shr 32) shr 24]); - if I = 1 then B := B shl 2 + B else - if I = 2 then B := B shl 3 - B - else B := B shl 3 + B; - - A := A xor x4; - Dec(B, TTiger_Data(Tiger_Data)[0, LongWord(A) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(A) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(A shr 32) shr 16 and $FF]); - Inc(C, TTiger_Data(Tiger_Data)[3, LongWord(A) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(A) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(A shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(A shr 32) shr 24]); - if I = 1 then C := C shl 2 + C else - if I = 2 then C := C shl 3 - C - else C := C shl 3 + C; - - B := B xor x5; - Dec(C, TTiger_Data(Tiger_Data)[0, LongWord(B) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(B) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, B shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(B shr 32) shr 16 and $FF]); - Inc(A, TTiger_Data(Tiger_Data)[3, LongWord(B) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(B) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(B shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(B shr 32) shr 24]); - if I = 1 then A := A shl 2 + A else - if I = 2 then A := A shl 3 - A - else A := A shl 3 + A; - - C := C xor x6; - Dec(A, TTiger_Data(Tiger_Data)[0, LongWord(C) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(C) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(C shr 32) shr 16 and $FF]); - Inc(B, TTiger_Data(Tiger_Data)[3, LongWord(C) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(C) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(C shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(C shr 32) shr 24]); - if I = 1 then B := B shl 2 + B else - if I = 2 then B := B shl 3 - B - else B := B shl 3 + B; - - A := A xor x7; - Dec(B, TTiger_Data(Tiger_Data)[0, LongWord(A) and $FF] xor - TTiger_Data(Tiger_Data)[1, LongWord(A) shr 16 and $FF] xor - TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor - TTiger_Data(Tiger_Data)[3, LongWord(A shr 32) shr 16 and $FF]); - Inc(C, TTiger_Data(Tiger_Data)[3, LongWord(A) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[2, LongWord(A) shr 24] xor - TTiger_Data(Tiger_Data)[1, LongWord(A shr 32) shr 8 and $FF] xor - TTiger_Data(Tiger_Data)[0, LongWord(A shr 32) shr 24]); - if I = 1 then C := C shl 2 + C else - if I = 2 then C := C shl 3 - C - else C := C shl 3 + C; - - 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; *) - -{$ELSE} -//here the code for D2-D3 and D4, is faster as the D4-Compiler-Code of -// a PII and slower with AMD K6, smaller cache ???? i mean we used this -procedure TROHash_Tiger.Transform(Buffer: PIntArray); -type - TInt64 = packed record - Lo,Hi: LongWord; - end; - - PTiger_Data = ^TTiger_Data; - TTiger_Data = array[0..3, 0..255] of TInt64; - - PInt64Array = ^TInt64Array; - TInt64Array = packed record - case Integer of - 0: (x0,x1,x2,x3,x4,x5,x6,x7: TInt64); - 1: (D: array[0..7] of TInt64); - end; - -var - A,B,C,T: TInt64; - Buf: TInt64Array; - I: Integer; -begin - Move(Buffer^, Buf, SizeOf(Buf)); - with PInt64Array(@FDigest)^ do - begin - A := x0; - B := x1; - C := x2; - end; - with Buf do - for I := 1 to FRounds do - begin - if I > 1 then - asm - MOV EAX,Buf.x7.Lo - MOV EDX,Buf.x7.Hi - XOR EAX,$A5A5A5A5 - XOR EDX,$A5A5A5A5 - SUB Buf.x0.Lo,EAX - SBB Buf.x0.Hi,EDX - MOV EAX,Buf.x1.Lo - MOV EDX,Buf.x1.Hi - XOR EAX,Buf.x0.Lo - XOR EDX,Buf.x0.Hi - MOV Buf.x1.Lo,EAX - MOV Buf.x1.Hi,EDX - ADD Buf.x2.Lo,EAX - ADC Buf.x2.Hi,EDX - NOT EAX - NOT EDX - SHLD EDX,EAX,19 - SHL EAX,19 - XOR EAX,Buf.x2.Lo - XOR EDX,Buf.x2.Hi - SUB Buf.x3.Lo,EAX - SBB Buf.x3.Hi,EDX - MOV EAX,Buf.x4.Lo - MOV EDX,Buf.x4.Hi - XOR EAX,Buf.x3.Lo - XOR EDX,Buf.x3.Hi - MOV Buf.x4.Lo,EAX - MOV Buf.x4.Hi,EDX - ADD Buf.x5.Lo,EAX - ADC Buf.x5.Hi,EDX - NOT EAX - NOT EDX - SHRD EAX,EDX,23 - SAR EDX,23 - XOR EAX,Buf.x5.Lo - XOR EDX,Buf.x5.Hi - SUB Buf.x6.Lo,EAX - SBB Buf.x6.Hi,EDX - MOV EAX,Buf.x7.Lo - MOV EDX,Buf.x7.Hi - XOR EAX,Buf.x6.Lo - XOR EDX,Buf.x6.Hi - MOV Buf.x7.Lo,EAX - MOV Buf.x7.Hi,EDX - ADD Buf.x0.Lo,EAX - ADC Buf.x0.Hi,EDX - NOT EAX - NOT EDX - SHLD EDX,EAX,19 - SHL EAX,19 - XOR EAX,Buf.x0.Lo - XOR EDX,Buf.x0.Hi - SUB Buf.x1.Lo,EAX - SBB Buf.x1.Hi,EDX - MOV EAX,Buf.x2.Lo - MOV EDX,Buf.x2.Hi - XOR EAX,Buf.x1.Lo - XOR EDX,Buf.x1.Hi - MOV Buf.x2.Lo,EAX - MOV Buf.x2.Hi,EDX - ADD Buf.x3.Lo,EAX - ADC Buf.x3.Hi,EDX - NOT EAX - NOT EDX - SHRD EAX,EDX,23 - SAR EDX,23 - XOR EAX,Buf.x3.Lo - XOR EDX,Buf.x3.Hi - SUB Buf.x4.Lo,EAX - SBB Buf.x4.Hi,EDX - MOV EAX,Buf.x5.Lo - MOV EDX,Buf.x5.Hi - XOR EAX,Buf.x4.Lo - XOR EDX,Buf.x4.Hi - MOV Buf.x5.Lo,EAX - MOV Buf.x5.Hi,EDX - ADD Buf.x6.Lo,EAX - ADC Buf.x6.Hi,EDX - MOV EAX,Buf.x6.Lo - MOV EDX,Buf.x6.Hi - XOR EAX,$89ABCDEF - XOR EDX,$01234567 - SUB Buf.x7.Lo,EAX - SBB Buf.x7.Hi,EDX - end; - C.Lo := C.Lo xor x0.Lo; - C.Hi := C.Hi xor x0.Hi; - T.Lo := Tiger_Data[0, C.Lo shl 1 and $1FE] xor - Tiger_Data[1, C.Lo shr 15 and $1FE] xor - Tiger_Data[2, C.Hi shl 1 and $1FE] xor - Tiger_Data[3, C.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, C.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, C.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, C.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, C.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB A.Lo,EAX - SBB A.Hi,EDX - end; - T.Lo := Tiger_Data[3, C.Lo shr 7 and $1FE] xor - Tiger_Data[2, C.Lo shr 23 and $1FE] xor - Tiger_Data[1, C.Hi shr 7 and $1FE] xor - Tiger_Data[0, C.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, C.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, C.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, C.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, C.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,B.Lo - MOV EDX,B.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV B.Lo,EAX - MOV B.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,B.Lo - ADC EDX,B.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,B.Lo - SBB EDX,B.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,B.Lo - ADC EDX,B.Hi - @@3: MOV B.Lo,EAX - MOV B.Hi,EDX - end; - - A.Lo := A.Lo xor x1.Lo; - A.Hi := A.Hi xor x1.Hi; - T.Lo := Tiger_Data[0, A.Lo shl 1 and $1FE] xor - Tiger_Data[1, A.Lo shr 15 and $1FE] xor - Tiger_Data[2, A.Hi shl 1 and $1FE] xor - Tiger_Data[3, A.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, A.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, A.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, A.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, A.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB B.Lo,EAX - SBB B.Hi,EDX - end; - T.Lo := Tiger_Data[3, A.Lo shr 7 and $1FE] xor - Tiger_Data[2, A.Lo shr 23 and $1FE] xor - Tiger_Data[1, A.Hi shr 7 and $1FE] xor - Tiger_Data[0, A.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, A.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, A.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, A.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, A.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,C.Lo - MOV EDX,C.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV C.Lo,EAX - MOV C.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,C.Lo - ADC EDX,C.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,C.Lo - SBB EDX,C.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,C.Lo - ADC EDX,C.Hi - @@3: MOV C.Lo,EAX - MOV C.Hi,EDX - end; - - B.Lo := B.Lo xor x2.Lo; - B.Hi := B.Hi xor x2.Hi; - T.Lo := Tiger_Data[0, B.Lo shl 1 and $1FE] xor - Tiger_Data[1, B.Lo shr 15 and $1FE] xor - Tiger_Data[2, B.Hi shl 1 and $1FE] xor - Tiger_Data[3, B.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, B.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, B.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, B.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, B.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB C.Lo,EAX - SBB C.Hi,EDX - end; - T.Lo := Tiger_Data[3, B.Lo shr 7 and $1FE] xor - Tiger_Data[2, B.Lo shr 23 and $1FE] xor - Tiger_Data[1, B.Hi shr 7 and $1FE] xor - Tiger_Data[0, B.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, B.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, B.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, B.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, B.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,A.Lo - MOV EDX,A.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV A.Lo,EAX - MOV A.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,A.Lo - ADC EDX,A.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,A.Lo - SBB EDX,A.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,A.Lo - ADC EDX,A.Hi - @@3: MOV A.Lo,EAX - MOV A.Hi,EDX - end; - C.Lo := C.Lo xor x3.Lo; - C.Hi := C.Hi xor x3.Hi; - T.Lo := Tiger_Data[0, C.Lo shl 1 and $1FE] xor - Tiger_Data[1, C.Lo shr 15 and $1FE] xor - Tiger_Data[2, C.Hi shl 1 and $1FE] xor - Tiger_Data[3, C.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, C.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, C.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, C.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, C.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB A.Lo,EAX - SBB A.Hi,EDX - end; - T.Lo := Tiger_Data[3, C.Lo shr 7 and $1FE] xor - Tiger_Data[2, C.Lo shr 23 and $1FE] xor - Tiger_Data[1, C.Hi shr 7 and $1FE] xor - Tiger_Data[0, C.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, C.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, C.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, C.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, C.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,B.Lo - MOV EDX,B.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV B.Lo,EAX - MOV B.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,B.Lo - ADC EDX,B.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,B.Lo - SBB EDX,B.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,B.Lo - ADC EDX,B.Hi - @@3: MOV B.Lo,EAX - MOV B.Hi,EDX - end; - - A.Lo := A.Lo xor x4.Lo; - A.Hi := A.Hi xor x4.Hi; - T.Lo := Tiger_Data[0, A.Lo shl 1 and $1FE] xor - Tiger_Data[1, A.Lo shr 15 and $1FE] xor - Tiger_Data[2, A.Hi shl 1 and $1FE] xor - Tiger_Data[3, A.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, A.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, A.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, A.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, A.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB B.Lo,EAX - SBB B.Hi,EDX - end; - T.Lo := Tiger_Data[3, A.Lo shr 7 and $1FE] xor - Tiger_Data[2, A.Lo shr 23 and $1FE] xor - Tiger_Data[1, A.Hi shr 7 and $1FE] xor - Tiger_Data[0, A.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, A.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, A.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, A.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, A.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,C.Lo - MOV EDX,C.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV C.Lo,EAX - MOV C.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,C.Lo - ADC EDX,C.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,C.Lo - SBB EDX,C.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,C.Lo - ADC EDX,C.Hi - @@3: MOV C.Lo,EAX - MOV C.Hi,EDX - end; - - B.Lo := B.Lo xor x5.Lo; - B.Hi := B.Hi xor x5.Hi; - T.Lo := Tiger_Data[0, B.Lo shl 1 and $1FE] xor - Tiger_Data[1, B.Lo shr 15 and $1FE] xor - Tiger_Data[2, B.Hi shl 1 and $1FE] xor - Tiger_Data[3, B.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, B.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, B.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, B.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, B.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB C.Lo,EAX - SBB C.Hi,EDX - end; - T.Lo := Tiger_Data[3, B.Lo shr 7 and $1FE] xor - Tiger_Data[2, B.Lo shr 23 and $1FE] xor - Tiger_Data[1, B.Hi shr 7 and $1FE] xor - Tiger_Data[0, B.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, B.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, B.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, B.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, B.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,A.Lo - MOV EDX,A.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV A.Lo,EAX - MOV A.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,A.Lo - ADC EDX,A.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,A.Lo - SBB EDX,A.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,A.Lo - ADC EDX,A.Hi - @@3: MOV A.Lo,EAX - MOV A.Hi,EDX - end; - C.Lo := C.Lo xor x6.Lo; - C.Hi := C.Hi xor x6.Hi; - T.Lo := Tiger_Data[0, C.Lo shl 1 and $1FE] xor - Tiger_Data[1, C.Lo shr 15 and $1FE] xor - Tiger_Data[2, C.Hi shl 1 and $1FE] xor - Tiger_Data[3, C.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, C.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, C.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, C.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, C.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB A.Lo,EAX - SBB A.Hi,EDX - end; - T.Lo := Tiger_Data[3, C.Lo shr 7 and $1FE] xor - Tiger_Data[2, C.Lo shr 23 and $1FE] xor - Tiger_Data[1, C.Hi shr 7 and $1FE] xor - Tiger_Data[0, C.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, C.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, C.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, C.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, C.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,B.Lo - MOV EDX,B.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV B.Lo,EAX - MOV B.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,B.Lo - ADC EDX,B.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,B.Lo - SBB EDX,B.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,B.Lo - ADC EDX,B.Hi - @@3: MOV B.Lo,EAX - MOV B.Hi,EDX - end; - - A.Lo := A.Lo xor x7.Lo; - A.Hi := A.Hi xor x7.Hi; - T.Lo := Tiger_Data[0, A.Lo shl 1 and $1FE] xor - Tiger_Data[1, A.Lo shr 15 and $1FE] xor - Tiger_Data[2, A.Hi shl 1 and $1FE] xor - Tiger_Data[3, A.Hi shr 15 and $1FE]; - T.Hi := Tiger_Data[0, A.Lo shl 1 and $1FE or 1] xor - Tiger_Data[1, A.Lo shr 15 and $1FE or 1] xor - Tiger_Data[2, A.Hi shl 1 and $1FE or 1] xor - Tiger_Data[3, A.Hi shr 15 and $1FE or 1]; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB B.Lo,EAX - SBB B.Hi,EDX - end; - T.Lo := Tiger_Data[3, A.Lo shr 7 and $1FE] xor - Tiger_Data[2, A.Lo shr 23 and $1FE] xor - Tiger_Data[1, A.Hi shr 7 and $1FE] xor - Tiger_Data[0, A.Hi shr 23 and $1FE]; - T.Hi := Tiger_Data[3, A.Lo shr 7 and $1FE or 1] xor - Tiger_Data[2, A.Lo shr 23 and $1FE or 1] xor - Tiger_Data[1, A.Hi shr 7 and $1FE or 1] xor - Tiger_Data[0, A.Hi shr 23 and $1FE or 1]; - asm - MOV EAX,C.Lo - MOV EDX,C.Hi - ADD EAX,T.Lo - ADC EDX,T.Hi - MOV C.Lo,EAX - MOV C.Hi,EDX - CMP I,1 - JNE @@1 - SHLD EDX,EAX,2 - SHL EAX,2 - ADD EAX,C.Lo - ADC EDX,C.Hi - JMP @@3 - @@1: CMP I,2 - JNE @@2 - SHLD EDX,EAX,3 - SHL EAX,3 - SUB EAX,C.Lo - SBB EDX,C.Hi - JMP @@3 - @@2: SHLD EDX,EAX,3 - SHL EAX,3 - ADD EAX,C.Lo - ADC EDX,C.Hi - @@3: MOV C.Lo,EAX - MOV C.Hi,EDX - end; - T := A; A := C; C := B; B := T; - end; - - with PInt64Array(@FDigest)^ do - begin - x0.Lo := A.Lo xor x0.Lo; - x0.Hi := A.Hi xor x0.Hi; - T := x1; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - SUB B.Lo,EAX - SBB B.Hi,EDX - end; - x1 := B; - T := x2; - asm - MOV EAX,T.Lo - MOV EDX,T.Hi - ADD C.Lo,EAX - ADC C.Hi,EDX - end; - x2 := C; - end; -{$ENDIF} -end; - -class function TROHash_Tiger.DigestKeySize: Integer; -begin - Result := 24; -end; - -procedure TROHash_Tiger.Init; -begin - FillChar(FBuffer, SizeOf(FBuffer), 0); - SetRounds(FRounds); - FCount := 0; - FDigest[0] := $89ABCDEF; - FDigest[1] := $01234567; - FDigest[2] := $76543210; - FDigest[3] := $FEDCBA98; - FDigest[4] := $C3B2E187; - FDigest[5] := $F096A5B4; - Protect(True); -end; - -procedure TROHash_Tiger.Done; -var - I: Integer; - S: Comp; -begin - I := FCount and $3F; - FBuffer[I] := $01; - Inc(I); - if I > 64 - 8 then - begin - FillChar(FBuffer[I], 64 - I, 0); - Transform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 64 - I, 0); - S := FCount * 8; - Move(S, FBuffer[64 - 8], SizeOf(S)); - Transform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); - Protect(False); -end; - -class function TROHash_Sapphire320.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0D8h,0EDh,0A5h,074h,099h,048h,0ACh,00Bh - DB 000h,090h,0CDh,087h,061h,0F2h,018h,0DBh - DB 0A4h,01Dh,0CBh,073h,0E4h,033h,099h,0DDh - DB 037h,012h,006h,093h,097h,033h,095h,000h - DB 04Ah,0CFh,086h,0DBh,023h,06Dh,0E7h,06Bh -end; - -procedure TROHash_Sapphire320.Calc(const Data; DataSize: Integer); -var - C: Integer; - T: Byte; - D: PByte; -begin - Inc(FCount, DataSize); - D := @Data; - C := FCipher; - while DataSize > 0 do - begin - Dec(DataSize); - Inc(FRatchet, FCards[FRotor]); - Inc(FRotor); - T := FCards[C]; - FCards[C] := FCards[FRatchet]; - FCards[FRatchet] := FCards[FPlain]; - FCards[FPlain] := FCards[FRotor]; - FCards[FRotor] := T; - Inc(FAvalanche, FCards[T]); - T := FCards[FPlain] + FCards[C] + FCards[FAvalanche]; - FPlain := D^; Inc(D); - C := FPlain xor FCards[FCards[T]] xor - FCards[(FCards[FRatchet] + FCards[FRotor]) and $FF]; - end; - FCipher := C; -end; - -class function TROHash_Sapphire320.DigestKeySize: Integer; -begin - Result := 40; -end; - -procedure TROHash_Sapphire320.Init; -var - I: Integer; -begin - FillChar(FDigest, SizeOf(FDigest), 0); - FCount := 0; - FRotor := 1; - FRatchet := 3; - FAvalanche := 5; - FPlain := 7; - FCipher := 11; - for I := 0 to 255 do FCards[I] := 255 - I; - Protect(True); -end; - -procedure TROHash_Sapphire320.Done; -{final sequence, I have here changed the original Code by adding the - Trailor, Version, Digestsize, Init-values and Size in Bits, - I mean this changes make a uniquer Fingerprint, other RO_Hash's use identicaly Methods} -var - I,J: Byte; - B: array[0..39] of Byte; - S: Comp; -begin - J := DigestKeySize; - for I := 255 downto 0 do - begin - J := J xor I; - Calc(J, 1); - end; - FillChar(B, SizeOf(B), 0); - B[0] := $80; {Trailorbyte} - B[1] := $02; {Version} - PInteger(@B[2])^ := DigestKeySize shl 8; {Digestsize in bits} - B[4] := 1; {Init from FRotor} - B[5] := 3; {Init from FRatchet} - B[6] := 5; {Init from FAvalanche} - B[7] := 7; {Init from FPlain} - B[8] := 11; {Init from FCipher}; - S := FCount * 8; {Size in Bits} - Move(S, B[9], SizeOf(S)); - for I := 0 to DigestKeySize-1 do - begin - Calc(B[I], 1); - PByteArray(@FDigest)[I] := PByteArray(@FDigest)[I] xor FCipher; - end; - Protect(False); -end; - -function TROHash_Sapphire320.DigestKey: Pointer; -begin - Result := @FDigest; -end; - -class function TROHash_Sapphire288.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 040h,0F6h,05Ah,037h,0D8h,0CBh,011h,065h - DB 0DCh,0FBh,0DEh,063h,02Bh,02Ch,0BEh,09Ch - DB 02Bh,0B7h,0F3h,0EDh,022h,0D1h,0EBh,0EFh - DB 00Fh,0A1h,088h,0EDh,023h,0F0h,07Fh,09Ch - DB 07Eh,061h,037h,040h -end; - -class function TROHash_Sapphire288.DigestKeySize: Integer; -begin - Result := 36; -end; - -class function TROHash_Sapphire256.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0E7h,0C8h,02Bh,06Dh,025h,08Ah,0FDh,0E0h - DB 034h,042h,093h,0A3h,0E2h,0E5h,028h,096h - DB 0A5h,046h,050h,06Bh,013h,093h,086h,01Bh - DB 040h,0C6h,093h,04Bh,051h,0FAh,066h,0DDh -end; - -class function TROHash_Sapphire256.DigestKeySize: Integer; -begin - Result := 32; -end; - -class function TROHash_Sapphire224.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 08Fh,03Eh,0C5h,057h,092h,031h,06Ch,0DFh - DB 0CAh,040h,018h,03Ah,086h,008h,008h,099h - DB 034h,0FDh,0EBh,021h,0ABh,0A4h,052h,00Fh - DB 040h,017h,0D3h,0D0h -end; - -class function TROHash_Sapphire224.DigestKeySize: Integer; -begin - Result := 28; -end; - -class function TROHash_Sapphire192.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 095h,041h,03Fh,0E0h,02Bh,052h,07Eh,050h - DB 0B5h,0FFh,057h,0EBh,076h,03Dh,032h,051h - DB 029h,0EBh,079h,06Fh,04Ah,064h,0FBh,017h -end; - -class function TROHash_Sapphire192.DigestKeySize: Integer; -begin - Result := 24; -end; - -class function TROHash_Sapphire160.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 073h,0D9h,01Ah,0CEh,0B1h,075h,0FDh,004h - DB 090h,07Ah,097h,041h,03Ch,020h,00Fh,053h - DB 02Ch,022h,0B3h,08Ch -end; - -class function TROHash_Sapphire160.DigestKeySize: Integer; -begin - Result := 20; -end; - -class function TROHash_Sapphire128.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 047h,0AEh,016h,013h,0C9h,03Ah,094h,02Dh - DB 026h,074h,08Dh,062h,043h,026h,088h,0D8h -end; - -class function TROHash_Sapphire128.DigestKeySize: Integer; -begin - Result := 16; -end; - -class function TROHash_Square.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 080h,08Fh,035h,0EAh,000h,0A7h,077h,033h - DB 037h,0CEh,055h,098h,026h,0DDh,0B3h,024h -end; - -procedure TROHash_Square.Transform(Buffer: PIntArray); -var - E: array[0..8, 0..3] of LongWord; - A,B,C,D: LongWord; - AA,BB,CC,DD: LongWord; - I,J: Integer; - Key: PInteger; -begin -{Build and expand the Key, Digest include the Key} - Move(FDigest, E, 16); - for I := 1 to 8 do - begin - E[I, 0] := E[I -1, 0] xor ROR(E[I -1, 3], 8) 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]; - for J := 0 to 3 do - E[I -1, J] := Square_PHI[E[I -1, J] and $FF] xor - ROL(Square_PHI[E[I -1, J] shr 8 and $FF], 8) xor - ROL(Square_PHI[E[I -1, J] shr 16 and $FF], 16) xor - ROL(Square_PHI[E[I -1, J] shr 24 ], 24); - end; -{Encrypt begin here, same TROCipher_Square.Encode} - Key := @E; - A := Buffer[0] xor Key^; Inc(Key); - B := Buffer[1] xor Key^; Inc(Key); - C := Buffer[2] xor Key^; Inc(Key); - D := Buffer[3] xor Key^; Inc(Key); - 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^; Inc(Key); - 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^; Inc(Key); - 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^; Inc(Key); - 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^; Inc(Key); - - A := AA; B := BB; C := CC; D := DD; - end; - - FDigest[0] := FBuffer[0] xor - LongWord(Square_SE[A and $FF]) xor - LongWord(Square_SE[B and $FF]) shl 8 xor - LongWord(Square_SE[C and $FF]) shl 16 xor - LongWord(Square_SE[D and $FF]) shl 24 xor Key^; Inc(Key); - FDigest[1] := FBuffer[1] xor - LongWord(Square_SE[A shr 8 and $FF]) xor - LongWord(Square_SE[B shr 8 and $FF]) shl 8 xor - LongWord(Square_SE[C shr 8 and $FF]) shl 16 xor - LongWord(Square_SE[D shr 8 and $FF]) shl 24 xor Key^; Inc(Key); - FDigest[2] := FBuffer[2] xor - LongWord(Square_SE[A shr 16 and $FF]) xor - LongWord(Square_SE[B shr 16 and $FF]) shl 8 xor - LongWord(Square_SE[C shr 16 and $FF]) shl 16 xor - LongWord(Square_SE[D shr 16 and $FF]) shl 24 xor Key^; Inc(Key); - FDigest[3] := FBuffer[3] xor - LongWord(Square_SE[A shr 24 ]) xor - LongWord(Square_SE[B shr 24 ]) shl 8 xor - LongWord(Square_SE[C shr 24 ]) shl 16 xor - LongWord(Square_SE[D shr 24 ]) shl 24 xor Key^; -end; - -class function TROHash_Square.DigestKeySize: Integer; -begin - Result := 16; -end; - -function TROHash_Square.DigestKey: Pointer; -begin - Result := @FDigest; -end; - -procedure TROHash_Square.Init; -begin - FillChar(FBuffer, SizeOf(FBuffer), 0); -{here using the same Magic codes from MD4, in the original was this set to zero, - this is the Square Encryption Key, - you can change this with Move(My4xIntKey, Hash_Square.DigestKey^, 4 * SizeOf(Integer)) - to produce private Results} - FDigest[0] := $67452301; - FDigest[1] := $EFCDAB89; - FDigest[2] := $98BADCFE; - FDigest[3] := $10325476; - FCount := 0; - Protect(True); -end; - -procedure TROHash_Square.Done; -var - I: Integer; - S: Comp; -begin - I := FCount and $0F; - FBuffer[I] := $80; - Inc(I); - if I > 16 - 8 then - begin - FillChar(FBuffer[I], 16 - I, 0); - Transform(@FBuffer); - I := 0; - end; - FillChar(FBuffer[I], 16 - I, 0); - S := FCount * 8; {in Bits} - Move(S, FBuffer[16 - 8], SizeOf(S)); - Transform(@FBuffer); - FillChar(FBuffer, SizeOf(FBuffer), 0); - Protect(False); -end; - -procedure TROHash_Square.Calc(const Data; DataSize: Integer); -var - Index: Integer; - P: PChar; -begin - if DataSize <= 0 then Exit; - Index := FCount and $0F; - Inc(FCount, DataSize); - if Index > 0 then - begin - if DataSize < 16 - Index then - begin - Move(Data, FBuffer[Index], DataSize); - Exit; - end; - Move(Data, FBuffer[Index], 16 - Index); - Transform(@FBuffer); - Index := 16 - Index; - Dec(DataSize, Index); - end; - P := @TByteArray(Data)[Index]; - Inc(Index, DataSize and not $0F); - while DataSize >= 16 do - begin - Transform(Pointer(P)); - Inc(P, 16); - Dec(DataSize, 16); - end; - Move(TByteArray(Data)[Index], FBuffer, DataSize); -end; - -class function TROHash_XOR16.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 079h,0E8h -end; - -class function TROHash_XOR16.DigestKeySize: Integer; -begin - Result := 2; -end; - -procedure TROHash_XOR16.Init; -begin - FCRC := 0; - Protect(True); -end; - -procedure TROHash_XOR16.Calc(const Data; DataSize: Integer); assembler; register; -asm - TEST ECX,ECX - JLE @Exit - PUSH EAX - MOV AX,[EAX].TROHash_XOR16.FCRC -@@1: ROL AX,5 - XOR AL,[EDX] - INC EDX - DEC ECX - JNZ @@1 - POP EDX - MOV [EDX].TROHash_XOR16.FCRC,AX -@Exit: -end; - -function TROHash_XOR16.DigestKey: Pointer; -begin - Result := @FCRC; -end; - -class function TROHash_XOR32.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 08Dh,0ADh,089h,07Fh -end; - -class function TROHash_XOR32.DigestKeySize: Integer; -begin - Result := 4; -end; - -procedure TROHash_XOR32.Init; -begin - FCRC := 0; - Protect(True); -end; - -procedure TROHash_XOR32.Calc(const Data; DataSize: Integer); assembler; register; -asm - TEST ECX,ECX - JLE @Exit - PUSH EAX - MOV EAX,[EAX].TROHash_XOR32.FCRC - TEST ECX,1 - JE @@1 - XOR AX,[EDX] - INC EDX -@@1: SHR ECX,1 - JECXZ @@3 -@@2: ROL EAX,5 - XOR AX,[EDX] - ADD EDX,2 - DEC ECX - JNZ @@2 -@@3: POP EDX - MOV [EDX].TROHash_XOR32.FCRC,EAX -@Exit: -end; - -function TROHash_XOR32.DigestKey: Pointer; -begin - Result := @FCRC; -end; - -class function TROHash_CRC32.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 058h,0EEh,01Fh,031h -end; - -procedure TROHash_CRC32.Init; -begin - FCRC := $FFFFFFFF; - Protect(True); -end; - -procedure TROHash_CRC32.Calc(const Data; DataSize: Integer); assembler; register; -asm - PUSH EAX - MOV EAX,[EAX].TROHash_CRC32.FCRC - CALL CRC32 - POP EDX - MOV [EDX].TROHash_CRC32.FCRC,EAX -end; - -procedure TROHash_CRC32.Done; -begin - FCRC := not FCRC; - Protect(False); -end; - -class function TROHash_CRC16_CCITT.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0B0h,0D1h -end; - -procedure TROHash_CRC16_CCITT.Init; -begin - FCRC := $FFFF; - Protect(True); -end; - -procedure TROHash_CRC16_CCITT.Calc(const Data; DataSize: Integer); -asm - AND EDX,EDX - JZ @Exit - AND ECX,ECX - JLE @Exit - PUSH EAX - MOV AX,[EAX].TROHash_CRC16_CCITT.FCRC - PUSH EBX - PUSH EDI - XOR EBX,EBX - LEA EDI,CS:[OFFSET @CRC16] -@Start: MOV BL,AH - SHL AX,8 - MOV AL,[EDX] - XOR AX,[EDI + EBX * 2] - INC EDX - DEC ECX - JNZ @Start - POP EDI - POP EBX - POP EDX - MOV [EDX].TROHash_CRC16_CCITT.FCRC,AX -@Exit: RET - -@CRC16: DW 00000h, 01021h, 02042h, 03063h, 04084h, 050A5h, 060C6h, 070E7h - DW 08108h, 09129h, 0A14Ah, 0B16Bh, 0C18Ch, 0D1ADh, 0E1CEh, 0F1EFh - DW 01231h, 00210h, 03273h, 02252h, 052B5h, 04294h, 072F7h, 062D6h - DW 09339h, 08318h, 0B37Bh, 0A35Ah, 0D3BDh, 0C39Ch, 0F3FFh, 0E3DEh - DW 02462h, 03443h, 00420h, 01401h, 064E6h, 074C7h, 044A4h, 05485h - DW 0A56Ah, 0B54Bh, 08528h, 09509h, 0E5EEh, 0F5CFh, 0C5ACh, 0D58Dh - DW 03653h, 02672h, 01611h, 00630h, 076D7h, 066F6h, 05695h, 046B4h - DW 0B75Bh, 0A77Ah, 09719h, 08738h, 0F7DFh, 0E7FEh, 0D79Dh, 0C7BCh - DW 048C4h, 058E5h, 06886h, 078A7h, 00840h, 01861h, 02802h, 03823h - DW 0C9CCh, 0D9EDh, 0E98Eh, 0F9AFh, 08948h, 09969h, 0A90Ah, 0B92Bh - DW 05AF5h, 04AD4h, 07AB7h, 06A96h, 01A71h, 00A50h, 03A33h, 02A12h - DW 0DBFDh, 0CBDCh, 0FBBFh, 0EB9Eh, 09B79h, 08B58h, 0BB3Bh, 0AB1Ah - DW 06CA6h, 07C87h, 04CE4h, 05CC5h, 02C22h, 03C03h, 00C60h, 01C41h - DW 0EDAEh, 0FD8Fh, 0CDECh, 0DDCDh, 0AD2Ah, 0BD0Bh, 08D68h, 09D49h - DW 07E97h, 06EB6h, 05ED5h, 04EF4h, 03E13h, 02E32h, 01E51h, 00E70h - DW 0FF9Fh, 0EFBEh, 0DFDDh, 0CFFCh, 0BF1Bh, 0AF3Ah, 09F59h, 08F78h - DW 09188h, 081A9h, 0B1CAh, 0A1EBh, 0D10Ch, 0C12Dh, 0F14Eh, 0E16Fh - DW 01080h, 000A1h, 030C2h, 020E3h, 05004h, 04025h, 07046h, 06067h - DW 083B9h, 09398h, 0A3FBh, 0B3DAh, 0C33Dh, 0D31Ch, 0E37Fh, 0F35Eh - DW 002B1h, 01290h, 022F3h, 032D2h, 04235h, 05214h, 06277h, 07256h - DW 0B5EAh, 0A5CBh, 095A8h, 08589h, 0F56Eh, 0E54Fh, 0D52Ch, 0C50Dh - DW 034E2h, 024C3h, 014A0h, 00481h, 07466h, 06447h, 05424h, 04405h - DW 0A7DBh, 0B7FAh, 08799h, 097B8h, 0E75Fh, 0F77Eh, 0C71Dh, 0D73Ch - DW 026D3h, 036F2h, 00691h, 016B0h, 06657h, 07676h, 04615h, 05634h - DW 0D94Ch, 0C96Dh, 0F90Eh, 0E92Fh, 099C8h, 089E9h, 0B98Ah, 0A9ABh - DW 05844h, 04865h, 07806h, 06827h, 018C0h, 008E1h, 03882h, 028A3h - DW 0CB7Dh, 0DB5Ch, 0EB3Fh, 0FB1Eh, 08BF9h, 09BD8h, 0ABBBh, 0BB9Ah - DW 04A75h, 05A54h, 06A37h, 07A16h, 00AF1h, 01AD0h, 02AB3h, 03A92h - DW 0FD2Eh, 0ED0Fh, 0DD6Ch, 0CD4Dh, 0BDAAh, 0AD8Bh, 09DE8h, 08DC9h - DW 07C26h, 06C07h, 05C64h, 04C45h, 03CA2h, 02C83h, 01CE0h, 00CC1h - DW 0EF1Fh, 0FF3Eh, 0CF5Dh, 0DF7Ch, 0AF9Bh, 0BFBAh, 08FD9h, 09FF8h - DW 06E17h, 07E36h, 04E55h, 05E74h, 02E93h, 03EB2h, 00ED1h, 01EF0h -end; - -class function TROhash_CRC16_Standard.TestVector: Pointer; -asm - MOV EAX,OFFSET @Vector - RET -@Vector: DB 0EDh,075h -end; - -procedure TROhash_CRC16_Standard.Calc(const Data; DataSize: Integer); -asm - PUSH EAX - MOV AX,[EAX].TROhash_CRC16_Standard.FCRC - CALL CRC16 - POP EDX - MOV [EDX].TROhash_CRC16_Standard.FCRC,AX -end; -{$IFDEF VER_D3H} -procedure ModuleUnload(Module: Longword); -var - I: Integer; -begin - if IsObject(FHashList, TStringList) then - for I := HashList.Count-1 downto 0 do - if FindClassHInstance(TClass(FHashList.Objects[I])) = Module then - FHashList.Delete(I); -end; -{$ENDIF} - -initialization - if CPUType <= 3 then SHABuffer := SHABuffer386 else SHABuffer := SHABuffer486; -{$IFDEF VER_D3H} - AddModuleUnloadProc(ModuleUnload); -{$ENDIF} -{$IFNDEF ManualRegisterClasses} - RegisterHash(TROHash_MD4, 'Message Digest 4', 'RO_Hash'); - RegisterHash(TROHash_MD5, 'Message Digest 5', 'RO_Hash'); - RegisterHash(TROHash_SHA, 'Secure RO_Hash Algorithm', 'RO_Hash'); - RegisterHash(TROHash_SHA1, 'Secure RO_Hash Algorithm 1', 'RO_Hash'); - RegisterHash(TROHash_RipeMD128, 'Ripe Message Digest 128', 'RO_Hash'); - RegisterHash(TROHash_RipeMD160, 'Ripe Message Digest 160', 'RO_Hash'); - RegisterHash(TROHash_RipeMD256, 'Ripe Message Digest 256', 'RO_Hash'); - RegisterHash(TROHash_RipeMD320, 'Ripe Message Digest 320', 'RO_Hash'); - RegisterHash(TROHash_Haval128, 'Haval-128', 'RO_Hash'); - RegisterHash(TROHash_Haval160, 'Haval-160', 'RO_Hash'); - RegisterHash(TROHash_Haval192, 'Haval-192', 'RO_Hash'); - RegisterHash(TROHash_Haval224, 'Haval-224', 'RO_Hash'); - RegisterHash(TROHash_Haval256, 'Haval-256', 'RO_Hash'); - RegisterHash(TROHash_Sapphire128, 'Sapphire II-128', 'RO_Hash'); - RegisterHash(TROHash_Sapphire160, 'Sapphire II-160', 'RO_Hash'); - RegisterHash(TROHash_Sapphire192, 'Sapphire II-192', 'RO_Hash'); - RegisterHash(TROHash_Sapphire224, 'Sapphire II-224', 'RO_Hash'); - RegisterHash(TROHash_Sapphire256, 'Sapphire II-256', 'RO_Hash'); - RegisterHash(TROHash_Sapphire288, 'Sapphire II-288', 'RO_Hash'); - RegisterHash(TROHash_Sapphire320, 'Sapphire II-320', 'RO_Hash'); - RegisterHash(TROHash_Snefru, 'Snefru-256', 'RO_Hash'); - RegisterHash(TROHash_Square, 'Square', 'RO_Hash'); - RegisterHash(TROHash_Tiger, 'Tiger', 'RO_Hash'); - RegisterHash(TROHash_XOR16, 'XOR-16', 'Checksum'); - RegisterHash(TROHash_XOR32, 'XOR-32', 'Checksum'); - RegisterHash(TROHash_CRC16_CCITT, 'CRC-16 CCITT', 'Checksum'); - RegisterHash(TROhash_CRC16_Standard, 'CRC-16 Standard', 'Checksum'); - RegisterHash(TROHash_CRC32, 'CRC-32', 'Checksum'); -{$ENDIF} -finalization -{$IFDEF VER_D3H} - RemoveModuleUnloadProc(ModuleUnload); -{$ENDIF} - FHashList.Free; - FHashList := nil; -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.RES b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.RES deleted file mode 100644 index b5f037b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.RES and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.inc deleted file mode 100644 index 5d0736b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC1760.inc +++ /dev/null @@ -1,258 +0,0 @@ -const - RFC1760Entries : array[0..2047] of array[0..3] of Char = - ('A', 'ABE', 'ACE', 'ACT', 'AD', 'ADA', 'ADD', 'AGO', - 'AID', 'AIM', 'AIR', 'ALL', 'ALP', 'AM', 'AMY', 'AN', - 'ANA', 'AND', 'ANN', 'ANT', 'ANY', 'APE', 'APS', 'APT', - 'ARC', 'ARE', 'ARK', 'ARM', 'ART', 'AS', 'ASH', 'ASK', - 'AT', 'ATE', 'AUG', 'AUK', 'AVE', 'AWE', 'AWK', 'AWL', - 'AWN', 'AX', 'AYE', 'BAD', 'BAG', 'BAH', 'BAM', 'BAN', - 'BAR', 'BAT', 'BAY', 'BE', 'BED', 'BEE', 'BEG', 'BEN', - 'BET', 'BEY', 'BIB', 'BID', 'BIG', 'BIN', 'BIT', 'BOB', - 'BOG', 'BON', 'BOO', 'BOP', 'BOW', 'BOY', 'BUB', 'BUD', - 'BUG', 'BUM', 'BUN', 'BUS', 'BUT', 'BUY', 'BY', 'BYE', - 'CAB', 'CAL', 'CAM', 'CAN', 'CAP', 'CAR', 'CAT', 'CAW', - 'COD', 'COG', 'COL', 'CON', 'COO', 'COP', 'COT', 'COW', - 'COY', 'CRY', 'CUB', 'CUE', 'CUP', 'CUR', 'CUT', 'DAB', - 'DAD', 'DAM', 'DAN', 'DAR', 'DAY', 'DEE', 'DEL', 'DEN', - 'DES', 'DEW', 'DID', 'DIE', 'DIG', 'DIN', 'DIP', 'DO', - 'DOE', 'DOG', 'DON', 'DOT', 'DOW', 'DRY', 'DUB', 'DUD', - 'DUE', 'DUG', 'DUN', 'EAR', 'EAT', 'ED', 'EEL', 'EGG', - 'EGO', 'ELI', 'ELK', 'ELM', 'ELY', 'EM', 'END', 'EST', - 'ETC', 'EVA', 'EVE', 'EWE', 'EYE', 'FAD', 'FAN', 'FAR', - 'FAT', 'FAY', 'FED', 'FEE', 'FEW', 'FIB', 'FIG', 'FIN', - 'FIR', 'FIT', 'FLO', 'FLY', 'FOE', 'FOG', 'FOR', 'FRY', - 'FUM', 'FUN', 'FUR', 'GAB', 'GAD', 'GAG', 'GAL', 'GAM', - 'GAP', 'GAS', 'GAY', 'GEE', 'GEL', 'GEM', 'GET', 'GIG', - 'GIL', 'GIN', 'GO', 'GOT', 'GUM', 'GUN', 'GUS', 'GUT', - 'GUY', 'GYM', 'GYP', 'HA', 'HAD', 'HAL', 'HAM', 'HAN', - 'HAP', 'HAS', 'HAT', 'HAW', 'HAY', 'HE', 'HEM', 'HEN', - 'HER', 'HEW', 'HEY', 'HI', 'HID', 'HIM', 'HIP', 'HIS', - 'HIT', 'HO', 'HOB', 'HOC', 'HOE', 'HOG', 'HOP', 'HOT', - 'HOW', 'HUB', 'HUE', 'HUG', 'HUH', 'HUM', 'HUT', 'I', - 'ICY', 'IDA', 'IF', 'IKE', 'ILL', 'INK', 'INN', 'IO', - 'ION', 'IQ', 'IRA', 'IRE', 'IRK', 'IS', 'IT', 'ITS', - 'IVY', 'JAB', 'JAG', 'JAM', 'JAN', 'JAR', 'JAW', 'JAY', - 'JET', 'JIG', 'JIM', 'JO', 'JOB', 'JOE', 'JOG', 'JOT', - 'JOY', 'JUG', 'JUT', 'KAY', 'KEG', 'KEN', 'KEY', 'KID', - 'KIM', 'KIN', 'KIT', 'LA', 'LAB', 'LAC', 'LAD', 'LAG', - 'LAM', 'LAP', 'LAW', 'LAY', 'LEA', 'LED', 'LEE', 'LEG', - 'LEN', 'LEO', 'LET', 'LEW', 'LID', 'LIE', 'LIN', 'LIP', - 'LIT', 'LO', 'LOB', 'LOG', 'LOP', 'LOS', 'LOT', 'LOU', - 'LOW', 'LOY', 'LUG', 'LYE', 'MA', 'MAC', 'MAD', 'MAE', - 'MAN', 'MAO', 'MAP', 'MAT', 'MAW', 'MAY', 'ME', 'MEG', - 'MEL', 'MEN', 'MET', 'MEW', 'MID', 'MIN', 'MIT', 'MOB', - 'MOD', 'MOE', 'MOO', 'MOP', 'MOS', 'MOT', 'MOW', 'MUD', - 'MUG', 'MUM', 'MY', 'NAB', 'NAG', 'NAN', 'NAP', 'NAT', - 'NAY', 'NE', 'NED', 'NEE', 'NET', 'NEW', 'NIB', 'NIL', - 'NIP', 'NIT', 'NO', 'NOB', 'NOD', 'NON', 'NOR', 'NOT', - 'NOV', 'NOW', 'NU', 'NUN', 'NUT', 'O', 'OAF', 'OAK', - 'OAR', 'OAT', 'ODD', 'ODE', 'OF', 'OFF', 'OFT', 'OH', - 'OIL', 'OK', 'OLD', 'ON', 'ONE', 'OR', 'ORB', 'ORE', - 'ORR', 'OS', 'OTT', 'OUR', 'OUT', 'OVA', 'OW', 'OWE', - 'OWL', 'OWN', 'OX', 'PA', 'PAD', 'PAL', 'PAM', 'PAN', - 'PAP', 'PAR', 'PAT', 'PAW', 'PAY', 'PEA', 'PEG', 'PEN', - 'PEP', 'PER', 'PET', 'PEW', 'PHI', 'PI', 'PIE', 'PIN', - 'PIT', 'PLY', 'PO', 'POD', 'POE', 'POP', 'POT', 'POW', - 'PRO', 'PRY', 'PUB', 'PUG', 'PUN', 'PUP', 'PUT', 'QUO', - 'RAG', 'RAM', 'RAN', 'RAP', 'RAT', 'RAW', 'RAY', 'REB', - 'RED', 'REP', 'RET', 'RIB', 'RID', 'RIG', 'RIM', 'RIO', - 'RIP', 'ROB', 'ROD', 'ROE', 'RON', 'ROT', 'ROW', 'ROY', - 'RUB', 'RUE', 'RUG', 'RUM', 'RUN', 'RYE', 'SAC', 'SAD', - 'SAG', 'SAL', 'SAM', 'SAN', 'SAP', 'SAT', 'SAW', 'SAY', - 'SEA', 'SEC', 'SEE', 'SEN', 'SET', 'SEW', 'SHE', 'SHY', - 'SIN', 'SIP', 'SIR', 'SIS', 'SIT', 'SKI', 'SKY', 'SLY', - 'SO', 'SOB', 'SOD', 'SON', 'SOP', 'SOW', 'SOY', 'SPA', - 'SPY', 'SUB', 'SUD', 'SUE', 'SUM', 'SUN', 'SUP', 'TAB', - 'TAD', 'TAG', 'TAN', 'TAP', 'TAR', 'TEA', 'TED', 'TEE', - 'TEN', 'THE', 'THY', 'TIC', 'TIE', 'TIM', 'TIN', 'TIP', - 'TO', 'TOE', 'TOG', 'TOM', 'TON', 'TOO', 'TOP', 'TOW', - 'TOY', 'TRY', 'TUB', 'TUG', 'TUM', 'TUN', 'TWO', 'UN', - 'UP', 'US', 'USE', 'VAN', 'VAT', 'VET', 'VIE', 'WAD', - 'WAG', 'WAR', 'WAS', 'WAY', 'WE', 'WEB', 'WED', 'WEE', - 'WET', 'WHO', 'WHY', 'WIN', 'WIT', 'WOK', 'WON', 'WOO', - 'WOW', 'WRY', 'WU', 'YAM', 'YAP', 'YAW', 'YE', 'YEA', - 'YES', 'YET', 'YOU', 'ABED', 'ABEL', 'ABET', 'ABLE', 'ABUT', - 'ACHE', 'ACID', 'ACME', 'ACRE', 'ACTA', 'ACTS', 'ADAM', 'ADDS', - 'ADEN', 'AFAR', 'AFRO', 'AGEE', 'AHEM', 'AHOY', 'AIDA', 'AIDE', - 'AIDS', 'AIRY', 'AJAR', 'AKIN', 'ALAN', 'ALEC', 'ALGA', 'ALIA', - 'ALLY', 'ALMA', 'ALOE', 'ALSO', 'ALTO', 'ALUM', 'ALVA', 'AMEN', - 'AMES', 'AMID', 'AMMO', 'AMOK', 'AMOS', 'AMRA', 'ANDY', 'ANEW', - 'ANNA', 'ANNE', 'ANTE', 'ANTI', 'AQUA', 'ARAB', 'ARCH', 'AREA', - 'ARGO', 'ARID', 'ARMY', 'ARTS', 'ARTY', 'ASIA', 'ASKS', 'ATOM', - 'AUNT', 'AURA', 'AUTO', 'AVER', 'AVID', 'AVIS', 'AVON', 'AVOW', - 'AWAY', 'AWRY', 'BABE', 'BABY', 'BACH', 'BACK', 'BADE', 'BAIL', - 'BAIT', 'BAKE', 'BALD', 'BALE', 'BALI', 'BALK', 'BALL', 'BALM', - 'BAND', 'BANE', 'BANG', 'BANK', 'BARB', 'BARD', 'BARE', 'BARK', - 'BARN', 'BARR', 'BASE', 'BASH', 'BASK', 'BASS', 'BATE', 'BATH', - 'BAWD', 'BAWL', 'BEAD', 'BEAK', 'BEAM', 'BEAN', 'BEAR', 'BEAT', - 'BEAU', 'BECK', 'BEEF', 'BEEN', 'BEER', 'BEET', 'BELA', 'BELL', - 'BELT', 'BEND', 'BENT', 'BERG', 'BERN', 'BERT', 'BESS', 'BEST', - 'BETA', 'BETH', 'BHOY', 'BIAS', 'BIDE', 'BIEN', 'BILE', 'BILK', - 'BILL', 'BIND', 'BING', 'BIRD', 'BITE', 'BITS', 'BLAB', 'BLAT', - 'BLED', 'BLEW', 'BLOB', 'BLOC', 'BLOT', 'BLOW', 'BLUE', 'BLUM', - 'BLUR', 'BOAR', 'BOAT', 'BOCA', 'BOCK', 'BODE', 'BODY', 'BOGY', - 'BOHR', 'BOIL', 'BOLD', 'BOLO', 'BOLT', 'BOMB', 'BONA', 'BOND', - 'BONE', 'BONG', 'BONN', 'BONY', 'BOOK', 'BOOM', 'BOON', 'BOOT', - 'BORE', 'BORG', 'BORN', 'BOSE', 'BOSS', 'BOTH', 'BOUT', 'BOWL', - 'BOYD', 'BRAD', 'BRAE', 'BRAG', 'BRAN', 'BRAY', 'BRED', 'BREW', - 'BRIG', 'BRIM', 'BROW', 'BUCK', 'BUDD', 'BUFF', 'BULB', 'BULK', - 'BULL', 'BUNK', 'BUNT', 'BUOY', 'BURG', 'BURL', 'BURN', 'BURR', - 'BURT', 'BURY', 'BUSH', 'BUSS', 'BUST', 'BUSY', 'BYTE', 'CADY', - 'CAFE', 'CAGE', 'CAIN', 'CAKE', 'CALF', 'CALL', 'CALM', 'CAME', - 'CANE', 'CANT', 'CARD', 'CARE', 'CARL', 'CARR', 'CART', 'CASE', - 'CASH', 'CASK', 'CAST', 'CAVE', 'CEIL', 'CELL', 'CENT', 'CERN', - 'CHAD', 'CHAR', 'CHAT', 'CHAW', 'CHEF', 'CHEN', 'CHEW', 'CHIC', - 'CHIN', 'CHOU', 'CHOW', 'CHUB', 'CHUG', 'CHUM', 'CITE', 'CITY', - 'CLAD', 'CLAM', 'CLAN', 'CLAW', 'CLAY', 'CLOD', 'CLOG', 'CLOT', - 'CLUB', 'CLUE', 'COAL', 'COAT', 'COCA', 'COCK', 'COCO', 'CODA', - 'CODE', 'CODY', 'COED', 'COIL', 'COIN', 'COKE', 'COLA', 'COLD', - 'COLT', 'COMA', 'COMB', 'COME', 'COOK', 'COOL', 'COON', 'COOT', - 'CORD', 'CORE', 'CORK', 'CORN', 'COST', 'COVE', 'COWL', 'CRAB', - 'CRAG', 'CRAM', 'CRAY', 'CREW', 'CRIB', 'CROW', 'CRUD', 'CUBA', - 'CUBE', 'CUFF', 'CULL', 'CULT', 'CUNY', 'CURB', 'CURD', 'CURE', - 'CURL', 'CURT', 'CUTS', 'DADE', 'DALE', 'DAME', 'DANA', 'DANE', - 'DANG', 'DANK', 'DARE', 'DARK', 'DARN', 'DART', 'DASH', 'DATA', - 'DATE', 'DAVE', 'DAVY', 'DAWN', 'DAYS', 'DEAD', 'DEAF', 'DEAL', - 'DEAN', 'DEAR', 'DEBT', 'DECK', 'DEED', 'DEEM', 'DEER', 'DEFT', - 'DEFY', 'DELL', 'DENT', 'DENY', 'DESK', 'DIAL', 'DICE', 'DIED', - 'DIET', 'DIME', 'DINE', 'DING', 'DINT', 'DIRE', 'DIRT', 'DISC', - 'DISH', 'DISK', 'DIVE', 'DOCK', 'DOES', 'DOLE', 'DOLL', 'DOLT', - 'DOME', 'DONE', 'DOOM', 'DOOR', 'DORA', 'DOSE', 'DOTE', 'DOUG', - 'DOUR', 'DOVE', 'DOWN', 'DRAB', 'DRAG', 'DRAM', 'DRAW', 'DREW', - 'DRUB', 'DRUG', 'DRUM', 'DUAL', 'DUCK', 'DUCT', 'DUEL', 'DUET', - 'DUKE', 'DULL', 'DUMB', 'DUNE', 'DUNK', 'DUSK', 'DUST', 'DUTY', - 'EACH', 'EARL', 'EARN', 'EASE', 'EAST', 'EASY', 'EBEN', 'ECHO', - 'EDDY', 'EDEN', 'EDGE', 'EDGY', 'EDIT', 'EDNA', 'EGAN', 'ELAN', - 'ELBA', 'ELLA', 'ELSE', 'EMIL', 'EMIT', 'EMMA', 'ENDS', 'ERIC', - 'EROS', 'EVEN', 'EVER', 'EVIL', 'EYED', 'FACE', 'FACT', 'FADE', - 'FAIL', 'FAIN', 'FAIR', 'FAKE', 'FALL', 'FAME', 'FANG', 'FARM', - 'FAST', 'FATE', 'FAWN', 'FEAR', 'FEAT', 'FEED', 'FEEL', 'FEET', - 'FELL', 'FELT', 'FEND', 'FERN', 'FEST', 'FEUD', 'FIEF', 'FIGS', - 'FILE', 'FILL', 'FILM', 'FIND', 'FINE', 'FINK', 'FIRE', 'FIRM', - 'FISH', 'FISK', 'FIST', 'FITS', 'FIVE', 'FLAG', 'FLAK', 'FLAM', - 'FLAT', 'FLAW', 'FLEA', 'FLED', 'FLEW', 'FLIT', 'FLOC', 'FLOG', - 'FLOW', 'FLUB', 'FLUE', 'FOAL', 'FOAM', 'FOGY', 'FOIL', 'FOLD', - 'FOLK', 'FOND', 'FONT', 'FOOD', 'FOOL', 'FOOT', 'FORD', 'FORE', - 'FORK', 'FORM', 'FORT', 'FOSS', 'FOUL', 'FOUR', 'FOWL', 'FRAU', - 'FRAY', 'FRED', 'FREE', 'FRET', 'FREY', 'FROG', 'FROM', 'FUEL', - 'FULL', 'FUME', 'FUND', 'FUNK', 'FURY', 'FUSE', 'FUSS', 'GAFF', - 'GAGE', 'GAIL', 'GAIN', 'GAIT', 'GALA', 'GALE', 'GALL', 'GALT', - 'GAME', 'GANG', 'GARB', 'GARY', 'GASH', 'GATE', 'GAUL', 'GAUR', - 'GAVE', 'GAWK', 'GEAR', 'GELD', 'GENE', 'GENT', 'GERM', 'GETS', - 'GIBE', 'GIFT', 'GILD', 'GILL', 'GILT', 'GINA', 'GIRD', 'GIRL', - 'GIST', 'GIVE', 'GLAD', 'GLEE', 'GLEN', 'GLIB', 'GLOB', 'GLOM', - 'GLOW', 'GLUE', 'GLUM', 'GLUT', 'GOAD', 'GOAL', 'GOAT', 'GOER', - 'GOES', 'GOLD', 'GOLF', 'GONE', 'GONG', 'GOOD', 'GOOF', 'GORE', - 'GORY', 'GOSH', 'GOUT', 'GOWN', 'GRAB', 'GRAD', 'GRAY', 'GREG', - 'GREW', 'GREY', 'GRID', 'GRIM', 'GRIN', 'GRIT', 'GROW', 'GRUB', - 'GULF', 'GULL', 'GUNK', 'GURU', 'GUSH', 'GUST', 'GWEN', 'GWYN', - 'HAAG', 'HAAS', 'HACK', 'HAIL', 'HAIR', 'HALE', 'HALF', 'HALL', - 'HALO', 'HALT', 'HAND', 'HANG', 'HANK', 'HANS', 'HARD', 'HARK', - 'HARM', 'HART', 'HASH', 'HAST', 'HATE', 'HATH', 'HAUL', 'HAVE', - 'HAWK', 'HAYS', 'HEAD', 'HEAL', 'HEAR', 'HEAT', 'HEBE', 'HECK', - 'HEED', 'HEEL', 'HEFT', 'HELD', 'HELL', 'HELM', 'HERB', 'HERD', - 'HERE', 'HERO', 'HERS', 'HESS', 'HEWN', 'HICK', 'HIDE', 'HIGH', - 'HIKE', 'HILL', 'HILT', 'HIND', 'HINT', 'HIRE', 'HISS', 'HIVE', - 'HOBO', 'HOCK', 'HOFF', 'HOLD', 'HOLE', 'HOLM', 'HOLT', 'HOME', - 'HONE', 'HONK', 'HOOD', 'HOOF', 'HOOK', 'HOOT', 'HORN', 'HOSE', - 'HOST', 'HOUR', 'HOVE', 'HOWE', 'HOWL', 'HOYT', 'HUCK', 'HUED', - 'HUFF', 'HUGE', 'HUGH', 'HUGO', 'HULK', 'HULL', 'HUNK', 'HUNT', - 'HURD', 'HURL', 'HURT', 'HUSH', 'HYDE', 'HYMN', 'IBIS', 'ICON', - 'IDEA', 'IDLE', 'IFFY', 'INCA', 'INCH', 'INTO', 'IONS', 'IOTA', - 'IOWA', 'IRIS', 'IRMA', 'IRON', 'ISLE', 'ITCH', 'ITEM', 'IVAN', - 'JACK', 'JADE', 'JAIL', 'JAKE', 'JANE', 'JAVA', 'JEAN', 'JEFF', - 'JERK', 'JESS', 'JEST', 'JIBE', 'JILL', 'JILT', 'JIVE', 'JOAN', - 'JOBS', 'JOCK', 'JOEL', 'JOEY', 'JOHN', 'JOIN', 'JOKE', 'JOLT', - 'JOVE', 'JUDD', 'JUDE', 'JUDO', 'JUDY', 'JUJU', 'JUKE', 'JULY', - 'JUNE', 'JUNK', 'JUNO', 'JURY', 'JUST', 'JUTE', 'KAHN', 'KALE', - 'KANE', 'KANT', 'KARL', 'KATE', 'KEEL', 'KEEN', 'KENO', 'KENT', - 'KERN', 'KERR', 'KEYS', 'KICK', 'KILL', 'KIND', 'KING', 'KIRK', - 'KISS', 'KITE', 'KLAN', 'KNEE', 'KNEW', 'KNIT', 'KNOB', 'KNOT', - 'KNOW', 'KOCH', 'KONG', 'KUDO', 'KURD', 'KURT', 'KYLE', 'LACE', - 'LACK', 'LACY', 'LADY', 'LAID', 'LAIN', 'LAIR', 'LAKE', 'LAMB', - 'LAME', 'LAND', 'LANE', 'LANG', 'LARD', 'LARK', 'LASS', 'LAST', - 'LATE', 'LAUD', 'LAVA', 'LAWN', 'LAWS', 'LAYS', 'LEAD', 'LEAF', - 'LEAK', 'LEAN', 'LEAR', 'LEEK', 'LEER', 'LEFT', 'LEND', 'LENS', - 'LENT', 'LEON', 'LESK', 'LESS', 'LEST', 'LETS', 'LIAR', 'LICE', - 'LICK', 'LIED', 'LIEN', 'LIES', 'LIEU', 'LIFE', 'LIFT', 'LIKE', - 'LILA', 'LILT', 'LILY', 'LIMA', 'LIMB', 'LIME', 'LIND', 'LINE', - 'LINK', 'LINT', 'LION', 'LISA', 'LIST', 'LIVE', 'LOAD', 'LOAF', - 'LOAM', 'LOAN', 'LOCK', 'LOFT', 'LOGE', 'LOIS', 'LOLA', 'LONE', - 'LONG', 'LOOK', 'LOON', 'LOOT', 'LORD', 'LORE', 'LOSE', 'LOSS', - 'LOST', 'LOUD', 'LOVE', 'LOWE', 'LUCK', 'LUCY', 'LUGE', 'LUKE', - 'LULU', 'LUND', 'LUNG', 'LURA', 'LURE', 'LURK', 'LUSH', 'LUST', - 'LYLE', 'LYNN', 'LYON', 'LYRA', 'MACE', 'MADE', 'MAGI', 'MAID', - 'MAIL', 'MAIN', 'MAKE', 'MALE', 'MALI', 'MALL', 'MALT', 'MANA', - 'MANN', 'MANY', 'MARC', 'MARE', 'MARK', 'MARS', 'MART', 'MARY', - 'MASH', 'MASK', 'MASS', 'MAST', 'MATE', 'MATH', 'MAUL', 'MAYO', - 'MEAD', 'MEAL', 'MEAN', 'MEAT', 'MEEK', 'MEET', 'MELD', 'MELT', - 'MEMO', 'MEND', 'MENU', 'MERT', 'MESH', 'MESS', 'MICE', 'MIKE', - 'MILD', 'MILE', 'MILK', 'MILL', 'MILT', 'MIMI', 'MIND', 'MINE', - 'MINI', 'MINK', 'MINT', 'MIRE', 'MISS', 'MIST', 'MITE', 'MITT', - 'MOAN', 'MOAT', 'MOCK', 'MODE', 'MOLD', 'MOLE', 'MOLL', 'MOLT', - 'MONA', 'MONK', 'MONT', 'MOOD', 'MOON', 'MOOR', 'MOOT', 'MORE', - 'MORN', 'MORT', 'MOSS', 'MOST', 'MOTH', 'MOVE', 'MUCH', 'MUCK', - 'MUDD', 'MUFF', 'MULE', 'MULL', 'MURK', 'MUSH', 'MUST', 'MUTE', - 'MUTT', 'MYRA', 'MYTH', 'NAGY', 'NAIL', 'NAIR', 'NAME', 'NARY', - 'NASH', 'NAVE', 'NAVY', 'NEAL', 'NEAR', 'NEAT', 'NECK', 'NEED', - 'NEIL', 'NELL', 'NEON', 'NERO', 'NESS', 'NEST', 'NEWS', 'NEWT', - 'NIBS', 'NICE', 'NICK', 'NILE', 'NINA', 'NINE', 'NOAH', 'NODE', - 'NOEL', 'NOLL', 'NONE', 'NOOK', 'NOON', 'NORM', 'NOSE', 'NOTE', - 'NOUN', 'NOVA', 'NUDE', 'NULL', 'NUMB', 'OATH', 'OBEY', 'OBOE', - 'ODIN', 'OHIO', 'OILY', 'OINT', 'OKAY', 'OLAF', 'OLDY', 'OLGA', - 'OLIN', 'OMAN', 'OMEN', 'OMIT', 'ONCE', 'ONES', 'ONLY', 'ONTO', - 'ONUS', 'ORAL', 'ORGY', 'OSLO', 'OTIS', 'OTTO', 'OUCH', 'OUST', - 'OUTS', 'OVAL', 'OVEN', 'OVER', 'OWLY', 'OWNS', 'QUAD', 'QUIT', - 'QUOD', 'RACE', 'RACK', 'RACY', 'RAFT', 'RAGE', 'RAID', 'RAIL', - 'RAIN', 'RAKE', 'RANK', 'RANT', 'RARE', 'RASH', 'RATE', 'RAVE', - 'RAYS', 'READ', 'REAL', 'REAM', 'REAR', 'RECK', 'REED', 'REEF', - 'REEK', 'REEL', 'REID', 'REIN', 'RENA', 'REND', 'RENT', 'REST', - 'RICE', 'RICH', 'RICK', 'RIDE', 'RIFT', 'RILL', 'RIME', 'RING', - 'RINK', 'RISE', 'RISK', 'RITE', 'ROAD', 'ROAM', 'ROAR', 'ROBE', - 'ROCK', 'RODE', 'ROIL', 'ROLL', 'ROME', 'ROOD', 'ROOF', 'ROOK', - 'ROOM', 'ROOT', 'ROSA', 'ROSE', 'ROSS', 'ROSY', 'ROTH', 'ROUT', - 'ROVE', 'ROWE', 'ROWS', 'RUBE', 'RUBY', 'RUDE', 'RUDY', 'RUIN', - 'RULE', 'RUNG', 'RUNS', 'RUNT', 'RUSE', 'RUSH', 'RUSK', 'RUSS', - 'RUST', 'RUTH', 'SACK', 'SAFE', 'SAGE', 'SAID', 'SAIL', 'SALE', - 'SALK', 'SALT', 'SAME', 'SAND', 'SANE', 'SANG', 'SANK', 'SARA', - 'SAUL', 'SAVE', 'SAYS', 'SCAN', 'SCAR', 'SCAT', 'SCOT', 'SEAL', - 'SEAM', 'SEAR', 'SEAT', 'SEED', 'SEEK', 'SEEM', 'SEEN', 'SEES', - 'SELF', 'SELL', 'SEND', 'SENT', 'SETS', 'SEWN', 'SHAG', 'SHAM', - 'SHAW', 'SHAY', 'SHED', 'SHIM', 'SHIN', 'SHOD', 'SHOE', 'SHOT', - 'SHOW', 'SHUN', 'SHUT', 'SICK', 'SIDE', 'SIFT', 'SIGH', 'SIGN', - 'SILK', 'SILL', 'SILO', 'SILT', 'SINE', 'SING', 'SINK', 'SIRE', - 'SITE', 'SITS', 'SITU', 'SKAT', 'SKEW', 'SKID', 'SKIM', 'SKIN', - 'SKIT', 'SLAB', 'SLAM', 'SLAT', 'SLAY', 'SLED', 'SLEW', 'SLID', - 'SLIM', 'SLIT', 'SLOB', 'SLOG', 'SLOT', 'SLOW', 'SLUG', 'SLUM', - 'SLUR', 'SMOG', 'SMUG', 'SNAG', 'SNOB', 'SNOW', 'SNUB', 'SNUG', - 'SOAK', 'SOAR', 'SOCK', 'SODA', 'SOFA', 'SOFT', 'SOIL', 'SOLD', - 'SOME', 'SONG', 'SOON', 'SOOT', 'SORE', 'SORT', 'SOUL', 'SOUR', - 'SOWN', 'STAB', 'STAG', 'STAN', 'STAR', 'STAY', 'STEM', 'STEW', - 'STIR', 'STOW', 'STUB', 'STUN', 'SUCH', 'SUDS', 'SUIT', 'SULK', - 'SUMS', 'SUNG', 'SUNK', 'SURE', 'SURF', 'SWAB', 'SWAG', 'SWAM', - 'SWAN', 'SWAT', 'SWAY', 'SWIM', 'SWUM', 'TACK', 'TACT', 'TAIL', - 'TAKE', 'TALE', 'TALK', 'TALL', 'TANK', 'TASK', 'TATE', 'TAUT', - 'TEAL', 'TEAM', 'TEAR', 'TECH', 'TEEM', 'TEEN', 'TEET', 'TELL', - 'TEND', 'TENT', 'TERM', 'TERN', 'TESS', 'TEST', 'THAN', 'THAT', - 'THEE', 'THEM', 'THEN', 'THEY', 'THIN', 'THIS', 'THUD', 'THUG', - 'TICK', 'TIDE', 'TIDY', 'TIED', 'TIER', 'TILE', 'TILL', 'TILT', - 'TIME', 'TINA', 'TINE', 'TINT', 'TINY', 'TIRE', 'TOAD', 'TOGO', - 'TOIL', 'TOLD', 'TOLL', 'TONE', 'TONG', 'TONY', 'TOOK', 'TOOL', - 'TOOT', 'TORE', 'TORN', 'TOTE', 'TOUR', 'TOUT', 'TOWN', 'TRAG', - 'TRAM', 'TRAY', 'TREE', 'TREK', 'TRIG', 'TRIM', 'TRIO', 'TROD', - 'TROT', 'TROY', 'TRUE', 'TUBA', 'TUBE', 'TUCK', 'TUFT', 'TUNA', - 'TUNE', 'TUNG', 'TURF', 'TURN', 'TUSK', 'TWIG', 'TWIN', 'TWIT', - 'ULAN', 'UNIT', 'URGE', 'USED', 'USER', 'USES', 'UTAH', 'VAIL', - 'VAIN', 'VALE', 'VARY', 'VASE', 'VAST', 'VEAL', 'VEDA', 'VEIL', - 'VEIN', 'VEND', 'VENT', 'VERB', 'VERY', 'VETO', 'VICE', 'VIEW', - 'VINE', 'VISE', 'VOID', 'VOLT', 'VOTE', 'WACK', 'WADE', 'WAGE', - 'WAIL', 'WAIT', 'WAKE', 'WALE', 'WALK', 'WALL', 'WALT', 'WAND', - 'WANE', 'WANG', 'WANT', 'WARD', 'WARM', 'WARN', 'WART', 'WASH', - 'WAST', 'WATS', 'WATT', 'WAVE', 'WAVY', 'WAYS', 'WEAK', 'WEAL', - 'WEAN', 'WEAR', 'WEED', 'WEEK', 'WEIR', 'WELD', 'WELL', 'WELT', - 'WENT', 'WERE', 'WERT', 'WEST', 'WHAM', 'WHAT', 'WHEE', 'WHEN', - 'WHET', 'WHOA', 'WHOM', 'WICK', 'WIFE', 'WILD', 'WILL', 'WIND', - 'WINE', 'WING', 'WINK', 'WINO', 'WIRE', 'WISE', 'WISH', 'WITH', - 'WOLF', 'WONT', 'WOOD', 'WOOL', 'WORD', 'WORE', 'WORK', 'WORM', - 'WORN', 'WOVE', 'WRIT', 'WYNN', 'YALE', 'YANG', 'YANK', 'YARD', - 'YARN', 'YAWL', 'YAWN', 'YEAH', 'YEAR', 'YELL', 'YOGA', 'YOKE'); diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC2289.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC2289.pas deleted file mode 100644 index 59d04d9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORFC2289.pas +++ /dev/null @@ -1,622 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0, Delphi Encryption Compendium - Delphi 2-4, BCB 3-4, designed and testet under D3 and D4 - Description: RFC1938 Standard One Time Password Routines "otp-" - RO_RFC2289 Standard One Time Password Routines "otp-" - RFC2444 Standard One Time Password Routines "otp-" "ext" - RFC1760 S/Key One Time Password Routines "s/key" - RFC1760 Six Word String Converting - - Remarks: The RFC1760 Six Word Converting in these Library is an - extended (modified) Version. Normaly works the Standard - RFC1760 ONLY with 64 Bit (8 Bytes) Inputs, Six Words Output (66 Bit) - and a Dictionary with 2048 Entries. - The here implemented Version is absolutly compatible with - Standard RFC1760 but works with any Sizes and other - userdefined Dictionary's with variable Entrycount. - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -} -unit uRORFC2289; - -interface - -uses Windows, SysUtils, Classes, uROHash, uRODECUtil; - -{$I uROVer.inc} - -const - fmtRFC1760 = 1760; // New StringFormat - -type - EROOTPException = class(Exception); - - TROOneTimePassword = class(TComponent) - private - FSeed: String; - FIdent: String; - FHash: TROHashClass; - FCount: Cardinal; - FExtended: Boolean; - FFormat: Integer; - FLastOTP: String; - function GetChallenge: String; - procedure SetChallenge(Value: String); - function GetAlgorithm: String; - procedure SetAlgorithm(Value: String); - procedure SetIdent(Value: String); - procedure SetHash(Value: TROHashClass); - procedure SetSeed(Value: String); - protected - function Calc(const Value: String; ACount: Integer): String; - public - constructor Create(AOwner: TComponent); override; - - function Execute(const Password: String): String; - function Check(const OTP: String): Boolean; - procedure Next(const OTP: String); - - function NextPhrase(const OTP: String; ACount: Integer): String; - function FirstPhrase(const Password: String): String; - - property LastOTP: String read FLastOTP write FLastOTP; - property RO_Hash: TROHashClass read FHash write SetHash stored False; - published - property Algorithm: String read GetAlgorithm write SetAlgorithm stored False; - property Ident: String read FIdent write SetIdent stored False; - property Count: Cardinal read FCount write FCount stored False; - property Seed: String read FSeed write SetSeed stored False; - property Extended: Boolean read FExtended write FExtended stored False; - property Format: Integer read FFormat write FFormat default fmtRFC1760; - - property Challenge: String read GetChallenge write SetChallenge; - end; - - PDictionary = ^TDictionary; - TDictionary = packed record - EntryCRC: LongWord; // computed CRC - EntryCount: Integer; // count of Words in Entries - EntrySize: Integer; // size of one Word in Entries - Entries: array[0..0] of Char; // the Dictionary - end; - -// TStringFormat_RFC1760Class = class of TROStringFormat_RFC1760; - - TROStringFormat_RFC1760 = class(TROStringFormat) - private - class function GetDict: PDictionary; - protected - class function Dictionary: PDictionary; virtual; - public - class function ToStr(Value: PChar; Len: Integer): String; override; - class function StrTo(Value: PChar; Len: Integer): String; override; - class function Format: Integer; override; - class function IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; override; - end; - - -// convert any OTP- HEX or WORD Format to ToFormat -function OTPFormat(const Value: String; ToFormat: Integer): String; - -implementation - -uses uRODECConst; - -{$R uRORFC1760.RES} - -const - SepChars = [#0,#9,#10,#13,#32,',',';',':','$','(',')','[',']'] + - ['{','}','-','"','''','\','/','+','*']; - RFC1760Dict : PDictionary = nil; // Standard RFC1760 Dictionary Resource - -function OTPFormat(const Value: String; ToFormat: Integer): String; -var - I: Integer; -begin - Result := Value; - if Result = '' then Exit; - I := Pos(sOTPWord, AnsiLowerCase(Result)); - if I > 0 then - begin - Delete(Result, 1, I + Length(sOTPWord) -1); - I := fmtRFC1760; - end else - begin - I := Pos(sOTPHex, AnsiLowerCase(Result)); - if I > 0 then - begin - Delete(Result, 1, I + Length(sOTPHex) -1); - I := fmtHEX; - end else I := fmtRFC1760; - end; - try - Result := FormatToStr(PChar(Result), -1, I); - except - if I <> fmtRFC1760 then raise - else Result := FormatToStr(PChar(Result), -1, fmtHEX) - end; - Result := StrToFormat(PChar(Result), Length(Result), ToFormat); -end; - -function TROOneTimePassword.GetChallenge: String; -begin - if FHash = nil then FHash := TROHash_MD4; - if Trim(FSeed) = '' then - begin - SetLength(FSeed, 2); - RndXORBuffer(RndTimeSeed, PChar(FSeed)^, 2); - FSeed := StrToFormat(PChar(FSeed), 2, fmtHEX); - end; - Result := FIdent; - if AnsiCompareText(FIdent, sSKeyIdent) <> 0 then - Result := Result + GetShortClassName(FHash); - Result := Result + ' ' + IntToStr(FCount) + ' ' + FSeed; - if FExtended then Result := Result + ' ' + sOTPExt; -end; - -procedure TROOneTimePassword.SetChallenge(Value: String); -type - TCharSet = set of Char; - - function CheckAlpha(const Value: String; Chars: TCharSet): Boolean; - var - I: Integer; - begin - Result := False; - for I := 1 to Length(Value) do - if not (Value[I] in Chars) then Exit; - Result := True; - end; - -var - I: Integer; - P,T,L: PChar; - S: String; - H: TROHashClass; - C: Integer; - E: Boolean; -begin - if Trim(Value) = '' then - begin - FHash := TROHash_MD4; - FIdent := sOTPIdent; - FExtended := False; - FSeed := ''; - FCount := 0; - Exit; - end; - H := nil; - C := -1; - E := False; - try - P := PChar(Value); - L := StrEnd(P); - I := Pos(sOTPIdent, AnsiLowerCase(Value)); // check of "otp-" - if I > 0 then // it's a RO_RFC2289 Challenge - begin - Inc(P, I + Length(sOTPIdent) - 1); - T := P; - if T >= L then Exit; - while not (T^ in SepChars) do Inc(T); // find End - if T >= L then Exit; - S := P; - SetLength(S, T - P); // Algo Ident currect used "md4", "md5", "sha1" - H := GetHashClass(S); - end else - begin - I := Pos(sSKeyIdent, AnsiLowerCase(Value)); // check of "s/key" - if I = 0 then Exit; // isn't a RFC1760 Challenge - Inc(P, I + Length(sSKeyIdent) - 1); - T := P; - if T >= L then Exit; - H := TROHash_MD4; - end; - while T^ in SepChars do Inc(T); // find next Begin - if T >= L then Exit; - P := T; - while not (T^ in SepChars) do Inc(T); // find End - if T >= L then Exit; - S := P; - SetLength(S, T - P); // extract Count Value - C := StrToIntDef(S, -1); // convert to Integer - while T^ in SepChars do Inc(T); // find next Begin - if T > L then Exit; - P := T; - while not (T^ in SepChars) do Inc(T); // find End - if T > L then Exit; - S := P; - SetLength(S, T - P); // extract Seed Value - while T^ in SepChars do Inc(T); // find next Begin - if T > L then Exit; - E := StrLIComp(T, PChar(sOTPExt), Length(sOTPExt)) = 0; - finally - if (H = nil) or (C < 0) then - raise EROOTPException.Create(sInvalidChallenge); - if (S = '') or not CheckAlpha(S, ['a'..'z', 'A'..'Z', '0'..'9']) then - raise EROOTPException.Create(sInvalidSeed); - FHash := H; - FSeed := S; - FCount := C; - FExtended := E; - end; -end; - -function TROOneTimePassword.GetAlgorithm: String; -begin - Result := GetHashName(FHash); -end; - -procedure TROOneTimePassword.SetAlgorithm(Value: String); -begin - SetHash(GetHashClass(Value)); -end; - -procedure TROOneTimePassword.SetIdent(Value: String); -begin - FIdent := Value; - if AnsiCompareText(FIdent, sSKeyIdent) = 0 then FHash := TROHash_MD4; -end; - -procedure TROOneTimePassword.SetHash(Value: TROHashClass); -begin - FHash := Value; - if (FHash = nil) or - (FHash.DigestKeySize < 16) or - FHash.InheritsFrom(TROChecksum) then FHash := TROHash_MD4 else - if (AnsiCompareText(FIdent, sSKeyIdent) = 0) and (FHash <> TROHash_MD4) then - FIdent := sOTPIdent; -end; - -procedure TROOneTimePassword.SetSeed(Value: String); -var - I: Integer; -begin - FSeed := Value; - for I := Length(FSeed) downto 1 do - if not (FSeed[I] in ['a'..'z', 'A'..'Z', '0'..'9']) then Delete(FSeed, I, 1); -end; - -constructor TROOneTimePassword.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - SetChallenge(''); - FFormat := fmtRFC1760; -end; - -function TROOneTimePassword.Calc(const Value: String; ACount: Integer): String; -var - I: Integer; -begin - if (FHash = nil) or (ACount < 0) then - raise EROOTPException.Create(sInvalidCalc); - Result := Value; - repeat - Result := FHash.CalcBuffer(PChar(Result)^, Length(Result), nil, fmtCOPY); -// Fold the Digest to 8 Bytes - I := 8; - repeat - XORBuffers(PChar(Result), @PChar(Result)[I], 8, PChar(Result)); - Inc(I, 8); - until I >= FHash.DigestKeySize; -// convert Endianes - if FHash.InheritsFrom(TROHash_SHA) then - SwapIntegerBuffer(PChar(Result), PChar(Result), 2); -// truncate the Result - SetLength(Result, 8); - Dec(ACount); - until ACount < 0; -end; - -function TROOneTimePassword.Execute(const Password: String): String; -begin - Result := Calc(AnsiLowerCase(FSeed) + Password, Count); - Result := StrToFormat(PChar(Result), 8, Format); - if FExtended then - with StringFormat(Format) do - if InheritsFrom(TROStringFormat_RFC1760) then Result := sOTPWord + Result else - if InheritsFrom(TROStringFormat_HEX) then Result := sOTPHex + Result; -end; - -procedure TROOneTimePassword.Next(const OTP: String); -begin - FLastOTP := OTP; - Dec(FCount); -end; - -function TROOneTimePassword.Check(const OTP: String): Boolean; -begin - Result := Calc(OTPFormat(OTP, fmtCOPY), 0) = OTPFormat(FLastOTP, fmtCOPY); -end; - -function TROOneTimePassword.FirstPhrase(const Password: String): String; -begin - Result := Calc(AnsiLowerCase(FSeed) + Password, 0); - Result := StrToFormat(PChar(Result), 8, Format); -end; - -function TROOneTimePassword.NextPhrase(const OTP: String; ACount: Integer): String; -begin - Result := Calc(OTPFormat(OTP, fmtCOPY), ACount); - Result := StrToFormat(PChar(Result), 8, Format); -end; - -// RFC1760 Six Word String Format -class function TROStringFormat_RFC1760.GetDict: PDictionary; -begin - Result := Dictionary; - if (Result = nil) or - (Result.EntryCount <= 0) or - (Result.EntrySize <= 0) then - raise EROStringFormat.CreateFMT(sInvalidDictionary, [GetShortClassName(Self)]); -end; - -class function TROStringFormat_RFC1760.Dictionary: PDictionary; -{ Standard RFC1760 Dictionary Format - - TDictionary = packed record - EntryCount = 2048; - EntrySize = 4; - EntryCRC = $94CE8163; a standard CRC32 Checksum - Entries = array[0..2047] of array[0..3] of Char; see RFC1760.INC - end; -} -begin - if RFC1760Dict = nil then // Load Dictionary from resource - begin - RFC1760Dict := LockResource(LoadResource(HInstance, FindResource(HInstance, - PChar(GetShortClassName(Self)), RT_RCDATA))); - if RFC1760Dict <> nil then - with RFC1760Dict^ do - if EntryCRC <> not CRC32($FFFFFFFF, @Entries, EntryCount * EntrySize) then - begin // Resource is modified, any Hacker present ?! :-) - FreeResource(Integer(RFC1760Dict)); - RFC1760Dict := nil; - end; - end; - Result := RFC1760Dict; -end; - -function ExtractBits(Value: PChar; BitOffset, Bits, MaxLen: Integer): Integer; -var // Extract from BitOffset count Bits - I: Integer; -begin - Result := 0; - for I := BitOffset div 8 -1 to BitOffset div 8 + 2 do - begin - Result := Result shl 8; - if (I >= 0) and (I * 8 <= MaxLen) then - Result := Result or PByteArray(Value)[I]; - end; - Result := (Result shr (24 - Bits - BitOffset mod 8)) and (1 shl Bits -1); - if BitOffset + Bits > MaxLen then - Result := Result and not (1 shl (BitOffset + Bits - MaxLen) - 1); -end; - -class function TROStringFormat_RFC1760.ToStr(Value: PChar; Len: Integer): String; - - function FindEntry(Dictionay: PDictionary; Entry: PChar): Integer; register; - asm - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - - MOV ESI,EDX - MOV DL,[ESI] - MOV EBX,[EAX].TDictionary.EntrySize - MOV EBP,EBX - MOV ECX,[EAX].TDictionary.EntryCount - LEA EDI,[EAX].TDictionary.Entries - XOR EAX,EAX - JMP @@2 - -@@1: ADD EDI,EBP -@@2: CMP DL,[EDI] - JZ @@4 -@@3: INC EAX - DEC ECX - JNZ @@1 - MOV EAX,-1 - JMP @@6 -@@4: MOV EBX,EBP -@@5: DEC EBX - JZ @@6 - MOV DH,[ESI + EBX] - CMP DH,[EDI + EBX] - JNZ @@3 - JMP @@5 - -@@6: POP EBP - POP EBX - POP ESI - POP EDI - end; - -var - Last,T,R: PChar; - Entry: String; - Dict: PDictionary; - Index: Integer; - Bits: Integer; - Offs: Integer; - Parity: Integer; -begin - Result := ''; - Dict := Dictionary; - if Dict = nil then Exit; - Bits := MSBit(Dict.EntryCount); - Last := Value + Len; - SetLength(Entry, Dict.EntrySize); - SetLength(Result, Len * Dict.EntrySize); // allocate enough Space - FillChar(PChar(Result)^, Len * Dict.EntrySize, 0); - R := PChar(Result); - Offs := 0; - repeat -// Extract one Word - while Value^ in SepChars do Inc(Value); - if Value >= Last then - raise EROStringFormat.CreateFmt(sInvalidStringFormat, [GetShortClassName(Self)]); - T := Value; - while not (Value^ in SepChars) do Inc(Value); - if Value - T > Dict.EntrySize then - raise EROStringFormat.CreateFmt(sInvalidStringFormat, [GetShortClassName(Self)]); -// Move and Uppercase Word to Entrybuffer - FillChar(PChar(Entry)^, Dict.EntrySize, 0); - Move(T^, PChar(Entry)^, Value - T); - CharUpperBuff(PChar(Entry), Dict.EntrySize); -// Lookup Entry in Dictionary - Index := FindEntry(Dict, PChar(Entry)); - if Index < 0 then - raise EROStringFormat.CreateFmt(sInvalidStringFormat, [GetShortClassName(Self)]); -// put the Result - asm - MOV EAX,R // R - MOV EDX,Offs // Offs - SHR EDX,3 // Offs div 8 - ADD EAX,EDX // @R[Offs div 8] - MOV ECX,32 // 32 - SUB ECX,Bits // 32 - Bits - MOV EDX,Offs // Offs - AND EDX,07h // Offs mod 8 - SUB ECX,EDX // 32 - Bits - Offs mod 8 - MOV EDX,Index // Index - SHL EDX,CL // Index shl (32 - Bits - Offs mod 8) - OR [EAX + 3],DL - OR [EAX + 2],DH - SHR EDX,16 - OR [EAX + 1],DL - OR [EAX + 0],DH - end; - Inc(Offs, Bits); - until Value >= Last; - Entry := ''; - -// calculate Parity - Index := (Offs div 8) and not 1; - Bits := Offs - Index * 8; - if Bits = 0 then Bits := MSBit(Dict.EntryCount); - Dec(Offs, Bits); - Len := ExtractBits(R, Offs, Bits, Offs + Bits); - Index := 0; - Parity := 0; - while Index < Offs do - begin - Inc(Parity, ExtractBits(R, Index, Bits, Offs)); - Inc(Index, Bits); - end; - SetLength(Result, Offs div 8); - Index := Length(Result); - if (Result[Index] = #0) and (Index <> 8) then - SetLength(Result, Index-1); - Parity := Parity and (1 shl Bits -1); - if Len <> Parity then - raise EROStringFormat.CreateFmt(sInvalidStringFormat, [GetShortClassName(Self)]); -end; - -class function TROStringFormat_RFC1760.StrTo(Value: PChar; Len: Integer): String; -var - Dict: PDictionary; - Bits: Integer; - BitLen: Integer; - Parity: Integer; - Offset: Integer; - Entry: Integer; - Text: String; - Temp: String; -begin - Result := ''; - Dict := GetDict; - SetLength(Text, Dict.EntrySize); - SetLength(Temp, Len +2); - FillChar(PChar(Temp)^, Len +2, 0); - Move(Value^, PChar(Temp)^, Len); - Value := PChar(Temp); -// calculate the Parity (Checksum ) - BitLen := ((Len +1) and not 1) * 8; // Input Length in Bits - Offset := 0; - Parity := 0; - Bits := MSBit(Dict.EntryCount); // Standard = 2048 -> 11 Bits - Bits := Bits - BitLen mod Bits; // Standard = 8 Byte Input -> 64 Bits -> 2 Bits Parity -> effective 6 * 11 Bits Output - while Offset < BitLen do - begin - Inc(Parity, ExtractBits(Value, Offset, Bits, BitLen)); - Inc(Offset, Bits); - end; -// calculate the Result - Offset := 0; - Parity := Parity and (1 shl Bits -1); // Standard = 2 Bits used - Bits := MSBit(Dict.EntryCount); // Standard = 11 Bits - while Offset <= BitLen do - begin - Entry := ExtractBits(Value, Offset, Bits, BitLen); - Inc(Offset, Bits); - if Offset > BitLen then Entry := Entry or Parity; - Move(Dict.Entries[Entry * Dict.EntrySize], PChar(Text)^, Dict.EntrySize); - Result := Result + PChar(Text) + ' '; - end; - SetLength(Result, Length(Result) -1); -end; - -class function TROStringFormat_RFC1760.Format: Integer; -begin - Result := fmtRFC1760; -end; - -class function TROStringFormat_RFC1760.IsValid(Value: PChar; Len: Integer; ToStr: Boolean): Boolean; -begin - Result := False; - try - if Dictionary = nil then Exit; - if ToStr then Self.ToStr(Value, Len); - Result := True; - except - end; -end; -{ -procedure SaveDictionary(Format: TStringFormat_RFC1760Class); -//save a Dictionary as Resource File -var - Dict: PDictionary; - HeaderSize: Integer; - Origin, ImageSize: Longint; - Header: array[0..79] of Char; -begin - Dict := Format.GetDict; - with TFileStream.Create(GetShortClassName(Format) + '.RES', fmCreate) do - try - Byte((@Header[0])^) := $FF; - Word((@Header[1])^) := 10; - HeaderSize := StrLen(StrUpper(StrPLCopy(@Header[3], GetShortClassName(Format), 63))) + 10; - Word((@Header[HeaderSize - 6])^) := $1030; - Longint((@Header[HeaderSize - 4])^) := 0; - WriteBuffer(Header, HeaderSize); - Origin := Position; - Dict.EntryCRC := not CRC32(-1, @Dict.Entries, Dict.EntryCount * Dict.EntrySize); - WriteBuffer(Dict^, SizeOf(TDictionary) + Dict.EntryCount * Dict.EntrySize); - ImageSize := Position - Origin; - Position := Origin - 4; - WriteBuffer(ImageSize, SizeOf(Longint)); - finally - Free; - end; -end; -} -initialization -// SaveDictionary(TROStringFormat_RFC1760); - RegisterStringFormats([TROStringFormat_RFC1760]); -finalization - if RFC1760Dict <> nil then FreeResource(Integer(RFC1760Dict)); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORng.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORng.pas deleted file mode 100644 index 857256e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uRORng.pas +++ /dev/null @@ -1,703 +0,0 @@ -{Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM - Author: Hagen Reddmann - Remarks: freeware, but this Copyright must be included - known Problems: none - Version: 3.0 - Delphi 2-4, designed and testet under D3 and D4 - Description: Linear Feedback Shift Register (LFSR) - Random Number Generator with variable Period - from 2^32 -1 to 2^2032 -1, Standard is 2^128 -1 - with .Seed('', -1) absolutly random - The Period have theoretical no effect on the Speed. - - Speed: ca. 40 Mb/sec of a PII MMX 266 MHz 64Mb RAM - - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Speed: all times for PII MMX 266Mhz 64Mb - theoretical have the Period (Size of LFSR) no effect on the Speed, - but a greater Period will run faster. (Cache, little Branches on Pentium, etc.) - except the Period 2^128-1, this use a specially optimized method. - - > 14.5 Mb/sec - > 40.5 Mb/sec with 128bit LFSR -Version 3.0 - - TRORandom is now a descend from TProtect, see Unit uRODECUtil.pas - - } -unit uRORng; - -interface - -{$I uROVer.inc} - -uses SysUtils, Classes, uRODECUtil; - -type - ERORandom = class(Exception); - - TRORandom = class(TROProtection) // Basicly RO_Rng, equal to Borland's Random() - private - FRegister: Integer; - FPassword: String; - protected - FCount: Integer; // not as private Fields, easier access for descends - FSize: Integer; - FBasicSeed: Integer; - procedure SetSize(Value: Integer); virtual; - function GetState: String; virtual; - procedure SetState(Value: String); virtual; -// override TProtect Methods - procedure CodeInit(Action: TPAction); override; - procedure CodeDone(Action: TPAction); override; - procedure CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); override; - public - constructor Create(const APassword: String; ASize: Integer; ARandomize: Boolean; AProtection: TROProtection); virtual; - destructor Destroy; override; -// set the Seed register -// Size = 0 -> Seed to initial Value -// Size < 0 -> Seed to randomness Value, equal to Randomize -// Size > 0 -> Seed is set to Buffer - procedure Seed(const ABuffer; ASize: Integer); virtual; -// fill out ABuffer ASize Bytes randomly - procedure Buffer(var ABuffer; ASize: Integer); virtual; -// gives Random Integer in ARange - function Int(ARange: Integer): Integer; virtual; -// Stream loading/saving - procedure SaveToStream(Stream: TStream); virtual; - procedure LoadFromStream(Stream: TStream); virtual; -// File loading/saving - procedure SaveToFile(const FileName: String); - procedure LoadFromFile(const FileName: String); -// Count of Bytes that Int() or Buffer() has generated - property Count: Integer read FCount write FCount; -// the Size in Bits - property Size: Integer read FSize write SetSize; -// basicly Seed Value for use in .Seed(), Standard is DefaultSeed - property BasicSeed: Integer read FBasicSeed write FBasicSeed; -// the internal State as MIMIE Base64 String - property State: String read GetState write SetState; - end; - - TRORandom_LFSR = class(TRORandom) // Linear Feedback Shift Register - private - FPtr: Integer; // Current Position in FRegister - FLast: Integer; // Highest Position in FRegister - FTable: array[0..255] of Word; // Lookup Table for FRegister - FRegister: array[0..255] of Byte; // Linear Feedback Shift Register - FFunc: procedure(Self: Pointer; var Buffer; Size: Integer); - protected - procedure SetSize(Value: Integer); override; - function GetState: String; override; - procedure SetState(Value: String); override; - public - procedure Seed(const ABuffer; ASize: Integer); override; - procedure Buffer(var ABuffer; ASize: Integer); override; - end; - -{ Follow the used polynomial's for TRORandom_LFSR - size in bytes of register, XORCode, Polynomial, Period - - 4, $F5, x^32 + x^7 + x^5 + x^3 + x^2 + x + 1, 2^32 -1 - 5, $9C, x^40 + x^5 + x^4 + x^3 + 1, 2^40 -1 - 6, $ED, x^48 + x^7 + x^5 + x^4 + x^2 + x + 1, 2^48 -1 - 7, $A9, x^56 + x^7 + x^4 + x^2 + 1, 2^56 -1 - 8, $D8, x^64 + x^4 + x^3 + x + 1, 2^64 -1 - 9, $FA, x^72 + x^6 + x^4 + x^3 + x^2 + x + 1, 2^72 -1 - 10, $F5, x^80 + x^7 + x^5 + x^3 + x^2 + x + 1, 2^80 -1 - 12, $BB, x^96 + x^7 + x^6 + x^4 + x^3 + x^2 + 1, 2^96 -1 - 15, $E7, x^120 + x^7 + x^6 + x^5 + x^2 + x + 1, 2^120 -1 - 16, $E1, x^128 + x^7 + x^2 + x + 1, 2^128 -1 - 18, $A9, x^144 + x^7 + x^4 + x^2 + 1, 2^144 -1 - 19, $B2, x^152 + x^6 + x^3 + x^2 + 1, 2^152 -1 - 20, $B4, x^160 + x^5 + x^3 + x^2 + 1, 2^160 -1 - 22, $BD, x^176 + x^7 + x^5 + x^4 + x^3 + x^2 + 1, 2^176 -1 - 25, $B4, x^200 + x^5 + x^3 + x^2 + 1, 2^200 -1 - 27, $D1, x^216 + x^7 + x^3 + x + 1, 2^216 -1 - 38, $FC, x^304 + x^5 + x^4 + x^3 + x^2 + x + 1, 2^304 -1 - 40, $D8, x^320 + x^4 + x^3 + x + 1, 2^320 -1 - 42, $C9, x^336 + x^7 + x^4 + x + 1, 2^336 -1 - 44, $BD, x^352 + x^7 + x^5 + x^4 + x^3 + x^2 + 1, 2^352 -1 - 50, $B4, x^400 + x^5 + x^3 + x^2 + 1, 2^400 -1 - 51, $FA, x^408 + x^6 + x^4 + x^3 + x^2 + x + 1, 2^408 -1 - 55, $D8, x^440 + x^4 + x^3 + x + 1, 2^440 -1 - 60, $BB, x^480 + x^7 + x^6 + x^4 + x^3 + x^2 + 1, 2^480 -1 - 61, $D8, x^488 + x^4 + x^3 + x + 1, 2^488 -1 - 63, $FA, x^504 + x^6 + x^4 + x^3 + x^2 + x + 1, 2^504 -1 - 67, $95, x^536 + x^7 + x^5 + x^3 + 1, 2^536 -1 - 84, $F6, x^672 + x^6 + x^5 + x^3 + x^2 + x + 1, 2^672 -1 - 89, $9C, x^712 + x^5 + x^4 + x^3 + 1, 2^712 -1 - 91, $B8, x^728 + x^4 + x^3 + x^2 + 1, 2^728 -1 - 103, $FC, x^824 + x^5 + x^4 + x^3 + x^2 + x + 1, 2^824 -1 - 141, $D1, x^1128 + x^7 + x^3 + x + 1, 2^1128 -1 - 154, $F3, x^1232 + x^7 + x^6 + x^3 + x^2 + x + 1, 2^1232 -1 - 254, $A3, x^2032 + x^7 + x^6 + x^2 + 1, 2^2032 -1 - - follow various Periods --------------------------------------------------------------------------------- - 2^32-1 = 4294967295 - 2^64-1 = 18446744073709551615 - 2^128-1 = 340282366920938463463374607431768211455 - 2^2032-1 = it's one Number - 49311837877366649323600580884811328064642490645928167773636391338386009428204 - 17921935608125537553934278674005267623599165972833122328326583112816221076703 - 35702985799671951234310153163915857728680359766210694390385082889078409114931 - 66867209378778336289339669574030006474132653643098550122997363890264786354861 - 31947843882498538312526670313197249581325688984118966381501107686008635362008 - 71492771279798342546336760614070411100118371556871830774626226863061725361438 - 46476937385117828689155818331492509954024778049592066494651864619855274961300 - 9880449926596639031121858756000207590413184793166384097191709192063287295 --------------------------------------------------------------------------------- -} - -// Your actual Random Class, per default TRORandom_LFSR.Create(128, False) -function RND: TRORandom; - -// internal used for the random initialization of the Seed Initial Value -// change this to produce Application dependent Randomness -const - DefaultSeed: Integer = 693258280; - -implementation - -uses uRODECConst; - -const - FRND: TRORandom = nil; - -// avaible Periods for the LFSR - LFSRPeriod: array[0..33, 0..1] of Word = - (( 32, $F5), ( 40, $9C), ( 48, $ED), ( 56, $A9), - ( 64, $D8), ( 72, $FA), ( 80, $F5), ( 96, $BB), - ( 120, $E7), ( 128, $E1), ( 144, $A9), ( 152, $B2), - ( 160, $B4), ( 176, $BD), ( 200, $B4), ( 216, $D1), - ( 304, $FC), ( 320, $D8), ( 336, $C9), ( 352, $BD), - ( 400, $B4), ( 408, $FA), ( 440, $D8), ( 480, $BB), - ( 488, $D8), ( 504, $FA), ( 536, $95), ( 672, $F6), - ( 712, $9C), ( 728, $B8), ( 824, $FC), ( 1128, $D1), - ( 1232, $F3), ( 2032, $A3)); - -function RND: TRORandom; -begin - if FRND = nil then - begin - FRND := TRORandom_LFSR.Create('', 0, False, nil); - FRND.AddRef; - end; - Result := FRND; -end; - -procedure TRORandom.SetSize(Value: Integer); -begin - FSize := 32; // allways 32 -end; - -function TRORandom.GetState: String; -var - CRC: Word; - M: TMemoryStream; -begin - M := TMemoryStream.Create; - try -// write a Randomized Word to begin, -// any Encryption produce allways other outputs - RndXORBuffer(RndTimeSeed, CRC, SizeOf(CRC)); - M.Write(CRC, SizeOf(CRC)); - M.Write(FSize, SizeOf(FSize)); - M.Write(FBasicSeed, SizeOf(FBasicSeed)); - M.Write(FCount, SizeOf(FCount)); - M.Write(FRegister, SizeOf(FRegister)); - CRC := not CRC16($FFFF, M.Memory, M.Size); - M.Write(CRC, SizeOf(CRC)); - CRC := $0100; // Version 1 without Protection - if Protection <> nil then - begin - CRC := CRC or 1; // with Protection - M.Position := 0; - Protection.CodeStream(M, M, M.Size, paEncode); - M.Position := M.Size; - end; - M.Write(CRC, SizeOf(CRC)); - Result := StrToFormat(M.Memory, M.Size, fmtMIME64); - finally - M.Free; - end; -end; - -procedure TRORandom.SetState(Value: String); -var - CRC: Word; - I: Integer; - M: TMemoryStream; -begin - M := TMemoryStream.Create; - try - Value := FormatToStr(PChar(Value), Length(Value), fmtMIME64); - M.Write(PChar(Value)^, Length(Value)); - M.Position := M.Size - SizeOf(CRC); - M.Read(CRC, SizeOf(CRC)); - if CRC and $FF00 <> $0100 then // it's Version $0100 ? - raise ERORandom.Create(sInvalidRandomStream); - if CRC and 1 <> 0 then - if Protection <> nil then - begin - M.Position := 0; - Protection.CodeStream(M, M, M.Size - SizeOf(CRC), paDecode); - end else raise ERORandom.Create(sRandomDataProtected); - M.Position := M.Size - SizeOf(CRC) * 2; - M.Read(CRC, SizeOf(CRC)); - if CRC <> not CRC16($FFFF, M.Memory, M.Size - SizeOf(CRC) * 2) then - raise ERORandom.Create(sInvalidRandomStream); - M.Position := SizeOf(CRC); // skip Dummy Random Word - M.Read(I, SizeOf(FSize)); - SetSize(I); - M.Read(FCount, SizeOf(FCount)); - M.Read(FBasicSeed, SizeOf(FBasicSeed)); - M.Read(FRegister, SizeOf(FRegister)); - finally - M.Free; - end; -end; - -constructor TRORandom.Create(const APassword: String; ASize: Integer; ARandomize: Boolean; AProtection: TROProtection); -begin - inherited Create(AProtection); - FBasicSeed := DefaultSeed; - FSize := -1; - FPassword := APassword; - SetSize(ASize); - if ASize > 0 then - if not ARandomize then Seed(PChar(FPassword)^, Length(FPassword)) - else Seed('', -1); -end; - -destructor TRORandom.Destroy; -begin - Seed('', 0); - if Self = FRND then FRND := nil; - inherited Destroy; -end; - -procedure TRORandom.Seed(const ABuffer; ASize: Integer); -var - I: Integer; - R: PByteArray; -begin - if (ASize > 0) and (@ABuffer <> nil) then - begin - FRegister := FBasicSeed; - FillChar(FRegister, SizeOf(FRegister), 0); - R := @FRegister; - for I := 0 to ASize -1 do - R[I and 3] := R[I and 3] + TByteArray(ABuffer)[I]; - end else - if ASize < 0 then FRegister := RndTimeSeed + (FCount +1) - else FRegister := FBasicSeed; - if Protection <> nil then - Protection.CodeBuffer(FRegister, SizeOf(FRegister), paScramble); -end; - -function TRORandom.Int(ARange: Integer): Integer; -begin - Buffer(Result, SizeOf(Result)); - if (ARange = 0) or (Result = 0) then Exit; - if (ARange >= 0) and (Result < 0) then Result := -Result else - if ARange < 0 then ARange := -ARange; - Result := Result mod (ARange +1); - Inc(FCount, SizeOf(Result)); -end; - -procedure TRORandom.Buffer(var ABuffer; ASize: Integer); -begin - if ASize <= 0 then Exit; - FillChar(ABuffer, ASize, 0); - FRegister := RndXORBuffer(FRegister, ABuffer, ASize); - Inc(FCount, ASize); - if Protection <> nil then - Protection.CodeBuffer(ABuffer, ASize, paScramble); -end; - -procedure TRORandom.SaveToStream(Stream: TStream); -var - I: Integer; - S,C: String; -begin - C := ClassName; - if C[1] = 'T' then Delete(C, 1, 1); - I := Pos('_', C); - if I > 0 then Delete(C, 1, I); - S := InsertCR(State, 64); - C := C + IntToHex(Length(S), 4) + #13#10 + S; - Stream.Write(PChar(C)^, Length(C)); -end; - -procedure TRORandom.LoadFromStream(Stream: TStream); -var - C,S: String; - I: Integer; -begin -// write the Name from ClassName (i.E. TRORandom_LFSR -> "LFSR"), -// the Size as a 4 Char HEX String and State. -// i.E. LFSR0FCB State - C := ClassName; - if C[1] = 'T' then Delete(C, 1, 1); - I := Pos('_', C); - if I > 0 then Delete(C, 1, I); - SetLength(S, Length(C)); - Stream.Read(PChar(S)^, Length(C)); - if S <> C then Abort; - SetLength(S, 6); - Stream.Read(PChar(S)^, 6); - SetLength(S, 4); - I := StrToInt('$' + S); - SetLength(S, I); - Stream.Read(PChar(S)^, I); - State := DeleteCR(S); -end; - -procedure TRORandom.SaveToFile(const FileName: String); -var - S: TStream; -begin - S := TFileStream.Create(FileName, fmCreate); - try - SaveToStream(S); - finally - S.Free; - end; -end; - -procedure TRORandom.LoadFromFile(const FileName: String); -var - S: TStream; -begin - S := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); - try - LoadFromStream(S); - finally - S.Free; - end; -end; - -procedure TRORandom.CodeInit(Action: TPAction); -begin - if Action = paWipe then Seed('', -1) - else Seed(PChar(FPassword)^, Length(FPassword)); - inherited CodeInit(Action); -end; - -procedure TRORandom.CodeDone(Action: TPAction); -begin - inherited CodeDone(Action); - if Action = paWipe then Seed('', -1) - else Seed(PChar(FPassword)^, Length(FPassword)); -end; - -procedure TRORandom.CodeBuf(var Buffer; const BufferSize: Integer; Action: TPAction); -const - maxBufSize = 1024 * 4; -var - Buf: Pointer; - BPtr: PByte; - BSize,CSize: Integer; -begin - if Action <> paDecode then inherited CodeBuf(Buffer, BufferSize, Action); - if Action in Actions then - begin - BPtr := @Buffer; - if BPtr = nil then Exit; - BSize := maxBufSize; - if BSize > BufferSize then BSize := BufferSize; - Buf := AllocMem(BSize); - CSize := BufferSize; - try - if Action = paCalc then - begin - while CSize > 0 do - begin - BSize := CSize; - if BSize > maxBufSize then BSize := maxBufSize; - Self.Buffer(Buf^, BSize); - XORBuffers(Buf, BPtr, BSize, Buf); - Inc(BPtr, BSize); - Dec(CSize, BSize); - end - end else - begin - while CSize > 0 do - begin - BSize := CSize; - if BSize > maxBufSize then BSize := maxBufSize; - Self.Buffer(Buf^, BSize); - XORBuffers(Buf, BPtr, BSize, BPtr); - Inc(BPtr, BSize); - Dec(CSize, BSize); - end; - end; - finally - ReallocMem(Buf, 0); - end; - end; - if Action = paDecode then - inherited CodeBuf(Buffer, BufferSize, Action); -end; - -// internal for TRORandom_LFSR -procedure LFSRBuf(Self: Pointer; var Buffer; Size: Integer); assembler; -asm - AND EDX,EDX // Buffer = nil ? - JZ @@9 - AND ECX,ECX // BufferSize <= 0 ? - JLE @@9 - - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EAX - - MOV EDI,[EAX].TRORandom_LFSR.FPtr - MOV EBP,[EAX].TRORandom_LFSR.FLast - LEA ESI,[EAX].TRORandom_LFSR.FRegister - LEA EBX,[EAX].TRORandom_LFSR.FTable - DEC EDX - -@@1: MOVZX EAX,Byte Ptr [ESI + EDI] - MOV [EDX + ECX],AL - MOV AX,[EBX + EAX * 2] - MOV [ESI + EDI],AL - DEC EDI - JS @@2 - XOR [ESI + EDI],AH - ADD EDI,2 - CMP EDI,EBP - JLE @@3 - XOR EDI,EDI - JMP @@3 -@@2: MOV EDI,EBP - XOR [ESI + EDI],AH - MOV EDI,1 -@@3: DEC ECX - JNZ @@1 - - POP EAX - MOV [EAX].TRORandom_LFSR.FPtr,EDI - - POP EBP - POP EBX - POP ESI - POP EDI - -@@9: -end; - -procedure LFSRBuf128(Self: Pointer; var Buffer; Size: Integer); assembler; -asm - AND EDX,EDX // Buffer = nil ? - JZ @@9 - AND ECX,ECX // BufferSize <= 0 ? - JLE @@9 - - PUSH EDI - PUSH ESI - PUSH EBX - PUSH EBP - PUSH EAX - - MOV EDI,[EAX].TRORandom_LFSR.FPtr - LEA EBP,[EAX].TRORandom_LFSR.FTable - LEA ESI,[EAX].TRORandom_LFSR.FRegister - DEC EDX - XOR EAX,EAX - -@@1: MOV AL,[ESI + EDI] - MOV BX,[EBP + EAX * 2] - MOV [EDX + ECX],AL - MOV [ESI + EDI],BL - DEC EDI - AND EDI,0Fh - XOR [ESI + EDI],BH - ADD EDI,2 - AND EDI,0Fh - DEC ECX - JNZ @@1 - - POP EAX - MOV [EAX].TRORandom_LFSR.FPtr,EDI - - POP EBP - POP EBX - POP ESI - POP EDI - -@@9: -end; - -procedure TRORandom_LFSR.SetSize(Value: Integer); - - procedure CalcLFSRTable(XORCode: Byte); - var - I,J,Z: Integer; - begin - asm // Reverse the bitorder - XOR AX,AX - MOV AL,XORCode - MOV CL,8 -@@1: RCR AL,1 - RCL AH,1 - DEC CL - JNZ @@1 - MOV XORCode,AH - end; - FillChar(FTable, SizeOf(FTable), 0); - for I := 0 to 255 do - begin - Z := I; - for J := 0 to 7 do - begin - FTable[I] := FTable[I] shl 1; - if Z and $80 <> 0 then FTable[I] := FTable[I] xor XORCode; - Z := Z shl 1; - end; - end; - end; - - procedure DoSet(Index: Integer); - begin - FSize := LFSRPeriod[Index, 0]; - FLast := LFSRPeriod[Index, 0] div 8 -1; - if FSize = 128 then FFunc := LFSRBuf128 else FFunc := LFSRBuf; - CalcLFSRTable(LFSRPeriod[Index, 1]); - Seed('', 0); - end; - -var - I: Integer; -begin - if Value <= 0 then Value := 128; - if Value <> FSize then - begin - for I := 33 downto 0 do - if Value >= LFSRPeriod[I, 0] then - begin - DoSet(I); - Exit; - end; - DoSet(9); // The Standard fast 2^128-1 Period - end; -end; - -function TRORandom_LFSR.GetState: String; -var - CRC: Word; - M: TMemoryStream; -begin - M := TMemoryStream.Create; - try -// write randomized Dummy Word - RndXORBuffer(RndTimeSeed, CRC, SizeOf(CRC)); - M.Write(CRC, SizeOf(CRC)); - M.Write(FSize, SizeOf(FSize)); - M.Write(FRegister, SizeOf(FRegister)); - M.Write(FBasicSeed, SizeOf(FBasicSeed)); - M.Write(FCount, SizeOf(FCount)); - M.Write(FPtr, SizeOf(FPtr)); - M.Write(FLast, SizeOf(FLast)); - CRC := not CRC16($FFFF, M.Memory, M.Size); - M.Write(CRC, SizeOf(CRC)); - CRC := $0100; // Version 1 without Protection - if Protection <> nil then - begin - CRC := CRC or 1; // with Protection - M.Position := 0; - Protection.CodeStream(M, M, M.Size, paEncode); - M.Position := M.Size; - end; - M.Write(CRC, SizeOf(CRC)); - Result := StrToFormat(M.Memory, M.Size, fmtMIME64); - finally - M.Free; - end; -end; - -procedure TRORandom_LFSR.SetState(Value: String); -var - P: Integer; - CRC: Word; - M: TMemoryStream; -begin - M := TMemoryStream.Create; - try - Value := FormatToStr(PChar(Value), Length(Value), fmtMIME64); - M.Write(PChar(Value)^, Length(Value)); - M.Position := M.Size - SizeOf(CRC); - M.Read(CRC, SizeOf(CRC)); - if CRC and $FF00 <> $0100 then // it's Version $0100 ? - raise ERORandom.Create(sInvalidRandomStream); - if CRC and 1 <> 0 then - if Protection <> nil then - begin - M.Position := 0; - Protection.CodeStream(M, M, M.Size - SizeOf(CRC), paDecode); - end else raise ERORandom.Create(sRandomDataProtected); - M.Position := M.Size - SizeOf(CRC) * 2; - M.Read(CRC, SizeOf(CRC)); - if CRC <> not CRC16($FFFF, M.Memory, M.Size - SizeOf(CRC) * 2) then - raise ERORandom.Create(sInvalidRandomStream); - M.Position := SizeOf(CRC); // skip Dummy word - M.Read(P, SizeOf(FSize)); - SetSize(P); - M.Read(FRegister, SizeOf(FRegister)); - M.Read(FBasicSeed, SizeOf(FBasicSeed)); - M.Read(FCount, SizeOf(FCount)); - M.Read(FPtr, SizeOf(FPtr)); - M.Read(FLast, SizeOf(FLast)); - finally - M.Free; - end; -end; - -procedure TRORandom_LFSR.Seed(const ABuffer; ASize: Integer); -var - I,S: Integer; -begin - FPtr := 0; - if (ASize > 0) and (@ABuffer <> nil) then - begin - FillChar(FRegister, SizeOf(FRegister), 0); - S := FSize div 8; - for I := 0 to ASize -1 do - FRegister[I mod S] := FRegister[I mod S] + TByteArray(ABuffer)[I]; - end else - if ASize < 0 then RndXORBuffer(RndTimeSeed + (FCount +1), FRegister, SizeOf(FRegister)) - else FillChar(FRegister, SizeOf(FRegister), 0); - RndXORBuffer(FBasicSeed, FRegister, SizeOf(FRegister)); - if Protection <> nil then - Protection.CodeBuffer(FRegister, SizeOf(FRegister), paScramble); -end; - -procedure TRORandom_LFSR.Buffer(var ABuffer; ASize: Integer); -begin - if ASize <= 0 then Exit; - FFunc(Self, ABuffer, ASize); - if Protection <> nil then - Protection.CodeBuffer(ABuffer, ASize, paScramble); - Inc(FCount, ASize); -end; - -initialization -finalization - FRND.Release; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROSquare.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROSquare.inc deleted file mode 100644 index 1d4d4af..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROSquare.inc +++ /dev/null @@ -1,330 +0,0 @@ -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 LongWord = ( - $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_TE: array[0..3, 0..255] of LongWord = ( - ($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)); - - Square_TD: array[0..3, 0..255] of LongWord = ( - ($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)); diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROVer.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROVer.inc deleted file mode 100644 index ffcb4ee..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROVer.inc +++ /dev/null @@ -1,46 +0,0 @@ -{$A+,B-,E-,F-,G+,H+,I-,J+,K-,N+,P+,Q-,R-,S-,T-,V+,W-,X+,Y-} - - -{.$DEFINE 486GE} // Assembler Core only for >= 486 CPU -{$DEFINE UseASM} // use Assembler optimated core - -{.$DEFINE ManualRegisterClasses} // all Cipher- and Hashclasses must be manual register - -{$IFDEF VER80} { Delphi 1.0 } - {$DEFINE VER_D1} -{$ENDIF} - -{$IFDEF VER90} { Delphi 2.0 } - {$DEFINE VER_D2} -{$ENDIF} - -{$IFDEF VER100} {Borland Delphi 3.0 } - {$DEFINE VER_D3} -{$ENDIF} - -{$IFDEF VER120} {Borland Delphi 4.0 } - {$DEFINE VER_D4} -{$ENDIF} - -{$IFDEF VER93} { Borland C++Builder 1.0 } - {$DEFINE VER_BCB1} -{$ENDIF} - -{$IFDEF VER110} { Borland C++Builder 3.0 } - {$DEFINE VER_BCB3} -{$ENDIF} - -{$IFNDEF VER80} { Delphi 1.0 } - {$IFNDEF VER90} { Delphi 2.0 } - {$IFNDEF VER93} { C++Builder 1.0 } - {$DEFINE VER_D3H} { Delphi 3.0 or higher } - {$IFNDEF VER100} - {$DEFINE VER_BCB3H} { C++Builder 3.0 or higher } - {$IFNDEF VER110} - {$DEFINE VER_D4H} { Delphi 4.0 or higher } - {$ENDIF} - {$ENDIF} - {$ENDIF} - {$ENDIF} -{$ENDIF} - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher.inc deleted file mode 100644 index 06478d3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher.inc +++ /dev/null @@ -1,1636 +0,0 @@ -const - Gost_Data: array[0..3, 0..255] of LongWord = ( - ($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)); - - Blowfish_Data: array[0..3, 0..255] of LongWord = ( - ($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: array[0..17] of LongWord = ( - $243F6A88,$85A308D3,$13198A2E,$03707344,$A4093822,$299F31D0, - $082EFA98,$EC4E6C89,$452821E6,$38D01377,$BE5466CF,$34E90C6C, - $C0AC29B7,$C97C50DD,$3F84D5B5,$B5470917,$9216D5D9,$8979FB1B); - - Q128_Data: array[0..1023] of LongWord = ( - $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); - - 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 LongWord = ( - ($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)); - - 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)); - - Shark_CE: array[0..7, 0..511] of LongWord = ( - ($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 LongWord = ( - ($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)); - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher1.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher1.inc deleted file mode 100644 index 95f6bc2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODEC/uROcipher1.inc +++ /dev/null @@ -1,1013 +0,0 @@ -const - Cast128_Data: array[0..3, 0..255] of LongWord = ( - ($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 LongWord = ( - ($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 LongWord = ( - ($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 LongWord = ( - $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 LongWord = - ($09D0C479,$28C8FFE0,$84AA6C39,$9DAD7287,$7DFF9BE3,$D4268361,$C96DA1D4); - - - 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); - - FROG_Data: array[0..250] of Byte = ( - $71,$15,$E8,$12,$71,$5C,$3F,$9D,$7C,$C1,$A6,$C5,$7E,$38,$E5,$E5, - $9C,$A2,$36,$11,$E6,$59,$BD,$57,$A9,$00,$51,$CC,$08,$46,$CB,$E1, - $A0,$3B,$A7,$BD,$64,$9D,$54,$0B,$07,$82,$1D,$33,$20,$2D,$87,$ED, - $8B,$21,$11,$DD,$18,$32,$59,$4A,$15,$CD,$BF,$F2,$54,$35,$03,$E6, - $E7,$76,$0F,$0F,$6B,$04,$15,$22,$03,$9C,$39,$42,$5D,$FF,$BF,$03, - $55,$87,$CD,$C8,$B9,$CC,$34,$25,$23,$18,$44,$B9,$C9,$0A,$E0,$EA, - $07,$78,$C9,$73,$D8,$67,$39,$FF,$5D,$6E,$2A,$F9,$44,$0E,$1D,$37, - $80,$54,$25,$98,$DD,$89,$27,$0B,$FC,$32,$90,$23,$B2,$BE,$2B,$A2, - $67,$F9,$6D,$08,$EB,$21,$9E,$6F,$FC,$CD,$A9,$36,$0A,$14,$DD,$C9, - $B2,$E0,$59,$B8,$B6,$41,$C9,$0A,$3C,$06,$BF,$AE,$4F,$62,$1A,$A0, - $FC,$33,$3F,$4F,$06,$66,$7B,$AD,$31,$03,$6E,$E9,$5A,$9E,$E4,$D2, - $D1,$ED,$1E,$5F,$1C,$B3,$CC,$DC,$48,$A3,$4D,$A6,$C0,$62,$A5,$19, - $91,$A2,$5B,$D4,$29,$E6,$6E,$06,$6B,$BB,$7F,$26,$52,$62,$1E,$43, - $E1,$50,$D0,$86,$3C,$FA,$99,$57,$94,$3C,$42,$A5,$48,$1D,$A5,$52, - $D3,$CF,$00,$B1,$CE,$0D,$06,$0E,$5C,$F8,$3C,$C9,$84,$5F,$23,$D7, - $76,$B1,$79,$B4,$1B,$53,$83,$1A,$27,$2E,$0C); - - 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 LongWord = ( - ($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 LongWord = ( - $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); - - 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 LongWord = ( - ($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); - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.bdsproj deleted file mode 100644 index 24569b2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.bdsproj +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - RemObjects_RODX_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - RODXSock Library - False - - - - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - - - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - - $00000000 - - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - False - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.cfg deleted file mode 100644 index 74d82bb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.cfg +++ /dev/null @@ -1,52 +0,0 @@ --$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 --N0"..\..\Dcu\D10" --LE"..\..\Dcu\D10" --LN"..\..\Dcu\D10" --U"..\;..\..\Dcu\D10" --O"..\;..\..\Dcu\D10" --I"..\;..\..\Dcu\D10" --R"..\;..\..\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dpk deleted file mode 100644 index 0e7beb1..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dpk +++ /dev/null @@ -1,46 +0,0 @@ -package RemObjects_RODX_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - RODXSock Library'} -{$IMPLICITBUILD OFF} -{%File 'RemObjects.inc'} - -requires - vcl, - rtl; - -contains - uRODXServerCore in 'uRODXServerCore.pas', - uRODXSessionTracker in 'uRODXSessionTracker.pas', - uRODXSock in 'uRODXSock.pas', - uRODXSockClient in 'uRODXSockClient.pas', - uRODXSocket in 'uRODXSocket.pas', - uRODXString in 'uRODXString.pas', - uRODXHTTPHeaderTools in 'uRODXHTTPHeaderTools.pas', - uRODXHTTPServerCore in 'uRODXHTTPServerCore.pas', - uRODXISAPI in 'uRODXISAPI.pas', - uRODXISAPIFilter in 'uRODXISAPIFilter.pas', - uRODXSecurity in 'uRODXSecurity.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dproj deleted file mode 100644 index b6e17a0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.dproj +++ /dev/null @@ -1,123 +0,0 @@ - - - {27e9e5ec-4c40-4f0d-8fcb-942f127195d1} - RemObjects_RODX_D10.dpk - Debug - AnyCPU - DCC32 - ..\..\Dcu\D10\RemObjects_RODX_D10.bpl - - - 7.0 - False - False - 0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - ..\;..\..\Dcu\D10 - DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - RODXSock Library - False - False - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - RemObjects_RODX_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dof deleted file mode 100644 index 77d8281..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dof +++ /dev/null @@ -1,94 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - RODXSock Library -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D5 -PackageDLLOutputDir=..\..\Dcu\D5 -PackageDCPOutputDir=..\..\Dcu\D5 -SearchPath=..\..\Dcu\D5 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=s:\exe\dcu50 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=l:\Packages -[HistoryLists\hlDCPOutput] -Count=1 -Item0=l:\Packages diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dpk deleted file mode 100644 index 60ba7f5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.dpk +++ /dev/null @@ -1,45 +0,0 @@ -package RemObjects_RODX_D5; - -{$R *.RES} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - RODXSock Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - Vcl50; - -contains - uRODXServerCore in 'uRODXServerCore.pas', - uRODXSessionTracker in 'uRODXSessionTracker.pas', - uRODXSock in 'uRODXSock.pas', - uRODXSockClient in 'uRODXSockClient.pas', - uRODXSocket in 'uRODXSocket.pas', - uRODXString in 'uRODXString.pas', - uRODXHTTPHeaderTools in 'uRODXHTTPHeaderTools.pas', - uRODXHTTPServerCore in 'uRODXHTTPServerCore.pas', - uRODXISAPI in 'uRODXISAPI.pas', - uRODXISAPIFilter in 'uRODXISAPIFilter.pas', - uRODXSecurity in 'uRODXSecurity.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.res deleted file mode 100644 index a2de886..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dof deleted file mode 100644 index f7b2069..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dof +++ /dev/null @@ -1,91 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects - RODXSock Library -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D6 -PackageDLLOutputDir=..\..\Dcu\D6 -PackageDCPOutputDir=..\..\Dcu\D6 -SearchPath=..\..\Dcu\D6 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -L:\Packages\addict3db_d6.bpl=Addict 3.2 for Delphi 6 (DB Aware Components) -L:\Packages\X255PD60.bpl=TurboPower XMLPartner Professional 2.55 Designtime package - VCL60 -l:\Packages\dclcxLibraryVCLD6.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxEditorsVCLD6.bpl=ExpressEditors Library 4 (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridUtilsVCLD6.bpl=ExpressQuantumGrid 4 Utils (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxGridVCLD6.bpl=ExpressQuantumGrid 4 (VCL Edition) by Developer Express Inc. -L:\Packages\dclcxSpreadSheetVCLD6.bpl=ExpressSpreadSheet (VCL Edition) by Developer Express Inc. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dpk deleted file mode 100644 index eb4b9de..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.dpk +++ /dev/null @@ -1,47 +0,0 @@ -package RemObjects_RODX_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - RODXSock Library'} -{$IMPLICITBUILD OFF} - -requires - vcl, - rtl; - -{%File '..\RemObjects.inc'} - -contains - uRODXServerCore in 'uRODXServerCore.pas', - uRODXSessionTracker in 'uRODXSessionTracker.pas', - uRODXSock in 'uRODXSock.pas', - uRODXSockClient in 'uRODXSockClient.pas', - uRODXSocket in 'uRODXSocket.pas', - uRODXString in 'uRODXString.pas', - uRODXHTTPHeaderTools in 'uRODXHTTPHeaderTools.pas', - uRODXHTTPServerCore in 'uRODXHTTPServerCore.pas', - uRODXISAPI in 'uRODXISAPI.pas', - uRODXISAPIFilter in 'uRODXISAPIFilter.pas', - uRODXSecurity in 'uRODXSecurity.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dof deleted file mode 100644 index 90385b4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dof +++ /dev/null @@ -1,138 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - RODXSock Library -[Directories] -OutputDir= -UnitOutputDir=..\..\Dcu\D7 -PackageDLLOutputDir=..\..\Dcu\D7 -PackageDCPOutputDir=..\..\Dcu\D7 -SearchPath=..\..\Dcu\D7 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -C:\Program Files\BoldSoft\Bold\Bin\Bold40D7ComGUI.bpl=Bold for Delphi 4.0 (COM GUI controls) diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dpk deleted file mode 100644 index acfe631..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.dpk +++ /dev/null @@ -1,47 +0,0 @@ -package RemObjects_RODX_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - RODXSock Library'} -{$IMPLICITBUILD OFF} - -requires - vcl, - rtl; - -{%File '..\RemObjects.inc'} - -contains - uRODXServerCore in 'uRODXServerCore.pas', - uRODXSessionTracker in 'uRODXSessionTracker.pas', - uRODXSock in 'uRODXSock.pas', - uRODXSockClient in 'uRODXSockClient.pas', - uRODXSocket in 'uRODXSocket.pas', - uRODXString in 'uRODXString.pas', - uRODXHTTPHeaderTools in 'uRODXHTTPHeaderTools.pas', - uRODXHTTPServerCore in 'uRODXHTTPServerCore.pas', - uRODXISAPI in 'uRODXISAPI.pas', - uRODXISAPIFilter in 'uRODXISAPIFilter.pas', - uRODXSecurity in 'uRODXSecurity.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.dpk deleted file mode 100644 index 68e3e5c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.dpk +++ /dev/null @@ -1,47 +0,0 @@ -package RemObjects_RODX_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects - RODXSock Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - vcl, - rtl, - visualclx; - -contains - uRODXServerCore in 'uRODXServerCore.pas', - uRODXSessionTracker in 'uRODXSessionTracker.pas', - uRODXSock in 'uRODXSock.pas', - uRODXSockClient in 'uRODXSockClient.pas', - uRODXSocket in 'uRODXSocket.pas', - uRODXString in 'uRODXString.pas', - uRODXHTTPHeaderTools in 'uRODXHTTPHeaderTools.pas', - uRODXHTTPServerCore in 'uRODXHTTPServerCore.pas', - uRODXISAPI in 'uRODXISAPI.pas', - uRODXISAPIFilter in 'uRODXISAPIFilter.pas', - uRODXSecurity in 'uRODXSecurity.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.kof deleted file mode 100644 index c1efcbe..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.kof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects - RODXSock Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../../Dcu/K3 -PackageDLLOutputDir=../../Dcu/K3 -PackageDCPOutputDir=../../Dcu/K3 -SearchPath=../../Dcu/K3 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=../Dcu/K3 - -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME - -[HistoryLists\hlSearchPath] -Count=4 -Item0=../../Dcu/K3:../ -Item1=../Dcu/K3 -Item2=../../Dcu/K3;../ -Item3=../../Dcu/K3 - -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - -[HistoryLists\hlBPLOutput] -Count=3 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 -Item2=../../Bin/K3 - -[HistoryLists\hlDCPOutput] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/RemObjects_RODX_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_English.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_English.inc deleted file mode 100644 index 3c5a17d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_English.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Interrupted system call'; // 10004 L:4 - _WSAEBADF = 'Bad file number'; // 10009 L:9 - _WSAEACCES = 'Permission denied'; // 10013 L:13 - _WSAEFAULT = 'Bad address'; // 10014 L:14 - _WSAEINVAL = 'Invalid argument'; // 10022 L:22 - _WSAEMFILE = 'Too many open files'; // 10024 L:24 - _WSAEWOULDBLOCK = 'Operation would block'; // 10035 L:11 (?L:35?) - _WSAEINPROGRESS = 'Operation now in progress'; // 10036 L:115 - _WSAEALREADY = 'Operation already in progress'; // 10037 L:114 - _WSAENOTSOCK = 'Socket operation on non-socket'; // 10038 L:88 - _WSAEDESTADDRREQ = 'Destination address required'; // 10039 L:89 - _WSAEMSGSIZE = 'Message too long'; // 10040 L:90 - _WSAEPROTOTYPE = 'Protocol wrong type for socket'; // 10041 L:91 - _WSAENOPROTOOPT = 'Protocol not available'; // 10042 L:92 - _WSAEPROTONOSUPPORT = 'Protocol not supported'; // 10043 L:93 - _WSAESOCKTNOSUPPORT = 'Socket type not supported'; // 10044 L:94 - _WSAEOPNOTSUPP = 'Operation not supported on socket'; // 10045 L:95 - _WSAEPFNOSUPPORT = 'Protocol family not supported'; // 10046 L:96 - _WSAEAFNOSUPPORT = 'Address family not supported by protocol family'; // 10047 L:97 - _WSAEADDRINUSE = 'Address already in use'; // 10048 L:98 - _WSAEADDRNOTAVAIL = 'Can''t assign requested address'; // 10049 L:99 - _WSAENETDOWN = 'Network is down'; // 10050 L:100 - _WSAENETUNREACH = 'Network is unreachable'; // 10051 L:101 - _WSAENETRESET = 'Network dropped connection on reset'; // 10052 L:102 - _WSAECONNABORTED = 'Software caused connection abort'; // 10053 L:103 - _WSAECONNRESET = 'Connection reset by peer'; // 10054 L:104 - _WSAENOBUFS = 'No buffer space available'; // 10055 L:105 - _WSAEISCONN = 'Socket is already connected'; // 10056 L:106 - _WSAENOTCONN = 'Socket is not connected'; // 10057 L:107 - _WSAESHUTDOWN = 'Can''t send after socket shutdown'; // 10058 L:108 - _WSAETOOMANYREFS = 'Too many references can''t splice'; // 10059 L:109 - _WSAETIMEDOUT = 'Connection timed out'; // 10060 L:110 - _WSAECONNREFUSED = 'Connection refused'; // 10061 L:111 - _WSAELOOP = 'Too many levels of symbolic links'; // 10062 L:40 - _WSAENAMETOOLONG = 'File name too long'; // 10063 L:36 - _WSAEHOSTDOWN = 'Host is down'; // 10064 L:112 - _WSAEHOSTUNREACH = 'No route to host'; // 10065 L:113 - _WSAENOTEMPTY = 'Directory not empty'; // 10066 L:39 - _WSAEPROCLIM = 'Too many processes'; // 10067 - _WSAEUSERS = 'Too many users'; // 10068 L:87 - _WSAEDQUOT = 'Disk quota exceeded'; // 10069 L:122 - _WSAESTALE = 'Stale NFS file handle'; // 10070 L:116 - _WSAEREMOTE = 'Too many levels of remote in path'; // 10071 L:66 - _WSASYSNOTREADY = 'Network sub-system is unusable'; // 10091 - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL cannot support this application'; // 10092 - _WSANOTINITIALISED = 'WSOCK32.DLL not initialized'; // 10093 - _WSAHOST_NOT_FOUND = 'Host not found'; // 11001 L:1 - _WSATRY_AGAIN = 'Non-authoritative host not found'; // 11002 L:2 - _WSANO_RECOVERY = 'Non-recoverable error'; // 11003 L:3 - _WSANO_DATA = 'No Data'; // 11004 L:4 - _WSAUNKNOWN = 'Unknown Socket Error'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_French.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_French.inc deleted file mode 100644 index 0e564d0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_French.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Procédure de systeme interrompue'; // 10004 - _WSAEBADF = 'Mauvais numero de fichier'; // 10009 - _WSAEACCES = 'Permission refusée'; // 10013 - _WSAEFAULT = 'Mauvais adresse'; // 10014 - _WSAEINVAL = 'Argument invalide'; // 10022 - _WSAEMFILE = 'Trop de fichier ouverts'; // 10024 - _WSAEWOULDBLOCK = 'Opération terminerá en blocage'; // 10035 - _WSAEINPROGRESS = 'Opération est en progrès'; // 10036 - _WSAEALREADY = 'Opération est déjà en progrès'; // 10037 - _WSAENOTSOCK = 'Opération en non-socket'; // 10038 - _WSAEDESTADDRREQ = 'Destination adresse necessaire'; // 10039 - _WSAEMSGSIZE = 'Message trop long'; // 10040 - _WSAEPROTOTYPE = 'Protocole type incorrect pour ce socket'; // 10041 - _WSAENOPROTOOPT = 'Protocole est pas disponible'; // 10042 - _WSAEPROTONOSUPPORT = 'Protocole pas supportée'; // 10043 - _WSAESOCKTNOSUPPORT = 'Socket type pas supporté'; // 10044 - _WSAEOPNOTSUPP = 'Opération pas supportée on socket'; // 10045 - _WSAEPFNOSUPPORT = 'Famille de protocole pas supportée'; // 10046 - _WSAEAFNOSUPPORT = 'Famille de adresse pas supportée par la famille de protocole'; // 10047 - _WSAEADDRINUSE = 'Adresse déjà en use'; // 10048 - _WSAEADDRNOTAVAIL = 'Impossible de assigner l''address en question'; // 10049 - _WSAENETDOWN = 'Réseau est inactif'; // 10050 - _WSAENETUNREACH = 'Réseau est innaccessible'; // 10051 - _WSAENETRESET = 'Connexion de réseau est tombée'; // 10052 - _WSAECONNABORTED = 'Programme a provoqué la connexion de s''arrêter'; // 10053 - _WSAECONNRESET = 'Connexion recommencée'; // 10054 - _WSAENOBUFS = 'Pas de espace dans le buffer'; // 10055 - _WSAEISCONN = 'Socket déjà connecté'; // 10056 - _WSAENOTCONN = 'Socket est pas connecté'; // 10057 - _WSAESHUTDOWN = 'Impossible d''envoyer quand le socket est inactif'; // 10058 - _WSAETOOMANYREFS = 'Trop de references'; // 10059 - _WSAETIMEDOUT = 'Connexion timed-out'; // 10060 - _WSAECONNREFUSED = 'Connexion refusée'; // 10061 - _WSAELOOP = 'Trop de niveau de symbolique links'; // 10062 - _WSAENAMETOOLONG = 'Nom du fichier trop long'; // 10063 - _WSAEHOSTDOWN = 'Host est inactif'; // 10064 - _WSAEHOSTUNREACH = 'Host untrouvable'; // 10065 - _WSAENOTEMPTY = 'Directory pas vide'; // 10066 - _WSAEPROCLIM = 'Trop de process'; // 10067 - _WSAEUSERS = 'Trop de utulisateurs'; // 10068 - _WSAEDQUOT = 'Disk quota dexcadée'; // 10069 - _WSAESTALE = 'NFS handle du fichier timeout'; // 10070 - _WSAEREMOTE = 'Trop niveau de remote dans le path'; // 10071 - _WSASYSNOTREADY = 'Reseau sub-system est inutilisable'; // 10091 - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL ne supporte pas cette application'; // 10092 - _WSANOTINITIALISED = 'WSOCK32.DLL pas initialisé'; // 10093 - _WSAHOST_NOT_FOUND = 'Host pas trouvé'; // 11001 - _WSATRY_AGAIN = 'Non-authoritative host pas trouvé'; // 11002 - _WSANO_RECOVERY = 'Unrecoverable error'; // 11003 - _WSANO_DATA = 'Pas de data'; // 11004 - _WSAUNKNOWN = 'Inconnu Socket Error'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_German.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_German.inc deleted file mode 100644 index 765cf34..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_German.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Unterbrochener Systemaufruf'; // 10004 - _WSAEBADF = 'Ungültige Dateinummer'; // 10009 - _WSAEACCES = 'Zugriff verweigert'; // 10013 - _WSAEFAULT = 'Ungültige Adresse'; // 10014 - _WSAEINVAL = 'Ungültiger oder falscher Parameter'; // 10022 - _WSAEMFILE = 'Zu viele offene Dateien'; // 10024 - _WSAEWOULDBLOCK = 'Aktion würde System blockieren'; // 10035 - _WSAEINPROGRESS = 'Aktion wird ausgeführt'; // 10036 - _WSAEALREADY = 'Aktion wird bereits ausgeführt'; // 10037 - _WSAENOTSOCK = 'Socket Aktion auf ungültigem Socket'; // 10038 - _WSAEDESTADDRREQ = 'Zieladresse erforderlich'; // 10039 - _WSAEMSGSIZE = 'Nachricht ist zu lang'; // 10040 - _WSAEPROTOTYPE = 'Falsches Protokoll für Socket'; // 10041 - _WSAENOPROTOOPT = 'Protokoll ist nicht verfügbar'; // 10042 - _WSAEPROTONOSUPPORT = 'Protokoll wird nicht unterstützt'; // 10043 - _WSAESOCKTNOSUPPORT = 'Socket Typ wird nicht unterstützt'; // 10044 - _WSAEOPNOTSUPP = 'Aktion wird nicht von Socket unterstützt'; // 10045 - _WSAEPFNOSUPPORT = 'Protokollfamilie wird nicht unterstützt'; // 10046 - _WSAEAFNOSUPPORT = 'Addressfamilie wird durch Protokollfamilie nicht unterstützt'; // 10047 - _WSAEADDRINUSE = 'Addresse wird bereits benutzt'; // 10048 - _WSAEADDRNOTAVAIL = 'Kann angeforderte Adresse nicht zuweisen'; // 10049 - _WSAENETDOWN = 'Kein Netzwerk'; // 10050 - _WSAENETUNREACH = 'Netzwerk ist nicht erreichbar'; // 10051 - _WSAENETRESET = 'Netzwerk hat Verbindung durch Reset abgebrochen'; // 10052 - _WSAECONNABORTED = 'Software hat Verbindungsabbruch ausgelöst'; // 10053 - _WSAECONNRESET = 'Verbindungsreset durch Peer'; // 10054 - _WSAENOBUFS = 'Kein Bufferplatz verfügbar'; // 10055 - _WSAEISCONN = 'Socket ist bereits verbunden'; // 10056 - _WSAENOTCONN = 'Socket ist nicht verbunden'; // 10057 - _WSAESHUTDOWN = 'Kann nach Socket-Trennung nicht verbinden'; // 10058 - _WSAETOOMANYREFS = 'Zu viele Referenzen Kann nicht splitten'; // 10059 - _WSAETIMEDOUT = 'Verbindung Time out !'; // 10060 - _WSAECONNREFUSED = 'Verbindung abgelehnt'; // 10061 - _WSAELOOP = 'Zu viele Ebenen symbolischer Verknüpfungen'; // 10062 - _WSAENAMETOOLONG = 'Dateiname zu lang'; // 10063 - _WSAEHOSTDOWN = 'Host ist nicht verfügbar'; // 10064 - _WSAEHOSTUNREACH = 'Keine Verbindung zum Host'; // 10065 - _WSAENOTEMPTY = 'Verzeichnis ist nicht leer'; // 10066 - _WSAEPROCLIM = 'Zu viele Prozesse'; // 10067 - _WSAEUSERS = 'Zu viele Benutzer'; // 10068 - _WSAEDQUOT = 'Festplattenspeicherplatz erreicht'; // 10069 - _WSAESTALE = 'Alte NFS Dateiverknüpfung'; // 10070 - _WSAEREMOTE = 'Zu viele Ebenen im Remote Pfad'; // 10071 - _WSASYSNOTREADY = 'Netzwerk Subsystem ist nicht zu gebrauchen'; // 10091 - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL kann diese Anwendung nicht unterstützen'; // 10092 - _WSANOTINITIALISED = 'WSOCK32.DLL nicht initialisiert'; // 10093 - _WSAHOST_NOT_FOUND = 'Host nicht gefunden'; // 11001 - _WSATRY_AGAIN = 'Unzuverlässigen Host nicht gefunden'; // 11002 - _WSANO_RECOVERY = 'Fehler - Kein Wiederherstellung möglich'; // 11003 - _WSANO_DATA = 'Keine Daten'; // 11004 - _WSAUNKNOWN = 'Unbekannter Socket Fehler'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Italian.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Italian.inc deleted file mode 100644 index c1529b8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Italian.inc +++ /dev/null @@ -1,54 +0,0 @@ -ResourceString - - _WSAEINTR = 'Chiamata di sistema interrotta'; - _WSAEBADF = 'Numero di file errato'; - _WSAEACCES = 'Accesso negato'; - _WSAEFAULT = 'Indirizzo errato'; - _WSAEINVAL = 'Argomento non valido'; - _WSAEMFILE = 'Troppi file aperti'; - _WSAEWOULDBLOCK = 'Operazione bloccante'; - _WSAEINPROGRESS = 'Operazione in corso'; - _WSAEALREADY = 'Operation già in corso'; - _WSAENOTSOCK = 'Operazione socket eseguita non su socket'; - _WSAEDESTADDRREQ = 'Indirizzo di destinazione necessario'; - _WSAEMSGSIZE = 'Messaggio troppo lungo'; - _WSAEPROTOTYPE = 'Tipo di protocollo errato per questa socket'; - _WSAENOPROTOOPT = 'Protocollo non disponibile'; - _WSAEPROTONOSUPPORT = 'Protocollo non supportato'; - _WSAESOCKTNOSUPPORT = 'Tipo di socket non supportato'; - _WSAEOPNOTSUPP = 'Operazione non supportata dalla socket'; - _WSAEPFNOSUPPORT = 'Famiglia di protocolli non supportata'; - _WSAEAFNOSUPPORT = 'Famiglia di indirizzi non supportata dalla famiglia di protocolli'; - _WSAEADDRINUSE = 'Indirizzo già in uso'; - _WSAEADDRNOTAVAIL = 'Impossibile assegnare l''indirizzo richiesto'; - _WSAENETDOWN = 'La rete non funziona'; - _WSAENETUNREACH = 'La rete è irraggiungibile'; - _WSAENETRESET = 'La rete ha interrotto la connessione'; - _WSAECONNABORTED = 'Il software ha causato l''interruzione della connessione'; - _WSAECONNRESET = 'Connessione interrotta'; - _WSAENOBUFS = 'Non c''è spazio buffer disponibile'; - _WSAEISCONN = 'La socket è già connessa'; - _WSAENOTCONN = 'La socket non è connessa'; - _WSAESHUTDOWN = 'Impossibile inviare pacchetti su una socket chiusa'; - _WSAETOOMANYREFS = 'Troppi riferimenti'; - _WSAETIMEDOUT = 'Timeout della connessione'; - _WSAECONNREFUSED = 'Connessione rifiutata'; - _WSAELOOP = 'Troppi livelli di link simbolici'; - _WSAENAMETOOLONG = 'Il nome del file è troppo lungo'; - _WSAEHOSTDOWN = 'L''host è fermo'; - _WSAEHOSTUNREACH = 'L''host è irraggiungibile'; - _WSAENOTEMPTY = 'La directory non è vuota'; - _WSAEPROCLIM = 'Troppi processi in esecuzione'; - _WSAEUSERS = 'Troppi utenti collegati'; - _WSAEDQUOT = 'La quota disco è stata superata'; - _WSAESTALE = 'NFS file handle scaduto'; - _WSAEREMOTE = 'Troppi livelli remoti nel path'; - _WSASYSNOTREADY = 'Il sottosistema di rete è inutilizzabile'; - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL non supporta questa applicazione'; - _WSANOTINITIALISED = 'WSOCK32.DLL non inizializzata'; - _WSAHOST_NOT_FOUND = 'Host non trovato'; - _WSATRY_AGAIN = 'Host non-autoritativo non trovato'; - _WSANO_RECOVERY = 'Errore irreversibile'; - _WSANO_DATA = 'Dati mancanti'; - _WSAUNKNOWN = 'Unknown Socket Error'; - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_LowMem.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_LowMem.inc deleted file mode 100644 index 53247f8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_LowMem.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = '10004'; - _WSAEBADF = '10009'; - _WSAEACCES = '10013'; - _WSAEFAULT = '10014'; - _WSAEINVAL = '10022'; - _WSAEMFILE = '10024'; - _WSAEWOULDBLOCK = '10035'; - _WSAEINPROGRESS = '10036'; - _WSAEALREADY = '10037'; - _WSAENOTSOCK = '10038'; - _WSAEDESTADDRREQ = '10039'; - _WSAEMSGSIZE = '10040'; - _WSAEPROTOTYPE = '10041'; - _WSAENOPROTOOPT = '10042'; - _WSAEPROTONOSUPPORT = '10043'; - _WSAESOCKTNOSUPPORT = '10044'; - _WSAEOPNOTSUPP = '10045'; - _WSAEPFNOSUPPORT = '10046'; - _WSAEAFNOSUPPORT = '10047'; - _WSAEADDRINUSE = '10048'; - _WSAEADDRNOTAVAIL = '10049'; - _WSAENETDOWN = '10050'; - _WSAENETUNREACH = '10051'; - _WSAENETRESET = '10052'; - _WSAECONNABORTED = '10053'; - _WSAECONNRESET = '10054'; - _WSAENOBUFS = '10055'; - _WSAEISCONN = '10056'; - _WSAENOTCONN = '10057'; - _WSAESHUTDOWN = '10058'; - _WSAETOOMANYREFS = '10059'; - _WSAETIMEDOUT = '10060'; - _WSAECONNREFUSED = '10061'; - _WSAELOOP = '10062'; - _WSAENAMETOOLONG = '10063'; - _WSAEHOSTDOWN = '10064'; - _WSAEHOSTUNREACH = '10065'; - _WSAENOTEMPTY = '10066'; - _WSAEPROCLIM = '10067'; - _WSAEUSERS = '10068'; - _WSAEDQUOT = '10069'; - _WSAESTALE = '10070'; - _WSAEREMOTE = '10071'; - _WSASYSNOTREADY = '10091'; - _WSAVERNOTSUPPORTED = '10092'; - _WSANOTINITIALISED = '10093'; - _WSAHOST_NOT_FOUND = '11001'; - _WSATRY_AGAIN = '11002'; - _WSANO_RECOVERY = '11003'; - _WSANO_DATA = '11004'; - _WSAUNKNOWN = ''; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Portuguese.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Portuguese.inc deleted file mode 100644 index 5b34750..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Portuguese.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Chamada de sistema interrompida'; // 10004 - _WSAEBADF = 'Numero de arquivo invalido'; // 10009 - _WSAEACCES = 'Permissao negada'; // 10013 - _WSAEFAULT = 'Endereco invalido'; // 10014 - _WSAEINVAL = 'Argumento invalido'; // 10022 - _WSAEMFILE = 'Muitos arquivos abertos'; // 10024 - _WSAEWOULDBLOCK = 'Operacao sera bloqueada'; // 10035 - _WSAEINPROGRESS = 'Operacao em andamento'; // 10036 - _WSAEALREADY = 'Operacao ja esta em andamento'; // 10037 - _WSAENOTSOCK = 'Operacao de Socket em Nao-Socket'; // 10038 - _WSAEDESTADDRREQ = 'Endereco de destino obrigatorio'; // 10039 - _WSAEMSGSIZE = 'Menssagem muito longa'; // 10040 - _WSAEPROTOTYPE = 'Tipo errado de protocolo para este socket'; // 10041 - _WSAENOPROTOOPT = 'Protocolo nao disponivel'; // 10042 - _WSAEPROTONOSUPPORT = 'Protocolo nao suportado'; // 10043 - _WSAESOCKTNOSUPPORT = 'Tipo de Socket nao suportado'; // 10044 - _WSAEOPNOTSUPP = 'Operacao nao suportada pelo socket'; // 10045 - _WSAEPFNOSUPPORT = 'Familia de protocolo nao suportada'; // 10046 - _WSAEAFNOSUPPORT = 'Endereco de familia nao suportado pela familia do protocolo'; // 10047 - _WSAEADDRINUSE = 'Endereco em uso'; // 10048 - _WSAEADDRNOTAVAIL = 'Nao e possivel atribuir o endereco solicitado'; // 10049 - _WSAENETDOWN = 'A rede esta fora do ar'; // 10050 - _WSAENETUNREACH = 'A rede nao pode ser encontrada'; // 10051 - _WSAENETRESET = 'A rede desligou a conexao ao reinicializar'; // 10052 - _WSAECONNABORTED = 'O software causou uma desconexao'; // 10053 - _WSAECONNRESET = 'Conexao reinicializada por outro computador'; // 10054 - _WSAENOBUFS = 'Nao ha espaco no buffer'; // 10055 - _WSAEISCONN = 'Socket ja esta conectado'; // 10056 - _WSAENOTCONN = 'Socket nao esta conectado'; // 10057 - _WSAESHUTDOWN = 'Nao e possivel enviar apos desligamento do socket'; // 10058 - _WSAETOOMANYREFS = 'Muitas referencias nao e possivel fazer mais ligacoes'; // 10059 - _WSAETIMEDOUT = 'Tempo maximo da conexao excedido'; // 10060 - _WSAECONNREFUSED = 'Conexao recusada'; // 10061 - _WSAELOOP = 'Muitos niveis de links simbolicos'; // 10062 - _WSAENAMETOOLONG = 'Nome de arquivo muito longo'; // 10063 - _WSAEHOSTDOWN = 'Servidor esta fora do ar'; // 10064 - _WSAEHOSTUNREACH = 'Nao ha rota para o servidor'; // 10065 - _WSAENOTEMPTY = 'Diretorio nao esta vazio'; // 10066 - _WSAEPROCLIM = 'Muitos processos'; // 10067 - _WSAEUSERS = 'Muitos usuarios'; // 10068 - _WSAEDQUOT = 'Quota de disco excedida'; // 10069 - _WSAESTALE = 'Handle do arquivo NFS antigo'; // 10070 - _WSAEREMOTE = 'Muitos niveis de caminhos remotos'; // 10071 - _WSASYSNOTREADY = 'Nao e possivel usar o sub-sistema da rede'; // 10091 - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL nao suporta esta operacao'; // 10092 - _WSANOTINITIALISED = 'WSOCK32.DLL nao inicializada'; // 10093 - _WSAHOST_NOT_FOUND = 'Servidor nao encontrado'; // 11001 - _WSATRY_AGAIN = 'Servidor secundario nao encontrado'; // 11002 - _WSANO_RECOVERY = 'Erro nao-recuperavel'; // 11003 - _WSANO_DATA = 'Nao ha dados'; // 11004 - _WSAUNKNOWN = 'Erro de socket desconhecido'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Russian.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Russian.inc deleted file mode 100644 index 91a932a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Russian.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Ïðåðâàííûé ñèñòåìíûé âûçîâ'; - _WSAEBADF = 'Ïëîõîé íîìåð ôàéëà'; - _WSAEACCES = 'Äîñòóï çàïðåùåí'; - _WSAEFAULT = 'Ïëîõîé àäðåñ'; - _WSAEINVAL = 'Íåäîïóñòèìûé ïàðàìåòð'; - _WSAEMFILE = 'Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ'; - _WSAEWOULDBLOCK = 'Îïåðàöèÿ âîçìîæíî çàáëîêèðîâàíà'; - _WSAEINPROGRESS = 'Îïåðàöèÿ ñåé÷àñ âûïîëíÿåòñÿ'; - _WSAEALREADY = 'Îïåðàöèÿ óæå âûïîëíÿåòñÿ'; - _WSAENOTSOCK = 'Íåäîïóñòèìàÿ îïåðàöèÿ. Èñïîëüçóåòñÿ íå ñîêåò'; - _WSAEDESTADDRREQ = 'Òðåáóåòñÿ àäðåñ íàçíà÷åíèÿ'; - _WSAEMSGSIZE = 'Ñîîáùåíèå ñëèøêîì äëèííîå'; - _WSAEPROTOTYPE = 'Íåïðàâèëüíûé òèï ïðîòîêîëà äëÿ ñîêåòà'; - _WSAENOPROTOOPT = 'Ïðîòîêîë íå äîñòóïåí'; - _WSAEPROTONOSUPPORT = 'Ïðîòîêîë íå ïîääåðæèâàåòñÿ'; - _WSAESOCKTNOSUPPORT = 'Òèï ñîêåòà íå ïîääåðæèâàåòñÿ'; - _WSAEOPNOTSUPP = 'Îïåðàöèÿ íå ïîääåðæèâàåòñÿ äëÿ ñîêåòà'; - _WSAEPFNOSUPPORT = 'Ñåìåéñòâî ïðîòîêîëîâ íå ïîääåðæèâàåòñÿ'; - _WSAEAFNOSUPPORT = 'Ãðóïïà àäðåñîâ íå ïîääåðæèâàåòñÿ ñåìåéñòâîì ïðîòîêîëîâ'; - _WSAEADDRINUSE = 'Àäðåñ óæå èñïîëüçóåòñÿ'; - _WSAEADDRNOTAVAIL = 'Íåâîçìîæíî íàçíà÷èòü òðåáóåìûé àäðåñ'; - _WSAENETDOWN = 'Ñåòü îñòàíîâëåíà'; - _WSAENETUNREACH = 'Ñåòü íåäîñòóïíà'; - _WSAENETRESET = 'Ñåòü îáîðâàëà ñîåäèíåíèå ïðè ïîâòîðíîé èíèöèàëèçàöèè'; - _WSAECONNABORTED = 'Ïðîãðàììíîå îáåñïå÷åíèå âûçâàëî àâàðèéíîå ïðåêðàùåíèå ñîåäèíåíèÿ'; - _WSAECONNRESET = 'Ñîåäèíåíèå îáîðâàíî äðóãèì óçëîì ñåòè'; - _WSAENOBUFS = 'Áóôåð ïåðåïîëíåí'; - _WSAEISCONN = 'Ñîêåò óæå ïîäêëþ÷åí'; - _WSAENOTCONN = 'Ñîêåò íå ïîäêëþ÷åí'; - _WSAESHUTDOWN = 'Íåâîçìîæíî îòïðàâèòü ïîñëå çàâåðøåíèÿ ñîåäèíåíèÿ'; - _WSAETOOMANYREFS = 'Ñëèøêîì ìíîãî ññûëîê íåâîçìîæíî îáúåäèíèòü'; - _WSAETIMEDOUT = 'Ïðåâûøåíî âðåìÿ îæèäàíèÿ îòâåòà'; - _WSAECONNREFUSED = 'Ñîåäèíåíèå îòâåðãíóòî'; - _WSAELOOP = 'Ñëèøêîì ìíîãî óðîâíåé ñèìâîëüíûõ ññûëîê'; - _WSAENAMETOOLONG = 'Ñëèøêîì äëèííîå èìÿ ôàéëà'; - _WSAEHOSTDOWN = 'Õîñò âûêëþ÷åí'; - _WSAEHOSTUNREACH = 'Íåò ìàðøðóòà ê õîñòó'; - _WSAENOTEMPTY = 'Äèðåêòîðèÿ íå ïóñòà'; - _WSAEPROCLIM = 'Ñëèøêîì ìíîãî ïðîöåññîâ'; - _WSAEUSERS = 'Ñëèøêîì ìíîãî ïîëüçîâàòåëåé'; - _WSAEDQUOT = 'Ïðåâûøåíî âûäåëåííîå äèñêîâîå ïðîñòðàíñòâî'; - _WSAESTALE = 'Óñòàðåë ôàéëîâûé äåñêðèïòîð NFS'; - _WSAEREMOTE = 'Ñëèøêîì áîëüøàÿ âëîæåííîñòü êàòàëîãîâ â óäàëåííîì ïóòè'; - _WSASYSNOTREADY = 'Ñåòåâàÿ ïîäñèñòåìà íå èñïîëüçóåòñÿ'; - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL áèáëèîòåêà íå ïîääåðæèâàåòñÿ ýòèì ïðèëîæåíèåì'; - _WSANOTINITIALISED = 'WSOCK32.DLL íå èíèöèàëèçèðîâàíà'; - _WSAHOST_NOT_FOUND = 'Õîñò íå íàéäåí'; - _WSATRY_AGAIN = 'Íåîôèöèàëüíûé õîñò íå íàéäåí'; - _WSANO_RECOVERY = 'Íåïîïðàâèìàÿ îøèáêà'; - _WSANO_DATA = 'Íåò äàííûõ'; - _WSAUNKNOWN = 'Íåèçâåñòíàÿ îøèáêà ñîêåòà'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Spanish.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Spanish.inc deleted file mode 100644 index cc3db98..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Spanish.inc +++ /dev/null @@ -1,55 +0,0 @@ -ResourceString - - _WSAEINTR = 'Procedura de sistema interrumpida'; // 10004 - _WSAEBADF = 'Número de archivo incorrecto'; // 10009 - _WSAEACCES = 'Permiso negado'; // 10013 - _WSAEFAULT = 'Dirección incorrecta'; // 10014 - _WSAEINVAL = 'Argumento inválido'; // 10022 - _WSAEMFILE = 'Demasiados archivos abiertos'; // 10024 - _WSAEWOULDBLOCK = 'Operación se bloquearía'; // 10035 - _WSAEINPROGRESS = 'Operación ahora en marcha'; // 10036 - _WSAEALREADY = 'Operación ya en marcha'; // 10037 - _WSAENOTSOCK = 'Operación de socket en un non-socket'; // 10038 - _WSAEDESTADDRREQ = 'Dirección del destinatario requerido'; // 10039 - _WSAEMSGSIZE = 'Mensaje demasiado largo'; // 10040 - _WSAEPROTOTYPE = 'Tipo de protocolo incorrecto para el socket'; // 10041 - _WSAENOPROTOOPT = 'Protocolo no disponible'; // 10042 - _WSAEPROTONOSUPPORT = 'Protocolo no soportado'; // 10043 - _WSAESOCKTNOSUPPORT = 'Tipo de socket no soportado'; // 10044 - _WSAEOPNOTSUPP = 'Operación no soportada en socket'; // 10045 - _WSAEPFNOSUPPORT = 'Familia de protocolos no soportada'; // 10046 - _WSAEAFNOSUPPORT = 'Familia de direcciones no soportada por la familia de protocolos'; // 10047 - _WSAEADDRINUSE = 'Dirección ya en uso'; // 10048 - _WSAEADDRNOTAVAIL = 'No se puede asignar la dirección solicitada'; // 10049 - _WSAENETDOWN = 'La red está parada'; // 10050 - _WSAENETUNREACH = 'La red está inutilizable'; // 10051 - _WSAENETRESET = 'La red interrumpió la conexión'; // 10052 - _WSAECONNABORTED = 'El sistema causó la interrupción de la conexión'; // 10053 - _WSAECONNRESET = 'Conexión interrumpida'; // 10054 - _WSAENOBUFS = 'No hay espacio disponible en el buffer'; // 10055 - _WSAEISCONN = 'Socket ya está conectado'; // 10056 - _WSAENOTCONN = 'Socket no está conectado'; // 10057 - _WSAESHUTDOWN = 'Imposible enviar cuando el socket esta cerrado'; // 10058 - _WSAETOOMANYREFS = 'Demasiadas referencias'; // 10059 - _WSAETIMEDOUT = 'Conexión tuvo un timeout'; // 10060 - _WSAECONNREFUSED = 'Conexión rechazada'; // 10061 - _WSAELOOP = 'Demasiados niveles de links simbólicos'; // 10062 - _WSAENAMETOOLONG = 'El nombre del archivo es muy grande'; // 10063 - _WSAEHOSTDOWN = 'Host está parado'; // 10064 - _WSAEHOSTUNREACH = 'No hay ruta para el host'; // 10065 - _WSAENOTEMPTY = 'El directorio no está vacío'; // 10066 - _WSAEPROCLIM = 'Demasiados procesos'; // 10067 - _WSAEUSERS = 'Demasiados usuarios'; // 10068 - _WSAEDQUOT = 'Contingente del disco excedido'; // 10069 - _WSAESTALE = 'NFS handle archivo vencido'; // 10070 - _WSAEREMOTE = 'Demasiados niveles remotos en el path'; // 10071 - _WSASYSNOTREADY = 'Sub-sistema de la red inutilizable'; // 10091 - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL no puede soportar esta aplicación'; // 10092 - _WSANOTINITIALISED = 'WSOCK32.DLL no fue inicializado'; // 10093 - _WSAHOST_NOT_FOUND = 'Host no fue encontrado'; // 11001 - _WSATRY_AGAIN = 'Host no-autoritativo no fue encontrado'; // 11002 - _WSANO_RECOVERY = 'No recuperable error'; // 11003 - _WSANO_DATA = 'No hay datos'; // 11004 - _WSAUNKNOWN = 'Error de socket desconocido'; - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Turkish.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Turkish.inc deleted file mode 100644 index e4a2501..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/Resource_Turkish.inc +++ /dev/null @@ -1,53 +0,0 @@ -ResourceString - - _WSAEINTR = 'Kesilmiþ system çaðrýsý'; - _WSAEBADF = 'Yanlýþ dosya numarasý'; - _WSAEACCES = 'Eriþim engellendi'; - _WSAEFAULT = 'Yanlýþ adres'; - _WSAEINVAL = 'Geçersiz argüman'; - _WSAEMFILE = 'Çok fazla açýk dosya'; - _WSAEWOULDBLOCK = 'Operasyon kesintiye uðrar'; - _WSAEINPROGRESS = 'Operasyon þu anda sürüyor'; - _WSAEALREADY = 'Operasyon zaten devam ediyor'; - _WSAENOTSOCK = 'Soket olmayan üzerinde soket operasyonu'; - _WSAEDESTADDRREQ = 'Hedef adresi gerekli'; - _WSAEMSGSIZE = 'Mesaj çok uzun'; - _WSAEPROTOTYPE = 'Soket için protokolün tipi yanlýþ'; - _WSAENOPROTOOPT = 'Protokol mevcut deðil'; - _WSAEPROTONOSUPPORT = 'Protokol desteklenmiyor'; - _WSAESOCKTNOSUPPORT = 'Soket tipi desteklenmiyor'; - _WSAEOPNOTSUPP = 'Operasyon soket üzerinde desteklenmiyor'; - _WSAEPFNOSUPPORT = 'Protokol ailesi desteklenmiyor'; - _WSAEAFNOSUPPORT = 'Adres ailesi protokol ailesi tarafýndan desteklenmiyor'; - _WSAEADDRINUSE = 'Adres zaten kullanýmda'; - _WSAEADDRNOTAVAIL = 'Ýstenen adres atanamýyor'; - _WSAENETDOWN = 'Að trafiðe kapalý'; - _WSAENETUNREACH = 'Aða eriþilemiyor'; - _WSAENETRESET = 'Að baðlantýyý kapattý'; - _WSAECONNABORTED = 'Yazýlým baðlantýnýn kopmasýna sebep oldu'; - _WSAECONNRESET = 'Diðer uçtaki bilgisayar baðlantýyý kesti'; - _WSAENOBUFS = 'Bellek alaný kalmadý'; - _WSAEISCONN = 'Soket zaten baðlý'; - _WSAENOTCONN = 'Soket baðlý deðil'; - _WSAESHUTDOWN = 'Soket kapandýktan sonra gönderilemiyor'; - _WSAETOOMANYREFS = 'Çok fazla referans iliþtirilemiyor'; - _WSAETIMEDOUT = 'Baðantý zamaný doldu'; - _WSAECONNREFUSED = 'Baðlantý geri çevrildi'; - _WSAELOOP = 'Çok fazla sembolik hat'; - _WSAENAMETOOLONG = 'Dosya ismi çok uzun'; - _WSAEHOSTDOWN = 'Hedef bilgisayar kullaným dýþý'; - _WSAEHOSTUNREACH = 'Hedef bilgisayara yol bulunamadý'; - _WSAENOTEMPTY = 'Dizin boþ deðil'; - _WSAEPROCLIM = 'Çok fazla süreç'; - _WSAEUSERS = 'Çok fazla kullanýcý'; - _WSAEDQUOT = 'Disk kotasý aþýldý'; - _WSAESTALE = 'Geçersiz NFS dosya göstergeci'; - _WSAEREMOTE = 'Uzaktakinin yolunda çok fazla seviye'; - _WSASYSNOTREADY = 'Að altsistemi kullanýlamaz durumda'; - _WSAVERNOTSUPPORTED = 'WSOCK32.DLL DLL bu uygulamayý destekliyemiyor'; - _WSANOTINITIALISED = 'WSOCK32.DLL baþlatýlmamýþ'; - _WSAHOST_NOT_FOUND = 'Hedef bilgisayar bulunamadý'; - _WSATRY_AGAIN = 'Ýzin gerektirmeyen hedef bilgisayar bulunamadý'; - _WSANO_RECOVERY = 'Geri dönülemez hata'; - _WSANO_DATA = 'Veri yok'; - _WSAUNKNOWN = 'Bilinmeyen soket hatasý'; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXFree.def b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXFree.def deleted file mode 100644 index 9c00d9b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXFree.def +++ /dev/null @@ -1,64 +0,0 @@ -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -// ONLY ENABLE THIS - IF YOU LICENSED OUR TLS-EDITION OF DXSOCK -// IT IS NOT FREE - IT IS NOT INCLUDED WITH WWS - IT'S AS A LEGAL ISSUE! -// -{.$DEFINE TLS_EDITION} - -// ONLY ENABLE THIS - IF YOU LICENSED OUR CODE TRACER SUITE -{.$DEFINE CODE_TRACER} - -// custom feature for SMTP Sender -> SMTP Relay -> track session ID -{$DEFINE SMTP_SESSION_FEATURE} - -// THESE CAN BE CHANGED BY YOU: -{.$DEFINE FINALBUILD} -{.$DEFINE OCX_ONLY} // not done - will be in DXSock 4.0 -{.$DEFINE OBJECTS_ONLY} -{$DEFINE ASM8086} -// LANGUAGE FILE FOR ERROR MESSAGE TEXT -{$DEFINE ENGLISH1} -{.$DEFINE FRENCH1} -{.$DEFINE GERMAN1} -{.$DEFINE ITALIAN1} -{.$DEFINE LOWMEM1} -{.$DEFINE PORTUGUESE1} -{.$DEFINE RUSSIAN1} -{.$DEFINE SPANISH1} -{.$DEFINE TURKISH1} - -//////////////////////////////////////////////////////////////////////////////// -{$IFDEF VER90} - {$DEFINE VER100} -{$ENDIF} -{$IFDEF VER105} - {$DEFINE VER100} -{$ENDIF} - -{$IFDEF FINALBUILD} - {$ALIGN ON} - {$ASSERTIONS OFF} - {$DEBUGINFO OFF} - {$DEFINITIONINFO OFF} - {$DESCRIPTION 'Uses Brain Patchwork DX, LLC. DXSock 3.0.0'} - {$EXTENDEDSYNTAX ON} - {$HINTS ON} - {$IMAGEBASE $2112CAFE} - {$IMPORTEDDATA ON} - {$IOCHECKS ON} - {$LOCALSYMBOLS OFF} - {$LONGSTRINGS ON} - {$OBJEXPORTALL ON} - {$OPTIMIZATION ON} - {$OVERFLOWCHECKS OFF} - {$RANGECHECKS OFF} - {$REALCOMPATIBILITY OFF} - {$REFERENCEINFO OFF} - {$RUNONLY OFF} - {$STACKFRAMES OFF} - {$VARSTRINGCHECKS ON} - {$WARNINGS ON} -{$ENDIF} -// END OF FILE // - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPHeaderTools.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPHeaderTools.pas deleted file mode 100644 index abc2b6c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPHeaderTools.pas +++ /dev/null @@ -1,563 +0,0 @@ -unit uRODXHTTPHeaderTools; - -interface - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXHTTPHeaderTools -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// -{$I uRODXSock.def} -uses - uRODXString, - Classes; - -Type - PHeaderInfo=^THeaderInfo; - THeaderInfo=Record - ContentLength:Integer; - Raw:String; // Original Header Request - Protocol:String; - Method:String; //GET, HEAD, etc. All caps!!! - URI:String; - PhysPath:String; - Allow:String; - AuthType:String; // BASIC - AuthName:String; - AuthPass:String; - Date:String; - Pragma:String; - CacheControl:String; - Connection:String; - TransferEncoding:String; - Upgrade:String; - Via:String; - Host:String; // multiple domains on single IP! - From:String; - IfModSince:String; - IfMatch:String; - IfNoneMatch:String; - IfRange:String; - IfUnModSince:String; - MaxForwards:String; - ProxyAuthorization:String; - KeepAlive:String; - PublicCache:String; // 2.3 renamed field! - Range:String; - Referer:String; - UserAgent:String; - ContentType:String; - Accept:String; - AcceptCharset:String; - AcceptEncoding:String; - AcceptLanguage:String; - ClientName:String; - ClientAddr:String; - ClientHost:String; - Cookie:String; - QueryString:String; - Weferer:String; - WserAgent:String; - Forwarded:String; - ForwardedFor:String; - ProxyConnection:String; - CacheInfo:String; - PostData:String; // 3.0 - HostRootPath:String; // needed for SSI+ Banner routines and ISAPI Variables - All_RAW:String; // needed for trace, and ISAPIs! - All_HTTP:String; - Unknown:String; - end; - - TDXHTTPHeaderTools = class(TDXComponent) - private - fSessionHeader:PHeaderInfo; - protected - Function FindUnknownHeader(ServerVariable:String):String; - Procedure ReplaceUnknownHeader(ServerVariable, VariableValue:String); - Function UnknownHeaderExists(ServerVariable:String):Boolean; - public - constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF} - Destructor Destroy; override; - Procedure Init(HTTPHeader:PHeaderInfo); - // 2.0.12 - Function HeaderGetString(ServerVariable:String):String; - Function HeaderGetInteger(ServerVariable:String):Integer; - Function HeaderDataExists(ServerVariable:String):Boolean; - Function QueryGetString(ServerVariable:String):String; - Function QueryGetInteger(ServerVariable:String):Integer; - Function QueryDataExists(ServerVariable:String):Boolean; - - Function AddHeader(ServerVariable, VariableValue:String):Boolean; - Function SetHeader(ServerVariable, VariableValue:String):Boolean; - Function ToStrings:TStrings; - - published - end; - -implementation - -Uses - SysUtils; - -constructor TDXHTTPHeaderTools.Create(AOwner:TComponent); -Begin - Inherited Create(AOwner); -end; - -Destructor TDXHTTPHeaderTools.Destroy; -Begin - Inherited Destroy; -end; - -Procedure TDXHTTPHeaderTools.Init(HTTPHeader:PHeaderInfo); -Begin - fSessionHeader:=HTTPHeader; - fSessionHeader^.ContentLength:=0; -End; - -Function TDXHTTPHeaderTools.HeaderGetString(ServerVariable:String):String; -Var - Ch:Char; - Ws:String; - URI2:String; - -Begin - Result:=''; - Ws:=Uppercase(ServerVariable); - If Ws='' then Exit; //2.0.11 - If (Copy(Ws,1,5)='HTTP_') then Begin - Delete(Ws,1,5); // 3.0 - End; - Ch:=Ws[1]; - With fSessionHeader^ do - Case Ch of - 'A':If (Ws='ALLOW') then Result:=Allow - Else If (Ws='ALL_RAW') then Result:=All_Raw // .9k & 2.3b - Else If (Ws='ALL_HTTP') then Result:=All_HTTP // 3.0 - Else If (Ws='AUTHTYPE') or (Ws='AUTH_TYPE') then Result:=AuthType - Else If (Ws='AUTHNAME') or (Ws='AUTH_NAME') or (Ws='AUTH_USER') then Result:=AuthName - Else If (Ws='AUTHPASS') or (Ws='AUTH_PASS') or (Ws='AUTH_PASSWORD') then Result:=AuthPass - Else If (Ws='ACCEPT') then Result:=Accept - Else If (Ws='ACCEPT_CHARSET') or (Ws='ACCEPTCHARSET') then Result:=AcceptCharset - Else If (Ws='ACCEPT_ENCODING') or (Ws='ACCEPTENCODING') then Result:=AcceptEncoding - Else If (Ws='ACCEPT_LANGUAGE') or (Ws='ACCEPTLANGUAGE') then Result:=AcceptLanguage - Else Result := FindUnknownHeader(ServerVariable); - 'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then Result:=IntToStr(ContentLength) - Else If (Ws='CACHECONTROL') or (Ws='CACHE_CONTROL') then Result:=CacheControl - Else If (Ws='CACHE_INFO') then Result:=CacheInfo - Else If (Ws='CONNECTION') then Result:=Connection - Else If (Ws='CONTENT_TYPE') or (Ws='CONTENTTYPE') then Result:=ContentType - Else If (Ws='CLIENTNAME') or (Ws='CLIENT_NAME') then Result:=ClientName - Else If (Ws='CLIENTADDR') or (Ws='CLIENT_ADDR') then Result:=ClientAddr - Else If (Ws='COOKIE') then Result:=Cookie - Else Result := FindUnknownHeader(ServerVariable); - 'D':If (Ws='DATE') then Result:=Date - Else Result := FindUnknownHeader(ServerVariable); - 'F':If (Ws='FROM') then Result:=From - Else If (Ws='FORWARDED') then Result:=Forwarded - Else If (Ws='FORWARDED_FOR') then Result:=ForwardedFor - Else Result := FindUnknownHeader(ServerVariable); - 'H':If (Ws='HOST') then Begin - Result:=Host; - If CharPos('@',Result)>0 then Delete(Result,1,CharPos(':',Result)); - If CharPos(':',Result)>0 then Delete(Result,CharPos(':',Result),Length(Result)); - End - Else If (Ws='HTTPS') then Result:='off' - Else Result := FindUnknownHeader(ServerVariable); - 'I':If (Ws='IFMODSINCE') or (Ws='IF_MODSINCE') or (Ws='IF_MOD_SINCE') then Result:=IfModSince - Else If (Ws='IFMATCH') or (Ws='IF_MATCH') then Result:=IfMatch - Else If (Ws='IFNONEMATCH') or (Ws='IF_NONEMATCH') or (Ws='IF_NONE_MATCH') then Result:=IfNoneMatch - Else If (Ws='IFRANGE') or (Ws='IF_RANGE') then Result:=IfRange - Else If (Ws='IFUNMODSINCE') or (Ws='IF_UNMODSINCE') or (Ws='IF_UNMOD_SINCE') then Result:=IfUnModSince - Else Result := FindUnknownHeader(ServerVariable); - 'K':If (Ws='KEEPALIVE') or (Ws='KEEP_ALIVE') then Result:=KeepAlive - Else Result := FindUnknownHeader(ServerVariable); - 'M':If (Ws='METHOD') then Result:=Method - Else If (Ws='MAXFORWARDS') or (Ws='MAX_FORWARDS') then Result:=MaxForwards - Else Result := FindUnknownHeader(ServerVariable); - 'P':If (Ws='PROTOCOL') then Result:=Protocol - Else If (Ws='PRAGMA') then Result:=Pragma - Else if (Ws='PROXYAUTHORIZATION') or (Ws='PROXY_AUTHORIZATION') then Result:=ProxyAuthorization - Else if (Ws='PUBLIC') then Result:=PublicCache - Else if (Ws='PROXY_CONNECTION') then Result:=ProxyConnection - Else Result := FindUnknownHeader(ServerVariable); - 'Q':If (Ws='QUERYSTRING') or (Ws='QUERY_STRING') then Result:=QueryString - Else Result := FindUnknownHeader(ServerVariable); - 'R':If (Ws='RANGE') then Result:=Range - Else If (Ws='REFERER') or (Ws='REFERRER') or (Ws='REFFERER') then Result:=Referer - Else If (Ws='REQUEST_METHOD') then Result:=Method - Else If (Ws='REMOTE_NAME') or (Ws='REMOTE_HOST') then Result:=ClientName - Else If (Ws='REMOTE_ADDR') then Result:=ClientAddr - Else If (Ws='REQUEST_URI') then Begin - URI2:=ToUnixSlashes(URI); - If CharPos('/',URI2)=0 then Result:='/'+URI2 - Else Begin - If Copy(URI2,1,1)<>'/' then URI2:='/'+URI2; - Result:=URI2; // 4/2/2002 Copy(URI2,1,PosLastChar('/',URI2)); - End; - End - Else Result := FindUnknownHeader(ServerVariable); - 'S':If (Ws='SERVER_PROTOCOL') then Result:=Protocol - Else If (Ws='SERVER_NAME') then Begin - Result:=Host; - If CharPos('@',Result)>0 then Delete(Result,1,CharPos(':',Result)); - If CharPos(':',Result)>0 then Delete(Result,CharPos(':',Result),Length(Result)); - End - Else If (Ws='SERVER_PORT_SECURE') then Result:='0' - Else Result := FindUnknownHeader(ServerVariable); - 'T':If (Ws='TRANSFERENCODING') or (Ws='TRANSFER_ENCODING') then Result:=TransferEncoding - Else Result := FindUnknownHeader(ServerVariable); - 'U':If (Ws='URI') then Begin - URI2:=ToUnixSlashes(URI); - If CharPos('/',URI2)=0 then Result:='/'+URI2 - Else Begin - If Copy(URI2,1,1)<>'/' then URI2:='/'+URI2; - Result:=URI2; // 4/2/2002 Copy(URI2,1,PosLastChar('/',URI2)); - End; - End - Else If (Ws='URL') then Begin - URI2:=ToUnixSlashes(URI); - If Copy(URI2,1,1)='/' then Result:=URI2 - Else Result:='/'+URI2; - End - Else If (Ws='UPGRADE') then Result:=Upgrade - Else if (Ws='USERAGENT') or (Ws='USER_AGENT') then Result:=UserAgent - Else Result := FindUnknownHeader(ServerVariable); - 'V':If (Ws='VIA') then Result:=Via - Else Result := FindUnknownHeader(ServerVariable); - 'W':If (Ws='WEFERER') then Result:=Weferer - Else If (Ws='WSER_AGENT') then Result:=WserAgent - Else Result := FindUnknownHeader(ServerVariable); - Else - Result := FindUnknownHeader(ServerVariable); - End; -End; - -Function TDXHTTPHeaderTools.HeaderGetInteger(ServerVariable:String):Integer; -Var - Ch:Char; - Ws:String; - -Begin - Result:=0; - Ws:=Uppercase(ServerVariable); - If Ws='' then Exit; // 2.0.11 - Ch:=Ws[1]; - With fSessionHeader^ do - Case Ch of - 'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then Result:=ContentLength; - End; -End; - -Function TDXHTTPHeaderTools.HeaderDataExists(ServerVariable:String):Boolean; -Begin - Result:=HeaderGetString(ServerVariable)<>''; -End; - -// 2.0.12 -Function TDXHTTPHeaderTools.QueryGetString(ServerVariable:String):String; -Var - Ws:String; - Tmp:String; - Value:String; - -Begin - Result:=''; - Tmp:=fSessionHeader^.QueryString+'&'; - While (CharPos('&',Tmp)>0) do Begin - Ws:=Copy(Tmp,1,CharPos('&',Tmp)-1); - Delete(Tmp,1,CharPos('&',Tmp)); - Value:=Copy(Ws,1,CharPos('=',Ws)-1); - Delete(Ws,1,CharPos('=',Ws)); - If Uppercase(Value)=Uppercase(ServerVariable) then Begin - If Result<>'' then Result:=Result+#13#10+Ws - Else Result:=Ws; - End; - End; -End; - -Function TDXHTTPHeaderTools.QueryGetInteger(ServerVariable:String):Integer; -Var - Ws:String; - -Begin - Ws:=QueryGetString(ServerVariable); - If (Ws<>'') and (IsNumericString(Ws)) then Result:=StrToInt(Ws) - Else Result:=-1; -End; - -Function TDXHTTPHeaderTools.QueryDataExists(ServerVariable:String):Boolean; -Begin - Result:=QueryGetString(ServerVariable)<>''; -End; - -Function TDXHTTPHeaderTools.AddHeader(ServerVariable, VariableValue:String):Boolean; -Var - Ch:Char; - Ws:String; - -Procedure AddToUnknown; // 7-27 -Begin - If fSessionHeader^.Unknown='' then fSessionHeader^.Unknown:=ServerVariable+': '+VariableValue - Else fSessionHeader^.Unknown:=fSessionHeader^.Unknown+#13#10+ServerVariable+': '+VariableValue; -End; - -Begin - Result:=False; - Ws:=Uppercase(ServerVariable); - If Ws='' then Exit; -// 7-27 - Ws:=StringReplace(Ws,'-','_',[rfReplaceAll]); - Ch:=Ws[1]; - With fSessionHeader^ do - Case Ch of - 'A':If (Ws='ALLOW') then Allow:=VariableValue - Else If (Ws='AUTHTYPE') or (Ws='AUTH_TYPE') then AuthType:=VariableValue - Else If (Ws='AUTHNAME') or (Ws='AUTH_NAME') then AuthName:=VariableValue - Else If (Ws='AUTHPASS') or (Ws='AUTH_PASS') then AuthPass:=VariableValue - Else If (Ws='ACCEPT') then Accept:=VariableValue - Else If (Ws='ACCEPT_CHARSET') or (Ws='ACCEPTCHARSET') then AcceptCharset:=VariableValue - Else If (Ws='ACCEPT_ENCODING') or (Ws='ACCEPTENCODING') then AcceptEncoding:=VariableValue - Else If (Ws='ACCEPT_LANGUAGE') or (Ws='ACCEPTLANGUAGE') then AcceptLanguage:=VariableValue - Else AddToUnknown; - 'C':If (Ws='CONTENT_LENGTH') or (Ws='CONTENTLENGTH') then ContentLength:=StrToInt(VariableValue) - Else If (Ws='CACHECONTROL') or (Ws='CACHE_CONTROL') then CacheControl:=VariableValue - Else If (Ws='CACHE_INFO') then CacheInfo:=VariableValue - Else If (Ws='CONNECTION') then Connection:=VariableValue - Else If (Ws='CONTENT_TYPE') or (Ws='CONTENTTYPE') then ContentType:=VariableValue - Else If (Ws='CLIENTNAME') or (Ws='CLIENT_NAME') then ClientName:=VariableValue - Else If (Ws='CLIENTADDR') or (Ws='CLIENT_ADDR') then ClientAddr:=VariableValue - Else If (Ws='COOKIE') then Cookie:=VariableValue - Else AddToUnknown; - 'D':If (Ws='DATE') then Date:=VariableValue - Else AddToUnknown; - 'F':If (Ws='FROM') then From:=VariableValue - Else If (Ws='FORWARDED') then Forwarded:=VariableValue - Else If (Ws='FORWARDED_FOR') then ForwardedFor:=VariableValue - Else AddToUnknown; - 'H':If (Ws='HOST') then Host:=VariableValue - Else AddToUnknown; - 'I':If (Ws='IFMODSINCE') or (Ws='IF_MODSINCE') or (Ws='IF_MOD_SINCE') then IfModSince:=VariableValue - Else If (Ws='IFMATCH') or (Ws='IF_MATCH') then IfMatch:=VariableValue - Else If (Ws='IFNONEMATCH') or (Ws='IF_NONEMATCH') or (Ws='IF_NONE_MATCH') then IfNoneMatch:=VariableValue - Else If (Ws='IFRANGE') or (Ws='IF_RANGE') then IfRange:=VariableValue - Else If (Ws='IFUNMODSINCE') or (Ws='IF_UNMODSINCE') or (Ws='IF_UNMOD_SINCE') then IfUnModSince:=VariableValue - Else AddToUnknown; - 'K':If (Ws='KEEPALIVE') or (Ws='KEEP_ALIVE') then KeepAlive:=VariableValue - Else AddToUnknown; - 'M':If (Ws='METHOD') then Method:=VariableValue - Else If (Ws='MAXFORWARDS') or (Ws='MAX_FORWARDS') then MaxForwards:=VariableValue - Else AddToUnknown; - 'P':If (Ws='PROTOCOL') then Protocol:=VariableValue - Else If (Ws='PRAGMA') then Pragma:=VariableValue - Else if (Ws='PROXYAUTHORIZATION') or (Ws='PROXY_AUTHORIZATION') then ProxyAuthorization:=VariableValue - Else if (Ws='PUBLIC') then PublicCache:=VariableValue - Else if (Ws='PROXY_CONNECTION') then ProxyConnection:=VariableValue - Else AddToUnknown; - 'Q':If (Ws='QUERYSTRING') or (Ws='QUERY_STRING') then QueryString:=VariableValue - Else AddToUnknown; - 'R':If (Ws='RANGE') then Range:=VariableValue - Else If (Ws='REFERER') or (Ws='REFERRER') or (Ws='REFFERER') then Referer:=VariableValue - Else AddToUnknown; - 'U':If (Ws='URI') then URI:=VariableValue - Else If (Ws='UPGRADE') then Upgrade:=VariableValue - Else if (Ws='USERAGENT') or (Ws='USER_AGENT') then UserAgent:=VariableValue - Else AddToUnknown; - 'T':If (Ws='TRANSFERENCODING') or (Ws='TRANSFER_ENCODING') then TransferEncoding:=VariableValue - Else AddToUnknown; - 'V':If (Ws='VIA') then Via:=VariableValue // 7-27 - Else AddToUnknown; - 'W':If (Ws='WEFERER') then Weferer:=VariableValue // 7-27 - Else If (Ws='WSER_AGENT') then WserAgent:=VariableValue // 7-27 - Else AddToUnknown; - Else - AddToUnknown; - End;//case - Result:=True; -End; - -Function TDXHTTPHeaderTools.SetHeader(ServerVariable, VariableValue:String):Boolean; -Begin - Result:=AddHeader(ServerVariable, VariableValue); -End; - -Function TDXHTTPHeaderTools.FindUnknownHeader(ServerVariable:String):String; -var - line, buf:String; - i : Integer; - -Begin - line:=fSessionHeader^.Unknown; - i := QuickPos(ServerVariable, line); - if i <> 0 then - Begin - buf := Copy(line, i, Length(line)); - i := QuickPos(#13#10, buf); - buf := Copy(buf, 0, i-1); - i := CharPos(#32, buf); - Result := Copy(buf, i, Length(buf)); - End; //IF -End; - -Procedure TDXHTTPHeaderTools.ReplaceUnknownHeader(ServerVariable, VariableValue:String); -var line:PString; - str, buf:String; - i, k, m:Integer; -Begin - if Not UnknownHeaderExists(ServerVariable) then Exit; - line:=@fSessionHeader^.Unknown; - k := QuickPos(ServerVariable, line^); - if k <> 0 then - Begin - str := Copy(line^, k, Length(line^)); - m := QuickPos(#13#10, str); - buf := Copy(str, 0, k-1); - i := CharPos(#32, buf); - k := k + i; - Delete(line^, k, m); - Insert(VariableValue, line^, k); - End; -End; - -Function TDXHTTPHeaderTools.UnknownHeaderExists(ServerVariable:String):Boolean; -Begin - if ServerVariable = '' then Result:=False - Else if fSessionHeader^.Unknown = '' then Result:=False - Else if QuickPos(ServerVariable, fSessionHeader^.Unknown) = 0 then Result:=False - Else Result:=True; -End; - -Function TDXHTTPHeaderTools.ToStrings:TStrings; -var res:TStrings; - endch:String; - split :String; -// CleanLoop:Integer; - -Begin - split:=': '; - endch :='';// 7-27 #13#10; - res := TStringList.Create; - With fSessionHeader^ do - Begin - if Allow <> '' then - res.Add('ALLOW'+split+Allow+endch); - if AuthType <> '' then - res.Add('AUTHTYPE'+split+AuthType+endch); - if AuthName <> '' then - res.Add('AUTHNAME'+split+AuthName+endch); - if AuthPass <> '' then - res.Add('AUTHPASS'+split+AuthPass+endch); - if Accept <> '' then - res.Add('ACCEPT'+split+Accept+endch); - if AcceptCharset <> '' then - res.Add('ACCEPT-CHARSET'+split+AcceptCharset+endch); - if AcceptEncoding <> '' then - res.Add('ACCEPT-ENCODING'+split+AcceptEncoding+endch); - if AcceptLanguage <> '' then - res.Add('ACCEPT-LANGUAGE'+split+AcceptLanguage+endch); - if ContentLength <> 0 then - res.Add('CONTENT-LENGTH'+split+IntToStr(ContentLength)+endch); - if CacheControl <> '' then // 7-27 - res.Add('CACHE-CONTROL'+split+CacheControl+endch); - if CacheInfo <> '' then // 7-27 - res.Add('CACHE-INFO'+split+CacheInfo+endch); - if Connection <> '' then - res.Add('CONNECTION'+split+Connection+endch); - if ContentType <> '' then - res.Add('CONTENT-TYPE'+split+ContentType+endch); - if ClientName <> '' then - res.Add('CLIENTNAME'+split+ClientName+endch); - if ClientAddr <> '' then - res.Add('CLIENTADDR'+split+ClientAddr+endch); - if Cookie <> '' then - res.Add('COOKIE'+split+Cookie+endch); - if Date <> '' then - res.Add('DATE'+split+Date+endch); - if From <> '' then - res.Add('FROM'+split+From+endch); - if Forwarded <> '' then - res.Add('FORWARDED'+split+Forwarded+endch); - if ForwardedFor <> '' then - res.Add('FORWARDED-FOR'+split+ForwardedFor+endch); - if Host <> '' then - res.Add('HOST'+split+Host+endch); - if IfModSince <> '' then - res.Add('IFMODSINCE'+split+IfModSince+endch); - if IfMatch <> '' then - res.Add('IFMATCH'+split+IfMatch+endch); - if IfNoneMatch <> '' then - res.Add('IFNONEMATCH'+split+IfNoneMatch+endch); - if IfRange <> '' then - res.Add('IFRANGE'+split+IfRange+endch); - if IfUnModSince <> '' then - res.Add('IFUNMODSINCE'+split+IfUnModSince+endch); - if KeepAlive <> '' then - res.Add('KEEPALIVE'+split+KeepAlive+endch); - if Method <> '' then - res.Add('METHOD'+split+Method+endch); - if MaxForwards <> '' then - res.Add('MAXFORWARDS'+split+MaxForwards+endch); - if Protocol <> '' then - res.Add('PROTOCOL'+split+Protocol+endch); - if ProxyConnection <> '' then - res.Add('PROXY-CONNECTION'+split+ProxyConnection+endch); - if Pragma <> '' then - res.Add('PRAGMA'+split+Pragma+endch); - if ProxyAuthorization <> '' then - res.Add('PROXYAUTHORIZATION'+split+ProxyAuthorization+endch); - if PublicCache <> '' then - res.Add('PUBLIC'+split+PublicCache+endch); - if QueryString <> '' then - res.Add('QUERYSTRING'+split+QueryString+endch); - if Range <> '' then - res.Add('RANGE'+split+Range+endch); - if Referer <> '' then - res.Add('REFERER'+split+Referer+endch); - if URI <> '' then - res.Add('URI'+split+URI+endch); - if Upgrade <> '' then - res.Add('UPGRADE'+split+Upgrade+endch); - if UserAgent <> '' then - res.Add('USERAGENT'+split+UserAgent+endch); - if TransferEncoding <> '' then - res.Add('TRANSFERENCODING'+split+TransferEncoding+endch); - if Via <> '' then - res.Add('VIA'+split+Via+endch); - if Weferer <> '' then - res.Add('WEFERER'+split+Weferer+endch); - if WserAgent <> '' then - res.Add('WSER-AGENT'+split+WserAgent+endch); - if Unknown <> '' then - res.Add(Unknown+endch); - End; //With -{ CleanLoop:=res.Count; - While CleanLoop>0 do Begin - if res[CleanLoop-1]='' then res.delete(CleanLoop-1); - Dec(CleanLoop); - End;} - Result:=res; -End; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPServerCore.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPServerCore.pas deleted file mode 100644 index be35865..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXHTTPServerCore.pas +++ /dev/null @@ -1,766 +0,0 @@ -unit uRODXHTTPServerCore; - -interface - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXHTTPServerCore -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// - -{$I uRODXSock.def} - -uses -{$IFDEF CODE_TRACER} - DXCodeTracer, -{$ENDIF} - uRODXSocket, // 3.0 - Classes, - uRODXServerCore, - uRODXISAPI, - uRODXHTTPHeaderTools; - -// RFC2068, Response Codes -Const - MaxStatusCodes=40; - StatusCodes:array[0..MaxStatusCodes] of record - Code:Integer; - Msg:string - end = - ((Code:100; Msg:'Continue'), - (Code:101; Msg:'Switching Protocols'), - (Code:200; Msg:'OK'), - (Code:201; Msg:'Created'), - (Code:202; Msg:'Accepted'), - (Code:203; Msg:'Non-Authoritative Information'), - (Code:204; Msg:'No Content'), - (Code:205; Msg:'Reset Content'), - (Code:206; Msg:'Partial Content'), - (Code:300; Msg:'Multiple Choices'), - (Code:301; Msg:'Moved Permanently'), - (Code:302; Msg:'Moved Temporarily'), - (Code:303; Msg:'See Other'), - (Code:304; Msg:'Not Modified'), - (Code:305; Msg:'Use Proxy'), - (Code:306; Msg:'Unused'), - (Code:307; Msg:'Temporary Redirect'), - (Code:400; Msg:'Bad Request'), - (Code:401; Msg:'Unauthorized'), - (Code:402; Msg:'Payment Required'), - (Code:403; Msg:'Forbidden'), - (Code:404; Msg:'Not Found'), - (Code:405; Msg:'Method Not Allowed'), - (Code:406; Msg:'Not Acceptable'), - (Code:407; Msg:'Proxy Authentication Required'), - (Code:408; Msg:'Request Time-out'), - (Code:409; Msg:'Conflict'), - (Code:410; Msg:'Gone'), - (Code:411; Msg:'Length Required'), - (Code:412; Msg:'Precondition Failed'), - (Code:413; Msg:'Request Entity Too Large'), - (Code:414; Msg:'Request-URI Too Large'), - (Code:415; Msg:'Unsupported Media Type'), - (Code:416; Msg:'Requested Range Not Satisfiable'), - (Code:417; Msg:'Expectation Failed'), - (Code:500; Msg:'Internal Server Error'), - (Code:501; Msg:'Not Implemented'), - (Code:502; Msg:'Bad Gateway'), - (Code:503; Msg:'Service Unavailable'), - (Code:504; Msg:'Gateway Time-out'), - (Code:505; Msg:'HTTP Version Not Supported')); - -Type - HTTPTBasicEvent = procedure(ClientThread:TDXClientThread;HeaderInfo:PHeaderInfo;Var EnableKeepAlive:Boolean) of object; - HTTPTOtherEvent = procedure(ClientThread:TDXClientThread;HeaderInfo:PHeaderInfo;var Handled:Boolean) of object; - - TDXHTTPServerCore = class(TDXServerCore) - private - fOnCommandGET:HTTPTBasicEvent; // GET HTTP/1.0 - fOnCommandPOST:HTTPTBasicEvent; // POST HTTP/1.0 - fOnCommandHEAD:HTTPTBasicEvent; // HEAD HTTP/1.0 - fOnCommandCHECKOUT:HTTPTBasicEvent; - fOnCommandSHOWMETHOD:HTTPTBasicEvent; - fOnCommandPUT:HTTPTBasicEvent; - fOnCommandDELETE:HTTPTBasicEvent; - fOnCommandLINK:HTTPTBasicEvent; - fOnCommandUNLINK:HTTPTBasicEvent; - fOnCommandCHECKIN:HTTPTBasicEvent; - fOnCommandTEXTSEARCH:HTTPTBasicEvent; - fOnCommandSPACEJUMP:HTTPTBasicEvent; - fOnCommandSEARCH:HTTPTBasicEvent; - fOnCommandOPTIONS:HTTPTBasicEvent; - fOnCommandTRACE:HTTPTBasicEvent; - fOnCommandCONNECT:HTTPTBasicEvent; - fOnCommandPATCH:HTTPTBasicEvent; - fOnCommandOther:HTTPTOtherEvent; - fEventArray:TList; - fiTimeout:Cardinal; - fSupportKeepAlive:Boolean; - fDXISAPI:TDXISAPI; - protected - Procedure SetOnCommandGET(value:HTTPTBasicEvent); - Procedure SetOnCommandPOST(value:HTTPTBasicEvent); - Procedure SetOnCommandHEAD(value:HTTPTBasicEvent); - Procedure SetOnCommandCHECKOUT(value:HTTPTBasicEvent); - Procedure SetOnCommandSHOWMETHOD(value:HTTPTBasicEvent); - Procedure SetOnCommandPUT(value:HTTPTBasicEvent); - Procedure SetOnCommandDELETE(value:HTTPTBasicEvent); - Procedure SetOnCommandLINK(value:HTTPTBasicEvent); - Procedure SetOnCommandUNLINK(value:HTTPTBasicEvent); - Procedure SetOnCommandCHECKIN(value:HTTPTBasicEvent); - Procedure SetOnCommandTEXTSEARCH(value:HTTPTBasicEvent); - Procedure SetOnCommandSPACEJUMP(value:HTTPTBasicEvent); - Procedure SetOnCommandSEARCH(value:HTTPTBasicEvent); - Procedure SetOnCommandOPTIONS(value:HTTPTBasicEvent); - Procedure SetOnCommandTRACE(value:HTTPTBasicEvent); - Procedure SetOnCommandCONNECT(value:HTTPTBasicEvent); - Procedure SetOnCommandPATCH(value:HTTPTBasicEvent); - public - constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF} - destructor Destroy; override; - procedure ProcessSession(ClientThread:TDXClientThread); - Procedure AddBasicEvent(Command:String;EventProc:HTTPTBasicEvent); - Function HeaderText(StatusCode:Integer):String; //2.0.12 - procedure Start; override; - procedure Stop; override; - published - property Timeout:Cardinal read fiTimeout - write fiTimeout; - property SupportKeepAlive:Boolean read fSupportKeepAlive - write fSupportKeepAlive; - property OnCommandGET: HTTPTBasicEvent read fOnCommandGET - write SetOnCommandGET; - property OnCommandPOST: HTTPTBasicEvent read fOnCommandPOST - write SetOnCommandPOST; - property OnCommandHEAD: HTTPTBasicEvent read fOnCommandHEAD - write SetOnCommandHEAD; - property OnCommandCHECKOUT: HTTPTBasicEvent read fOnCommandCHECKOUT - write SetOnCommandCHECKOUT; - property OnCommandSHOWMETHOD: HTTPTBasicEvent read fOnCommandSHOWMETHOD - write SetOnCommandSHOWMETHOD; - property OnCommandPUT: HTTPTBasicEvent read fOnCommandPUT - write SetOnCommandPUT; - property OnCommandDELETE: HTTPTBasicEvent read fOnCommandDELETE - write SetOnCommandDELETE; - property OnCommandLINK: HTTPTBasicEvent read fOnCommandLINK - write SetOnCommandLINK; - property OnCommandUNLINK: HTTPTBasicEvent read fOnCommandUNLINK - write SetOnCommandUNLINK; - property OnCommandCHECKIN: HTTPTBasicEvent read fOnCommandCHECKIN - write SetOnCommandCHECKIN; - property OnCommandTEXTSEARCH: HTTPTBasicEvent read fOnCommandTEXTSEARCH - write SetOnCommandTEXTSEARCH; - property OnCommandSPACEJUMP: HTTPTBasicEvent read fOnCommandSPACEJUMP - write SetOnCommandSPACEJUMP; - property OnCommandSEARCH: HTTPTBasicEvent read fOnCommandSEARCH - write SetOnCommandSEARCH; - property OnCommandOPTIONS: HTTPTBasicEvent read fOnCommandOPTIONS - write SetOnCommandOPTIONS; - property OnCommandTRACE: HTTPTBasicEvent read fOnCommandTRACE - write SetOnCommandTRACE; - property OnCommandCONNECT: HTTPTBasicEvent read fOnCommandCONNECT - write SetOnCommandCONNECT; - property OnCommandPATCH: HTTPTBasicEvent read fOnCommandPATCH - write SetOnCommandPATCH; - property OnCommandOther: HTTPTOtherEvent read fOnCommandOther - write fOnCommandOther; - property ISAPIServer: TDXISAPI read fDXISAPI - write fDXISAPI; - end; - -implementation - -Uses - uRODXSock, - SysUtils, - uRODXString; - -Type - PHTTPBasicEvent=^THTTPBasicEvent; - THTTPBasicEvent=record - Tag:Integer; - Command:String; - EventProcedure:HTTPTBasicEvent; - End; - -/////////////////////////////////////////////////////////////////////////////// -//CREATE: -// Define the Default Port number to Listen On. -/////////////////////////////////////////////////////////////////////////////// -constructor TDXHTTPServerCore.Create(AOwner:TComponent); -begin - inherited Create(AOwner); - ServerPort:=80; - fEventArray:=TList.Create; - fiTimeout:=30000; -end; - -/////////////////////////////////////////////////////////////////////////////// -//DESTROY: -// Destory this object. -/////////////////////////////////////////////////////////////////////////////// -destructor TDXHTTPServerCore.Destroy; -Var - PBasicEvent:PHTTPBasicEvent; - -begin - If Assigned(fEventArray) then Begin - While fEventArray.Count>0 do Begin - Case PHTTPBasicEvent(fEventArray[0])^.Tag of - 1:Begin - PBasicEvent:=fEventArray[0]; - Dispose(PBasicEvent); - End; - End; - fEventArray.Delete(0); - End; - fEventArray.Free; - fEventArray:=Nil; - End; - inherited Destroy; -end; - -/////////////////////////////////////////////////////////////////////////////// -//ADDBASICEVENT: -// Allows you to dynamically assign a new command to the internal -// parser. This allows the servercore to support the 'pre-defined' -// OnCommand* events, plus you can add other commands dynamically -// at run-time in your application without requiring a source code -// modification to our components! -// -// To make support easier for us, we ask that you use the Add*Event -// procedures to expand our code, reducing code changes when an -// upgrade is released! -// -// See documentation for complete information on how this works. -// -// Example Usage: AddBasicEvent('CDROM',MySpecialEvent); -/////////////////////////////////////////////////////////////////////////////// -Procedure TDXHTTPServerCore.AddBasicEvent(Command:String;EventProc:HTTPTBasicEvent); -Var - PBasicEvent:PHTTPBasicEvent; - Loop:Integer; - -Begin - Command:=Uppercase(Command); - Loop:=0; - While LoopError'+ - '

Error


Unsupported Method "'+ - HeaderInfo^.Method+'"

'); - end; - - Procedure BuildHeader(ClientHeader:String); - var - line,token1,token2:String; - Error:Integer; - Ch:Char; - - Procedure AddToUnknown; // 7-27 - Begin - If HeaderInfo^.Unknown='' then HeaderInfo^.Unknown:=token1+': '+line - Else HeaderInfo^.Unknown:=HeaderInfo^.Unknown+#13#10+token1+': '+line; - End; - - Begin - line:=ClientHeader; - With HeaderInfo^ do Begin - If RAW='' then Begin - RAW:=Line; - Method:=Uppercase(FetchByChar(line,#32,False)); - URI:=EscapeDecode(FetchByChar(line,#32,False)); - If CharPos('?',URI)>0 then Begin - QueryString:=Copy(URI,CharPos('?',URI)+1,Length(URI)); - Delete(URI,CharPos('?',URI),Length(URI)); - End; - Protocol:=FetchByChar(line,#32,False); - End - Else Begin - ALL_RAW:=ALL_RAW+Line+#13#10; - token1:=Uppercase(FetchByChar(line,#32,False)); - token2:=StringReplace(token1,'-','_',[rfReplaceAll]); - ALL_HTTP:=ALL_HTTP+'HTTP_'+Token2+Line+#13#10; - Ch:=Token1[1]; - Case Ch of // 2.0 - 'A':if token1='ACCEPT:' then Accept:=Accept+Line - else if token1='ACCEPT-CHARSET:' then AcceptCharset:=Line - else if token1='ACCEPT-ENCODING:' then AcceptEncoding:=Line - else if token1='ACCEPT-LANGUAGE:' then AcceptLanguage:=Line - else if token1='ALLOW:' then Allow:=Line - else if token1='AUTHORIZATION:' then begin - AuthType:=FetchByChar(line,#32,False); // Usually is "Basic" - token2:=FetchByChar(line,#32,False); - token2:=Base64ToString(token2); // Decode the "Basic" encoded string - AuthName:=FetchByChar(token2,':',False); - AuthPass:=FetchByChar(token2,';',False); // should actually be leftovers - end - Else AddToUnknown; - 'C':if token1='CACHE-CONTROL:' then CacheControl:=Line - else if token1='CONNECTION:' then Connection:=Line - else if token1='CACHE-INFO:' then CacheInfo:=Line - else if token1='CONTENT-LENGTH:' then Begin - Val(FetchByChar(line,#32,False),ContentLength,Error); - end - else if token1='CONTENT-TYPE:' then ContentType:=Line - else if token1='COOKIE:' then Cookie:=Line - Else AddToUnknown; - 'D':if token1='DATE:' then Date:=Line - Else AddToUnknown; - 'F':if token1='FROM:' then From:=Line - Else if token1='FORWARDED:' then Forwarded:=Line - Else if token1='FORWARDED-FOR:' then ForwardedFor:=Line - Else AddToUnknown; - 'H':if token1='HOST:' then Host:=Line - Else AddToUnknown; - 'I':if token1='IF-MODIFIED-SINCE:' then IfModSince:=Line - else if token1='IF-MATCH:' then IfMatch:=Line - else if token1='IF-NONE-MATCH:' then IfNoneMatch:=Line - else if token1='IF-RANGE:' then IfRange:=Line - else if token1='IF-UNMODIFIED-SINCE:' then IfUnModSince:=Line - Else AddToUnknown; - 'K':if token1='KEEP-ALIVE:' then KeepAlive:=Line - Else AddToUnknown; - 'M':if token1='MAX-FORWARDS:' then MaxForwards:=Line - Else AddToUnknown; - 'P':if token1='PUBLIC:' then PublicCache:=Line - else if token1='PRAGMA:' then Pragma:=Line - else if token1='PROXY-CONNECTION:' then ProxyConnection:=Line - else if token1='PROXY-AUTHORIZATION:' then ProxyAuthorization:=Line - Else AddToUnknown; - 'R':if token1='REFERER:' then Referer:=Line - else if token1='RANGE:' then Range:=Line - Else AddToUnknown; - 'T':if token1='TRANSFER-ENCODING:' then TransferEncoding:=Line - Else AddToUnknown; - 'U':if token1='UPGRADE:' then Upgrade:=Line - else if token1='USER-AGENT:' then - UserAgent:=Trim(Line) - Else AddToUnknown; - 'V':if token1='VIA:' then Via:=Line - Else AddToUnknown; - 'W':if token1='WEFERER:' then Weferer:=Line - Else if token1='WSER-AGENT:' then WserAgent:=Line - Else AddToUnknown; - Else AddToUnknown; - End; - End; - end; - End; - - Procedure ManuallyGetHost; - Begin - With HeaderInfo^ do Begin - If Quickpos('//',URI)>0 then Begin - Host:=Copy(URI,1,QuickPos('//',URI)+1); - Delete(URI,1,Length(Host)); - End; - If URI<>'/' then Begin - Host:=Host+Copy(URI,1,CharPos('/',URI)); - Delete(URI,1,CharPos('/',URI)); - End; - End; - End; - -begin - New(HeaderInfo); // 2.4 moved before repeat - repeat -{ FillChar(HeaderInfo^,Sizeof(HeaderInfo^),#0); - HeaderInfo^.ClientAddr:=ClientThread.Socket.PeerIPAddress; - HeaderInfo^.ClientHost:=HeaderInfo^.ClientAddr; - HeaderInfo^.ContentLength:=0;} -// this is faster than above code - With HeaderInfo^ do Begin - ClientAddr:=ClientThread.Socket.PeerIPAddress; - ClientHost:=HeaderInfo^.ClientAddr; - ContentLength:=0; - Raw:=''; - Protocol:=''; - Method:=''; - URI:=''; - PhysPath:=''; - Allow:=''; - AuthType:=''; - AuthName:=''; - AuthPass:=''; - Date:=''; - Pragma:=''; - CacheControl:=''; - Connection:=''; - TransferEncoding:=''; - Upgrade:=''; - Via:=''; - Host:=''; - From:=''; - IfMatch:=''; - IfNoneMatch:=''; - IfRange:=''; - IfRange:=''; - IfUnModSince:=''; - MaxForwards:=''; - ProxyAuthorization:=''; - KeepAlive:=''; - PublicCache:=''; - Range:=''; - Referer:=''; - UserAgent:=''; - ContentType:=''; - Accept:=''; - AcceptCharset:=''; - AcceptEncoding:=''; - AcceptLanguage:=''; - Cookie:=''; - ClientName:=''; - QueryString:=''; - HostRootPath:=''; - Weferer:=''; - WserAgent:=''; - CacheInfo:=''; - ProxyConnection:=''; - Forwarded:=''; - ForwardedFor:=''; - All_HTTP:=''; - All_RAW:=''; - PostData:=''; - Unknown:=''; - End; - with ClientThread.Socket do begin -{$IFDEF DXSOCK2} - S:='*'; - SmartTimeout:=fiTimeout; - While (S<>'') do Begin - S:=Readln(SmartTimeout); - SmartTimeout:=500; - If LastReadTimeout or Not Connected then Begin -{$IFDEF CODE_TRACER} - If Assigned(ClientThread.DXCodeTracer) then Begin - ClientThread.DXCodeTracer.SendMessage(dxctDebug,'TDXServerCore.ProcessSession - Header timeout - aborting.'); - End; -{$ENDIF} - Dispose(Headerinfo); - Exit; - End; - If S<>'' then Begin - If Assigned(OnFilter) then Begin - Loop:=FilterRead(@S[1],OutData,Length(S),ClientThread); - SetLength(S,Loop); - If Assigned(Outdata) then Begin - Move(TDXBSArray(OutData^),S[1],Loop); - OnFilter(ddFreePointer,Nil,OutData,Loop,Loop,WasHandled,ClientThread); - End; - End; - //SF_NOTIFY_READ_RAW_DATA - if assigned(fDXISAPI) and (fDXISAPI.FilterCount>0) then - fDXISAPI.ServerRawRead(S,Length(S)); - BuildHeader(S); - End - Else If (S='') and (HeaderInfo^.Method='') then S:='*'; //2.3 Keep-Alive - End; -{$ELSE} -// ShowMessageWindow('','Starting Read!'); - If Not fSupportKeepAlive then Begin - S:=''; - While (QuickPos(#13#10#13#10,S)=0) and - (Length(S)<8192) do Begin - S:=S+ReadStr(-1); - if ((LastCommandStatus<>0) and (LastCommandStatus<>WSAETIMEDOUT)) - Or (Not Connected) - then Begin -{$IFDEF CODE_TRACER} - If Assigned(ClientThread.DXCodeTracer) then Begin - ClientThread.DXCodeTracer.SendMessage(dxctDebug,'TDXServerCore.ProcessSession - Header timeout - aborting.'); - End; -{$ENDIF} - Dispose(Headerinfo); - Exit; - End; - End; - End - Else Begin - ManualTimeout:=TimeCounter+fiTimeout; - S:=''; - While (QuickPos(#13#10#13#10,S)=0) and - (Length(S)<8192) and - (ManualTimeout>TimeCounter) do Begin - S:=S+ReadStr(-1); - if ((LastCommandStatus<>0) and (LastCommandStatus<>WSAETIMEDOUT)) - Or (Not Connected) - then Begin -{$IFDEF CODE_TRACER} - If Assigned(ClientThread.DXCodeTracer) then Begin - ClientThread.DXCodeTracer.SendMessage(dxctDebug,'TDXServerCore.ProcessSession - Header timeout - aborting.'); - End; -{$ENDIF} - Dispose(Headerinfo); - Exit; - End; - End; - End; - If LastReadTimeout or Not Connected then Begin -{$IFDEF CODE_TRACER} - If Assigned(ClientThread.DXCodeTracer) then Begin - ClientThread.DXCodeTracer.SendMessage(dxctDebug,'TDXServerCore.ProcessSession - Header timeout - aborting.'); - End; -{$ENDIF} - Dispose(Headerinfo); - Exit; - End; - While Length(S)>0 do Begin - Ws:=Copy(S,1,QuickPos(#13#10,S)-1); - If Assigned(OnFilter) then Begin - Loop:=FilterRead(@WS[1],OutData,Length(WS),ClientThread); - SetLength(WS,Loop); - If Assigned(Outdata) then Begin - Move(TDXBSArray(OutData^),WS[1],Loop); - OnFilter(ddFreePointer,Nil,OutData,Loop,Loop,WasHandled,ClientThread); - End; - End; - //SF_NOTIFY_READ_RAW_DATA - if assigned(fDXISAPI) and (fDXISAPI.FilterCount>0) then - fDXISAPI.ServerRawRead(WS,Length(WS)); - BuildHeader(Ws); - Delete(S,1,Length(Ws)+2); - If Copy(S,1,2)=#13#10 then Begin //end of header - HeaderInfo^.PostData:=Copy(S,3,Length(S)); - S:=''; - End; - End; -{$ENDIF} -// ShowMessageWindow('','Finished Read!'+#13#10+HeaderInfo^.All_RAW); - If HeaderInfo^.Host='' then ManuallyGetHost; - Delete(HeaderInfo^.ALL_HTTP,Length(HeaderInfo^.ALL_HTTP)-1,2); - HeaderInfo^.ALL_HTTP:=HeaderInfo^.ALL_HTTP+#0; - //SF_NOTIFY_PREPROC_HEADERS - if assigned(fDXISAPI) and (fDXISAPI.FilterCount>0) then - fDXISAPI.ServerPreprocHeaderEvent(HeaderInfo); - Loop:=0; - WasHandled:=False; - WantKeepAlive:=fSupportKeepAlive; - While (Loop0) then - fDXISAPI.ServerEndOfRequest; - If Not fSupportKeepAlive then WantKeepAlive:=False; - If WantKeepAlive then ProcessWindowsMessageQueue; // 9/11/2002 -{$IFDEF CODE_TRACER} - If Assigned(ClientThread.DXCodeTracer) then Begin - If WantKeepAlive then - ClientThread.DXCodeTracer.SendMessage(dxctDebug,'TDXServerCore.ProcessSession - looping for keepalive.'); - End; -{$ENDIF} - Until (Not WantKeepAlive) or (Not ClientThread.Socket.Connected); - Dispose(HeaderInfo); //2.4 - //SF_NOTIFY_END_OF_NET_SESSION - if assigned(fDXISAPI) and (fDXISAPI.FilterCount>0) then - fDXISAPI.ServerEndSession; -end; - -//2.0.12 -Function TDXHTTPServerCore.HeaderText(StatusCode:Integer):String; -Var - Loop:Integer; - -Begin - If StatusCode>404 then Begin // divide and conquor - Loop:=MaxStatusCodes; - While StatusCodes[Loop].Code>StatusCode do Dec(Loop); - End - Else begin - Loop:=0; - While StatusCodes[Loop].Code0) then - fDXISAPI.ServerStartEvent; - inherited Start; -End; - -Procedure TDXHTTPServerCore.Stop; -Begin - if assigned(fDXISAPI) and (fDXISAPI.FilterCount>0) then Begin - fDXISAPI.ServerStopEvent; - End; - inherited Stop; -End; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPI.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPI.pas deleted file mode 100644 index eefa710..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPI.pas +++ /dev/null @@ -1,1632 +0,0 @@ -unit uRODXISAPI; - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXISAPI -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -// IMPLEMENTATION OF ISAPI 4.0 SPECIFICATIONS (FEBRUARY 2002) -// Create one instance of the TDXIAPI component in your application. To use: -// TDXISAPI.RegisterDLL(Path+Filename) - Registers the DLL with our DLLManager! -// TDXISAPI.Execute(TDXClientThread;Path+Filename) - Executes the DLL -// TDXISAPI.UnregisterDLL(Path+Filename) - removes from our DLLManager. -// -// You must specify the following events! -// TDXISAPI.GetServerVariable(Session:TDXClientThread;Variable:String;Var Results:String); -// -// All other ISAPI callbacks are actually handled internal to this component. -// -// To achieve HIGH-SPEED, register all known DLL's at the startup of your -// application, and then on termination unregister all of these DLL's. Then -// all you have to do is execute the DLL as needed. -// -// MSDN: -// Important - It is vital that the work performed by ISAPI filters is minimized, -// because the effects on scalability and performance is potentially quite severe. -// For example, if your ISAPI filter implemented your own custom encryption scheme, -// the encryption and decryption would need to take place within your ISAPI filter -// code, but the reading and writing of the data should be handled by IIS. -/////////////////////////////////////////////////////////////////////////////// - -interface -{$I uRODXSock.def} - -{.$DEFINE USE_DLL_MGR} -{$IFNDEF LINUX} -{$DEFINE SUPPORT_COM} -{$ENDIF} - -Uses -{$IFNDEF LINUX} - Windows, -{$ENDIF} -{$IFDEF SUPPORT_COM} - ActiveX, -{$ENDIF} - Classes, - uRODXString, - uRODXServerCore, -{$IFDEF USE_DLL_MGR} - DXDLLManager, -{$ENDIF} - uRODXSecurity, - uRODXISAPIFilter, - uRODXHTTPHeaderTools; - -Type - HCONN=Integer; -{$IFDEF VER100} - Longword=Cardinal; -{$ENDIF} -{$IFDEF LINUX} - LPDWord=^Longword; - LPCSTR=PChar; -{$ENDIF} - -Const - HSE_LOG_BUFFER_LEN=80; - HSE_MAX_EXT_DLL_NAME_LEN=256; - -type - TGetServerVariableProc = function ( hConn: HCONN; - VariableName: PChar; - Buffer: Pointer; - Size:LPDWord): BOOLEAN stdcall; - - TWriteClientProc = function ( ConnID: HCONN; - Buffer: Pointer; - var Bytes: Longword; - dwReserved: Longword ): BOOLEAN stdcall; - - TReadClientProc = function ( ConnID: HCONN; - Buffer: Pointer; - var Size: Longword ): BOOLEAN stdcall; - - TServerSupportFunctionProc = function ( hConn: HCONN; - HSERRequest: Longword; - Buffer: Pointer; - Size:Pointer{LPDWord}; - DataType: Pointer{LPDWord} ): BOOLEAN stdcall; - -// -// passed to extension procedure on a new request -// -type - - PEXTENSION_CONTROL_BLOCK = ^TEXTENSION_CONTROL_BLOCK; - TEXTENSION_CONTROL_BLOCK = packed record - cbSize: Longword; // size of this struct. - dwVersion: Longword; // version info of this spec - ConnID: HCONN; // Context number not to be modified! - dwHttpStatusCode: Longword; // HTTP Status code - // null terminated log info specific to this Extension DLL - lpszLogData: array [0..HSE_LOG_BUFFER_LEN-1] of Char; - lpszMethod: PChar; // REQUEST_METHOD - lpszQueryString: PChar; // QUERY_STRING - lpszPathInfo: PChar; // PATH_INFO - lpszPathTranslated: PChar; // PATH_TRANSLATED - cbTotalBytes: Longword; // Total bytes indicated from client - cbAvailable: Longword; // Available number of bytes - lpbData: Pointer; // pointer to cbAvailable bytes - lpszContentType: PChar; // Content type of client data - - GetServerVariable: TGetServerVariableProc; - WriteClient: TWriteClientProc; - ReadClient: TReadClientProc; - ServerSupportFunction: TServerSupportFunctionProc; - end; - PHSE_VERSION_INFO = ^HSE_VERSION_INFO; - HSE_VERSION_INFO = packed record - dwExtensionVersion: Longword; - lpszExtensionDesc: array [0..HSE_MAX_EXT_DLL_NAME_LEN-1] of Char; - end; - THSE_VERSION_INFO = HSE_VERSION_INFO; - LPHSE_VERSION_INFO = PHSE_VERSION_INFO; - -Type - TDX_GetServerVariable=procedure(ClientThread:TDXClientThread;Variable:String;Var Results:String) of object; - TDX_RedirectHeader=Procedure(ClientThread:TDXClientThread;Location:String;Var Header:String) of object; - TDX_BuildHeader=Procedure(dwHttpStatusCode:Integer;var Results:String) of object; - - //Extension Function - TGetExtensionVersion = function (var Ver: THSE_VERSION_INFO): BOOLEAN stdcall; - THttpExtensionProc = function (var ECB: TEXTENSION_CONTROL_BLOCK): Longword stdcall; - TTerminateExtension = function (dwFlags: Longword): BOOLEAN stdcall; - - TNotificationFiltersProc = Procedure (Notify:Longword; Buf1:Pointer; - sizeBuf1:Longword; Buf2:Pointer; sizeBuf2:Longword); - - TDX_FilterGetServerVariable = function (var pfc: THTTP_FILTER_CONTEXT; - VariableName: PChar; Buffer: Pointer; var Size: Longword ): BOOLEAN of Object; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This structure is used to send certificate information to the -// ISAPI extension when the HSE_REQ_GET_CERT_INFO_EX value is set for the -// dwHSERRequest parameter of the ServerSupportFunction. -/////////////////////////////////////////////////////////////////////////////// - - -type - TDXISAPI = class(TDXComponent) - private - fGetServerVariable:TDX_GetServerVariable; - fRedirectHeader:TDX_RedirectHeader; - fBuildHeader:TDX_BuildHeader; - fTimeout:Integer; -// fCertificate:TCERT_CONTEXT_EX; - protected - Procedure RegisterFilters(var ResultLog:String); - Procedure UnRegisterFilters(var ResultLog:String); - Procedure SetServerVariableProc(value:TFilterGetServerVariableProc); - Function GetServerVariableProc:TFilterGetServerVariableProc; - public - ////////////////////////////// - // Server Event Procedure - // Not of use to end-user. - ////////////////////////////// - Procedure ServerStartEvent; - Procedure ServerStopEvent; - Procedure ServerRawRead(ReadString:String;Len:Longword); - Procedure ServerPreprocHeaderEvent(DXHeaderInfo:PHeaderInfo); - Procedure ConvertedURL2Physical(URL:String;Physical:String); - ////////////////////////////// - // there are more to be added between converted and end of request in 2.4 - ////////////////////////////// - Procedure ServerEndOfRequest; - Procedure ServerEndSession; - - public - constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF} - Destructor Destroy; override; - Function Execute(Session:TDXClientThread;ISAPI,Method,QueryString, - PathInfo,PathTranslated,POSTContent_Type,POSTData:String; - POSTDataSize:Integer;Var ResultLog:String):Boolean; - - Function RegisterDLL(ISAPI:String):Boolean; - Function UnRegisterDLL(ISAPI:String):Boolean; - - Function AddFilter(ISAPI:String):Boolean; - Function RemoveFilter(ISAPI:String):Boolean; - Function FilterCount:Integer; - - published - Property GetVariable:TDX_GetServerVariable read fGetServerVariable - write fGetServerVariable; - Property GetVariableFilter:TFilterGetServerVariableProc read GetServerVariableProc - write SetServerVariableProc; - Property NeedHeaderForRedirect:TDX_RedirectHeader read fRedirectHeader - write fRedirectHeader; - Property NeedHeader:TDX_BuildHeader read fBuildHeader - write fBuildHeader; - Property ReadSocketTimeout:Integer read fTimeout - write fTimeout; - end; - -Implementation - -Uses -{$IFDEF LINUX} - {$IFDEF FPC}dynlibs,{$ENDIF} - Libc, -{$ENDIF} - SysUtils(*{, {StrPCopy} - uRODXHTTPServerCore*); - -Const -{from Microsoft's .h files for ISAPI!} - HSE_VERSION_MAJOR=5; - HSE_VERSION_MINOR=1; - HSE_VERSION=$0501; - HSE_REQ_END_RESERVED=1000; -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The extension has finished processing and the server should disconnect the -// client and free up allocated resources. -/////////////////////////////////////////////////////////////////////////////// - HSE_STATUS_SUCCESS=1; -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The extension has finished processing and the server should wait for the next -// HTTP request if the client supports Keep-Alive connections. The extension -// can return this only if it was able to send the correct Content-Length header -// to the client. -/////////////////////////////////////////////////////////////////////////////// - HSE_STATUS_SUCCESS_AND_KEEP_CONN=2; -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The extension has queued the request for processing and will notify the -// server when it has finished. See HSE_REQ_DONE_WITH_SESSION under -// ServerSupportFunction. -/////////////////////////////////////////////////////////////////////////////// - HSE_STATUS_PENDING=3; -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The extension has encountered an error while processing the request, so the -// server can disconnect the client and free up allocated resources. An HTTP -// status code of 500 is written to the IIS log for the request. -/////////////////////////////////////////////////////////////////////////////// - HSE_STATUS_ERROR=4; -// The following are the values to request services with the -// ServerSupportFunction(). -// Values from 0 to 1000 are reserved for future versions of the interface - HSE_REQ_BASE=0; -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function allows your ISAPI extension to redirect a client -// browser to a different URL from the one they initially requested. When this -// support function is called, you must provide the new URL. IIS then sends the -// HTTP status code 302 (URL Redirect) to the client browser. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_SEND_URL_REDIRECT_RESP=( HSE_REQ_BASE + 1 ); // ISAPI 2.0/3.0 - HSE_REQ_SEND_URL=( HSE_REQ_BASE + 2 ); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function allows you to request that IIS send a complete HTTP -// response header to the client browser, including the HTTP status, server -// version, message time, and MIME version. Your extension can also, optionally, -// append other header information to the end of IIS-generated header, such as -// Content-Type or Content-Length. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_SEND_RESPONSE_HEADER=( HSE_REQ_BASE + 3 ); // ISAPI 2.0/3.0 // depreciated - HSE_REQ_SEND_RESPONSE_HEADER_EX=(HSE_REQ_END_RESERVED+16); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// If your extension is performing some form of extended processing, and its -// HttpExtensionProc entry-point function has returned the status code -// HSE_STATUS_PENDING, then your extension should notify IIS when all -// processing is complete by using this support function. Calling this function -// will terminate the session connection. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_DONE_WITH_SESSION=( HSE_REQ_BASE + 4 ); // ISAPI 2.0/3.0 - -// These are Microsoft specific extensions - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function allows your ISAPI extension to map a logical URL path -// to a physical path. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_MAP_URL_TO_PATH=(HSE_REQ_END_RESERVED+1); // ISAPI 2.0/3.0 - HSE_REQ_MAP_URL_TO_PATH_EX=(HSE_REQ_END_RESERVED+12); // ISAPI 4.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function allows your ISAPI extension to retrieve context and -// credential handles to the CtxtHandle and CredHandle structures, as defined -// in the header file sspi.h. Once these handles are retrieved, they can be -// used to query or manipulate the server certificate information by using the -// standard certificate APIs that are also defined in sspi.h. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_GET_SSPI_INFO=(HSE_REQ_END_RESERVED+2); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// You can use this support function to write your own custom log strings to -// the log record. When this function is called, the string contained in the -// buffer you specify is appended to the log record for the current HTTP -// request. -/////////////////////////////////////////////////////////////////////////////// - HSE_APPEND_LOG_PARAMETER=(HSE_REQ_END_RESERVED+3); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// Using this support function, you can set a special callback function that -// will be used for handling asynchronous I/O operations. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_IO_COMPLETION=(HSE_REQ_END_RESERVED+5); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function enables your ISAPI extension to call the -// high-performance Win32® API TransmitFile function to send a file to the -// client browser. This function accepts as a parameter a pointer to a -// structure, HSE_TF_INFO, so that you can specify the file handle of the file -// to be sent, HTTP headers for the response, and other important information. -// -// TransmitFile is carried out asynchronously, so your extension must specify a -// special callback function so IIS can notify your extension when the -// asynchronous write operation has completed. You can do this either by using -// the pfnHseIO member of the HSE_TF_INFO used in the function call, or by using -// the support function HSE_REQ_IO_COMPLETION. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_TRANSMIT_FILE=(HSE_REQ_END_RESERVED+6); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function forces IIS to reprocess the discretionary access -// control list (DACL) for an ISAPI extension's DLL. Given sufficient security -// permissions, this support function can be used to reprocess another -// extension's DACL, as well. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_REFRESH_ISAPI_ACL=(HSE_REQ_END_RESERVED+7); // ISAPI 2.0/3.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function can be used to determine the Keep-Alive status of the -// current connection. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_IS_KEEP_CONN=(HSE_REQ_END_RESERVED+8); -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// Using this support function, your ISAPI extension can request that IIS -// attempt to read from the client asynchronously. In order for this function -// to work properly, however, you must have specified a special callback -// function, which IIS will call when the asynchronous read has completed. This -// callback function can be set using the ServerSupportFunction request -// HSE_REQ_IO_COMPLETION. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_ASYNC_READ_CLIENT=(HSE_REQ_END_RESERVED+10); -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function allows you to retrieve a handle to the impersonation -// token that the request is using. An impersonation token represents a user -// context. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_GET_IMPERSONATION_TOKEN=(HSE_REQ_END_RESERVED+11); // ISAPI 4.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function can be used to request that, when disconnecting the -// current connection, IIS will use an abortive shutdown sequence to close the -// TCP/IP connection socket. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_ABORTIVE_CLOSE=(HSE_REQ_END_RESERVED+14); -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This support function specifies the certificate context for the first -// certificate in the client's certificate chain. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_GET_CERT_INFO_EX=(HSE_REQ_END_RESERVED+15); // ISAPI 4.0 -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// This server support function sends a request to IIS to close the current -// client socket connection, even if there is an asynchronous read pending. -/////////////////////////////////////////////////////////////////////////////// - HSE_REQ_CLOSE_CONNECTION=(HSE_REQ_END_RESERVED+17); // ISAPI 5.0/5.1 - - HSE_TERM_MUST_UNLOAD=2; - -Type - PHSE_SEND_HEADER_EX_INFO=^HSE_SEND_HEADER_EX_INFO; - HSE_SEND_HEADER_EX_INFO=Record - pszStatus:LPCSTR; // HTTP status code; for example "200 OK". - pszHeader:LPCSTR; // HTTP header. - cchStatus:Longword; // Number of characters in status code. - cchHeader:Longword; // Number of characters in header. - fKeepConn:BOOLEAN; // Keep client connection alive? - End; -Const - MAX_PATH = (256); - -Type - PCERT_CONTEXT_EX=^TCERT_CONTEXT_EX; - TCERT_CONTEXT_EX = packed record - CertContext:TCERT_CONTEXT; - cbAllocated:Longword; - dwCertificateFlags:Longword; - End; - PHSE_URL_MAPEX_INFO = ^THSE_URL_MAPEX_INFO; - THSE_URL_MAPEX_INFO = record - lpszPath: array [0..MAX_PATH-1] of Char; // Physical path mapped to by the URL. - dwFlags:Longword; // Flags associated with this URL path. - cchMatchingPath:Longword; // Number of matching characters in - cchMatchingURL:Longword; // Number of matching characters in URL. - dwReserved1:Longword; - dwReserved2:Longword; - End; - PDXThreadRecord=^TDXThreadRecord; - TDXThreadRecord=record - fAllocMem:TList; - fToken:Cardinal; - fDopHeaders:String; - fDopDeniedHeaders:String; - fHeaderInfo:PHeaderInfo; - ThreadID:HCONN; - Thread:TDXClientThread; - fGetServerVariable:TDX_GetServerVariable; - fRedirectHeader:TDX_RedirectHeader; - fBuildHeader:TDX_BuildHeader; - fiTimeout:Integer; - ECB:TEXTENSION_CONTROL_BLOCK; - mapex:THSE_URL_MAPEX_INFO; - fRealPath:String; // 3.0 - fISAPIThreadPoolDone:Boolean; - end; - PDXFilterRecord = ^TDXFilterRecord; - TDXFilterRecord = record - fName:String; - fVersion:PHTTP_FILTER_VERSION; - fNotification:Boolean; - fDisableNotification:Longword; - fNextReadSize:Longword; - End; - PDXMemoryBlock= ^TDXMemoryBlock; - TDXMemoryBlock = record - fPointer:Pointer; - fSize:Longword; - End; - -Var - fDXThreadArray:TList; - fActiveFilter:PDXFilterRecord; - fFilter:TList; -{$IFDEF USE_DLL_MGR} - fDLLManager:TDXDLLManager; -{$ENDIF} - fPreprocHeader:PHeaderInfo; - fGetServerVariableFilterProc:TFilterGetServerVariableProc; - -constructor TDXISAPI.Create(AOwner:TComponent); -begin - inherited Create(AOwner); -{$IFDEF USE_DLL_MGR} - fDLLManager:=TDXDLLManager.Create(Nil); -{$ENDIF} - fDXThreadArray:=TList.Create; - fFilter:=TList.Create; - fTimeout:=30000; -end; - -destructor TDXISAPI.Destroy; -Var - DXThreadRecord:PDXThreadRecord; - DXMemoryBlock:PDXMemoryBlock; - -begin - MyCriticalSection.StartingWrite; - If Assigned(fDXThreadArray) then Begin - MyCriticalSection.StartingWrite; - While fDXThreadArray.Count>0 do Begin - DXThreadRecord:=fDXThreadArray[0]; - //Free memory for FilterAllocMem - while DXThreadRecord^.fAllocMem.Count>0 do Begin - DXMemoryBlock:=DXThreadRecord^.fAllocMem[0]; - FreeMem(DXMemoryBlock^.fPointer, DXMemoryBlock^.fSize); - DXThreadRecord^.fAllocMem.Delete(0); - End; - Dispose(DXThreadRecord); - fDXThreadArray.Delete(0); - End; - MyCriticalSection.FinishedWrite; - fDXThreadArray.Free; - fDXThreadArray := Nil; - End; - MyCriticalSection.FinishedWrite; - -{$IFDEF USE_DLL_MGR} - If Assigned(fDLLManager) then Begin - fDLLManager.Free; - fDLLManager := Nil; - End; -{$ENDIF} - - If Assigned(fFilter) then Begin - fFilter.Free; - fFilter := Nil; - End; - - inherited destroy; -end; - -Function FindThread(FindHCONN:HCONN):PDXThreadRecord; -Var - Loop:Integer; - DXThreadRecord:PDXThreadRecord; - -Begin - Result:=Nil; -// MyCriticalSection.StartingRead; - For Loop:=fDXThreadArray.Count-1 downto 0 do Begin - DXThreadRecord:=PDXThreadRecord(fDXThreadArray[Loop]); - If DXThreadRecord^.ThreadID=FindHCONN then Begin - Result:=DXThreadRecord; - Break; // o.z - End; - End; -// MyCriticalSection.FinishedRead; -End; - -Function FindThreadToFilter(var pfc: THTTP_FILTER_CONTEXT):PDXThreadRecord; -var - conn:Pointer; -Begin - GetMem(conn, sizeof(Longword)); - THTTP_FILTER_CONTEXT(pfc).ServerSupportFunction(pfc, SF_REQ_GET_CONNID, conn, 0, 0); - Result:=FindThread(HCONN(conn^)); - FreeMem(conn, sizeof(Longword)); -End; - -/////////////////////////////////////////////////////////////////////////////// -// Filter function implementation -/////////////////////////////////////////////////////////////////////////////// - -Function FilterAddResponseHeaders(var pfc{: THTTP_FILTER_CONTEXT}; - lpszHeaders: PChar; dwReserved: Longword):BOOLEAN; stdcall; -var - DXThreadRecord:PDXThreadRecord; -Begin - DXThreadRecord:=FindThreadToFilter(THTTP_FILTER_CONTEXT(pfc)); - DXThreadRecord^.fDopHeaders:=DXThreadRecord^.fDopHeaders+lpszHeaders; - Result:=True; -End; - -Function FilterWriteClient(var pfc{: THTTP_FILTER_CONTEXT}; - Buffer: Pointer; var Bytes: Longword; dwReserved: Longword): BOOLEAN; stdcall; -var DXThreadRecord:PDXThreadRecord; - conn:Pointer; -Begin - GetMem(conn, sizeof(Longword)); - THTTP_FILTER_CONTEXT(pfc).ServerSupportFunction(pfc, SF_REQ_GET_CONNID, conn, 0, 0); - DXThreadRecord:=FindThread(HCONN(conn^)); - FreeMem(conn, sizeof(Longword)); -{$IFDEF VER100} // D3 - DXThreadRecord^.Thread.Socket.BlockWrite(Buffer,Bytes); -{$ELSE} - DXThreadRecord^.Thread.Socket.Write(Buffer,Bytes); -{$ENDIF} - Result:=True; -End; - -Function FilterAllocMem(var pfc{: THTTP_FILTER_CONTEXT}; cbSize: Longword; - dwReserved: Longword):Pointer; stdcall; -var p:Pointer; - MemoryBlock:TDXMemoryBlock; - DXThreadRecord:PDXThreadRecord; -Begin - p:=Nil; -Try - GetMem(p, cbSize); -Except - FreeMem(p); - Result:=Nil; - Exit; -End; - MemoryBlock.fPointer:=p; - MemoryBlock.fSize:=cbSize; - DXThreadRecord:=FindThreadToFilter(THTTP_FILTER_CONTEXT(pfc)); - DXThreadRecord^.fAllocMem.Add(@MemoryBlock); - Result:=p; -End; - -Function FilterServerSupportFunction(var pfc{: THTTP_FILTER_CONTEXT}; - sfReq: Longword; pData: Pointer; ul1, ul2: Longword):BOOLEAN; stdcall; -var - Results, hex:String; - normal:PString; - size:Longword; - DXThreadRecord:PDXThreadRecord; - i, dec, code : Integer; -Begin - Result:=True; - - case sfReq of - SF_REQ_SEND_RESPONSE_HEADER:Begin - If pData = Nil then Results:='HTTP/1.1 200 OK'+#13#10 - Else Results:=String(pData^); - Results:=Results+String(Pointer(ul1)^); - size:=Length(Results)+1; - THTTP_FILTER_CONTEXT(pfc).WriteClient(pfc, PChar(Results), size, 0); - End; //SF_REQ_SEND_RESPONSE_HEADER - - SF_REQ_ADD_HEADERS_ON_DENIAL:Begin - DXThreadRecord := FindThreadToFilter(THTTP_FILTER_CONTEXT(pfc)); - DXThreadRecord.fDopDeniedHeaders := - DXThreadRecord.fDopDeniedHeaders+ String(pData); - End;//SF_REQ_ADD_HEADERS_ON_DENIAL - - SF_REQ_SET_NEXT_READ_SIZE:Begin - fActiveFilter.fNextReadSize := ul1; - End; //SF_REQ_SET_NEXT_READ_SIZE - - SF_REQ_SET_PROXY_INFO:Begin - //You can use this support function to indicate whether - //the current request is an HTTP proxy request. - if ul1 = 1 then Begin - //request is a proxy request. - End - Else - if ul1 = 0 then Begin - //request is not a proxy request - End; - End; //SF_REQ_SET_PROXY_INFO - - SF_REQ_GET_CONNID:Begin - HCONN(pData^):=GetCurrentThreadId; - End; - - SF_REQ_DISABLE_NOTIFICATIONS:Begin - fActiveFilter.fDisableNotification:=ul1; - End; - - SF_REQ_GET_PROPERTY:Begin - //You can use this support function to retrieve special IIS - //properties defined in SF_PROPERTY_IIS. - case ul1 of - SF_PROPERTY_INSTANCE_NUM_ID:Begin - pData := Nil; - End; - End; //case - End; - - SF_REQ_NORMALIZE_URL:Begin - normal := PString(pData); - i:=1; - while i<> Length(normal^) do - Begin - if normal^[i] = '%' then Begin - hex := Copy(normal^, i, 3); - hex[1] := '$'; - Val(hex, dec, Code); - if code <> 0 then Delete(normal^, i, 3) - Else Begin - Delete(normal^, i, 2); - normal^[i]:=Char(dec); - End; - End; - i := i + 1; - End;//while - End; //SF_REQ_NORMALIZE_URL - else - Result:=False; - End; -End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The AddHeader callback function adds an HTTP header to the incoming request -// or outgoing response. This callback function is available only during -// notifications for the SF_NOTIFY_PREPROC_HEADERS and -// SF_NOTIFY_SEND_RESPONSE events. -/////////////////////////////////////////////////////////////////////////////// -Function FilterAddHeader(var pfc: THTTP_FILTER_CONTEXT; lpszName, - lpszValue: PChar): BOOLEAN; stdcall; -var DXThreadRecord:PDXThreadRecord; - HeaderTools:TDXHTTPHeaderTools; -Begin - DXThreadRecord:=FindThreadToFilter(pfc); - HeaderTools := TDXHTTPHeaderTools.Create(Nil); - if Not Assigned(DXThreadRecord) then HeaderTools.Init(fPreprocHeader) - Else HeaderTools.Init(DXThreadRecord.fHeaderInfo); - Result := HeaderTools.AddHeader(String(lpszName), String(lpszValue)); - HeaderTools.Free; -End; - -Function FilterGetHeader(var pfc: THTTP_FILTER_CONTEXT; lpszName: PChar; - var lpvBuffer; var lpdwSize: Longword):BOOLEAN; stdcall; -var DXThreadRecord:PDXThreadRecord; - HeaderTools:TDXHTTPHeaderTools; - res:String; - resLength:Longword; -Begin - Result := False; - DXThreadRecord:=FindThreadToFilter(pfc); - HeaderTools := TDXHTTPHeaderTools.Create(Nil); - if Not Assigned(DXThreadRecord) then HeaderTools.Init(fPreprocHeader) - Else HeaderTools.Init(DXThreadRecord.fHeaderInfo); - res := HeaderTools.HeaderGetString(String(lpszName)); - if res <> '' then Begin - resLength:=Length(res); - Result := True; - PChar(lpvBuffer) := PChar(res); - lpdwSize := resLength; - End; - HeaderTools.Free; -End; - -Function FilterSetHeader(var pfc: THTTP_FILTER_CONTEXT; lpszName, - lpszValue: PChar):BOOLEAN; stdcall; -var DXThreadRecord:PDXThreadRecord; - HeaderTools:TDXHTTPHeaderTools; -Begin - DXThreadRecord:=FindThreadToFilter(pfc); - HeaderTools := TDXHTTPHeaderTools.Create(Nil); - if Not Assigned(DXThreadRecord) then HeaderTools.Init(fPreprocHeader) - Else HeaderTools.Init(DXThreadRecord.fHeaderInfo); - Result := HeaderTools.SetHeader(String(lpszName), String(lpszValue)); - HeaderTools.Free; -End; - -Procedure NotificationFilters(Notify:Longword; Buf1:Pointer; sizeBuf1:Longword; - Buf2:Pointer; sizeBuf2:Longword); -var p:Pointer; - filterContext:THTTP_FILTER_CONTEXT; - i:Integer; - filterRecord:PDXFilterRecord; - DLLHandle:THandle; - filterProc:THttpFilterProc; - outRes:PChar; - str:String; - outResSize:Longword; - DXThreadRecord:PDXThreadRecord; - -Begin - If fFilter.Count<1 then Exit; - with filterContext do Begin - cbSize:=sizeof(THTTP_FILTER_CONTEXT); - Revision:=4; - ServerContext:=Nil; - ulReserved:=0; - fIsSecurePort:=False; - pFilterContext:=Nil; - GetServerVariable:=fGetServerVariableFilterProc; - AddResponseHeaders:=FilterAddresponseHeaders; - WriteClient:=FilterWriteClient; - AllocMem:=FilterAllocMem; - ServerSupportFunction:=FilterServerSupportFunction; - End; - DXThreadRecord:=FindThreadToFilter(filterContext); - - Case Notify of - //Port Security Settings - SF_NOTIFY_SECURE_PORT : Begin - filterContext.fIsSecurePort:=True; - p:=Nil; - End; - - SF_NOTIFY_NONSECURE_PORT : Begin - filterContext.fIsSecurePort:=False; - p:=Nil; - End; - -//////////////////////////////////////////////////////////////////////////////// -// This event was used when the ISAPI sends data to the client. -// Or when the server is reading data from the client. -//////////////////////////////////////////////////////////////////////////////// - SF_NOTIFY_SEND_RAW_DATA: Begin - //this probably needs to be redesigned - GetMem(p, sizeof(THTTP_FILTER_RAW_DATA)); - with PHTTP_FILTER_RAW_DATA(p)^ do Begin - pvInData:=Buf1; - cbInData:=sizeBuf1; - cbInBuffer:=sizeof(Buf1); - dwReserved:=0; - End; - End; - SF_NOTIFY_READ_RAW_DATA:Begin - //HTTP_FILTER_RAW_DATA - GetMem(p, sizeof(THTTP_FILTER_RAW_DATA)); - with PHTTP_FILTER_RAW_DATA(p)^ do Begin - pvInData:=Buf1; - cbInData:=sizeBuf1; - cbInBuffer:=sizeof(Buf1); - dwReserved:=0; - End; - End; - -//////////////////////////////////////////////////////////////////////////////// -// Create hooks for Get/Set/Add Header Routines -//////////////////////////////////////////////////////////////////////////////// - SF_NOTIFY_PREPROC_HEADERS:Begin - //HTTP_FILTER_PREPROC_HEADERS - GetMem(p, sizeof(THTTP_FILTER_PREPROC_HEADERS)); - with PHTTP_FILTER_PREPROC_HEADERS(p)^ do Begin - GetHeader:=FilterGetHeader; - SetHeader:=FilterSetHeader; - AddHeader:=FilterAddHeader; - HttpStatus:=200; //HTTP_STATUS_CONTINUE - dwReserved:=0; - End; - fPreprocHeader := PHeaderInfo(Buf1); - End; - - SF_NOTIFY_AUTHENTICATION:Begin - //HTTP_FILTER_AUTHENT - GetMem(p, sizeof(THTTP_FILTER_AUTHENT)); - with PHTTP_FILTER_AUTHENT(p)^ do Begin - pszUser:=PChar(Buf1); - cbUserBuff:=sizeBuf1; - pszPassword:=PChar(Buf2); - cbPasswordBuff:=sizeBuf2; - End; - End; -/////////////////////////////////////////////////////////////////////////////// -// Notification is given to the filters after you have looked up the physical -// path. If the filters do not like it, then they can only close the connection -// and use SF_NOTIFY_PREPROC_HEADERS to write a 302 url. -/////////////////////////////////////////////////////////////////////////////// - SF_NOTIFY_URL_MAP:Begin - // HTTP_FILTER_URL_MAP - GetMem(p, sizeof(THTTP_FILTER_URL_MAP)); - with PHTTP_FILTER_URL_MAP(p)^ do Begin - pszURL:=PChar(Buf1); - pszPhysicalPath:=PChar(Buf2); - cbPathBuff:=sizeBuf2; - End; - End; - - SF_NOTIFY_ACCESS_DENIED:Begin - // HTTP_FILTER_ACCESS_DENIED - GetMem(p, sizeof(THTTP_FILTER_ACCESS_DENIED)); - with PHTTP_FILTER_ACCESS_DENIED(p)^ do Begin - pszURL:=PChar(Buf1); // Requesting URL - dwReason:=sizeBuf1; // Bitfield of SF_DENIED flags - pszPhysicalPath:=PChar(Buf2); // Physical path of resource - End; - End; - - SF_NOTIFY_LOG:Begin - //HTTP_FILTER_LOG - GetMem(p, sizeof(THTTP_FILTER_LOG)); - with PHTTP_FILTER_LOG(p)^ do Begin - pszClientHostName:='not support'; - pszClientUserName:='not support'; - pszServerName:='not support'; - pszOperation:='not support'; - pszTarget:='not support'; - pszParameters:='not support'; - dwHttpStatus:=200; - dwWin32Status:=0; - dwBytesSent:=0; - dwBytesRecvd:=0; - msTimeForProcessing:=0; - End; - End; - - SF_NOTIFY_END_OF_REQUEST:Begin - p:=Nil; - End; - - SF_NOTIFY_END_OF_NET_SESSION:Begin - p:=Nil; - End; - -//////////////////////////////////////////////////////////////////////////////// -// Create hooks for Get/Set/Add Header Routines - guess means to actually -// transmit the header to the client. -//////////////////////////////////////////////////////////////////////////////// - SF_NOTIFY_SEND_RESPONSE:Begin - //HTTP_FILTER_SEND_RESPONSE - GetMem(p, sizeof(THTTP_FILTER_SEND_RESPONSE)); - with PHTTP_FILTER_SEND_RESPONSE(p)^ do Begin - GetHeader:=FilterGetHeader; - SetHeader:=FilterSetHeader; - AddHeader:=FilterAddHeader; - HttpStatus:=200; - dwReserved:=0; - End; -// DXThreadRecord.fHeaderInfo := PHeaderInfo(Buf1); - End; - Else - Exit; - End; - - for i:=fFilter.Count-1 downto 0 do Begin - filterRecord:=fFilter.Items[i]; - if Not filterRecord.fNotification then continue; - if (filterRecord.fVersion.dwFlags AND - (Not filterRecord.fDisableNotification) AND Notify)=0 then continue; - fActiveFilter:=filterRecord; -{$IFDEF USE_DLL_MGR} - DLLHandle:=fDLLManager.GetDLLHandle(filterRecord.fName); -{$ELSE} -{$IFDEF LINUX} - DLLHandle:=LoadLibrary(PChar(filterRecord.fName)); -{$ELSE} - DLLHandle:=LoadLibraryEx(PChar(filterRecord.fName),0,0); -{$ENDIF} -{$ENDIF} - If DLLHandle=0 then continue; - @filterProc:=GetProcAddress(DLLHandle,PChar('HttpFilterProc')); - If Not Assigned(filterProc) then continue; - case filterProc(filterContext, Notify, p) of - SF_STATUS_REQ_FINISHED_KEEP_CONN, - SF_STATUS_REQ_FINISHED:Begin - if Assigned(DXThreadRecord) then - DXThreadRecord.Thread.Socket.CloseNow; - End; - SF_STATUS_REQ_NEXT_NOTIFICATION:Begin - continue; // pass to next filter - End; - SF_STATUS_REQ_HANDLED_NOTIFICATION:Begin - Break; // handled and done - End; - SF_STATUS_REQ_ERROR:Begin - NotificationFilters(SF_NOTIFY_ACCESS_DENIED, PChar(filterRecord.fName), - SF_DENIED_FILTER, PChar(''), 0); - -{$IFNDEF LINUX} - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER OR - FORMAT_MESSAGE_FROM_SYSTEM OR - FORMAT_MESSAGE_IGNORE_INSERTS, - Nil, - GetLastError(), - 0, // Default language - @outRes, - 0, - Nil - ); -{$ENDIF} - if outRes <> '' then Begin - str := 'HTTP/1.1 500 '+#13#10; - str := str + DXThreadRecord.fDopDeniedHeaders; - str := str + String(outRes) +#13#10; - outResSize:=Length(str); - filterContext.WriteClient(filterContext, PChar(str), outResSize, 0); - End - Else Begin - str:='HTTP/1.1 500'+#13#10 + DXThreadRecord.fDopDeniedHeaders; - outResSize:=Length(str); - filterContext.WriteClient(filterContext, PChar(str), outResSize, 0); - End; - if Assigned(DXThreadRecord) then - DXThreadRecord.Thread.Socket.CloseNow; - End; //SF_STATUS_REQ_ERROR - -// to-do: this has to be able to let the web server object do the read, -// that way no data disappear from the stream. Normally this status type -// is only returned when the filter is opaque (like SSL). - SF_STATUS_REQ_READ_NEXT:Begin - DXThreadRecord.ECB.ReadClient(DXThreadRecord.ThreadID, Pointer(outRes), filterRecord.fNextReadSize); - End; //SF_STATUS_REQ_READ_NEXT - End; //case - - End; //for -// once done - we have to return the changes to the P content! - if Assigned(p) then FreeMem(p); - fActiveFilter:=Nil; -End; - -/////////////////////////////////////////////////////////////////////////////// -// Extension ISAPI implementation -// ============================== -// ISAPI CALLBACK FUNCTIONS -/////////////////////////////////////////////////////////////////////////////// - -function ServerVariable(ThreadID:HCONN;Variable:PChar;Buffer:Pointer;Size:LPDWord):BOOLEAN; stdcall; -var - DXThreadRecord:PDXThreadRecord; - Results:String; - Str:String; - -begin - Result:=False; - LongWord(Size^):=0; - DXThreadRecord:=FindThread(ThreadID); - If Not Assigned(DXThreadRecord) then Exit; - Results:=''; - str := Variable; - If Str='INSTANCE_ID' then Results:=IntToStr(ThreadID) - Else if Assigned(DXThreadRecord^.fGetServerVariable) then - DXThreadRecord^.fGetServerVariable(DXThreadRecord^.Thread,Str,Results); - StrPCopy(PChar(Buffer),Results); - If Results<>'' then LongWord(Size^):=Length(Results)+1; - Result:=True; -end; - -Function ExtensionWriteClient(ThreadID:HCONN;Buf:Pointer;Var Bytes:Longword;dwReserved:Longword):BOOLEAN; stdcall; -var - DXThreadRecord:PDXThreadRecord; - -begin - If Bytes=0 then Begin // PHP occasionally calls this with zero bytes?! - Result:=True; - Exit; - End; - Result:=False; - DXThreadRecord:=FindThread(ThreadID); - If Not Assigned(DXThreadRecord) then Exit; - NotificationFilters(SF_NOTIFY_SEND_RAW_DATA, Buf, Bytes, Nil, 0); -{$IFDEF VER100} // D3 - DXThreadRecord^.Thread.Socket.BlockWrite(Buf,Bytes); -{$ELSE} - DXThreadRecord^.Thread.Socket.Write(Buf,Bytes); -{$ENDIF} - Result:=DXThreadRecord^.Thread.Socket.LastCommandStatus=0; -end; - -function ExtensionReadClient(ThreadID:HCONN;Buf:Pointer;var Size:Longword):BOOLEAN; stdcall; -var - DXThreadRecord:PDXThreadRecord; -begin - Result:=False; - DXThreadRecord:=FindThread(ThreadID); - If Not Assigned(DXThreadRecord) then Exit; - NotificationFilters(SF_NOTIFY_READ_RAW_DATA, Buf, Size, Nil, 0); -{$IFDEF VER100} - Size:=DXThreadRecord^.Thread.Socket.BlockRead(Buf,Size); -{$ELSE} - Size:=DXThreadRecord^.Thread.Socket.Read(Buf,Size); -{$ENDIF} - Result:=True; -end; - -{$HINTS OFF} -function ServerSupportFunctionS(ThreadID:HCONN; - HSE_REQ:Longword; - Buf:Pointer; - Size:Pointer{PDWORD}; - DataType:Pointer{PDWORD}):BOOLEAN; stdcall; -var - DXThreadRecord:PDXThreadRecord; - Results:String; - -begin // HTTPODBC.DLL calls with HSE_REQ=61442 (wtf?) - Result:=False; - Results:=''; - DXThreadRecord:=FindThread(ThreadID); - If Not Assigned(DXThreadRecord) then Exit; - Case HSE_REQ of - HSE_APPEND_LOG_PARAMETER:Begin - Move(PChar(Buf),DXThreadRecord^.ECB.lpszLogData,StrLen(PChar(Buf))); - Result:=False; - End; - HSE_REQ_ABORTIVE_CLOSE, - HSE_REQ_CLOSE_CONNECTION:Begin - DXThreadRecord^.Thread.Socket.CloseNow; - Result:=True; - End; - HSE_REQ_IS_KEEP_CONN:Begin - Boolean(Buf^):=False; // when I get keep alive for ISAPI working set this to true - Result:=True; - End; - HSE_REQ_MAP_URL_TO_PATH: - Begin - Results := DXThreadRecord^.fRealPath+StringReplace(String(PChar(Buf)), '/', '\', [rfReplaceAll]); - Results := StringReplace(Results,'\\','\',[rfReplaceAll]); - LongWord(Size^):=Length(Results); // 9/11/2002 - Buf:=PChar(Results); - with DXThreadRecord^.mapex do Begin - StrPCopy(lpszPath, Results); - dwFlags:=1+2+4; //READ+WRITE+EXECUTE - cchMatchingPath:=StrLen(lpszPath); - cchMatchingURL:=StrLen(lpszPath); - dwReserved1:=0; - dwReserved2:=0; - End; - Move(DXThreadRecord^.Mapex,DataType^,Sizeof(DXThreadRecord^.Mapex)); - NotificationFilters(SF_NOTIFY_URL_MAP, Buf, Longword(Size), @Results, Length(Results)); - Result:=True; - End; - HSE_REQ_MAP_URL_TO_PATH_EX: - Begin - Results := DXThreadRecord^.fRealPath+StringReplace(String(PChar(Buf)), '/', '\', [rfReplaceAll]); - Results := StringReplace(Results,'\\','\',[rfReplaceAll]); - with DXThreadRecord^.mapex do Begin - StrPCopy(lpszPath,Results); - dwFlags:=1+2+4; //READ+WRITE+EXECUTE - cchMatchingPath:=StrLen(lpszPath); - cchMatchingURL:=StrLen(lpszPath); - dwReserved1:=0; - dwReserved2:=0; - End; - Move(DXThreadRecord^.Mapex,DataType^,Sizeof(DXThreadRecord^.Mapex)); - NotificationFilters(SF_NOTIFY_URL_MAP, Buf, Longword(Size), @Results, Length(Results)); - Result:=True; - End; - HSE_REQ_SEND_URL_REDIRECT_RESP, - HSE_REQ_SEND_URL:Begin - If Assigned(DXThreadRecord^.fRedirectHeader) then - DXThreadRecord^.fRedirectHeader( - DXThreadRecord^.Thread, - StrPas(PChar(Buf)),Results) - Else Results:='HTTP/1.1 302 Moved Temporarily'+#13#10+'Location: '+StrPas(PChar(Buf))+#13#10; - DXThreadRecord^.Thread.Socket.Writeln(Results); - Result:=True; - End; - HSE_REQ_SEND_RESPONSE_HEADER:Begin - Result := True; - Results:=''; - If Assigned(Buf) then begin - If PChar(Buf)<>'' then Begin - Results:='HTTP/1.1 '+PChar(Buf)+#13#10; - End; - End; - If Results='' then Begin - If Assigned(DXThreadRecord^.fBuildHeader) then - DXThreadRecord^.fBuildHeader(DXThreadRecord^.ECB.dwHttpStatusCode,Results) - Else Begin - Results:='HTTP/1.1 200 OK'+#13#10; - End; - End; - If Assigned(DataType) then begin - Results:=Results+PChar(DataType); - End; - If Copy(Results,Length(Results)-1,2)<>#13#10 then - Results:=Results+#13#10; - {// 5-11-2002 - If Copy(Results,Length(Results)-3,4)<>#13#10#13#10 then - DXThreadRecord^.Thread.Socket.Writeln(Results)} - - // 5-11-2002 - If (Copy(Results,Length(Results)-3,4)<>#13#10#13#10) and - (Copy(Results,Length(Results)-1,2)<>#10#10) and //10-3-2002 - (Copy(Results,Length(Results)-1,2)<>#13#13) then Begin //10-3-2002 - // 10-3-2002 - If PChar(Buf)<>'' then DXThreadRecord^.Thread.Socket.Writeln(Results) - Else DXThreadRecord^.Thread.Socket.Write(Results); - End - Else - DXThreadRecord^.Thread.Socket.Write(Results) - End; - HSE_REQ_SEND_RESPONSE_HEADER_EX:Begin - Results:=''; - If Assigned(DXThreadRecord^.fBuildHeader) then - DXThreadRecord^.fBuildHeader(DXThreadRecord^.ECB.dwHttpStatusCode,Results) - Else Begin - If PHSE_SEND_HEADER_EX_INFO(Buf)^.cchStatus>0 then - Results:='HTTP/1.1 '+PChar(PHSE_SEND_HEADER_EX_INFO(Buf)^.pszStatus)+#13#10 - Else - Results:='HTTP/1.1 200 OK'+#13#10; - End; - If PHSE_SEND_HEADER_EX_INFO(Buf)^.cchHeader=0 then Results:=Results+#13#10 - Else Results:=Results+PHSE_SEND_HEADER_EX_INFO(Buf)^.pszHeader; - // redesign - NotificationFilters(SF_NOTIFY_SEND_RESPONSE, @Results, 0, Nil, 0); - DXThreadRecord^.Thread.Socket.Write(Results); - Result:=True; - End; - HSE_REQ_TRANSMIT_FILE:Begin - Result:=False; - // ? - //if access denied to call - //NotificationFilters(SF_NOTIFY_ACCESS_DENIED, Pointer1, SF_DENIED_RESOURCE, Pointer2, 0); - //This: Pointer1 - Requesting URL, - // Pointer2 - Physical path of resource - End; - HSE_REQ_DONE_WITH_SESSION:Begin - DXThreadRecord^.fISAPIThreadPoolDone:=True; - Result:=True; - End; - HSE_REQ_GET_SSPI_INFO:Begin - Result:=False; - End; - HSE_REQ_IO_COMPLETION:Begin - Result:=False; - End; - HSE_REQ_REFRESH_ISAPI_ACL:Begin - Result:=False; - End; - HSE_REQ_ASYNC_READ_CLIENT:Begin - Result:=True; - End; -{ do not know there values! - HSE_REQ_EXECUTE_CHILD:Begin // ISAPI 5.1 - Result:=False; - End; - HSE_REQ_GET_EXECUTE_FLAGS:Begin // ISAPI 5.1 - Reslut:=True; - Move(HSE_EXEC_CUSTOM_ERROR,DataType,Sizeof(HSE_EXEC_CUSTOM_ERROR)); - End; -} - HSE_REQ_GET_IMPERSONATION_TOKEN:Begin - Result:=False; -{$IFNDEF LINUX} - If Assigned(Buf) then Begin - Result:=OpenThreadToken(HCONN(DXThreadRecord^.Thread), TOKEN_ALL_ACCESS, False, THandle(DXThreadRecord^.fToken)); - if Result then Buf:=@DXThreadRecord^.fToken; - End; -{$ENDIF} - End; - HSE_REQ_GET_CERT_INFO_EX:Begin - Result:=False; -// fCertificate:=TCERT_CONTEXT_EX(Buf); - End; - - End; -end; -{$HINTS ON} - -/////////////////////////////////////////////////////////////////////////////// -// LOG INFORMATION -// Use to write log information of transaction request and response. -/////////////////////////////////////////////////////////////////////////////// -function WriteTransactionToLog(LogStr:String; Size:Longword):BOOLEAN; -Begin - NotificationFilters(SF_NOTIFY_LOG, PChar(LogStr), Size, Nil, 0); - Result:=True; -End; - -/////////////////////////////////////////////////////////////////////////////// -// Find and Load DLL instance -/////////////////////////////////////////////////////////////////////////////// -Function TDXISAPI.RegisterDLL(ISAPI:String):Boolean; -Begin -{$IFDEF USE_DLL_MGR} - Result:=fDLLManager.LoadThisDLL(ISAPI); -{$ELSE} - Result:=True; -{$ENDIF} -End; - -/////////////////////////////////////////////////////////////////////////////// -// Find and Un-Load DLL instance -/////////////////////////////////////////////////////////////////////////////// -Function TDXISAPI.UnRegisterDLL(ISAPI:String):Boolean; -Begin -{$IFDEF USE_DLL_MGR} - Result:=fDLLManager.UnLoadThisDLL(ISAPI); -{$ELSE} - Result:=True; -{$ENDIF} -End; - -/////////////////////////////////////////////////////////////////////////////// -// LAUNCH THE DLL! -/////////////////////////////////////////////////////////////////////////////// - -Function TDXISAPI.Execute(Session:TDXClientThread; - ISAPI, - Method, - QueryString, - PathInfo, - PathTranslated, - POSTContent_Type, - POSTData:String; - POSTDataSize:Integer; - Var ResultLog:String):Boolean; -Var - DXThreadRecord:PDXThreadRecord; - Version:TGetExtensionVersion; - Proc:THttpExtensionProc; - AllDone:TTerminateExtension; - Loop:Integer; - DLLHandle:THandle; - ProcResults:Longword; - Err:PChar; - EVI:THSE_VERSION_INFO; - StartTime:Cardinal; // 3.0.b - -Begin - Result:=False; -{$IFDEF USE_DLL_MGR} - DLLHandle:=fDLLManager.GetDLLHandle(ISAPI); -{$ELSE} -{$IFDEF LINUX} - DLLHandle:=LoadLibrary(PChar(ISAPI)); -{$ELSE} - DLLHandle:=LoadLibraryEx(PChar(ISAPI),0,0); -{$ENDIF} -{$ENDIF} - If DLLHandle=0 then Begin - GetMem(Err,256); -{$IFNDEF LINUX} - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,GetLastError,0,Err,256,Nil); -{$ENDIF} - ResultLog:=ISAPI+' was not registered! ('+Err+')'; - FreeMem(Err,256); -{$IFNDEF USE_DLL_MGR} - FreeLibrary(DLLHandle); -{$ENDIF} - Exit; - End; - @Version:=GetProcAddress(DLLHandle,PChar('GetExtensionVersion')); - If Not Assigned(Version) then Begin - ResultLog:=ISAPI+' does not export "GetExtensionVersion"'; -{$IFNDEF USE_DLL_MGR} - FreeLibrary(DLLHandle); -{$ENDIF} - Exit; - End; - @Proc:=GetProcAddress(DLLHandle,PChar('HttpExtensionProc')); - If Not Assigned(Proc) then Begin - ResultLog:=ISAPI+' does not export "HTTPExtensionProc"'; -{$IFNDEF USE_DLL_MGR} - FreeLibrary(DLLHandle); -{$ENDIF} - Exit; - End; - - New(DXThreadRecord); - With DXThreadRecord^ do Begin - ThreadID:=GetCurrentThreadID; - Thread:=Session; - fToken:=0; - fDopHeaders:=''; - fDopDeniedHeaders:=''; - fGetServerVariable:=self.fGetServerVariable; - fRedirectHeader:=self.fRedirectHeader; - fBuildHeader:=self.fBuildHeader; - fRealPath:=ExtractFilePath(PathTranslated); - fiTimeout:=fTimeout; - fISAPIThreadPoolDone:=False; - End; - If Assigned(Version) then Begin - FillChar(EVI,Sizeof(EVI),#0); - If Not Version(EVI) then Begin - Dispose(DXThreadRecord); - ResultLog:=ISAPI+' Version Hook Refused'; -{$IFNDEF USE_DLL_MGR} - FreeLibrary(DLLHandle); -{$ENDIF} - Exit; - End - Else ResultLog:=EVI.lpszExtensionDesc; - End; - - With DXThreadRecord^.ECB do Begin - cbSize:=sizeof(TEXTENSION_CONTROL_BLOCK); - dwVersion:=HSE_VERSION_MAJOR shl 16 + HSE_VERSION_MINOR; - ConnID:=DXThreadRecord^.ThreadID; - dwHttpStatusCode:=200; - FillChar(lpszLogData,HSE_LOG_BUFFER_LEN,#0); - lpszMethod:=PChar(Method); - lpszQueryString:=PChar(QueryString); - lpszPathInfo:=PChar(PathInfo); - lpszPathTranslated:=PChar(PathTranslated); - cbAvailable:=Length(PostData); - lpbData:=PChar(PostData); - cbTotalBytes:=POSTDataSize; - lpszContentType:=PChar(PostContent_Type); - GetServerVariable:=ServerVariable; - ServerSupportFunction:=ServerSupportFunctionS; - WriteClient:=ExtensionWriteClient; - ReadClient:=ExtensionReadClient; - End; - - MyCriticalSection.StartingWrite; - fDXThreadArray.Add(DXThreadRecord); - MyCriticalSection.FinishedWrite; -try - ProcResults:=Proc(DXThreadRecord^.ECB); - Result:=True; - Case ProcResults of - HSE_STATUS_SUCCESS, - HSE_STATUS_SUCCESS_AND_KEEP_CONN:Begin - ResultLog:=ResultLog+' success: '+StrPas(DXThreadRecord^.ECB.lpszLogData); - End; - HSE_STATUS_PENDING:Begin - // we must loop here and wait for ISAPIThreadPool to finish. - // 3.0.b - StartTime:=TimeCounter; // 9/11/2002 moved down here. - While (Not DXThreadRecord^.fISAPIThreadPoolDone) and (TimeCounter0 then - CloseHandle(DXThreadRecord^.fToken); -{$ENDIF} - Dispose(DXThreadRecord); - fDXThreadArray.Delete(Loop); - MyCriticalSection.FinishedWrite; - Exit; - End - Else Inc(Loop); - End; - MyCriticalSection.FinishedRead; -End; - -function SortFilterCompare(Item1, Item2: Pointer): Integer; -var fv1, fv2 : PHTTP_FILTER_VERSION; -Begin - fv1:=PDXFilterRecord(Item1).fVersion; - fv2:=PDXFilterRecord(Item2).fVersion; - Result:= (fv1.dwFlags AND SF_NOTIFY_ORDER_MASK) - - (fv2.dwFlags AND SF_NOTIFY_ORDER_MASK); -End; - -Procedure TDXISAPI.RegisterFilters(var ResultLog:String); -var DXFilterRecord:PDXFilterRecord; - filterVersion:THTTP_FILTER_VERSION; - i:Integer; - DLLHandle:THandle; - ISAPI:String; - Version:TGetFilterVersion; -Begin - for i:=0 to fFilter.Count-1 do Begin - DXFilterRecord:=fFilter.Items[i]; - ISAPI:=DXFilterRecord.fName; - RegisterDLL(ISAPI); -{$IFDEF USE_DLL_MGR} - DLLHandle:=fDLLManager.GetDLLHandle(ISAPI); -{$ELSE} -{$IFDEF LINUX} - DLLHandle:=LoadLibrary(PChar(ISAPI)); -{$ELSE} - DLLHandle:=LoadLibraryEx(PChar(ISAPI),0,0); -{$ENDIF} -{$ENDIF} - If DLLHandle=0 then Begin - ResultLog:=ISAPI+' was not registered!'; - Continue; - End; - - @Version:=GetProcAddress(DLLHandle,PChar('GetFilterVersion')); - If Not Assigned(Version) then Begin - ResultLog:=ISAPI+' does not export "GetFilterVersion"'; - RemoveFilter(ISAPI); - Exit; - End; - - DXFilterRecord.fNotification:=Version(filterVersion); - DXFilterRecord.fVersion^:=filterVersion; - End; - - fFilter.Sort(SortFilterCompare); -End; - -Procedure TDXISAPI.UnRegisterFilters(var ResultLog:String); -var DXFilterRecord:PDXFilterRecord; - i:Integer; - DLLHandle:THandle; - Term:TTerminateFilter; -Begin - for i:=0 to fFilter.Count-1 do Begin - DXFilterRecord:=fFilter.Items[i]; -{$IFDEF USE_DLL_MGR} - DLLHandle:=fDLLManager.GetDLLHandle(DXFilterRecord.fName); -{$ELSE} -{$IFDEF LINUX} - DLLHandle:=LoadLibrary(PChar(DXFilterRecord.fName)); -{$ELSE} - DLLHandle:=LoadLibraryEx(PChar(DXFilterRecord.fName),0,0); -{$ENDIF} -{$ENDIF} - If DLLHandle=0 then Begin - ResultLog:=DXFilterRecord.fName+' was not registered!'; - Continue; - End; - - @Term:=GetProcAddress(DLLHandle,PChar('TerminateFilter')); - If Not Assigned(Term) then - Continue; - - Term(0); -{$IFDEF USE_DLL_MGR} - fDLLManager.UnLoadThisDLL(DXFilterRecord.fName); -{$ELSE} - FreeLibrary(DLLHandle); -{$ENDIF} - End; -End; - -Function TDXISAPI.AddFilter(ISAPI:String):Boolean; -var DXFilterRecord:PDXFilterRecord; - filterVersion:PHTTP_FILTER_VERSION; -Begin - Result:=False; - New(DXFilterRecord); - New(filterVersion); - DXFilterRecord.fName:=ISAPI; - with filterVersion^ do - Begin - dwServerFilterVersion:=HTTP_FILTER_REVISION; - dwFilterVersion:=0; - lpszFilterDesc:=''; - dwFlags:=0; - End; - DXFilterRecord.fVersion := filterVersion; - DXFilterRecord.fNotification := True; - DXFilterRecord.fDisableNotification := 0; - DXFilterRecord.fNextReadSize := 16*1024; //16Kb - if (fFilter.Add(DXFilterRecord) >= 0) then Result:=True - else Begin - Dispose(filterVersion); - Dispose(DXFilterRecord); - End; -End; - -Function TDXISAPI.RemoveFilter(ISAPI:String):Boolean; -var DXFilterRecord:PDXFilterRecord; - HTTP_FILTER_VERSION:PHTTP_FILTER_VERSION; - i : Integer; -Begin - Result:=False; - MyCriticalSection.StartingWrite; - for i:=0 to fFilter.Count-1 do - Begin - DXFilterRecord:=fFilter.Items[i]; - if DXFilterRecord.fName = ISAPI then - Begin - HTTP_FILTER_VERSION:=DXFilterRecord.fVersion; - Dispose(HTTP_FILTER_VERSION); - Dispose(DXFilterRecord); - fFilter.Delete(i); - Result:=True; - MyCriticalSection.FinishedWrite; - Exit; - End; - End; - MyCriticalSection.FinishedRead; -End; - -Procedure TDXISAPI.ServerStartEvent; -var - res:String; -Begin - RegisterFilters(res); -End; - -Procedure TDXISAPI.ServerStopEvent; -var - res:String; -Begin - self.UnRegisterFilters(res); -End; - -Procedure TDXISAPI.ServerRawRead(ReadString:String;Len:Longword); -Begin - NotificationFilters(SF_NOTIFY_READ_RAW_DATA, @ReadString, Len, Nil, 0); -End; - -Procedure TDXISAPI.ServerPreprocHeaderEvent(DXHeaderInfo:PHeaderInfo); -Begin - NotificationFilters(SF_NOTIFY_PREPROC_HEADERS, DXHeaderInfo, 0, Nil, 0); -End; - -Procedure TDXISAPI.ConvertedURL2Physical(URL:String;Physical:String); -Begin - NotificationFilters(SF_NOTIFY_URL_MAP,@URL,Length(URL),@Physical,Length(Physical)); -End; - -Procedure TDXISAPI.ServerEndOfRequest; -Begin - NotificationFilters(SF_NOTIFY_END_OF_REQUEST, Nil, 0, Nil, 0); -End; - -Procedure TDXISAPI.ServerEndSession; -Begin - NotificationFilters(SF_NOTIFY_END_OF_NET_SESSION, Nil, 0, Nil, 0); -End; - -Procedure TDXISAPI.SetServerVariableProc(value:TFilterGetServerVariableProc); -Begin - fGetServerVariableFilterProc:=value; -End; - -Function TDXISAPI.GetServerVariableProc:TFilterGetServerVariableProc; -Begin - Result := fGetServerVariableFilterProc; -End; - -Function TDXISAPI.FilterCount:Integer; -Begin - Result:=fFilter.Count; -End; - -{$IFDEF SUPPORT_COM} -initialization - CoInitializeEx(nil,COINIT_MULTITHREADED); -finalization - CoUninitialize; -{$ENDIF} - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPIFilter.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPIFilter.pas deleted file mode 100644 index 7dc1b89..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXISAPIFilter.pas +++ /dev/null @@ -1,481 +0,0 @@ -unit uRODXISAPIFilter; - -interface - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXISAPIFilter -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// - -{$IFDEF VER100} -Type - Longword=Cardinal; -{$ENDIF} - -Const - HTTP_FILTER_REVISION = $00040000; - - SF_MAX_USERNAME = (256+1); - SF_MAX_PASSWORD = (256+1); - - SF_MAX_FILTER_DESC_LEN = (256+1); - - // - // These values can be used with the pfnSFCallback function supplied in - // the filter context structure - // - - // - // Sends a complete HTTP server response header including - // the status, server version, message time and MIME version. - // - // Server extensions should append other information at the end, - // such as Content-type, Content-length etc followed by an extra - // '\r\n'. - // - // pData - Zero terminated string pointing to optional - // status string (i.e., "401 Access Denied") or NULL for - // the default response of "200 OK". - // - // ul1 - Zero terminated string pointing to optional data to be - // appended and set with the header. If NULL, the header will - // be terminated with an empty line. - // - - SF_REQ_SEND_RESPONSE_HEADER = 0; - {.$EXTERNALSYM SF_REQ_SEND_RESPONSE_HEADER} - - // - // If the server denies the HTTP request, add the specified headers - // to the server error response. - // - // This allows an authentication filter to advertise its services - // w/o filtering every request. Generally the headers will be - // WWW-Authenticate headers with custom authentication schemes but - // no restriction is placed on what headers may be specified. - // - // pData - Zero terminated string pointing to one or more header lines - // with terminating '\r\n'. - // - - SF_REQ_ADD_HEADERS_ON_DENIAL = 1; - {.$EXTERNALSYM SF_REQ_ADD_HEADERS_ON_DENIAL} - - // - // Only used by raw data filters that return SF_STATUS_READ_NEXT - // - // ul1 - size in bytes for the next read - // - - SF_REQ_SET_NEXT_READ_SIZE = 2; - {.$EXTERNALSYM SF_REQ_SET_NEXT_READ_SIZE} - - // - // Used to indicate this request is a proxy request - // - // ul1 - The proxy flags to set - // 0x00000001 - This is a HTTP proxy request - // - // - - SF_REQ_SET_PROXY_INFO = 3; - {.$EXTERNALSYM SF_REQ_SET_PROXY_INFO} - - SF_REQ_GET_CONNID = 4; - {.$EXTERNALSYM SF_REQ_GET_CONNID} - - SF_REQ_DISABLE_NOTIFICATIONS = 5; - {.$EXTERNALSYM SF_REQ_DISABLE_NOTIFICATIONS} - - SF_REQ_GET_PROPERTY = 6; - {.$EXTERNALSYM SF_REQ_GET_PROPERTY} - - SF_REQ_NORMALIZE_URL = 7; - {.$EXTERNALSYM SF_REQ_NORMALIZE_URL} - - // - // These values are returned by the filter entry point when a new request is - // received indicating their interest in this particular request - // - - // - // The filter has handled the HTTP request. The server should disconnect - // the session. - // - - SF_STATUS_REQ_FINISHED = $8000000; - {.$EXTERNALSYM SF_STATUS_REQ_FINISHED} - - // - // Same as SF_STATUS_FINISHED except the server should keep the TCP - // session open if the option was negotiated - // - - SF_STATUS_REQ_FINISHED_KEEP_CONN = $8000001; - {.$EXTERNALSYM SF_STATUS_REQ_FINISHED_KEEP_CONN} - - // - // The next filter in the notification chain should be called - // - - SF_STATUS_REQ_NEXT_NOTIFICATION = $8000002; - {.$EXTERNALSYM SF_STATUS_REQ_NEXT_NOTIFICATION} - - // - // This filter handled the notification. No other handles should be - // called for this particular notification type - // - - SF_STATUS_REQ_HANDLED_NOTIFICATION = $8000003; - {.$EXTERNALSYM SF_STATUS_REQ_HANDLED_NOTIFICATION} - - // - // An error occurred. The server should use GetLastError() and indicate - // the error to the client - // - - SF_STATUS_REQ_ERROR = $8000004; - {.$EXTERNALSYM SF_STATUS_REQ_ERROR} - - // - // The filter is an opaque stream filter and we're negotiating the - // session parameters. Only valid for raw read notification. - // - - SF_STATUS_REQ_READ_NEXT = $8000005; - {.$EXTERNALSYM SF_STATUS_REQ_READ_NEXT} - - // - // Bitfield indicating the requested resource has been denied by the server due - // to a logon failure, an ACL on a resource, an ISAPI Filter or an - // ISAPI Application/CGI Application. - // - // SF_DENIED_BY_CONFIG can appear with SF_DENIED_LOGON if the server - // configuration did not allow the user to logon. - // - - SF_DENIED_LOGON = $00000001; - {.$EXTERNALSYM SF_DENIED_LOGON} - SF_DENIED_RESOURCE = $00000002; - {.$EXTERNALSYM SF_DENIED_RESOURCE} - SF_DENIED_FILTER = $00000004; - {.$EXTERNALSYM SF_DENIED_FILTER} - SF_DENIED_APPLICATION = $00000008; - {.$EXTERNALSYM SF_DENIED_APPLICATION} - SF_DENIED_BY_CONFIG = $00010000; - {.$EXTERNALSYM SF_DENIED_BY_CONFIG} - - - // - // Notification Flags - // - // SF_NOTIFY_SECURE_PORT - // SF_NOTIFY_NONSECURE_PORT - // - // Indicates whether the application wants to be notified for transactions - // that are happenning on the server port(s) that support data encryption - // (such as PCT and SSL), on only the non-secure port(s) or both. - // - // SF_NOTIFY_READ_RAW_DATA - // - // Applications are notified after the server reads a block of memory - // from the client but before the server does any processing on the - // block. The data block may contain HTTP headers and entity data. - // - // - // - - SF_NOTIFY_SECURE_PORT = $00000001; - {.$EXTERNALSYM SF_NOTIFY_SECURE_PORT} - SF_NOTIFY_NONSECURE_PORT = $00000002; - {.$EXTERNALSYM SF_NOTIFY_NONSECURE_PORT} - SF_NOTIFY_READ_RAW_DATA = $00008000; - {.$EXTERNALSYM SF_NOTIFY_READ_RAW_DATA} - SF_NOTIFY_PREPROC_HEADERS = $00004000; - {.$EXTERNALSYM SF_NOTIFY_PREPROC_HEADERS} - SF_NOTIFY_AUTHENTICATION = $00002000; - {.$EXTERNALSYM SF_NOTIFY_AUTHENTICATION} - SF_NOTIFY_URL_MAP = $00001000; - {.$EXTERNALSYM SF_NOTIFY_URL_MAP} - SF_NOTIFY_ACCESS_DENIED = $00000800; - {.$EXTERNALSYM SF_NOTIFY_ACCESS_DENIED} - SF_NOTIFY_SEND_RAW_DATA = $00000400; - {.$EXTERNALSYM SF_NOTIFY_SEND_RAW_DATA} - SF_NOTIFY_LOG = $00000200; - {.$EXTERNALSYM SF_NOTIFY_LOG} - SF_NOTIFY_END_OF_NET_SESSION = $00000100; - {.$EXTERNALSYM SF_NOTIFY_END_OF_NET_SESSION} - SF_NOTIFY_END_OF_REQUEST = $00000080; - {.$EXTERNALSYM SF_NOTIFY_END_OF_REQUEST} - SF_NOTIFY_SEND_RESPONSE = $00010000; - {.$EXTERNALSYM SF_NOTIFY_SEND_RESPONSE} - - // - // Filter ordering flags - // - // Filters will tend to be notified by their specified - // ordering. For ties, notification order is determined by load order. - // - // SF_NOTIFY_ORDER_HIGH - Authentication or data transformation filters - // SF_NOTIFY_ORDER_MEDIUM - // SF_NOTIFY_ORDER_LOW - Logging filters that want the results of any other - // filters might specify this order. - // - - SF_NOTIFY_ORDER_HIGH = $00080000; - {.$EXTERNALSYM SF_NOTIFY_ORDER_HIGH} - SF_NOTIFY_ORDER_MEDIUM = $00040000; - {.$EXTERNALSYM SF_NOTIFY_ORDER_MEDIUM} - SF_NOTIFY_ORDER_LOW = $00020000; - {.$EXTERNALSYM SF_NOTIFY_ORDER_LOW} - SF_NOTIFY_ORDER_DEFAULT = SF_NOTIFY_ORDER_LOW; - {.$EXTERNALSYM SF_NOTIFY_ORDER_DEFAULT} - SF_NOTIFY_ORDER_MASK = SF_NOTIFY_ORDER_HIGH or - SF_NOTIFY_ORDER_MEDIUM or - SF_NOTIFY_ORDER_LOW; - {.$EXTERNALSYM SF_NOTIFY_ORDER_MASK} - - SF_PROPERTY_INSTANCE_NUM_ID = 1; - {.$EXTERNALSYM SF_PROPERTY_INSTANCE_NUM_ID} -// -// pvNotification points to this structure for all request notification types -// - -Type - SF_REQ_TYPE = LONGWORD; - SF_STATUS_TYPE = LONGWORD; - - PHTTP_FILTER_CONTEXT = ^THTTP_FILTER_CONTEXT; - TFilterGetServerVariableProc = function (pfc: PHTTP_FILTER_CONTEXT; - VariableName: PChar; Buffer: Pointer; var Size: LONGWORD ): BOOLEAN of Object; -// TFilterGetServerVariableProc = function (var pfc{: THTTP_FILTER_CONTEXT}; -// VariableName: PChar; Buffer: Pointer; var Size: DWORD ): BOOL of Object; - - TFilterAddResponseHeadersProc = function (var pfc{: THTTP_FILTER_CONTEXT}; - lpszHeaders: PChar; dwReserved: Longword): BOOLEAN stdcall; - - TFilterWriteClientProc = function (var pfc{: THTTP_FILTER_CONTEXT}; - Buffer: Pointer; var Bytes: Longword; dwReserved: Longword ): BOOLEAN stdcall; - - TFilterAllocMemProc = function (var pfc{: THTTP_FILTER_CONTEXT}; cbSize: Longword; - dwReserved: Longword): Pointer stdcall; - - TFilterServerSupportFunctionProc = function (var pfc{: THTTP_FILTER_CONTEXT}; - sfReq: Longword; pData: Pointer; ul1, ul2: Longword): BOOLEAN stdcall; - - THTTP_FILTER_CONTEXT = record - cbSize: LONGWORD; - - // - // This is the structure revision level. - // - - Revision: LONGWORD; - - // - // Private context information for the server. - // - - ServerContext: Pointer; - ulReserved: LONGWORD; - - // - // TRUE if this request is coming over a secure port - // - - fIsSecurePort: BOOLEAN; - - // - // A context that can be used by the filter - // - - pFilterContext: Pointer; - - // - // Server callbacks - // - - GetServerVariable: TFilterGetServerVariableProc; - AddResponseHeaders: TFilterAddResponseHeadersProc; - WriteClient: TFilterWriteClientProc; - AllocMem: TFilterAllocMemProc; - ServerSupportFunction: TFilterServerSupportFunctionProc; - end; - - PHTTP_FILTER_RAW_DATA = ^THTTP_FILTER_RAW_DATA; - THTTP_FILTER_RAW_DATA = record - // - // This is a pointer to the data for the filter to process. - // - pvInData: Pointer; - cbInData: LONGWORD; // Number of valid data bytes - cbInBuffer: LONGWORD; // Total size of buffer - dwReserved: LONGWORD; - end; - - // - // This structure is the notification info for when the server is about to - // process the client headers - // - - TGetHeaderProc = function (var pfc: THTTP_FILTER_CONTEXT; lpszName: PChar; - var lpvBuffer; var lpdwSize: Longword): BOOLEAN stdcall; - - TSetHeaderProc = function (var pfc: THTTP_FILTER_CONTEXT; lpszName, - lpszValue: PChar): BOOLEAN stdcall; - - TAddHeaderProc = function (var pfc: THTTP_FILTER_CONTEXT; lpszName, - lpszValue: PChar): BOOLEAN stdcall; - - - PHTTP_FILTER_SEND_RESPONSE = ^THTTP_FILTER_SEND_RESPONSE; - THTTP_FILTER_SEND_RESPONSE = record - AddHeader:TAddHeaderProc; - SetHeader:TSetHeaderProc; - GetHeader:TGetHeaderProc; - HttpStatus:LONGWORD; - dwReserved:LONGWORD; - End; - - - PHTTP_FILTER_PREPROC_HEADERS = ^THTTP_FILTER_PREPROC_HEADERS; - THTTP_FILTER_PREPROC_HEADERS = record - // - // Retrieves the specified header value. Header names should include - // the trailing ':'. The special values 'method', 'url' and 'version' - // can be used to retrieve the individual portions of the request line - // - - GetHeader: TGetHeaderProc; - - // - // Replaces this header value to the specified value. To delete a header, - // specified a value of '\0'. - // - - SetHeader: TSetHeaderProc; - - // - // Adds the specified header and value - // - - AddHeader: TAddHeaderProc; - - HttpStatus: LONGWORD; - - dwReserved: LONGWORD; - end; - - - // - // Authentication information for this request. - // - - PHTTP_FILTER_AUTHENT = ^THTTP_FILTER_AUTHENT; - THTTP_FILTER_AUTHENT = record - // - // Pointer to username and password, empty strings for the anonymous user - // - // Client's can overwrite these buffers which are guaranteed to be at - // least SF_MAX_USERNAME and SF_MAX_PASSWORD bytes large. - // - - pszUser: PChar; - cbUserBuff: LONGWORD; - - pszPassword: PChar; - cbPasswordBuff: LONGWORD; - end; - - // - // Indicates the server is going to use the specific physical mapping for - // the specified URL. Filters can modify the physical path in place. - // - - PHTTP_FILTER_URL_MAP = ^THTTP_FILTER_URL_MAP; - THTTP_FILTER_URL_MAP = record - pszURL: PChar; - pszPhysicalPath: PChar; - cbPathBuff: LONGWORD; - end; - - PHTTP_FILTER_ACCESS_DENIED = ^THTTP_FILTER_ACCESS_DENIED; - THTTP_FILTER_ACCESS_DENIED = record - pszURL: PChar; // Requesting URL - pszPhysicalPath: PChar; // Physical path of resource - dwReason: LONGWORD; // Bitfield of SF_DENIED flags - end; - - // - // The log information about to be written to the server log file. The - // string pointers can be replaced but the memory must remain valid until - // the next notification - // - - PHTTP_FILTER_LOG = ^THTTP_FILTER_LOG; - THTTP_FILTER_LOG = record - pszClientHostName: PChar; - pszClientUserName: PChar; - pszServerName: PChar; - pszOperation: PChar; - pszTarget: PChar; - pszParameters: PChar; - dwHttpStatus: LONGWORD; - dwWin32Status: LONGWORD; - dwBytesSent:LONGWORD; - dwBytesRecvd:LONGWORD; - msTimeForProcessing:LONGWORD; - end; - - // - // Filter version information, passed to GetFilterVersion - // - PHTTP_FILTER_VERSION = ^THTTP_FILTER_VERSION; - THTTP_FILTER_VERSION = record - // - // Version of the spec the server is using - // - - dwServerFilterVersion: LONGWORD; - - // - // Fields specified by the client - // - dwFilterVersion: LONGWORD; - lpszFilterDesc: array[0..SF_MAX_FILTER_DESC_LEN - 1] of Char; - dwFlags: LONGWORD; - end; - - - THttpFilterProc = function (var pfc: THTTP_FILTER_CONTEXT; - Notificationtype: LONGWORD; pvNotification: Pointer): LONGWORD stdcall; - - TGetFilterVersion = function (var pVer: THTTP_FILTER_VERSION): BOOLEAN stdcall; - - TTerminateFilter = function(flags:LONGWORD): BOOLEAN stdcall; - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSecurity.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSecurity.pas deleted file mode 100644 index 29deb31..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSecurity.pas +++ /dev/null @@ -1,306 +0,0 @@ -unit uRODXSecurity; - -/////////////////////////////////////////////////////////////////////////////// -// Unit: DXSecurity -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -// Content all certificates and security structures and types. -/////////////////////////////////////////////////////////////////////////////// - -interface - -{$IFDEF VER100} -Uses - Windows; - -Type - LongWord=DWord; -{$ENDIF} - -Const - //Encoding/decoding algoritms - X509_ASN_ENCODING = 1; - PKCS_7_ASN_ENCODING = 2; - - //certificat vervion - CERT_V1=1; - CERT_V2=2; - CERT_V3=3; - - //OID of algorithm - szOID_RSA='1.2.840.113549'; - szOID_PKCS='1.2.840.113549.1'; - szOID_RSA_HASH='1.2.840.113549.2'; - szOID_RSA_ENCRYPT='1.2.840.113549.3'; - szOID_PKCS_1='1.2.840.113549.1.1'; - szOID_PKCS_2='1.2.840.113549.1.2'; - szOID_PKCS_3='1.2.840.113549.1.3'; - szOID_PKCS_4='1.2.840.113549.1.4'; - szOID_PKCS_5='1.2.840.113549.1.5'; - szOID_PKCS_6='1.2.840.113549.1.6'; - szOID_PKCS_7='1.2.840.113549.1.7'; - szOID_PKCS_8='1.2.840.113549.1.8'; - szOID_PKCS_9='1.2.840.113549.1.9'; - szOID_PKCS_10='1.2.840.113549.1.10'; - szOID_PKCS_12='1.2.840.113549.1.12'; - szOID_RSA_MD2='1.2.840.113549.1.1.2'; - szOID_RSA_MD4='1.2.840.113549.1.1.3'; - szOID_RSA_MD5='1.2.840.113549.1.1.4'; - szOID_RSA_RSA='1.2.840.113549.1.1.1'; - szOID_RSA_MD2RSA='1.2.840.113549.1.1.2'; - szOID_RSA_MD4RSA='1.2.840.113549.1.1.3'; - szOID_RSA_MD5RSA='1.2.840.113549.1.1.4'; - szOID_RSA_SHA1RSA='1.2.840.113549.1.1.5'; - szOID_RSA_SETOAEP_RSA='1.2.840.113549.1.1.5'; - szOID_RSA_DH='1.2.840.113549.1.3.1'; - szOID_RSA_data='1.2.840.113549.1.7.1'; - szOID_RSA_signedData='1.2.840.113549.1.7.2'; - szOID_RSA_envelopedData='1.2.840.113549.1.7.3'; - szOID_RSA_signEnvData='1.2.840.113549.1.7.4'; - szOID_RSA_digestedData='1.2.840.113549.1.7.5'; - szOID_RSA_hashedData='1.2.840.113549.1.7.5'; - szOID_RSA_encryptedData='1.2.840.113549.1.7.6'; - szOID_RSA_emailAddr='1.2.840.113549.1.9.1'; - szOID_RSA_unstructName='1.2.840.113549.1.9.2'; - szOID_RSA_contentType='1.2.840.113549.1.9.3'; - szOID_RSA_messageDigest='1.2.840.113549.1.9.4'; - szOID_RSA_signingTime='1.2.840.113549.1.9.5'; - szOID_RSA_counterSign='1.2.840.113549.1.9.6'; - szOID_RSA_challengePwd='1.2.840.113549.1.9.7'; - szOID_RSA_unstructAddr='1.2.840.113549.1.9.8'; - szOID_RSA_extCertAttrs='1.2.840.113549.1.9.9'; - szOID_RSA_SMIMECapabilities='1.2.840.113549.1.9.15'; - szOID_RSA_preferSignedData='1.2.840.113549.1.9.15.1'; - szOID_RSA_RC2CBC='1.2.840.113549.3.2'; - szOID_RSA_RC4='1.2.840.113549.3.4'; - szOID_RSA_DES_EDE3_CBC='1.2.840.113549.3.7'; - szOID_RSA_RC5_CBCPad='1.2.840.113549.3.9'; - szOID_ANSI_x942='1.2.840.10046'; - szOID_ANSI_x942_DH='1.2.840.10046.2.1'; - szOID_X957='1.2.840.10040'; - szOID_X957_DSA='1.2.840.10040.4.1'; - szOID_DATA_STRUCTURE='1.2.840.10040.4.3'; - szOId_DS='2.5'; - szOID_DSALG='2.5.8'; - szOID_DSALG_CRPT='2.5.8.1'; - szOID_DSALG_HASH='2.5.8.2'; - szOID_DSALG_SIGN='2.5.8.3'; - szOID_DSALG_RSA='2.5.8.1.1'; - szOID_OIW='1.3.14'; - szOID_OIWSEC='1.3.14.3.2'; - szOID_OIWSEC_md4RSA='1.3.14.3.2.2'; - szOID_OIWSEC_md5RSA='1.3.14.3.2.3'; - szOID_OIWSEC_md4RSA2='1.3.14.3.2.4'; - szOID_OIWSEC_desECB='1.3.14.3.2.6'; - szOID_OIWSEC_desCBC='1.3.14.3.2.7'; - szOID_OIWSEC_desOFB='1.3.14.3.2.8'; - szOID_OIWSEC_desCFB='1.3.14.3.2.9'; - szOID_OIWSEC_desMAC='1.3.14.3.2.10'; - szOID_OIWSEC_rsaSign='1.3.14.3.2.11'; - szOID_OIWSEC_dsa='1.3.14.3.2.12'; - szOID_OIWSEC_shaDSA='1.3.14.3.2.13'; - szOID_OIWSEC_mdc2RSA='1.3.14.3.2.14'; - szOID_OIWSEC_shaRSA='1.3.14.3.2.15'; - szOID_OIWSEC_dhCommMod='1.3.14.3.2.16'; - szOID_OIWSEC_desEDE='1.3.14.3.2.17'; - szOID_OIWSEC_sha='1.3.14.3.2.18'; - szOID_OIWSEC_mdc2='1.3.14.3.2.19'; - szOID_OIWSEC_dsaComm='1.3.14.3.2.20'; - szOID_OIWSEC_dsaCommSHA='1.3.14.3.2.21'; - szOID_OIWSEC_rsaXchg='1.3.14.3.2.22'; - szOID_OIWSEC_keyHashSeal='1.3.14.3.2.23'; - szOID_OIWSEC_md2RSASign='1.3.14.3.2.24'; - szOID_OIWSEC_md5RSASign='1.3.14.3.2.25'; - szOID_OIWSEC_sha1='1.3.14.3.2.26'; - szOID_OIWSEC_dsaSHA1='1.3.14.3.2.27'; - szOID_OIWSEC_dsaCommSHA1='1.3.14.3.2.28'; - szOID_OIWSEC_sha1RSASign='1.3.14.3.2.29'; - szOID_OIWDIR='1.3.14.7.2'; - szOID_OIWDIR_CRPT='1.3.14.7.2.1'; - szOID_OIWDIR_HASH='1.3.14.7.2.2'; - szOID_OIWDIR_SIGN='1.3.14.7.2.3'; - szOID_OIWDIR_md2='1.3.14.7.2.2.1'; - szOID_OIWDIR_md2RSA='1.3.14.7.2.3.1'; - szOID_INFOSEC='2.16.840.1.101.2.1'; - szOID_INFOSEC_sdnsSignature='2.16.840.1.101.2.1.1.1'; - szOID_INFOSEC_mosaicSignature='2.16.840.1.101.2.1.1.2'; - szOID_INFOSEC_sdnsConfidentiality='2.16.840.1.101.2.1.1.3'; - szOID_INFOSEC_mosaicConfidentiality='2.16.840.1.101.2.1.1.4'; - szOID_INFOSEC_sdnsIntegrity='2.16.840.1.101.2.1.1.5'; - szOID_INFOSEC_mosaicIntegrity='2.16.840.1.101.2.1.1.6'; - szOID_INFOSEC_sdnsTokenProtection='2.16.840.1.101.2.1.1.7'; - szOID_INFOSEC_mosaicTokenProtection='2.16.840.1.101.2.1.1.8'; - szOID_INFOSEC_sdnsKeyManagement='2.16.840.1.101.2.1.1.9'; - szOID_INFOSEC_mosaicKeyManagement='2.16.840.1.101.2.1.1.10'; - szOID_INFOSEC_sdnsKMandSig='2.16.840.1.101.2.1.1.11'; - szOID_INFOSEC_mosaicKMandSig='2.16.840.1.101.2.1.1.12'; - szOID_INFOSEC_SuiteASignature='2.16.840.1.101.2.1.1.13'; - szOID_INFOSEC_SuiteAConfidentiality='2.16.840.1.101.2.1.1.14'; - szOID_INFOSEC_SuiteAIntegrity='2.16.840.1.101.2.1.1.15'; - szOID_INFOSEC_SuiteATokenProtection='2.16.840.1.101.2.1.1.16'; - szOID_INFOSEC_SuiteAKeyManagement='2.16.840.1.101.2.1.1.17'; - szOID_INFOSEC_SuiteAKMandSig='2.16.840.1.101.2.1.1.18'; - szOID_INFOSEC_mosaicUpdatedSig='2.16.840.1.101.2.1.1.19'; - szOID_INFOSEC_mosaicKMandUpdSig='2.16.840.1.101.2.1.1.20'; - szOID_INFOSEC_mosaicUpdatedInteg='2.16.840.1.101.2.1.1.21'; - - //predefine algorithm types - X509_DSS_PARAMETERS = szOID_OIWSEC_dsa; - PKCS_RC2_CBC_PARAMETERS = szOID_RSA_RC2CBC; - X509_OCTET_STRING = szOID_OIWSEC_desCBC; -{ X509_OCTET_STRING = szOID_RSA_DES_EDE3_CBC; - X509_OCTET_STRING = szOID_RSA_RC4;} - -Type - HCERTSTORE = Cardinal; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CryptoAPI BLOB structure is used for an arbitrary array of bytes. -// It is declared in Wincrypt.h and provides -// flexibility for objects that can contain various data types. -/////////////////////////////////////////////////////////////////////////////// - TBLOB = record - cbData:LONGWORD; - pbData:^BYTE; - End; - - TCRYPT_INTEGER_BLOB=TBLOB; - PCRYPT_INTEGER_BLOB=^TBLOB; - TCRYPT_UINT_BLOB=TBLOB; - PCRYPT_UINT_BLOB=^TBLOB; - TCRYPT_OBJID_BLOB=TBLOB; - PCRYPT_OBJID_BLOB=^TBLOB; - TCERT_NAME_BLOB=TBLOB; - PCERT_NAME_BLOB=^TBLOB; - TCERT_RDN_VALUE_BLOB=TBLOB; - PCERT_RDN_VALUE_BLOB=^TBLOB; - TCERT_BLOB=TBLOB; - PCERT_BLOB=^TBLOB; - TCRL_BLOB=TBLOB; - PCRL_BLOB=^TBLOB; - TDATA_BLOB=TBLOB; - PDATA_BLOB=^TBLOB; - TCRYPT_DATA_BLOB=TBLOB; - PCRYPT_DATA_BLOB=^TBLOB; - TCRYPT_HASH_BLOB=TBLOB; - PCRYPT_HASH_BLOB=^TBLOB; - TCRYPT_DIGEST_BLOB=TBLOB; - PCRYPT_DIGEST_BLOB=^TBLOB; - TCRYPT_DER_BLOB=TBLOB; - PCRYPT_DER_BLOB=^TBLOB; - TCRYPT_ATTR_BLOB=TBLOB; - PCRYPT_ATTR_BLOB=^TBLOB; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CRYPT_BIT_BLOB structure contains an array of bytes. In a -// CRYPT_BIT_BLOB the last byte in the array can contain zero to seven -// unused bits. Therefore, the number of meaningful bits in the pbData -// member is cbData * 8 – cUnusedBits. -/////////////////////////////////////////////////////////////////////////////// - PCRYPT_BIT_BLOB=^TCRYPT_BIT_BLOB; - TCRYPT_BIT_BLOB = packed record - cbData:LONGWORD; - pbData:^BYTE; - cUnusedBits:LONGWORD; - End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CRYPT_ALGORITHM_IDENTIFIER structure specifies an algorithm. -// The structure includes the object identifier (OID) of the algorithm and -// any needed parameters for that algorithm. The parameters contained in -// its CRYPT_OBJID_BLOB are encoded. -/////////////////////////////////////////////////////////////////////////////// - PCRYPT_ALGORITHM_IDENTIFIER=^TCRYPT_ALGORITHM_IDENTIFIER; - TCRYPT_ALGORITHM_IDENTIFIER = packed record - pszObjId:String; - Parameters:TCRYPT_OBJID_BLOB; - End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CERT_PUBLIC_KEY_INFO structure contains a public key and its algorithm. -/////////////////////////////////////////////////////////////////////////////// - PCERT_PUBLIC_KEY_INFO=^TCERT_PUBLIC_KEY_INFO; - TCERT_PUBLIC_KEY_INFO = packed record - Algorithm:TCRYPT_ALGORITHM_IDENTIFIER; - PublicKey:TCRYPT_BIT_BLOB; - End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CERT_EXTENSION structure contains the extension information for a -// certificate, Certificate Revocation List (CRL) -// or Certificate Trust List (CTL). -/////////////////////////////////////////////////////////////////////////////// - PCERT_EXTENSION = ^TCERT_EXTENSION; - TCERT_EXTENSION = packed record - pszObjId:String; - fCritical:Boolean; - Value:TCRYPT_OBJID_BLOB; - End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CERT_INFO structure contains a certificate's information. -/////////////////////////////////////////////////////////////////////////////// - PCERT_INFO=^TCERT_INFO; - TCERT_INFO = packed record - dwVersion:LONGWORD; - SerialNumber:TCRYPT_INTEGER_BLOB; - SignatureAlgorithm:TCRYPT_ALGORITHM_IDENTIFIER; - Issuer:TCERT_NAME_BLOB; - NotBefore:TDATETIME; - NotAfter:TDATETIME; - Subject:TCERT_NAME_BLOB; - SubjectPublicKeyInfo:TCERT_PUBLIC_KEY_INFO; - IssuerUniqueId:TCRYPT_BIT_BLOB; - SubjectUniqueId:TCRYPT_BIT_BLOB; - cExtension:LONGWORD; - rgExtension:PCERT_EXTENSION; - End; - -/////////////////////////////////////////////////////////////////////////////// -// MSDN: -// The CERT_CONTEXT structure contains both the encoded and decoded -// representations of a certificate. A certificate context returned by one -// of the functions defined in Wincrypt.h must be freed by calling the -// CertFreeCertificateContext function. The CertDuplicateCertificateContext -// function can be called to make a duplicate copy (which also must be -// freed by calling CertFreeCertificateContext). -/////////////////////////////////////////////////////////////////////////////// - PCERT_CONTEXT=^TCERT_CONTEXT; - TCERT_CONTEXT = packed record - dwCertEncodingType:LONGWORD; - pbCertEncoded:^BYTE; - cbCertEncoded:LONGWORD; - pCertInfo:^PCERT_INFO; - hCertStore:HCERTSTORE; - End; - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXServerCore.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXServerCore.pas deleted file mode 100644 index add3605..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXServerCore.pas +++ /dev/null @@ -1,1130 +0,0 @@ -unit uRODXServerCore; - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXServerCore -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: Ancestor to all our Protocol Implementations. -// ======================================================================== -// Parent Thread Object and "Defacto" Server Object. -// The Server Object (DXServerCore) is the heart of all protocols. It is used -// to initiate winsock listening, and start the Parent Thread -// (DXServerCoreThread). The Parent Thread constantly checks if the listener -// has received a connection request, accepts the connection and spawns a -// (DXServerThread) Session. And continues checking for more connections. -/////////////////////////////////////////////////////////////////////////////// - -interface - -{$I uRODXSock.def} - -uses -{$IFDEF CODE_TRACER} - DXCodeTracer, -{$ENDIF} - uRODXSessionTracker, - uRODXSock, - uRODXString, - Classes; - -type - TWhichProtocol = - (wpUDPOnly, wpTCPOnly); - TServerType = - (stNonBlocking, stThreadBlocking); // so you can port Borland code to DXSOCK! - -//***************************************************************************** -// This thread is the spawned "Session" thread. Every connection detected by -// the "Listener" thread is created as a TDXServerThread, and then that new -// thread takes over communications with the new session. -//***************************************************************************** - TDXClientThread = class; - TDX_NewConnect = procedure(ClientThread: TDXClientThread) of object; - TDX_DestroySessionData = procedure(ClientThread: TDXClientThread; SessionData: Pointer) of object; - - TDXClientThread = class(TThread) - private -{$IFDEF CODE_TRACER} - CodeTracer:TDXCodeTracer; -{$ENDIF} - Client: TDXSock; - feNewConnect: TDX_NewConnect; - feDestroySessionData: TDX_DestroySessionData; - fBlockSizeFlags: TDXBlockSizeFlags; - ListenerThreadObject:TThread; - protected - procedure Execute; override; - function GetSessionID:Integer; // making move from INDY easier! - public - fpSessionData: Pointer; - constructor Create(CreateSuspended: Boolean); - destructor Destroy; override; - procedure SetSocketLater(Socket: TDXSock); - //published - property SessionID:Integer read GetSessionID; - property Socket: TDXSock read Client - write Client; - property OnNewConnect: TDX_Newconnect read feNewConnect - write feNewConnect; - property OnDestroySessionData: TDX_DestroySessionData read feDestroySessionData - write feDestroySessionData; -{$IFDEF CODE_TRACER} - property DXCodeTracer:TDXCodeTracer read CodeTracer - write CodeTracer; -{$ENDIF} - Property Terminated; - end; - -//***************************************************************************** -// All protocols use this thread to listen for incoming connections. This is -// the "Listener" thread. -//***************************************************************************** -type - TDX_ListenerFailed = procedure(ErrorCode: Integer) of object; - TDXServerCoreThread = class; - TDX_MaxConnects = procedure(ServerCoreThread: TDXServerCoreThread) of object; - TDX_Idle = procedure(ServerCoreThread: TDXServerCoreThread) of object; - TDX_Sleep = procedure(ServerCoreThread: TDXServerCoreThread) of object; - TDX_WakeUp = procedure(ServerCoreThread: TDXServerCoreThread) of object; -// 3.0c - TDX_UDPData = procedure(Data:Pointer;PeerIP:String;PeerPort,DataLen:Integer) of object; - - TDXServerCoreThread = class(TThread) - private -{$IFDEF CODE_TRACER} - CodeTracer:TDXCodeTracer; -{$ENDIF} - fbSuspend: Boolean; - fbBufferCreates: Boolean; - ListenerSocket: TDXSock; - fSessionTracker:TDXSessionTracker; - fsBindTo: string; - fiServerPort: Integer; - fiMaxConn: Integer; - fbAnnouncedIdle: Boolean; - feNewConnect: TDX_NewConnect; - feMaxConnects: TDX_MaxConnects; - feListenerFailed: TDX_ListenerFailed; - feIdle: TDX_Idle; - feSleep: TDX_Sleep; - feWakeUp: TDX_WakeUp; - feUDPData: TDX_UDPData; -{$IFNDEF LINUX} - fstPriority: TThreadPriority; -{$ENDIF} - fThreadPool: TList; - fWhichprotocol: TWhichProtocol; - FActiveConnections: Integer; - fBlockSizeFlags: TDXBlockSizeFlags; - protected - MyCriticalSection:TDXCritical; - procedure Execute; override; - procedure SetBufferCreates(value: Boolean); - procedure SetSuspend(value: Boolean); - function GetSocket: TDXSock; - public - constructor Create(CreateSuspended: Boolean); - destructor Destroy; override; - function ActiveNumberOfConnections: Integer; - //published - property MainSocket: TDXSock read GetSocket; -{$IFNDEF LINUX} - property SpawnedThreadPriority: TThreadPriority read fstPriority - write fstPriority; -{$ENDIF} - property BufferCreates: Boolean read fbBufferCreates - write SetBufferCreates; - property SuspendListener: Boolean read fbSuspend - write SetSuspend; - property BindTo: string read fsBindTo - write fsBindTo; - property ServerPort: Integer read fiServerPort - write fiServerPort; - property ThreadCacheSize: Integer read fiMaxConn - write fiMaxConn; - property OnNewConnect: TDX_NewConnect read feNewConnect - write feNewConnect; - property OnMaxConnects: TDX_MaxConnects read feMaxConnects - write feMaxConnects; - property OnGoingIdle: TDX_Idle read feIdle - write feIdle; - property OnAsleep: TDX_Sleep read feSleep - write feSleep; - property OnWakeUp: TDX_WakeUp read feWakeUp - write feWakeUp; - property OnListenerFailed: TDX_ListenerFailed read feListenerFailed - write feListenerFailed; - property OnUDPDataNoPool: TDX_UDPData read feUDPData - write feUDPData; - property ProtocolToBind: TWhichProtocol read fWhichprotocol - write fWhichprotocol; -{$IFDEF CODE_TRACER} - property DXCodeTracer:TDXCodeTracer read CodeTracer - write CodeTracer; -{$ENDIF} - end; - -//***************************************************************************** -// All protocols are descendants of this object/component. When making changes -// that need to flow to the actual protocol, like supporting a change to the -// spawned thread. You would make the "property" in this piece of code, and -// then when this piece of code creates the listener thread you can pass the -// information to the listener. At that point, you could pass it down to the -// protocol thread TDXServerThread. -//***************************************************************************** -type - TDXServerCore = class(TDXComponent) - private -{$IFDEF CODE_TRACER} - CodeTracer:TDXCodeTracer; -{$ENDIF} - fbSSL:Boolean; - fbActive: Boolean; - fbSuspend: Boolean; - fbBufferCreates: Boolean; - fsBindTo: string; - fiServerPort: Integer; - fiMaxConn: Integer; - feNewConnect: TDX_NewConnect; - feMaxConnects: TDX_MaxConnects; - feListenerFailed: TDX_ListenerFailed; - feIdle: TDX_Idle; - feSleep: TDX_Sleep; - feWakeUp: TDX_WakeUp; - feUDPData: TDX_UDPData; - ListenerThread: TDXServerCoreThread; -{$IFNDEF LINUX} - fltPriority: TThreadPriority; - fstPriority: TThreadPriority; -{$ENDIF} - fWhichprotocol: TWhichProtocol; - fBlockSizeFlags: TDXBlockSizeFlags; - fServerType: TServerType; - fDummy: string; - protected - procedure SetActive(value: boolean); - procedure SetSuspend(value: boolean); - function GetThreadCacheSize: Integer; - procedure SetThreadCacheSize(value: Integer); - function GetSocket: TDXSock; - procedure SetfiMaxConn(Value: Integer); - public - constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF} - destructor Destroy; override; - function ActiveNumberOfConnections: Integer; - procedure Start; virtual; - procedure Stop; virtual; - procedure Open; - procedure Close; - procedure Pause; - procedure Resume; - property Socket: TDXSock read GetSocket; - function InternalSessionTracker:TDXSessionTracker; -// property :TDXSessionTracker read GetSessionTracker; - published -{$IFNDEF LINUX} - property ListenerThreadPriority: TThreadPriority read fltPriority - write fltPriority; - property SpawnedThreadPriority: TThreadPriority read fstPriority - write fstPriority; -{$ENDIF} - property IsActive: Boolean read fbActive; - property Suspend: Boolean read fbSuspend - write SetSuspend; - property UseSSL: Boolean read fbSSL - write fbSSL; - property UseThreadPool: Boolean read fbBufferCreates - write fbBufferCreates; - property BindTo: string read fsBindTo - write fsBindTo; - property ServerPort: Integer read fiServerPort - write fiServerPort; - property OnNewConnect: TDX_NewConnect read feNewConnect - write feNewConnect; - property OnMaxConnects: TDX_MaxConnects read feMaxConnects - write feMaxConnects; - property OnGoingIdle: TDX_Idle read feIdle - write feIdle; - property OnAsleep: TDX_Sleep read feSleep - write feSleep; - property OnWakeUp: TDX_WakeUp read feWakeUp - write feWakeUp; - property OnListenerFailed: TDX_ListenerFailed read feListenerFailed - write feListenerFailed; - property ProtocolToBind: TWhichProtocol read fWhichprotocol - write fWhichprotocol; - property SocketOutputBufferSize: TDXBlockSizeFlags read fBlockSizeFlags - write fBlockSizeFlags; - property ServerType: TServerType read fServerType - write fServerType; - property Service: string read fDummy write fDummy; - property ThreadCacheSize: Integer read GetThreadCacheSize - write SetThreadCacheSize; - property OnUDPDataNoPool: TDX_UDPData read feUDPData - write feUDPData; -{$IFDEF CODE_TRACER} - property DXCodeTracer:TDXCodeTracer read CodeTracer - write CodeTracer; -{$ENDIF} - end; - -implementation - -uses -{$IFNDEF LINUX} - Windows, // InterlockedXX thanks to EYAL! -{$ENDIF} - SysUtils, - uRODXSocket; - -/////////////////////////////////////////////////////////////////////////////// -//CREATE: -// This section is created when the DXServerCore has accepted a valid -// socket connection from a client. -/////////////////////////////////////////////////////////////////////////////// - -constructor TDXClientThread.Create(CreateSuspended: Boolean); -begin - inherited Create(CreateSuspended); - FreeOnTerminate := True; - Client := nil; - fpSessionData := nil; -end; - -/////////////////////////////////////////////////////////////////////////////// -//DESTROY: -// Cleans-up this instance of the socket connection. Does not effect the -// "Listener" thread socket. -/////////////////////////////////////////////////////////////////////////////// - -destructor TDXClientThread.Destroy; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'ClientThread.Terminating'); - End; -{$ENDIF} -try - If Assigned(ListenerThreadObject) then - If Assigned(TDXServerCoreThread(ListenerThreadObject).fSessionTracker) then - TDXServerCoreThread(ListenerThreadObject).fSessionTracker.UnregisterSession(Self); -except - on E: Exception do begin -// E.Message; - end; -end; -try - if Assigned(fpSessionData) then - if assigned(feDestroySessionData) then - feDestroySessionData(Self, fpSessionData); -except - on E: Exception do begin -// E.Message; - end; -end; -try - if Assigned(Client) then begin - Client.Free; - Client := nil; - end; -except - on E: Exception do begin -// E.Message; - end; -end; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'ClientThread.Terminated!'); - End; -{$ENDIF} - inherited Destroy; -end; - -function TDXClientThread.GetSessionID:Integer; // making move from INDY easier! -Begin - Result:=ThreadID; -End; - -/////////////////////////////////////////////////////////////////////////////// -//EXECUTE: -// Once this thread has "Resume"d, execute is called by TThread. This will -// fire the OnExecute (where the server protocol processes the connection) -// and once that is finished it fires the OnDisconnet event. -/////////////////////////////////////////////////////////////////////////////// - -procedure TDXClientThread.Execute; -begin -try -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXClientThread.Execute Starting '+ - IntToStr(TDXServerCoreThread(ListenerThreadObject).FActiveConnections)); - End; -{$ENDIF} - while not Terminated do begin - if Assigned(Client) then begin - Client.OutputBufferSize := fBlockSizeFlags; - if Client.ValidSocket then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXClientThread.Execute ONNEWCONNECT '+ - IntToStr(TDXServerCoreThread(ListenerThreadObject).FActiveConnections)); - End; -{$ENDIF} -try - if Assigned(feNewConnect) then feNewConnect(Self); -finally -{$IFDEF LINUX} - TDXServerCoreThread(ListenerThreadObject).MyCriticalSection.StartingWrite; - Dec(TDXServerCoreThread(ListenerThreadObject).FActiveConnections); - TDXServerCoreThread(ListenerThreadObject).MyCriticalSection.FinishedWrite; -{$ELSE} - InterlockedDecrement(TDXServerCoreThread(ListenerThreadObject).FActiveConnections); -{$ENDIF} -end; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXClientThread.Execute ONNEWCONNECT-DONE '+ - IntToStr(TDXServerCoreThread(ListenerThreadObject).FActiveConnections)); - End; -{$ENDIF} - end; - end - Else Begin - FreeOnTerminate:=True; - Break; - End; - // incase user destoryed my DXSock client object, test client. - if Assigned(Client) then begin -try - if Client.IsUDPMode then Client.Sock := INVALID_SOCKET - else If Client.Sock<>INVALID_SOCKET then Client.CloseGracefully; -except -try - Client.Free; -finally - Client:=Nil; -end; -end; - end; - If FreeOnTerminate then Break; - if not Terminated then Suspend; - if Terminated {and Assigned(Client)} then FreeOnTerminate:=True; - end; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXClientThread.Execute Exiting.'+ - IntToStr(TDXServerCoreThread(ListenerThreadObject).FActiveConnections)); - End; -{$ENDIF} -finally - Terminate; -end; -end; - -/////////////////////////////////////////////////////////////////////////////// -//SETSOCKETLATER: -// Simple implementation of this "Thread" is to pass the Create the -// recently "Accept"ed Socket during the create. But, if you are -// producing speed by pre-creating the threads, this procedure will -// allow you to pre-create threads, and pass the "Socket" when the -// new accept is valid. -/////////////////////////////////////////////////////////////////////////////// - -procedure TDXClientThread.SetSocketLater(Socket: TDXSock); -begin - if Assigned(Client) then begin - Client.Free; - Client := nil; - end; - Client := Socket; - Client.PeerIPAddress := Socket.PeerIPAddress; - Client.PeerPort := Socket.PeerPort; -end; - -/////////////////////////////////////////////////////////////////////////////// -// 'LISTENER' THREAD -// ================= -/////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////// -//CREATE: -// This is the "Outter" Thread of a server. It does the listening loop, and -// creates the thread that interacts with the client. Think of this as a -// while active listen for a connection, and on connection spawn a thread -// for the client connection (DXServerThread). -/////////////////////////////////////////////////////////////////////////////// - -constructor TDXServerCoreThread.Create(CreateSuspended: Boolean); -begin - inherited Create(CreateSuspended); - FreeOnTerminate := False; - ListenerSocket := TDXSock.Create; - fsBindTo := ''; - fiServerPort := 0; - fiMaxConn := 200; - FActiveConnections := 0; - fbAnnouncedIdle := False; - fbBufferCreates := True; - fThreadPool := TList.Create; - MyCriticalSection:=TDXCritical.Create; - fSessionTracker:=TDXSessionTracker.Create(Nil); -end; - -/////////////////////////////////////////////////////////////////////////////// -//DESTROY: -// Kills the Listener Socket. -/////////////////////////////////////////////////////////////////////////////// - -destructor TDXServerCoreThread.Destroy; -begin - if Assigned(fThreadPool) then begin - MyCriticalSection.StartingWrite; - while fThreadPool.Count > 0 do begin - if Assigned(fThreadPool[0]) then Begin -try - TDXClientThread(fThreadPool[0]).ListenerThreadObject:=Nil; - fSessionTracker.UnRegisterSession(TDXClientThread(fThreadPool[0])); -Finally -try -// this will raise an exception if it is already set "FreeOnTerminate"! - TDXClientThread(fThreadPool[0]).FreeOnTerminate:=True; - TDXClientThread(fThreadPool[0]).Terminate; -except -end; -end; - End; - fThreadPool.Delete(0); - end; - fThreadPool.Free; - fThreadPool := nil; - MyCriticalSection.FinishedWrite; - end; - fSessionTracker.Free; - fSessionTracker:=Nil; -try - if Assigned(ListenerSocket) then ListenerSocket.Free; -finally - ListenerSocket:=Nil; -end; - MyCriticalSection.Free; - inherited Destroy; -end; - -function TDXServerCoreThread.ActiveNumberOfConnections: Integer; -begin -// 7-27 MyCriticalSection.StartingRead; - Result := fActiveConnections; -// 7-27 MyCriticalSection.FinishedRead; -end; - -/////////////////////////////////////////////////////////////////////////////// -//SETBUFFERCREATES: -// To be safe, you should not change the Buffer Creates if you -// have already started listening. I try to make sure nothing gets -// messed up, but potentially you could crash yourself! -/////////////////////////////////////////////////////////////////////////////// - -procedure TDXServerCoreThread.SetBufferCreates(value: Boolean); -begin - if fActiveConnections > 0 then Exit; - fbBufferCreates := Value; - if not Value then - if fiMaxConn < 1 then fiMaxConn := 100; -end; - -procedure TDXServerCoreThread.SetSuspend(value: Boolean); -begin - fbSuspend := Value; -end; - -function TDXServerCoreThread.GetSocket: TDXSock; -begin - Result := ListenerSocket; -end; - -/////////////////////////////////////////////////////////////////////////////// -//EXECUTE: -// This is the "Loop" for the server. It listens on the specified port and -// IP address(es). As a connection comes in, it creates a DXServerThread -// and gives it a new instance of the client socket. At that point the new -// DXServerThread runs independant of this thread. If you wish to have a -// pool of DXServerThreads suspended this is the section to change! When -// a new DXServerThread is created, all of the "Events" are passed to it, -// which means you "Server" events better be threadsafe! -// -// Events: OnIdle is fired one the server has stopped receiving connection -// requests. It is fired everytime the server goes idle from connection(s) -// OnSleep is fired every two seconds after this loop has gone Idle. -/////////////////////////////////////////////////////////////////////////////// - -procedure TDXServerCoreThread.Execute; -var - toggleSleep: Integer; - DXClientThread: TDXClientThread; - newClient: TDXSock; - - function InitializeThreading(UDP: Boolean): Boolean; - var - NewListen: PNewListen; - Ws:String; - - begin - toggleSleep := 0; - Result := False; - if (Length(fsBindTo) > 7) then ListenerSocket.BindTo := fsBindTo; - New(NewListen); - with NewListen^ do begin - Port := fiServerPort; - UseNAGLE := True; - UseBlocking := True; - UseUDP := UDP; - WinsockQueue := 100; - ConnectionLess := UDP; // 2.0.12 - end; - if not ListenerSocket.Listen(NewListen) then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'Listener Initialization Error: '+ - ListenerSocket.GetErrorDesc(ListenerSocket.LastCommandStatus)); - End; -{$ENDIF} - if Assigned(feListenerFailed) then begin - feListenerFailed(ListenerSocket.LastCommandStatus); - end - else begin - Str(fiServerPort,Ws); -{$IFNDEF LINUX} - If IsConsole then Begin - Beep; - Beep; - Beep; - Writeln('Listener on port ' +Ws+', '+ - ListenerSocket.GetErrorDesc(ListenerSocket.LastCommandStatus)); - DoSleepEx(1000); - End - Else -{$ENDIF} - ShowMessageWindow('Listener on port ' +Ws, - ListenerSocket.GetErrorDesc(ListenerSocket.LastCommandStatus)); - end; - Dispose(NewListen); - Exit; - end; - Dispose(NewListen); - Result := True; - end; - - procedure EventsOrSleep; - begin -// 3.0b DoSleepEx(1); - if toggleSleep < 2000 then begin - Inc(toggleSleep); - if (toggleSleep>1000) and not fbAnnouncedIdle then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.GoingIdle'); - End; -{$ENDIF} - fbAnnouncedIdle := True; - if assigned(feIdle) then feIdle(Self); - ProcessWindowsMessageQueue; // have to do incase event was GUI based. - end; - end - else begin - if fbAnnouncedIdle then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.GoingAsleep'); - End; -{$ENDIF} - if assigned(feSleep) then feSleep(Self); - ProcessWindowsMessageQueue; // have to do - incase event was GUI based. - fbAnnouncedIdle := False; - end; - if toggleSleep < 5000 {3.0 - was 50} then Inc(toggleSleep) - else begin - DoSleepEx(1); // 7-27 - ProcessWindowsMessageQueue; - end; - end; - end; - -procedure ThreadAtATime; -begin - DXClientThread := TDXClientThread.Create(True); - DXClientThread.Client:=TDXSock.Create; // 3.0d -{$IFNDEF LINUX} - DXClientThread.Priority := fstPriority; -{$ENDIF} - DXClientThread.OnNewConnect := feNewConnect; - DXClientThread.fBlockSizeFlags := fBlockSizeFlags; - DXClientThread.ListenerThreadObject:=Self; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.Execute.ThreadAtATime Ready'); - End; -{$ENDIF} - While not Terminated do Begin - if (FActiveConnections < fiMaxConn) then begin - if fbSuspend then DoSleepEx(20) - else - if ListenerSocket.Accept(DXClientThread.Client) then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - DXClientThread.CodeTracer:=CodeTracer; - End; -{$ENDIF} - fSessionTracker.RegisterSession(DXClientThread); - DXClientThread.Resume; -{$IFDEF LINUX} - MyCriticalSection.StartingWrite; - Inc(FActiveConnections); - MyCriticalSection.FinishedWrite; -{$ELSE} - InterlockedIncrement(FActiveConnections); -{$ENDIF} - if (fbAnnouncedIdle) then Begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.WakeUp'); - End; -{$ENDIF} - If Assigned(feWakeUp) then feWakeUp(Self); - End; - DXClientThread := TDXClientThread.Create(True); - DXClientThread.Client:=TDXSock.Create; // 3.0d -{$IFNDEF LINUX} - DXClientThread.Priority := fstPriority; -{$ENDIF} - DXClientThread.OnNewConnect := feNewConnect; - DXClientThread.fBlockSizeFlags := fBlockSizeFlags; - DXClientThread.ListenerThreadObject:=Self; - fbAnnouncedIdle := False; - toggleSleep := 0; - end - else EventsOrSleep; - end - else - begin - if assigned(feMaxConnects) then Begin - feMaxConnects(Self); - ProcessWindowsMessageQueue; // have to do incase event was GUI based. - End - else - DoSleepEx(1); //3.0 - end; - - End; - fSessionTracker.UnRegisterSession(DXClientThread); - DXClientThread.FreeOnTerminate:=True; - DXClientThread.Terminate; -end; - -procedure ThreadPool; -var - NextThread: Integer; - LoopCount: Integer; - Done:Boolean; - -begin - while fThreadPool.Count < fiMaxConn - 1 do begin - DXClientThread := TDXClientThread.Create(True); - DXClientThread.FreeOnTerminate:=False; // flags "Is ThreadPool". -{$IFNDEF LINUX} - DXClientThread.Priority:=fstPriority; -{$ENDIF} - DXClientThread.OnNewConnect:=feNewConnect; - DXClientThread.fBlockSizeFlags:=fBlockSizeFlags; - DXClientThread.ListenerThreadObject:=Self; - DXClientThread.Client:=Nil; - fThreadPool.Add(DXClientThread); - fSessionTracker.RegisterSession(DXClientThread); - end; - LoopCount := fThreadPool.Count; - NextThread := 0; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.Execute.ThreadPool Ready'); - End; -{$ENDIF} - While not Terminated do Begin - if fbSuspend then DoSleepEx(20) - else if ListenerSocket.Accept(TDXClientThread(fThreadPool[NextThread]).Client) then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - DXClientThread.CodeTracer:=CodeTracer; - End; -{$ENDIF} - TDXClientThread(fThreadPool[NextThread]).Resume; -{$IFDEF LINUX} - MyCriticalSection.StartingWrite; - Inc(FActiveConnections); - MyCriticalSection.FinishedWrite; -{$ELSE} - InterlockedIncrement(FActiveConnections); -{$ENDIF} - Inc(NextThread); - if NextThread >= LoopCount then NextThread := 0; - Done:=False; - while (not Terminated) and (not fbSuspend) and (not done) do begin - If TDXClientThread(fThreadPool[NextThread]).Client=Nil then Done:=True - Else If Not TDXClientThread(fThreadPool[NextThread]).Client.ValidSocket then Done:=True - Else Begin - Inc(NextThread); - if NextThread >= LoopCount then NextThread := 0; - End; - end; - toggleSleep := 0; - if (fbAnnouncedIdle) then Begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.WakeUp'); - End; -{$ENDIF} - If Assigned(feWakeUp) then feWakeUp(Self); - End; - fbAnnouncedIdle := False; - end - else EventsOrSleep; - End; -end; - -{$WARNINGS OFF} -procedure UDPSingleThreaded; -Var - Data:Pointer; - DataSize:Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.Execute.UDPSingleThread Ready'); - End; -{$ENDIF} - if Assigned(feUDPData) then Data:=SysGetMem(TDXMaxSocketBuffer); - While not Terminated do Begin - if (FActiveConnections < fiMaxConn) then begin - if fbSuspend then DoSleepEx(20) - else if ListenerSocket.Readable then begin - if Assigned(feUDPData) then Begin -{$IFDEF VER100} - DataSize:=ListenerSocket.BlockRead(Data,TDXMaxSocketBuffer); -{$ELSE} - DataSize:=ListenerSocket.Read(Data,TDXMaxSocketBuffer); -{$ENDIF} - feUDPData(Data,inet_ntoa(ListenerSocket.SockAddr.sin_addr), - ntohs(ListenerSocket.SockAddr.sin_port),DataSize); - End - Else Begin - newClient := TDXSock.Create; - newClient.Sock := ListenerSocket.Sock; - newClient.IsUDPMode := True; - DXClientThread := TDXClientThread.Create(True); - DXClientThread.SetSocketLater(newClient); -{$IFNDEF LINUX} - DXClientThread.Priority := fstPriority; -{$ENDIF} - DXClientThread.OnNewConnect := feNewConnect; - DXClientThread.fBlockSizeFlags := fBlockSizeFlags; - DXClientThread.ListenerThreadObject:=Self; - fSessionTracker.RegisterSession(DXClientThread); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - DXClientThread.CodeTracer:=CodeTracer; - End; -{$ENDIF} - DXClientThread.Resume; - End; - // DoSleepEx(1); { a must - tests show this cleans up the reads tremendously!} - if (fbAnnouncedIdle) then Begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.WakeUp'); - End; -{$ENDIF} - If Assigned(feWakeUp) then feWakeUp(Self); - End; - toggleSleep:=0; - fbAnnouncedIdle:=False; - end - else - EventsOrSleep; - end - else begin - if assigned(feMaxConnects) then Begin - feMaxConnects(Self); - ProcessWindowsMessageQueue; // have to do incase event was GUI based. - end - else - begin - DoSleepEx(1); - end; - end; - End; - if Assigned(feUDPData) then SysFreeMem(Data); -end; -{$WARNINGS ON} - -begin - If terminated then exit; - if not Assigned(ListenerSocket) then begin - ShowMessageWindow( - 'Developer Trap #2', - 'You must pass the listerner socket. You have coded around ' + - 'our fail-safe routines!'); - Exit; - end; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXServerCoreThread.Execute'); - End; -{$ENDIF} -try - if not InitializeThreading({False}fWhichprotocol=wpUDPOnly) then Exit; - if fWhichprotocol=wpUDPOnly then UDPSinglethreaded - else begin - case fbBufferCreates of - False: begin - ThreadAtATime; - end; - else begin - ThreadPool; - end; - end; - end; -finally -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'TDXClientThread.Execute Terminating'); - End; -{$ENDIF} - FreeOnTerminate:=False; - Terminate; -end; -end; - -/////////////////////////////////////////////////////////////////////////////// -// ANCESTOR TO ALL PROTOCOLS -// ========================= -// DXSERVERCORE - Mainly Allows for "Properties" to be defined. And to Start, -// Stop, and Suspend the 'LISTNER' Thread. -/////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////// -//CREATE: -// Protocols use this object to interact with the DXSock environment. This -// Section allows the protocol to specify the status of the server. -/////////////////////////////////////////////////////////////////////////////// -constructor TDXServerCore.Create(AOwner: TComponent); -begin - inherited create(aowner); - fbActive:=False; - fiMaxConn:=200; - fbBufferCreates:=True; -{$IFNDEF LINUX} - fstPriority:=tpNormal; - fltPriority:=tpNormal; -{$ENDIF} - fWhichProtocol:=wpTCPOnly; - fBlockSizeFlags:=bsfHuge; - fServerType:=stThreadBlocking; -end; - -/////////////////////////////////////////////////////////////////////////////// -//DESTROY: -// If the cleans up any pending threads. -/////////////////////////////////////////////////////////////////////////////// - -destructor TDXServerCore.Destroy; -begin - if fbActive then SetActive(False); - inherited destroy; -end; - -function TDXServerCore.GetSocket: TDXSock; -begin - if Assigned(ListenerThread) then - Result := ListenerThread.ListenerSocket - else Result := nil; -end; - -function TDXServerCore.ActiveNumberOfConnections: Integer; -begin - if Assigned(ListenerThread) then Result := ListenerThread.ActiveNumberOfConnections - else Result := 0; -end; - -procedure TDXServerCore.SetActive(value: boolean); -begin -{$IFNDEF OBJECTS_ONLY} - if (csDesigning in ComponentState) then exit; -{$ENDIF} - fbSuspend := False; - - if Value <> fbActive then begin - if Value then begin - if not Assigned(feNewConnect) then begin - if Not Assigned(feUDPData) then Begin - ShowMessageWindow( - 'Developer Trap #1!', - 'You must specify a OnNewConnect Event!'); - Exit; - End; - end; - fbActive:=Value; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.StartTransaction; - CodeTracer.SendMessage(dxctDebug,'TDXSServerCore.Active=True'); - CodeTracer.SendObject(dxctDebug,Self); - End; -{$ENDIF} - fbSuspend := False; - ListenerThread := TDXServerCoreThread.Create(True); - ListenerThread.fsBindTo := fsBindTo; - ListenerThread.fiServerPort := fiServerPort; - ListenerThread.fiMaxConn := fiMaxConn; - ListenerThread.feNewConnect := feNewConnect; - ListenerThread.feMaxConnects := feMaxConnects; - ListenerThread.feListenerFailed := feListenerFailed; - ListenerThread.feIdle := feIdle; - ListenerThread.feSleep := feSleep; - ListenerThread.feWakeUp := feWakeUp; -{$IFNDEF LINUX} - ListenerThread.Priority := fltPriority; - ListenerThread.SpawnedThreadPriority := fstPriority; -{$ENDIF} - ListenerThread.fBlockSizeFlags := fBlockSizeFlags; - ListenerThread.fbSuspend := False; - ListenerThread.feUDPData:=feUDPData; // 3.0c -{$IFNDEF FPC} - If DebugHOOK<>0 then ListenerThread.fbBufferCreates:=False - Else -{$ENDIF} - ListenerThread.fbBufferCreates := fbBufferCreates; - -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - ListenerThread.CodeTracer:=CodeTracer; - End; -{$ENDIF} - - ListenerThread.fWhichProtocol := fWhichProtocol; - ListenerThread.Resume; - end - else begin - fbActive:=Value; - if Assigned(ListenerThread) then begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctInfo,'DXServerCore.ListenerThread still existed - terminating'); - End; -{$ENDIF} - If ListenerThread.Suspended then ListenerThread.Resume; - ListenerThread.FreeOnTerminate:=True; - ListenerThread.Terminate; -// 9/11/2002 -// ListenerThread.WaitFor; -// ListenerThread.Free; - end; -// 9/11/2002 -// ListenerThread:=Nil; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendObject(dxctDebug,Self); - CodeTracer.SendMessage(dxctDebug,'TDXSServerCore.Active=False'); - CodeTracer.EndTransaction; - End; -{$ENDIF} - end; - end; -end; - -procedure TDXServerCore.Start; -begin - SetActive(True); -end; - -procedure TDXServerCore.Stop; -begin - SetActive(False); -end; - -procedure TDXServerCore.Open; -begin - Start; -end; - -procedure TDXServerCore.Close; -begin - Stop; -end; - -procedure TDXServerCore.Pause; -begin - SetSuspend(True); -End; - -procedure TDXServerCore.Resume; -begin - SetSuspend(False); -End; - -procedure TDXServerCore.SetSuspend(value: boolean); -begin - if fbActive then begin - fbSuspend := Value; - ListenerThread.SuspendListener := Value; - end; -end; - -procedure TDXServerCore.SetfiMaxConn(Value: Integer); -begin - if Value < 1 then begin -{$IFNDEF FPC} - if DebugHOOK <> 0 then Exit; {cant enable this from within DELPHI live!} -{$ENDIF} - fiMaxConn := -1; - fbBufferCreates := True; - end - else fiMaxConn := Value; -end; - -function TDXServerCore.GetThreadCacheSize: Integer; -begin - Result := fiMaxConn; -end; - -procedure TDXServerCore.SetThreadCacheSize(value: Integer); -begin - SetfiMaxConn(Value); -end; - -function TDXServerCore.InternalSessionTracker:TDXSessionTracker; -Begin - if Assigned(ListenerThread) then Result:=ListenerThread.fSessionTracker - Else Result:=Nil; -End; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSessionTracker.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSessionTracker.pas deleted file mode 100644 index 36acff5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSessionTracker.pas +++ /dev/null @@ -1,134 +0,0 @@ -unit uRODXSessionTracker; - -interface - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXSessionTracker -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// -{$I uRODXSock.def} -uses - uRODXString, - Classes; - -{$DEFINE BYPASS} - -type - TDXSessionTracker = class(TDXComponent) - private - fSessionArray:TList; - protected - public - constructor Create(AOwner:TComponent); override; - destructor Destroy; override; - Procedure RegisterSession(ClientThread:TThread); - Procedure UnregisterSession(ClientThread:TThread); - Procedure CloseAllSessions; - Procedure ClearAllSessions; - published - end; - -implementation - -Uses - uRODXServerCore; - -constructor TDXSessionTracker.Create(AOwner:TComponent); -begin - inherited; - fSessionArray:=TList.Create; -end; - -destructor TDXSessionTracker.Destroy; -begin - CloseAllSessions; - ClearAllSessions; - inherited Destroy; -end; - -Procedure TDXSessionTracker.RegisterSession(ClientThread:TThread); -Begin -{$IFNDEF BYPASS} - MyCriticalSection.StartingWrite; - fSessionArray.Add(TDXClientThread(ClientThread)); - MyCriticalSection.FinishedWrite; -{$ENDIF} -End; - -Procedure TDXSessionTracker.UnregisterSession(ClientThread:TThread); -//Var - //Loop:Integer; - //LookingFor:Cardinal; - -Begin -{$IFNDEF BYPASS} - LookingFor:=TDXClientThread(ClientThread).ThreadID; - MyCriticalSection.StartingRead; - Loop:=0; - While Loop0 do Begin - fSessionArray.Delete(0); - End; - End; - MyCriticalSection.FinishedWrite; -{$ENDIF} -End; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.def b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.def deleted file mode 100644 index e9e212a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.def +++ /dev/null @@ -1,64 +0,0 @@ -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} - -// ONLY ENABLE THIS - IF YOU LICENSED OUR TLS-EDITION OF DXSOCK -// IT IS NOT FREE - IT IS NOT INCLUDED WITH WWS - IT'S AS A LEGAL ISSUE! -// -{.$DEFINE TLS_EDITION} - -// ONLY ENABLE THIS - IF YOU LICENSED OUR CODE TRACER SUITE -{.$DEFINE CODE_TRACER} - -// custom feature for SMTP Sender -> SMTP Relay -> track session ID -{$DEFINE SMTP_SESSION_FEATURE} - -// THESE CAN BE CHANGED BY YOU: -{.$DEFINE FINALBUILD} -{.$DEFINE OCX_ONLY} // not done - will be in DXSock 4.0 -{.$DEFINE OBJECTS_ONLY} -{$DEFINE ASM8086} -// LANGUAGE FILE FOR ERROR MESSAGE TEXT -{$DEFINE ENGLISH1} -{.$DEFINE FRENCH1} -{.$DEFINE GERMAN1} -{.$DEFINE ITALIAN1} -{.$DEFINE LOWMEM1} -{.$DEFINE PORTUGUESE1} -{.$DEFINE RUSSIAN1} -{.$DEFINE SPANISH1} -{.$DEFINE TURKISH1} - -//////////////////////////////////////////////////////////////////////////////// -{$IFDEF VER90} - {$DEFINE VER100} -{$ENDIF} -{$IFDEF VER105} - {$DEFINE VER100} -{$ENDIF} - -{$IFDEF FINALBUILD} - {$ALIGN ON} - {$ASSERTIONS OFF} - {$DEBUGINFO OFF} - {$DEFINITIONINFO OFF} - {$DESCRIPTION 'Uses Brain Patchwork DX, LLC. DXSock 3.0.0'} - {$EXTENDEDSYNTAX ON} - {$HINTS ON} - {$IMAGEBASE $2112CAFE} - {$IMPORTEDDATA ON} - {$IOCHECKS ON} - {$LOCALSYMBOLS OFF} - {$LONGSTRINGS ON} - {$OBJEXPORTALL ON} - {$OPTIMIZATION ON} - {$OVERFLOWCHECKS OFF} - {$RANGECHECKS OFF} - {$REALCOMPATIBILITY OFF} - {$REFERENCEINFO OFF} - {$RUNONLY OFF} - {$STACKFRAMES OFF} - {$VARSTRINGCHECKS ON} - {$WARNINGS ON} -{$ENDIF} -// END OF FILE // diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.pas deleted file mode 100644 index 1502037..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSock.pas +++ /dev/null @@ -1,1884 +0,0 @@ -unit uRODXSock; - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXSock -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: Low-Level Socket Wrapper as an Object. -// ======================================================================== -// 3.0a (pre-release) -// Changes GetMem/FreeMem to SysGetMem/SysFreeMem -/////////////////////////////////////////////////////////////////////////////// - -interface - -{$I uRODXSock.def} - -uses -{$IFDEF LINUX} - Libc, -{$ELSE} - WinSock, -{$ENDIF} - uRODXSocket, -{$IFDEF CODE_TRACER} - DXCodeTracer, -{$ENDIF} -{$IFDEF TLS_EDITION} - MjbLIFO, - BrkApart, -{$ENDIF} - Classes; - -const - TDXHugeSize=8192{*2}; // 16kb CHUNKS - TDXXferTimeout: Word = 500; // if data loss then set to 5000 - TDXMaxSocketBuffer: Word = TDXHugeSize; // Winsock Buffer Size - PeekBufferSize: Byte = 250; // do not go over 250! - -type - Str1 = string[1]; - - // -// * ddAboutToWrite denotes that your Socket Layer -// filter should encode, or compress the data. -// * ddAfterRead denotes that your Socket Layer -// filter should decode, or decompres the data -// * dFreePointer denotes that your Socket Layer -// filter should free the work pointer - TDXDataDirection = (ddAboutToWrite, ddAfterRead, ddCleanRead, ddFreePointer); - - TDXFilterCallBack = Procedure(DataDirection: TDXDataDirection; Const InData: Pointer; Var OutData: Pointer; Const - InSize: Integer; Var OutSize: Integer; Var Handled: Boolean; xClientThread: TThread) Of Object; - - // This controls outbound data only. It was implemented to - // assist people who wanted to be able to just say send this big - // chunk of data, without undertsanding the socket layer itself. - // - // - // * bsfRealSmall uses 128 byte block of data. - // Obviously smaller than a TCP packet. And with Nagle - // enabled it would actually slow down your output. - // However, if you are designing a UDP based - // application, and know the average package size will - // be under 128 bytes, then you should set your output - // buffer to this setting. Used: Very Rare - // * bsfSmall uses 256 byte block of data. Which is - // a standard TCP packet. Used: Occasionally - // * bsfNormal uses 512 byte block of data. Which - // is bigger than a standard TCP packet, but is optimial - // when you know your data is usually bigger than 256 - // bytes, and smaller than 512. Our testing has shown - // this to be very optimal when using that rule. Used: Very - // Frequently - // * bsfBigger uses a 2048 byte block of data. - // Again, bigger than a standard TCP packet. Used Very - // Rare - // * bsgBiggest uses a 4096 byte block of data. - // Bigger than a standard TCP packet, but is used very - // often by people who are porting from DOS based - // applications to windows. They are used to the old - // Borland examples which used 4kb buffers for file copy - // etc. Used: Often - // * bsfHUGE uses a 8192 byte block of data. Bigger - // than a standard TCP packet, but produces the best - // performance. Especially is you plan to just say "Send - // this data, who cares how big it is". Used: Most - // Often - // Note when we point out that the block of data is - // bigger then a standard TCP packet, that is just a mental note - // for you. The socket layer will always build the packet to the - // appropriate network packet size. These buffers are strictly - // used internally for how to break the data apart and shove it - // down to the socket layer. - // - // - // - // Summary - // Define the packet size between DXSock and the Socket Layer. - TDXBlockSizeFlags = ( - bsfZero, // special meaning for TLS! - bsfRealSmall, - bsfSmall, bsfNormal, - bsfBigger, - bsfBiggest, - bsfHUGE); - -Type - TDXBSArray=Array [0..65500] of Char; - TDXBSArray2=Array [0..250] of Char; -{$IFDEF VER100} - Longword=Cardinal; -{$ENDIF} - - TDXSock = class - private -{$IFDEF CODE_TRACER} - CodeTracer:TDXCodeTracer; -{$ENDIF} -{$IFDEF TLS_EDITION} - tBuf: TBrkApart; - tStack: TMJBLIFO; - Straggler: String; -{$ENDIF} - FClientThread:TThread; - FTLS:Boolean; - fChunkBuf:Pointer; // 3.0a - fbClientMode: Boolean; - fbIsUDP: Boolean; - fbIsKeepAlive: Boolean; - FsBindTo: string; - FPeekBuffer: ^TDXBSArray2; - FReadTimeout: Boolean; - FUseBlocking: Boolean; - FBlockSizeFlags: TDXBlockSizeFlags; - FActualBlockSize: Integer; - FErrStatus: Integer; - fTooManyCharacters: Integer; - feOnFilter: TDXFilterCallBack; -{$IFDEF TLS_EDITION} - feOnReadFilter: TDXFilterCallBack; -{$ENDIF} - GlobalPeerPort: Integer; - GlobalPeerIPAddress: string; - GlobalTimeout: TTimeVal; - VarConstSizeofTSockAddrIn:Integer; - protected - function GetReleaseDate: string; - procedure SetReleaseDate(value: string); - function GetLocalPort: Integer; - function GetLocalIPAddr: string; - function IsConnected: Boolean; - function IsValidSocket: Boolean; - function IsReadable: Boolean; - function IsWritable: Boolean; - function DidReadTimeout: Boolean; - procedure SetfBlockSizeFlags(Value: TDXBlockSizeFlags); - function CountWaiting: Integer; - public - SockAddr: TSockAddrIn; -{$IFDEF LINUX} - Sock: TFileDescriptor; -{$ELSE} - Sock: TSocket; -{$ENDIF} - constructor Create; - destructor Destroy; override; - function Connect(Parameters: PNewConnect): Boolean; - function Listen(Parameters: PNewListen): Boolean; - function Accept(var NewSock: TDXSock): Boolean; - procedure CloseGracefully; - procedure Disconnect; // Borland Friendly - procedure CloseNow; - function SendBuf(const Buf; Count: Integer): Integer; // Borland friendly - function ReceiveBuf(var Buf; Count: Integer): Integer; // Borland friendly -{$IFDEF VER100} - function BlockWrite(buf: Pointer; len: Integer): Integer; - function WriteCh(c: Char): Integer; - function Write(const s: string): Integer; -{$ELSE} - function Write(c: Char): Integer; overload; - function Write(const s: string): Integer; overload; - function Write(buf: Pointer; len: Integer): Integer; overload; -{$ENDIF} - function WriteLn(const s: string): Integer; - function WriteResultCode(const Code: Integer; const Rslt: string): Integer; - function WriteWithSize(S: string): Boolean; //2.4 for ASTAIO - function WriteInteger(const n: integer): integer; - -{$IFDEF VER100} - function SendFromStream(Stream: TStream): Boolean; - function SendFromWindowsFile(var Handle: Integer): boolean; - function SendFromBorlandFile(var Handle: file): boolean; -{$ELSE} - function SendFrom(Stream: TStream): Boolean; overload; - function SendFrom(var Handle: Integer): boolean; overload; - function SendFrom(var Handle: file): boolean; overload; -{$ENDIF} - function SendFromStreamWithSize(Stream: TStream): Boolean; -{$IFDEF VER100} - function BlockRead(buf: Pointer; len: Integer): Integer; - function Read:Char; -{$ELSE} - function Read(buf: Pointer; len: Integer): Integer; overload; - function Read: Char; overload; -{$ENDIF} - function ReadInteger: integer; - function ReadStr(MaxLength: Integer): string; - function ReadString(MaxLength: Integer; Timeout: Longword): string; - function ReadLn(Timeout: Longword): string; - function ReadCRLF(Timeout: Longword): string; - function ReadToAnyDelimiter(Timeout: Longword;Delimiter:String): string; - function ReadNull(Timeout: Longword): string; - function ReadSpace(Timeout: Longword): string; - function ReadWithSize: string; // 2.4 for ASTAIO (no TIMEOUT, just error check) -{$IFDEF VER100} - function SaveToStream(Stream: TStream; Timeout: Longword): Boolean; - function SaveToWindowsFile(var Handle: Integer; Timeout: Longword): boolean; - function SaveToBorlandFile(var Handle: file; Timeout: Longword): boolean; -{$ELSE} - function SaveTo(Stream: TStream; Timeout: Longword): Boolean; overload; - function SaveTo(var Handle: Integer; Timeout: Longword): boolean; overload; - function SaveTo(var Handle: file; Timeout: Longword): boolean; overload; -{$ENDIF} - function SaveToStreamWithSize(Stream: TStream; Timeout: Longword): Boolean; - function GetChar: Str1; - function GetByte: Byte; - function FilterRead(Const InBuf: Pointer; var OutBuf: Pointer; InSize: Integer;xClientThread: TThread): Integer; - function PeekString: string; - function PeekChar: Char; - function GetErrorStr: string; - function GetErrorDesc(errorCode: Integer): string; - procedure SetNagle(TurnOn: Boolean); - procedure SetBlocking(TurnOn: Boolean); - procedure WinsockVersion(var WinsockInfo: PWinsockInfo); - // made public for new TDXSockClient: - procedure SockClientSetGlobal(I:String;P:Integer); - procedure SetTimeoutAndBuffer(SocketHandle: Integer); -// new 3.0 features: - Function DroppedConnection:Boolean; - Function WaitForData(timeout:Longint):Boolean; - //published - property TLSActive: Boolean read FTLS write FTLS; - property TLSClientThread: TThread read FClientThread write FClientThread; - property BindTo: string read fsBindTo - write fsBindTo; - property Connected: Boolean read IsConnected; - property CharactersToRead: Integer read CountWaiting; - property ReceiveLength: Integer read CountWaiting; // Borland Friendly - property ValidSocket: Boolean read IsValidSocket; - property LastReadTimeout: Boolean read DidReadTimeout; - property LastCommandStatus: Integer read FErrStatus write FErrStatus; - property OutputBufferSize: TDXBlockSizeFlags read fBlockSizeFlags - write SetfBlockSizeFlags; - property TooManyCharacters: Integer read fTooManyCharacters - write fTooManyCharacters; - property IsUDPMode: Boolean read fbIsUDP - write fbIsUDP; - property IsKeepAliveMode: Boolean read fbIsKeepAlive write fbIsKeepAlive; - property PeerIPAddress: string read GlobalPeerIPAddress - write GlobalPeerIPAddress; - property PeerPort: Integer read GlobalPeerPort - write GlobalPeerPort; - property LocalIPAddress: string read GetLocalIPAddr; - property LocalPort: Integer read GetLocalPort; - property Readable: Boolean read IsReadable; - property Writable: Boolean read IsWritable; - property ReleaseDate: string read GetReleaseDate - write SetReleaseDate; - property OnFilter: TDXFilterCallBack read feOnFilter - write feOnFilter; -{$IFDEF CODE_TRACER} - property DXCodeTracer:TDXCodeTracer read CodeTracer - write CodeTracer; -{$ENDIF} -{$IFDEF TLS_EDITION} - Property OnReadFilter: TDXFilterCallBack READ feOnReadFilter - WRITE feOnReadFilter; -{$ENDIF} - end; - -implementation - -uses -{$IFNDEF LINUX} - Windows, -{$ENDIF} - uRODXString, - SysUtils; - -function TDXSock.GetReleaseDate: string; -begin - Result := BPDX_RELEASE_DATE; -end; - -procedure TDXSock.SetReleaseDate(value: string); -begin - // Absorb! -end; - -constructor TDXSock.Create; -begin - inherited Create; - FReadTimeout := False; - FPeekBuffer:=SysGetMem(PeekBufferSize); - fChunkBuf:=Nil; - SetFBlockSizeFlags(bsfNormal); // allocates fChunkBuf - if not SocketLayerLoaded then - ShowMessageWindow('Fatal Socket Error', '(WSAStartup) ' + GetErrorStr); - fTooManyCharacters := 2048; - Sock := INVALID_SOCKET; - fbIsUDP := False; - fbIsKeepAlive := False; - fbClientMode := False; - FUseBlocking := True; - GlobalPeerPort := 0; - GlobalPeerIPAddress := ''; - GlobalTimeout.tv_Sec := 0; - GlobalTimeout.tv_uSec := 10000; - VarConstSizeofTSockAddrIn := ConstSizeofTSockAddrIn; -end; - -destructor TDXSock.Destroy; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.EndTransaction; - End; -{$ENDIF} -{$IFDEF TLS_EDITION} - If assigned(tstack) Then Begin - tStack.Free; - tStack := Nil; - End; -{$ENDIF} - If Assigned(fChunkBuf) then SysFreeMem(fChunkBuf); //,FActualBlockSize); - fChunkBuf:=Nil; - if Assigned(FPeekBuffer) then SysFreeMem(FPeekBuffer); // ,PeekBufferSize); - fPeekBuffer:=Nil; - if Sock <> INVALID_SOCKET then CloseNow; - inherited Destroy; -end; - -procedure TDXSock.SetTimeoutAndBuffer(SocketHandle: Integer); -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SetTimeoutAndBuffer('+IntToStr(SocketHandle)+')'); - End; -{$ENDIF} - SetReceiveTimeout(SocketHandle, TDXXferTimeout, FErrStatus); - SetSendTimeout(SocketHandle, TDXXferTimeout, FErrStatus); - SetSendBuffer(SocketHandle, TDXMaxSocketBuffer, FErrStatus); -// Certain Protocol Implementations you may want to add the div 2 - SetReceiveBuffer(SocketHandle, TDXMaxSocketBuffer div 2, FErrStatus); - FErrStatus := 0; -end; - -function TDXSock.Connect(Parameters: PNewConnect): Boolean; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.StartTransaction; - CodeTracer.SendMessage(dxctDebug,'TDXSock.Connect'); - End; -{$ENDIF} - Result := False; - with Parameters^ do begin - FUseBlocking := UseBlocking; - fbIsUDP := UseUDP; - Sock := ClientConnectToServer(ipAddress, Port, UseUDP, UseNAGLE, @SockAddr, FErrStatus); - if (FErrStatus <> 0) then Exit; - GlobalPeerPort := ntohs(SockAddr.sin_port); - GlobalPeerIPAddress := inet_ntoa(SockAddr.sin_addr); - uRODXSocket.SetBlocking(Sock, UseBlocking, FErrStatus); - fbIsKeepAlive := False; - if not FbIsUDP then begin - SetSockStatusBool(Sock, SO_KeepAlive, True, FErrStatus); - fbIsKeepAlive := FErrStatus = 0; - end; - SetTimeoutAndBuffer(Sock); - // 3.0c - if FbIsUDP then begin - // try to scale up the primary buffer. - SetReceiveBuffer(Sock, TDXMaxSocketBuffer*4, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Sock, TDXMaxSocketBuffer*3, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Sock, TDXMaxSocketBuffer*2, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Sock, TDXMaxSocketBuffer, FErrStatus); - End; - end; - fbClientMode := True; - Result := True; -end; - -function TDXSock.Listen(Parameters: PNewListen): Boolean; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.StartTransaction; - CodeTracer.SendMessage(dxctDebug,'TDXSock.Listen'); - End; -{$ENDIF} - Result := False; - with Parameters^ do begin - FUseBlocking := UseBlocking; - Sock := BindAndListen(fsBindTo, Port, WinsockQueue, UseUDP, UseNAGLE, - Connectionless, @SockAddr, FErrStatus); - fbIsUDP := UseUDP; - If Sock=Invalid_Socket then Exit; // linux does not set FErrStatus! - if FErrStatus = 0 then uRODXSocket.SetBlocking(Sock, UseBlocking, FErrStatus) - else Exit; - if not fbIsUDP then begin - SetSockStatusBool(Sock, SO_KeepAlive, True, FErrStatus); - fbIsKeepAlive := fErrStatus = 0; - end; - SetTimeoutAndBuffer(Sock); - end; - fErrStatus := 0; - fbClientMode := False; - Result := True; - GlobalPeerPort := 0; - GlobalPeerIPAddress := ''; -end; - -function TDXSock.Accept(var NewSock: TDXSock): Boolean; -var - ICreatedIt: Boolean; - -begin - Result:=False; - if Sock=INVALID_SOCKET then exit; - Result:=IsAcceptWaiting(Sock); - if (not Result) or fbIsUDP then Exit; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.Accept'); - End; -{$ENDIF} - ICreatedIt:=not Assigned(NewSock); - If ICreatedIt then NewSock := TDXSock.Create; - NewSock.Sock := AcceptNewConnect(Sock, @NewSock.SockAddr, @VarConstSizeofTSockAddrIn, FErrStatus); - if FErrStatus <> 0 then begin - NewSock.Sock := Invalid_Socket; - if ICreatedIt then begin - NewSock.Free; - NewSock := nil; - end; - Result := False; - Exit; - end; - NewSock.GlobalPeerPort := ntohs(NewSock.SockAddr.sin_port); - NewSock.GlobalPeerIPAddress := inet_ntoa(NewSock.SockAddr.sin_addr); - NewSock.fbClientMode := False; -// SetTimeoutAndBuffer(NewSock.Sock); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - NewSock.DXCodeTracer:=CodeTracer; // link new sessions automatically - CodeTracer.SendMessage(dxctDebug,'TDXSock.Accepted/Configured'); - End; -{$ENDIF} -end; - -{$IFDEF VER100} -function TDXSock.BlockWrite(buf: Pointer; len: Integer): Integer; -{$ELSE} -function TDXSock.Write(buf: Pointer; len: Integer): Integer; -{$ENDIF} -var - BytesLeft: Integer; - BytesSent: Integer; - XferSize: Integer; - TmpP: Pointer; - Filtered: Pointer; - NewLen: Integer; - Handled: Boolean; - -begin -{$IFDEF TLS_EDITION} - DoSleepEx(0); -{$ENDIF} - Result := 0; - if Sock = INVALID_SOCKET then Exit; - if (Len < 1) then begin - if fbIsUDP then Begin - UDPSend(Sock, Buf^, 0, 0, SockAddr, ConstSizeofTSockAddrIn, FErrStatus); // 2.3 - empty udp packet - GlobalPeerPort := ntohs(SockAddr.sin_port); - GlobalPeerIPAddress := inet_ntoa(SockAddr.sin_addr); - End; - Exit; - end; - NewLen := 0; - if Assigned(feOnFilter) then begin - Handled := False; - Filtered := nil; - feOnFilter(ddAboutToWrite, Buf, Filtered, Len, NewLen, Handled,FClientThread); - if not Handled then begin - fErrStatus := 9999; {onFilter failed!} - Exit; - end; - end; - if fbIsUDP then begin - if NewLen = 0 then - Result := UDPSend(Sock, Buf^, Len, 0, SockAddr, ConstSizeofTSockAddrIn, FErrStatus) - else begin - Result := UDPSend(Sock, Filtered^, NewLen, 0, SockAddr, ConstSizeofTSockAddrIn, FErrStatus); - if Assigned(feOnFilter) then - feOnFilter(ddFreePointer, Filtered, Filtered, NewLen, NewLen, Handled,FClientThread); - end; - GlobalPeerPort := ntohs(SockAddr.sin_port); - GlobalPeerIPAddress := inet_ntoa(SockAddr.sin_addr); - Exit; - end; - if NewLen = 0 then begin - BytesLeft := Len; - TmpP := Buf; - end - else begin - BytesLeft := NewLen; - Len := NewLen; - TmpP := Filtered; - end; - fErrStatus := 0; - repeat - XferSize:=BytesLeft; -{$IFNDEF LINUX} - If IsWritAble then Begin -{$ENDIF} -// If XFerSize>FActualBlockSize then XFerSize:=FActualBlockSize; - BytesSent := BasicSend(Sock, TmpP^, XferSize, 0, FErrStatus); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.Write SENT: ['+IntToStr(BytesSent)+' bytes] FErrStatus='+IntToStr(FErrStatus)); - End; -{$ENDIF} - Case BytesSent of - -1:Begin - Case fErrStatus of - WSAENOBUFS:fErrStatus := 0; - WSAETIMEDOUT:Begin - // if this code is execute then TDXXferTimeout is too small! - fErrStatus := 0; - Break; - End; - WSAECONNABORTED:CloseNow; - End; - End; - 0:CloseNow; - else begin - If BytesSent>0 then Dec(BytesLeft,BytesSent); - If (BytesLeft>0) and (fErrStatus=0) then begin// 3.0 [major bug fix!!] - Inc(LongInt(TmpP), BytesSent); - End; - End; - end; -{$IFNDEF LINUX} - End; // Is Write able. -{$ENDIF} - until (BytesLeft=0) or (FErrStatus<>0) or (sock=Invalid_Socket); - Result := Len - BytesLeft; - if Assigned(feOnFilter) then - feOnFilter(ddFreePointer, nil, Filtered, NewLen, NewLen, Handled,FClientThread); -end; - -function TDXSock.WriteInteger(const n: integer): integer; -var - x: integer; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WriteInteger('+IntToStr(N)+')'); - End; -{$ENDIF} - x := htonl(n); -{$IFDEF VER100} - result := BlockWrite(@x, sizeof(x)); -{$ELSE} - result := Write(@x, sizeof(x)); -{$ENDIF} -end; - -{$IFDEF VER100} -function TDXSock.WriteCh(c: Char): Integer; -{$ELSE} -function TDXSock.Write(c: Char): Integer; -{$ENDIF} -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WriteCh('+C+')'); - End; -{$ENDIF} -{$IFDEF VER100} - Result := BlockWrite(@C, 1); -{$ELSE} - Result := Write(@C, 1); -{$ENDIF} -end; - -function TDXSock.Write(const s: string): Integer; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.Write('+S+')'); - End; -{$ENDIF} -{$IFDEF VER100} - Result := BlockWrite(@S[1], Length(S)); -{$ELSE} - Result := Write(@S[1], Length(S)); -{$ENDIF} -end; - -function TDXSock.WriteLn(const s: string): Integer; -var - Len: Integer; - Ws: string; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WriteLn('+S+')'); - End; -{$ENDIF} - if Assigned(feOnFilter) then begin - Len := 2; - Result := Write(S) + Len; // send via filter - Ws := #13#10; - if fbIsUDP then begin // append CRLF unfiltered! - UDPSend(Sock, Ws[1], Len, 0, SockAddr, ConstSizeofTSockAddrIn, FErrStatus); - end - else begin - BasicSend(Sock, Ws[1], Len, 0, FErrStatus); - end; - end - else - Result := Write(S+#13#10); -end; - -function TDXSock.WriteResultCode(const Code: Integer; const Rslt: string): Integer; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WriteResult()'); - End; -{$ENDIF} - Result:=Writeln(IntToStr(Code)+#32+Rslt); -end; - -function TDXSock.ReadInteger: integer; -var - n: integer; - cnt: integer; - -begin -{$IFDEF VER100} - cnt := BlockRead(@n, sizeof(n)); -{$ELSE} - cnt := Read(@n, sizeof(n)); -{$ENDIF} - if cnt = sizeof(n) then begin - n := ntohl(n); - result := n; - end - else result := -1; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.ReadInteger='+IntToStr(Result)); - End; -{$ENDIF} -end; - -{$IFDEF VER100} -function TDXSock.BlockRead(buf: Pointer; len:Integer): Integer; -{$ELSE} -function TDXSock.Read(buf: Pointer; len:Integer): Integer; -{$ENDIF} -var - UDPAddrSize: Integer; - Tries:Integer; -{$IFDEF TLS_EDITION} - Filtered, InData: Pointer; - Handled: Boolean; - NewLen: Integer; - StartTime: Longword; - SizeToRead: Integer; -{$ENDIF} - -begin -// 7-27 try -{$IFDEF TLS_EDITION} - DoSleepEx(0); -{$ENDIF} - fReadTimeout := False; - Result := 0; - if (Sock=INVALID_SOCKET) or (Len<1) then exit; - Tries:=0; - if fbIsUDP then begin - UDPAddrSize := ConstSizeofTSockAddrIn; - Result := UDPRecv(Sock, Buf^, Len, 0, SockAddr, UDPAddrSize, FErrStatus); - GlobalPeerPort := ntohs(SockAddr.sin_port); - GlobalPeerIPAddress := inet_ntoa(SockAddr.sin_addr); - end - else begin - While (Not IsReadAble) and (Tries<3) Do Begin - DoSleepEx(1); - Inc(Tries); - End; -{$IFNDEF TLS_EDITION} - If (CountWaiting>0) or (Tries>=3) then Begin - Result := BasicRecv(Sock, Buf^, Len, 0, FErrStatus); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - If (Result=-1) and (fErrStatus=10060) then {absorb} - Else - If Result>0 then - CodeTracer.SendMessage(dxctDebug,'TDXSock.Read RECV: '+PChar(Buf)+' ['+IntToStr(Result)+'] fes='+IntToStr(FErrStatus)) - Else - CodeTracer.SendMessage(dxctDebug,'TDXSock.Read RECV: ['+IntToStr(Result)+'] fes='+IntToStr(FErrStatus)); - End; -{$ENDIF} - End; -{$ELSE} - If (CountWaiting > 0) Or (Tries >= 3) Then - Begin - If Assigned(feOnFilter) Then - Begin - SetBlocking(True); - SizeToRead := 0; - StartTime := DxString.TimeCounter + 120000; - While (SizeToRead = 0) And Connected And (Not DXString.Timeout(StartTime)) Do - Begin - ioctlsocket(Sock, FIONREAD, Longint(SizeToRead)); - DoSleepEx(1); - End; - If SizeToRead <> 0 Then Begin - InData := Nil; - Filtered:=Nil; - // Freemem(Buf,Len); - GetMem(InData, SizeToRead); - Result := Recv(Sock, InData^, SizeToRead, 0); - End; - End - Else Result := BasicRecv(Sock, Buf^, Len, 0, FErrStatus); - End; - End; - If Result = 0 Then CloseGracefully; - fReadTimeout := Result < 1; - If (Result > 0) And Assigned(feOnFilter) Then - Begin - Handled := False; Len :=0; - feOnFilter(ddAfterRead, InData, Filtered, SizeToRead, Len, Handled, FClientThread); - If Not Handled Then - Begin - fErrStatus := 9999; {onFilter failed!} - If InData <> Nil Then - Begin - FreeMem(InData, SizeToRead); - InData := Nil; - End; - CloseGracefully; - End else Result := Len; - If Filtered = Nil Then Result := 0; - If Filtered <> Nil Then Move(Filtered^,Buf^,Len); - If InData <> Nil Then - Begin - FreeMem(InData, SizeToRead); - InData := Nil; - End; - feOnFilter(ddFreePointer, Nil, Filtered, Len, Len, Handled, FClientThread); - End; -{$ENDIF} - end; - fReadTimeout := Result < 1; - if Result = 0 then CloseGracefully; -// 7-27 finally -// 7-27 end; -end; - -function TDXSock.Read: Char; -var - Size: Integer; - -begin -{$IFDEF VER100} - Size := BlockRead(@Result, 1); -{$ELSE} - Size := Read(@Result, 1); -{$ENDIF} - if Size < 1 then Result := #0; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.Read='+Result); - End; -{$ENDIF} -end; - -function TDXSock.ReadStr(MaxLength: Integer): string; -var - Size: Integer; - -begin - fReadTimeout := False; - if Sock = INVALID_SOCKET then Exit; - if MaxLength < 0 then MaxLength := TDXHugeSize; - Result:=''; - if MaxLength=0 then Exit; //2.3c - Setlength(Result, MaxLength); - FillChar(Result[1],MaxLength,0); -{$IFDEF VER100} - Size := BlockRead(@Result[1], MaxLength); -{$ELSE} - Size := Read(@Result[1], MaxLength); -{$ENDIF} - if (((fErrStatus <> 0) and (fErrStatus <> WSAETIMEDOUT))) or (Size = 0) then Result := '' - // 3.0 - else if (Size=Socket_Error) then Result:='' - else Setlength(Result, Size); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - If Result<>'' then - CodeTracer.SendMessage(dxctDebug,'TDXSock.ReadStr='+Result); - End; -{$ENDIF} -end; - -function TDXSock.ReadString(MaxLength: Integer; Timeout: Longword): string; -var - Size: Integer; - StartTime: Longword; - -begin - Result := ''; - fReadTimeout := False; - if Sock = INVALID_SOCKET then Exit; - fReadTimeout := False; - if (MaxLength < 1) or (MaxLength > 250) then Exit; // 2.3 - StartTime := TimeCounter + Timeout; - fErrStatus := 0; - while (CountWaiting < MaxLength) and - (not uRODXString.Timeout(StartTime)) and - ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) do begin - DoSleepEx(1); - end; - if (CountWaiting < MaxLength) then begin - fReadTimeout := True; - Exit; - end; - Setlength(Result, MaxLength); - FillChar(Result[1],MaxLength,0); -{$IFDEF VER100} - Size := BlockRead(@Result[1], MaxLength); -{$ELSE} - Size := Read(@Result[1], MaxLength); -{$ENDIF} - if (((fErrStatus <> 0) and (fErrStatus <> WSAETIMEDOUT))) or (Size = 0) then Result := '' - // 3.0 - else if (Size=Socket_Error) then Result:='' - else Setlength(Result, Size); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.ReadString='+Result); - End; -{$ENDIF} -end; - -function TDXSock.GetChar: Str1; -var - Size: Integer; - -begin -// 7-27 SetLength(Result, 1); - Result:=#32; -{$IFDEF VER100} - Size := BlockRead(@Result[1], 1); -{$ELSE} - Size := Read(@Result[1], 1); -{$ENDIF} - case Size of - 0: begin - CloseNow; // 2.3 - Result := ''; - end; - 1: begin - end; - else begin - if fErrStatus=WSAETIMEDOUT then fReadTimeout := False; // 2.3b - Result := ''; - end; - end; -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.GetChar='+Result); - End; -{$ENDIF} -end; - -function TDXSock.GetByte: Byte; -var - L: Str1; - -begin - L := GetChar; - if L = '' then Result := 0 - else Result := Ord(L[1]); -end; - -function TDXSock.ReadLn(Timeout: Longword): string; -var - markerCR, markerLF: Integer; - s: string; - startTime: Longword; - LastChar: Str1; - pstring: string; - -{$IFDEF TLS_EDITION} - Function TestStack(ts: TMJBLIFO): Boolean; - Begin - Result := False; - If assigned(tStack) Then - Result := ts.ItemCount > 0 - Else tStack := TMJBLIFO.Create; - End; -{$ENDIF} - -begin - Result := ''; - fReadTimeout := False; - if Sock = INVALID_SOCKET then exit; -{$IFDEF TLS_EDITION} - If FTLS = True Then - Begin - If TestStack(tStack) Then - Result := tStack.Pop - Else - Begin - pString := ReadStr(-1); - If pString = '' Then pString := ReadStr(-1); - // If pString[1] = #0 Then pString := ReadStr(-1); - If Straggler <> '' Then pString := Straggler + pString; - {$IFDEF OBJECTS_ONLY} - tBuf := TBrkApart.Create; - {$ELSE} - tBuf := TBrkApart.Create(Nil); - {$ENDIF} - tBuf.AllowEmptyString := True; - tBuf.BaseString := pString; - tBuf.BreakString := #13#10; - tBuf.BreakApart; - MarkerLF := tbuf.StringList.Count - 2; // Allow for last String as CRLF - For markerCR := MarkerLF Downto 0 Do - Begin - tStack.Push(tbuf.StringList.Strings[markerCR]); - End; - Straggler := tBuf.Straggler; - FreeAndNil(tBuf); - If tStack.ItemCount > 0 Then - Result := tStack.Pop - Else - Result := pString; - End; - Exit; - End; -{$ENDIF} - S := GetChar; - LastChar := S; - if (Sock = INVALID_SOCKET) {or (fReadTimeout) removed 7-27} then exit; - MarkerLF := 0; - MarkerCR := 0; - fErrStatus := 0; - StartTime := TimeCounter + Timeout; - while (Sock <> Invalid_Socket) and - (MarkerLF + MarkerCR = 0) and - (not uRODXString.Timeout(StartTime)) and - (Length(S) < fTooManyCharacters) and - ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT) - // 7-27: - or (fErrStatus = WSAEWOULDBLOCK)) do begin - If fErrStatus = WSAEWOULDBLOCK then ProcessWindowsMessageQueue; - if (LastChar = '') or (not (LastChar[1] in [#10, #13])) then begin {handles getchar from above!} - pString := PeekString; - if uRODXString.Timeout(StartTime) then Break; - if (pString = '') then begin - LastChar := GetChar; - end - else begin - MarkerLF := CharPos(#10, pString); - MarkerCR := CharPos(#13, pString); - if MarkerLF + MarkerCR > 0 then begin - if MarkerLF = 0 then MarkerLF := MarkerCR - else if MarkerCR = 0 then MarkerCR := MarkerLF; - if Min(MarkerLF, MarkerCR)>1 then // 2.4 - S := S + Copy(pString, 1, Min(MarkerLF, MarkerCR)-1); - ReadStr(Min(MarkerLF, MarkerCR)); - LastChar := #13; - end - else begin - S := S + pString; - ReadStr(Length(pString)); - LastChar := ''; - end; - end; - if uRODXString.Timeout(StartTime) then Break; - if LastChar > '' then begin - S := S + LastChar; - end; - end; - if (Length(LastChar) > 0) and (LastChar[1] in [#10, #13]) then begin - MarkerLF := CharPos(#10, S); - MarkerCR := CharPos(#13, S); - if MarkerLF + MarkerCR > 0 then begin - if MarkerLF = Length(S) then begin {unix or DOS} - if MarkerCR = 0 then begin {unix or Mac} - if CountWaiting > 0 then - if PeekChar = #13 then begin {Mac} - LastChar := GetChar; - S := S + LastChar; - end; - end - else if MarkerCR < MarkerLF then MarkerLF := MarkerCR; - MarkerCR := MarkerLF; - end; - if MarkerCR = Length(S) then begin {Mac or DOS} - if MarkerLF = 0 then begin {Mac or DOS} - if CountWaiting > 0 then - if PeekChar = #10 then begin {DOS} - LastChar := GetChar; - S := S + LastChar; - end; - end - else if MarkerLF < MarkerCR then MarkerCR := MarkerLF; - MarkerLF := MarkerCR; - end; - end; - end; - end; - if Sock = INVALID_SOCKET then exit; - FReadTimeout := (MarkerCR < 1) and (uRODXString.Timeout(StartTime)); - Result := Copy(S, 1, MarkerCR - 1); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.ReadLn='+Result); - End; -{$ENDIF} -end; - -function TDXSock.ReadCRLF(Timeout: Longword): string; -Begin - Result:=ReadToAnyDelimiter(Timeout,#13#10); -End; -{var - marker: Integer; - s: string; - startTime: Longword; - -begin - Result := ''; - fReadTimeout := False; - if Sock = INVALID_SOCKET then exit; - Marker := 0; - StartTime := TimeCounter + Timeout; - fErrStatus := 0; - while (sock <> Invalid_Socket) and - (Marker = 0) and - (not DXString.Timeout(StartTime)) and - (Length(S) < fTooManyCharacters) and - ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) do begin - S := S + GetChar; - Marker := QuickPos(#13#10, S); - end; - if Sock = INVALID_SOCKET then exit; - Result := Copy(S, 1, Marker - 1); -end;} - -function TDXSock.ReadToAnyDelimiter(Timeout: Longword;Delimiter:String): string; -var - slen: Integer; - marker: Integer; - s: string; - startTime: Longword; - pString:String; - iDel:Integer; - -Begin - Result := ''; - fReadTimeout := False; - if Sock = INVALID_SOCKET then exit; - S := ''; - sLen:=0; - StartTime := TimeCounter + Timeout; - Marker:=0; - while (sock <> Invalid_Socket) and - (Marker = 0) and - (not uRODXString.Timeout(StartTime)) and - (sLen < fTooManyCharacters) and - ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) do begin - pString := PeekString; - if pString<>'' then Begin - sLen:=Length(S); - S:=S+pString; - Marker := QuickPos(Delimiter, S); - If Marker=0 then Begin - ReadStr(Length(pString)); // clear socket - End - Else Begin - S:=Copy(S,1,Marker-1); - If Marker Invalid_Socket) and - (Stream.Position < Stream.Size) and - (fErrStatus = 0) and - (Tries < 3) do begin - if (SSize - SPosition) < FActualBlockSize then Len := SSize - SPosition - else Len := FActualBlockSize; - if Len > 0 then begin - Stream.Seek(SPosition, 0); - Stream.Read(fChunkBuf^, Len); -{$IFDEF VER100} - Len := BlockWrite(fChunkBuf, Len); -{$ELSE} - Len := Write(fChunkBuf, Len); -{$ENDIF} - SPosition := SPosition + Len; - if fErrStatus > 0 then begin - Tries := 3; - end - else if Len < 1 then Inc(Tries) - else Tries := 0; - end; - end; - Result := (Sock <> INVALID_SOCKET) and (fErrStatus = 0); -end; - -{$IFDEF VER100} -function TDXSock.SendFromWindowsFile(var Handle: Integer): boolean; -{$ELSE} -function TDXSock.SendFrom(var Handle: Integer): boolean; -{$ENDIF} -var - Len: Integer; - SLen: Integer; - Offset: Integer; - FSize: Integer; - Tries: Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SendFrom'); - End; -{$ENDIF} - Result := False; - fReadTimeout := False; - if Sock = INVALID_SOCKET then Exit; - if Handle <> 0 then begin - Offset := FileSeek(Handle, 0, 1); - FSize := FileSeek(Handle, 0, 2); - FileSeek(Handle, Offset, 0); - fErrStatus := 0; - Tries := 0; - while (sock <> Invalid_Socket) and - (Offset < FSize) and - (fErrStatus = 0) and - (Tries < 3) do begin - if Sock <> INVALID_SOCKET then begin - Len := FileRead(Handle, fChunkBuf^, FActualBlockSize - 1); - if Len > 0 then begin -{$IFDEF VER100} - SLen := BlockWrite(fChunkBuf, Len); -{$ELSE} - SLen := Write(fChunkBuf, Len); -{$ENDIF} - if SLen <> Len then begin - Offset := SLen + Offset; - FileSeek(Handle, Offset, 0); - Inc(Tries); - end - else Tries := 0; - if fErrStatus > 0 then Tries := 3; - end; - end; - Offset := FileSeek(Handle, 0, 1); - end; - end; - Result := (Sock <> INVALID_SOCKET) and (fErrStatus = 0); -end; - -{$IFDEF VER100} -function TDXSock.SendFromBorlandFile(var Handle: file): boolean; -{$ELSE} -function TDXSock.SendFrom(var Handle: file): boolean; -{$ENDIF} -var - Len: Integer; - SLen: Integer; - OffSet: Integer; - Tries: Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SendFrom'); - End; -{$ENDIF} - Result := False; - fReadTimeout := False; - if Sock = INVALID_SOCKET then Exit; - fErrStatus := 0; - Tries := 0; - while not Eof(Handle) and (fErrStatus = 0) and (Tries < 3) and (sock <> Invalid_Socket) do begin - Offset := System.FilePos(Handle); - if (Sock <> INVALID_SOCKET) then begin - System.BlockRead(Handle, fChunkBuf^, FActualBlockSize - 1, Len); -{$IFDEF VER100} - SLen := BlockWrite(fChunkBuf, Len); -{$ELSE} - SLen := Write(fChunkBuf, Len); -{$ENDIF} - if SLen = Len then begin - Tries := 0; - end - else begin - Offset := SLen + Offset; - System.Seek(Handle, Offset); - Inc(Tries); - end; - if fErrStatus > 0 then Tries := 3; - end; - end; - Result := (Sock <> INVALID_SOCKET) and (fErrStatus = 0); -end; - -{$IFDEF VER100} -function TDXSock.SaveToStream(Stream: TStream; Timeout: Longword): Boolean; -{$ELSE} -function TDXSock.SaveTo(Stream: TStream; Timeout: Longword): Boolean; -{$ENDIF} -var - SLen: Integer; - StartTime: Longword; - OldSize:Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SaveTo'); - End; -{$ENDIF} - OldSize:=Stream.Size; - fErrStatus := 0; - fReadTimeout := False; - StartTime := TimeCounter + Timeout; - while ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and - (not uRODXString.Timeout(StartTime)) do begin -{$IFDEF VER100} - SLen := BlockRead(fChunkBuf, FActualBlockSize); -{$ELSE} - SLen := Read(fChunkBuf, FActualBlockSize); -{$ENDIF} - if SLen < 1 then begin - if SLen = 0 then Break; - end - else Stream.Write(fChunkBuf^, SLen); - If SLen < FActualBlockSize Then Break; //GT for TLS Stops looping until timeout - end; - Result := (Sock <> INVALID_SOCKET) and ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)); - If Result then Result:=Stream.Size<>OldSize; -end; - -{$IFDEF VER100} -function TDXSock.SaveToWindowsFile(var Handle: Integer; Timeout: Longword): boolean; -{$ELSE} -function TDXSock.SaveTo(var Handle: Integer; Timeout: Longword): boolean; -{$ENDIF} -var - SLen: Integer; -{$IFDEF VER100} - STmp: Integer; -{$ELSE} - STmp: Cardinal; -{$ENDIF} - StartTime: Longword; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SaveTo'); - End; -{$ENDIF} - fErrStatus := 0; - fReadTimeout := False; - StartTime := TimeCounter + Timeout; - while ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and - (not uRODXString.Timeout(StartTime)) do begin -{$IFDEF VER100} - SLen := BlockRead(fChunkBuf, FActualBlockSize); -{$ELSE} - SLen := Read(fChunkBuf, FActualBlockSize); -{$ENDIF} - STmp := 0; - if SLen < 1 then begin - if SLen = 0 then Break; - end - else - WindowsWriteFile(Handle, fChunkBuf^, SLen, STmp); - end; - Result := (Sock <> INVALID_SOCKET) and ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)); -end; - -{$IFDEF VER100} -function TDXSock.SaveToBorlandFile(var Handle: file; Timeout: Longword): boolean; -{$ELSE} -function TDXSock.SaveTo(var Handle: file; Timeout: Longword): boolean; -{$ENDIF} -var - SLen: Integer; - StartTime: Longword; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SaveTo'); - End; -{$ENDIF} - fErrStatus := 0; - fReadTimeout := False; - StartTime := TimeCounter + Timeout; - while ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and - (not uRODXString.Timeout(StartTime)) do begin -{$IFDEF VER100} - SLen := BlockRead(fChunkBuf, FActualBlockSize); -{$ELSE} - SLen := Read(fChunkBuf, FActualBlockSize); -{$ENDIF} - if SLen < 1 then begin - if SLen = 0 then Break; - end - else - System.BlockWrite(Handle, fChunkBuf^, SLen); - end; - Result := (Sock <> INVALID_SOCKET) and ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)); -end; - -function TDXSock.WriteWithSize(S: string): Boolean; -var - Size: Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WriteWithSize('+S+')'); - End; -{$ENDIF} - Result := False; - Size := Length(S); - size := htonl(size); -{$IFDEF VER100} - if BlockWrite(@Size, 4) = 4 then - Result := BlockWrite(@S[1], Size) = Size; -{$ELSE} - if Write(@Size, 4) = 4 then - Result := Write(@S[1], Size) = Size; -{$ENDIF} -end; - -function TDXSock.ReadWithSize: string; // 2.4 for ASTAIO (no TIMEOUT, just error check) -var - Done: Boolean; - Size: Integer; - -begin - Result := ''; - Done := False; - Size := 0; - FErrStatus := 0; - while (not Done) and (Connected) and ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and (Size >= 0) and (Length(Result) <= Size) do begin - if Size = 0 then begin -{$IFDEF VER100} - BlockRead(@Size, 4); -{$ELSE} - Read(@Size, 4); -{$ENDIF} - If fErrStatus = WSAETIMEDOUT Then Done := True; //gt while not does not work - size := ntohl(size); - end - else begin - Result := Result + ReadStr(Size-Length(Result)); - Done := Length(Result) = Size; - end; - end; - if ((fErrStatus <> 0) and (fErrStatus <> WSAETIMEDOUT)) or (Size = 0) then Result := '' - // 3.0 - else if (Size=Socket_Error) then Result:='' - else Setlength(Result, Size); -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.ReadWithSize='+Result); - End; -{$ENDIF} -end; - -function TDXSock.SendFromStreamWithSize(Stream: TStream): Boolean; -var - Size: Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SendFromStreamWithSize'); - End; -{$ENDIF} - Result:=False; - Size:=Stream.Size; - if size<1 then Exit; - size:=htonl(size); - Stream.Seek(0, 0); -{$IFDEF VER100} - if BlockWrite(@Size, 4) = 4 then - Result := SendFromStream(Stream); -{$ELSE} - if Write(@Size, 4) = 4 then - Result := SendFrom(Stream); -{$ENDIF} -end; - -function TDXSock.SaveToStreamWithSize(Stream: TStream; Timeout: Longword): Boolean; -var - Size: Integer; - StartTime: Longword; - SLen: Integer; - -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SaveToStreamWithSize'); - End; -{$ENDIF} - Stream.Size := 0; - fReadTimeout := False; -{$IFDEF VER100} - if BlockRead(@Size, 4) = 4 then begin -{$ELSE} - if Read(@Size, 4) = 4 then begin -{$ENDIF} - size := ntohl(size); - StartTime := TimeCounter + Timeout; - fErrStatus := 0; - while ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and - (not uRODXString.Timeout(StartTime)) and - (Size > 0) do begin -{$IFDEF VER100} - SLen := BlockRead(fChunkBuf, Min(Size, FActualBlockSize)); -{$ELSE} - SLen := Read(fChunkBuf, Min(Size, FActualBlockSize)); -{$ENDIF} - Case SLen of - -1:Begin // non-fatal - End; - 0:Break; // fatal - Else Begin - Stream.Write(fChunkBuf^, SLen); - Dec(Size, SLen); - end; - End; - end; - end; - Result := (Sock <> INVALID_SOCKET) and ((fErrStatus = 0) or (fErrStatus = WSAETIMEDOUT)) and - ((Size=0) and (Stream.Size>0)); // 2.3c -end; - -function TDXSock.PeekString: string; -var - Size: Integer; -{$IFDEF TLS_EDITION} - Filtered, InData: Pointer; - Handled: Boolean; - NewLen: Integer; - SizeToRead: Integer; - S: String; - StartTime: Longword; -{$ENDIF} - -begin - Result := ''; -{$IFDEF TLS_EDITION} - indata := Nil; -{$ENDIF} - fReadTimeout := False; - if Sock = INVALID_SOCKET then exit; -{$IFDEF TLS_EDITION} - If Assigned(feOnFilter) Then - Begin - SizeToRead := 0; - StartTime := DxString.TimeCounter + 1000; - While (SizeToRead = 0) And Connected And (Not DXString.Timeout(StartTime)) Do - Begin - ioctlsocket(Sock, FIONREAD, Longint(SizeToRead)); - DoSleepEx(1); - End; - If SizeToRead = 0 Then Begin Result := ''; Exit; End; - - GetMem(InData, SizeToRead); - - If Sock <> Invalid_Socket Then - FErrStatus := Recv(Sock, Indata^, SizeToRead, 0) - Else - FErrStatus := Socket_Error; - End - Else -{$ENDIF} - FErrStatus := BasicPeek(Sock, FPeekBuffer^, PeekBufferSize); - if FErrStatus = Socket_Error then begin - FErrStatus := 0; - Exit; - end - else Size := FErrStatus; -{$IFDEF TLS_EDITION} - If Assigned(feOnFilter) Then - Begin - Handled := False; - Filtered := Nil; - feOnFilter(ddAfterRead, InData, Filtered, SizeToRead, NewLen, Handled, FClientThread); - If Not Handled Then Begin - fErrStatus := 9999; {onFilter failed!} - If Assigned(feOnFilter) Then - Begin - feOnFilter(ddFreePointer, Nil, Filtered, NewLen, NewLen, Handled, FClientThread); - If InData <> Nil Then - Begin - FreeMem(InData, SizeToRead); - InData := Nil; - End; - End; - Exit; - End; - If Filtered <> Nil Then - Begin - SetLength(S, NewLen); - Move(TDXBSArray(Filtered^), S[1], NewLen); - Result := S; - fReadTimeout := False; - FErrStatus := 0; - End Else Result := ''; - If Assigned(feOnFilter) Then - Begin - feOnFilter(ddFreePointer, Nil, Filtered, NewLen, NewLen, Handled, FClientThread); - If InData <> Nil Then - Begin - FreeMem(InData, SizeToRead); - InData := Nil; - End; - End; - End Else - Begin -{$ENDIF} - Setlength(Result, Size); - If Size>0 then Move(FPeekBuffer^, Result[1], Size); // 3.0 -{$IFDEF TLS_EDITION} - fReadTimeout := False; - FErrStatus := 0; - End; -{$ENDIF} -end; - -function TDXSock.PeekChar: Char; -begin - Result := #0; - fReadTimeout := False; - if Sock = INVALID_SOCKET then exit; - FErrStatus := BasicPeek(Sock, FPeekBuffer^, 1); -// 3.0 -// if FErrStatus = Socket_Error then CloseNow -// else Result := FPeekBuffer^[0]; - Case fErrStatus of - 0:CloseNow; - Socket_Error:FErrStatus:=0; - Else Result:=FPeekBuffer^[0]; - End; -end; - -procedure TDXSock.CloseGracefully; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.CloseGraceFully'); - End; -{$ENDIF} - CloseConnection(Sock, True); -end; - -procedure TDXSock.Disconnect; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.Disconnect'); - End; -{$ENDIF} - CloseConnection(Sock, True); -end; - -procedure TDXSock.CloseNow; -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.CloseNow'); - End; -{$ENDIF} - CloseConnection(Sock, False); -end; - -function TDXSock.IsValidSocket: Boolean; -begin - Result := Sock <> INVALID_SOCKET; -end; - -function TDXSock.IsConnected: Boolean; -begin - Result := (Sock <> INVALID_SOCKET) - and ((LastCommandStatus = 0) or (LastCommandStatus = WSAETIMEDOUT)); - if not Result and (CountWaiting > 0) then Result := True; -end; - -function TDXSock.IsReadable: Boolean; -begin - fReadTimeout := False; - Result := False; - if Sock = INVALID_SOCKET then exit; - Result:=BasicSelect(Sock,True,GlobalTimeout)>0; -// Global Timout sometimes sets these write - do we do it to be safe: - SetReceiveTimeout(Sock, TDXXferTimeout, FErrStatus); - SetSendTimeout(Sock, TDXXferTimeout, FErrStatus); - fErrStatus := 0; -end; - -function TDXSock.IsWritable: Boolean; -begin - fReadTimeout := False; - Result := False; - if Sock = INVALID_SOCKET then exit; - Result:=BasicSelect(Sock,False,GlobalTimeout)>0; -// Global Timout sometimes sets these write - do we do it to be safe: - SetReceiveTimeout(Sock, TDXXferTimeout, FErrStatus); - SetSendTimeout(Sock, TDXXferTimeout, FErrStatus); - fErrStatus := 0; -end; - -function TDXSock.DidReadTimeout: Boolean; -begin - Result := fReadTimeout; -end; - -function TDXSock.GetLocalPort: Integer; -begin - Result := 0; - if Sock = INVALID_SOCKET then exit; - Result:=uRODXSocket.GetLocalPort(Sock); -end; - -function TDXSock.GetLocalIPAddr: string; -begin - Result := ''; - if Sock = INVALID_SOCKET then exit; - Result:=uRODXSocket.GetLocalIPAddr(Sock); -end; - -function TDXSock.GetErrorStr: string; -begin - result := GetErrorDesc(GetLastError); -end; - -procedure TDXSock.WinsockVersion(var WinsockInfo: PWinsockInfo); -begin - if not Assigned(WinsockInfo) then Exit; - if not SocketLayerLoaded then Exit; - GetSocketVersion(WinsockInfo); -end; - -procedure TDXSock.SetNagle(TurnOn: Boolean); -begin - uRODXSocket.SetNagle(Sock, TurnOn, FErrStatus); -end; - -procedure TDXSock.SetBlocking(TurnOn: Boolean); -begin - fUseBlocking := TurnOn; - uRODXSocket.SetBlocking(Sock, TurnOn, FErrStatus); -end; - -function TDXSock.GetErrorDesc(errorCode: Integer): string; -begin - Result := uRODXSocket.GetErrorDesc(ErrorCode); -end; - -procedure TDXSock.SetfBlockSizeFlags(Value: TDXBlockSizeFlags); -begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.SetfBlockSizeFlags'); - End; -{$ENDIF} - If Assigned(fChunkBuf) then SysFreeMem(fChunkBuf); // ,FActualBlockSize); - fChunkBuf:=Nil; - fBlockSizeFlags := Value; - case FBlockSizeFlags of - bsfZero: fActualBlockSize := 0; - bsfRealSmall: fActualBlockSize := 128; - bsfSmall: fActualBlockSize := 256; - bsfNormal: fActualBlockSize := 512; - bsfBigger: fActualBlockSize := 2048; - bsfBiggest: fActualBlockSize := 4096; - {bsfHUGE:} - else fActualBlockSize := TDXHugeSize; - end; - If FBlockSizeFlags <> bsfZero then fChunkBuf:=SysGetMem(FActualBlockSize); -end; - -function TDXSOCK.CountWaiting: Integer; -begin - Result := uRODXSocket.CountWaiting(Sock, FErrStatus); - if FErrStatus <> 0 then begin - Result := 0; - Exit; - end; -end; - -function TDXSOCK.FilterRead(Const InBuf: Pointer; var OutBuf: Pointer; InSize: Integer;xClientThread: TThread): Integer; -var - Handled: Boolean; - -begin - if InSize > 0 then - if Assigned(feOnFilter) then begin - Handled := False; - Result := 0; - feOnFilter(ddAfterRead, InBuf, OutBuf, InSize, Result, Handled,xClientThread); - if not Handled then begin - fErrStatus := 9999; {onFilter failed!} - Exit; - end; - end; -end; - -// used by TDXSockClient only! -procedure TDXSock.SockClientSetGlobal(I:String;P:Integer); -Begin - GlobalPeerPort:=P; - GlobalPeerIPAddress:=I; -End; - -// new 3.0 features: -Function TDXSock.DroppedConnection:Boolean; -Begin - Result:=False; - If IsReadable then - If CharactersToRead=0 then Begin - CloseNow; // invalidates the handle - Result:=True; - End; -End; - -Function TDXSock.WaitForData(timeout:Longint):Boolean; -Var - StartTime:Cardinal; - -Begin -{$IFDEF CODE_TRACER} - If Assigned(CodeTracer) then Begin - CodeTracer.SendMessage(dxctDebug,'TDXSock.WaitForData'); - End; -{$ENDIF} - Result:=False; - StartTime:=Int64(TimeCounter)+timeout; - While Not uRODXString.TimeOut(StartTime) do Begin - If DroppedConnection then Begin - CloseNow; - Exit; - End - Else Begin - If CharactersToRead>0 then Begin - Result:=True; - Exit; - End - Else Begin - ProcessWindowsMessageQueue; - DoSleepEx(0); - End; - End; - End; -End; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSockClient.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSockClient.pas deleted file mode 100644 index d10ba32..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSockClient.pas +++ /dev/null @@ -1,697 +0,0 @@ -unit uRODXSockClient; - -/////////////////////////////////////////////////////////////////////////////// -// Component: TDXSockClient -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// This is a low-level wrapper for the Winsock dll. It is designed to be a -// CLIENT core. If you need to develop a client that supports server type -// connections, you should visit our DXSockClientFTP component. It demonstrates -// using this layer with an add-on for supporting listener routines. -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// - -interface -{$I uRODXSock.def} {2.0} -uses - Classes, - uRODXString, - uRODXSock, - uRODXSocket; - - - -type - TDX_Connecting=procedure(ConnectingTo:String;Port:Integer) of object; - TDX_Connected=procedure(ConnectedTo:String;Port:Integer) of object; - TDX_ConnectFailed=procedure(ConnectTo:String;ErrorCode:Integer) of object; - TDX_Disconnected=procedure(ConnectedTo:String) of object; - TDX_SendingData=procedure(ConnectTo:String;Bytes:Integer) of object; - TDX_DataSent=procedure(ConnectTo:String;Bytes:Integer) of object; - TDX_DataPendingRead=procedure(CharactersWaiting:Integer) of object; -// TDX_NewClientPendingAccept=procedure(Socket:u_Int) of object; - TDX_ResolvingHost=procedure(ConnectTo:String) of object; - TDX_ResolvedHost=procedure(ConnectTo:String;ResolvedTo:String) of object; - TDX_ResolveFailed=procedure(ConnectTo:String) of object; - - TDXSockClient=class(TDXComponent) - private - // Component Oriented Variables: - fsHost:String; - fiPort:Integer; - fbUseNagle:Boolean; - fbUseUDP:Boolean; - fbUseBlocking:Boolean; - // Events: - feResolvingHost:TDX_ResolvingHost; - feResolvedHost:TDX_ResolvedHost; - fMimicAsynch:Boolean; - feConnecting:TDX_Connecting; - feConnected:TDX_Connected; - feConnectFailed:TDX_ConnectFailed; - feSendingData:TDX_SendingData; - feSendingDone:TDX_DataSent; - feDisconnected:TDX_Disconnected; - // Asynch Notification Variables: - fNotifiedOfData:Boolean; - fLastAddress:String; - fLastIP:String; - -(* - feDataPendingRead:TDX_DataPendingRead; -// feNewClientPendingAccept:TDX_NewClientPendingAccept; - feResolveFailed:TDX_ResolveFailed; - fiSleepBetweenReads:Integer; -*) - protected -// Procedure CheckInBuffer; - Function GetPeerPort:Integer; - Function GetPeerIPAddr:String; - Function GetLocalPort:Integer; - Function GetLocalIPAddr:String; - Function IsConnected:Boolean; - Function IsValidSocket:Boolean; - Function IsReadable:Boolean; - Function IsWritable:Boolean; - Function DidReadTimeout:Boolean; -// Procedure SetfBlockSizeFlags(Value:TBlockSizeFlags); - Function CountWaiting:Integer; - Function GetFErrStatus:Integer; - public - Socket:TDXSock; - constructor Create(AOwner:TComponent); override; - Destructor Destroy; override; - Function DoConnect:Boolean; - Function QuickConnect(DestAddr:String;DestPort:Integer):Boolean; - Function Connect(Parameters:PNewConnect):Boolean; - Function Listen(Parameters:PNewListen):Boolean; - Function Accept(Var NewSock:TDXSockClient):Boolean; - Procedure Disconnect; {2.0} -{$IFDEF VER100} // D3 - Function WriteCh(c:Char):Integer; - Function Write(Const s:String):Integer; - Function BlockWrite(buf:Pointer;len:Integer):Integer; - Function BlockRead(buf:Pointer;len,tOut:Integer):Integer; - Function Read(tOut:Integer):Char; - Function SendFromStream(Stream:TStream):Boolean; - Function SendFromWindowsFile(var Handle:Integer):boolean; - Function SendFromBorlandFile(var Handle:File):boolean; - Function SaveToStream(Stream:TStream;Timeout:Integer):Boolean; - Function SaveToWindowsFile(var Handle:Integer;Timeout:Integer):boolean; - Function SaveToBorlandFile(var Handle:File;Timeout:Integer):boolean; -{$ELSE} // D4 or D5 - Function Read(buf:Pointer;len,tOut:Integer):Integer; overload; - Function Read(tOut:Integer):Char; overload; - Function Write(c:Char):Integer; overload; - Function Write(Const s:String):Integer; overload; - Function Write(buf:Pointer;len:Integer):Integer; overload; - Function SendFrom(Stream:TStream):Boolean; overload; - Function SendFrom(var Handle:Integer):boolean; overload; - Function SendFrom(var Handle:File):boolean; overload; - Function SaveTo(Stream:TStream;Timeout:Integer):Boolean; overload; - Function SaveTo(var Handle:Integer;Timeout:Integer):boolean; overload; - Function SaveTo(var Handle:File;Timeout:Integer):boolean; overload; -{$ENDIF} - Function WriteLn(Const s:String):Integer; - Function ReadStr(MaxLength,Timeout:Integer):String; {2.0.70} - Function ReadLn(Timeout: Longword): string; - Function PeekString:String; - Function PeekChar:Char; - Function GetErrorStr:String; - Function GetErrorDesc(errorCode:Integer):String; - Procedure SetNagle(TurnOn:Boolean); - Procedure SetBlocking(TurnOn:Boolean); {2.0} - Procedure WinsockVersion(Var WinsockInfo:PWinsockInfo); - published - Property Host:string read fsHost - write fsHost; - Property Port:Integer read fiPort - write fiPort; - Property EnabledNagle:Boolean read fbUseNagle - write fbUseNagle; - Property EnabledUDP:Boolean read fbUseUDP - write fbUseUdp; - Property EnabledBlocking:Boolean read fbUseBlocking - write fbUseBlocking; - Property PeerIPAddress:String read GetPeerIPAddr; {2.0} - Property PeerPort:Integer read GetPeerPort; {2.0} - Property LocalIPAddress:String read GetLocalIPAddr; {2.0} - Property LocalPort:Integer read GetLocalPort; {2.0} - Property Connected:Boolean read IsConnected; {2.0} - Property ValidSocket:Boolean read IsValidSocket; {2.0} - Property Readable:Boolean read IsReadable; {2.0} - Property Writable:Boolean read IsWritable; {2.0} - Property LastReadTimeout:Boolean read DidReadTimeout; {2.0} - Property CharactersToRead:Integer read CountWaiting; {2.0} - Property LastCommandStatus:Integer read GetFErrStatus; - Property ConnectingToServer:TDX_Connecting read feConnecting - write feConnecting; {2.0.70} - Property ConnectedToServer:TDX_Connected read feConnected - write feConnected; {2.0.70} - Property ConnectionFailed:TDX_ConnectFailed read feConnectFailed - write feConnectFailed; {2.0.70} - Property ConnectionTerminated:TDX_Disconnected read feDisconnected - write feDisconnected; {2.0.70} - Property SendInProgress:TDX_SendingData read feSendingData - write feSendingData; {2.0.70} - Property SendDone:TDX_DataSent read feSendingDone - write feSendingDone; {2.0.70} - Property ResolvingHost:TDX_ResolvingHost read feResolvingHost - write feResolvingHost; {2.0.70} - Property ResolvedHost:TDX_ResolvedHost read feResolvedHost - write feResolvedHost; {2.0.70} -(* Property CheckData:Integer read fiSleepBetweenReads - write fiSleepBetweenReads; - Property PacketType:TPacketTypeFlags read fPacketType - write fPacketType; - Property OutputBufferSize:TBlockSizeFlags read fBlockSizeFlags - write SetfBlockSizeFlags; - Property DataReadyToRead:TDX_DataPendingRead read feDataPendingRead - write feDataPendingRead; {2.0.70} - Property ResolveFailed:TDX_ResolveFailed read feResolveFailed - write feResolveFailed; {2.0.70} -*) - end; - -(* TDXClientThread=class(TThread) - private - TT:TDXSockClient; - protected - public - constructor CreateTimerThread(TT:TDXSockClient); - procedure Execute; override; - end; *) - -implementation - -constructor TDXSockClient.Create(AOwner:TComponent); -begin - inherited Create(AOwner); - Socket:=TDXSock.Create; - fsHost:='127.0.0.1'; - fiPort:=0; - fbUseNagle:=True; - fbUseUDP:=False; - fMimicAsynch:=False; - fNotifiedOfData:=False; - fbUseBlocking:=True; - fLastAddress:=''; - fLastIP:=''; -(* - fiSleepBetweenReads:=500; -*) -end; - -destructor TDXSockClient.Destroy; -begin -try - Socket.Free; -finally - inherited Destroy; -end; -end; - -Function TDXSockClient.DoConnect:Boolean; -Var - NewConnect:PNewConnect; - -Begin - New(NewConnect); - NewConnect^.Port:=fiPort; - NewConnect^.UseNAGLE:=fbUseNagle; - NewConnect^.UseUDP:=fbUseUDP; - NewConnect^.UseBlocking:=fbUseBlocking; - NewConnect^.ipAddress:=fsHost; - Result:=Connect(NewConnect); - Dispose(NewConnect); -End; - -Function TDXSockClient.QuickConnect(DestAddr:String;DestPort:Integer):Boolean; -Begin - fiPort:=DestPort; -// fbUseNagle:=True; -// fbUseUDP:=False; - fsHost:=DestAddr; - Result:=DoConnect; -End; - -Function TDXSockClient.Connect(Parameters:PNewConnect):Boolean; -Var - Ws:String; - fErrStatus:Integer; - Addr:String; - -begin - Result := False; - with Parameters^ do begin - fsHost:=ipAddress; - If Assigned(feResolvingHost) then Begin - feResolvingHost(ipAddress); - ProcessWindowsMessageQueue; - End; - If ipAddress<>fLastAddress then Begin - If isNumericString(ipAddress) then Begin - Ws:=GetHostByIPAddress(ipAddress); - Addr:=ipAddress; - End - Else Begin - Ws:=GetIPAddressByHost(ipAddress,1); - Addr:=Ws; - End; - fLastIP:=Addr; - fLastAddress:=ipAddress; - End - Else Begin - Addr:=fLastIP; - Ws:=fLastIP; - End; - If Ws='' then Ws:=ipAddress; - If Assigned(feResolvedHost) then Begin - feResolvedHost(ipAddress,Ws); - ProcessWindowsMessageQueue; - End; - FbUseBlocking := UseBlocking; - fbUseUDP := UseUDP; - Socket.IsUDPMode:=fbUseUDP; - If Assigned(feConnecting) then Begin - feConnecting(ipAddress,Port); - ProcessWindowsMessageQueue; - End; - Socket.Sock:=ClientConnectToServer(Addr, Port, UseUDP, UseNAGLE, - @Socket.SockAddr,fErrStatus); - Socket.LastCommandStatus:=fErrStatus; - if (FErrStatus <> 0) then Begin - If Assigned(feConnectFailed) then Begin - feConnectFailed(IpAddress,FErrStatus); - ProcessWindowsMessageQueue; - End; - Exit; - End; - Socket.SockClientSetGlobal( - inet_ntoa(Socket.SockAddr.sin_addr), - ntohs(Socket.SockAddr.sin_port)); - If Not UseBlocking then Socket.SetBlocking(UseBlocking); - Socket.IsKeepAliveMode:=False; -{ - if not FbUseUDP then begin - SetSockStatusBool(Socket.Sock, SO_KeepAlive, True, FErrStatus); - Socket.IsKeepAliveMode:=FErrStatus = 0; - end; -} Socket.SetTimeoutAndBuffer(Socket.Sock); - // 3.0c - if FbUseUDP then begin - // try to scale up the primary buffer. - SetReceiveBuffer(Socket.Sock, TDXMaxSocketBuffer*4, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Socket.Sock, TDXMaxSocketBuffer*3, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Socket.Sock, TDXMaxSocketBuffer*2, FErrStatus); - If FErrStatus<>0 then - SetReceiveBuffer(Socket.Sock, TDXMaxSocketBuffer, FErrStatus); - End; - end; - If Assigned(feConnected) then Begin - feConnected(Parameters^.IpAddress,Parameters^.Port); - ProcessWindowsMessageQueue; - End; - Result := True; - If fMimicAsynch then Begin - fNotifiedOfData:=False; -(* with TDXClientThread.CreateTimerThread(self) do begin - Priority:=tpIdle; // make a property! - Resume; - end; *) - End; -end; - -Function TDXSockClient.Listen(Parameters:PNewListen):Boolean; -begin - Result:=Socket.Listen(Parameters); -end; - -{$WARNINGS OFF} -function TDXSockClient.Accept(Var NewSock:TDXSockClient):Boolean; -begin -// Result:=Client.Accept(NewSock); - //mh: result := false; -end; -{$WARNINGS ON} - -{$IFDEF VER100} // D3 -function TDXSockClient.BlockWrite(buf:Pointer;len:Integer):Integer; -{$ELSE} -function TDXSockClient.Write(buf:Pointer;len:Integer):Integer; -{$ENDIF} -begin - If Assigned(feSendingData) then Begin - feSendingData(fsHost,Len); - ProcessWindowsMessageQueue; - End; - Result:=Socket. - {$IFDEF VER100} BlockWrite( {$ELSE} Write( {$ENDIF} - Buf,Len); - If Assigned(feSendingDone) then Begin - feSendingDone(fsHost,Result); - ProcessWindowsMessageQueue; - End; -end; - -{$IFDEF VER100} -function TDXSockClient.WriteCh(c:Char):Integer; -{$ELSE} -function TDXSockClient.Write(c:Char):Integer; -{$ENDIF} -begin -{$IFDEF VER100} // D3 - Result:=BlockWrite(@C,1); -{$ELSE} - Result:=Write(@C,1); -{$ENDIF} -end; - -function TDXSockClient.Write(Const S:String):Integer; -begin -{$IFDEF VER100} // D3 - Result:=BlockWrite(@S[1],Length(S)); -{$ELSE} - Result:=Write(@S[1],Length(S)); -{$ENDIF} -end; - -// this talks directly to DXSock to support OnFilter encoding -// thus, you can not do write(string+#13#10) you have to do it -// this way - to let TDXSock encode string and send raw #13#10! -function TDXSockClient.WriteLn(Const s:String):Integer; -begin - If Assigned(feSendingData) then Begin - feSendingData(fsHost,Length(S)); - ProcessWindowsMessageQueue; - End; - Result:=Socket.WriteLn(S); - If Assigned(feSendingDone) then Begin - feSendingDone(fsHost,Result); - ProcessWindowsMessageQueue; - End; -end; - -{$IFDEF VER100} -function TDXSockClient.BlockRead(buf:Pointer;len,tOut:Integer):Integer; -{$ELSE} -function TDXSockClient.Read(buf:Pointer;len,tOut:Integer):Integer; -{$ENDIF} -begin - Result:=Socket. - {$IFDEF VER100} BlockRead( {$ELSE} Read( {$ENDIF} - Buf,Len); - fNotifiedOfData:=False; -End; - -function TDXSockClient.Read(tOut:Integer):Char; -begin -{$IFDEF VER100} - BlockRead(@Result,1,tOut); -{$ELSE} - Read(@Result,1,tOut); -{$ENDIF} -end; - -function TDXSockClient.ReadStr(MaxLength,Timeout:Integer):String; -begin - Result:=Socket.ReadStr(MaxLength); - fNotifiedOfData:=False; -end; - -function TDXSockClient.ReadLn(Timeout: Longword): string; -begin - Result:=Socket.ReadLn(Timeout); - fNotifiedOfData:=False; -end; - -{$IFDEF VER100} -function TDXSockClient.SendFromStream(Stream:TStream):Boolean; -{$ELSE} -function TDXSockClient.SendFrom(Stream:TStream):Boolean; -{$ENDIF} -Begin - If Assigned(feSendingData) then Begin - feSendingData(fsHost,Stream.Size); - ProcessWindowsMessageQueue; - End; - Result:=Socket. - {$IFDEF VER100} SendFromStream( {$ELSE} SendFrom( {$ENDIF} - Stream); - If Assigned(feSendingDone) then Begin - feSendingDone(fsHost,Stream.Position); - ProcessWindowsMessageQueue; - End; - fNotifiedOfData:=False; -End; - -{$IFDEF VER100} -function TDXSockClient.SendFromWindowsFile(var Handle:Integer):boolean; -{$ELSE} -function TDXSockClient.SendFrom(var Handle:Integer):boolean; -{$ENDIF} -Begin - If Assigned(feSendingData) then Begin -// feSendingData(fsHost,Stream.Size); - ProcessWindowsMessageQueue; - End; - Result:=Socket. - {$IFDEF VER100} SendFromWindowsFile( {$ELSE} SendFrom( {$ENDIF} - Handle); - If Assigned(feSendingDone) then Begin -// feSendingDone(fsHost,Stream.Position); - ProcessWindowsMessageQueue; - End; - fNotifiedOfData:=False; -End; - -//***************************************************************************** -// SENDFROMBORLANDFILE: Send the Borland File handle to the socket until end of -// file -//***************************************************************************** -{$IFDEF VER100} -function TDXSockClient.SendFromBorlandFile(var Handle:File):boolean; -{$ELSE} -function TDXSockClient.SendFrom(var Handle:File):boolean; -{$ENDIF} -Begin - If Assigned(feSendingData) then Begin -// feSendingData(fsHost,Stream.Size); - ProcessWindowsMessageQueue; - End; - Result:=Socket. - {$IFDEF VER100} SendFromBorlandFile( {$ELSE} SendFrom( {$ENDIF} - Handle); - If Assigned(feSendingDone) then Begin -// feSendingDone(fsHost,Stream.Position); - ProcessWindowsMessageQueue; - End; - fNotifiedOfData:=False; -End; - -{$IFDEF VER100} -function TDXSockClient.SaveToStream(Stream:TStream;Timeout:Integer):Boolean; -{$ELSE} -function TDXSockClient.SaveTo(Stream:TStream;Timeout:Integer):Boolean; -{$ENDIF} -Begin - Result:=Socket. - {$IFDEF VER100} SaveToStream( {$ELSE} SaveTo( {$ENDIF} - Stream,Timeout); - fNotifiedOfData:=False; -End; - -{$IFDEF VER100} -function TDXSockClient.SaveToWindowsFile(var Handle:Integer;Timeout:Integer):boolean; -{$ELSE} -function TDXSockClient.SaveTo(var Handle:Integer;Timeout:Integer):boolean; -{$ENDIF} -Begin - Result:=Socket. - {$IFDEF VER100} SaveToWindowsFile( {$ELSE} SaveTo( {$ENDIF} - Handle,Timeout); - fNotifiedOfData:=False; -End; - -{$IFDEF VER100} -function TDXSockClient.SaveToBorlandFile(var Handle:File;Timeout:Integer):boolean; -{$ELSE} -function TDXSockClient.SaveTo(var Handle:File;Timeout:Integer):boolean; -{$ENDIF} -Begin - Result:=Socket. - {$IFDEF VER100} SaveToBorlandFile( {$ELSE} SaveTo( {$ENDIF} - Handle,Timeout); - fNotifiedOfData:=False; -End; - -function TDXSockClient.PeekString:String; -begin - Result:=Socket.PeekString; -end; - -function TDXSockClient.PeekChar:Char; -begin - Result:=Socket.PeekChar; -end; - -procedure TDXSockClient.Disconnect; -begin - if Not IsValidSocket then Exit; - If Assigned(feDisconnected) then Begin - feDisconnected(fsHost); - ProcessWindowsMessageQueue; - End; - Socket.CloseGracefully; -end; - -function TDXSockClient.IsValidSocket:Boolean; -Begin - If Assigned(Socket) then Result:=Socket.ValidSocket - Else Result:=False; -End; - -function TDXSockClient.IsConnected:Boolean; -begin - If Assigned(Socket) then Result:=Socket.Connected - Else Result:=False; -end; - -function TDXSockClient.IsReadable:Boolean; -begin - If Assigned(Socket) then Result:=Socket.Readable - Else Result:=False; -end; - -function TDXSockClient.IsWritable:Boolean; -begin - If Assigned(Socket) then Result:=Socket.Writable - Else Result:=False; -end; - -Function TDXSockClient.DidReadTimeout:Boolean; -Begin - If Assigned(Socket) then Result:=Socket.LastReadTimeout - Else Result:=True; -End; - -function TDXSockClient.GetPeerPort:Integer; -begin - If Assigned(Socket) then Result:=Socket.PeerPort - Else Result:=-1; -end; - -function TDXSockClient.GetPeerIPAddr:String; -begin - If Assigned(Socket) then Result:=Socket.PeerIPAddress - Else Result:=''; -end; - -function TDXSockClient.GetLocalPort:Integer; -begin - If Assigned(Socket) then Result:=Socket.LocalPort - Else Result:=-1; -end; - -function TDXSockClient.GetLocalIPAddr:String; -begin - If Assigned(Socket) then Result:=Socket.LocalIPAddress - Else Result:=''; -end; - -Function TDXSockClient.GetErrorStr:String; -begin - If Assigned(Socket) then Result:=Socket.GetErrorStr - Else Result:='Socket instance does not exist'; -end; - -Procedure TDXSockClient.WinsockVersion(Var WinsockInfo:PWinsockInfo); -begin - Socket.WinsockVersion(WinsockInfo); -end; - -Procedure TDXSockClient.SetNagle(TurnOn:Boolean); -Begin - fbUseNagle:=TurnOn; - Socket.SetNagle(fbUseNagle); -End; - -Procedure TDXSockClient.SetBlocking(TurnOn:Boolean); -Begin - fbUseBlocking:=TurnOn; - Socket.SetBlocking(fbUseBlocking); -End; - -function TDXSockClient.GetErrorDesc(errorCode:Integer):String; -begin - Result:=Socket.GetErrorDesc(ErrorCode); -end; - -Function TDXSockClient.CountWaiting:Integer; -Begin - Result:=Socket.CharactersToRead; -End; - -Function TDXSockClient.GetFErrStatus:Integer; -Begin - Result:=Socket.LastCommandStatus; -End; - -(* Procedure TDXSockClient.CheckInBuffer; -Var - MsgRec:TMsg; - -Begin - While isValidSocket do Begin - If (CountWaiting>0) then Begin - If (Not fNotifiedOfData) then Begin - fNotifiedOfData:=True; - if Assigned(feDataPendingRead) then - feDataPendingRead(CountWaiting); - End - End; - SleepEx(fiSleepBetweenReads,True); - {2.0.91} - while PeekMessage(MsgRec,0{WindowHandle},0,0,PM_REMOVE) do begin - TranslateMessage(MsgRec); - DispatchMessage(MsgRec) - end; - End; -End; - -constructor TDXClientThread.CreateTimerThread(TT:TDXSockClient); -begin - inherited Create(true); - self.tt:=tt; - FreeOnTerminate:=true; -end; - -procedure TDXClientThread.Execute; -begin - Synchronize(TT.CheckInBuffer); -end; *) - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSocket.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSocket.pas deleted file mode 100644 index a2544be..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXSocket.pas +++ /dev/null @@ -1,1067 +0,0 @@ -{$I uRODXSock.def} - -unit uRODXSocket; - -/////////////////////////////////////////////////////////////////////////////// -// Unit: DXSocket -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: Low-Level Socket Wrapper, producing a common framework. -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// - -interface - -{$IFDEF LINUX} -uses - {$IFDEF FPC}baseunix, {$ENDIF} - Libc; -{$ELSE} -uses - Windows, - Winsock; -{$ENDIF} - -{$IFDEF LINUX} -Const - INVALID_SOCKET=Libc.INVALID_SOCKET; - SO_KeepAlive=Libc.SO_KEEPALIVE; - WSAEINTR=Libc.EINTR; - WSAEBADF=Libc.EBADF; - WSAEACCES=Libc.EACCES; - WSAEFAULT=Libc.EFAULT; - WSAEINVAL=Libc.EINVAL; - WSAEMFILE=Libc.EMFILE; - WSAEWOULDBLOCK=Libc.EWOULDBLOCK; - WSAEINPROGRESS=Libc.EINPROGRESS; - WSAEALREADY=Libc.EALREADY; - WSAENOTSOCK=Libc.ENOTSOCK; - WSAEDESTADDRREQ=Libc.EDESTADDRREQ; - WSAEMSGSIZE=Libc.EMSGSIZE; - WSAEPROTOTYPE=Libc.EPROTOTYPE; - WSAENOPROTOOPT=Libc.ENOPROTOOPT; - WSAEPROTONOSUPPORT=Libc.EPROTONOSUPPORT; - WSAESOCKTNOSUPPORT=Libc.ESOCKTNOSUPPORT; - WSAEOPNOTSUPP=Libc.EOPNOTSUPP; - WSAEPFNOSUPPORT=Libc.EPFNOSUPPORT; - WSAEAFNOSUPPORT=Libc.EAFNOSUPPORT; - WSAEADDRINUSE=Libc.EADDRINUSE; - WSAEADDRNOTAVAIL=Libc.EADDRNOTAVAIL; - WSAENETDOWN=Libc.ENETDOWN; - WSAENETUNREACH=Libc.ENETUNREACH; - WSAENETRESET=Libc.ENETRESET; - WSAECONNABORTED=Libc.ECONNABORTED; - WSAECONNRESET=Libc.ECONNRESET; - WSAENOBUFS=Libc.ENOBUFS; - WSAEISCONN=Libc.EISCONN; - WSAENOTCONN=Libc.ENOTCONN; - WSAESHUTDOWN=Libc.ESHUTDOWN; - WSAETOOMANYREFS=Libc.ETOOMANYREFS; - WSAETIMEDOUT=Libc.ETIMEDOUT; - WSAECONNREFUSED=Libc.ECONNREFUSED; - WSAELOOP=Libc.ELOOP; - WSAENAMETOOLONG=Libc.ENAMETOOLONG; - WSAEHOSTDOWN=Libc.EHOSTDOWN; - WSAEHOSTUNREACH=Libc.EHOSTUNREACH; - WSAENOTEMPTY=Libc.ENOTEMPTY; - WSAEPROCLIM=1000; // not applicable - WSAEUSERS=Libc.EUSERS; - WSAEDQUOT=Libc.EDQUOT; - WSAESTALE=Libc.ESTALE; - WSAEREMOTE=Libc.EREMOTE; - WSASYSNOTREADY=1001; // not applicable - WSAVERNOTSUPPORTED=1002; // not applicable - WSANOTINITIALISED=1003; // not applicable - WSAHOST_NOT_FOUND=Libc.HOST_NOT_FOUND; - WSATRY_AGAIN=Libc.TRY_AGAIN; - WSANO_RECOVERY=Libc.NO_RECOVERY; - WSANO_DATA=Libc.ENODATA; - WSAUNKNOWN=Libc.UNKNOWN_REQUEST; - Socket_Error=Libc.SOCKET_ERROR; -{$ELSE} -Const - INVALID_SOCKET=Winsock.INVALID_SOCKET; - SO_KeepAlive=Winsock.SO_KEEPALIVE; - WSAENOBUFS=Winsock.WSAENOBUFS; - WSAETIMEDOUT=Winsock.WSAETIMEDOUT; - WSAECONNABORTED=Winsock.WSAECONNABORTED; - Socket_Error=Winsock.SOCKET_ERROR; - // 7-27: - WSAEWOULDBLOCK=Winsock.WSAEWOULDBLOCK; -{$ENDIF} - -{$IFDEF VER100} -type - in_addr = TInAddr; -{$ENDIF} - -Type -{$IFDEF LINUX} - TSockAddrIn=Libc.TSockAddrin; - TTimeVal=Libc.TTimeVal; - TFDSet=Libc.TFDSet; -{$ELSE} - TSockAddrIn=Winsock.TSockAddrIn; - TTimeVal=Winsock.TTimeVal; - TFDSet=Winsock.TFDSet; -{$ENDIF} - PNewConnect=^TNewConnect; - TNewConnect=Record - Port:Integer; - UseNAGLE:Boolean; - UseUDP:Boolean; - UseBlocking:Boolean; - ipAddress:String; - End; - - PNewListen=^TNewListen; - TNewListen=Record - Port:Integer; - WinsockQueue:Integer; - UseNAGLE:Boolean; - UseUDP:Boolean; - UseBlocking:Boolean; - ConnectionLess:Boolean; - End; - - PWinsockInfo=^TWinsockInfo; // 2.3 changed array from 0.. to 1.. - TWinsockInfo=Record - Major_Version:Byte; {current version} - Minor_Version:Byte; {current version} - Highest_Major_Version:Byte; {available on disk} - Highest_Minor_Version:Byte; {available on disk} - Description:array[1..256] of Char; // C++ Char Description[256]; - SystemStatus:array[1..128] of Char; // C++ Char Description[128]; - MaxSockets:Word; // C++ Unsigned short MaxSockets; - MaxUDPDatagramSize:Word; // C++ Unsigned short MaxUDPDatagramSize; - VendorInfo:PChar; // C++ Char FAR * VendorInfo; - End; - -Const - ConstSizeofTSockAddrIn=16; - -Function CreateSocket(sin_family,socket_type,protocol:integer; - Var ErrorCode:Integer):TSocket; -Function ClientConnectToServer(ServerIPAddress:String; - ServerPort:Integer; - UseUDP,UseNAGLE:Boolean; - ResultSockAddr:PSockAddr; - Var ErrorCode:Integer):TSocket; -Function BindAndListen(BindToIPAddress:String; - BindToPort,WinsockQueue:Integer; - UseUDP,UseNAGLE,ConnectionLess:Boolean; - ResultSockAddr:PSockAddr; - Var ErrorCode:Integer):TSocket; -Function IsAcceptWaiting(ListenerSock:TSocket):Boolean; -Function AcceptNewConnect(ListenerSock:TSocket; - ResultAddr:PSockAddr; - ResultAddrlen:PInteger; - Var ErrorCode:Integer):TSocket; -Procedure CloseConnection(Var Sock:TSocket; - Gracefully:Boolean); -Function BasicSend(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var ErrorCode:Integer):Integer; -Function BasicRecv(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var ErrorCode:Integer):Integer; -Function UDPSend(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - SendTo:TSockAddr; - SendToSize:Integer; - Var ErrorCode:Integer):Integer; -Function UDPRecv(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var RcvFrom:TSockAddr; - Var RcvFromSize:Integer; - Var ErrorCode:Integer):Integer; -Function BasicPeek(Sock:TSocket; - Var Buf; - Len:Integer):Integer; -Function BasicSelect(Sock:TSocket; - CheckRead:Boolean; - Timeout:TTimeVal):Integer; -Procedure SetNagle(Sock:TSocket; - TurnOn:Boolean; - Var ErrorCode:Integer); -Procedure SetBlocking(Sock:TSocket; - UseBlocking:Boolean; - Var ErrorCode:Integer); -Procedure SetReceiveTimeout(Sock:TSocket; - TimeoutMS:Integer; - Var ErrorCode:Integer); -Procedure SetSendTimeout(Sock:TSocket; - TimeoutMS:Integer; - Var ErrorCode:Integer); -Procedure SetReceiveBuffer(Sock:TSocket; - WantedSize:Integer; - Var ErrorCode:Integer); -Procedure SetSendBuffer(Sock:TSocket; - WantedSize:Integer; - Var ErrorCode:Integer); -Function GetReceiveBuffer(Sock:TSocket; - Var ErrorCode:Integer):Integer; -Function GetSendBuffer(Sock:TSocket; - Var ErrorCode:Integer):Integer; -Function GetSockStatusBool(Sock:TSocket; - SO_Flag:Integer; - Var ErrorCode:Integer):Boolean; -Function GetSockStatusInt(Sock:TSocket; - SO_Flag:Integer; - Var ErrorCode:Integer):Integer; -Procedure SetSockStatusBool(Sock:TSocket; - SO_Flag:Integer; - Setting:Boolean; - Var ErrorCode:Integer); -Procedure SetSockStatusInt(Sock:TSocket; - SO_Flag:Integer; - Setting:Integer; - Var ErrorCode:Integer); -Function CountWaiting(Sock:TSocket; - Var ErrorCode:Integer):Integer; -Function GetAddressCountByIP(IPAddress:String):Integer; -Function GetAddressCountByHost(Host:String):Integer; -Function GetIPAddressByHost(Host:String;Which:Integer):String; -Function GetHostByIPAddress(IPAddress:String):String; -Function GetLocalHostName:String; -function GetLocalPort(Sock:TSocket):Integer; -function GetLocalIPAddr(Sock:TSocket):string; -function GetLastError:Integer; -Function GetErrorDesc(ErrorCode:Integer):String; -function ByteSwap4(long:Cardinal):Cardinal; -function ByteSwap2(short:smallint):smallint; -Function IPIntToIPStr(IPAddr:Integer):String; -Function IPStrToIPInt(IPAddr:String):Integer; -Function SocketLayerLoaded:Boolean; -Procedure GetSocketVersion(WinsockInfo:PWinsockInfo); -Function ntohs(netshort:Word):Word; -Function inet_ntoa(inaddr:in_addr):PChar; -Function htonl(Hostlong:Integer):Integer; -Function ntohl(Netlong:Integer):Integer; -Function SetErrorCode(ResultCode:Integer):Integer; - -implementation - -Uses - uRODXString, - SysUtils; - -Var -{$IFNDEF LINUX} - DLLData:TWSAData; -{$ENDIF} - StartupResult:Integer; - GlobalTimeout:TTimeVal; //6-9 - -Var -{$IFDEF LINUX} - SizeOfInt:Cardinal=4; // optimize compiling -{$ELSE} - SizeOfInt:Integer=4; // optimize compiling -{$ENDIF} - -{$IFDEF ENGLISH1} -{$I Resource_English.inc} -{$ENDIF} -{$IFDEF FRENCH1} -{$I Resource_French.inc} -{$ENDIF} -{$IFDEF GERMAN1} -{$I Resource_German.inc} -{$ENDIF} -{$IFDEF ITALIAN1} -{$I Resource_Italian.inc} -{$ENDIF} -{$IFDEF LOWMEM1} -{$I Resource_LowMem.inc} -{$ENDIF} -{$IFDEF PORTUGUESE1} -{$I Resource_Portuguese.inc} -{$ENDIF} -{$IFDEF RUSSIAN1} -{$I Resource_Russian.inc} -{$ENDIF} -{$IFDEF SPANISH1} -{$I Resource_Spanish.inc} -{$ENDIF} -{$IFDEF TURKISH1} -{$I Resource_Turkish.inc} -{$ENDIF} - -{$IFDEF LINUX} -Function WSAGetLastError:Integer; -Begin - Result:={$IFNDEF FPC}System.GetLastError{$ELSE}fpGetErrno{$ENDIF} -End; -{$ENDIF} - -Function CreateSocket(sin_family,socket_type,protocol:integer; - Var ErrorCode:Integer):TSocket; -Begin - ErrorCode:=0; -// 7-27 Case StartupResult of -// 7-27 999:Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}Socket(sin_family,socket_type,protocol); - If Result=Invalid_Socket then ErrorCode:=WSAGetLastError; -// 7-27 End -// 7-27 Else Begin -// 7-27 Result:=Invalid_Socket; -// 7-27 ErrorCode:=WSANotInitialised; -// 7-27 End; -// 7-27 End; -End; - -Function SetErrorCode(ResultCode:Integer):Integer; -Begin - If ResultCode=Socket_Error then Result:=WSAGetLastError - Else Result:=0; -End; - -Procedure SetNagle(Sock:TSocket; - TurnOn:Boolean; - Var ErrorCode:Integer); -Var - TA:Array[0..3] of Char; - -Begin - If Not TurnOn then TA:='1111' - Else TA:='0000'; - ErrorCode:=SetErrorCode(SetSockOpt(Sock,IPPROTO_TCP,TCP_NODELAY,@TA,SizeofInt)); -End; - -Procedure SetBlocking(Sock:TSocket; - UseBlocking:Boolean; - Var ErrorCode:Integer); -{$IFDEF LINUX} -Const - FIONBIO=$5421; -{$ENDIF} - -Var -{$IFDEF VER90} - iBlocking:u_long; -{$ELSE} - iBlocking:Integer; -{$ENDIF} - -Begin - If UseBlocking then iBlocking:=0 - Else iBlocking:=1; - ErrorCode:=SetErrorCode( - {$IFDEF VER90} - Winsock.ioctlsocket(Sock,FIONBIO,iBlocking) - {$ELSE} - {$IFDEF LINUX}Libc.ioctl(Sock,FIONBIO,iBlocking) - {$ELSE}Winsock.ioctlsocket(Sock,FIONBIO,iBlocking) - {$ENDIF} - {$ENDIF} - ); -End; - -Procedure SetReceiveTimeout(Sock:TSocket; - TimeoutMS:Integer; - Var ErrorCode:Integer); -Begin - ErrorCode:=SetErrorCode(setsockopt(Sock,SOL_SOCKET,SO_RCVTIMEO,@TimeoutMS,SizeOfInt)); -End; - -Procedure SetSendTimeout(Sock:TSocket; - TimeoutMS:Integer; - Var ErrorCode:Integer); -Begin - ErrorCode:=SetErrorCode(setsockopt(Sock,SOL_SOCKET,SO_SNDTIMEO,@TimeoutMS,SizeofInt)); -End; - -Procedure SetReceiveBuffer(Sock:TSocket; - WantedSize:Integer; - Var ErrorCode:Integer); -Begin - ErrorCode:=SetErrorCode(setsockopt(Sock,SOL_SOCKET,SO_RCVBUF,@WantedSize,SizeofInt)); -End; - -Function GetSockStatusBool(Sock:TSocket; - SO_Flag:Integer; - Var ErrorCode:Integer):Boolean; -Var - Rslt:Boolean; - -Begin -// 7-27 - ErrorCode:=SetErrorCode(GetSockOpt(Sock,SOL_SOCKET,SO_Flag,PChar(@Rslt),SizeofInt)); - If ErrorCode=0 then Result:=Rslt - Else Result:=False; -End; - -Function GetSockStatusInt(Sock:TSocket; - SO_Flag:Integer; - Var ErrorCode:Integer):Integer; -Var - Rslt:Integer; - -Begin -// 7-27 - ErrorCode:=SetErrorCode(GetSockOpt(Sock,SOL_SOCKET,SO_Flag,PChar(@Rslt),SizeofInt)); - If ErrorCode=0 then Result:=Rslt - Else Result:=0; -End; - -Procedure SetSockStatusBool(Sock:TSocket; - SO_Flag:Integer; - Setting:Boolean; - Var ErrorCode:Integer); -var - intval:integer; - -Begin - if (Setting) then intval:=1 - else intval:=0; - ErrorCode:=SetErrorCode(SetSockOpt(Sock,SOL_Socket,SO_Flag,@intval,SizeofInt)); -End; - -Procedure SetSockStatusInt(Sock:TSocket; - SO_Flag:Integer; - Setting:Integer; - Var ErrorCode:Integer); -Begin - ErrorCode:=SetErrorCode(SetSockOpt(Sock,SOL_Socket,SO_Flag,@Setting,SizeofInt)); -End; - - -Procedure SetSendBuffer(Sock:TSocket; - WantedSize:Integer; - Var ErrorCode:Integer); -Begin - ErrorCode:=SetErrorCode(setsockopt(Sock,SOL_SOCKET,SO_SNDBUF,@WantedSize,SizeofInt)); -End; - -Function GetReceiveBuffer(Sock:TSocket; - Var ErrorCode:Integer):Integer; -Begin - Result:=GetSockStatusInt(Sock,SO_RCVBUF,ErrorCode); -End; - -Function GetSendBuffer(Sock:TSocket; - Var ErrorCode:Integer):Integer; -Begin - Result:=GetSockStatusInt(Sock,SO_SNDBUF,ErrorCode); -End; - -Procedure KillSocket(Var Sock:TSocket); -Begin - If Sock<>Invalid_Socket then Begin - ShutDown(Sock,2); -{$IFDEF LINUX} - Libc.__close(Sock); -{$ELSE} - CloseSocket(Sock); -{$ENDIF} - Sock:=Invalid_Socket; - End; -End; - -Procedure CloseConnection(Var Sock:TSocket; - Gracefully:Boolean); -Var -{$IFDEF VER100} // Delphi3 code - Lin:TLinger; -{$ELSE} - Lin:Linger; -{$ENDIF} - -Begin - If Sock=Invalid_Socket then Exit; - Lin.l_linger:=0; - If Gracefully then Begin - Lin.l_onoff:=1; // Not(0); - {$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}setsockopt(Sock,SOL_SOCKET,SO_LINGER,@lin,Sizeof(Lin)); - End - Else Begin - Lin.l_onoff:=0; - {$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}setsockopt(Sock,SOL_SOCKET,SO_LINGER,@lin,sizeof(lin)); {DONT 2.0.f} - End; -// DoSleepEx(0); - KillSocket(Sock); -End; - -Function ClientConnectToServer(ServerIPAddress:String; - ServerPort:Integer; - UseUDP,UseNAGLE:Boolean; - ResultSockAddr:PSockAddr; - Var ErrorCode:Integer):TSocket; -{$IFDEF LINUX} -Const - SOCK_dgram=2; - SOCK_stream=1; -{$ENDIF} - -begin - Result:=Invalid_Socket; - If ServerIPAddress='' then Exit; - ServerIPAddress:=FixDottedIp(ServerIPAddress); - FillChar(ResultSockAddr^,Sizeof(ResultSockAddr^),#0); - ResultSockAddr.sin_family:=AF_INET; - ResultSockAddr.sin_port:=htons(ServerPort); - ResultSockAddr.sin_addr.S_addr:=Inet_Addr(Pchar(ServerIPAddress)); - Case UseUDP of - True:Begin - Result:=CreateSocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,ErrorCode); - Exit; - End; - Else Begin - Result:=CreateSocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,ErrorCode); - If (Result<>Invalid_Socket) and (Not UseNAGLE) then - SetNAGLE(Result,UseNAGLE,ErrorCode); - End; - End; - If Result=Invalid_Socket then Exit; - SetSendTimeout(Result,5000,ErrorCode); - If Connect(Result,ResultSockAddr^,ConstSizeofTSockAddrIn)=SOCKET_ERROR then begin - ErrorCode:=WSAGetLastError; - KillSocket(Result); - End; -end; - -Function BindAndListen(BindToIPAddress:String; - BindToPort,WinsockQueue:Integer; - UseUDP,UseNAGLE,ConnectionLess:Boolean; - ResultSockAddr:PSockAddr; - Var ErrorCode:Integer):TSocket; -{$IFDEF LINUX} -Const - SOCK_dgram=2; - SOCK_stream=1; -{$ENDIF} - -begin - FillChar(ResultSockAddr^,Sizeof(ResultSockAddr^),#0); // DO ! USE ZEROMEMORY -// SPX: Result:=CreateSocket(AF_IPX,SOCK_STREAM,NSPROTO_SPX,ErrorCode); -// IPX: Result:=CreateSocket(AF_IPX,SOCK_DGRAM,NSPROTO_IPX,ErrorCode); - Case UseUDP of - True:Result:=CreateSocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,ErrorCode); - Else Begin - Result:=CreateSocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,ErrorCode); - If (Result<>Invalid_Socket) and (Not UseNAGLE) then SetNAGLE(Result,UseNAGLE,ErrorCode); - End; - End; - If Result=Invalid_Socket then Exit; - ResultSockAddr.sin_family:=AF_INET; - ResultSockAddr.sin_port:=htons(BindToPORT); -// 7-27 - if (length(BindToIPAddress)<7) then ResultSockAddr.sin_addr.S_addr:=INADDR_ANY - else ResultSockAddr.sin_addr.S_addr:=Inet_Addr(PChar(BindToIPAddress)); - If Bind(Result,ResultSockAddr^,ConstSizeofTSockAddrIn)=Socket_Error then Begin - Result:=Invalid_Socket; - ErrorCode:=WSAGetLastError; - Exit; - End; -// 7-27 - If Not ConnectionLess then - If Listen(Result,WinsockQueue)=Socket_Error then Begin - Result:=Invalid_Socket; - ErrorCode:=WSAGetLastError; - End; -End; - -Function IsAcceptWaiting(ListenerSock:TSocket):Boolean; -{$IFNDEF LINUX} -Var - SockList:TFDSet; -{$ENDIF} - -Begin -{$IFDEF LINUX} - Result:=BasicSelect(ListenerSock,True,GlobalTimeout)>0; -{$ELSE} - SockList.fd_count:=1; - SockList.fd_array[0]:=ListenerSock; - Result:=Select(0,@sockList,nil,nil,@GlobalTimeout)>0; -{$ENDIF} -End; - -Function AcceptNewConnect(ListenerSock:TSocket; - ResultAddr:PSockAddr; - ResultAddrlen:PInteger; - Var ErrorCode:Integer):TSocket; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}Accept(ListenerSock, -{$IFDEF VER90} - ResultAddr^,ResultAddrLen^); -{$ELSE} -{$IFDEF LINUX} - ResultAddr,PSocketLength(ResultAddrLen)); -{$ELSE} - ResultAddr,ResultAddrLen); -{$ENDIF} -{$ENDIF} - If Result=Invalid_Socket then ErrorCode:=WSAGetLastError - Else If ResultAddrLen^=0 then ErrorCode:=WSAEFault - Else ErrorCode:=0; -End; - -Function BasicSend(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var ErrorCode:Integer):Integer; -Begin -// Result:=Socket_Error; -// ErrorCode:=WSAEINTR; -// While (Result<0) and ((ErrorCode=WSAEINTR) or (ErrorCode=WSAETIMEDOUT)) do Begin - Result:=Send(Sock,Buf,Len,Flags); - ErrorCode:=SetErrorCode(Result); -// End; -End; - -Function UDPSend(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - SendTo:TSockAddr; - SendToSize:Integer; - Var ErrorCode:Integer):Integer; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}SendTo(Sock,Buf,Len,Flags,{$IFDEF LINUX}{$IFDEF FPC}@{$ENDIF}{$ENDIF}SendTo,SendToSize); - ErrorCode:=SetErrorCode(Result); -End; - -Function BasicRecv(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var ErrorCode:Integer):Integer; -Begin -// 7-27 If Sock<>Invalid_Socket then Begin - Result:=Recv(Sock,Buf,Len,Flags); - ErrorCode:=SetErrorCode(Result); -// 7-27 End -// 7-27 Else Result:=0; -End; - -Function UDPRecv(Sock:TSocket; - Var Buf; - Len:Integer; - Flags:Integer; - Var RcvFrom:TSockAddr; - Var RcvFromSize:Integer; - Var ErrorCode:Integer):Integer; -Begin -// 7-27 If Sock<>Invalid_Socket then Begin - Result:={$IFDEF LINUX}Libc.recvfrom(Sock,Buf,Len,Flags,@RcvFrom,@RcvFromSize); - {$ELSE}Winsock.recvfrom(Sock,Buf,Len,Flags,RcvFrom,RcvFromSize); - {$ENDIF} - ErrorCode:=SetErrorCode(Result); -// 7-27 End -// 7-27 Else Result:=0; -End; - -Function BasicPeek(Sock:TSocket; - Var Buf; - Len:Integer):Integer; -Begin -// 7-27 If Sock<>Invalid_Socket then Begin - Result:=Recv(Sock, Buf, Len, MSG_PEEK); -// 7-27 End -// 7-27 Else Result:=Socket_Error; -End; - -Function BasicSelect(Sock:TSocket; - CheckRead:Boolean; - Timeout:TTimeVal):Integer; -var - SockList: TFDSet; - -Begin -{$IFDEF LINUX} - FD_ZERO(SockList); - SockList.fds_bits[0]:=Sock; - If CheckRead then - Result:=Select(1,@SockList,nil,nil,@Timeout) - Else - Result:=Select(1,nil,@SockList,nil,@Timeout); -{$ELSE} - SockList.fd_count:=1; - SockList.fd_array[0]:=Sock; - If CheckRead then - Result:=Select(0,@sockList,nil,nil,@Timeout) - Else - Result:=Select(0,nil,@sockList,nil,@Timeout) -{$ENDIF} -End; - -Function CountWaiting(Sock:TSocket;Var ErrorCode:Integer):Integer; -{$IFDEF LINUX} -Const - FIONREAD=$541B; -{$ENDIF} -var - numWaiting:longint; - -begin - Result:=0; -// in linux IOCtl is used to "set" not "get" values. - ErrorCode:=SetErrorCode({$IFDEF LINUX}Libc.IOCtl(Sock,FIONREAD,numWaiting)); - {$ELSE}Winsock.IOCtlSocket(Sock,FIONREAD,numWaiting)); - {$ENDIF} - If ErrorCode=0 then Result:=numWaiting; -end; - -Function GetAddressCountByIP(IPAddress:String):Integer; -Var - HostEnt:PHostEnt; - InAddr:u_long; - -Begin -// 7-27 if IPAddress='' then Begin -// 7-27 Result:=0; -// 7-27 Exit; -// 7-27 End; - IPAddress:=FixDottedIp(IPAddress); - InAddr:=inet_addr(PChar(IPAddress)); -{$WARNINGS OFF} -// 7-27 If InAddr=INADDR_NONE then Begin -// 7-27 Result:=0; -// 7-27 Exit; -// 7-27 End; - HostEnt:=gethostbyaddr(@InAddr,Length(IPAddress),AF_INET); -// 7-27 - If Assigned(HostEnt) then Result:=HostEnt.h_length div 4 - Else Result:=0; -{$WARNINGS ON} -End; - -Function GetAddressCountByHost(Host:String):Integer; -Var - HostEnt:PHostEnt; - -Begin -// 7-27 if Host='' then Begin -// 7-27 Result:=0; -// 7-27 Exit; -// 7-27 End; - HostEnt:=gethostbyname(PChar(Host)); -// 7-27 - If Assigned(HostEnt) then Result:=GetAddressCountByIP(HostEnt.h_addr^) - Else Result:=0; -End; - -Function GetIPAddressByHost(Host:String;Which:Integer):String; -Var - HostEnt:PHostEnt; - iAddr:Integer; - -Begin -// 7-27 if (Host='') or (Which<1) then Begin -// 7-27 Result:=''; -// 7-27 Exit; -// 7-27 End; - HostEnt:=gethostbyname(PChar(Host)); - If Assigned(HostEnt) then Begin - If Which<=(HostEnt.h_length div 4) then Begin - Move(PByteArray(HostEnt.h_addr_list^)[(Which-1)*4],iAddr,4); - Result:=inet_ntoa(in_Addr(iAddr)); - End - Else Result:=''; - End - Else Result:=''; -End; - -Function GetHostByIPAddress(IPAddress:String):String; -Var - HostEnt:PHostEnt; - InAddr:u_long; - -Begin -// 7-27 if IPAddress='' then Begin -// 7-27 Result:=''; -// 7-27 Exit; -// 7-27 End; - IPAddress:=FixDottedIp(IPAddress); - InAddr:=inet_addr(PChar(IPAddress)); -{$WARNINGS OFF} -// 7-27 If InAddr=INADDR_NONE then Begin -// 7-27 Result:=''; -// 7-27 Exit; -// 7-27 End; - HostEnt:=gethostbyaddr(@InAddr,Length(IPAddress),AF_INET); -// 7-27 - If Assigned(HostEnt) then Result:=StrPas(HostEnt.h_name) - Else Result:=''; -{$WARNINGS ON} -End; - -Function GetLocalHostName:String; -Begin - Result:=GetHostByIPAddress( - GetIPAddressByHost('localhost',1)); - If Result='' then Result:='Localhost'; -End; - -function GetLocalPort(Sock:TSocket):Integer; -var - addr: TSockAddrIn; -{$IFDEF LINUX} - addrlen: cardinal; -{$ELSE} - addrlen: integer; -{$ENDIF} - -begin - addrlen:=ConstSizeofTSockAddrIn; - if getsockname(Sock,addr,addrlen)=0 then Result:=ntohs(addr.sin_port) - else Result := 0; -end; - -function GetLocalIPAddr(Sock:TSocket):string; -var - addr: TSockAddrIn; -{$IFDEF LINUX} - addrlen: cardinal; -{$ELSE} - addrlen: integer; -{$ENDIF} - -begin - addrlen:=ConstSizeofTSockAddrIn; - FillChar(Addr,Sizeof(TSockAddrIn),#0); - getsockname(Sock,addr,addrlen); - Result:=inet_ntoa(addr.sin_addr); -end; - -Procedure GetRemoteSockAddr(Sock:TSocket; - ResultAddr:PSockAddr; - ResultAddrlen:PInteger; - Var ErrorCode:Integer); -{$IFDEF LINUX} -Var - TmpAddrLen:Cardinal; -{$ENDIF} - -Begin -{$IFDEF LINUX} - ErrorCode:=SetErrorCode(getpeername(Sock,ResultAddr^,TmpAddrlen)); - ResultAddrLen^:=TmpAddrLen; -{$ELSE} - ErrorCode:=SetErrorCode(getpeername(Sock,ResultAddr^,ResultAddrlen^)); -{$ENDIF} -End; - -function GetLastError:Integer; -Begin - Result:=WSAGetLastError; -End; - -Function GetErrorDesc(errorCode:Integer):String; -begin -// If you compile and get "Undeclared Identified - -// Edit DXSock.DEF - and select a language! - case errorCode of - WSAEINTR:Result:=_WSAEINTR; - WSAEBADF:Result:=_WSAEBADF; - WSAEACCES:Result:=_WSAEACCES; - WSAEFAULT:Result:=_WSAEFAULT; - WSAEINVAL:Result:=_WSAEINVAL; - WSAEMFILE:Result:=_WSAEMFILE; - WSAEWOULDBLOCK:Result:=_WSAEWOULDBLOCK; - WSAEINPROGRESS:Result:=_WSAEINPROGRESS; - WSAEALREADY:Result:=_WSAEALREADY; - WSAENOTSOCK:Result:=_WSAENOTSOCK; - WSAEDESTADDRREQ:Result:=_WSAEDESTADDRREQ; - WSAEMSGSIZE:Result:=_WSAEMSGSIZE; - WSAEPROTOTYPE:Result:=_WSAEPROTOTYPE; - WSAENOPROTOOPT:Result:=_WSAENOPROTOOPT; - WSAEPROTONOSUPPORT:Result:=_WSAEPROTONOSUPPORT; - WSAESOCKTNOSUPPORT:Result:=_WSAESOCKTNOSUPPORT; - WSAEOPNOTSUPP:Result:=_WSAEOPNOTSUPP; - WSAEPFNOSUPPORT:Result:=_WSAEPFNOSUPPORT; - WSAEAFNOSUPPORT:Result:=_WSAEAFNOSUPPORT; - WSAEADDRINUSE:Result:=_WSAEADDRINUSE; - WSAEADDRNOTAVAIL:Result:=_WSAEADDRNOTAVAIL; - WSAENETDOWN:Result:=_WSAENETDOWN; - WSAENETUNREACH:Result:=_WSAENETUNREACH; - WSAENETRESET:Result:=_WSAENETRESET; - WSAECONNABORTED:Result:=_WSAECONNABORTED; - WSAECONNRESET:Result:=_WSAECONNRESET; - WSAENOBUFS:Result:=_WSAENOBUFS; - WSAEISCONN:Result:=_WSAEISCONN; - WSAENOTCONN:Result:=_WSAENOTCONN; - WSAESHUTDOWN:Result:=_WSAESHUTDOWN; - WSAETOOMANYREFS:Result:=_WSAETOOMANYREFS; - WSAETIMEDOUT:Result:=_WSAETIMEDOUT; - WSAECONNREFUSED:Result:=_WSAECONNREFUSED; - WSAELOOP:Result:=_WSAELOOP; - WSAENAMETOOLONG:Result:=_WSAENAMETOOLONG; - WSAEHOSTDOWN:Result:=_WSAEHOSTDOWN; - WSAEHOSTUNREACH:Result:=_WSAEHOSTUNREACH; - WSAENOTEMPTY:Result:=_WSAENOTEMPTY; - WSAEPROCLIM:Result:=_WSAEPROCLIM; - WSAEUSERS:Result:=_WSAEUSERS; - WSAEDQUOT:Result:=_WSAEDQUOT; - WSAESTALE:Result:=_WSAESTALE; - WSAEREMOTE:Result:=_WSAEREMOTE; - WSASYSNOTREADY:Result:=_WSASYSNOTREADY; - WSAVERNOTSUPPORTED:Result:=_WSAVERNOTSUPPORTED; - WSANOTINITIALISED:Result:=_WSANOTINITIALISED; - WSAHOST_NOT_FOUND:Result:=_WSAHOST_NOT_FOUND; - WSATRY_AGAIN:Result:=_WSATRY_AGAIN; - WSANO_RECOVERY:Result:=_WSANO_RECOVERY; - WSANO_DATA:Result:=_WSANO_DATA; - Else Result:=_WSAUNKNOWN+' ('+IntToCommaStr(ErrorCode)+')'; - end; -end; - -function ByteSwap4(long:Cardinal):Cardinal; -begin - result:=ntohl(long); -end; - -function ByteSwap2(short:smallint):smallint; -begin - result:=ntohs(short); -end; - -Function IPIntToIPStr(IPAddr:Integer):String; -Var - Ws:String; - -Begin - Setlength(Ws,4); - Move(IPAddr,Ws[1],4); - Result:=IntToStr(Ord(Ws[1]))+'.'+ - IntToStr(Ord(Ws[2]))+'.'+ - IntToStr(Ord(Ws[3]))+'.'+ - IntToStr(Ord(Ws[4])); -End; - -Function IPStrToIPInt(IPAddr:String):Integer; -Var - Ws:String; - -Begin - Setlength(Ws,4); - Ws[1]:=Char(StrToInt(FetchByChar(IPAddr,'.',False))); - Ws[2]:=Char(StrToInt(FetchByChar(IPAddr,'.',False))); - Ws[3]:=Char(StrToInt(FetchByChar(IPAddr,'.',False))); - Ws[4]:=Char(StrToInt(FetchByChar(IPAddr,'.',False))); - Move(Ws[1],Result,4); -End; - -Function SocketLayerLoaded:Boolean; -Begin - Result:=(StartupResult=999); -End; - -Procedure GetSocketVersion(WinsockInfo:PWinsockInfo); -Begin -{$IFDEF LINUX} - With WinsockInfo^ do Begin - Major_Version:=2; - Minor_Version:=0; - Highest_Major_Version:=2; - Highest_Minor_Version:=0; - Move('Linux Socket Layer 2.0',Description,256); - Move('Ready',SystemStatus,128); - MaxSockets:=65000; - MaxUDPDatagramSize:=1500; - VendorInfo:='Brain Patchwork DX, LLC.'; - End; -{$ELSE} - With WinsockInfo^ do Begin - Major_Version:=BYTE(DllData.wVersion); - Minor_Version:=HIBYTEOfWORD(DllData.wVersion); - Highest_Major_Version:=BYTE(DllData.wHighVersion); - Highest_Minor_Version:=HIBYTEOfWORD(DllData.wHighVersion); - Move(DllData.szDescription,Description,256); - Move(DllData.szSystemStatus,SystemStatus,128); - MaxSockets:=DllData.iMaxSockets; - MaxUDPDatagramSize:=DllData.iMaxUdpDg; - VendorInfo:=DllData.lpVendorInfo; - End; -{$ENDIF} -End; - -Function ntohs(netshort:Word):Word; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}ntohs(Netshort); -End; - -Function inet_ntoa(inaddr:in_addr):PChar; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}inet_ntoa(inaddr); -End; - -Function htonl(Hostlong:Integer):Integer; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}htonl(Hostlong); -End; - -Function ntohl(Netlong:Integer):Integer; -Begin - Result:={$IFDEF LINUX}Libc. - {$ELSE}Winsock. - {$ENDIF}ntohl(netlong) -End; - -initialization -{$IFDEF LINUX} - StartupResult:=0; -{$ELSE} - StartupResult:=WSAStartup(MAKEBytesToWORD(2,2),DLLData); -{$ENDIF} - if StartupResult=0 then Begin - StartupResult:=999; - // 6-9: added to load 1 time. - GlobalTimeout.tv_Sec:=0; - GlobalTimeout.tv_uSec:=2500; - End - else StartupResult:=123; - -finalization -{$IFNDEF LINUX} - If StartupResult=999 then WSACleanup; -{$ENDIF} - -End. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXString.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXString.pas deleted file mode 100644 index 1861da8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RODX/uRODXString.pas +++ /dev/null @@ -1,2858 +0,0 @@ -{$I uRODXFree.def} - -unit uRODXString; - -interface - -/////////////////////////////////////////////////////////////////////////////// -// Unit: DXString -// Author: G.E. Ozz Nixon Jr. (onixon@dxsock.com) -// Assembly: Pete Morris and Ozz Nixon {all asm by Ozz is denoted!} -// ======================================================================== -// Source Owner: DX, Inc. 1995-2002 -// Copyright: All code is the property of DX, Inc. Licensed for -// resell by Brain Patchwork DX (tm) and part of the -// DX (r) product lines, which are (c) 1999-2002 -// DX, Inc. Source may not be distributed without -// written permission from both Brain Patchwork DX, -// and DX, Inc. -// License: (Reminder), None of this code can be added to other -// developer products without permission. This includes -// but not limited to DCU's, DCP's, DLL's, OCX's, or -// any other form of merging our technologies. All of -// your products released to a public consumer be it -// shareware, freeware, commercial, etc. must contain a -// license notification somewhere visible in the -// application. -// Example is Internet Explorer - Help->About screen -// shows the licensed code contained in the application. -// Code Version: (3rd Generation Code) -// ======================================================================== -// Description: -// ======================================================================== -/////////////////////////////////////////////////////////////////////////////// - -Uses -{$IFNDEF LINUX} - Windows, -{$ENDIF} - Classes, - SyncObjs, - SysUtils; - - -// DO NOT CHANGE THIS ONE -// BRAIN PATCHWORK DX ONLY CHANGES THIS -// IT IS USED FOR TECHNICAL SUPPORT (VERSION CONTROLS) -CONST BPDX_RELEASE_DATE='2002-09-01'; {YYYY-MM-DD} - - -/////////////////////////////////////////////////////////////////////////////// -// Brain Patchwork - Just so you can verify which release you have at run-time. -/////////////////////////////////////////////////////////////////////////////// -Type - TDXCritical = Class(TObject) - private -{$IFDEF VER100} - Synchronizer:TCriticalSection; -{$ELSE} -// Borland has screwed the pooch on TMultiReadExclusiveWriteSynchronizer -// so bad that we will not support it! - Synchronizer:TCriticalSection;// TMultiReadExclusiveWriteSynchronizer; -{$ENDIF} - public - constructor Create; - destructor Destroy; override; - procedure StartingRead; - procedure FinishedRead; - procedure StartingWrite; - procedure FinishedWrite; - End; -{$IFDEF OBJECTS_ONLY} - TDXComponent = Class(TObject) -{$ELSE} - TDXComponent = Class(TComponent) -{$ENDIF} - private - procedure SetReleaseDate(value: string); - Function GetReleaseDate:String; - public - MyCriticalSection:TDXCritical; - constructor Create(AOwner: TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF} - destructor Destroy; override; - published - property ReleaseDate:String Read GetReleaseDate write SetReleaseDate; - End; - -/////////////////////////////////////////////////////////////////////////////// -// Routines to centralize "Windows" calls -/////////////////////////////////////////////////////////////////////////////// -{$IFDEF LINUX} -Type - DWord=LongWord; - TThreadPriority = (tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, pTimeCritical); -{$ELSE} -Type - PInteger = Windows.PInteger; - DWORD = Windows.DWord; -{$ENDIF} - -// LINUX: -Function LocalTimeZoneBias:Integer; -// WINDOWS: -Procedure ProcessWindowsMessageQueue; -function HiByteOfWord(Const W:Word):Byte; -function MakeBytesToWord(Const A,B:Byte):Word; -function WindowsWriteFile(hFile:THandle; - const Buffer;nNumberOfBytesToWrite:DWORD; - var lpNumberOfBytesWritten:DWORD):Boolean; -Procedure ShowMessageWindow(Const Caption,Message:String); -Procedure DoSleepEX(Const Interval:DWord); -{$IFNDEF LINUX} -Function GetRegistryString(Const Key:HKey;Const SubKey:string):string; -Function SetRegistryString(Const Key:HKey;SubKey,Value:string):Boolean; -function RegistryStringGet(Const Key:HKey;SubKey:string):String; -function RegistryStringSet(Const Key:HKey;SubKey,Value:string):Boolean; //2.0.12 -Function LaunchWebBrowser(Const URL:string;Const WindowState:Integer):Boolean; -{$ENDIF} -{$IFNDEF VER90} // Nothing like this in D2??? -Function MakeUUID:String; -Function RawUUID:String; -Function MakeUUIDPacked:String; -{$ENDIF} - -/////////////////////////////////////////////////////////////////////////////// -// Numeric Routines -/////////////////////////////////////////////////////////////////////////////// -Function IsCharAlphaNumeric(Const c:char):Boolean; // 2.3 const and asm -Function IsCharAlpha(Const c:Char):Boolean; // 2.3 const and asm -Function IsNumeric(Const c:char):Boolean; // 2.3 asm -Function isNumericString(Const S:string):Boolean; -Function Min(Const I1,I2:Integer):Integer; // 2.3 asm -Function Max(Const I1,I2:Integer):Integer; // 2.3 asm -Function StringToInteger(Const S:String):Integer; -Procedure SwapMove(Source:Word;Var Dest); -Function IntToCommaStr(Const Number:Integer):String; // 2.3 const -Function BinaryToString(Const Number:Byte):String; // 2.3 const -Function StringToBinary(S:String):Byte; -function LRot16(X:Word;c:longint):Word; -function RRot16(X:Word;c:longint):Word; -function LRot32(X:DWord;c:longint):DWord; -function RRot32(X:DWord;c:longint):DWord; -function SwapDWord(X:DWord):DWord; - -/////////////////////////////////////////////////////////////////////////////// -// String Routines -/////////////////////////////////////////////////////////////////////////////// -Function QuickPos(const aFindString,aSourceString:String):integer; -Function CharPos(const C: Char; const aSource : String) : Integer; -Function Fetch(var S:String;Const Sub:String;Const IgnoreCase:Boolean):String; -Function FetchByChar(var S:String;Const Sub:Char;Const IgnoreCase:Boolean):String; -Function Uppercase(Const S:String):String; -Function Lowercase(Const S:String):String; // 2.3 asm -Function ProperCase(Const S:String):String; -Function Trim(const S:string):string; -Function NoCRLF(Const S:String):String; -Function NoAngleBrackets(Const S:string):string; -Function InStrArray(const SearchStr:string;Const KnownCommands:Array of String):Integer; // 2.3 String instead of MySmallString -Procedure InverseString(Var S:String;Count:Integer); -Function HexDump(Const S:String):String; // 2.3 Const and rewrote to optimize for BIG strings!! -function ReplaceChar(const Source:string;Const OldChar,NewChar:Char):string; -function ExtractLeft(const aSourceString:String;Const Size:Integer):String; // 2.3 const -function ExtractRight(const aSourceString:String;Const Size:Integer):String; // 2.3 const -Function ExtractWordAt(const Text:String;Position:Integer):String; // 2.3 const -Function LeftJustify(Const S:String;Const MaxLength:Integer):String; -Function RightJustify(Const S:String;Const MaxLength:Integer):String; -Function CleanChar(Const InChar:Char):Char; // 2.3 const -Function CleanStr(Const InStr:String):String; // 2.3 const -Function PosLastChar(Const Ch:Char;Const S:String):Integer; // 2.3 const -Function AsciiToOem(Const ax:String):String; // 2.3 const & fixed -Function OemToAscii(Const ax:String):String; // 2.3 const & fixed -Function WordCount(const S:string):Integer; // 2.3 const -Function CRC32ByChar(const Ch:Char;const starting_crc:LONGINT):LONGINT; // 2.3 const -Function CRC32ByString(const S:String;const starting_crc:LONGINT):LONGINT; // 2.3 const -Function CRC16ByChar(const Ch:Char;const starting_crc:word):word; -Function CRC16ByString(const S:String;const starting_crc:word):word; -Function CRCARCByChar(const Ch:Char;const starting_crc:word):word; -Function CRCARCByString(const S:String;const starting_crc:word):word; -Procedure SetLongBit(Var L:LongInt;const Bit:Byte;const Setting:Boolean); // 2.3 const -Function GetLongBit(const L:LongInt;const Bit:Byte):Boolean; // 2.3 const -Procedure SetWordBit(Var L:Word;const Bit:Byte;const Setting:Boolean); // 2.3 const -Function GetWordBit(const L:Word;const Bit:Byte):Boolean; // 2.3 const -Procedure SetByteBit(Var L:Byte;const Bit:Byte;const Setting:Boolean); // 2.3 const -Function GetByteBit(const L:Byte;const Bit:Byte):Boolean; // 2.3 const -Function Replicate(const Source:String;NumberOfTimes:Integer):String; // const and fixed -Function IsWildCard(const Source:String):Boolean; -function PCharLen(Str:PChar):integer; // 2.3 *NEW* (3.8times faster than strlen!) -// new 8-20-2002 -function WildCompare(LookingFor,SourceStr:String):Boolean; -/////////////////////////////////////////////////////////////////////////////// -// Internet Routines -/////////////////////////////////////////////////////////////////////////////// -Function GetIndex(Const c:char):Integer; -Function Base64ToString(Const S:String):String; -Function StringToBase64(Const S1:String):String; -function FixDottedIP(Const S:string):string; -Function IPStringFormated(S:String):String; -Function IPAddressFormatted(Const I1,I2,I3,I4:Integer):String; -Function EscapeDecode(Const S:String):String; -Function EscapeEncode(Const S:String):String; -Function EncodeDomain(S:String):String; -Function EncodeAddress(S:String):String; -Function DecodeDomain(S:String):String; -Function GetActualEmailAddress(Parm,Command:String):String; - -/////////////////////////////////////////////////////////////////////////////// -// Date and/or Time Routines -/////////////////////////////////////////////////////////////////////////////// -Function TimeZone:String; -Function TimeZoneBias:String; -Function ShortTimeZone:String; -Function DateTimeToGMTRFC822(Const DT:TDateTime):String; -Function DateTimeToGMTRFC850(Const DT:TDateTime):String; -Function DateTimeToRFC850(Const DT:TDateTime):String; -Function DateTimeToRFC850Bias(Const DT:TDateTime):String; -Function RFCToDateTime(S:String):TDateTime; -Procedure Unpacktime(Const P:Longint;Var DT:TDatetime); -Procedure Packtime(Var DT:TDatetime;VAR P:Longint); -Function GetDosDate:LongInt; -Function GetDOW:Word; -Function TimeOut(Const MyTime:DWord):Boolean; -Function TimeCounter:DWord; -Function IsLeapYear(Const Year:Word):Boolean; -Function DateTimeToGMT(const DT:TDateTime):TDateTime; -Function DateTimeToLocal(const DT:TDateTime):TDateTime; -Function IsTimeAM(const DT:TDateTime):Boolean; -Function IsTimePM(const DT:TDateTime):Boolean; -Function IsTimeNoon(const DT:TDateTime):Boolean; -Function IsTimeMidnight(const DT:TDateTime):Boolean; -Function DaysThisMonth(const DT:TDateTime):Integer; -Function DaysLeftThisMonth(const DT:TDateTime):Integer; -Function DayOfTheYear(const DT:TDateTime):Integer; -Function DaysLeftThisYear(const DT:TDateTime):Integer; - -/////////////////////////////////////////////////////////////////////////////// -// File/Disk Routines -/////////////////////////////////////////////////////////////////////////////// -Function AddBackSlash(Const S:String):String; -Function NoBackSlash(Const S:String):String; -Function ToOSSlashes(Const S:String):String; // 2.3 -Function ToUnixSlashes(Const S:String):String; -Function ToDOSSlashes(Const S:String):String; -Function ChangeDir(Const S,RP:String):String; - -{$IFDEF VER100} -type - TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); - -Function StringReplace(const S, OldPattern, NewPattern: string; - Flags: TReplaceFlags): string; -procedure FreeAndNil(var Obj); -{$ELSE} -{$ENDIF} -{$IFDEF LINUX} -Function CoCreateGuid(var GUID:TGUID):HResult; -{$ELSE} -{$IFDEF VER90} // DELPHI2 does not have a TGuid -Function CoCreateGuid(var guid:Pointer): HResult; stdcall; -{$ELSE} -Function CoCreateGuid(var guid: TGUID): HResult; stdcall; -{$ENDIF} -{$ENDIF} - -/////////////////////////////////////////////////////////////////////////////// -// DXSock 3.0 Additions -/////////////////////////////////////////////////////////////////////////////// -Type - CharSet=set of Char; - -Function Center(S:String;MaxWidth:Integer):String; -Function LeftJustifyCh(Const S:String;Const Ch:Char;Const MaxLength:Integer):String; -Function RightJustifyCh(Const S:String;Const Ch:Char;Const MaxLength:Integer):String; -Function EncodeTabs(S:string;TabSize:Byte):string; -Function DecodeTabs(S:string;TabSize:Byte):string; -Function Filter(S:String;CS:CharSet):String; -Function SoundEx(S:String):String; - -//procedure register; - -implementation - -{$IFDEF LINUX} -Uses - Libc, - {$IFDEF FPC} Forms, Dialogs - {$ELSE} QForms,QDialogs - {$ENDIF} - ; -{$ELSE} -Uses - Registry; {to avoid Win2K security issue!} -{$ENDIF} - -Const - Alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - AlphabetLength = 64; //Needed in GetIndex -{$IFDEF VER100} // D3 Windows.PAS is missing these: - TIME_ZONE_ID_STANDARD = 1; - TIME_ZONE_ID_DAYLIGHT = 2; -{$ENDIF} -{$IFNDEF VER90} - ole32='ole32.dll'; -{$ENDIF} -{$WARNINGS OFF} - crc_32_tab: ARRAY[0..255] OF LONGINT = ( - $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, - $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, - $1db71064, $6ab020f2, $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, - $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, $fa0f3d63, $8d080df5, - $3b6e20c8, $4c69105e, $d56041e4, $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, - $35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59, - $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, $b8bda50f, - $2802b89e, $5f058808, $c60cd9b2, $b10be924, $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, - $76dc4190, $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433, - $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, - $6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, - $65b0d9c6, $12b7e950, $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65, - $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, - $4369e96a, $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, - $5005713c, $270241aa, $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, - $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81, $b7bd5c3b, $c0ba6cad, - $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, $73dc1683, - $e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, - $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, $196c3671, $6e6b06e7, - $fed41b76, $89d32be0, $10da7a5a, $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, - $d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b, - $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, $4669be79, - $cb61b38c, $bc66831a, $256fd2a0, $5268e236, $cc0c7795, $bb0b4703, $220216b9, $5505262f, - $c5ba3bbe, $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d, - $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, - $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, - $86d3d2d4, $f1d4e242, $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777, - $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69, $616bffd3, $166ccf45, - $a00ae278, $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, $4969474d, $3e6e77db, - $aed16a4a, $d9d65adc, $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, - $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693, $54de5729, $23d967bf, - $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d); - crc_arc_tab: Array[0..$FF] of Word = - ($00000, $0C0C1, $0C181, $00140, $0C301, $003C0, $00280, $0C241, - $0C601, $006C0, $00780, $0C741, $00500, $0C5C1, $0C481, $00440, - $0CC01, $00CC0, $00D80, $0CD41, $00F00, $0CFC1, $0CE81, $00E40, - $00A00, $0CAC1, $0CB81, $00B40, $0C901, $009C0, $00880, $0C841, - $0D801, $018C0, $01980, $0D941, $01B00, $0DBC1, $0DA81, $01A40, - $01E00, $0DEC1, $0DF81, $01F40, $0DD01, $01DC0, $01C80, $0DC41, - $01400, $0D4C1, $0D581, $01540, $0D701, $017C0, $01680, $0D641, - $0D201, $012C0, $01380, $0D341, $01100, $0D1C1, $0D081, $01040, - $0F001, $030C0, $03180, $0F141, $03300, $0F3C1, $0F281, $03240, - $03600, $0F6C1, $0F781, $03740, $0F501, $035C0, $03480, $0F441, - $03C00, $0FCC1, $0FD81, $03D40, $0FF01, $03FC0, $03E80, $0FE41, - $0FA01, $03AC0, $03B80, $0FB41, $03900, $0F9C1, $0F881, $03840, - $02800, $0E8C1, $0E981, $02940, $0EB01, $02BC0, $02A80, $0EA41, - $0EE01, $02EC0, $02F80, $0EF41, $02D00, $0EDC1, $0EC81, $02C40, - $0E401, $024C0, $02580, $0E541, $02700, $0E7C1, $0E681, $02640, - $02200, $0E2C1, $0E381, $02340, $0E101, $021C0, $02080, $0E041, - $0A001, $060C0, $06180, $0A141, $06300, $0A3C1, $0A281, $06240, - $06600, $0A6C1, $0A781, $06740, $0A501, $065C0, $06480, $0A441, - $06C00, $0ACC1, $0AD81, $06D40, $0AF01, $06FC0, $06E80, $0AE41, - $0AA01, $06AC0, $06B80, $0AB41, $06900, $0A9C1, $0A881, $06840, - $07800, $0B8C1, $0B981, $07940, $0BB01, $07BC0, $07A80, $0BA41, - $0BE01, $07EC0, $07F80, $0BF41, $07D00, $0BDC1, $0BC81, $07C40, - $0B401, $074C0, $07580, $0B541, $07700, $0B7C1, $0B681, $07640, - $07200, $0B2C1, $0B381, $07340, $0B101, $071C0, $07080, $0B041, - $05000, $090C1, $09181, $05140, $09301, $053C0, $05280, $09241, - $09601, $056C0, $05780, $09741, $05500, $095C1, $09481, $05440, - $09C01, $05CC0, $05D80, $09D41, $05F00, $09FC1, $09E81, $05E40, - $05A00, $09AC1, $09B81, $05B40, $09901, $059C0, $05880, $09841, - $08801, $048C0, $04980, $08941, $04B00, $08BC1, $08A81, $04A40, - $04E00, $08EC1, $08F81, $04F40, $08D01, $04DC0, $04C80, $08C41, - $04400, $084C1, $08581, $04540, $08701, $047C0, $04680, $08641, - $08201, $042C0, $04380, $08341, $04100, $081C1, $08081, $04040); - crc_16_tab: Array[0..$FF] of Word = - ($00000, $01021, $02042, $03063, $04084, $050a5, $060c6, $070e7, - $08108, $09129, $0a14a, $0b16b, $0c18c, $0d1ad, $0e1ce, $0f1ef, - $01231, $00210, $03273, $02252, $052b5, $04294, $072f7, $062d6, - $09339, $08318, $0b37b, $0a35a, $0d3bd, $0c39c, $0f3ff, $0e3de, - $02462, $03443, $00420, $01401, $064e6, $074c7, $044a4, $05485, - $0a56a, $0b54b, $08528, $09509, $0e5ee, $0f5cf, $0c5ac, $0d58d, - $03653, $02672, $01611, $00630, $076d7, $066f6, $05695, $046b4, - $0b75b, $0a77a, $09719, $08738, $0f7df, $0e7fe, $0d79d, $0c7bc, - $048c4, $058e5, $06886, $078a7, $00840, $01861, $02802, $03823, - $0c9cc, $0d9ed, $0e98e, $0f9af, $08948, $09969, $0a90a, $0b92b, - $05af5, $04ad4, $07ab7, $06a96, $01a71, $00a50, $03a33, $02a12, - $0dbfd, $0cbdc, $0fbbf, $0eb9e, $09b79, $08b58, $0bb3b, $0ab1a, - $06ca6, $07c87, $04ce4, $05cc5, $02c22, $03c03, $00c60, $01c41, - $0edae, $0fd8f, $0cdec, $0ddcd, $0ad2a, $0bd0b, $08d68, $09d49, - $07e97, $06eb6, $05ed5, $04ef4, $03e13, $02e32, $01e51, $00e70, - $0ff9f, $0efbe, $0dfdd, $0cffc, $0bf1b, $0af3a, $09f59, $08f78, - $09188, $081a9, $0b1ca, $0a1eb, $0d10c, $0c12d, $0f14e, $0e16f, - $01080, $000a1, $030c2, $020e3, $05004, $04025, $07046, $06067, - $083b9, $09398, $0a3fb, $0b3da, $0c33d, $0d31c, $0e37f, $0f35e, - $002b1, $01290, $022f3, $032d2, $04235, $05214, $06277, $07256, - $0b5ea, $0a5cb, $095a8, $08589, $0f56e, $0e54f, $0d52c, $0c50d, - $034e2, $024c3, $014a0, $00481, $07466, $06447, $05424, $04405, - $0a7db, $0b7fa, $08799, $097b8, $0e75f, $0f77e, $0c71d, $0d73c, - $026d3, $036f2, $00691, $016b0, $06657, $07676, $04615, $05634, - $0d94c, $0c96d, $0f90e, $0e92f, $099c8, $089e9, $0b98a, $0a9ab, - $05844, $04865, $07806, $06827, $018c0, $008e1, $03882, $028a3, - $0cb7d, $0db5c, $0eb3f, $0fb1e, $08bf9, $09bd8, $0abbb, $0bb9a, - $04a75, $05a54, $06a37, $07a16, $00af1, $01ad0, $02ab3, $03a92, - $0fd2e, $0ed0f, $0dd6c, $0cd4d, $0bdaa, $0ad8b, $09de8, $08dc9, - $07c26, $06c07, $05c64, $04c45, $03ca2, $02c83, $01ce0, $00cc1, - $0ef1f, $0ff3e, $0cf5d, $0df7c, $0af9b, $0bfba, $08fd9, $09ff8, - $06e17, $07e36, $04e55, $05e74, $02e93, $03eb2, $00ed1, $01ef0); -{$WARNINGS ON} - -{ -procedure register; -begin - RegisterComponents('BPDX Addons', [TDXComponent]); -end; -} - -/////////////////////////////////////////////////////////////////////////////// -// Internal Version Control Routines (used for DCU's mainly) -/////////////////////////////////////////////////////////////////////////////// -procedure TDXComponent.SetReleaseDate(value: string); -Begin -End; - -Function TDXComponent.GetReleaseDate:String; -Begin - Result:=BPDX_RELEASE_DATE; -End; - -constructor TDXComponent.Create(AOwner: TComponent); -Begin -{$IFDEF OBJECTS_ONLY} - inherited create; -{$ELSE} - inherited create(AOwner); -{$ENDIF} - MyCriticalSection:=TDXCritical.Create; -End; - -destructor TDXComponent.Destroy; -Begin - MyCriticalSection.Free; - MyCriticalSection:=Nil; - inherited; -End; - -constructor TDXCritical.Create; -Begin - inherited; - -{$IFDEF VER100} - Synchronizer:=TCriticalSection.Create; -{$ELSE} - Synchronizer:=TCriticalSection.Create;// TMultiReadExclusiveWriteSynchronizer.Create; -{$ENDIF} -End; - -destructor TDXCritical.Destroy; -Begin -try - Synchronizer.Free; -except -end; - inherited; -End; - -Procedure TDXCritical.StartingRead; -Begin -{$IFDEF VER100} - Synchronizer.Acquire; -{$ELSE} - Synchronizer.Acquire; //BeginRead; -{$ENDIF} -End; - -Procedure TDXCritical.FinishedRead; -Begin -{$IFDEF VER100} - Synchronizer.Release; -{$ELSE} - Synchronizer.Release; //EndRead; -{$ENDIF} -End; - -Procedure TDXCritical.StartingWrite; -Begin -{$IFDEF VER100} - Synchronizer.Acquire; -{$ELSE} - Synchronizer.Acquire; //BeginWrite; -{$ENDIF} -End; - -Procedure TDXCritical.FinishedWrite; -Begin -{$IFDEF VER100} - Synchronizer.Release; -{$ELSE} - Synchronizer.Release; //EndWrite; -{$ENDIF} -End; - -/////////////////////////////////////////////////////////////////////////////// -// Windows/Operating System Routines -/////////////////////////////////////////////////////////////////////////////// - -Procedure ProcessWindowsMessageQueue; -{$IFDEF LINUX} -Begin - Application.ProcessMessages; -End; -{$ELSE} -Var - MsgRec:TMsg; - -Begin - If Not IsConsole then - while PeekMessage(MsgRec,0,0,0,PM_REMOVE) do begin - TranslateMessage(MsgRec); - DispatchMessage(MsgRec) - end; -End; -{$ENDIF} - -function HiByteOfWord(Const W:Word):Byte; -Begin - Result:=Hi(W); -End; - -function MakeBytesToWord(Const A,B:Byte):Word; -Begin - Result:=(A shl 8) + B; -End; - -function WindowsWriteFile(hFile:THandle;const Buffer;nNumberOfBytesToWrite:DWORD; - var lpNumberOfBytesWritten: DWORD):Boolean; -Begin -{$IFDEF LINUX} - lpNumberOfBytesWritten:=FileWrite(hFile,Buffer,nNumberOfBytesToWrite); - Result:=lpNumberOfBytesWritten=nNumberOfBytesToWrite; -{$ELSE} - Result:=WriteFile(hFile,Buffer,nNumberOfBytesToWrite,lpNumberOfBytesWritten,Nil); -{$ENDIF} -End; - -Procedure ShowMessageWindow(Const Caption,Message:String); -Begin -{$IFDEF LINUX} - MessageDlg(Caption,Message,mtError,[mbOk],0); -{$ELSE} - MessageBox(0,PChar(Message),PChar(Caption),MB_ICONEXCLAMATION or MB_SYSTEMMODAL); -{$ENDIF} -End; - -Procedure DoSleepEX(Const Interval:DWord); -Begin -{$IFDEF LINUX} - Sleep(Interval); -{$ELSE} - SleepEx(Interval,False{True}); -{$ENDIF} -End; - -{$IFNDEF LINUX} -function RegistryStringGet(Const Key:HKey;SubKey:string):String; -var - Reg:TRegistry; - lResult:string; - DValue:string; - -begin - lResult:=''; - DValue:=SubKey; - Delete(DValue,1,PosLastChar('\',SubKey)); - Delete(SubKey,PosLastChar('\',SubKey),length(DValue)+1); - Reg:=TRegistry.Create; -try - Reg.RootKey:=Key; - if Reg.OpenKey(SubKey,True) then - lresult:=Reg.ReadString(DValue); -finally - Reg.CloseKey; - Reg.Free; -end; - result:=lresult; -end; - -function RegistryStringSet(Const Key:HKey;SubKey,Value:string):Boolean; -var - Reg:TRegistry; - DValue:string; - -begin - DValue:=SubKey; - Delete(DValue,1,PosLastChar('\',SubKey)); - Delete(SubKey,PosLastChar('\',SubKey),length(DValue)+1); - Reg:=TRegistry.Create; - Result:=False; -try - Reg.RootKey:=Key; - if Reg.OpenKey(SubKey,True) then Begin - Reg.WriteString(DValue,Value); - Result:=True; - End; -finally - Reg.CloseKey; - Reg.Free; -end; -end; - -function GetRegistryString(Const Key:HKey;Const SubKey:string):string; -begin - Result:=RegistryStringGet(Key,SubKey); -end; - -function SetRegistryString(Const Key:HKey;SubKey,Value:string):Boolean; -begin - Result:=RegistryStringSet(Key,SubKey,Value); -end; - -function LaunchWebBrowser(Const URL:string;Const WindowState:Integer):Boolean; -var - sLaunch: string; - iPos: integer; - -begin - Result:=False; - sLaunch:=GetRegistryString(HKEY_CLASSES_ROOT,'.htm'); - if sLaunch<>'' then begin - sLaunch:=sLaunch + '\shell\open\command'; - sLaunch:=GetRegistryString(HKEY_CLASSES_ROOT,sLaunch); - if sLaunch<>'' then begin - iPos:=QuickPos('"%1"',sLaunch); - if iPos=0 then iPos:=QuickPos('%1',sLaunch); - if iPos<>0 then sLaunch:=Copy(sLaunch,1,iPos-1); - sLaunch:=sLaunch+#32+URL; - Result:=WinExec(PChar(sLaunch),WindowState)>31; - end; - end; -end; -{$ENDIF} - -{$IFNDEF VER90} -/////////////////////////////////////////////////////////////////////////////// -// References the external symbol to MS CoCreateGUID function which creates MS-style UUID's -/////////////////////////////////////////////////////////////////////////////// -{$IFNDEF LINUX} -function CoCreateGuid; external ole32 name 'CoCreateGuid'; -{$ENDIF} - -Function MakeUUID:String; -Var - UUIDVar: TGUID; - UUID_String: String; - k:Integer; - -Begin - CoCreateGuid(UUIDVar); - UUID_String:=IntToHex(UUIDVar.D1, 8)+'-'+ - IntToHex(UUIDVar.D2, 4)+'-'+ - IntToHex(UUIDVar.D3, 4)+'-'; - for k := 0 to 1 do UUID_String:=UUID_String+IntToHex(UUIDVar.D4[k], 2); - UUID_String:=UUID_String+'-'; - for k := 2 to 7 do UUID_String:=UUID_String+IntToHex(UUIDVar.D4[k], 2); - Result:=UUID_String; -End; - -Function RawUUID:String; -Var - UUIDVar: TGUID; - UUID_String: String; - k:Integer; - -Begin - CoCreateGuid(UUIDVar); - UUID_String:=IntToHex(UUIDVar.D1, 8)+ - IntToHex(UUIDVar.D2, 4)+ - IntToHex(UUIDVar.D3, 4); - for k := 0 to 1 do UUID_String:=UUID_String+IntToHex(UUIDVar.D4[k], 2); - for k := 2 to 7 do UUID_String:=UUID_String+IntToHex(UUIDVar.D4[k], 2); - Result:=UUID_String; -End; - -Function MakeUUIDPacked:String; -Var - UUIDVar: TGUID; - -Begin - CoCreateGuid(UUIDVar); - SetLength(Result,16); - Move(UUIDVar.D1,Result[1],4); - Move(UUIDVar.D2,Result[5],2); - Move(UUIDVar.D3,Result[7],2); - Move(UUIDVar.D4,Result[9],8); -End; -{$ENDIF} - -{$IFDEF LINUX} -Function CoCreateGuid(var GUID:TGUID):HResult; -Begin - Result:=CreateGUID(GUID); -End; -{$ENDIF} - -/////////////////////////////////////////////////////////////////////////////// -// Numeric Routines -/////////////////////////////////////////////////////////////////////////////// -Function IsCharAlphaNumeric(Const C:char):Boolean; -Begin -{$IFNDEF ASM8086} - Result:=C in ['0'..'9','A'..'Z','a'..'z']; -{$ELSE} // ASM CODE BY OZZ -asm - mov AL,C - cmp AL, $30 // 0 - jl @NoMatch // it's before '0' so Result=False/Exit - cmp AL, $7A // z - jg @NoMatch // it's after 'z' so Result=False/Exit - cmp AL, $39 // 9 - jg @TryAlpha // it's after '9' so see if it is Alpha now - jmp @Matched // it's 0..9 so Result=True/Exit -@TryAlpha: - cmp AL, $41 // A - jl @NoMatch // it's before 'A' so Result=False/Exit - cmp AL, $5A // Z - jg @TryLower // it's after 'Z' so see if it is lowecase Alpha - jmp @Matched // it's 'A'..'Z' so Result=True/Exit -@TryLower: - cmp AL, $61 // a - jl @NoMatch // it's before 'a' so Result=False/Exit - jmp @Matched // it's 'a'..'z' so Result=True/Exit -@NoMatch: - mov Result,0 - jmp @TheEnd -@Matched: - mov Result,1 -@TheEnd: -end {asm} -{$ENDIF} -End; - -Function IsCharAlpha(Const c:Char):Boolean; -Begin -{$IFNDEF ASM8086} - Result:=C in ['A'..'Z','a'..'z']; -{$ELSE} // ASM BY OZZ -asm - mov AL,C - cmp AL, $41 // A - jl @NoMatch // it's before 'A' so Result=False/Exit - cmp AL, $7A // z - jg @NoMatch // it's after 'z' so Result=False/Exit - cmp AL, $5A // Z - jg @TryLower // it's after 'Z' so see if it is lower now - jmp @Matched // it's A..Z so Result=True/Exit -@TryLower: - cmp AL, $61 // a - jl @NoMatch // it's before 'a' so Result=False/Exit - jmp @Matched // it's 'a'..'z' so Result=True/Exit -@NoMatch: - mov Result,0 - jmp @TheEnd -@Matched: - mov Result,1 -@TheEnd: -end {asm} -{$ENDIF} -End; - -Function IsNumeric(Const c:char):Boolean; -begin -{$IFNDEF ASM8086} - Result:=IsCharAlphaNumeric(c) and not IsCharAlpha(c); -{$ELSE} // ASM BY OZZ -asm - mov AL,C - cmp AL, $30 // 0 - jl @NoMatch // it's before '0' so Result=False/Exit - cmp AL, $39 // 9 - jg @NoMatch // it's after '9' so Result=False/Exit - jmp @Matched // it's 0..9 so Result=True/Exit -@NoMatch: - mov Result,0 - jmp @TheEnd -@Matched: - mov Result,1 -@TheEnd: -end {asm} -{$ENDIF} -end; - -Function isNumericString(Const S:String):Boolean; -Var - Loop,MaxLoop:Integer; - -begin - Result:=True; - MaxLoop:=Length(S); - Loop:=0; - While (Loop'.' then - Result:=IsNumeric(S[Loop+1]); - Inc(Loop); - End; -end; - -Function Min(Const I1,I2:Integer):Integer; -Begin -{$IFNDEF ASM8086} - If I1I2 then Result:=I1 - Else Result:=I2; -{$ELSE} // ASM BY OZZ - Result:=I1; -asm - mov ECX, I2 // Store I2 in ECX - mov EDX, I1 // Store I1 in EDX - cmp EDX, ECX // compare I2 to I1 - jg @TheEnd // if I2>I1 then Exit {result already set} -@ItIsLess: - mov Result,ECX // result=I2/Exit -@TheEnd: -end; {asm} -{$ENDIF} -End; - -Function StringToInteger(Const S:String):Integer; -var - E: Integer; - -begin - Val(S,Result,E); -End; - -Procedure SwapMove(Source:Word;Var Dest); -Begin - Source:=(HI(Source))+(LO(Source)*256); - Move(Source,Dest,2); -End; - -Function IntToCommaStr(Const Number:Integer):String; -Var - StrPos:Integer; - -Begin - Result:=IntToStr(Number); - StrPos:=Length(Result)-2; - While StrPos>1 Do Begin - Insert(',',Result,StrPos); - StrPos:=StrPos-3; - End; -End; - -Function BinaryToString(Const Number:Byte):String; -Var - Temp2:Byte; - i:Word; - -Begin - Setlength(Result,8); - FillChar(Result[1],8,'0'); - Temp2:=$80; - For i := 1 to 8 Do Begin - If (Number and Temp2)<>0 Then Result[i]:='1'; - Temp2:=Temp2 shr 1; - End; -End; - -Function StringToBinary(S:String):Byte; -Var - i:Word; - Temp1:Byte; - Temp2:Byte; - -Begin - S:=Trim(S); - While Length(S)<8 do S:='0'+S; - Temp1:=0; - Temp2:=$80; - For i := 1 to 8 Do Begin - If S[i]='1' Then Inc(Temp1,Temp2); - Temp2:=Temp2 shr 1; - End; - Result:=Temp1; -End; - -/////////////////////////////////////////////////////////////////////////////// -// String Routines -/////////////////////////////////////////////////////////////////////////////// -function QuickPos(const aFindString,aSourceString:String):integer; -var - SourceLen,aSourceLen,aFindLen,StartPos:integer; - -begin -{$IFNDEF ASM8086} - Result:=Pos(aFindString,aSourceString); -{$ELSE} - Result:=0; - aSourceLen:=Length(aSourceString); - If aSourceLen=0 then Exit; - aFindLen:=Length(aFindString); - If (aFindLen=0) or (aFindlen>AsourceLen) then Exit; {GSW FIX!} - StartPos:=1; - SourceLen:=aSourceLen-aFindLen; - SourceLen:=(SourceLen-StartPos)+2; - -asm - push ESI - push EDI - push EBX - mov EDI, aSourceString - add EDI, StartPos - dec EDI - mov ESI, aFindString - mov ECX, SourceLen - mov Al, [ESI] -@ScaSB: - mov Ah, [EDI] - cmp Ah,Al - jne @NextChar -@CompareStrings: - mov EBX, aFindLen - dec EBX - jz @FullMatch -@CompareNext: - mov Al, [ESI+EBX] - mov Ah, [EDI+EBX] - cmp Al, Ah - jz @Matches - mov Al, [ESI] - jmp @NextChar -@Matches: - dec EBX - jnz @CompareNext -@FullMatch: - mov EAX, EDI - sub EAX, aSourceString - inc EAX - mov Result, EAX - jmp @TheEnd -@NextChar: - inc EDI - dec ECX - jnz @ScaSB - mov Result,0 -@TheEnd: - pop EBX - pop EDI - pop ESI -end; {asm} -{$ENDIF} -end; - -function CharPos(const C:Char;const aSource:String):Integer; -var - L : Integer; -begin - L := Length(aSource); - Result:=0; - if L = 0 then exit; - -asm - PUSH EDI //Preserve this register - mov EDI, aSource //Point EDI at aSource - mov ECX, L //Make a note of how many chars to search through - mov AL, C //and which char we want -@Loop: - mov AH, [EDI] - inc EDI - xor AH, AL - jz @Found - dec ECX - jnz @Loop - jmp @NotFound -@Found: - sub EDI, aSource //EDI has been incremented, so EDI-OrigAdress = Char pos ! - mov Result, EDI - jmp @TheEnd -@NotFound: - mov Result, 0 // fix (ozz) -@TheEnd: - POP EDI - end; -end; - -Function Fetch(var S:String;Const Sub:String;Const IgnoreCase:Boolean):String; -var - P:Integer; - -begin - If IgnoreCase then P:=QuickPos(Uppercase(Sub),Uppercase(S)) - Else P:=QuickPos(Sub,S); - if (P=0) then Begin - Result:=S; - S:=''; - End - Else Begin - Result:=Copy(S,1,P-1); - Delete(S,1,P+(Length(Sub)-1)); - End; -end; - -Function FetchByChar(var S:String;Const Sub:Char;Const IgnoreCase:Boolean):String; -var - P:Integer; - -begin - If IgnoreCase then P:=CharPos(Upcase(Sub),Uppercase(S)) - Else P:=CharPos(Sub,S); - if (P=0) then Begin - Result:=S; - S:=''; - End - Else Begin - Result:=Copy(S,1,P-1); - Delete(S,1,P); - End; -end; - -Function Uppercase(Const S:String):String; -{$IFNDEF ASM8086} -var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=S; - MaxLoop:=Length(Result); - For Loop:=MaxLoop downto 1 do - If Result[Loop] in ['a'..'z'] then Dec(Result[Loop],32); -End; -{$ELSE} // Ozz: tweaked to use Pointer() which is faster than @string! -var - LenOfString:Integer; - FirstSource,FirstDest:Pointer; - -begin - LenOfString:=Length(S); - If LenOfString=0 then Begin - Result:=''; - Exit; - End; - SetLength(Result,LenOfString); - FirstSource:=Pointer(s); - FirstDest:=Pointer(Result); -asm - PUSH ESI //Firstly and most importantly - PUSH EDI //Delphi uses EBX, ESI, EDI extensively, so we need to - //push them onto the stack, and then pop them off after - mov ESI, FirstSource//Move the address of Result into ESI - mov EDI, FirstDest //ESI and EDI are 2 generic "data moving" registers - //ESI = Source, EDI = Destination - //MovSB (MoveString Byte, there is also, MovSW word and MovSD double) - //MovXX copy from EDI to ESI, and then INC *both* ESI and EDI - // and also DEC ECX (generic string length counter) - //But I will not use these as I need to Uppercase the results - mov ECX, LenOfString//ECX will contain a count of how many chars left to do -@NextChar: - mov AL, [ESI] //Move ESI^ into AL - // AL = Char, AX = Word, EAX = DWord, all different parts - // of the same register - cmp AL, $61 - jl @NoUpper // < 'a' don't convert - cmp AL, $7A - jg @NoUpper // > 'z' don't convert - and AL, $DF // Convert to uppercase -@NoUpper: - mov [EDI], AL // Put AL back into EDI^ (That's what [] means) - Inc ESI //Point to next character - Inc EDI - Dec ECX //Decrement the count, if it reaches 0, the ZERO flag will be set - jnz @NextChar //"J"ump if "n"ot "z"ero to the next character - POP EDI - POP ESI -end; {asm} -end; -{$ENDIF} - -Function Lowercase(Const S:String):String; -{$IFNDEF ASM8086} -var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=S; - MaxLoop:=Length(Result); - For Loop:=MaxLoop downto 1 do - If Result[Loop] in ['A'..'Z'] then Inc(Result[Loop],32); -End; -{$ELSE} // Original ASM By Peter for UPPERCASE, Ozz added xor logic for LOWERCASE -var - LenOfString:Integer; - FirstSource,FirstDest:Pointer; - -begin - LenOfString:=Length(S); - If LenOfString=0 then Begin - Result:=''; - Exit; - End; - SetLength(Result,LenOfString); - FirstSource:=Pointer(S); - FirstDest:=Pointer(Result); -asm - PUSH ESI //Firstly and most importantly - PUSH EDI //Delphi uses EBX, ESI, EDI extensively, so we need to - //push them onto the stack, and then pop them off after - mov ESI, FirstSource//Move the address of Result into ESI - mov EDI, FirstDest //ESI and EDI are 2 generic "data moving" registers - //ESI = Source, EDI = Destination - //MovSB (MoveString Byte, there is also, MovSW word and MovSD double) - //MovXX copy from EDI to ESI, and then INC *both* ESI and EDI - // and also DEC ECX (generic string length counter) - //But I will not use these as I need to Uppercase the results - mov ECX, LenOfString//ECX will contain a count of how many chars left to do -@NextChar: - mov AL, [ESI] //Move ESI^ into AL - // AL = Char, AX = Word, EAX = DWord, all different parts - // of the same register - cmp AL, 'A' - jl @NoUpper // < 'a' don't convert - cmp AL, 'Z' - jg @NoUpper // > 'z' don't convert - xor AL, $20 // Convert to lowercase -@NoUpper: - mov [EDI], AL // Put AL back into EDI^ (That's what [] means) - Inc ESI //Point to next character - Inc EDI - Dec ECX //Decrement the count, if it reaches 0, the ZERO flag will be set - jnz @NextChar //"J"ump if "n"ot "z"ero to the next character - POP EDI - POP ESI -end; {asm} -end; -{$ENDIF} - -Function ProperCase(Const S:String):String; -Var - Len:Integer; - MaxLen:Integer; - -Begin - Len:=Length(S); - MaxLen:=Len; - SetLength(Result,Len); - Result:=Lowercase(S); - While Len>0 do Begin - If Not (Result[Len] in ['a'..'z']) and (Len0) and (Result[1] in ['a'..'z']) then - Result[1]:=Upcase(Result[1]); -End; - -Function Trim(const S:string):string; -var - I, L: Integer; -begin - L := Length(S); - I := 1; - while (I <= L) and (S[I] <= ' ') do Inc(I); - if I > L then Result := '' - else begin - while S[L] <= ' ' do Dec(L); - Result := Copy(S, I, L - I + 1); - end; -end; - -Function NoCRLF(Const S:String):String; -Begin - Result:=StringReplace(S,#13#10,'',[rfReplaceAll]); -End; - -Function NoAngleBrackets(Const S:string):string; -var - LenOfStr:Integer; - -Begin - Result:=S; - LenOfStr:=Length(Result); - If LenOfStr>1 then - If (Result[1]='<') and (Result[LenOfStr]='>') then - Result:=Copy(Result,2,LenOfStr-2); -End; - -// Known Commands should be a 0 based array! -// For testing Winshoes products against ours, this command is useless to our -// engine. We use a dynamic parser which provides a much more flexible -// development solution for you. -Function InStrArray(const SearchStr:string;Const KnownCommands:Array of String):Integer; -begin - for Result:=High(KnownCommands) downto Low(KnownCommands) do - if SearchStr=KnownCommands[Result] then Exit; - Result:=-1; -end; - -Procedure InverseString(Var S:String;Count:Integer); -Var - TmpStr:String; - Ctr:Integer; - Ch:Char; - -Begin - TmpStr:=Copy(S,1,Count); - Ctr:=0; - While Count>0 do Begin - Ch:=TmpStr[Count]; - Dec(Count); - Move(Ch,S[Ctr+1],1); - Inc(Ctr); - End; -End; - -Function HexDump(Const S:String):String; -var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=''; - Loop:=0; - MaxLoop:=Length(S); - While Loop0 do Begin - if Result[Loop]=OldChar then Result[Loop]:=NewChar; - Dec(loop); - End; -end; - -Function ExtractLeft(const aSourceString:String;Const Size:Integer):String; -begin - If Size>Length(aSourceString) then Result:=aSourceString - Else Begin - Setlength(Result,Size); - Move(aSourceString[1],Result[1],Size); - End; -end; - -Function ExtractRight(const aSourceString:String;Const Size:Integer):String; -Var - Len:Integer; - -begin - Len:=Length(aSourceString); - If Size>Len then Result:=aSourceString - Else Begin - Setlength(Result,Size); - Move(aSourceString[Len-Pred(Size)],Result[1],Size); - End; -end; - -Function ExtractWordAt(Const Text:String;Position:Integer):String; -Var - Done:Boolean; - StartAt:Integer; - Len:Integer; - OrgPosition:Integer; - -begin - Len:=Length(Text); - Result:=''; - Done:=Not (UpCase(Text[Position]) in ['A'..'Z','0'..'9']); - If (Position>0) and (Position<=Len) and not Done then Begin - OrgPosition:=Position; - While (Position>0) and not Done do Begin - Done:=Not (UpCase(Text[Position]) in ['A'..'Z','0'..'9']); - If Not Done then Dec(Position); - End; - StartAt:=Position; - Position:=OrgPosition; - Done:=False; - While (Position<=Len) and not Done do Begin - Done:=Not (UpCase(Text[Position]) in ['A'..'Z','0'..'9']); - If Not Done then Inc(Position); - End; - Result:=Copy(Text,StartAt+1,Pred(Position)-StartAt); - End; -end; - -Function LeftJustify(Const S:String;Const MaxLength:Integer):String; -Begin - Result:=LeftJustifyCh(S,#32,MaxLength); -End; - -Function RightJustify(Const S:String;Const MaxLength:Integer):String; -Begin - Result:=RightJustifyCh(S,#32,MaxLength); -End; - -Function CleanChar(Const InChar:Char):Char; -Const - CtlChars: String[32] = 'oooooooooXoollo><|!Pg*|^v><-^v'; - HiChars: String[64] = 'CueaaaageeeiiiAAEaaooouuyOUcLYPfarounNao?--//!<>***|||||||||||||'; - HiChars2: String[64]= '|--|-+||||=+|=++-=--==-||||*****abcnEduto0nd80En=+>0) and (s[i]<>ch)) Do Dec(i); - Result:=I; -End; - -Function AsciiToOem(Const ax:String):String; -var - i:integer; - -begin - Result:=AX; - for i:=Length(Result) downto 1 do begin - Case Ord(Result[i]) of - 132:Result[i]:=Char(228); - 142:Result[i]:=Char(196); - 129:Result[i]:=Char(252); - 154:Result[i]:=Char(220); - 148:Result[i]:=Char(246); - 153:Result[i]:=Char(214); - 225:Result[i]:=Char(223); - end; - end; -end; - -Function OemToAscii(const ax:String):String; -var - i:integer; - -begin - Result:=AX; - for i:=Length(Result) downto 1 do begin - Case Ord(Result[i]) of - 228:Result[i]:=Char(132); - 196:Result[i]:=Char(142); - 252:Result[i]:=Char(129); - 220:Result[i]:=Char(154); - 246:Result[i]:=Char(148); - 214:Result[i]:=Char(153); - 223:Result[i]:=Char(225); - end; - end; -end; - -Function WordCount(Const S:string):Integer; -var - I,Len:Integer; - -begin - Len:=Length(S); - Result:=0; - I:=1; - while I<=Len do begin - while (i<=len) and ((S[i]=#32) or (S[i]=#9) or (S[i]=';')) do inc(i); - if I<=len then inc(Result); - while (I<=len) and (S[i]<>#32) and (S[i]<>#9) and (S[i]<>';') do inc(i); - end; -End; - -Function CRC32ByChar(const Ch:Char;const starting_crc:LONGINT):LONGINT; -Begin - Result:=crc_32_tab[BYTE(starting_crc XOR LONGINT(Ord(Ch)))] XOR ((starting_crc SHR 8) AND $00FFFFFF) -End; - -Function CRC32ByString(Const S:String;Const starting_crc:LONGINT):LONGINT; -Var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=starting_crc; - MaxLoop:=Length(S); - For Loop:=1 to MaxLoop do - Result:=CRC32ByChar(S[Loop],Result); -End; - -Function CRC16ByChar(const Ch:Char;const starting_crc:word):word; -Begin - Result:=crc_16_tab[BYTE(starting_crc XOR Word(Ord(Ch)))] XOR ((starting_crc SHR 8) AND $00FF) -End; - -Function CRC16ByString(const S:String;const starting_crc:word):word; -Var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=starting_crc; - MaxLoop:=Length(S); - For Loop:=1 to MaxLoop do - Result:=CRC16ByChar(S[Loop],Result); -End; - -Function CRCARCByChar(const Ch:Char;const starting_crc:word):word; -Begin - Result:=crc_arc_tab[BYTE(starting_crc XOR Word(Ord(Ch)))] XOR ((starting_crc SHR 8) AND $00FF) -End; - -Function CRCARCByString(const S:String;const starting_crc:word):word; -Var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=starting_crc; - MaxLoop:=Length(S); - For Loop:=1 to MaxLoop do - Result:=CRCARCByChar(S[Loop],Result); -End; - - -Procedure SetLongBit(Var L:LongInt;Const Bit:Byte;Const Setting:Boolean); -Var - Mask:LongInt; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - If Setting Then L:=L or Mask - Else L:=(L and (Not Mask)); -End; - -Function GetLongBit(const L:LongInt;const Bit:Byte):Boolean; -Var - Mask:LongInt; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - Result:=(L and Mask)<>0; -End; - -Procedure SetWordBit(Var L:Word;const Bit:Byte;const Setting:Boolean); -Var - Mask:Word; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - If Setting Then L:=L or Mask - Else L:=(L and (Not Mask)); -End; - -Function GetWordBit(const L:Word;const Bit:Byte):Boolean; -Var - Mask:Word; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - Result:=(L and Mask)<>0; -End; - -Procedure SetByteBit(Var L:Byte;const Bit:Byte;const Setting:Boolean); -Var - Mask:Byte; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - If Setting Then L:=L or Mask - Else L:=(L and (Not Mask)); -End; - -Function GetByteBit(const L:Byte;const Bit:Byte):Boolean; -Var - Mask:Byte; - -Begin - Mask:=1; - Mask:=Mask Shl (Bit-1); - Result:=(L and Mask)<>0; -End; - -Function Replicate(const Source:String;NumberOfTimes:Integer):String; -Var - SourceLength:Integer; - Dest:Integer; - -Begin -// designed this way, for BIG strings! - Dest:=1; - SourceLength:=Length(Source); - SetLength(Result,SourceLength * NumberOfTimes); - While NumberOfTimes>0 do Begin - Move(Source[1],Result[Dest],SourceLength); - Inc(Dest,SourceLength); - Dec(NumberOfTimes); - End; -End; - -Function IsWildCard(const Source:String):Boolean; -Begin - Result:=CharPos('*',Source)+CharPos('?',Source)+CharPos('%',Source)>0; -End; - -/////////////////////////////////////////////////////////////////////////////// -// Internet Routines -/////////////////////////////////////////////////////////////////////////////// -Function GetIndex(Const c:char):Integer; -var - i:Integer; -{$IFDEF ASM8086} - S:String; -{$ENDIF} - -begin -{$IFNDEF ASM8086} - i:=CharPos(c,Alphabet); //overkill for just 1 character -{$ELSE} - S := Alphabet; -asm - PUSH EDI //Preserve this register - mov EDI, S //Point EDI at Alphabet string - mov ECX, AlphaBetLength //Tell CPU how big Alphabet is - mov AL, C //and which char we want - RepNE ScaSB //"Rep"eat while "N"ot "E"qual - //this is the same as - //While (EDI^ <> AL) and (ECX>0) do begin - // Inc(EDI); - // Dec(ECX); - //end; - jnz @NotFound //Zero flag will be set if there was a match - sub EDI, S //EDI has been incremented, so EDI-OrigAdress = Char pos ! - mov I, EDI -@NotFound: - POP EDI -end; -{$ENDIF} - if (i>0) then Dec(i); - result:=i; -end; - -//gsw and ozz -function DecodeUnit(Const InStr:String):ShortString; -var - a,b,c,d:Byte; - - -begin - a:=GetIndex(InStr[1]); - b:=GetIndex(InStr[2]); - If InStr[3]='=' then Begin - SetLength(Result,1); - result[1]:=chr((a shl 2) or (b shr 4)); - end - Else If InStr[4]='=' then Begin - SetLength(Result,2); - c:=GetIndex(InStr[3]); - result[1]:=chr((a shl 2) or (b shr 4)); - result[2]:=chr((b shl 4) or (c shr 2)); - End - Else Begin - c:=GetIndex(InStr[3]); - d:=GetIndex(InStr[4]); - SetLength(result,3); - result[1]:=chr((a shl 2) or (b shr 4)); - result[2]:=chr((b shl 4) or (c shr 2)); - result[3]:=chr((c shl 6) or d); - End; -end; - - -Function Base64ToString(Const S:String):String; -var - i:Integer; - -begin - Result:=''; - for i:=((Length(s) div 4)-1) downto 0 do - Result:=DecodeUnit(Copy(s,i*4+1,4))+Result; -end; - -Function StringToBase64(Const S1:String):String; -Const - Table:String='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -var - I,K,L: Word; - S: String; - -begin - L := Length(S1); - if L mod 3 <> 0 then Inc(L, 3); - SetLength(S,(L div 3) * 4); - FillChar(S[1], Length(S), '='); - I := 0; - K := 1; - while I < Length(S1) do - begin - S[K] := Table[1+(Ord(S1[I+1]) shr 2)]; - S[K+1] := Table[1+(((Ord(S1[I+1]) and $03) shl 4) or (Ord(S1[I+2]) shr 4))]; - if I+1 >= Length(S1) then Break; - S[K+2] := Table[1+(((Ord(S1[I+2]) and $0F) shl 2) or (Ord(S1[I+3]) shr 6))]; - if I+2 >= Length(S1) then Break; - S[K+3] := Table[1+(Ord(S1[I+3]) and $3F)]; - Inc(I, 3); - Inc(K, 4); - end; - Result := S; -End; - -{Function StringToBase64(Const S1:String):String; -Const - Table:String='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -var - B:Array[0..65000] of Byte; - I,K,L: Word; - S: String; - -begin - FillChar(B, SizeOf(B), 0); - Move(S1[1], B, Length(S1)); - L := Length(S1); - if L mod 3 <> 0 then Inc(L, 3); -// S[0] := Char((L div 3) * 4); - SetLength(S,(L div 3) * 4); - FillChar(S[1], Length(S), '='); - I := 0; - K := 1; - while I < Length(S1) do - begin - S[K] := Table[1+(B[I] shr 2)]; - S[K+1] := Table[1+(((B[I] and $03) shl 4) or (B[I+1] shr 4))]; - if I+1 >= Length(S1) then Break; - S[K+2] := Table[1+(((B[I+1] and $0F) shl 2) or (B[I+2] shr 6))]; - if I+2 >= Length(S1) then Break; - S[K+3] := Table[1+(B[I+2] and $3F)]; - Inc(I, 3); Inc(K, 4); - end; - Result := S; -End;} - -function FixDottedIP(Const S:string):string; -var - n:Cardinal; - -begin - Result:='.'+S; - n:=QuickPos('.0',Result); - while n>0 do begin - Delete(Result,n+1,1); - n:=QuickPos('.0',Result); - end; - n:=QuickPos('..',Result); - While N>0 do begin - Insert('0',Result,n+1); - n:=QuickPos('..',Result); - End; - If Result[Length(Result)]='.' then Result:=Result+'0'; - Delete(Result,1,1); -end; - -Function IPStringFormated(S:String):String; -Var - n1,n2,n3,n4:Integer; - -Begin - N1:=StrToInt(Copy(S,1,CharPos('.',S)-1)); - Delete(S,1,CharPos('.',S)); - N2:=StrToInt(Copy(S,1,CharPos('.',S)-1)); - Delete(S,1,CharPos('.',S)); - N3:=StrToInt(Copy(S,1,CharPos('.',S)-1)); - Delete(S,1,CharPos('.',S)); - N4:=StringToInteger(S); - Result:=IPAddressFormatted(N1,N2,N3,N4); -End; - -Function IPAddressFormatted(Const I1,I2,I3,I4:Integer):String; -Begin - Result:=IntToStr(I4); - While Length(Result)<3 do Result:='0'+Result; - Result:=IntToStr(I3)+'.'+Result; - While Length(Result)<7 do Result:='0'+Result; - Result:=IntToStr(I2)+'.'+Result; - While Length(Result)<11 do Result:='0'+Result; - Result:=IntToStr(I1)+'.'+Result; - While Length(Result)<15 do Result:='0'+Result; -End; - -function EscapeDecode(Const S:String):String; -var - ch:Char; - val:String; - I:Integer; - -begin - Result:=S; - I:=CharPos('%',Result); - While I>0 do Begin - Val:='$'+Copy(Result,I+1,2); -try - Ch:=Char(StrToInt(Val)); -except - Ch:='a'; // 2.0.12 -end; - Result:=Copy(Result,1,I-1)+Ch+Copy(Result,I+3,Length(Result)); - I:=CharPos('%',Result); - End; - I:=CharPos('+',Result); - While I>0 do Begin - Result:=Copy(Result,1,I-1)+#32+Copy(Result,I+1,Length(Result)); - I:=CharPos('+',Result); - End; -end; - -Function EscapeEncode(Const S:String):String; -Var - Loop:Integer; - MaxLoop:Integer; - -Begin - Result:=''; - MaxLoop:=Length(S); - For Loop:=1 to MaxLoop do - If S[Loop] in ['0'..'9','.','-'] then Result:=Result+S[Loop] // 2.0.12 - Else - If S[Loop]=#32 then Result:=Result+'+' //2.0.12 RC2 - Else - If (S[Loop]<#21) or // 2.0.12 RC2 - (S[Loop]>#127) - then Result:=Result+'%'+IntToHex(Ord(S[Loop]),2) - Else Result:=Result+S[Loop] -End; - -Function EncodeDomain(S:String):String; -Var - Dot:Integer; - -Begin - Result:=''; - While (S<>'') do Begin - Dot:=CharPos('.',S); - Case Dot of - 0:Begin - Result:=Result+Chr(Length(S))+S; - S:=''; - End; - Else Begin - Result:=Result+Chr(Dot-1)+Copy(S,1,Dot-1); - Delete(S,1,Dot); - End; - End; - End; - Result:=Result+#0; -End; - -Function EncodeAddress(S:String):String; -Var - Dot:Integer; - -Begin - Result:=''; - While (S<>'') do Begin - Dot:=Pos('.',S); - Case Dot of - 0:Begin - Result:=Result+Chr(Length(S))+S; - S:=''; - End; - Else Begin - Result:=Result+Chr(Dot-1)+Copy(S,1,Dot-1); - Delete(S,1,Dot); - End; - End; - End; - Result:=Result+#7'in-addr'#4'arpa'#0; -End; - -Function DecodeDomain(S:String):String; -Var - L:Integer; - -Begin - Result:=''; - While Length(S)>0 do Begin - L:=Ord(S[1]); - If L>Length(S) then Begin - Result:=''; - Exit; - End; - Result:=Result+Copy(S,2,L)+'.'; - Delete(S,1,L+1); - End; - If Copy(Result,Length(Result),1)='.'Then Delete(Result,Length(Result),1); -End; - -Function GetActualEmailAddress(Parm,Command:String):String; -Var - Colon,Quote:Integer; - -begin - // posibilities are: - // [cmd]: - // [cmd] : - // [cmd]: - // [cmd] : - // [cmd] - // [cmd] - // you can also have "firstname lastname" in there also - Quote:=CharPos('"',Parm); - If Quote>0 then Begin - If CharPos('>',Parm)>Quote then Begin - Delete(Parm,1,Quote); - Delete(Parm,1,CharPos('"',Parm)); - End - Else Begin // 2.3 - Colon:=PosLastChar('"',Parm); - Delete(Parm,Quote,Colon-Pred(Quote)); - End; - End; - // check if space, if so let remove everything before - Trim(Parm); - // ok now possibilities are: - // [cmd]: - // : - // : - // [cmd] - Colon:=CharPos(':',Parm); - // check if colon, if so let remove everything before - If Colon>0 then - Delete(Parm,1,Colon); - // ok now possibilities are: - // - // [cmd] - // now let check if we have a command - if lowercase(copy(parm,1,length(command)))=lowercase(command) then - delete(Parm,1,length(command)); - // we trim to make sure we dont have any space left in there - Parm:=Trim(Parm); - // and return the result with no brackets - Result:=NoAngleBrackets(Parm); -End; - -/////////////////////////////////////////////////////////////////////////////// -// Date and/or Time Routines -/////////////////////////////////////////////////////////////////////////////// - -Function DayOfTheYear(const DT:TDateTime):Integer; -Var - J,Y:Word; - -begin - DecodeDate(DT,Y,J,J); - Result:=Trunc(DT)-Trunc(EncodeDate(Y,1,1))+1; -end; - -{$WARNINGS OFF} -Function DaysLeftThisYear(const DT:TDateTime):Integer; -Var - J,Y:Word; - -begin - DecodeDate(DT,Y,J,J); - Case IsLeapYear(Y) of - True:Result:=366-DayOfTheYear(DT); - False:Result:=365-DayOfTheYear(DT); - End; -end; -{$WARNINGS ON} - -Function DaysThisMonth(const DT:TDateTime):Integer; -Var - J,M,Y:Word; - -begin - DecodeDate(DT,Y,M,J); - Case M of - 2:If IsLeapYear(Y) then Result:=29 - Else Result:=28; - 4,6,9,11:Result:=30; - Else Result:=31; - End; -end; - -Function DaysLeftThisMonth(const DT:TDateTime):Integer; -Var - J,M,Y:Word; - -begin - DecodeDate(DT,Y,M,J); - Case M of - 2:If IsLeapYear(Y) then Result:=29 - Else Result:=28; - 4,6,9,11:Result:=30; - Else Result:=31; - End; - Result:=Result-J; -end; - -Function IsTimeAM(const DT:TDateTime):Boolean; -begin - Result:=Frac(DT)<0.5; -end; - -Function IsTimePM(const DT:TDateTime):Boolean; -begin - Result:=Frac(DT)>0.5; -end; - -Function IsTimeNoon(const DT:TDateTime):Boolean; -begin - Result:=Frac(DT)=0.5; -end; - -Function IsTimeMidnight(const DT:TDateTime):Boolean; -begin - Result:=Frac(DT)=0.0; -end; - -Function DateTimeToGMT(const DT:TDateTime):TDateTime; -begin - Result:=DT+LocalTimeZoneBias/1440; -end; - -Function DateTimeToLocal(const DT:TDateTime):TDateTime; -begin - Result:=DT-LocalTimeZoneBias/1440; -end; - -Function IsLeapYear(Const Year:Word):Boolean; -begin - Result:=((Year and 3)=0) and ((Year mod 100>0) or (Year mod 400=0)); -end; - -Function LocalTimeZoneBias:Integer; -{$IFDEF LINUX} -Var - TV:TTimeval; - TZ:TTimezone; - -Begin - gettimeofday(TV,TZ); - Result:=TZ.tz_minuteswest; -End; -{$ELSE} -var - TimeZoneInformation:TTimeZoneInformation; - Bias:Longint; - -begin - case GetTimeZoneInformation(TimeZoneInformation) of - TIME_ZONE_ID_STANDARD:Bias:=TimeZoneInformation.Bias+TimeZoneInformation.StandardBias; - TIME_ZONE_ID_DAYLIGHT:Bias:=TimeZoneInformation.Bias+((TimeZoneInformation.DaylightBias div 60)*-100); - else Bias:=TimeZoneInformation.Bias; - End; - Result:=Bias; -End; -{$ENDIF} - -Function TimeZone:String; -{$IFDEF LINUX} -Begin - Result:=ShortTimeZone; -End; -{$ELSE} -var - lpTimeZoneInfo:TTimeZoneInformation; - -Begin - Result:=''; - If GetTimeZoneInformation(lpTimeZoneInfo)=TIME_ZONE_ID_STANDARD then - {$IFDEF VER90} - Result:=WideCharToString({@}Pointer(lpTimeZoneInfo.StandardName)) - {$ELSE} - Result:=lpTimeZoneInfo.StandardName - {$ENDIF} - Else - If GetTimeZoneInformation(lpTimeZoneInfo)=TIME_ZONE_ID_DAYLIGHT then - {$IFDEF VER90} - Result:=WideCharToString({@}Pointer(lpTimeZoneInfo.DaylightName)); - {$ELSE} - Result:=lpTimeZoneInfo.DaylightName; - {$ENDIF} -End; -{$ENDIF} - -Function ShortTimeZone:String; -{$IFDEF LINUX} -var - T: TTime_T; - UT: TUnixTime; - -begin - __time(@T); - localtime_r(@T, {$IFDEF FPC}@{$ENDIF}UT); - Result:=PChar(UT.__tm_zone); -End; -{$ELSE} -Var - TPos:Integer; - -Begin - Result:=TimeZone; - TPos:=1; - While TPos<=Length(Result) do - If Not (Result[TPos] in ['A'..'Z']) then Delete(Result,TPos,1) - Else Inc(TPos); -End; -{$ENDIF} - -Function TimeZoneBias:String; // this correct? 2.0.12 -Begin - Result:=IntToStr(LocalTimeZoneBIAS); - While Length(Result)<4 do Result:='0'+Result; - If IsNumeric(Result[1]) then Result:='-'+Result; -End; - -Function ToUnixSlashes(Const S:String):String; -{.$IFNDEF ASM8086} -var - Loop:Integer; - MaxLoop:Integer; - -begin - Result:=S; - MaxLoop:=Length(Result); - For Loop:=1 to MaxLoop do If Result[Loop]='\' then Result[Loop]:='/'; -end; -(* -{$ElSE} -Var - LenOfResult:Integer; - FirstChar:Pointer; - -Begin - Result:=S; - LenOfResult:=Length(Result); - If LenOfResult<1 then Exit; //2.4 - FirstChar:=Pointer(Result); -asm - push ESI - mov ESI, FirstChar; - mov ECX, LenOfResult -@Loop: - mov Al, [ESI] - cmp Al, '\' - jne @NoChange - mov Al, '/' - mov [ESI], Al -@NoChange: - Inc ESI - Dec ECX - jnz @Loop - pop ESI -end; -End; -{$ENDIF} -*) - -Function ToDOSSlashes(Const S:String):String; -{.$IFNDEF ASM8086} -var - Loop:Integer; - MaxLoop:Integer; - -begin - Result:=S; - MaxLoop:=Length(Result); - For Loop:=1 to MaxLoop do If Result[Loop]='/' then Result[Loop]:='\'; -end; -(* -{$ElSE} -Var - LenOfResult:Integer; - FirstChar:Pointer; - -Begin - Result:=S; - LenOfResult:=Length(Result); - If LenOfResult<1 then Exit; //2.0.12 RC2 - FirstChar:=Pointer(Result); -asm - push ESI - mov ESI, FirstChar; - mov ECX, LenOfResult -@Loop: - mov Al, [ESI] - cmp Al, '/' - jne @NoChange - mov Al, '\' - mov [ESI], Al -@NoChange: - Inc ESI - Dec ECX - jnz @Loop - pop ESI -end; -End; -{$ENDIF} -*) - -Function ToOSSlashes(Const S:String):String; // 2.3 -Begin -{$IFDEF LINUX} - Result:=ToUnixSlashes(S); -{$ELSE} - Result:=ToDOSSlashes(S); -{$ENDIF} -End; - -(****************************************************************************** -CHANGEDIR: {Rewritten to call Windows.API for the result!} - The GetFullPathName function merges the name of the current drive and - directory with the specified filename to determine the full path and - filename of the specified file. It also calculates the address of the - filename portion of the full path and filename. This function does not - verify that the resulting path and filename are valid or that they - refer to an existing file on the associated volume. -******************************************************************************) -Function ChangeDir(Const S,RP:String):String; -{$IFDEF LINUX} -Begin - Result:=''; // redesign -End; -{$ELSE} -var - FileName:String; - FName: PChar; - Buffer: array[0..MAX_PATH - 1] of Char; - -begin - FileName:=ToDOSSlashes(S+RP); - SetString(Result,Buffer,GetFullPathName(PChar(FileName),SizeOf(Buffer), - Buffer,FName)); -End; -{$ENDIF} - -Function DateTimeToGMTRFC822(Const DT:TDateTime):String; -Begin - Result:=FormatDateTime('ddd, dd mmm yyyy hh:nn:ss',DateTimeToGMT(DT))+' GMT'; -End; - -Function DateTimeToGMTRFC850(Const DT:TDateTime):String; -Begin - Result:=FormatDateTime('dddd, dd-mmm-yy hh:nn:ss',DateTimeToGMT(DT))+' GMT'; -End; - -Function DateTimeToRFC850(Const DT:TDateTime):String; -Begin - Result:=FormatDateTime('dddd, dd-mmm-yy hh:nn:ss',DT)+#32+ShortTimeZone; -End; - -Function DateTimeToRFC850Bias(Const DT:TDateTime):String; -Begin - Result:=FormatDateTime('ddd, dd mmm yyyy hh:nn:ss',DT)+#32+TimeZoneBias; -End; - -Function RFCToDateTime(S:String):TDateTime; -Var - M,D,Y:Word; - H,N,Sc,T:Word; - Ch,CHtag:Char; - Ts:String; - PosCh:integer; - -Begin - - // added bu gsw - posch:=CharPos(';',S); - if posch>0 then - delete(s,posCH,length(s)-posCh+1); - // - T:=0; -// Figure out which format S is... - Ch:=S[3]; - S:=Uppercase(S); - If Ch=#32 then Begin // ANSI C ASCTIME() - Delete(S,1,4); {remove DDD#32} - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)); - S:=Trim(S); - M:=QuickPos(TS,#32#32'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC') div 3; - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - D:=StrToInt(TS); -except - D:=1; -end; - Ch:=S[3]; - If Ch<>':' then Begin {timestamp was not where we expected it, so it must be YEAR} - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Y:=StrToInt(TS); -except - DecodeDate(Now,Y,T,T); - T:=0; -end; - End; - Ts:=Copy(S,1,CharPos(':',S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - H:=StrToInt(TS); -Except - H:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - N:=StrToInt(TS); -Except - N:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Sc:=StrToInt(TS); -Except - Sc:=0; -End; - If S<>'' then Begin {just insase it is setup wrong} - Ch:=S[1]; - If Ch in ['0'..'9'] then Begin -try - Y:=StrToInt(S); -except - DecodeDate(Now,Y,T,T); - T:=0; -end; - End; - End; - End - Else if Ch=',' then Begin // RFC 822 or RFC 1123 - Delete(S,1,CharPos(#32,S)); - S:=Trim(S); - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - D:=StrToInt(TS); -except - D:=1; -end; - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); - - M:=QuickPos(TS,#32#32'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC') div 3; - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Y:=StrToInt(TS); -except - DecodeDate(Now,Y,T,T); - T:=0; -end; - Ts:=Copy(S,1,CharPos(':',S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - H:=StrToInt(TS); -Except - H:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - N:=StrToInt(TS); -Except - N:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Sc:=StrToInt(TS); -Except - Sc:=0; -End; - End - Else - Begin // RFC 850 or RFC 1036 - Delete(S,1,CharPos(#32,S)); - S:=Trim(S); - - // added by Gsw - chtag:='-'; - posCh:=charpos(chtag,S); - if (posCH>0) and (posCh<5) then - chtag:='-' - else - chtag:=' '; - // - - Ts:=Copy(S,1,CharPos(chtag,S)-1); // mod by gsw - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - D:=StrToInt(TS); -except - D:=1; -end; - Ts:=Copy(S,1,CharPos(chtag,S)-1); // mod by gsw - Delete(S,1,Length(TS)+1); - S:=Trim(S); - M:=QuickPos(TS,#32#32'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC') div 3; - Ts:=Copy(S,1,CharPos(#32,S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Y:=StrToInt(TS); -except - DecodeDate(Now,Y,T,T); - T:=0; -end; - Ts:=Copy(S,1,CharPos(':',S)-1); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - H:=StrToInt(TS); -Except - H:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - N:=StrToInt(TS); -Except - N:=0; -End; - Ts:=Copy(S,1,2); - Delete(S,1,Length(TS)+1); - S:=Trim(S); -try - Sc:=StrToInt(TS); -Except - Sc:=0; -End; - End; - // Clean up non-century type timestamps. - If Y<100 then Begin - DecodeDate(Now,Y,T,T); -{ If Y>1999 then Y:=Y+2000 - Else Y:=Y+1900;} {2.0.h} - End; - try // added by gsw - Result:=EncodeDate(Y,M,D)+EncodeTime(H,N,Sc,T); - except - result:=now; - end; -End; - -PROCEDURE UNPACKTIME(Const P:LONGINT;VAR DT:TDATETIME); -BEGIN - DT:=FILEDATETODATETIME(P); -END; - -PROCEDURE PACKTIME(VAR DT:TDATETIME;VAR P:LONGINT); -BEGIN - P:=DATETIMETOFILEDATE(DT); -END; - -Function GetDosDate: LongInt; -Begin - Result:=DATETIMETOFILEDATE(Now); -End; - -Function GetDOW:Word; -Begin - Result:=DayOfWeek(Now); -End; - -Function TimeOut(Const MyTime:DWord):Boolean; -Begin - Result:=MyTime<=TimeCounter; -End; - -Function TimeCounter:DWord; -{$IFDEF LINUX} -Var - TV:TTimeval; - -Begin - gettimeofday(TV,nil); - Result:=(TV.tv_sec*1000)+(TV.tv_usec div 1000); -End; -(* the following code returns EPOCH -var - T: TTime_T; -begin - __time(@T); - Result:=T; -end; -//*) -{$ELSE} -Var - lpSystemTimeAsFileTime:TFileTime; - X:Cardinal; - -Begin - GetSystemTimeAsFileTime(lpSystemTimeAsFileTime); - {$WARNINGS OFF} - If lpSystemTimeAsFileTime.dwLowDateTime<0 then X:=lpSystemTimeAsFileTime.dwLowDateTime shr 1 - {$WARNINGS ON} - Else X:=lpSystemTimeAsFileTime.dwLowDateTime; - Result:=(((lpSystemTimeAsFileTime.dwHighDateTime mod 1000)*1000000)+ - X div 10000); -// Result:=GetTickCount; -End; -{$ENDIF} - -Function AddBackSlash(Const S:String):String; -Begin - Result:=S; - If Copy(Result,Length(Result),1)<>'\' then Result:=Result+'\'; -End; - -Function NoBackSlash(Const S:String):String; -Var - I:Integer; - -Begin - Result:=S; - I:=Length(S); - If I>0 then - If Result[I]='\' then Delete(Result,Length(Result),1); -End; - -{$IFDEF VER100} // Delphi3 code -function StringReplace(const S, OldPattern, NewPattern: string; - Flags: TReplaceFlags): string; -var - SearchStr, Patt, NewStr: string; - Offset: Integer; -begin - if rfIgnoreCase in Flags then - begin - SearchStr := AnsiUpperCase(S); - Patt := AnsiUpperCase(OldPattern); - end else - begin - SearchStr := S; - Patt := OldPattern; - end; - NewStr := S; - Result := ''; - while SearchStr <> '' do - begin - {$IFDEF VER90} - Offset := Pos(Patt, SearchStr); - {$ELSE} - Offset := AnsiPos(Patt, SearchStr); - {$ENDIF} - if Offset = 0 then - begin - Result := Result + NewStr; - Break; - end; - Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern; - NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); - if not (rfReplaceAll in Flags) then - begin - Result := Result + NewStr; - Break; - end; - SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt); - end; -end; - -procedure FreeAndNil(var Obj); -var - Temp:TObject; - -begin - Temp:=TObject(Obj); - Pointer(Obj):=nil; - Temp.Free; -end; -{$ENDIF} - -function PCharLen(Str:PChar):integer; // both the pas and asm are 3.8 times faster than SysUtil StrLen!! -{$IFDEF ASM8086} -asm - MOV EDX,7 - ADD EDX,EAX { pointer+7 used in the end } - PUSH EBX { is necessary; even in your version} - MOV EBX,[EAX] { read first 4 bytes} - ADD EAX,4 { increment pointer} -@L1: LEA ECX,[EBX-$01010101] { subtract 1 from each byte} - XOR EBX,-1 { invert all bytes} - AND ECX,EBX { and these two} - MOV EBX,[EAX] { read next 4 bytes} - ADD EAX,4 { increment pointer} - AND ECX,80808080H { test all sign bits} - JZ @L1 { no zero bytes, continue loop} - TEST ECX,00008080H { test first two bytes} - JNZ @L2 { *was JNZ SHORT @L2*} - SHR ECX,16 { not in the first 2 bytes} - ADD EAX,2 -@L2: SHL CL,1 { use carry flag to avoid a branch} - POP EBX { Likewise; see above} - SBB EAX,EDX { compute length} -end; -{$ELSE} -var - p:^cardinal; - q:pchar; - bytes,r1,r2:cardinal; -begin - p:=pointer(tStr); - repeat - q:=pchar(p^); - r2:=cardinal({@}Pointer(q[-$01010101])); - r1:=cardinal(q) xor $FFFFFFFF; - bytes:=r1 and r2; - inc(p); - until (bytes and $80808080)<>0; - result:=integer(p)-integer(tStr)-4; - if (bytes and $00008080)=0 then - begin - bytes:=bytes shr 16; - inc(result,2); - end; - if (bytes and $80)=0 then - inc(result); -end; -{$ENDIF} - -{$IFDEF ASM8086} -function LRot16(X: Word; c: longint): Word; assembler; -asm - mov ecx,&c - mov ax,&X - rol ax,cl - mov &Result,ax -end; - -function RRot16(X: Word; c: longint): Word; assembler; -asm - mov ecx,&c - mov ax,&X - ror ax,cl - mov &Result,ax -end; - -function LRot32(X: DWord; c: longint): DWord; register; assembler; -asm - mov ecx, edx - rol eax, cl -end; - -function RRot32(X: DWord; c: longint): DWord; register; assembler; -asm - mov ecx, edx - ror eax, cl -end; - -function SwapDWord(X: DWord): DWord; register; assembler; -asm - xchg al,ah - rol eax,16 - xchg al,ah -end; - -{$ELSE} -function LRot16(X: Word; c: longint): Word; -begin - LRot16:= (X shl c) or (X shr (16 - c)); -end; - -function RRot16(X: Word; c: longint): Word; -begin - RRot16:= (X shr c) or (X shl (16 - c)); -end; - -function LRot32(X: DWord; c: longint): DWord; -begin - LRot32:= (X shl c) or (X shr (32 - c)); -end; - -function RRot32(X: DWord; c: longint): DWord; -begin - RRot32:= (X shr c) or (X shl (32 - c)); -end; - -function SwapDWord(X: DWord): DWord; -begin - Result:= (X shr 24) or ((X shr 8) and $FF00) or ((X shl 8) and $FF0000) or (X shl 24); -end; -{$ENDIF} - -/////////////////////////////////////////////////////////////////////////////// -// DXSock 3.0 Additions -/////////////////////////////////////////////////////////////////////////////// -Function Center(S:String;MaxWidth:Integer):String; -Var - I:Integer; - Ws:String; - -Begin - If Length(S) mod 2=0 then Result:=S - Else Result:=S+#32; - If Length(Result)>=MaxWidth then Exit; - I:=MaxWidth-Length(Result); - If I mod 2<>0 then Begin - Result:=Result+#32; - Dec(I); - End; - If I>0 then Begin - SetLength(Ws,I div 2); - FillChar(Ws[1],I div 2,#32); - Result:=Ws+Result+Ws; - End; -End; - -Function LeftJustifyCh(Const S:String;Const Ch:Char;Const MaxLength:Integer):String; -Begin - If MaxLength#64 then isNum:=false - else Delete(S,1,1); - until (isNum=false) or (S=''); - Result:=S; - If S='' then Exit; - SoundString[0]:=#255; - FillChar(SoundString[1],255,'0'); -// Step 1: ASCII to Soundex - For I1:=1 to Length(S)-1 Do Begin - I2:=Ord(UpCase(S[I1+1]))-64; - If ((I2<1) Or (I2>26)) Then I2:=1; - SoundString[I1]:=Table[I2]; - End; -// Initialize for second pass - I1 := 1; - Repeat - While(SoundString[I1]='.') Do Delete(SoundString,I1,1); - While((SoundString[I1]=SoundString[I1+1]) And (SoundString[I1]<>'0')) Do Delete(SoundString, I1, 1); - Inc(I1); - Until(SoundString[I1]='0'); - Result:=Ch+Copy(SoundString,1,3); -End; - -function WildCompare(LookingFor,SourceStr:String):Boolean; -Var - Ws:String; - MaxInputWord:Integer; - MaxWild:Integer; - cInput:Integer; - cWild:Integer; - HelpWild:String; - LengthHelpWild:Integer; - Q:Integer; - -function FindPart(helpwilds,input_word:string):integer; -Var - Q1,Q2,Q3:Integer; -// Between:Integer; - Diff:Integer; - -begin - Q1:=CharPos('?',helpwilds); - if Q1=0 then Result:=QuickPos(helpwilds,input_word) - else Begin - Q3:=Length(helpwilds); - Diff:=Length(input_word)-Q3; - If Diff<0 then begin - Result:=0; - Exit; - end; -// Between:=0; - for Q1:=0 to Diff do begin - for Q2:=1 to Q3 do begin - If (input_word[Q1+Q2]=helpwilds[Q2]) or - (helpwilds[Q2]='?') then begin - if Q2=Q3 then Begin - Result:=Q1+1; - Exit; - end; - End - else Break; - End; - End; - Result:=0; - end; -end; - -function SearchNext(Var WildS:String):Integer; -Begin - Result:=CharPos('*',WildS); - If Result<>0 then WildS:=Copy(WildS,1,Result-1); -End; - -Begin - Ws:=LookingFor; - While CharPos('%',Ws)>0 do Ws[CharPos('%',Ws)]:='*'; - While QuickPos('**',Ws)>0 do Delete(Ws,QuickPos('**',Ws),1); - MaxInputWord:=Length(SourceStr); - MaxWild:=Length(Ws); - cInput:=1; - cWild:=1; - Result:=True; - Repeat - if SourceStr[cInput]=Ws[cWild] then Begin - inc(cWild); - inc(cInput); - continue; - end - else if Ws[cWild]='?' then begin - inc(cWild); - inc(cInput); - continue; - end - else if Ws[cWild]='*' then Begin - HelpWild:=Copy(Ws,cWild+1,MaxWild); - q:=SearchNext(HelpWild); - LengthHelpWild:=Length(HelpWild); - If Q=0 then begin - If HelpWild='' then Exit; - For Q:=0 to LengthHelpWild-1 do - If (HelpWild[LengthHelpWild-Q]<>SourceStr[MaxInputWord-Q]) and - (HelpWild[LengthHelpWild-Q]<>'?') then Begin - Result:=False; - Exit; - End; - Exit; - End; - Inc(cWild,1+LengthHelpWild); - Q:=FindPart(HelpWild,Copy(SourceStr,cInput,Length(SourceStr))); - If Q=0 then Begin - Result:=False; - Exit; - End; - cInput:=Q+LengthHelpWild; - Continue; - End; - Result:=False; - Exit; - Until (cInput>MaxInputWord) or (cWild>MaxWild); - If cInput<=MaxInputWord then Result:=False - Else If cWild<=MaxWild then Result:=False; -End; - -end. - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROMasterServerLibrary_Intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROMasterServerLibrary_Intf.pas deleted file mode 100644 index 4b52cd8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROMasterServerLibrary_Intf.pas +++ /dev/null @@ -1,434 +0,0 @@ -unit ROMasterServerLibrary_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -interface -{$I RemObjects.inc} -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClasses, uROClient, uROTypes, uROClientIntf; - -const - { Library ID } - LibraryUID = '{3B3A1E32-67EF-4541-A26A-73F27A8608BD}'; - - { Service Interface ID's } - IROSessionManager_IID : TGUID = '{9B77C6B4-F2CA-4CFF-91F5-A194265725CF}'; - - { Event ID's } - -type - { Forward declarations } - IROSessionManager = interface; - - TROSessionManagerConfiguration = class; - TROUserSession = class; - - - { TROSessionManagerConfiguration } - TROSessionManagerConfiguration = class(TROComplexType) - private - fMaxSessions: Integer; - fSessionDuration: Integer; - fMessageDuration: Integer; - public - procedure Assign(iSource: TPersistent); override; - published - property MaxSessions:Integer read fMaxSessions write fMaxSessions; - property SessionDuration:Integer read fSessionDuration write fSessionDuration; - property MessageDuration:Integer read fMessageDuration write fMessageDuration; - end; - - { TROSessionManagerConfigurationCollection } - TROSessionManagerConfigurationCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TROSessionManagerConfiguration; - procedure SetItems(Index: integer; const Value: TROSessionManagerConfiguration); - public - constructor Create; overload; - function Add: TROSessionManagerConfiguration; reintroduce; - property Items[Index: integer]:TROSessionManagerConfiguration read GetItems write SetItems; default; - end; - - { TROUserSession } - TROUserSession = class(TROComplexType) - private - fSessionID: String; - fCreated: DateTime; - fLastAccessed: DateTime; - fData: Binary; - function GetData: Binary; - public - procedure Assign(iSource: TPersistent); override; - published - property SessionID:String read fSessionID write fSessionID; - property Created:DateTime read fCreated write fCreated; - property LastAccessed:DateTime read fLastAccessed write fLastAccessed; - property Data:Binary read GetData write fData; - end; - - { TROUserSessionCollection } - TROUserSessionCollection = class(TROCollection) - protected - constructor Create(aItemClass: TCollectionItemClass); overload; - function GetItems(Index: integer): TROUserSession; - procedure SetItems(Index: integer; const Value: TROUserSession); - public - constructor Create; overload; - function Add: TROUserSession; reintroduce; - property Items[Index: integer]:TROUserSession read GetItems write SetItems; default; - end; - - { IROSessionManager } - IROSessionManager = interface - ['{9B77C6B4-F2CA-4CFF-91F5-A194265725CF}'] - function ReadConfiguration: TROSessionManagerConfiguration; - procedure UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); - function CreateSession(const SessionID: String; const SessionData: Binary): Boolean; - function ReadSession(const SessionID: String): TROUserSession; - procedure UpdateSession(const SessionID: String; const SessionData: Binary); - function DeleteSession(const SessionID: String): Boolean; - procedure ClearSessions(const OnlyExpired: Boolean); - function GetSessionCount: Integer; - procedure StoreMessage(const SourceSessionID: String; const MessageData: Binary; const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; - const SessionList: String); - function GetMessages(const SessionID: String; out MessageData: Binary): Integer; - function GetTimeout: Integer; - procedure SetTimeout(const value: Integer); - end; - - { CoROSessionManager } - CoROSessionManager = class - class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IROSessionManager; - end; - - { TROSessionManager_Proxy } - TROSessionManager_Proxy = class(TROProxy, IROSessionManager) - protected - function __GetInterfaceName:string; override; - - function ReadConfiguration: TROSessionManagerConfiguration; - procedure UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); - function CreateSession(const SessionID: String; const SessionData: Binary): Boolean; - function ReadSession(const SessionID: String): TROUserSession; - procedure UpdateSession(const SessionID: String; const SessionData: Binary); - function DeleteSession(const SessionID: String): Boolean; - procedure ClearSessions(const OnlyExpired: Boolean); - function GetSessionCount: Integer; - procedure StoreMessage(const SourceSessionID: String; const MessageData: Binary; const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; - const SessionList: String); - function GetMessages(const SessionID: String; out MessageData: Binary): Integer; - function GetTimeout: Integer; - procedure SetTimeout(const value: Integer); - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROEventRepository, uRORes; - -{ TROSessionManagerConfiguration } - -procedure TROSessionManagerConfiguration.Assign(iSource: TPersistent); -var lSource: ROMasterServerLibrary_Intf.TROSessionManagerConfiguration; -begin - inherited Assign(iSource); - if (iSource is ROMasterServerLibrary_Intf.TROSessionManagerConfiguration) then begin - lSource := ROMasterServerLibrary_Intf.TROSessionManagerConfiguration(iSource); - MaxSessions := lSource.MaxSessions; - SessionDuration := lSource.SessionDuration; - MessageDuration := lSource.MessageDuration; - end; -end; - -{ TROSessionManagerConfigurationCollection } -constructor TROSessionManagerConfigurationCollection.Create; -begin - inherited Create(TROSessionManagerConfiguration); -end; - -constructor TROSessionManagerConfigurationCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TROSessionManagerConfigurationCollection.Add: TROSessionManagerConfiguration; -begin - result := TROSessionManagerConfiguration(inherited Add); -end; - -function TROSessionManagerConfigurationCollection.GetItems(Index: integer): TROSessionManagerConfiguration; -begin - result := TROSessionManagerConfiguration(inherited Items[Index]); -end; - -procedure TROSessionManagerConfigurationCollection.SetItems(Index: integer; const Value: TROSessionManagerConfiguration); -begin - TROSessionManagerConfiguration(inherited Items[Index]).Assign(Value); -end; - -{ TROUserSession } - -procedure TROUserSession.Assign(iSource: TPersistent); -var lSource: ROMasterServerLibrary_Intf.TROUserSession; -begin - inherited Assign(iSource); - if (iSource is ROMasterServerLibrary_Intf.TROUserSession) then begin - lSource := ROMasterServerLibrary_Intf.TROUserSession(iSource); - SessionID := lSource.SessionID; - Created := lSource.Created; - LastAccessed := lSource.LastAccessed; - if Assigned(Data) then - - Data.Assign(lSource.Data); - end; -end; - -function TROUserSession.GetData: Binary; -begin - result := fData; -end; - -{ TROUserSessionCollection } -constructor TROUserSessionCollection.Create; -begin - inherited Create(TROUserSession); -end; - -constructor TROUserSessionCollection.Create(aItemClass: TCollectionItemClass); -begin - inherited Create(aItemClass); -end; - -function TROUserSessionCollection.Add: TROUserSession; -begin - result := TROUserSession(inherited Add); -end; - -function TROUserSessionCollection.GetItems(Index: integer): TROUserSession; -begin - result := TROUserSession(inherited Items[Index]); -end; - -procedure TROUserSessionCollection.SetItems(Index: integer; const Value: TROUserSession); -begin - TROUserSession(inherited Items[Index]).Assign(Value); -end; - -{ CoROSessionManager } - -class function CoROSessionManager.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IROSessionManager; -begin - result := TROSessionManager_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TROSessionManager_Proxy } - -function TROSessionManager_Proxy.__GetInterfaceName:string; -begin - result := 'ROSessionManager'; -end; - -function TROSessionManager_Proxy.ReadConfiguration: TROSessionManagerConfiguration; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ReadConfiguration'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(ROMasterServerLibrary_Intf.TROSessionManagerConfiguration), result, []); - finally - __Message.FreeStream; - end -end; - -procedure TROSessionManager_Proxy.UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'UpdateConfiguration'); - __Message.Write('Configuration', TypeInfo(ROMasterServerLibrary_Intf.TROSessionManagerConfiguration), Configuration, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.CreateSession(const SessionID: String; const SessionData: Binary): Boolean; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'CreateSession'); - __Message.Write('SessionID', TypeInfo(String), SessionID, []); - __Message.Write('SessionData', TypeInfo(Binary), SessionData, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.ReadSession(const SessionID: String): TROUserSession; -begin - try - result := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ReadSession'); - __Message.Write('SessionID', TypeInfo(String), SessionID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(ROMasterServerLibrary_Intf.TROUserSession), result, []); - finally - __Message.FreeStream; - end -end; - -procedure TROSessionManager_Proxy.UpdateSession(const SessionID: String; const SessionData: Binary); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'UpdateSession'); - __Message.Write('SessionID', TypeInfo(String), SessionID, []); - __Message.Write('SessionData', TypeInfo(Binary), SessionData, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.DeleteSession(const SessionID: String): Boolean; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'DeleteSession'); - __Message.Write('SessionID', TypeInfo(String), SessionID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Boolean), result, []); - finally - __Message.FreeStream; - end -end; - -procedure TROSessionManager_Proxy.ClearSessions(const OnlyExpired: Boolean); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ClearSessions'); - __Message.Write('OnlyExpired', TypeInfo(Boolean), OnlyExpired, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.GetSessionCount: Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetSessionCount'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.FreeStream; - end -end; - -procedure TROSessionManager_Proxy.StoreMessage(const SourceSessionID: String; const MessageData: Binary; const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; - const SessionList: String); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'StoreMessage'); - __Message.Write('SourceSessionID', TypeInfo(String), SourceSessionID, []); - __Message.Write('MessageData', TypeInfo(Binary), MessageData, []); - __Message.Write('ExcludeSender', TypeInfo(Boolean), ExcludeSender, []); - __Message.Write('ExcludeSessionList', TypeInfo(Boolean), ExcludeSessionList, []); - __Message.Write('SessionList', TypeInfo(String), SessionList, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.GetMessages(const SessionID: String; out MessageData: Binary): Integer; -begin - try - MessageData := nil; - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetMessages'); - __Message.Write('SessionID', TypeInfo(String), SessionID, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - __Message.Read('MessageData', TypeInfo(Binary), MessageData, []); - finally - __Message.FreeStream; - end -end; - -function TROSessionManager_Proxy.GetTimeout: Integer; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetTimeout'); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(Integer), result, []); - finally - __Message.FreeStream; - end -end; - -procedure TROSessionManager_Proxy.SetTimeout(const value: Integer); -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'SetTimeout'); - __Message.Write('value', TypeInfo(Integer), value, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - finally - __Message.FreeStream; - end -end; - -initialization - RegisterROClass(TROSessionManagerConfiguration); - RegisterROClass(TROUserSession); - RegisterProxyClass(IROSessionManager_IID, TROSessionManager_Proxy); - - -finalization - UnregisterROClass(TROSessionManagerConfiguration); - UnregisterROClass(TROUserSession); - UnregisterProxyClass(IROSessionManager_IID); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROServiceDiscovery.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROServiceDiscovery.RODL deleted file mode 100644 index 39ed565..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ROServiceDiscovery.RODL +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects.inc deleted file mode 100644 index e966b56..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects.inc +++ /dev/null @@ -1,127 +0,0 @@ -{$INCLUDE eDefines.inc} - -{ Define to check for RemObjects SDK 3.0 [vs. future versions] } -{.$DEFINE ROSDK4} -{$DEFINE ROSDK5} - -{ Define to check for RemObjects SDK 3.0 and above [vs. older versions] } -{$DEFINE ROSDK3UP} -{$DEFINE ROSDK4UP} -{$DEFINE ROSDK5UP} - -{ DXSock } - - { To use RemObjects with the standalone version of DXSock, simply remove the - define below. Note that this has only been tested with DXSock 3.0, and that - doing so requires a separate license for DXSock from Brain PatchWorks - see http://www.bpdx.com for more information } - - {$DEFINE RemObjects_USE_RODX} - -{ Indy } - - { If you are using latest Indy 10 in Delphi 6 or 7, just uncomment the - RemObjects_INDY10_in_Delphi67 DEFINE right below, and remove the Indy - package references from the Requires section of RemObjects_Indy_Dx.dpk - before re-compiling your RemObjects Indy package. } - - {.$DEFINE RemObjects_INDY10_in_Delphi67} - {$IFDEF RemObjects_INDY10_in_Delphi67} - {$DEFINE RemObjects_INDY10} - {$DEFINE RemObjects_INDY10B} - {$DEFINE RemObjects_GLOBAL_INDY_DEFINE} - {$ENDIF} - - {$IFNDEF RemObjects_GLOBAL_INDY_DEFINE} - - {$UNDEF RemObjects_INDY8} - {$UNDEF RemObjects_INDY9} - {$UNDEF RemObjects_INDY10} - - {$IFDEF FPC} - {$DEFINE RemObjects_INDY10} - {$DEFINE RemObjects_INDY10B} - {$ELSE} - {$IFDEF DELPHI10UP} - {$DEFINE RemObjects_INDY10} - {$DEFINE RemObjects_INDY10B} - {$ELSE} - {$IFDEF DELPHI9UP} - {$DEFINE RemObjects_INDY10} - {$DEFINE RemObjects_INDY10A} - {$ELSE} - {$IFDEF DELPHI7UP} - {$DEFINE RemObjects_INDY9} - {$ELSE} - {$DEFINE RemObjects_INDY8} - {$ENDIF} - {$ENDIF} - {$ENDIF} - - {$IFDEF KYLIX} - {$IFDEF KYLIX3UP} - {$DEFINE RemObjects_INDY9} - {$ELSE} - {$DEFINE RemObjects_INDY8} - {$ENDIF} - {$ENDIF} - {$ENDIF} - - { If you are using Indy 9 in Delphi 6 just uncomment the Indy9 DEFINE below, - and remove the Indy package references from the Requires section of - RemObjects_Indy_D6.dpk before compiling your RemObjects Indy package. } - - {.$DEFINE RemObjects_INDY9} - - {$IFDEF RemObjects_INDY9} - {$UNDEF RemObjects_INDY8} - {$ENDIF} - - {$ENDIF} - - { If you are using a newer version of Indy that properly works at designtime, - you can set define the define below. If the define is not set (as is the - default), Indy channels cannot be used to connect at designtime, trying so - will display a warning message. - - If you enable this define and receive an Access Violation when trying to - connect at designtime, then your Indy version does not yet include the - fix for this problem. Please contact the Indy Crew for details. - - This problem applies to the Delphi Windows IDE's only; Kylix is not affected. } - - {.$DEFINE RemObjects_INDY_DESIGNTIME_FIX} - -{ Thread Names in Debugger } - - {$IFDEF DELPHI7UP} - {$DEFINE RemObjects_SetThreadName} - {$ENDIF} - -{ XML } - - {$IFDEF MSWINDOWS} - {$DEFINE RemObjects_MSXML} - {$ENDIF} - {$IFDEF LINUX} - {$DEFINE RemObjects_OpenXML} - {$ENDIF} - - { if we someone manually defined RemObjects_OpenXML, then undef RemObjects_MSXML } - {$IFDEF RemObjects_OpenXML} - {$UNDEF RemObjects_MSXML} - {$ENDIF} - -{ Encryption } - - {$IFDEF MSWINDOWS} - {$DEFINE RemObjects_UseEncryption } - {$ENDIF MSWINDOWS} - - {$IFDEF FPC} - {$MODE DELPHI} - {$UNDEF RemObjects_UseEncryption} - {$DEFINE RemObjects_OpenXML} - {$UNDEF RemObjects_MSXML} - {$ENDIF} - {$Q-,B-,R-} diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.bdsproj deleted file mode 100644 index 437e515..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.bdsproj +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - RemObjects_BPDX_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - BPDX Library - False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - - - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - - $00000000 - - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - False - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.cfg deleted file mode 100644 index b1c5a4f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.cfg +++ /dev/null @@ -1,52 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10" --O"..\Dcu\D10" --I"..\Dcu\D10" --R"..\Dcu\D10" --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dpk deleted file mode 100644 index 0134bf6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package RemObjects_BPDX_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - BPDX Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - designide, - RemObjects_Core_D10, - RemObjects_RODX_D10; - -contains - uROBPDXHTTPServer in 'uROBPDXHTTPServer.pas', - uROBPDXTCPServer in 'uROBPDXTCPServer.pas', - RemObjects_BPDX_Reg in 'RemObjects_BPDX_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dproj deleted file mode 100644 index 8815973..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.dproj +++ /dev/null @@ -1,117 +0,0 @@ - - - {e83cd92a-d359-4246-b0d2-a93d5f176eba} - RemObjects_BPDX_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\RemObjects_BPDX_D10.bpl - - - 7.0 - False - False - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - BPDX Library - False - False - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - RemObjects_BPDX_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dof deleted file mode 100644 index 5281b65..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dof +++ /dev/null @@ -1,94 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - BPDX Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D5 -PackageDLLOutputDir=..\Dcu\D5 -PackageDCPOutputDir=..\Dcu\D5 -SearchPath=..\Dcu\D5 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=s:\exe\dcu50 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=l:\Packages -[HistoryLists\hlDCPOutput] -Count=1 -Item0=l:\Packages diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dpk deleted file mode 100644 index 7a5622e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_BPDX_D5; - -{$R *.res} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - BPDX Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - RemObjects_Core_D5, - RemObjects_RODX_D5; - -{%File 'RemObjects.inc'} - -contains - RemObjects_BPDX_Reg in 'RemObjects_BPDX_Reg.pas', - uROBPDXTCPServer in 'uROBPDXTCPServer.pas', - uROBPDXHTTPServer in 'uROBPDXHTTPServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.res deleted file mode 100644 index a2de886..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dof deleted file mode 100644 index 53b983a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dof +++ /dev/null @@ -1,95 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - BPDX Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -C:\Program Files\Developer Express Inc\ExpressLayout Control\Delphi 6\Lib\dcldxLayoutControlD6.bpl=ExpressLayout Control by Developer Express Inc. -C:\Program Files\Borland\Delphi6\Projects\BPL\SAX_D60.BPL=SAX for Pascal Design Package -C:\PROGRA~1\Borland\Delphi6\Projects\Bpl\Xdom_2_3Delphi6.bpl=Extended Document Object Model (XDOM) -C:\Program Files\Borland\Delphi6\Projects\BPL\SAXMS_D60.BPL=MSXML Vendor Design Package for SAX by Keith Wood -C:\Program Files\Developer Express Inc\ExpressLayout Control\Delphi 6\Lib\dxLayoutControldxEditAdaptersD6.bpl=ExpressLayoutControl Adapters for ExpressEditors Library by Developer Express Inc. -[HistoryLists\hlConditionals] -Count=1 -Item0=Development -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dpk deleted file mode 100644 index 80945c2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package RemObjects_BPDX_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - BPDX Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - RemObjects_Core_D6, - RemObjects_RODX_D6; - -contains - uROBPDXHTTPServer in 'uROBPDXHTTPServer.pas', - uROBPDXTCPServer in 'uROBPDXTCPServer.pas', - RemObjects_BPDX_Reg in 'RemObjects_BPDX_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dof deleted file mode 100644 index 9766921..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dof +++ /dev/null @@ -1,149 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - BPDX Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=..\Dcu\D7 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=258 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.258 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -R:\Data Abstract\Dcu\D7\DataAbstract_Core_D7.bpl=Data Abstract - Core Library -R:\Data Abstract\Dcu\D7\DataAbstract_DBXDriver_D7.bpl=Data Abstract - dbExpress Driver -R:\Data Abstract\Dcu\D7\DataAbstract_ADODriver_D7.bpl=Data Abstract - ADOExpress/dbGo Driver -R:\Data Abstract\Dcu\D7\DataAbstract_IBXDriver_D7.bpl=Data Abstract - InterBase Express Driver -l:\Packages\RO_ServiceTesterDesigntime_D7.bpl=(untitled) -L:\Packages\eBrazil_70.bpl=elitedevelopments Library - Brazil - FOR INTERNAL USE ONLY -L:\Packages\eBrazilComponents_70.bpl=elitedevelopments Library - Brazil Components - FOR INTERNAL USE ONLY -L:\Packages\eBrazilContentEditor_70.bpl=elitedevelopments Library - Brazil Content Editor 2.0 - FOR INTERNAL USE ONLY -R:\NexusDB Pack\Dcu\D7\RemObjects_NexusDB_IDE_D7.bpl=(untitled) -R:\Data Abstract\Dcu\D7\DataAbstract_IDE_D7.bpl=Data Abstract - IDE Package -R:\Hydra\Dcu\D7\Hydra_RO_IDE_D7.bpl=RemObjects' Hydra - RemObjects SDK IDE Integration -R:\Hydra\Dcu\D7\Hydra_RO_D7.bpl=RemObjects' Hydra - RemObjects SDK Integration Library -C:\Program Files\Borland\Delphi7\Projects\Bpl\NexusDB103dv70.bpl=NexusDB 1.03 - designtime - VCL70 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dpk deleted file mode 100644 index 37e7ff1..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_BPDX_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - BPDX Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - RemObjects_Core_D7, - RemObjects_RODX_D7; - -contains - uROBPDXHTTPServer in 'uROBPDXHTTPServer.pas', - uROBPDXTCPServer in 'uROBPDXTCPServer.pas', - RemObjects_BPDX_Reg in 'RemObjects_BPDX_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.dpk deleted file mode 100644 index 543bac8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_BPDX_K3; - -{$R *.res} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - BPDX Library'} -{$IMPLICITBUILD OFF} - -requires - rtl, - vcl, - RemObjects_Core_K3, - RemObjects_RODX_K3; - -contains - uROBPDXHTTPServer in 'uROBPDXHTTPServer.pas', - uROBPDXTCPServer in 'uROBPDXTCPServer.pas', - RemObjects_BPDX_Reg in 'RemObjects_BPDX_Reg.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.kof deleted file mode 100644 index 442fe04..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.kof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - BPDX Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../Dcu/K3 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=../Dcu/K3 - -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME - -[HistoryLists\hlSearchPath] -Count=4 -Item0=../../Dcu/K3:../ -Item1=../Dcu/K3 -Item2=../../Dcu/K3;../ -Item3=../../Dcu/K3 - -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - -[HistoryLists\hlBPLOutput] -Count=3 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 -Item2=../../Bin/K3 - -[HistoryLists\hlDCPOutput] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_Reg.pas deleted file mode 100644 index 9d7a4c4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_BPDX_Reg.pas +++ /dev/null @@ -1,51 +0,0 @@ -unit RemObjects_BPDX_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -procedure Register; - -implementation - -uses {$IFDEF FPC} LResources, {$ENDIF} - uRORes, Classes, uROClasses, - {$IFDEF BDS}DesignIntf,{$ENDIF} - {$IFDEF REMOBJECTS_DEPRECATED_BPDX_CLIENTS} - uROBPDXTCPChannel, uROBPDXHTTPChannel, - {$ENDIF REMOBJECTS_DEPRECATED_BPDX_CLIENTS} - uROBPDXHTTPServer, uROBPDXTCPServer; - -{$IFNDEF FPC} - {$R RemObjects_Bpdx_Glyphs.res} -{$ENDIF FPC} - -procedure Register; -begin - {$IFDEF BDS} - ForceDemandLoadState(dlDisable); - {$ENDIF} - RegisterComponents(str_ProductName, - [{$IFDEF REMOBJECTS_DEPRECATED_BPDX_CLIENTS} - TROBPDXTCPChannel, TROBPDXHTTPChannel, - {$ENDIF REMOBJECTS_DEPRECATED_BPDX_CLIENTS} - TROBPDXTCPServer, TROBPDXHTTPServer]); -end; - -{$IFDEF FPC} -initialization - {$I RemObjects_BPDX_Glyphs.lrs} -{$ENDIF FPC} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Bpdx_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Bpdx_Glyphs.res deleted file mode 100644 index db1f298..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Bpdx_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.bdsproj deleted file mode 100644 index 437e228..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.bdsproj +++ /dev/null @@ -1,663 +0,0 @@ - - - - - - - - - - - - RemObjects_Core_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - Core Library - False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - - - DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 5 - 0 - 23 - 613 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 5.0.23.613 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - - True - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.cfg deleted file mode 100644 index 5d79656..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.cfg +++ /dev/null @@ -1,53 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10" --O"..\Dcu\D10" --I"..\Dcu\D10" --R"..\Dcu\D10" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dpk deleted file mode 100644 index 864aaff..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dpk +++ /dev/null @@ -1,109 +0,0 @@ -package RemObjects_Core_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Core Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} -{%TogetherDiagram 'ModelSupport_RemObjects_Core_D10\default.txaPackage'} - -requires - vcl, - rtl, - dbrtl; - -contains - uROWinMessageChannel in 'uROWinMessageChannel.pas', - uROWinMessageServer in 'uROWinMessageServer.pas', - uROWinInetHttpChannel in 'uROWinInetHttpChannel.pas', - uROZLib in 'Zlib\uROZLib.pas', - uRORng in 'RODEC\uRORng.pas', - uROCipher1 in 'RODEC\uROCipher1.pas', - uROCipher in 'RODEC\uROCipher.pas', - uROCiphers in 'RODEC\uROCiphers.pas', - uRODECConst in 'RODEC\uRODECConst.pas', - uRODECUtil in 'RODEC\uRODECUtil.pas', - uROHash in 'RODEC\uROHash.pas', - uROHCMngr in 'RODEC\uROHCMngr.pas', - uRORFC2289 in 'RODEC\uRORFC2289.pas', - uRODLLChannel in 'uRODLLChannel.pas', - uRODLLHelpers in 'uRODLLHelpers.pas', - uROMSXMLImpl in 'uROMSXMLImpl.pas', - uROMSXML2_TLB in 'uROMSXML2_TLB.pas', - uROEncryption in 'uROEncryption.pas', - uRODLToXML in 'CodeGen\uRODLToXML.pas', - uRODLToWSDL in 'CodeGen\uRODLToWSDL.pas', - uROSOAPMessage in 'uROSOAPMessage.pas', - uROBinMessage in 'uROBinMessage.pas', - uRODL in 'uRODL.pas', - uROServerIntf in 'uROServerIntf.pas', - uROClient in 'uROClient.pas', - uROClientIntf in 'uROClientIntf.pas', - uRORes in 'uRORes.pas', - uROServer in 'uROServer.pas', - uROUnicodeConv in 'uROUnicodeConv.pas', - uROXDOM_2_3 in 'uROXDOM_2_3.pas', - uROTypes in 'uROTypes.pas', - RemObjects_Core_Reg in 'RemObjects_Core_Reg.pas', - uROSerializer in 'uROSerializer.pas', - uROStreamSerializer in 'uROStreamSerializer.pas', - uROXMLSerializer in 'uROXMLSerializer.pas', - uROHTTPTools in 'uROHTTPTools.pas', - uROIdeOnly in 'uROIdeOnly.pas', - uROHTTPDispatch in 'uROHTTPDispatch.pas', - uROPoweredByRemObjectsButton in 'uROPoweredByRemObjectsButton.pas', - uROCompression in 'uROCompression.pas', - uROXMLIntf in 'uROXMLIntf.pas', - uROOpenXMLImpl in 'uROOpenXMLImpl.pas', - uROClasses in 'uROClasses.pas', - uROClassFactories in 'uROClassFactories.pas', - uRORemoteDataModule in 'uRORemoteDataModule.pas', - uROAsync in 'uROAsync.pas', - uROThread in 'uROThread.pas', - uROSessions in 'uROSessions.pas', - uRORemoteService in 'uRORemoteService.pas', - uROBinaryHelpers in 'uROBinaryHelpers.pas', - uROPleaseWaitForm in 'uROPleaseWaitForm.pas' {PleaseWaitForm}, - uRONamedPipeServer in 'uRONamedPipeServer.pas', - uRONamedPipeChannel in 'uRONamedPipeChannel.pas', - uRODBSessionManager in 'uRODBSessionManager.pas', - uROServiceComponent in 'uROServiceComponent.pas', - uRODynamicRequest in 'uRODynamicRequest.pas', - uROEventRepository in 'uROEventRepository.pas', - uROMasterServerEventRepository in 'uROMasterServerEventRepository.pas', - ROMasterServerLibrary_Intf in 'ROMasterServerLibrary_Intf.pas', - uROMasterServerSessionManager in 'uROMasterServerSessionManager.pas', - uROPostMessage in 'uROPostMessage.pas', - uROComboService in 'uROComboService.pas', - uROLocalChannel in 'uROLocalChannel.pas', - uROLocalServer in 'uROLocalServer.pas', - uROHtmlServerInfo in 'uROHtmlServerInfo.pas', - uROXmlRpcMessage in 'uROXmlRpcMessage.pas', - uROThreadPool in 'uROThreadPool.pas', - uIPHttpHeaders in 'uIPHttpHeaders.pas', - uROBaseSuperHttpServer in 'uROBaseSuperHttpServer.pas', - uROBaseSuperHttpChannel in 'uROBaseSuperHttpChannel.pas', - uROServerMultiMessage in 'uROServerMultiMessage.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dproj deleted file mode 100644 index d7d4267..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.dproj +++ /dev/null @@ -1,177 +0,0 @@ - - - {698068b8-4884-426d-a991-66d8c3907ce0} - RemObjects_Core_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\RemObjects_Core_D10.bpl - - - 7.0 - False - False - True - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - Core Library - False - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - RemObjects_Core_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PleaseWaitForm
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- -
\ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.res deleted file mode 100644 index d78aaa9..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dof deleted file mode 100644 index a9b8faf..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dof +++ /dev/null @@ -1,107 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - Core Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D5 -PackageDLLOutputDir=..\Dcu\D5 -PackageDCPOutputDir=..\Dcu\D5 -SearchPath=ZLib;CodeGen;..\Dcu\D5 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 -[HistoryLists\hlUnitOutputDirectory] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 -[HistoryLists\hlBPLOutput] -Count=2 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -[HistoryLists\hlDCPOutput] -Count=3 -Item0=..\Dcu\D5 -Item1=..\Dcu\D6 -Item2=..\Dcu\D7 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dpk deleted file mode 100644 index 0875750..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.dpk +++ /dev/null @@ -1,107 +0,0 @@ -package RemObjects_Core_D5; - -{$R *.res} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Core Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - Vcl50, - Inet50; - -contains - uROWinMessageChannel in 'uROWinMessageChannel.pas', - uROWinMessageServer in 'uROWinMessageServer.pas', - uROWinInetHttpChannel in 'uROWinInetHttpChannel.pas', - uROZLib in 'Zlib\uROZLib.pas', - uRORng in 'RODEC\uRORng.pas', - uROCipher1 in 'RODEC\uROCipher1.pas', - uROCipher in 'RODEC\uROCipher.pas', - uROCiphers in 'RODEC\uROCiphers.pas', - uRODECConst in 'RODEC\uRODECConst.pas', - uRODECUtil in 'RODEC\uRODECUtil.pas', - uROHash in 'RODEC\uROHash.pas', - uROHCMngr in 'RODEC\uROHCMngr.pas', - uRORFC2289 in 'RODEC\uRORFC2289.pas', - uRODLLChannel in 'uRODLLChannel.pas', - uRODLLHelpers in 'uRODLLHelpers.pas', - uROMSXMLImpl in 'uROMSXMLImpl.pas', - uROMSXML2_TLB in 'uROMSXML2_TLB.pas', - uROEncryption in 'uROEncryption.pas', - uRODLToXML in 'CodeGen\uRODLToXML.pas', - uRODLToWSDL in 'CodeGen\uRODLToWSDL.pas', - uROSOAPMessage in 'uROSOAPMessage.pas', - uROBinMessage in 'uROBinMessage.pas', - uRODL in 'uRODL.pas', - uROServerIntf in 'uROServerIntf.pas', - uROClient in 'uROClient.pas', - uROClientIntf in 'uROClientIntf.pas', - uRORes in 'uRORes.pas', - uROServer in 'uROServer.pas', - uROUnicodeConv in 'uROUnicodeConv.pas', - uROXDOM_2_3 in 'uROXDOM_2_3.pas', - uROTypes in 'uROTypes.pas', - RemObjects_Core_Reg in 'RemObjects_Core_Reg.pas', - uROSerializer in 'uROSerializer.pas', - uROStreamSerializer in 'uROStreamSerializer.pas', - uROXMLSerializer in 'uROXMLSerializer.pas', - uROHTTPTools in 'uROHTTPTools.pas', - uROIdeOnly in 'uROIdeOnly.pas', - uROHTTPDispatch in 'uROHTTPDispatch.pas', - uROPoweredByRemObjectsButton in 'uROPoweredByRemObjectsButton.pas', - uROCompression in 'uROCompression.pas', - uROXMLIntf in 'uROXMLIntf.pas', - uROOpenXMLImpl in 'uROOpenXMLImpl.pas', - uROClasses in 'uROClasses.pas', - uROClassFactories in 'uROClassFactories.pas', - uRORemoteDataModule in 'uRORemoteDataModule.pas', - uROAsync in 'uROAsync.pas', - uROThread in 'uROThread.pas', - uROSessions in 'uROSessions.pas', - uRORemoteService in 'uRORemoteService.pas', - uROBinaryHelpers in 'uROBinaryHelpers.pas', - uROPleaseWaitForm in 'uROPleaseWaitForm.pas' {PleaseWaitForm}, - uRONamedPipeServer in 'uRONamedPipeServer.pas', - uRONamedPipeChannel in 'uRONamedPipeChannel.pas', - uRODBSessionManager in 'uRODBSessionManager.pas', - uROServiceComponent in 'uROServiceComponent.pas', - uRODynamicRequest in 'uRODynamicRequest.pas', - uROEventRepository in 'uROEventRepository.pas', - uROMasterServerEventRepository in 'uROMasterServerEventRepository.pas', - ROMasterServerLibrary_Intf in 'ROMasterServerLibrary_Intf.pas', - uROMasterServerSessionManager in 'uROMasterServerSessionManager.pas', - uROPostMessage in 'uROPostMessage.pas', - uROComboService in 'uROComboService.pas', - uROLocalChannel in 'uROLocalChannel.pas', - uROLocalServer in 'uROLocalServer.pas', - uROHtmlServerInfo in 'uROHtmlServerInfo.pas', - uROXmlRpcMessage in 'uROXmlRpcMessage.pas', - uROThreadPool in 'uROThreadPool.pas', - uIPHttpHeaders in 'uIPHttpHeaders.pas', - uROBaseSuperHttpServer in 'uROBaseSuperHttpServer.pas', - uROBaseSuperHttpChannel in 'uROBaseSuperHttpChannel.pas', - uROServerMultiMessage in 'uROServerMultiMessage.pas'; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.res deleted file mode 100644 index a2de886..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dof deleted file mode 100644 index 29c940c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dof +++ /dev/null @@ -1,82 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - Core Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=CodeGen;..\Dcu\D6 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=2 -MinorVer=0 -Release=3 -Build=237 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=2.0.3.237 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dpk deleted file mode 100644 index f9e8155..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.dpk +++ /dev/null @@ -1,109 +0,0 @@ -package RemObjects_Core_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Core Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - vcl, - rtl, - dbrtl; - -contains - uROWinMessageChannel in 'uROWinMessageChannel.pas', - uROWinMessageServer in 'uROWinMessageServer.pas', - uROWinInetHttpChannel in 'uROWinInetHttpChannel.pas', - uROZLib in 'Zlib\uROZLib.pas', - uRORng in 'RODEC\uRORng.pas', - uROCipher1 in 'RODEC\uROCipher1.pas', - uROCipher in 'RODEC\uROCipher.pas', - uROCiphers in 'RODEC\uROCiphers.pas', - uRODECConst in 'RODEC\uRODECConst.pas', - uRODECUtil in 'RODEC\uRODECUtil.pas', - uROHash in 'RODEC\uROHash.pas', - uROHCMngr in 'RODEC\uROHCMngr.pas', - uRORFC2289 in 'RODEC\uRORFC2289.pas', - uRODLLChannel in 'uRODLLChannel.pas', - uRODLLHelpers in 'uRODLLHelpers.pas', - uROMSXMLImpl in 'uROMSXMLImpl.pas', - uROMSXML2_TLB in 'uROMSXML2_TLB.pas', - uROEncryption in 'uROEncryption.pas', - uRODLToXML in 'CodeGen\uRODLToXML.pas', - uRODLToWSDL in 'CodeGen\uRODLToWSDL.pas', - uROSOAPMessage in 'uROSOAPMessage.pas', - uROBinMessage in 'uROBinMessage.pas', - uRODL in 'uRODL.pas', - uROServerIntf in 'uROServerIntf.pas', - uROClient in 'uROClient.pas', - uROClientIntf in 'uROClientIntf.pas', - uRORes in 'uRORes.pas', - uROServer in 'uROServer.pas', - uROUnicodeConv in 'uROUnicodeConv.pas', - uROXDOM_2_3 in 'uROXDOM_2_3.pas', - uROTypes in 'uROTypes.pas', - RemObjects_Core_Reg in 'RemObjects_Core_Reg.pas', - uROSerializer in 'uROSerializer.pas', - uROStreamSerializer in 'uROStreamSerializer.pas', - uROXMLSerializer in 'uROXMLSerializer.pas', - uROHTTPTools in 'uROHTTPTools.pas', - uROIdeOnly in 'uROIdeOnly.pas', - uROHTTPDispatch in 'uROHTTPDispatch.pas', - uROPoweredByRemObjectsButton in 'uROPoweredByRemObjectsButton.pas', - uROCompression in 'uROCompression.pas', - uROXMLIntf in 'uROXMLIntf.pas', - uROOpenXMLImpl in 'uROOpenXMLImpl.pas', - uROClasses in 'uROClasses.pas', - uROClassFactories in 'uROClassFactories.pas', - uRORemoteDataModule in 'uRORemoteDataModule.pas', - uROAsync in 'uROAsync.pas', - uROThread in 'uROThread.pas', - uROSessions in 'uROSessions.pas', - uRORemoteService in 'uRORemoteService.pas', - uROBinaryHelpers in 'uROBinaryHelpers.pas', - uROPleaseWaitForm in 'uROPleaseWaitForm.pas' {PleaseWaitForm}, - uRONamedPipeServer in 'uRONamedPipeServer.pas', - uRONamedPipeChannel in 'uRONamedPipeChannel.pas', - uRODBSessionManager in 'uRODBSessionManager.pas', - uROServiceComponent in 'uROServiceComponent.pas', - uRODynamicRequest in 'uRODynamicRequest.pas', - uROEventRepository in 'uROEventRepository.pas', - uROMasterServerEventRepository in 'uROMasterServerEventRepository.pas', - ROMasterServerLibrary_Intf in 'ROMasterServerLibrary_Intf.pas', - uROMasterServerSessionManager in 'uROMasterServerSessionManager.pas', - uROPostMessage in 'uROPostMessage.pas', - uROComboService in 'uROComboService.pas', - uROLocalChannel in 'uROLocalChannel.pas', - uROLocalServer in 'uROLocalServer.pas', - uROHtmlServerInfo in 'uROHtmlServerInfo.pas', - uROXmlRpcMessage in 'uROXmlRpcMessage.pas', - uROThreadPool in 'uROThreadPool.pas', - uIPHttpHeaders in 'uIPHttpHeaders.pas', - uROBaseSuperHttpServer in 'uROBaseSuperHttpServer.pas', - uROBaseSuperHttpChannel in 'uROBaseSuperHttpChannel.pas', - uROServerMultiMessage in 'uROServerMultiMessage.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dof deleted file mode 100644 index be28ecf..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dof +++ /dev/null @@ -1,132 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=3 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=1 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Core Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=..\Dcu\D7;RODEC -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=260 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.260 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dpk deleted file mode 100644 index c80f7d7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.dpk +++ /dev/null @@ -1,108 +0,0 @@ -package RemObjects_Core_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Core Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - vcl, - rtl, - dbrtl; - -contains - uROWinMessageChannel in 'uROWinMessageChannel.pas', - uROWinMessageServer in 'uROWinMessageServer.pas', - uROWinInetHttpChannel in 'uROWinInetHttpChannel.pas', - uROZLib in 'Zlib\uROZLib.pas', - uRORng in 'RODEC\uRORng.pas', - uROCipher1 in 'RODEC\uROCipher1.pas', - uROCipher in 'RODEC\uROCipher.pas', - uROCiphers in 'RODEC\uROCiphers.pas', - uRODECConst in 'RODEC\uRODECConst.pas', - uRODECUtil in 'RODEC\uRODECUtil.pas', - uROHash in 'RODEC\uROHash.pas', - uROHCMngr in 'RODEC\uROHCMngr.pas', - uRORFC2289 in 'RODEC\uRORFC2289.pas', - uRODLLChannel in 'uRODLLChannel.pas', - uRODLLHelpers in 'uRODLLHelpers.pas', - uROMSXMLImpl in 'uROMSXMLImpl.pas', - uROMSXML2_TLB in 'uROMSXML2_TLB.pas', - uROEncryption in 'uROEncryption.pas', - uRODLToXML in 'CodeGen\uRODLToXML.pas', - uRODLToWSDL in 'CodeGen\uRODLToWSDL.pas', - uROSOAPMessage in 'uROSOAPMessage.pas', - uROBinMessage in 'uROBinMessage.pas', - uRODL in 'uRODL.pas', - uROServerIntf in 'uROServerIntf.pas', - uROClient in 'uROClient.pas', - uROClientIntf in 'uROClientIntf.pas', - uRORes in 'uRORes.pas', - uROServer in 'uROServer.pas', - uROUnicodeConv in 'uROUnicodeConv.pas', - uROXDOM_2_3 in 'uROXDOM_2_3.pas', - uROTypes in 'uROTypes.pas', - RemObjects_Core_Reg in 'RemObjects_Core_Reg.pas', - uROSerializer in 'uROSerializer.pas', - uROStreamSerializer in 'uROStreamSerializer.pas', - uROXMLSerializer in 'uROXMLSerializer.pas', - uROHTTPTools in 'uROHTTPTools.pas', - uROIdeOnly in 'uROIdeOnly.pas', - uROHTTPDispatch in 'uROHTTPDispatch.pas', - uROPoweredByRemObjectsButton in 'uROPoweredByRemObjectsButton.pas', - uROCompression in 'uROCompression.pas', - uROXMLIntf in 'uROXMLIntf.pas', - uROOpenXMLImpl in 'uROOpenXMLImpl.pas', - uROClasses in 'uROClasses.pas', - uROClassFactories in 'uROClassFactories.pas', - uRORemoteDataModule in 'uRORemoteDataModule.pas', - uROAsync in 'uROAsync.pas', - uROThread in 'uROThread.pas', - uROSessions in 'uROSessions.pas', - uRORemoteService in 'uRORemoteService.pas', - uROBinaryHelpers in 'uROBinaryHelpers.pas', - uROPleaseWaitForm in 'uROPleaseWaitForm.pas' {PleaseWaitForm}, - uRONamedPipeServer in 'uRONamedPipeServer.pas', - uRONamedPipeChannel in 'uRONamedPipeChannel.pas', - uRODBSessionManager in 'uRODBSessionManager.pas', - uROServiceComponent in 'uROServiceComponent.pas', - uRODynamicRequest in 'uRODynamicRequest.pas', - uROEventRepository in 'uROEventRepository.pas', - uROMasterServerEventRepository in 'uROMasterServerEventRepository.pas', - ROMasterServerLibrary_Intf in 'ROMasterServerLibrary_Intf.pas', - uROMasterServerSessionManager in 'uROMasterServerSessionManager.pas', - uROPostMessage in 'uROPostMessage.pas', - uROComboService in 'uROComboService.pas', - uROLocalChannel in 'uROLocalChannel.pas', - uROLocalServer in 'uROLocalServer.pas', - uROHtmlServerInfo in 'uROHtmlServerInfo.pas', - uROXmlRpcMessage in 'uROXmlRpcMessage.pas', - uROThreadPool in 'uROThreadPool.pas', - uIPHttpHeaders in 'uIPHttpHeaders.pas', - uROBaseSuperHttpServer in 'uROBaseSuperHttpServer.pas', - uROBaseSuperHttpChannel in 'uROBaseSuperHttpChannel.pas', - uROServerMultiMessage in 'uROServerMultiMessage.pas'; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Glyphs.res deleted file mode 100644 index 7589a70..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.dpk deleted file mode 100644 index 22b1b73..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.dpk +++ /dev/null @@ -1,89 +0,0 @@ -package RemObjects_Core_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Core Library'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - visualclx, - dataclx; - -{%File 'RemObjects.inc'} - -contains - uROZLib in 'ZLib/Kylix/uROZLib.pas', - uRODLToXML in 'CodeGen/uRODLToXML.pas', - uRODLToWSDL in 'CodeGen/uRODLToWSDL.pas', - uROSOAPMessage in 'uROSOAPMessage.pas', - uROBinMessage in 'uROBinMessage.pas', - uRODL in 'uRODL.pas', - uROServerIntf in 'uROServerIntf.pas', - uROClient in 'uROClient.pas', - uROClientIntf in 'uROClientIntf.pas', - uRORes in 'uRORes.pas', - uROServer in 'uROServer.pas', - uROUnicodeConv in 'uROUnicodeConv.pas', - uROXDOM_2_3 in 'uROXDOM_2_3.pas', - uROTypes in 'uROTypes.pas', - RemObjects_Core_Reg in 'RemObjects_Core_Reg.pas', - uROSerializer in 'uROSerializer.pas', - uROStreamSerializer in 'uROStreamSerializer.pas', - uROXMLSerializer in 'uROXMLSerializer.pas', - uROHTTPTools in 'uROHTTPTools.pas', - uROIdeOnly in 'uROIdeOnly.pas', - uROHTTPDispatch in 'uROHTTPDispatch.pas', - uROPoweredByRemObjectsButton in 'uROPoweredByRemObjectsButton.pas', - uROCompression in 'uROCompression.pas', - uROXMLIntf in 'uROXMLIntf.pas', - uROOpenXMLImpl in 'uROOpenXMLImpl.pas', - uROClasses in 'uROClasses.pas', - uROClassFactories in 'uROClassFactories.pas', - uRORemoteDataModule in 'uRORemoteDataModule.pas', - uROAsync in 'uROAsync.pas', - uROThread in 'uROThread.pas', - uROSessions in 'uROSessions.pas', - uRORemoteService in 'uRORemoteService.pas', - uROBinaryHelpers in 'uROBinaryHelpers.pas', - uRODBSessionManager in 'uRODBSessionManager.pas', - uROServiceComponent in 'uROServiceComponent.pas', - uRODynamicRequest in 'uRODynamicRequest.pas', - uROEventRepository in 'uROEventRepository.pas', - uROMasterServerEventRepository in 'uROMasterServerEventRepository.pas', - ROMasterServerLibrary_Intf in 'ROMasterServerLibrary_Intf.pas', - uROMasterServerSessionManager in 'uROMasterServerSessionManager.pas', - uROPostMessage in 'uROPostMessage.pas', - uROLocalChannel in 'uROLocalChannel.pas', - uROLocalServer in 'uROLocalServer.pas', - uROHtmlServerInfo in 'uROHtmlServerInfo.pas', - uROXmlRpcMessage in 'uROXmlRpcMessage.pas', - uROThreadPool in 'uROThreadPool.pas', - uIPHttpHeaders in 'uIPHttpHeaders.pas', - uROBaseSuperHttpServer in 'uROBaseSuperHttpServer.pas', - uROBaseSuperHttpChannel in 'uROBaseSuperHttpChannel.pas', - uROServerMultiMessage in 'uROServerMultiMessage.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.kof deleted file mode 100644 index fd3ee0e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.kof +++ /dev/null @@ -1,62 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Core Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../Dcu/K3 -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.res deleted file mode 100644 index 55f8742..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.pas deleted file mode 100644 index b3c1a24..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.pas +++ /dev/null @@ -1,111 +0,0 @@ -unit RemObjects_Core_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -procedure Register; - -implementation - -uses - {$IFDEF FPC} - LResources, - {$ENDIF} - Classes, - uRORes, - uROSOAPMessage, - uROXmlRpcMessage, - uROServerMultiMessage, - uRODynamicRequest, - {$IFNDEF FPC} - {$IFDEF MSWINDOWS} - uROWinMessageChannel, - uROWinMessageServer, - uROWinInetHttpChannel, - {$ENDIF MSWINDOWS} - {$ENDIF FPC} - {$IFDEF MSWINDOWS} - uRODLLChannel, - uRONamedPipeChannel, uRONamedPipeServer, - {$ENDIF MSWINDOWS} - uROBinMessage, - uROPostMessage, - {$IF defined(VER140UP) OR defined(FPC)} - uROSessions, - uRORemoteService, - {$IFEND} - uROPoweredByRemObjectsButton, - uROEventRepository, - {$IFNDEF FPC} - uRODBSessionManager, - {$ENDIF} - uROMasterServerSessionManager, - uROMasterServerEventRepository, - uROLocalChannel, - uROLocalServer, - uIPHttpHeaders, - uROBaseSuperHttpServer, - uROBaseSuperHttpChannel; - -{$IFNDEF FPC} - {$R RemObjects_Core_Glyphs.res} -{$ENDIF} - -procedure Register; -begin - RegisterComponents(str_ProductName, - [TROBinMessage, - TROPostMessage, - TROSoapMessage, - TROXmlRpcMessage, - TROServerMultiMessage, - TRODynamicRequest, - - {$IFNDEF FPC} - {$IFDEF MSWINDOWS} - TROWinInetHttpChannel, - TROWinMessageChannel, TROWinMessageServer, - {$ENDIF MSWINDOWS} - {$ENDIF FPC} - - {$IFDEF MSWINDOWS} - TROLocalChannel, TROLocalServer, - TRODLLChannel, - TRONamedPipeChannel, TRONamedPipeServer, - {$ENDIF MSWINDOWS} - - {$IF defined(VER140UP) OR defined(FPC)} - TROEventSessionManager, - TROInMemorySessionManager, - TRORemoteService, - {$IFEND} - - {$IFNDEF FPC} - TRODBSessionManager, - {$ENDIF} - - TROPoweredByRemObjectsButton, - TROInMemoryEventRepository, - TROEventReceiver, - TROMasterServerSessionManager, - TROMasterServerEventRepository]); -end; - -{$IFDEF FPC} -initialization - {$i RemObjects_Core_Glyphs.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.res deleted file mode 100644 index 1f3a610..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Core_Reg.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.bdsproj deleted file mode 100644 index 09886ed..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.bdsproj +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - RemObjects_Indy_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - Indy Library - False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - - DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - - $00000000 - - - RemObjects Everwood for Delphi - RemObjects SDK - Core Library - RemObjects SDK - IDE Integration for Win32 - - - False - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.cfg deleted file mode 100644 index 5d79656..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.cfg +++ /dev/null @@ -1,53 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10" --O"..\Dcu\D10" --I"..\Dcu\D10" --R"..\Dcu\D10" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dpk deleted file mode 100644 index b905d30..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dpk +++ /dev/null @@ -1,69 +0,0 @@ -package RemObjects_Indy_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Indy Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - rtl, - {$IFDEF RemObjects_INDY9} - Indy, - {$ELSE} - IndyCore, IndySystem, IndyProtocols, - {$ENDIF} - vcl, - vclx, - {$IFNDEF RemObjects_NO_DEMANDLOAD_FIX} - designide, - {$ENDIF} - RemObjects_Core_D10; - -contains - RemObjects_Indy_Reg in 'RemObjects_Indy_Reg.pas', - uROIndyHTTPChannel in 'uROIndyHTTPChannel.pas', - uROIndyTCPChannel in 'uROIndyTCPChannel.pas', - uROIndyTCPServer in 'uROIndyTCPServer.pas', - uROIndyHTTPServer in 'uROIndyHTTPServer.pas', - uROIndyUDPServer in 'uROIndyUDPServer.pas', - uROIndyUDPChannel in 'uROIndyUDPChannel.pas', - uROBroadcastServer in 'uROBroadcastServer.pas', - uROBroadcastChannel in 'uROBroadcastChannel.pas', - uROStreamUtils in 'uROStreamUtils.pas', - uROIndyEmailChannel in 'uROIndyEmailChannel.pas', - uROIndyEmailServer in 'uROIndyEmailServer.pas', - uROIndyEmail in 'uROIndyEmail.pas', - uRODiscovery in 'uRODiscovery.pas', - uRODiscoveryService_Impl in 'uRODiscoveryService_Impl.pas', - uRODiscovery_Async in 'uRODiscovery_Async.pas', - uRODiscovery_Intf in 'uRODiscovery_Intf.pas', - uRODiscovery_Invk in 'uRODiscovery_Invk.pas', - uROAsyncResponseStorage in 'uROAsyncResponseStorage.pas', - uROSuperTCPServer in 'uROSuperTCPServer.pas', - uROSuperTCPChannel in 'uROSuperTCPChannel.pas', - uROSCHelpers in 'uROSCHelpers.pas', - uROIndySuperHttpChannel in 'uROIndySuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dproj deleted file mode 100644 index 4ce6fb5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.dproj +++ /dev/null @@ -1,152 +0,0 @@ - - - {2c907631-bcb2-4bfe-83c9-ce4d30a1f7e0} - RemObjects_Indy_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\RemObjects_Indy_D10.bpl - - - 7.0 - False - False - True - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - ..\Dcu\D10;$(BDS)\lib\Indy10 - DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - Indy Library - False - False - False - - - True - False - 0 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 0.0.0.0 - - - - - RemObjects SDK - 1.0.0.0 - - - - - - - - - RemObjects Everwood for Delphi - RemObjects SDK - Core Library - RemObjects SDK - IDE Integration for Win32 - - - RemObjects_Indy_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dof deleted file mode 100644 index 44f59f8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dof +++ /dev/null @@ -1,95 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects - Indy Package -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D5 -PackageDLLOutputDir=..\Dcu\D5 -PackageDCPOutputDir=..\Dcu\D5 -SearchPath=..\Dcu\D5 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=0 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=0.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -L:\Others\Async Professional 4.0\A405_D50.BPL=Async Professional components -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=s:\exe\dcu50 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=l:\Packages -[HistoryLists\hlDCPOutput] -Count=1 -Item0=l:\Packages diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dpk deleted file mode 100644 index 664961b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.dpk +++ /dev/null @@ -1,59 +0,0 @@ -package RemObjects_Indy_D5; - -{$R *.res} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Indy Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - Vcl50, - RemObjects_Core_D5; - -contains - RemObjects_Indy_Reg in 'RemObjects_Indy_Reg.pas', - uROIndyHTTPChannel in 'uROIndyHTTPChannel.pas', - uROIndyTCPChannel in 'uROIndyTCPChannel.pas', - uROIndyTCPServer in 'uROIndyTCPServer.pas', - uROIndyHTTPServer in 'uROIndyHTTPServer.pas', - uROIndyUDPServer in 'uROIndyUDPServer.pas', - uROIndyUDPChannel in 'uROIndyUDPChannel.pas', - uROBroadcastServer in 'uROBroadcastServer.pas', - uROBroadcastChannel in 'uROBroadcastChannel.pas', - uROStreamUtils in 'uROStreamUtils.pas', - uROIndyEmailChannel in 'uROIndyEmailChannel.pas', - uROIndyEmailServer in 'uROIndyEmailServer.pas', - uROIndyEmail in 'uROIndyEmail.pas', - uRODiscovery in 'uRODiscovery.pas', - uRODiscoveryService_Impl in 'uRODiscoveryService_Impl.pas', - uRODiscovery_Async in 'uRODiscovery_Async.pas', - uRODiscovery_Intf in 'uRODiscovery_Intf.pas', - uRODiscovery_Invk in 'uRODiscovery_Invk.pas', - uROAsyncResponseStorage in 'uROAsyncResponseStorage.pas', - uROSuperTCPServer in 'uROSuperTCPServer.pas', - uROSuperTCPChannel in 'uROSuperTCPChannel.pas', - uROSCHelpers in 'uROSCHelpers.pas', - uROIndySuperHttpChannel in 'uROIndySuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.res deleted file mode 100644 index a2de886..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dof deleted file mode 100644 index 1fda2aa..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dof +++ /dev/null @@ -1,104 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - Indy Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=4 -Build=47 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=1.0.4.47 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -[Excluded Packages] -W:\Ginger\RemObjects\Dcu\D6\RemObjects_DataSnap_D6.bpl=RemObjects - DataSnap Package -W:\Ginger\RemObjects\Dcu\D6\RemObjects_IDE_D6.bpl=RemObjects - IDE -W:\Ginger\RemObjects\Dcu\D6\RemObjects_Indy_D6.bpl=RemObjects - Indy Package -W:\Ginger\RemObjects\Dcu\D6\RemObjects_BPDX_D6.bpl=RemObjects - BPDX Package -L:\Others\DevEx\ExpressWeb Framework\Delphi 6\Lib\dclcxWebD6.bpl=ExpressWeb Framework by Developer Express Inc. -L:\Others\DevEx\ExpressWeb Framework\Delphi 6\Lib\dclcxWebTeeChartD6.bpl=WebTeeChart for EWF by Developer Express Inc. -L:\Others\DevEx\ExpressWeb Framework\Delphi 6\Lib\dclcxWebSnapD6.bpl=ExpressWebPage Module for WebSnap Application by Developer Express Inc. -L:\Packages\addict3db_d6.bpl=Addict 3.2 for Delphi 6 (DB Aware Components) -L:\Packages\X255PD60.bpl=TurboPower XMLPartner Professional 2.55 Designtime package - VCL60 -l:\Others\DevEx\CX Library\Delphi 6\Lib\dclcxLibraryVCLD6.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressEditors Library 4\Delphi 6\Lib\dclcxEditorsVCLD6.bpl=ExpressEditors Library 4 (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressQuantumGrid 4\Delphi 6\Lib\dclcxGridVCLD6.bpl=ExpressQuantumGrid 4 (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressQuantumGrid 4\Delphi 6\Lib\dclcxGridUtilsVCLD6.bpl=ExpressQuantumGrid 4 Utils (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressSpreadSheet\Delphi 6\Lib\dclcxSpreadSheetVCLD6.bpl=ExpressSpreadSheet (VCL Edition) by Developer Express Inc. -l:\Others\DevEx\ExpressPageControl 2\Delphi 6\Lib\dclcxPageControlVCLD6.bpl=Express Cross Platform PageControl (VCL Edition) by Developer Express Inc. -[HistoryLists\hlConditionals] -Count=1 -Item0=Development -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dpk deleted file mode 100644 index 097ea3b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.dpk +++ /dev/null @@ -1,62 +0,0 @@ -package RemObjects_Indy_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Indy Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - rtl, - indy, - vcl, - vclx, - RemObjects_Core_D6; - -contains - RemObjects_Indy_Reg in 'RemObjects_Indy_Reg.pas', - uROIndyHTTPChannel in 'uROIndyHTTPChannel.pas', - uROIndyTCPChannel in 'uROIndyTCPChannel.pas', - uROIndyTCPServer in 'uROIndyTCPServer.pas', - uROIndyHTTPServer in 'uROIndyHTTPServer.pas', - uROIndyUDPServer in 'uROIndyUDPServer.pas', - uROIndyUDPChannel in 'uROIndyUDPChannel.pas', - uROBroadcastServer in 'uROBroadcastServer.pas', - uROBroadcastChannel in 'uROBroadcastChannel.pas', - uROStreamUtils in 'uROStreamUtils.pas', - uROIndyEmailChannel in 'uROIndyEmailChannel.pas', - uROIndyEmailServer in 'uROIndyEmailServer.pas', - uROIndyEmail in 'uROIndyEmail.pas', - uRODiscovery in 'uRODiscovery.pas', - uRODiscoveryService_Impl in 'uRODiscoveryService_Impl.pas', - uRODiscovery_Async in 'uRODiscovery_Async.pas', - uRODiscovery_Intf in 'uRODiscovery_Intf.pas', - uRODiscovery_Invk in 'uRODiscovery_Invk.pas', - uROAsyncResponseStorage in 'uROAsyncResponseStorage.pas', - uROSuperTCPServer in 'uROSuperTCPServer.pas', - uROSuperTCPChannel in 'uROSuperTCPChannel.pas', - uROSCHelpers in 'uROSCHelpers.pas', - uROIndySuperHttpChannel in 'uROIndySuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dof deleted file mode 100644 index 1f1a621..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dof +++ /dev/null @@ -1,131 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Indy Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=$(DELPHI)\Lib\Debug;..\Dcu\D7 -Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;Vclbde50;vcldbx50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;dclocx50;dclaxserver50;Indy50;RemObjects_Core_D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=257 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.257 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dpk deleted file mode 100644 index b6139f6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.dpk +++ /dev/null @@ -1,62 +0,0 @@ -package RemObjects_Indy_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Indy Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - rtl, - indy, - vcl, - vclx, - RemObjects_Core_D7; - -contains - RemObjects_Indy_Reg in 'RemObjects_Indy_Reg.pas', - uROIndyHTTPChannel in 'uROIndyHTTPChannel.pas', - uROIndyTCPChannel in 'uROIndyTCPChannel.pas', - uROIndyTCPServer in 'uROIndyTCPServer.pas', - uROIndyHTTPServer in 'uROIndyHTTPServer.pas', - uROIndyUDPServer in 'uROIndyUDPServer.pas', - uROIndyUDPChannel in 'uROIndyUDPChannel.pas', - uROBroadcastServer in 'uROBroadcastServer.pas', - uROBroadcastChannel in 'uROBroadcastChannel.pas', - uROStreamUtils in 'uROStreamUtils.pas', - uROIndyEmailChannel in 'uROIndyEmailChannel.pas', - uROIndyEmailServer in 'uROIndyEmailServer.pas', - uROIndyEmail in 'uROIndyEmail.pas', - uRODiscovery in 'uRODiscovery.pas', - uRODiscoveryService_Impl in 'uRODiscoveryService_Impl.pas', - uRODiscovery_Async in 'uRODiscovery_Async.pas', - uRODiscovery_Intf in 'uRODiscovery_Intf.pas', - uRODiscovery_Invk in 'uRODiscovery_Invk.pas', - uROAsyncResponseStorage in 'uROAsyncResponseStorage.pas', - uROSuperTCPServer in 'uROSuperTCPServer.pas', - uROSuperTCPChannel in 'uROSuperTCPChannel.pas', - uROSCHelpers in 'uROSCHelpers.pas', - uROIndySuperHttpChannel in 'uROIndySuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Glyphs.res deleted file mode 100644 index 38159cc..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.dpk deleted file mode 100644 index 4d68e51..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.dpk +++ /dev/null @@ -1,49 +0,0 @@ -package RemObjects_Indy_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Indy Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%File 'RemObjects.inc'} - -requires - rtl, - indy, - RemObjects_Core_K3; - -contains - RemObjects_Indy_Reg in 'RemObjects_Indy_Reg.pas', - uROIndyHTTPChannel in 'uROIndyHTTPChannel.pas', - uROIndyTCPChannel in 'uROIndyTCPChannel.pas', - uROIndyTCPServer in 'uROIndyTCPServer.pas', - uROIndyHTTPServer in 'uROIndyHTTPServer.pas', - uROIndyUDPServer in 'uROIndyUDPServer.pas', - uROIndyUDPChannel in 'uROIndyUDPChannel.pas', - uROAsyncResponseStorage in 'uROAsyncResponseStorage.pas', - uROSuperTCPServer in 'uROSuperTCPServer.pas', - uROSuperTCPChannel in 'uROSuperTCPChannel.pas', - uROSCHelpers in 'uROSCHelpers.pas', - uROIndySuperHttpChannel in 'uROIndySuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.kof deleted file mode 100644 index 474872d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.kof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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= - -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Indy Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../Dcu/K3 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher=/usr/X11R6/bin/xterm -T KylixDebuggerOutput -e bash -i -c %debuggee% -UseLauncher=0 -DebugCWD= - -[HistoryLists\hlDebugSourcePath] -Count=1 -Item0=../Dcu/K3 - -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME - -[HistoryLists\hlSearchPath] -Count=4 -Item0=../../Dcu/K3:../ -Item1=../Dcu/K3 -Item2=../../Dcu/K3;../ -Item3=../../Dcu/K3 - -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - -[HistoryLists\hlBPLOutput] -Count=3 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 -Item2=../../Bin/K3 - -[HistoryLists\hlDCPOutput] -Count=2 -Item0=../../Dcu/K3 -Item1=../Dcu/K3 - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.res deleted file mode 100644 index 36f26e2..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Reg.pas deleted file mode 100644 index 4fa680e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Indy_Reg.pas +++ /dev/null @@ -1,65 +0,0 @@ -unit RemObjects_Indy_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -procedure Register; - -implementation - -uses - {$IFDEF FPC}LResources,{$ENDIF} - Classes, - {$IFDEF BDS}DesignIntf,{$ENDIF} - uRORes, - uROSuperTCPChannel, uROSuperTCPServer, - uROIndyTCPChannel, uROIndyHTTPChannel, uROIndyUDPChannel, - uROIndyHTTPServer, uROIndyTCPServer, uROIndyUDPServer, - uROBroadcastChannel, uROBroadcastServer, - uROIndyEmailChannel, uROIndyEmailServer, - uRODiscovery, uROIndySuperHttpChannel; - -{$IFNDEF FPC} - {$R RemObjects_Indy_Glyphs.res} -{$ENDIF} - -procedure Register; -begin - {$IFDEF BDS} - {$IFNDEF RemObjects_NO_DEMANDLOAD_FIX} - ForceDemandLoadState(dlDisable); - {$ENDIF} - {$ENDIF} - RegisterComponents(str_ProductName, - [TROIndyHTTPServer, TROIndyHTTPChannel, - TROIndyTCPServer, TROIndyTCPChannel, - TROSuperTcpServer, TROSuperTcpChannel, - TROIndyUDPServer, TROIndyUDPChannel, - {$IFDEF MSWINDOWS} - TROBroadcastChannel, TROBroadcastServer, - TRODiscoveryClient, TRODiscoveryServer, - {$ENDIF MSWINDOWS} - TROEmailChannel, TROEmailServer, - TROIndySuperHttpChannel]); - - -end; - -{$IFDEF FPC} -initialization - {$i RemObjects_Indy_Glyphs.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.bdsproj deleted file mode 100644 index f3d5040..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.bdsproj +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - RemObjects_Synapse_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - Synapse based Channels - False - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - - DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - - $00000000 - - - - True - False - 3 - 0 - 0 - 257 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - ROServiceTester - 3.0.0.257 - ROServiceTester - Copyright RemObjects Software 2002 - RemObjects Software 2002 - ROServiceTester.exe - RemObjects SDK - 3.0.0.0 - Sunday, March 21, 2004 5:55 PM - - - False - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.cfg deleted file mode 100644 index 5094cf5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.cfg +++ /dev/null @@ -1,54 +0,0 @@ --$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 --E"..\Dcu\D10" --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10" --O"..\Dcu\D10" --I"..\Dcu\D10" --R"..\Dcu\D10" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dpk deleted file mode 100644 index 9058fc1..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dpk +++ /dev/null @@ -1,50 +0,0 @@ -package RemObjects_Synapse_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Synapse based Channels'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D10; - -contains - RemObjects_Synapse_Reg in 'RemObjects_Synapse_Reg.pas', - uROSynapseHTTPChannel in 'uROSynapseHTTPChannel.pas', - synsock in 'Synapse\synsock.pas', - blcksock in 'Synapse\blcksock.pas', - httpsend in 'Synapse\httpsend.pas', - synacode in 'Synapse\synacode.pas', - synafpc in 'Synapse\synafpc.pas', - synaip in 'Synapse\synaip.pas', - synautil in 'Synapse\synautil.pas', - uIPAsyncSocket in 'uIPAsyncSocket.pas', - uIPAsyncHttpServer in 'uIPAsyncHttpServer.pas', - uROIpSuperHttpServer in 'uROIpSuperHttpServer.pas', - uROSynapseSuperHttpChannel in 'uROSynapseSuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dproj deleted file mode 100644 index b79f778..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.dproj +++ /dev/null @@ -1,124 +0,0 @@ - - - {5c79699f-2653-4670-a29a-e5e2459651b1} - RemObjects_Synapse_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\RemObjects_Synapse_D10.bpl - - - 7.0 - False - False - True - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - True - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - Synapse based Channels - False - False - False - - - True - False - 3 - 0 - 0 - 257 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - ROServiceTester - 3.0.0.257 - ROServiceTester - Copyright RemObjects Software 2002 - RemObjects Software 2002 - ROServiceTester.exe - RemObjects SDK - 3.0.0.0 - Sunday, March 21, 2004 5:55 PM - - - RemObjects_Synapse_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dof deleted file mode 100644 index b4be9d9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dof +++ /dev/null @@ -1,131 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Synapse based Channels -[Directories] -OutputDir=..\Dcu\D5 -UnitOutputDir=..\Dcu\D5 -PackageDLLOutputDir=..\Dcu\D5 -PackageDCPOutputDir=..\Dcu\D5 -SearchPath=..\Dcu\D5 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=257 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dpk deleted file mode 100644 index 84c7684..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.dpk +++ /dev/null @@ -1,48 +0,0 @@ -package RemObjects_Synapse_D5; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Synapse based Channels'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - vcl50, - RemObjects_Core_D5; - -contains - RemObjects_Synapse_Reg in 'RemObjects_Synapse_Reg.pas', - uROSynapseHTTPChannel in 'uROSynapseHTTPChannel.pas', - synsock in 'Synapse\synsock.pas', - blcksock in 'Synapse\blcksock.pas', - httpsend in 'Synapse\httpsend.pas', - synacode in 'Synapse\synacode.pas', - synafpc in 'Synapse\synafpc.pas', - synaip in 'Synapse\synaip.pas', - synautil in 'Synapse\synautil.pas', - uIPAsyncSocket in 'uIPAsyncSocket.pas', - uIPAsyncHttpServer in 'uIPAsyncHttpServer.pas', - uROIpSuperHttpServer in 'uROIpSuperHttpServer.pas', - uROSynapseSuperHttpChannel in 'uROSynapseSuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.res deleted file mode 100644 index fff68a1..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dof deleted file mode 100644 index ca66914..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dof +++ /dev/null @@ -1,132 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Synapse based Channels -[Directories] -OutputDir=..\Dcu\D6 -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=257 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dpk deleted file mode 100644 index ea57594..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.dpk +++ /dev/null @@ -1,50 +0,0 @@ -package RemObjects_Synapse_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Synapse based Channels'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D6; - -contains - RemObjects_Synapse_Reg in 'RemObjects_Synapse_Reg.pas', - uROSynapseHTTPChannel in 'uROSynapseHTTPChannel.pas', - synsock in 'Synapse\synsock.pas', - blcksock in 'Synapse\blcksock.pas', - httpsend in 'Synapse\httpsend.pas', - synacode in 'Synapse\synacode.pas', - synafpc in 'Synapse\synafpc.pas', - synaip in 'Synapse\synaip.pas', - synautil in 'Synapse\synautil.pas', - uIPAsyncSocket in 'uIPAsyncSocket.pas', - uIPAsyncHttpServer in 'uIPAsyncHttpServer.pas', - uROIpSuperHttpServer in 'uROIpSuperHttpServer.pas', - uROSynapseSuperHttpChannel in 'uROSynapseSuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dof deleted file mode 100644 index f7aba1c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dof +++ /dev/null @@ -1,136 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Synapse based Channels -[Directories] -OutputDir=..\Dcu\D7 -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=..\Dcu\D7 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=257 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dpk deleted file mode 100644 index b54a2f8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.dpk +++ /dev/null @@ -1,50 +0,0 @@ -package RemObjects_Synapse_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Synapse based Channels'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D7; - -contains - RemObjects_Synapse_Reg in 'RemObjects_Synapse_Reg.pas', - uROSynapseHTTPChannel in 'uROSynapseHTTPChannel.pas', - synsock in 'Synapse\synsock.pas', - blcksock in 'Synapse\blcksock.pas', - httpsend in 'Synapse\httpsend.pas', - synacode in 'Synapse\synacode.pas', - synafpc in 'Synapse\synafpc.pas', - synaip in 'Synapse\synaip.pas', - synautil in 'Synapse\synautil.pas', - uIPAsyncSocket in 'uIPAsyncSocket.pas', - uIPAsyncHttpServer in 'uIPAsyncHttpServer.pas', - uROIpSuperHttpServer in 'uROIpSuperHttpServer.pas', - uROSynapseSuperHttpChannel in 'uROSynapseSuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Glyphs.res deleted file mode 100644 index bbcac82..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.dpk deleted file mode 100644 index a918719..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.dpk +++ /dev/null @@ -1,51 +0,0 @@ -package RemObjects_Synapse_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES ON} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - Synapse based Channels'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - RemObjects_Core_K3; - -{%File 'RemObjects.inc'} - -contains - RemObjects_Synapse_Reg in 'RemObjects_Synapse_Reg.pas', - uROSynapseHTTPChannel in 'uROSynapseHTTPChannel.pas', - synsock in 'Synapse/synsock.pas', - blcksock in 'Synapse/blcksock.pas', - httpsend in 'Synapse/httpsend.pas', - synacode in 'Synapse/synacode.pas', - synafpc in 'Synapse/synafpc.pas', - synaip in 'Synapse/synaip.pas', - synautil in 'Synapse/synautil.pas', - uIPAsyncSocket in 'uIPAsyncSocket.pas', - uIPAsyncHttpServer in 'uIPAsyncHttpServer.pas', - uROIpSuperHttpServer in 'uROIpSuperHttpServer.pas', - uROSynapseSuperHttpChannel in 'uROSynapseSuperHttpChannel.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.kof deleted file mode 100644 index 817632d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.kof +++ /dev/null @@ -1,131 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - Synapse based Channels -[Directories] -OutputDir=../Dcu/K3 -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../Dcu/K3 -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=257 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription=ROServiceTester -FileVersion=3.0.0.257 -InternalName=ROServiceTester -LegalCopyright=Copyright RemObjects Software 2002 -LegalTrademarks=RemObjects Software 2002 -OriginalFilename=ROServiceTester.exe -ProductName=RemObjects SDK -ProductVersion=3.0.0.0 -Compile Date=Sunday, March 21, 2004 5:55 PM diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.res deleted file mode 100644 index fff68a1..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Reg.pas deleted file mode 100644 index 79c5601..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_Synapse_Reg.pas +++ /dev/null @@ -1,46 +0,0 @@ -unit RemObjects_Synapse_Reg; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Synapse Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -procedure Register; - -implementation - -uses - {$IFDEF FPC}LResources,{$ENDIF} - Classes, - uROSynapseHTTPChannel, uROClasses, uRORes, - uROSynapseSuperHttpChannel, uIPAsyncSocket, - uIPAsyncHttpServer, uROIpSuperHttpServer; - -{$IFNDEF FPC} - {$R RemObjects_Synapse_Glyphs.res} -{$ENDIF} - -procedure Register; -begin - RegisterComponents(str_ProductName, - [TROSynapseHTTPChannel, TROSynapseSuperHttpChannel, TROIpSuperHttpServer]); - -end; - -{$IFDEF FPC} -initialization - {$i RemObjects_Synapse_Glyphs.lrs} -{$ENDIF} -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.bdsproj deleted file mode 100644 index e539593..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.bdsproj +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - RemObjects_WebBroker_D10.dpk - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - False - False - False - False - False - False - False - False - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - RemObjects SDK - WebBroker Library - False - - - - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - - DESIGNTIME - - False - - - - - - False - - - - - - False - - True - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - - $00000000 - - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - True - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.cfg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.cfg deleted file mode 100644 index 05ca7ed..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.cfg +++ /dev/null @@ -1,53 +0,0 @@ --$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 --N0"..\Dcu\D10" --LE"..\Dcu\D10" --LN"..\Dcu\D10" --U"..\Dcu\D10" --O"..\Dcu\D10" --I"..\Dcu\D10" --R"..\Dcu\D10" --DDESIGNTIME --Z --w-SYMBOL_DEPRECATED --w-SYMBOL_LIBRARY --w-SYMBOL_PLATFORM --w-SYMBOL_EXPERIMENTAL --w-UNIT_LIBRARY --w-UNIT_PLATFORM --w-UNIT_DEPRECATED --w-UNIT_EXPERIMENTAL --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dpk deleted file mode 100644 index 5302175..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dpk +++ /dev/null @@ -1,41 +0,0 @@ -package RemObjects_WebBroker_D10; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - WebBroker Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} -{%TogetherDiagram 'ModelSupport_RemObjects_WebBroker_D10\default.txaPackage'} - -requires - rtl, - vcl, - inet, - designide, - RemObjects_Core_D10; - -contains - RemObjects_WebBroker_Reg in 'RemObjects_WebBroker_Reg.pas', - uROWebBrokerServer in 'uROWebBrokerServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dproj deleted file mode 100644 index 1e627e6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.dproj +++ /dev/null @@ -1,117 +0,0 @@ - - - {850d4f71-0ea3-4073-a632-8eafa8318d76} - RemObjects_WebBroker_D10.dpk - Debug - AnyCPU - DCC32 - ..\Dcu\D10\RemObjects_WebBroker_D10.bpl - - - 7.0 - False - False - 0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;RELEASE - False - False - False - False - False - False - False - False - - - 7.0 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - ..\Dcu\D10 - DESIGNTIME;DEBUG - False - False - False - False - False - False - False - False - - - Delphi.Personality - Package - - - False - True - False - - - RemObjects SDK - WebBroker Library - False - False - False - - - True - False - 4 - 0 - 0 - 404 - False - False - False - False - False - 1033 - 1252 - - - RemObjects Software - - 4.0.0.404 - - - - - RemObjects SDK - 1.0.0.0 - - - - RemObjects_WebBroker_D10.dpk - - - - - - - MainSource - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D10.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dof deleted file mode 100644 index fa3480e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dof +++ /dev/null @@ -1,136 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - WebBroker Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D5 -PackageDLLOutputDir=..\Dcu\D5 -PackageDCPOutputDir=..\Dcu\D5 -SearchPath=..\Dcu\D5 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=261 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.261 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -Comments= diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dpk deleted file mode 100644 index 46bd58d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_WebBroker_D5; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - WebBroker Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D5; - -contains - RemObjects_WebBroker_Reg in 'RemObjects_WebBroker_Reg.pas', - uROWebBrokerServer in 'uROWebBrokerServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.res deleted file mode 100644 index 1644e97..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D5.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dof deleted file mode 100644 index a25bd14..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dof +++ /dev/null @@ -1,106 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=RemObjects SDK - WebBroker Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D6 -PackageDLLOutputDir=..\Dcu\D6 -PackageDCPOutputDir=..\Dcu\D6 -SearchPath=..\Dcu\D6 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=261 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.261 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -C:\Dev\DA3\Dcu\D6\DataAbstract_Core_D6.bpl=Data Abstract - Core Library -C:\Dev\DA3\Dcu\D6\DataAbstract_IDE_D6.bpl=Data Abstract - IDE Package -C:\Dev\DA3\Dcu\D6\DataAbstract_ADODriver_D6.bpl=Data Abstract - ADOExpress/dbGo Driver -[HistoryLists\hlConditionals] -Count=2 -Item0=DESIGNTIME -Item1=Development -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=1 -Item0=..\Dcu\D6 -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\Dcu\D6 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=..\Dcu\D6 -[HistoryLists\hlDCPOutput] -Count=1 -Item0=..\Dcu\D6 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dpk deleted file mode 100644 index 573a901..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_WebBroker_D6; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - WebBroker Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D6; - -contains - RemObjects_WebBroker_Reg in 'RemObjects_WebBroker_Reg.pas', - uROWebBrokerServer in 'uROWebBrokerServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D6.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dof deleted file mode 100644 index c504a97..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dof +++ /dev/null @@ -1,170 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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=1 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=0 -SymbolLibrary=0 -SymbolPlatform=0 -UnitLibrary=0 -UnitPlatform=0 -UnitDeprecated=0 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - WebBroker Library -[Directories] -OutputDir= -UnitOutputDir=..\Dcu\D7 -PackageDLLOutputDir=..\Dcu\D7 -PackageDCPOutputDir=..\Dcu\D7 -SearchPath=..\Dcu\D7 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=3 -MinorVer=0 -Release=0 -Build=261 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=RemObjects Software -FileDescription= -FileVersion=3.0.0.261 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=RemObjects SDK -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -c:\program files\borland\delphi7\RBServer\Lib\dclRBS77.bpl=ReportBuilder Server -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumTreeList by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumDBTreeList by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBGrLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumGrid by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBTVLnkD7.bpl=ExpressPrinting System ReportLink for ExpressDBTree by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxInsLnkD7.bpl=ExpressPrinting System ReportLink for ExpressInspector by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxOILnkD7.bpl=ExpressPrinting System ReportLink for ExpressRTTIInspector by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxMVLnkD7.bpl=ExpressPrinting System ReportLink for ExpressMasterView by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxOCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressOrgChart by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBOCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressDBOrgChart by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxFCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressFlowChart by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxLCLnkD7.bpl=ExpressPrinting System ReportLink for ExpressLayoutControl by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPScxSSLnkD7.bpl=ExpressPrinting System ReportLink for ExpressSpreadSheet by Developer Express Inc. -C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPscxTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumTreeList 4 by Developer Express Inc. -C:\Dev\DataAbstract\Dcu\D7\DataAbstract_ReportBuilder_D7.bpl=(untitled) -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlBPLOutput] -Count=1 -Item0=..\Dcu\D7 -[HistoryLists\hlDCPOutput] -Count=1 -Item0=..\Dcu\D7 diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dpk deleted file mode 100644 index 4648f41..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_WebBroker_D7; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - WebBroker Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - inet, - RemObjects_Core_D7; - -contains - RemObjects_WebBroker_Reg in 'RemObjects_WebBroker_Reg.pas', - uROWebBrokerServer in 'uROWebBrokerServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.res deleted file mode 100644 index 677565b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_D7.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Glyphs.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Glyphs.res deleted file mode 100644 index 7bdcb7f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Glyphs.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.dpk b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.dpk deleted file mode 100644 index f79a73c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package RemObjects_WebBroker_K3; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'RemObjects SDK - WebBroker Library'} -{$IMPLICITBUILD OFF} -{$DEFINE DESIGNTIME} - -requires - rtl, - vcl, - netclx, - RemObjects_Core_K3; - -contains - RemObjects_WebBroker_Reg in 'RemObjects_WebBroker_Reg.pas', - uROWebBrokerServer in 'uROWebBrokerServer.pas'; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.kof b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.kof deleted file mode 100644 index ef7e7d9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.kof +++ /dev/null @@ -1,91 +0,0 @@ -[FileVersion] -Version=6.0 - -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -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 -ResourceReserve=1048576 -ImageBase=4194304 -ExeDescription=RemObjects SDK - WebBroker Library -DynamicLoader=/lib/ld-linux.so.2 - -[Directories] -OutputDir= -UnitOutputDir=../Dcu/K3 -PackageDLLOutputDir=../Dcu/K3 -PackageDCPOutputDir=../Dcu/K3 -SearchPath=../Dcu/K3 -Packages= -Conditionals=DESIGNTIME -DebugSourceDirs= -UsePackages=0 - -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= - -[HistoryLists\hlConditionals] -Count=1 -Item0=DESIGNTIME - -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - -[HistoryLists\hlSearchPath] -Count=2 -Item0=../Dcu/K3 -Item1=..\Dcu\K3 - -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=../Dcu/K3 -Item1=..\Dcu\K3 - -[HistoryLists\hlBPLOutput] -Count=2 -Item0=../Dcu/K3 -Item1=..\Dcu\K3 - -[HistoryLists\hlDCPOutput] -Count=2 -Item0=../Dcu/K3 -Item1=..\Dcu\K3 - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.res deleted file mode 100644 index 1644e97..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_K3.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Reg.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Reg.pas deleted file mode 100644 index a823749..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/RemObjects_WebBroker_Reg.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit RemObjects_WebBroker_Reg; -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} -{$R RemObjects_WebBroker_Glyphs.res} - -interface - -procedure Register; - -implementation - -uses Classes, - {$IFDEF BDS}DesignIntf,{$ENDIF} - uRORes, uROWebBrokerServer; - -procedure Register; -begin - {$IFDEF BDS} - ForceDemandLoadState(dlDisable); - {$ENDIF} - RegisterComponents(str_ProductName, - [TROWebBrokerServer]); - - -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/blcksock.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/blcksock.pas deleted file mode 100644 index 4738d57..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/blcksock.pas +++ /dev/null @@ -1,4072 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 009.003.002 | -|==============================================================================| -| Content: Library base | -|==============================================================================| -| Copyright (c)1999-2007, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)1999-2007. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{ -Special thanks to Gregor Ibic - (Intelicom d.o.o., http://www.intelicom.si) - for good inspiration about SSL programming. -} - -{$DEFINE ONCEWINSOCK} -{Note about define ONCEWINSOCK: -If you remove this compiler directive, then socket interface is loaded and -initialized on constructor of TBlockSocket class for each socket separately. -Socket interface is used only if your need it. - -If you leave this directive here, then socket interface is loaded and -initialized only once at start of your program! It boost performace on high -count of created and destroyed sockets. It eliminate possible small resource -leak on Windows systems too. -} - -//{$DEFINE RAISEEXCEPT} -{When you enable this define, then is Raiseexcept property is on by default -} - -{:@abstract(Synapse's library core) - -Core with implementation basic socket classes. -} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$IFDEF VER125} - {$DEFINE BCB} -{$ENDIF} -{$IFDEF BCB} - {$ObjExportAll On} -{$ENDIF} -{$Q-} -{$H+} -{$M+} - -unit blcksock; - -interface - -uses - SysUtils, Classes, - synafpc, - synsock, synautil, synacode, synaip -{$IFDEF CIL} - ,System.Net - ,System.Net.Sockets - ,System.Text -{$ENDIF} - ; - -const - - SynapseRelease = '38b5'; - - cLocalhost = '127.0.0.1'; - cAnyHost = '0.0.0.0'; - cBroadcast = '255.255.255.255'; - c6Localhost = '::1'; - c6AnyHost = '::0'; - c6Broadcast = 'ffff::1'; - cAnyPort = '0'; - CR = #$0d; - LF = #$0a; - CRLF = CR + LF; - c64k = 65536; - -type - - {:@abstract(Exception clas used by Synapse) - When you enable generating of exceptions, this exception is raised by - Synapse's units.} - ESynapseError = class(Exception) - private - FErrorCode: Integer; - FErrorMessage: string; - published - {:Code of error. Value depending on used operating system} - property ErrorCode: Integer read FErrorCode Write FErrorCode; - {:Human readable description of error.} - property ErrorMessage: string read FErrorMessage Write FErrorMessage; - end; - - {:Types of OnStatus events} - THookSocketReason = ( - {:Resolving is begin. Resolved IP and port is in parameter in format like: - 'localhost.somewhere.com:25'.} - HR_ResolvingBegin, - {:Resolving is done. Resolved IP and port is in parameter in format like: - 'localhost.somewhere.com:25'. It is always same as in HR_ResolvingBegin!} - HR_ResolvingEnd, - {:Socket created by CreateSocket method. It reporting Family of created - socket too!} - HR_SocketCreate, - {:Socket closed by CloseSocket method.} - HR_SocketClose, - {:Socket binded to IP and Port. Binded IP and Port is in parameter in format - like: 'localhost.somewhere.com:25'.} - HR_Bind, - {:Socket connected to IP and Port. Connected IP and Port is in parameter in - format like: 'localhost.somewhere.com:25'.} - HR_Connect, - {:Called when CanRead method is used with @True result.} - HR_CanRead, - {:Called when CanWrite method is used with @True result.} - HR_CanWrite, - {:Socket is swithed to Listen mode. (TCP socket only)} - HR_Listen, - {:Socket Accepting client connection. (TCP socket only)} - HR_Accept, - {:report count of bytes readed from socket. Number is in parameter string. - If you need is in integer, you must use StrToInt function!} - HR_ReadCount, - {:report count of bytes writed to socket. Number is in parameter string. If - you need is in integer, you must use StrToInt function!} - HR_WriteCount, - {:If is limiting of bandwidth on, then this reason is called when sending or - receiving is stopped for satisfy bandwidth limit. Parameter is count of - waiting milliseconds.} - HR_Wait, - {:report situation where communication error occured. When raiseexcept is - @true, then exception is called after this Hook reason.} - HR_Error - ); - - {:Procedural type for OnStatus event. Sender is calling TBlockSocket object, - Reason is one of set Status events and value is optional data.} - THookSocketStatus = procedure(Sender: TObject; Reason: THookSocketReason; - const Value: string) of object; - - {:This procedural type is used for DataFilter hooks.} - THookDataFilter = procedure(Sender: TObject; var Value: string) of object; - - {:This procedural type is used for hook OnCreateSocket. By this hook you can - insert your code after initialisation of socket. (you can set special socket - options, etc.)} - THookCreateSocket = procedure(Sender: TObject) of object; - - {:This procedural type is used for monitoring of communication.} - THookMonitor = procedure(Sender: TObject; Writing: Boolean; - const Buffer: TMemory; Len: Integer) of object; - - {:This procedural type is used for hook OnAfterConnect. By this hook you can - insert your code after TCP socket has been sucessfully connected.} - THookAfterConnect = procedure(Sender: TObject) of object; - - {:Specify family of socket.} - TSocketFamily = ( - {:Default mode. Socket family is defined by target address for connection. - It allows instant access to IPv4 and IPv6 nodes. When you need IPv6 address - as destination, then is used IPv6 mode. othervise is used IPv4 mode. - However this mode not working properly with preliminary IPv6 supports!} - SF_Any, - {:Turn this class to pure IPv4 mode. This mode is totally compatible with - previous Synapse releases.} - SF_IP4, - {:Turn to only IPv6 mode.} - SF_IP6 - ); - - {:specify possible values of SOCKS modes.} - TSocksType = ( - ST_Socks5, - ST_Socks4 - ); - - {:Specify requested SSL/TLS version for secure connection.} - TSSLType = ( - LT_all, - LT_SSLv2, - LT_SSLv3, - LT_TLSv1, - LT_TLSv1_1, - LT_SSHv2 - ); - - {:Specify type of socket delayed option.} - TSynaOptionType = ( - SOT_Linger, - SOT_RecvBuff, - SOT_SendBuff, - SOT_NonBlock, - SOT_RecvTimeout, - SOT_SendTimeout, - SOT_Reuse, - SOT_TTL, - SOT_Broadcast, - SOT_MulticastTTL, - SOT_MulticastLoop - ); - - {:@abstract(this object is used for remember delayed socket option set.)} - TSynaOption = class(TObject) - public - Option: TSynaOptionType; - Enabled: Boolean; - Value: Integer; - end; - - TCustomSSL = class; - TSSLClass = class of TCustomSSL; - - {:@abstract(Basic IP object.) - This is parent class for other class with protocol implementations. Do not - use this class directly! Use @link(TICMPBlockSocket), @link(TRAWBlockSocket), - @link(TTCPBlockSocket) or @link(TUDPBlockSocket) instead.} - TBlockSocket = class(TObject) - private - FOnStatus: THookSocketStatus; - FOnReadFilter: THookDataFilter; - FOnCreateSocket: THookCreateSocket; - FOnMonitor: THookMonitor; - FLocalSin: TVarSin; - FRemoteSin: TVarSin; - FTag: integer; - FBuffer: string; - FRaiseExcept: Boolean; - FNonBlockMode: Boolean; - FMaxLineLength: Integer; - FMaxSendBandwidth: Integer; - FNextSend: LongWord; - FMaxRecvBandwidth: Integer; - FNextRecv: LongWord; - FConvertLineEnd: Boolean; - FLastCR: Boolean; - FLastLF: Boolean; - FBinded: Boolean; - FFamily: TSocketFamily; - FFamilySave: TSocketFamily; - FIP6used: Boolean; - FPreferIP4: Boolean; - FDelayedOptions: TList; - FInterPacketTimeout: Boolean; - {$IFNDEF CIL} - FFDSet: TFDSet; - {$ENDIF} - FRecvCounter: Integer; - FSendCounter: Integer; - FSendMaxChunk: Integer; - FStopFlag: Boolean; - FNonblockSendTimeout: Integer; - function GetSizeRecvBuffer: Integer; - procedure SetSizeRecvBuffer(Size: Integer); - function GetSizeSendBuffer: Integer; - procedure SetSizeSendBuffer(Size: Integer); - procedure SetNonBlockMode(Value: Boolean); - procedure SetTTL(TTL: integer); - function GetTTL:integer; - procedure SetFamily(Value: TSocketFamily); virtual; - procedure SetSocket(Value: TSocket); virtual; - function GetWsaData: TWSAData; - function FamilyToAF(f: TSocketFamily): TAddrFamily; - protected - FSocket: TSocket; - FLastError: Integer; - FLastErrorDesc: string; - procedure SetDelayedOption(const Value: TSynaOption); - procedure DelayedOption(const Value: TSynaOption); - procedure ProcessDelayedOptions; - procedure InternalCreateSocket(Sin: TVarSin); - procedure SetSin(var Sin: TVarSin; IP, Port: string); - function GetSinIP(Sin: TVarSin): string; - function GetSinPort(Sin: TVarSin): Integer; - procedure DoStatus(Reason: THookSocketReason; const Value: string); - procedure DoReadFilter(Buffer: TMemory; var Len: Integer); - procedure DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); - procedure DoCreateSocket; - procedure LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); - procedure SetBandwidth(Value: Integer); - function TestStopFlag: Boolean; - procedure InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); virtual; - public - constructor Create; - - {:Create object and load all necessary socket library. What library is - loaded is described by STUB parameter. If STUB is empty string, then is - loaded default libraries.} - constructor CreateAlternate(Stub: string); - destructor Destroy; override; - - {:If @link(family) is not SF_Any, then create socket with type defined in - @link(Family) property. If family is SF_Any, then do nothing! (socket is - created automaticly when you know what type of socket you need to create. - (i.e. inside @link(Connect) or @link(Bind) call.) When socket is created, - then is aplyed all stored delayed socket options.} - procedure CreateSocket; - - {:It create socket. Address resolving of Value tells what type of socket is - created. If Value is resolved as IPv4 IP, then is created IPv4 socket. If - value is resolved as IPv6 address, then is created IPv6 socket.} - procedure CreateSocketByName(const Value: String); - - {:Destroy socket in use. This method is also automatically called from - object destructor.} - procedure CloseSocket; virtual; - - {:Abort any work on Socket and destroy them.} - procedure AbortSocket; virtual; - - {:Connects socket to local IP address and PORT. IP address may be numeric or - symbolic ('192.168.74.50', 'cosi.nekde.cz', 'ff08::1'). The same for PORT - - it may be number or mnemonic port ('23', 'telnet'). - - If port value is '0', system chooses itself and conects unused port in the - range 1024 to 4096 (this depending by operating system!). Structure - LocalSin is filled after calling this method. - - Note: If you call this on non-created socket, then socket is created - automaticly. - - Warning: when you call : Bind('0.0.0.0','0'); then is nothing done! In this - case is used implicit system bind instead.} - procedure Bind(IP, Port: string); - - {:Connects socket to remote IP address and PORT. The same rules as with - @link(BIND) method are valid. The only exception is that PORT with 0 value - will not be connected! - - Structures LocalSin and RemoteSin will be filled with valid values. - - When you call this on non-created socket, then socket is created - automaticly. Type of created socket is by @link(Family) property. If is - used SF_IP4, then is created socket for IPv4. If is used SF_IP6, then is - created socket for IPv6. When you have family on SF_Any (default!), then - type of created socket is determined by address resolving of destination - address. (Not work properly on prilimitary winsock IPv6 support!)} - procedure Connect(IP, Port: string); virtual; - - {:Sends data of LENGTH from BUFFER address via connected socket. System - automatically splits data to packets.} - function SendBuffer(Buffer: Tmemory; Length: Integer): Integer; virtual; - - {:One data BYTE is sent via connected socket.} - procedure SendByte(Data: Byte); virtual; - - {:Send data string via connected socket. Any terminator is not added! If you - need send true string with CR-LF termination, you must add CR-LF characters - to sended string! Because any termination is not added automaticly, you can - use this function for sending any binary data in binary string.} - procedure SendString(Data: AnsiString); virtual; - - {:Send integer as four bytes to socket.} - procedure SendInteger(Data: integer); virtual; - - {:Send data as one block to socket. Each block begin with 4 bytes with - length of data in block. This 4 bytes is added automaticly by this - function.} - procedure SendBlock(const Data: AnsiString); virtual; - - {:Send data from stream to socket.} - procedure SendStreamRaw(const Stream: TStream); virtual; - - {:Send content of stream to socket. It using @link(SendBlock) method} - procedure SendStream(const Stream: TStream); virtual; - - {:Send content of stream to socket. It using @link(SendBlock) method and - this is compatible with streams in Indy library.} - procedure SendStreamIndy(const Stream: TStream); virtual; - - {:Note: This is low-level receive function. You must be sure if data is - waiting for read before call this function for avoid deadlock! - - Waits until allocated buffer is filled by received data. Returns number of - data received, which equals to LENGTH value under normal operation. If it - is not equal the communication channel is possibly broken. - - On stream oriented sockets if is received 0 bytes, it mean 'socket is - closed!" - - On datagram socket is readed first waiting datagram.} - function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions! - - Method waits until data is received. If no data is received within TIMEOUT - (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. Methods - serves for reading any size of data (i.e. one megabyte...). This method is - preffered for reading from stream sockets (like TCP).} - function RecvBufferEx(Buffer: Tmemory; Len: Integer; - Timeout: Integer): Integer; virtual; - - {:Similar to @link(RecvBufferEx), but readed data is stored in binary - string, not in memory buffer.} - function RecvBufferStr(Length: Integer; Timeout: Integer): AnsiString; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions. - - Waits until one data byte is received which is also returned as function - result. If no data is received within TIMEOUT (in milliseconds)period, - @link(LastError) is set to WSAETIMEDOUT and result have value 0.} - function RecvByte(Timeout: Integer): Byte; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions. - - Waits until one four bytes are received and return it as one Ineger Value. - If no data is received within TIMEOUT (in milliseconds)period, - @link(LastError) is set to WSAETIMEDOUT and result have value 0.} - function RecvInteger(Timeout: Integer): Integer; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions. - - Method waits until data string is received. This string is terminated by - CR-LF characters. The resulting string is returned without this termination - (CR-LF)! If @link(ConvertLineEnd) is used, then CR-LF sequence may not be - exactly CR-LF. See @link(ConvertLineEnd) description. If no data is - received within TIMEOUT (in milliseconds) period, @link(LastError) is set - to WSAETIMEDOUT. You may also specify maximum length of reading data by - @link(MaxLineLength) property.} - function RecvString(Timeout: Integer): AnsiString; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions. - - Method waits until data string is received. This string is terminated by - Terminator string. The resulting string is returned without this - termination. If no data is received within TIMEOUT (in milliseconds) - period, @link(LastError) is set to WSAETIMEDOUT. You may also specify - maximum length of reading data by @link(MaxLineLength) property.} - function RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; virtual; - - {:Note: This is high-level receive function. It using internal - @link(LineBuffer) and you can combine this function freely with other - high-level functions. - - Method reads all data waiting for read. If no data is received within - TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. - Methods serves for reading unknown size of data. Because before call this - function you don't know size of received data, returned data is stored in - dynamic size binary string. This method is preffered for reading from - stream sockets (like TCP). It is very goot for receiving datagrams too! - (UDP protocol)} - function RecvPacket(Timeout: Integer): AnsiString; virtual; - - {:Read one block of data from socket. Each block begin with 4 bytes with - length of data in block. This function read first 4 bytes for get lenght, - then it wait for reported count of bytes.} - function RecvBlock(Timeout: Integer): AnsiString; virtual; - - {:Read all data from socket to stream until socket is closed (or any error - occured.)} - procedure RecvStreamRaw(const Stream: TStream; Timeout: Integer); virtual; - {:Read requested count of bytes from socket to stream.} - procedure RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: Integer); - - {:Receive data to stream. It using @link(RecvBlock) method.} - procedure RecvStream(const Stream: TStream; Timeout: Integer); virtual; - - {:Receive data to stream. This function is compatible with similar function - in Indy library. It using @link(RecvBlock) method.} - procedure RecvStreamIndy(const Stream: TStream; Timeout: Integer); virtual; - - {:Same as @link(RecvBuffer), but readed data stays in system input buffer. - Warning: this function not respect data in @link(LineBuffer)! Is not - recommended to use this function!} - function PeekBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; - - {:Same as @link(RecvByte), but readed data stays in input system buffer. - Warning: this function not respect data in @link(LineBuffer)! Is not - recommended to use this function!} - function PeekByte(Timeout: Integer): Byte; virtual; - - {:On stream sockets it returns number of received bytes waiting for picking. - 0 is returned when there is no such data. On datagram socket it returns - length of the first waiting datagram. Returns 0 if no datagram is waiting.} - function WaitingData: Integer; virtual; - - {:Same as @link(WaitingData), but if exists some of data in @link(Linebuffer), - return their length instead.} - function WaitingDataEx: Integer; - - {:Clear all waiting data for read from buffers.} - procedure Purge; - - {:Sets linger. Enabled linger means that the system waits another LINGER - (in milliseconds) time for delivery of sent data. This function is only for - stream type of socket! (TCP)} - procedure SetLinger(Enable: Boolean; Linger: Integer); - - {:Actualize values in @link(LocalSin).} - procedure GetSinLocal; - - {:Actualize values in @link(RemoteSin).} - procedure GetSinRemote; - - {:Actualize values in @link(LocalSin) and @link(RemoteSin).} - procedure GetSins; - - {:If you "manually" call Socket API functions, forward their return code as - parameter to this function, which evaluates it, eventually calls - GetLastError and found error code returns and stores to @link(LastError).} - function SockCheck(SockResult: Integer): Integer; - - {:If @link(LastError) contains some error code and @link(RaiseExcept) - property is @true, raise adequate exception.} - procedure ExceptCheck; - - {:Returns local computer name as numerical or symbolic value. It try get - fully qualified domain name. Name is returned in the format acceptable by - functions demanding IP as input parameter.} - function LocalName: string; - - {:Try resolve name to all possible IP address. i.e. If you pass as name - result of @link(LocalName) method, you get all IP addresses used by local - system.} - procedure ResolveNameToIP(Name: string; const IPList: TStrings); - - {:Try resolve name to primary IP address. i.e. If you pass as name result of - @link(LocalName) method, you get primary IP addresses used by local system.} - function ResolveName(Name: string): string; - - {:Try resolve IP to their primary domain name. If IP not have domain name, - then is returned original IP.} - function ResolveIPToName(IP: string): string; - - {:Try resolve symbolic port name to port number. (i.e. 'Echo' to 8)} - function ResolvePort(Port: string): Word; - - {:Set information about remote side socket. It is good for seting remote - side for sending UDP packet, etc.} - procedure SetRemoteSin(IP, Port: string); - - {:Picks IP socket address from @link(LocalSin).} - function GetLocalSinIP: string; virtual; - - {:Picks IP socket address from @link(RemoteSin).} - function GetRemoteSinIP: string; virtual; - - {:Picks socket PORT number from @link(LocalSin).} - function GetLocalSinPort: Integer; virtual; - - {:Picks socket PORT number from @link(RemoteSin).} - function GetRemoteSinPort: Integer; virtual; - - {:Return @TRUE, if you can read any data from socket or is incoming - connection on TCP based socket. Status is tested for time Timeout (in - milliseconds). If value in Timeout is 0, status is only tested and - continue. If value in Timeout is -1, run is breaked and waiting for read - data maybe forever. - - This function is need only on special cases, when you need use - @link(RecvBuffer) function directly!} - function CanRead(Timeout: Integer): Boolean; virtual; - - {:Same as @link(CanRead), but additionally return @TRUE if is some data in - @link(LineBuffer).} - function CanReadEx(Timeout: Integer): Boolean; virtual; - - {:Return @TRUE, if you can to socket write any data (not full sending - buffer). Status is tested for time Timeout (in milliseconds). If value in - Timeout is 0, status is only tested and continue. If value in Timeout is - -1, run is breaked and waiting for write data maybe forever. - - This function is need only on special cases!} - function CanWrite(Timeout: Integer): Boolean; virtual; - - {:Same as @link(SendBuffer), but send datagram to address from - @link(RemoteSin). Usefull for sending reply to datagram received by - function @link(RecvBufferFrom).} - function SendBufferTo(Buffer: TMemory; Length: Integer): Integer; virtual; - - {:Note: This is low-lever receive function. You must be sure if data is - waiting for read before call this function for avoid deadlock! - - Receives first waiting datagram to allocated buffer. If there is no waiting - one, then waits until one comes. Returns length of datagram stored in - BUFFER. If length exceeds buffer datagram is truncated. After this - @link(RemoteSin) structure contains information about sender of UDP packet.} - function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; virtual; -{$IFNDEF CIL} - {:This function is for check for incoming data on set of sockets. Whitch - sockets is checked is decribed by SocketList Tlist with TBlockSocket - objects. TList may have maximal number of objects defined by FD_SETSIZE - constant. Return @TRUE, if you can from some socket read any data or is - incoming connection on TCP based socket. Status is tested for time Timeout - (in milliseconds). If value in Timeout is 0, status is only tested and - continue. If value in Timeout is -1, run is breaked and waiting for read - data maybe forever. If is returned @TRUE, CanReadList TList is filled by all - TBlockSocket objects what waiting for read.} - function GroupCanRead(const SocketList: TList; Timeout: Integer; - const CanReadList: TList): Boolean; -{$ENDIF} - {:By this method you may turn address reuse mode for local @link(bind). It - is good specially for UDP protocol. Using this with TCP protocol is - hazardous!} - procedure EnableReuse(Value: Boolean); - - {:Try set timeout for all sending and receiving operations, if socket - provider can do it. (It not supported by all socket providers!)} - procedure SetTimeout(Timeout: Integer); - - {:Try set timeout for all sending operations, if socket provider can do it. - (It not supported by all socket providers!)} - procedure SetSendTimeout(Timeout: Integer); - - {:Try set timeout for all receiving operations, if socket provider can do - it. (It not supported by all socket providers!)} - procedure SetRecvTimeout(Timeout: Integer); - - {:Return value of socket type.} - function GetSocketType: integer; Virtual; - - {:Return value of protocol type for socket creation.} - function GetSocketProtocol: integer; Virtual; - - {:WSA structure with information about socket provider. On linux is this - structure simulated!} - property WSAData: TWSADATA read GetWsaData; - - {:Structure describing local socket side.} - property LocalSin: TVarSin read FLocalSin write FLocalSin; - - {:Structure describing remote socket side.} - property RemoteSin: TVarSin read FRemoteSin write FRemoteSin; - - {:Socket handler. Suitable for "manual" calls to socket API or manual - connection of socket to a previously created socket (i.e by Accept method - on TCP socket)} - property Socket: TSocket read FSocket write SetSocket; - - {:Last socket operation error code. Error codes are described in socket - documentation. Human readable error description is stored in - @link(LastErrorDesc) property.} - property LastError: Integer read FLastError; - - {:Human readable error description of @link(LastError) code.} - property LastErrorDesc: string read FLastErrorDesc; - - {:Buffer used by all high-level receiving functions. This buffer is used for - optimized reading of data from socket. In normal cases you not need access - to this buffer directly!} - property LineBuffer: string read FBuffer write FBuffer; - - {:Size of Winsock receive buffer. If it is not supported by socket provider, - it return as size one kilobyte.} - property SizeRecvBuffer: Integer read GetSizeRecvBuffer write SetSizeRecvBuffer; - - {:Size of Winsock send buffer. If it is not supported by socket provider, it - return as size one kilobyte.} - property SizeSendBuffer: Integer read GetSizeSendBuffer write SetSizeSendBuffer; - - {:If @True, turn class to non-blocking mode. Not all functions are working - properly in this mode, you must know exactly what you are doing! However - when you have big experience with non-blocking programming, then you can - optimise your program by non-block mode!} - property NonBlockMode: Boolean read FNonBlockMode Write SetNonBlockMode; - - {:Set Time-to-live value. (if system supporting it!)} - property TTL: Integer read GetTTL Write SetTTL; - - {:If is @true, then class in in IPv6 mode.} - property IP6used: Boolean read FIP6used; - - {:Return count of received bytes on this socket from begin of current - connection.} - property RecvCounter: Integer read FRecvCounter; - - {:Return count of sended bytes on this socket from begin of current - connection.} - property SendCounter: Integer read FSendCounter; - published - {:Return descriptive string for given error code. This is class function. - You may call it without created object!} - class function GetErrorDesc(ErrorCode: Integer): string; - - {:this value is for free use.} - property Tag: Integer read FTag write FTag; - - {:If @true, winsock errors raises exception. Otherwise is setted - @link(LastError) value only and you must check it from your program! Default - value is @false.} - property RaiseExcept: Boolean read FRaiseExcept write FRaiseExcept; - - {:Define maximum length in bytes of @link(LineBuffer) for high-level - receiving functions. If this functions try to read more data then this - limit, error is returned! If value is 0 (default), no limitation is used. - This is very good protection for stupid attacks to your server by sending - lot of data without proper terminator... until all your memory is allocated - by LineBuffer! - - Note: This maximum length is checked only in functions, what read unknown - number of bytes! (like @link(RecvString) or @link(RecvTerminated))} - property MaxLineLength: Integer read FMaxLineLength Write FMaxLineLength; - - {:Define maximal bandwidth for all sending operations in bytes per second. - If value is 0 (default), bandwidth limitation is not used.} - property MaxSendBandwidth: Integer read FMaxSendBandwidth Write FMaxSendBandwidth; - - {:Define maximal bandwidth for all receiving operations in bytes per second. - If value is 0 (default), bandwidth limitation is not used.} - property MaxRecvBandwidth: Integer read FMaxRecvBandwidth Write FMaxRecvBandwidth; - - {:Define maximal bandwidth for all sending and receiving operations in bytes - per second. If value is 0 (default), bandwidth limitation is not used.} - property MaxBandwidth: Integer Write SetBandwidth; - - {:Do a conversion of non-standard line terminators to CRLF. (Off by default) - If @True, then terminators like sigle CR, single LF or LFCR are converted - to CRLF internally. This have effect only in @link(RecvString) method!} - property ConvertLineEnd: Boolean read FConvertLineEnd Write FConvertLineEnd; - - {:Specified Family of this socket. When you are using Windows preliminary - support for IPv6, then I recommend to set this property!} - property Family: TSocketFamily read FFamily Write SetFamily; - - {:When resolving of domain name return both IPv4 and IPv6 addresses, then - specify if is used IPv4 (dafault - @true) or IPv6.} - property PreferIP4: Boolean read FPreferIP4 Write FPreferIP4; - - {:By default (@true) is all timeouts used as timeout between two packets in - reading operations. If you set this to @false, then Timeouts is for overall - reading operation!} - property InterPacketTimeout: Boolean read FInterPacketTimeout Write FInterPacketTimeout; - - {:All sended datas was splitted by this value.} - property SendMaxChunk: Integer read FSendMaxChunk Write FSendMaxChunk; - - {:By setting this property to @true you can stop any communication. You can - use this property for soft abort of communication.} - property StopFlag: Boolean read FStopFlag Write FStopFlag; - - {:Timeout for data sending by non-blocking socket mode.} - property NonblockSendTimeout: Integer read FNonblockSendTimeout Write FNonblockSendTimeout; - - {:This event is called by various reasons. It is good for monitoring socket, - create gauges for data transfers, etc.} - property OnStatus: THookSocketStatus read FOnStatus write FOnStatus; - - {:this event is good for some internal thinks about filtering readed datas. - It is used by telnet client by example.} - property OnReadFilter: THookDataFilter read FOnReadFilter write FOnReadFilter; - - {:This event is called after real socket creation for setting special socket - options, because you not know when socket is created. (it is depended on - Ipv4, IPv6 or automatic mode)} - property OnCreateSocket: THookCreateSocket read FOnCreateSocket write FOnCreateSocket; - - {:This event is good for monitoring content of readed or writed datas.} - property OnMonitor: THookMonitor read FOnMonitor write FOnMonitor; - end; - - {:@abstract(Support for SOCKS4 and SOCKS5 proxy) - Layer with definition all necessary properties and functions for - implementation SOCKS proxy client. Do not use this class directly.} - TSocksBlockSocket = class(TBlockSocket) - protected - FSocksIP: string; - FSocksPort: string; - FSocksTimeout: integer; - FSocksUsername: string; - FSocksPassword: string; - FUsingSocks: Boolean; - FSocksResolver: Boolean; - FSocksLastError: integer; - FSocksResponseIP: string; - FSocksResponsePort: string; - FSocksLocalIP: string; - FSocksLocalPort: string; - FSocksRemoteIP: string; - FSocksRemotePort: string; - FBypassFlag: Boolean; - FSocksType: TSocksType; - function SocksCode(IP, Port: string): string; - function SocksDecode(Value: string): integer; - public - constructor Create; - - {:Open connection to SOCKS proxy and if @link(SocksUsername) is set, do - authorisation to proxy. This is needed only in special cases! (it is called - internally!)} - function SocksOpen: Boolean; - - {:Send specified request to SOCKS proxy. This is needed only in special - cases! (it is called internally!)} - function SocksRequest(Cmd: Byte; const IP, Port: string): Boolean; - - {:Receive response to previosly sended request. This is needed only in - special cases! (it is called internally!)} - function SocksResponse: Boolean; - - {:Is @True when class is using SOCKS proxy.} - property UsingSocks: Boolean read FUsingSocks; - - {:If SOCKS proxy failed, here is error code returned from SOCKS proxy.} - property SocksLastError: integer read FSocksLastError; - published - {:Address of SOCKS server. If value is empty string, SOCKS support is - disabled. Assingning any value to this property enable SOCKS mode. - Warning: You cannot combine this mode with HTTP-tunneling mode!} - property SocksIP: string read FSocksIP write FSocksIP; - - {:Port of SOCKS server. Default value is '1080'.} - property SocksPort: string read FSocksPort write FSocksPort; - - {:If you need authorisation on SOCKS server, set username here.} - property SocksUsername: string read FSocksUsername write FSocksUsername; - - {:If you need authorisation on SOCKS server, set password here.} - property SocksPassword: string read FSocksPassword write FSocksPassword; - - {:Specify timeout for communicatin with SOCKS server. Default is one minute.} - property SocksTimeout: integer read FSocksTimeout write FSocksTimeout; - - {:If @True, all symbolic names of target hosts is not translated to IP's - locally, but resolving is by SOCKS proxy. Default is @True.} - property SocksResolver: Boolean read FSocksResolver write FSocksResolver; - - {:Specify SOCKS type. By default is used SOCKS5, but you can use SOCKS4 too. - When you select SOCKS4, then if @link(SOCKSResolver) is enabled, then is - used SOCKS4a. Othervise is used pure SOCKS4.} - property SocksType: TSocksType read FSocksType write FSocksType; - end; - - {:@abstract(Implementation of TCP socket.) - Supported features: IPv4, IPv6, SSL/TLS or SSH (depending on used plugin), - SOCKS5 proxy (outgoing connections and limited incomming), SOCKS4/4a proxy - (outgoing connections and limited incomming), TCP through HTTP proxy tunnel.} - TTCPBlockSocket = class(TSocksBlockSocket) - protected - FOnAfterConnect: THookAfterConnect; - FSSL: TCustomSSL; - FHTTPTunnelIP: string; - FHTTPTunnelPort: string; - FHTTPTunnel: Boolean; - FHTTPTunnelRemoteIP: string; - FHTTPTunnelRemotePort: string; - FHTTPTunnelUser: string; - FHTTPTunnelPass: string; - FHTTPTunnelTimeout: integer; - procedure SocksDoConnect(IP, Port: string); - procedure HTTPTunnelDoConnect(IP, Port: string); - procedure DoAfterConnect; - public - {:Create TCP socket class with default plugin for SSL/TSL/SSH implementation - (see @link(SSLImplementation))} - constructor Create; - - {:Create TCP socket class with desired plugin for SSL/TSL/SSH implementation} - constructor CreateWithSSL(SSLPlugin: TSSLClass); - destructor Destroy; override; - - {:See @link(TBlockSocket.CloseSocket)} - procedure CloseSocket; override; - - {:See @link(TBlockSocket.WaitingData)} - function WaitingData: Integer; override; - - {:Sets socket to receive mode for new incoming connections. It is necessary - to use @link(TBlockSocket.BIND) function call before this method to select - receiving port! - - If you use SOCKS, activate incoming TCP connection by this proxy. (By BIND - method of SOCKS.)} - procedure Listen; virtual; - - {:Waits until new incoming connection comes. After it comes a new socket is - automatically created (socket handler is returned by this function as - result). - - If you use SOCKS, new socket is not created! In this case is used same - socket as socket for listening! So, you can accept only one connection in - SOCKS mode.} - function Accept: TSocket; - - {:Connects socket to remote IP address and PORT. The same rules as with - @link(TBlockSocket.BIND) method are valid. The only exception is that PORT - with 0 value will not be connected. After call to this method - a communication channel between local and remote socket is created. Local - socket is assigned automatically if not controlled by previous call to - @link(TBlockSocket.BIND) method. Structures @link(TBlockSocket.LocalSin) - and @link(TBlockSocket.RemoteSin) will be filled with valid values. - - If you use SOCKS, activate outgoing TCP connection by SOCKS proxy specified - in @link(TSocksBlockSocket.SocksIP). (By CONNECT method of SOCKS.) - - If you use HTTP-tunnel mode, activate outgoing TCP connection by HTTP - tunnel specified in @link(HTTPTunnelIP). (By CONNECT method of HTTP - protocol.) - - Note: If you call this on non-created socket, then socket is created - automaticly.} - procedure Connect(IP, Port: string); override; - - {:If you need upgrade existing TCP connection to SSL/TLS (or SSH2, if plugin - allows it) mode, then call this method. This method switch this class to - SSL mode and do SSL/TSL handshake.} - procedure SSLDoConnect; - - {:By this method you can downgrade existing SSL/TLS connection to normal TCP - connection.} - procedure SSLDoShutdown; - - {:If you need use this component as SSL/TLS TCP server, then after accepting - of inbound connection you need start SSL/TLS session by this method. Before - call this function, you must have assigned all neeeded certificates and - keys!} - function SSLAcceptConnection: Boolean; - - {:See @link(TBlockSocket.GetLocalSinIP)} - function GetLocalSinIP: string; override; - - {:See @link(TBlockSocket.GetRemoteSinIP)} - function GetRemoteSinIP: string; override; - - {:See @link(TBlockSocket.GetLocalSinPort)} - function GetLocalSinPort: Integer; override; - - {:See @link(TBlockSocket.GetRemoteSinPort)} - function GetRemoteSinPort: Integer; override; - - {:See @link(TBlockSocket.SendBuffer)} - function SendBuffer(Buffer: TMemory; Length: Integer): Integer; override; - - {:See @link(TBlockSocket.RecvBuffer)} - function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; - - {:Return value of socket type. For TCP return SOCK_STREAM.} - function GetSocketType: integer; override; - - {:Return value of protocol type for socket creation. For TCP return - IPPROTO_TCP.} - function GetSocketProtocol: integer; override; - - {:Class implementing SSL/TLS support. It is allways some descendant - of @link(TCustomSSL) class. When programmer not select some SSL plugin - class, then is used @link(TSSLNone)} - property SSL: TCustomSSL read FSSL; - - {:@True if is used HTTP tunnel mode.} - property HTTPTunnel: Boolean read FHTTPTunnel; - published - {:Specify IP address of HTTP proxy. Assingning non-empty value to this - property enable HTTP-tunnel mode. This mode is for tunnelling any outgoing - TCP connection through HTTP proxy server. (If policy on HTTP proxy server - allow this!) Warning: You cannot combine this mode with SOCK5 mode!} - property HTTPTunnelIP: string read FHTTPTunnelIP Write FHTTPTunnelIP; - - {:Specify port of HTTP proxy for HTTP-tunneling.} - property HTTPTunnelPort: string read FHTTPTunnelPort Write FHTTPTunnelPort; - - {:Specify authorisation username for access to HTTP proxy in HTTP-tunnel - mode. If you not need authorisation, then let this property empty.} - property HTTPTunnelUser: string read FHTTPTunnelUser Write FHTTPTunnelUser; - - {:Specify authorisation password for access to HTTP proxy in HTTP-tunnel - mode.} - property HTTPTunnelPass: string read FHTTPTunnelPass Write FHTTPTunnelPass; - - {:Specify timeout for communication with HTTP proxy in HTTPtunnel mode.} - property HTTPTunnelTimeout: integer read FHTTPTunnelTimeout Write FHTTPTunnelTimeout; - - {:This event is called after sucessful TCP socket connection.} - property OnAfterConnect: THookAfterConnect read FOnAfterConnect write FOnAfterConnect; - end; - - {:@abstract(Datagram based communication) - This class implementing datagram based communication instead default stream - based communication style.} - TDgramBlockSocket = class(TSocksBlockSocket) - public - {:Fill @link(TBlockSocket.RemoteSin) structure. This address is used for - sending data.} - procedure Connect(IP, Port: string); override; - - {:Silently redirected to @link(TBlockSocket.SendBufferTo).} - function SendBuffer(Buffer: TMemory; Length: Integer): Integer; override; - - {:Silently redirected to @link(TBlockSocket.RecvBufferFrom).} - function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; override; - end; - - {:@abstract(Implementation of UDP socket.) - NOTE: in this class is all receiving redirected to RecvBufferFrom. You can - use for reading any receive function. Preffered is RecvPacket! Similary all - sending is redirected to SendbufferTo. You can use for sending UDP packet any - sending function, like SendString. - - Supported features: IPv4, IPv6, unicasts, broadcasts, multicasts, SOCKS5 - proxy (only unicasts! Outgoing and incomming.)} - TUDPBlockSocket = class(TDgramBlockSocket) - protected - FSocksControlSock: TTCPBlockSocket; - function UdpAssociation: Boolean; - procedure SetMulticastTTL(TTL: integer); - function GetMulticastTTL:integer; - public - destructor Destroy; override; - - {:Enable or disable sending of broadcasts. If seting OK, result is @true. - This method is not supported in SOCKS5 mode! IPv6 does not support - broadcasts! In this case you must use Multicasts instead.} - procedure EnableBroadcast(Value: Boolean); - - {:See @link(TBlockSocket.SendBufferTo)} - function SendBufferTo(Buffer: TMemory; Length: Integer): Integer; override; - - {:See @link(TBlockSocket.RecvBufferFrom)} - function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; override; -{$IFNDEF CIL} - {:Add this socket to given multicast group. You cannot use Multicasts in - SOCKS mode!} - procedure AddMulticast(MCastIP:string); - - {:Remove this socket from given multicast group.} - procedure DropMulticast(MCastIP:string); -{$ENDIF} - {:All sended multicast datagrams is loopbacked to your interface too. (you - can read your sended datas.) You can disable this feature by this function. - This function not working on some Windows systems!} - procedure EnableMulticastLoop(Value: Boolean); - - {:Return value of socket type. For UDP return SOCK_DGRAM.} - function GetSocketType: integer; override; - - {:Return value of protocol type for socket creation. For UDP return - IPPROTO_UDP.} - function GetSocketProtocol: integer; override; - - {:Set Time-to-live value for multicasts packets. It define number of routers - for transfer of datas. If you set this to 1 (dafault system value), then - multicasts packet goes only to you local network. If you need transport - multicast packet to worldwide, then increase this value, but be carefull, - lot of routers on internet does not transport multicasts packets!} - property MulticastTTL: Integer read GetMulticastTTL Write SetMulticastTTL; - end; - - {:@abstract(Implementation of RAW ICMP socket.) - For this object you must have rights for creating RAW sockets!} - TICMPBlockSocket = class(TDgramBlockSocket) - public - {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} - function GetSocketType: integer; override; - - {:Return value of protocol type for socket creation. For ICMP returns - IPPROTO_ICMP or IPPROTO_ICMPV6} - function GetSocketProtocol: integer; override; - end; - - {:@abstract(Implementation of RAW socket.) - For this object you must have rights for creating RAW sockets!} - TRAWBlockSocket = class(TBlockSocket) - public - {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} - function GetSocketType: integer; override; - - {:Return value of protocol type for socket creation. For RAW returns - IPPROTO_RAW.} - function GetSocketProtocol: integer; override; - end; - - {:@abstract(Parent class for all SSL plugins.) - This is abstract class defining interface for other SSL plugins. - - Instance of this class will be created for each @link(TTCPBlockSocket). - - Warning: not all methods and propertis can work in all existing SSL plugins! - Please, read documentation of used SSL plugin.} - TCustomSSL = class(TObject) - protected - FSocket: TTCPBlockSocket; - FSSLEnabled: Boolean; - FLastError: integer; - FLastErrorDesc: string; - FSSLType: TSSLType; - FKeyPassword: string; - FCiphers: string; - FCertificateFile: string; - FPrivateKeyFile: string; - FCertificate: string; - FPrivateKey: string; - FPFX: string; - FPFXfile: string; - FCertCA: string; - FCertCAFile: string; - FTrustCertificate: string; - FTrustCertificateFile: string; - FVerifyCert: Boolean; - FUsername: string; - FPassword: string; - FSSHChannelType: string; - FSSHChannelArg1: string; - FSSHChannelArg2: string; - procedure ReturnError; - function CreateSelfSignedCert(Host: string): Boolean; virtual; - public - {: Create plugin class. it is called internally from @link(TTCPBlockSocket)} - constructor Create(const Value: TTCPBlockSocket); virtual; - - {: Assign settings (certificates and configuration) from another SSL plugin - class.} - procedure Assign(const Value: TCustomSSL); virtual; - - {: return description of used plugin. It usually return name and version - of used SSL library.} - function LibVersion: String; virtual; - - {: return name of used plugin.} - function LibName: String; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for start SSL connection.} - function Connect: boolean; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for acept new SSL connection.} - function Accept: boolean; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for hard shutdown of SSL connection. (for example, - before socket is closed)} - function Shutdown: boolean; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for soft shutdown of SSL connection. (for example, - when you need to continue with unprotected connection.)} - function BiShutdown: boolean; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for sending some datas by SSL connection.} - function SendBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for receiving some datas by SSL connection.} - function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; - - {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! - - Here is needed code for getting count of datas what waiting for read. - If SSL plugin not allows this, then it should return 0.} - function WaitingData: Integer; virtual; - - {:Return string with identificator of SSL/TLS version of existing - connection.} - function GetSSLVersion: string; virtual; - - {:Return subject of remote SSL peer.} - function GetPeerSubject: string; virtual; - - {:Return issuer certificate of remote SSL peer.} - function GetPeerIssuer: string; virtual; - - {:Return peer name from remote side certificate. This is good for verify, - if certificate is generated for remote side IP name.} - function GetPeerName: string; virtual; - - {:Return fingerprint of remote SSL peer.} - function GetPeerFingerprint: string; virtual; - - {:Return all detailed information about certificate from remote side of - SSL/TLS connection. Result string can be multilined! Each plugin can return - this informations in different format!} - function GetCertInfo: string; virtual; - - {:Return currently used Cipher.} - function GetCipherName: string; virtual; - - {:Return currently used number of bits in current Cipher algorythm.} - function GetCipherBits: integer; virtual; - - {:Return number of bits in current Cipher algorythm.} - function GetCipherAlgBits: integer; virtual; - - {:Return result value of verify remote side certificate. Look to OpenSSL - documentation for possible values. For example 0 is successfuly verified - certificate, or 18 is self-signed certificate.} - function GetVerifyCert: integer; virtual; - - {: Resurn @true if SSL mode is enabled on existing cvonnection.} - property SSLEnabled: Boolean read FSSLEnabled; - - {:Return error code of last SSL operation. 0 is OK.} - property LastError: integer read FLastError; - - {:Return error description of last SSL operation.} - property LastErrorDesc: string read FLastErrorDesc; - published - {:Here you can specify requested SSL/TLS mode. Default is autodetection, but - on some servers autodetection not working properly. In this case you must - specify requested SSL/TLS mode by your hand!} - property SSLType: TSSLType read FSSLType write FSSLType; - - {:Password for decrypting of encoded certificate or key.} - property KeyPassword: string read FKeyPassword write FKeyPassword; - - {:Username for possible credentials.} - property Username: string read FUsername write FUsername; - - {:password for possible credentials.} - property Password: string read FPassword write FPassword; - - {:By this property you can modify default set of SSL/TLS ciphers.} - property Ciphers: string read FCiphers write FCiphers; - - {:Used for loading certificate from disk file. See to plugin documentation - if this method is supported and how!} - property CertificateFile: string read FCertificateFile write FCertificateFile; - - {:Used for loading private key from disk file. See to plugin documentation - if this method is supported and how!} - property PrivateKeyFile: string read FPrivateKeyFile write FPrivateKeyFile; - - {:Used for loading certificate from binary string. See to plugin documentation - if this method is supported and how!} - property Certificate: string read FCertificate write FCertificate; - - {:Used for loading private key from binary string. See to plugin documentation - if this method is supported and how!} - property PrivateKey: string read FPrivateKey write FPrivateKey; - - {:Used for loading PFX from binary string. See to plugin documentation - if this method is supported and how!} - property PFX: string read FPFX write FPFX; - - {:Used for loading PFX from disk file. See to plugin documentation - if this method is supported and how!} - property PFXfile: string read FPFXfile write FPFXfile; - - {:Used for loading trusted certificates from disk file. See to plugin documentation - if this method is supported and how!} - property TrustCertificateFile: string read FTrustCertificateFile write FTrustCertificateFile; - - {:Used for loading trusted certificates from binary string. See to plugin documentation - if this method is supported and how!} - property TrustCertificate: string read FTrustCertificate write FTrustCertificate; - - {:Used for loading CA certificates from binary string. See to plugin documentation - if this method is supported and how!} - property CertCA: string read FCertCA write FCertCA; - - {:Used for loading CA certificates from disk file. See to plugin documentation - if this method is supported and how!} - property CertCAFile: string read FCertCAFile write FCertCAFile; - - {:If @true, then is verified client certificate. (it is good for writing - SSL/TLS servers.) When you are not server, but you are client, then if this - property is @true, verify servers certificate.} - property VerifyCert: Boolean read FVerifyCert write FVerifyCert; - - {:channel type for possible SSH connections} - property SSHChannelType: string read FSSHChannelType write FSSHChannelType; - - {:First argument of channel type for possible SSH connections} - property SSHChannelArg1: string read FSSHChannelArg1 write FSSHChannelArg1; - - {:Second argument of channel type for possible SSH connections} - property SSHChannelArg2: string read FSSHChannelArg2 write FSSHChannelArg2; - end; - - {:@abstract(Default SSL plugin with no SSL support.) - Dummy SSL plugin implementation for applications without SSL/TLS support.} - TSSLNone = class (TCustomSSL) - public - {:See @inherited} - function LibVersion: String; override; - {:See @inherited} - function LibName: String; override; - end; - - {:@abstract(Record with definition of IP packet header.) - For reading data from ICMP or RAW sockets.} - TIPHeader = record - VerLen: Byte; - TOS: Byte; - TotalLen: Word; - Identifer: Word; - FragOffsets: Word; - TTL: Byte; - Protocol: Byte; - CheckSum: Word; - SourceIp: LongWord; - DestIp: LongWord; - Options: LongWord; - end; - - {:@abstract(Parent class of application protocol implementations.) - By this class is defined common properties.} - TSynaClient = Class(TObject) - protected - FTargetHost: string; - FTargetPort: string; - FIPInterface: string; - FTimeout: integer; - FUserName: string; - FPassword: string; - public - constructor Create; - published - {:Specify terget server IP (or symbolic name). Default is 'localhost'.} - property TargetHost: string read FTargetHost Write FTargetHost; - - {:Specify terget server port (or symbolic name).} - property TargetPort: string read FTargetPort Write FTargetPort; - - {:Defined local socket address. (outgoing IP address). By default is used - '0.0.0.0' as wildcard for default IP.} - property IPInterface: string read FIPInterface Write FIPInterface; - - {:Specify default timeout for socket operations.} - property Timeout: integer read FTimeout Write FTimeout; - - {:If protocol need user authorization, then fill here username.} - property UserName: string read FUserName Write FUserName; - - {:If protocol need user authorization, then fill here password.} - property Password: string read FPassword Write FPassword; - end; - -var - {:Selected SSL plugin. Default is @link(TSSLNone). - - Do not change this value directly!!! - - Just add your plugin unit to your project uses instead. Each plugin unit have - initialization code what modify this variable.} - SSLImplementation: TSSLClass = TSSLNone; - -implementation - -{$IFDEF ONCEWINSOCK} -var - WsaDataOnce: TWSADATA; - e: ESynapseError; -{$ENDIF} - - -constructor TBlockSocket.Create; -begin - CreateAlternate(''); -end; - -constructor TBlockSocket.CreateAlternate(Stub: string); -{$IFNDEF ONCEWINSOCK} -var - e: ESynapseError; -{$ENDIF} -begin - inherited Create; - FDelayedOptions := TList.Create; - FRaiseExcept := False; -{$IFDEF RAISEEXCEPT} - FRaiseExcept := True; -{$ENDIF} - FSocket := INVALID_SOCKET; - FBuffer := ''; - FLastCR := False; - FLastLF := False; - FBinded := False; - FNonBlockMode := False; - FMaxLineLength := 0; - FMaxSendBandwidth := 0; - FNextSend := 0; - FMaxRecvBandwidth := 0; - FNextRecv := 0; - FConvertLineEnd := False; - FFamily := SF_Any; - FFamilySave := SF_Any; - FIP6used := False; - FPreferIP4 := True; - FInterPacketTimeout := True; - FRecvCounter := 0; - FSendCounter := 0; - FSendMaxChunk := c64k; - FStopFlag := False; - FNonblockSendTimeout := 15000; -{$IFNDEF ONCEWINSOCK} - if Stub = '' then - Stub := DLLStackName; - if not InitSocketInterface(Stub) then - begin - e := ESynapseError.Create('Error loading Socket interface (' + Stub + ')!'); - e.ErrorCode := 0; - e.ErrorMessage := 'Error loading Socket interface (' + Stub + ')!'; - raise e; - end; - SockCheck(synsock.WSAStartup(WinsockLevel, FWsaDataOnce)); - ExceptCheck; -{$ENDIF} -end; - -destructor TBlockSocket.Destroy; -var - n: integer; - p: TSynaOption; -begin - CloseSocket; -{$IFNDEF ONCEWINSOCK} - synsock.WSACleanup; - DestroySocketInterface; -{$ENDIF} - for n := FDelayedOptions.Count - 1 downto 0 do - begin - p := TSynaOption(FDelayedOptions[n]); - p.Free; - end; - FDelayedOptions.Free; - inherited Destroy; -end; - -function TBlockSocket.FamilyToAF(f: TSocketFamily): TAddrFamily; -begin - case f of - SF_ip4: - Result := AF_INET; - SF_ip6: - Result := AF_INET6; - else - Result := AF_UNSPEC; - end; -end; - -procedure TBlockSocket.SetDelayedOption(const Value: TSynaOption); -var - li: TLinger; - x: integer; - buf: TMemory; -begin - case value.Option of - SOT_Linger: - begin - {$IFDEF CIL} - li := TLinger.Create(Value.Enabled, Value.Value div 1000); - synsock.SetSockOptObj(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), li); - {$ELSE} - li.l_onoff := Ord(Value.Enabled); - li.l_linger := Value.Value div 1000; - buf := @li; - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), buf, SizeOf(li)); - {$ENDIF} - end; - SOT_RecvBuff: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), - buf, SizeOf(Value.Value)); - end; - SOT_SendBuff: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), - buf, SizeOf(Value.Value)); - end; - SOT_NonBlock: - begin - FNonBlockMode := Value.Enabled; - x := Ord(FNonBlockMode); - synsock.IoctlSocket(FSocket, FIONBIO, x); - end; - SOT_RecvTimeout: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), - buf, SizeOf(Value.Value)); - end; - SOT_SendTimeout: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDTIMEO), - buf, SizeOf(Value.Value)); - end; - SOT_Reuse: - begin - x := Ord(Value.Enabled); - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(x); - {$ELSE} - buf := @x; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_REUSEADDR), buf, SizeOf(x)); - end; - SOT_TTL: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - if FIP6Used then - synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_UNICAST_HOPS), - buf, SizeOf(Value.Value)) - else - synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_TTL), - buf, SizeOf(Value.Value)); - end; - SOT_Broadcast: - begin -//#todo1 broadcasty na IP6 - x := Ord(Value.Enabled); - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(x); - {$ELSE} - buf := @x; - {$ENDIF} - synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_BROADCAST), buf, SizeOf(x)); - end; - SOT_MulticastTTL: - begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(value.Value); - {$ELSE} - buf := @Value.Value; - {$ENDIF} - if FIP6Used then - synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_HOPS), - buf, SizeOf(Value.Value)) - else - synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_TTL), - buf, SizeOf(Value.Value)); - end; - SOT_MulticastLoop: - begin - x := Ord(Value.Enabled); - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(x); - {$ELSE} - buf := @x; - {$ENDIF} - if FIP6Used then - synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_LOOP), buf, SizeOf(x)) - else - synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_LOOP), buf, SizeOf(x)); - end; - end; - Value.free; -end; - -procedure TBlockSocket.DelayedOption(const Value: TSynaOption); -begin - if FSocket = INVALID_SOCKET then - begin - FDelayedOptions.Insert(0, Value); - end - else - SetDelayedOption(Value); -end; - -procedure TBlockSocket.ProcessDelayedOptions; -var - n: integer; - d: TSynaOption; -begin - for n := FDelayedOptions.Count - 1 downto 0 do - begin - d := TSynaOption(FDelayedOptions[n]); - SetDelayedOption(d); - end; - FDelayedOptions.Clear; -end; - -procedure TBlockSocket.SetSin(var Sin: TVarSin; IP, Port: string); -var - f: TSocketFamily; -begin - DoStatus(HR_ResolvingBegin, IP + ':' + Port); - FLastError := 0; - //if socket exists, then use their type, else use users selection - f := SF_Any; - if (FSocket = INVALID_SOCKET) and (FFamily = SF_any) then - begin - if IsIP(IP) then - f := SF_IP4 - else - if IsIP6(IP) then - f := SF_IP6; - end - else - f := FFamily; - FLastError := synsock.SetVarSin(sin, ip, port, FamilyToAF(f), - GetSocketprotocol, GetSocketType, FPreferIP4); - DoStatus(HR_ResolvingEnd, IP + ':' + Port); -end; - -function TBlockSocket.GetSinIP(Sin: TVarSin): string; -begin - Result := synsock.GetSinIP(sin); -end; - -function TBlockSocket.GetSinPort(Sin: TVarSin): Integer; -begin - Result := synsock.GetSinPort(sin); -end; - -procedure TBlockSocket.CreateSocket; -var - sin: TVarSin; -begin - //dummy for SF_Any Family mode - FLastError := 0; - if (FFamily <> SF_Any) and (FSocket = INVALID_SOCKET) then - begin - {$IFDEF CIL} - if FFamily = SF_IP6 then - sin := TVarSin.Create(IPAddress.Parse('::0'), 0) - else - sin := TVarSin.Create(IPAddress.Parse('0.0.0.0'), 0); - {$ELSE} - FillChar(Sin, Sizeof(Sin), 0); - if FFamily = SF_IP6 then - sin.sin_family := AF_INET6 - else - sin.sin_family := AF_INET; - {$ENDIF} - InternalCreateSocket(Sin); - end; -end; - -procedure TBlockSocket.CreateSocketByName(const Value: String); -var - sin: TVarSin; -begin - FLastError := 0; - if FSocket = INVALID_SOCKET then - begin - SetSin(sin, value, '0'); - if FLastError = 0 then - InternalCreateSocket(Sin); - end; -end; - -procedure TBlockSocket.InternalCreateSocket(Sin: TVarSin); -begin - FStopFlag := False; - FRecvCounter := 0; - FSendCounter := 0; - FLastError := 0; - if FSocket = INVALID_SOCKET then - begin - FBuffer := ''; - FBinded := False; - FIP6Used := Sin.AddressFamily = AF_INET6; - FSocket := synsock.Socket(integer(Sin.AddressFamily), GetSocketType, GetSocketProtocol); - if FSocket = INVALID_SOCKET then - FLastError := synsock.WSAGetLastError; - {$IFNDEF CIL} - FD_ZERO(FFDSet); - FD_SET(FSocket, FFDSet); - {$ENDIF} - ExceptCheck; - if FIP6used then - DoStatus(HR_SocketCreate, 'IPv6') - else - DoStatus(HR_SocketCreate, 'IPv4'); - ProcessDelayedOptions; - DoCreateSocket; - end; -end; - -procedure TBlockSocket.CloseSocket; -begin - AbortSocket; -end; - -procedure TBlockSocket.AbortSocket; -var - n: integer; - p: TSynaOption; -begin - if FSocket <> INVALID_SOCKET then - synsock.CloseSocket(FSocket); - FSocket := INVALID_SOCKET; - for n := FDelayedOptions.Count - 1 downto 0 do - begin - p := TSynaOption(FDelayedOptions[n]); - p.Free; - end; - FDelayedOptions.Clear; - FFamily := FFamilySave; - FLastError := 0; - DoStatus(HR_SocketClose, ''); -end; - -procedure TBlockSocket.Bind(IP, Port: string); -var - Sin: TVarSin; -begin - FLastError := 0; - if (FSocket <> INVALID_SOCKET) - or not((FFamily = SF_ANY) and (IP = cAnyHost) and (Port = cAnyPort)) then - begin - SetSin(Sin, IP, Port); - if FLastError = 0 then - begin - if FSocket = INVALID_SOCKET then - InternalCreateSocket(Sin); - SockCheck(synsock.Bind(FSocket, Sin)); - GetSinLocal; - FBuffer := ''; - FBinded := True; - end; - ExceptCheck; - DoStatus(HR_Bind, IP + ':' + Port); - end; -end; - -procedure TBlockSocket.Connect(IP, Port: string); -var - Sin: TVarSin; -begin - SetSin(Sin, IP, Port); - if FLastError = 0 then - begin - if FSocket = INVALID_SOCKET then - InternalCreateSocket(Sin); - SockCheck(synsock.Connect(FSocket, Sin)); - if FLastError = 0 then - GetSins; - FBuffer := ''; - FLastCR := False; - FLastLF := False; - end; - ExceptCheck; - DoStatus(HR_Connect, IP + ':' + Port); -end; - -procedure TBlockSocket.GetSinLocal; -begin - synsock.GetSockName(FSocket, FLocalSin); -end; - -procedure TBlockSocket.GetSinRemote; -begin - synsock.GetPeerName(FSocket, FRemoteSin); -end; - -procedure TBlockSocket.GetSins; -begin - GetSinLocal; - GetSinRemote; -end; - -procedure TBlockSocket.SetBandwidth(Value: Integer); -begin - MaxSendBandwidth := Value; - MaxRecvBandwidth := Value; -end; - -procedure TBlockSocket.LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); -var - x: LongWord; - y: LongWord; - n: integer; -begin - if FStopFlag then - exit; - if MaxB > 0 then - begin - y := GetTick; - if Next > y then - begin - x := Next - y; - if x > 0 then - begin - DoStatus(HR_Wait, IntToStr(x)); - sleep(x mod 250); - for n := 1 to x div 250 do - if FStopFlag then - Break - else - sleep(250); - end; - end; - Next := GetTick + Trunc((Length / MaxB) * 1000); - end; -end; - -function TBlockSocket.TestStopFlag: Boolean; -begin - Result := FStopFlag; - if Result then - begin - FStopFlag := False; - FLastError := WSAECONNABORTED; - ExceptCheck; - end; -end; - - -function TBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; -{$IFNDEF CIL} -var - x, y: integer; - l, r: integer; - p: Pointer; -{$ENDIF} -begin - Result := 0; - if TestStopFlag then - Exit; - DoMonitor(True, Buffer, Length); -{$IFDEF CIL} - Result := synsock.Send(FSocket, Buffer, Length, 0); -{$ELSE} - l := Length; - x := 0; - while x < l do - begin - y := l - x; - if y > FSendMaxChunk then - y := FSendMaxChunk; - if y > 0 then - begin - LimitBandwidth(y, FMaxSendBandwidth, FNextsend); - p := IncPoint(Buffer, x); - r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); - SockCheck(r); - if FLastError = WSAEWOULDBLOCK then - begin - if CanWrite(FNonblockSendTimeout) then - begin - r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); - SockCheck(r); - end - else - FLastError := WSAETIMEDOUT; - end; - if FLastError <> 0 then - Break; - Inc(x, r); - Inc(Result, r); - Inc(FSendCounter, r); - DoStatus(HR_WriteCount, IntToStr(r)); - end - else - break; - end; -{$ENDIF} - ExceptCheck; -end; - -procedure TBlockSocket.SendByte(Data: Byte); -{$IFDEF CIL} -var - buf: TMemory; -{$ENDIF} -begin -{$IFDEF CIL} - setlength(buf, 1); - buf[0] := Data; - SendBuffer(buf, 1); -{$ELSE} - SendBuffer(@Data, 1); -{$ENDIF} -end; - -procedure TBlockSocket.SendString(Data: AnsiString); -var - buf: TMemory; -begin -// SendBuffer(PChar(Data), Length(Data)); - {$IFDEF CIL} - buf := BytesOf(Data); - {$ELSE} - buf := pchar(data); - {$ENDIF} - SendBuffer(buf, Length(Data)); -end; - -procedure TBlockSocket.SendInteger(Data: integer); -var - buf: TMemory; -begin - {$IFDEF CIL} - buf := System.BitConverter.GetBytes(Data); - {$ELSE} - buf := @Data; - {$ENDIF} - SendBuffer(buf, SizeOf(Data)); -end; - -procedure TBlockSocket.SendBlock(const Data: AnsiString); -var - i: integer; -begin - i := SwapBytes(Length(data)); - SendString(Codelongint(i) + Data); -end; - -procedure TBlockSocket.InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); -var - si, l: integer; - x, y, yr: integer; - s: AnsiString; - b: boolean; -{$IFDEF CIL} - buf: TMemory; -{$ENDIF} -begin - si := Stream.Size - Stream.Position; - if not indy then - l := SwapBytes(si) - else - l := si; - x := 0; - b := true; - while x < si do - begin - y := si - x; - if y > FSendMaxChunk then - y := FSendMaxChunk; - {$IFDEF CIL} - Setlength(buf, y); - yr := Stream.read(buf, y); - if yr > 0 then - begin - if WithSize and b then - begin - b := false; - SendString(CodeLongInt(l)); - end; - SendBuffer(buf, yr); - if FLastError <> 0 then - break; - Inc(x, yr); - end - else - break; - {$ELSE} - Setlength(s, y); - yr := Stream.read(Pchar(s)^, y); - if yr > 0 then - begin - SetLength(s, yr); - if WithSize and b then - begin - b := false; - SendString(CodeLongInt(l) + s); - end - else - SendString(s); - if FLastError <> 0 then - break; - Inc(x, yr); - end - else - break; - {$ENDIF} - end; -end; - -procedure TBlockSocket.SendStreamRaw(const Stream: TStream); -begin - InternalSendStream(Stream, false, false); -end; - -procedure TBlockSocket.SendStreamIndy(const Stream: TStream); -begin - InternalSendStream(Stream, true, true); -end; - -procedure TBlockSocket.SendStream(const Stream: TStream); -begin - InternalSendStream(Stream, true, false); -end; - -function TBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; -begin - Result := 0; - if TestStopFlag then - Exit; - LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); -// Result := synsock.Recv(FSocket, Buffer^, Length, MSG_NOSIGNAL); - Result := synsock.Recv(FSocket, Buffer, Length, MSG_NOSIGNAL); - if Result = 0 then - FLastError := WSAECONNRESET - else - SockCheck(Result); - ExceptCheck; - if Result > 0 then - begin - Inc(FRecvCounter, Result); - DoStatus(HR_ReadCount, IntToStr(Result)); - DoMonitor(False, Buffer, Result); - DoReadFilter(Buffer, Result); - end; -end; - -function TBlockSocket.RecvBufferEx(Buffer: TMemory; Len: Integer; - Timeout: Integer): Integer; -var - s: AnsiString; - rl, l: integer; - ti: LongWord; -{$IFDEF CIL} - n: integer; - b: TMemory; -{$ENDIF} -begin - FLastError := 0; - Result := 0; - if Len > 0 then - begin - rl := 0; - repeat - ti := GetTick; - s := RecvPacket(Timeout); - l := Length(s); - if (rl + l) > Len then - l := Len - rl; - {$IFDEF CIL} - b := BytesOf(s); - for n := 0 to l do - Buffer[rl + n] := b[n]; - {$ELSE} - Move(Pointer(s)^, IncPoint(Buffer, rl)^, l); - {$ENDIF} - rl := rl + l; - if FLastError <> 0 then - Break; - if rl >= Len then - Break; - if not FInterPacketTimeout then - begin - Timeout := Timeout - integer(TickDelta(ti, GetTick)); - if Timeout <= 0 then - begin - FLastError := WSAETIMEDOUT; - Break; - end; - end; - until False; - delete(s, 1, l); - FBuffer := s; - Result := rl; - end; -end; - -function TBlockSocket.RecvBufferStr(Length: Integer; Timeout: Integer): AnsiString; -var - x: integer; -{$IFDEF CIL} - buf: Tmemory; -{$ENDIF} -begin - Result := ''; - if Length > 0 then - begin - {$IFDEF CIL} - Setlength(Buf, Length); - x := RecvBufferEx(buf, Length , Timeout); - if FLastError = 0 then - begin - SetLength(Buf, x); - Result := StringOf(buf); - end - else - Result := ''; - {$ELSE} - Setlength(Result, Length); - x := RecvBufferEx(PChar(Result), Length , Timeout); - if FLastError = 0 then - SetLength(Result, x) - else - Result := ''; - {$ENDIF} - end; -end; - -function TBlockSocket.RecvPacket(Timeout: Integer): AnsiString; -var - x: integer; -{$IFDEF CIL} - buf: TMemory; -{$ENDIF} -begin - Result := ''; - FLastError := 0; - if FBuffer <> '' then - begin - Result := FBuffer; - FBuffer := ''; - end - else - begin - {$IFDEF WIN32} - //not drain CPU on large downloads... - Sleep(0); - {$ENDIF} - x := WaitingData; - if x > 0 then - begin - {$IFDEF CIL} - SetLength(Buf, x); - x := RecvBuffer(Buf, x); - if x >= 0 then - begin - SetLength(Buf, x); - Result := StringOf(Buf); - end; - {$ELSE} - SetLength(Result, x); - x := RecvBuffer(Pointer(Result), x); - if x >= 0 then - SetLength(Result, x); - {$ENDIF} - end - else - begin - if CanRead(Timeout) then - begin - x := WaitingData; - if x = 0 then - FLastError := WSAECONNRESET; - if x > 0 then - begin - {$IFDEF CIL} - SetLength(Buf, x); - x := RecvBuffer(Buf, x); - if x >= 0 then - begin - SetLength(Buf, x); - result := StringOf(Buf); - end; - {$ELSE} - SetLength(Result, x); - x := RecvBuffer(Pointer(Result), x); - if x >= 0 then - SetLength(Result, x); - {$ENDIF} - end; - end - else - FLastError := WSAETIMEDOUT; - end; - end; - if FConvertLineEnd and (Result <> '') then - begin - if FLastCR and (Result[1] = LF) then - Delete(Result, 1, 1); - if FLastLF and (Result[1] = CR) then - Delete(Result, 1, 1); - FLastCR := False; - FLastLF := False; - end; - ExceptCheck; -end; - - -function TBlockSocket.RecvByte(Timeout: Integer): Byte; -begin - Result := 0; - FLastError := 0; - if FBuffer = '' then - FBuffer := RecvPacket(Timeout); - if (FLastError = 0) and (FBuffer <> '') then - begin - Result := Ord(FBuffer[1]); - Delete(FBuffer, 1, 1); - end; - ExceptCheck; -end; - -function TBlockSocket.RecvInteger(Timeout: Integer): Integer; -var - s: AnsiString; -begin - Result := 0; - s := RecvBufferStr(4, Timeout); - if FLastError = 0 then - Result := (ord(s[1]) + ord(s[2]) * 256) + (ord(s[3]) + ord(s[4]) * 256) * 65536; -end; - -function TBlockSocket.RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; -var - x: Integer; - s: AnsiString; - l: Integer; - CorCRLF: Boolean; - t: AnsiString; - tl: integer; - ti: LongWord; -begin - FLastError := 0; - Result := ''; - l := Length(Terminator); - if l = 0 then - Exit; - tl := l; - CorCRLF := FConvertLineEnd and (Terminator = CRLF); - s := ''; - x := 0; - repeat - //get rest of FBuffer or incomming new data... - ti := GetTick; - s := s + RecvPacket(Timeout); - if FLastError <> 0 then - Break; - x := 0; - if Length(s) > 0 then - if CorCRLF then - begin - t := ''; - x := PosCRLF(s, t); - tl := Length(t); - if t = CR then - FLastCR := True; - if t = LF then - FLastLF := True; - end - else - begin - x := pos(Terminator, s); - tl := l; - end; - if (FMaxLineLength <> 0) and (Length(s) > FMaxLineLength) then - begin - FLastError := WSAENOBUFS; - Break; - end; - if x > 0 then - Break; - if not FInterPacketTimeout then - begin - Timeout := Timeout - integer(TickDelta(ti, GetTick)); - if Timeout <= 0 then - begin - FLastError := WSAETIMEDOUT; - Break; - end; - end; - until False; - if x > 0 then - begin - Result := Copy(s, 1, x - 1); - Delete(s, 1, x + tl - 1); - end; - FBuffer := s; - ExceptCheck; -end; - -function TBlockSocket.RecvString(Timeout: Integer): AnsiString; -var - s: AnsiString; -begin - Result := ''; - s := RecvTerminated(Timeout, CRLF); - if FLastError = 0 then - Result := s; -end; - -function TBlockSocket.RecvBlock(Timeout: Integer): AnsiString; -var - x: integer; -begin - Result := ''; - x := RecvInteger(Timeout); - if FLastError = 0 then - Result := RecvBufferStr(x, Timeout); -end; - -procedure TBlockSocket.RecvStreamRaw(const Stream: TStream; Timeout: Integer); -var - s: AnsiString; -begin - repeat - s := RecvPacket(Timeout); - if FLastError = 0 then - WriteStrToStream(Stream, s); - until FLastError <> 0; -end; - -procedure TBlockSocket.RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: Integer); -var - s: AnsiString; - n: integer; -{$IFDEF CIL} - buf: TMemory; -{$ENDIF} -begin - for n := 1 to (Size div FSendMaxChunk) do - begin - {$IFDEF CIL} - SetLength(buf, FSendMaxChunk); - RecvBufferEx(buf, FSendMaxChunk, Timeout); - if FLastError <> 0 then - Exit; - Stream.Write(buf, FSendMaxChunk); - {$ELSE} - s := RecvBufferStr(FSendMaxChunk, Timeout); - if FLastError <> 0 then - Exit; - Stream.Write(Pchar(s)^, FSendMaxChunk); - {$ENDIF} - end; - n := Size mod FSendMaxChunk; - if n > 0 then - begin - {$IFDEF CIL} - SetLength(buf, n); - RecvBufferEx(buf, n, Timeout); - if FLastError <> 0 then - Exit; - Stream.Write(buf, n); - {$ELSE} - s := RecvBufferStr(n, Timeout); - if FLastError <> 0 then - Exit; - Stream.Write(Pchar(s)^, n); - {$ENDIF} - end; -end; - -procedure TBlockSocket.RecvStreamIndy(const Stream: TStream; Timeout: Integer); -var - x: integer; -begin - x := RecvInteger(Timeout); - x := synsock.NToHL(x); - if FLastError = 0 then - RecvStreamSize(Stream, Timeout, x); -end; - -procedure TBlockSocket.RecvStream(const Stream: TStream; Timeout: Integer); -var - x: integer; -begin - x := RecvInteger(Timeout); - if FLastError = 0 then - RecvStreamSize(Stream, Timeout, x); -end; - -function TBlockSocket.PeekBuffer(Buffer: TMemory; Length: Integer): Integer; -begin - {$IFNDEF CIL} -// Result := synsock.Recv(FSocket, Buffer^, Length, MSG_PEEK + MSG_NOSIGNAL); - Result := synsock.Recv(FSocket, Buffer, Length, MSG_PEEK + MSG_NOSIGNAL); - SockCheck(Result); - ExceptCheck; - {$ENDIF} -end; - -function TBlockSocket.PeekByte(Timeout: Integer): Byte; -var - s: string; -begin - {$IFNDEF CIL} - Result := 0; - if CanRead(Timeout) then - begin - SetLength(s, 1); - PeekBuffer(Pointer(s), 1); - if s <> '' then - Result := Ord(s[1]); - end - else - FLastError := WSAETIMEDOUT; - ExceptCheck; - {$ENDIF} -end; - -function TBlockSocket.SockCheck(SockResult: Integer): Integer; -begin - FLastErrorDesc := ''; - if SockResult = integer(SOCKET_ERROR) then - begin - Result := synsock.WSAGetLastError; - FLastErrorDesc := GetErrorDesc(Result); - end - else - Result := 0; - FLastError := Result; -end; - -procedure TBlockSocket.ExceptCheck; -var - e: ESynapseError; -begin - FLastErrorDesc := GetErrorDesc(FLastError); - if (LastError <> 0) and (LastError <> WSAEINPROGRESS) - and (LastError <> WSAEWOULDBLOCK) then - begin - DoStatus(HR_Error, IntToStr(FLastError) + ',' + FLastErrorDesc); - if FRaiseExcept then - begin - e := ESynapseError.Create(Format('Synapse TCP/IP Socket error %d: %s', - [FLastError, FLastErrorDesc])); -// e := ESynapseError.CreateFmt('Synapse TCP/IP Socket error %d: %s', -// [FLastError, FLastErrorDesc]); - e.ErrorCode := FLastError; - e.ErrorMessage := FLastErrorDesc; - raise e; - end; - end; -end; - -function TBlockSocket.WaitingData: Integer; -var - x: Integer; -begin - Result := 0; - if synsock.IoctlSocket(FSocket, FIONREAD, x) = 0 then - Result := x; - if Result > c64k then - Result := c64k; -end; - -function TBlockSocket.WaitingDataEx: Integer; -begin - if FBuffer <> '' then - Result := Length(FBuffer) - else - Result := WaitingData; -end; - -procedure TBlockSocket.Purge; -begin - Sleep(1); - try - while (Length(FBuffer) > 0) or (WaitingData > 0) do - begin - RecvPacket(0); - if FLastError <> 0 then - break; - end; - except - on exception do; - end; - FLastError := 0; -end; - -procedure TBlockSocket.SetLinger(Enable: Boolean; Linger: Integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_Linger; - d.Enabled := Enable; - d.Value := Linger; - DelayedOption(d); -end; - -function TBlockSocket.LocalName: string; -begin - Result := synsock.GetHostName; - if Result = '' then - Result := '127.0.0.1'; -end; - -procedure TBlockSocket.ResolveNameToIP(Name: string; const IPList: TStrings); -begin - IPList.Clear; - synsock.ResolveNameToIP(Name, FamilyToAF(FFamily), GetSocketprotocol, GetSocketType, IPList); - if IPList.Count = 0 then - IPList.Add(cAnyHost); -end; - -function TBlockSocket.ResolveName(Name: string): string; -var - l: TStringList; -begin - l := TStringList.Create; - try - ResolveNameToIP(Name, l); - Result := l[0]; - finally - l.Free; - end; -end; - -function TBlockSocket.ResolvePort(Port: string): Word; -begin - Result := synsock.ResolvePort(Port, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); -end; - -function TBlockSocket.ResolveIPToName(IP: string): string; -begin - if not IsIP(IP) or not IsIp6(IP) then - IP := ResolveName(IP); - Result := synsock.ResolveIPToName(IP, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); -end; - -procedure TBlockSocket.SetRemoteSin(IP, Port: string); -begin - SetSin(FRemoteSin, IP, Port); -end; - -function TBlockSocket.GetLocalSinIP: string; -begin - Result := GetSinIP(FLocalSin); -end; - -function TBlockSocket.GetRemoteSinIP: string; -begin - Result := GetSinIP(FRemoteSin); -end; - -function TBlockSocket.GetLocalSinPort: Integer; -begin - Result := GetSinPort(FLocalSin); -end; - -function TBlockSocket.GetRemoteSinPort: Integer; -begin - Result := GetSinPort(FRemoteSin); -end; - -function TBlockSocket.CanRead(Timeout: Integer): Boolean; -{$IFDEF CIL} -begin - Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectRead); -{$ELSE} -var - TimeVal: PTimeVal; - TimeV: TTimeVal; - x: Integer; - FDSet: TFDSet; -begin - TimeV.tv_usec := (Timeout mod 1000) * 1000; - TimeV.tv_sec := Timeout div 1000; - TimeVal := @TimeV; - if Timeout = -1 then - TimeVal := nil; - FDSet := FFdSet; - x := synsock.Select(FSocket + 1, @FDSet, nil, nil, TimeVal); - SockCheck(x); - if FLastError <> 0 then - x := 0; - Result := x > 0; -{$ENDIF} - ExceptCheck; - if Result then - DoStatus(HR_CanRead, ''); -end; - -function TBlockSocket.CanWrite(Timeout: Integer): Boolean; -{$IFDEF CIL} -begin - Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectWrite); -{$ELSE} -var - TimeVal: PTimeVal; - TimeV: TTimeVal; - x: Integer; - FDSet: TFDSet; -begin - TimeV.tv_usec := (Timeout mod 1000) * 1000; - TimeV.tv_sec := Timeout div 1000; - TimeVal := @TimeV; - if Timeout = -1 then - TimeVal := nil; - FDSet := FFdSet; - x := synsock.Select(FSocket + 1, nil, @FDSet, nil, TimeVal); - SockCheck(x); - if FLastError <> 0 then - x := 0; - Result := x > 0; -{$ENDIF} - ExceptCheck; - if Result then - DoStatus(HR_CanWrite, ''); -end; - -function TBlockSocket.CanReadEx(Timeout: Integer): Boolean; -begin - if FBuffer <> '' then - Result := True - else - Result := CanRead(Timeout); -end; - -function TBlockSocket.SendBufferTo(Buffer: TMemory; Length: Integer): Integer; -begin - Result := 0; - if TestStopFlag then - Exit; - DoMonitor(True, Buffer, Length); - LimitBandwidth(Length, FMaxSendBandwidth, FNextsend); - Result := synsock.SendTo(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); - SockCheck(Result); - ExceptCheck; - Inc(FSendCounter, Result); - DoStatus(HR_WriteCount, IntToStr(Result)); -end; - -function TBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; -begin - Result := 0; - if TestStopFlag then - Exit; - LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); - Result := synsock.RecvFrom(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); - SockCheck(Result); - ExceptCheck; - Inc(FRecvCounter, Result); - DoStatus(HR_ReadCount, IntToStr(Result)); - DoMonitor(False, Buffer, Result); -end; - -function TBlockSocket.GetSizeRecvBuffer: Integer; -var - l: Integer; -{$IFDEF CIL} - buf: TMemory; -{$ENDIF} -begin -{$IFDEF CIL} - setlength(buf, 4); - SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), buf, l)); - Result := System.BitConverter.ToInt32(buf,0); -{$ELSE} - l := SizeOf(Result); - SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_RCVBUF, @Result, l)); - if FLastError <> 0 then - Result := 1024; - ExceptCheck; -{$ENDIF} -end; - -procedure TBlockSocket.SetSizeRecvBuffer(Size: Integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_RecvBuff; - d.Value := Size; - DelayedOption(d); -end; - -function TBlockSocket.GetSizeSendBuffer: Integer; -var - l: Integer; -{$IFDEF CIL} - buf: TMemory; -{$ENDIF} -begin -{$IFDEF CIL} - setlength(buf, 4); - SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), buf, l)); - Result := System.BitConverter.ToInt32(buf,0); -{$ELSE} - l := SizeOf(Result); - SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_SNDBUF, @Result, l)); - if FLastError <> 0 then - Result := 1024; - ExceptCheck; -{$ENDIF} -end; - -procedure TBlockSocket.SetSizeSendBuffer(Size: Integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_SendBuff; - d.Value := Size; - DelayedOption(d); -end; - -procedure TBlockSocket.SetNonBlockMode(Value: Boolean); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_nonblock; - d.Enabled := Value; - DelayedOption(d); -end; - -procedure TBlockSocket.SetTimeout(Timeout: Integer); -begin - SetSendTimeout(Timeout); - SetRecvTimeout(Timeout); -end; - -procedure TBlockSocket.SetSendTimeout(Timeout: Integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_sendtimeout; - d.Value := Timeout; - DelayedOption(d); -end; - -procedure TBlockSocket.SetRecvTimeout(Timeout: Integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_recvtimeout; - d.Value := Timeout; - DelayedOption(d); -end; - -{$IFNDEF CIL} -function TBlockSocket.GroupCanRead(const SocketList: TList; Timeout: Integer; - const CanReadList: TList): boolean; -var - FDSet: TFDSet; - TimeVal: PTimeVal; - TimeV: TTimeVal; - x, n: Integer; - Max: Integer; -begin - TimeV.tv_usec := (Timeout mod 1000) * 1000; - TimeV.tv_sec := Timeout div 1000; - TimeVal := @TimeV; - if Timeout = -1 then - TimeVal := nil; - FD_ZERO(FDSet); - Max := 0; - for n := 0 to SocketList.Count - 1 do - if TObject(SocketList.Items[n]) is TBlockSocket then - begin - if TBlockSocket(SocketList.Items[n]).Socket > Max then - Max := TBlockSocket(SocketList.Items[n]).Socket; - FD_SET(TBlockSocket(SocketList.Items[n]).Socket, FDSet); - end; - x := synsock.Select(Max + 1, @FDSet, nil, nil, TimeVal); - SockCheck(x); - ExceptCheck; - if FLastError <> 0 then - x := 0; - Result := x > 0; - CanReadList.Clear; - if Result then - for n := 0 to SocketList.Count - 1 do - if TObject(SocketList.Items[n]) is TBlockSocket then - if FD_ISSET(TBlockSocket(SocketList.Items[n]).Socket, FDSet) then - CanReadList.Add(TBlockSocket(SocketList.Items[n])); -end; -{$ENDIF} - -procedure TBlockSocket.EnableReuse(Value: Boolean); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_reuse; - d.Enabled := Value; - DelayedOption(d); -end; - -procedure TBlockSocket.SetTTL(TTL: integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_TTL; - d.Value := TTL; - DelayedOption(d); -end; - -function TBlockSocket.GetTTL:integer; -var - l: Integer; -begin -{$IFNDEF CIL} - l := SizeOf(Result); - if FIP6Used then - synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_UNICAST_HOPS, @Result, l) - else - synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_TTL, @Result, l); -{$ENDIF} -end; - -procedure TBlockSocket.SetFamily(Value: TSocketFamily); -begin - FFamily := Value; - FFamilySave := Value; -end; - -procedure TBlockSocket.SetSocket(Value: TSocket); -begin - FRecvCounter := 0; - FSendCounter := 0; - FSocket := Value; -{$IFNDEF CIL} - FD_ZERO(FFDSet); - FD_SET(FSocket, FFDSet); -{$ENDIF} - GetSins; - FIP6Used := FRemoteSin.AddressFamily = AF_INET6; -end; - -function TBlockSocket.GetWsaData: TWSAData; -begin - Result := WsaDataOnce; -end; - -function TBlockSocket.GetSocketType: integer; -begin - Result := 0; -end; - -function TBlockSocket.GetSocketProtocol: integer; -begin - Result := integer(IPPROTO_IP); -end; - -procedure TBlockSocket.DoStatus(Reason: THookSocketReason; const Value: string); -begin - if assigned(OnStatus) then - OnStatus(Self, Reason, Value); -end; - -procedure TBlockSocket.DoReadFilter(Buffer: TMemory; var Len: Integer); -var - s: string; -begin - if assigned(OnReadFilter) then - if Len > 0 then - begin - {$IFDEF CIL} - s := StringOf(Buffer); - {$ELSE} - SetLength(s, Len); - Move(Buffer^, Pointer(s)^, Len); - {$ENDIF} - OnReadFilter(Self, s); - if Length(s) > Len then - SetLength(s, Len); - Len := Length(s); - {$IFDEF CIL} - Buffer := BytesOf(s); - {$ELSE} - Move(Pointer(s)^, Buffer^, Len); - {$ENDIF} - end; -end; - -procedure TBlockSocket.DoCreateSocket; -begin - if assigned(OnCreateSocket) then - OnCreateSocket(Self); -end; - -procedure TBlockSocket.DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); -begin - if assigned(OnMonitor) then - begin - OnMonitor(Self, Writing, Buffer, Len); - end; -end; - -class function TBlockSocket.GetErrorDesc(ErrorCode: Integer): string; -begin -{$IFDEF CIL} - if ErrorCode = 0 then - Result := '' - else - begin - Result := WSAGetLastErrorDesc; - if Result = '' then - Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; - end; -{$ELSE} - case ErrorCode of - 0: - Result := ''; - WSAEINTR: {10004} - Result := 'Interrupted system call'; - WSAEBADF: {10009} - Result := 'Bad file number'; - WSAEACCES: {10013} - Result := 'Permission denied'; - WSAEFAULT: {10014} - Result := 'Bad address'; - WSAEINVAL: {10022} - Result := 'Invalid argument'; - WSAEMFILE: {10024} - Result := 'Too many open files'; - WSAEWOULDBLOCK: {10035} - Result := 'Operation would block'; - WSAEINPROGRESS: {10036} - Result := 'Operation now in progress'; - WSAEALREADY: {10037} - Result := 'Operation already in progress'; - WSAENOTSOCK: {10038} - Result := 'Socket operation on nonsocket'; - WSAEDESTADDRREQ: {10039} - Result := 'Destination address required'; - WSAEMSGSIZE: {10040} - Result := 'Message too long'; - WSAEPROTOTYPE: {10041} - Result := 'Protocol wrong type for Socket'; - WSAENOPROTOOPT: {10042} - Result := 'Protocol not available'; - WSAEPROTONOSUPPORT: {10043} - Result := 'Protocol not supported'; - WSAESOCKTNOSUPPORT: {10044} - Result := 'Socket not supported'; - WSAEOPNOTSUPP: {10045} - Result := 'Operation not supported on Socket'; - WSAEPFNOSUPPORT: {10046} - Result := 'Protocol family not supported'; - WSAEAFNOSUPPORT: {10047} - Result := 'Address family not supported'; - WSAEADDRINUSE: {10048} - Result := 'Address already in use'; - WSAEADDRNOTAVAIL: {10049} - Result := 'Can''t assign requested address'; - WSAENETDOWN: {10050} - Result := 'Network is down'; - WSAENETUNREACH: {10051} - Result := 'Network is unreachable'; - WSAENETRESET: {10052} - Result := 'Network dropped connection on reset'; - WSAECONNABORTED: {10053} - Result := 'Software caused connection abort'; - WSAECONNRESET: {10054} - Result := 'Connection reset by peer'; - WSAENOBUFS: {10055} - Result := 'No Buffer space available'; - WSAEISCONN: {10056} - Result := 'Socket is already connected'; - WSAENOTCONN: {10057} - Result := 'Socket is not connected'; - WSAESHUTDOWN: {10058} - Result := 'Can''t send after Socket shutdown'; - WSAETOOMANYREFS: {10059} - Result := 'Too many references:can''t splice'; - WSAETIMEDOUT: {10060} - Result := 'Connection timed out'; - WSAECONNREFUSED: {10061} - Result := 'Connection refused'; - WSAELOOP: {10062} - Result := 'Too many levels of symbolic links'; - WSAENAMETOOLONG: {10063} - Result := 'File name is too long'; - WSAEHOSTDOWN: {10064} - Result := 'Host is down'; - WSAEHOSTUNREACH: {10065} - Result := 'No route to host'; - WSAENOTEMPTY: {10066} - Result := 'Directory is not empty'; - WSAEPROCLIM: {10067} - Result := 'Too many processes'; - WSAEUSERS: {10068} - Result := 'Too many users'; - WSAEDQUOT: {10069} - Result := 'Disk quota exceeded'; - WSAESTALE: {10070} - Result := 'Stale NFS file handle'; - WSAEREMOTE: {10071} - Result := 'Too many levels of remote in path'; - WSASYSNOTREADY: {10091} - Result := 'Network subsystem is unusable'; - WSAVERNOTSUPPORTED: {10092} - Result := 'Winsock DLL cannot support this application'; - WSANOTINITIALISED: {10093} - Result := 'Winsock not initialized'; - WSAEDISCON: {10101} - Result := 'Disconnect'; - WSAHOST_NOT_FOUND: {11001} - Result := 'Host not found'; - WSATRY_AGAIN: {11002} - Result := 'Non authoritative - host not found'; - WSANO_RECOVERY: {11003} - Result := 'Non recoverable error'; - WSANO_DATA: {11004} - Result := 'Valid name, no data record of requested type' - else - Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; - end; -{$ENDIF} -end; - -{======================================================================} - -constructor TSocksBlockSocket.Create; -begin - inherited Create; - FSocksIP:= ''; - FSocksPort:= '1080'; - FSocksTimeout:= 60000; - FSocksUsername:= ''; - FSocksPassword:= ''; - FUsingSocks := False; - FSocksResolver := True; - FSocksLastError := 0; - FSocksResponseIP := ''; - FSocksResponsePort := ''; - FSocksLocalIP := ''; - FSocksLocalPort := ''; - FSocksRemoteIP := ''; - FSocksRemotePort := ''; - FBypassFlag := False; - FSocksType := ST_Socks5; -end; - -function TSocksBlockSocket.SocksOpen: boolean; -var - Buf: string; - n: integer; -begin - Result := False; - FUsingSocks := False; - if FSocksType <> ST_Socks5 then - begin - FUsingSocks := True; - Result := True; - end - else - begin - FBypassFlag := True; - try - if FSocksUsername = '' then - Buf := #5 + #1 + #0 - else - Buf := #5 + #2 + #2 +#0; - SendString(Buf); - Buf := RecvBufferStr(2, FSocksTimeout); - if Length(Buf) < 2 then - Exit; - if Buf[1] <> #5 then - Exit; - n := Ord(Buf[2]); - case n of - 0: //not need authorisation - ; - 2: - begin - Buf := #1 + char(Length(FSocksUsername)) + FSocksUsername - + char(Length(FSocksPassword)) + FSocksPassword; - SendString(Buf); - Buf := RecvBufferStr(2, FSocksTimeout); - if Length(Buf) < 2 then - Exit; - if Buf[2] <> #0 then - Exit; - end; - else - //other authorisation is not supported! - Exit; - end; - FUsingSocks := True; - Result := True; - finally - FBypassFlag := False; - end; - end; -end; - -function TSocksBlockSocket.SocksRequest(Cmd: Byte; - const IP, Port: string): Boolean; -var - Buf: string; -begin - FBypassFlag := True; - try - if FSocksType <> ST_Socks5 then - Buf := #4 + char(Cmd) + SocksCode(IP, Port) - else - Buf := #5 + char(Cmd) + #0 + SocksCode(IP, Port); - SendString(Buf); - Result := FLastError = 0; - finally - FBypassFlag := False; - end; -end; - -function TSocksBlockSocket.SocksResponse: Boolean; -var - Buf, s: string; - x: integer; -begin - Result := False; - FBypassFlag := True; - try - FSocksResponseIP := ''; - FSocksResponsePort := ''; - FSocksLastError := -1; - if FSocksType <> ST_Socks5 then - begin - Buf := RecvBufferStr(8, FSocksTimeout); - if FLastError <> 0 then - Exit; - if Buf[1] <> #0 then - Exit; - FSocksLastError := Ord(Buf[2]); - end - else - begin - Buf := RecvBufferStr(4, FSocksTimeout); - if FLastError <> 0 then - Exit; - if Buf[1] <> #5 then - Exit; - case Ord(Buf[4]) of - 1: - s := RecvBufferStr(4, FSocksTimeout); - 3: - begin - x := RecvByte(FSocksTimeout); - if FLastError <> 0 then - Exit; - s := char(x) + RecvBufferStr(x, FSocksTimeout); - end; - 4: - s := RecvBufferStr(16, FSocksTimeout); - else - Exit; - end; - Buf := Buf + s + RecvBufferStr(2, FSocksTimeout); - if FLastError <> 0 then - Exit; - FSocksLastError := Ord(Buf[2]); - end; - if ((FSocksLastError <> 0) and (FSocksLastError <> 90)) then - Exit; - SocksDecode(Buf); - Result := True; - finally - FBypassFlag := False; - end; -end; - -function TSocksBlockSocket.SocksCode(IP, Port: string): string; -var - ip6: TIp6Bytes; - n: integer; -begin - if FSocksType <> ST_Socks5 then - begin - Result := CodeInt(ResolvePort(Port)); - if not FSocksResolver then - IP := ResolveName(IP); - if IsIP(IP) then - begin - Result := Result + IPToID(IP); - Result := Result + FSocksUsername + #0; - end - else - begin - Result := Result + IPToID('0.0.0.1'); - Result := Result + FSocksUsername + #0; - Result := Result + IP + #0; - end; - end - else - begin - if not FSocksResolver then - IP := ResolveName(IP); - if IsIP(IP) then - Result := #1 + IPToID(IP) - else - if IsIP6(IP) then - begin - ip6 := StrToIP6(IP); - Result := #4; - for n := 0 to 15 do - Result := Result + char(ip6[n]); - end - else - Result := #3 + char(Length(IP)) + IP; - Result := Result + CodeInt(ResolvePort(Port)); - end; -end; - -function TSocksBlockSocket.SocksDecode(Value: string): integer; -var - Atyp: Byte; - y, n: integer; - w: Word; - ip6: TIp6Bytes; -begin - FSocksResponsePort := '0'; - Result := 0; - if FSocksType <> ST_Socks5 then - begin - if Length(Value) < 8 then - Exit; - Result := 3; - w := DecodeInt(Value, Result); - FSocksResponsePort := IntToStr(w); - FSocksResponseIP := Format('%d.%d.%d.%d', - [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); - Result := 9; - end - else - begin - if Length(Value) < 4 then - Exit; - Atyp := Ord(Value[4]); - Result := 5; - case Atyp of - 1: - begin - if Length(Value) < 10 then - Exit; - FSocksResponseIP := Format('%d.%d.%d.%d', - [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); - Result := 9; - end; - 3: - begin - y := Ord(Value[5]); - if Length(Value) < (5 + y + 2) then - Exit; - for n := 6 to 6 + y - 1 do - FSocksResponseIP := FSocksResponseIP + Value[n]; - Result := 5 + y + 1; - end; - 4: - begin - if Length(Value) < 22 then - Exit; - for n := 0 to 15 do - ip6[n] := ord(Value[n + 5]); - FSocksResponseIP := IP6ToStr(ip6); - Result := 21; - end; - else - Exit; - end; - w := DecodeInt(Value, Result); - FSocksResponsePort := IntToStr(w); - Result := Result + 2; - end; -end; - -{======================================================================} - -procedure TDgramBlockSocket.Connect(IP, Port: string); -begin - SetRemoteSin(IP, Port); - InternalCreateSocket(FRemoteSin); - FBuffer := ''; - DoStatus(HR_Connect, IP + ':' + Port); -end; - -function TDgramBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; -begin - Result := RecvBufferFrom(Buffer, Length); -end; - -function TDgramBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; -begin - Result := SendBufferTo(Buffer, Length); -end; - -{======================================================================} - -destructor TUDPBlockSocket.Destroy; -begin - if Assigned(FSocksControlSock) then - FSocksControlSock.Free; - inherited; -end; - -procedure TUDPBlockSocket.EnableBroadcast(Value: Boolean); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_Broadcast; - d.Enabled := Value; - DelayedOption(d); -end; - -function TUDPBlockSocket.UdpAssociation: Boolean; -var - b: Boolean; -begin - Result := True; - FUsingSocks := False; - if FSocksIP <> '' then - begin - Result := False; - if not Assigned(FSocksControlSock) then - FSocksControlSock := TTCPBlockSocket.Create; - FSocksControlSock.CloseSocket; - FSocksControlSock.CreateSocketByName(FSocksIP); - FSocksControlSock.Connect(FSocksIP, FSocksPort); - if FSocksControlSock.LastError <> 0 then - Exit; - // if not assigned local port, assign it! - if not FBinded then - Bind(cAnyHost, cAnyPort); - //open control TCP connection to SOCKS - FSocksControlSock.FSocksUsername := FSocksUsername; - FSocksControlSock.FSocksPassword := FSocksPassword; - b := FSocksControlSock.SocksOpen; - if b then - b := FSocksControlSock.SocksRequest(3, GetLocalSinIP, IntToStr(GetLocalSinPort)); - if b then - b := FSocksControlSock.SocksResponse; - if not b and (FLastError = 0) then - FLastError := WSANO_RECOVERY; - FUsingSocks :=FSocksControlSock.UsingSocks; - FSocksRemoteIP := FSocksControlSock.FSocksResponseIP; - FSocksRemotePort := FSocksControlSock.FSocksResponsePort; - Result := b and (FLastError = 0); - end; -end; - -function TUDPBlockSocket.SendBufferTo(Buffer: TMemory; Length: Integer): Integer; -var - SIp: string; - SPort: integer; - Buf: string; -begin - Result := 0; - FUsingSocks := False; - if (FSocksIP <> '') and (not UdpAssociation) then - FLastError := WSANO_RECOVERY - else - begin - if FUsingSocks then - begin -{$IFNDEF CIL} - Sip := GetRemoteSinIp; - SPort := GetRemoteSinPort; - SetRemoteSin(FSocksRemoteIP, FSocksRemotePort); - SetLength(Buf,Length); - Move(Buffer^, PChar(Buf)^, Length); - Buf := #0 + #0 + #0 + SocksCode(Sip, IntToStr(SPort)) + Buf; - Result := inherited SendBufferTo(PChar(Buf), System.Length(buf)); - SetRemoteSin(Sip, IntToStr(SPort)); -{$ENDIF} - end - else - Result := inherited SendBufferTo(Buffer, Length); - end; -end; - -function TUDPBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; -var - Buf: string; - x: integer; -begin - Result := inherited RecvBufferFrom(Buffer, Length); - if FUsingSocks then - begin -{$IFNDEF CIL} - SetLength(Buf, Result); - Move(Buffer^, PChar(Buf)^, Result); - x := SocksDecode(Buf); - Result := Result - x + 1; - Buf := Copy(Buf, x, Result); - Move(PChar(Buf)^, Buffer^, Result); - SetRemoteSin(FSocksResponseIP, FSocksResponsePort); -{$ENDIF} - end; -end; - -{$IFNDEF CIL} -procedure TUDPBlockSocket.AddMulticast(MCastIP: string); -var - Multicast: TIP_mreq; - Multicast6: TIPv6_mreq; - n: integer; - ip6: Tip6bytes; -begin - if FIP6Used then - begin - ip6 := StrToIp6(MCastIP); - for n := 0 to 15 do - Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; - Multicast6.ipv6mr_interface := 0; - SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_JOIN_GROUP, - pchar(@Multicast6), SizeOf(Multicast6))); - end - else - begin - Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); - Multicast.imr_interface.S_addr := INADDR_ANY; - SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, - pchar(@Multicast), SizeOf(Multicast))); - end; - ExceptCheck; -end; - -procedure TUDPBlockSocket.DropMulticast(MCastIP: string); -var - Multicast: TIP_mreq; - Multicast6: TIPv6_mreq; - n: integer; - ip6: Tip6bytes; -begin - if FIP6Used then - begin - ip6 := StrToIp6(MCastIP); - for n := 0 to 15 do - Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; - Multicast6.ipv6mr_interface := 0; - SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_LEAVE_GROUP, - pchar(@Multicast6), SizeOf(Multicast6))); - end - else - begin - Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); - Multicast.imr_interface.S_addr := INADDR_ANY; - SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_DROP_MEMBERSHIP, - pchar(@Multicast), SizeOf(Multicast))); - end; - ExceptCheck; -end; -{$ENDIF} - -procedure TUDPBlockSocket.SetMulticastTTL(TTL: integer); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_MulticastTTL; - d.Value := TTL; - DelayedOption(d); -end; - -function TUDPBlockSocket.GetMulticastTTL:integer; -var - l: Integer; -begin -{$IFNDEF CIL} - l := SizeOf(Result); - if FIP6Used then - synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, @Result, l) - else - synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_MULTICAST_TTL, @Result, l); -{$ENDIF} -end; - -procedure TUDPBlockSocket.EnableMulticastLoop(Value: Boolean); -var - d: TSynaOption; -begin - d := TSynaOption.Create; - d.Option := SOT_MulticastLoop; - d.Enabled := Value; - DelayedOption(d); -end; - -function TUDPBlockSocket.GetSocketType: integer; -begin - Result := integer(SOCK_DGRAM); -end; - -function TUDPBlockSocket.GetSocketProtocol: integer; -begin - Result := integer(IPPROTO_UDP); -end; - -{======================================================================} -constructor TTCPBlockSocket.CreateWithSSL(SSLPlugin: TSSLClass); -begin - inherited Create; - FSSL := SSLPlugin.Create(self); - FHTTPTunnelIP := ''; - FHTTPTunnelPort := ''; - FHTTPTunnel := False; - FHTTPTunnelRemoteIP := ''; - FHTTPTunnelRemotePort := ''; - FHTTPTunnelUser := ''; - FHTTPTunnelPass := ''; - FHTTPTunnelTimeout := 30000; -end; - -constructor TTCPBlockSocket.Create; -begin - CreateWithSSL(SSLImplementation); -end; - -destructor TTCPBlockSocket.Destroy; -begin - inherited Destroy; - FSSL.Free; -end; - -procedure TTCPBlockSocket.CloseSocket; -begin - if FSSL.SSLEnabled then - FSSL.Shutdown; - if FSocket <> INVALID_SOCKET then - begin - Synsock.Shutdown(FSocket, 1); - Purge; - end; - inherited CloseSocket; -end; - -procedure TTCPBlockSocket.DoAfterConnect; -begin - if assigned(OnAfterConnect) then - begin - OnAfterConnect(Self); - end; -end; - -function TTCPBlockSocket.WaitingData: Integer; -begin - Result := 0; - if FSSL.SSLEnabled and (FSocket <> INVALID_SOCKET) then - Result := FSSL.WaitingData; - if Result = 0 then - Result := inherited WaitingData; -end; - -procedure TTCPBlockSocket.Listen; -var - b: Boolean; - Sip,SPort: string; -begin - if FSocksIP = '' then - begin - SockCheck(synsock.Listen(FSocket, SOMAXCONN)); - GetSins; - end - else - begin - Sip := GetLocalSinIP; - if Sip = cAnyHost then - Sip := LocalName; - SPort := IntToStr(GetLocalSinPort); - inherited Connect(FSocksIP, FSocksPort); - b := SocksOpen; - if b then - b := SocksRequest(2, Sip, SPort); - if b then - b := SocksResponse; - if not b and (FLastError = 0) then - FLastError := WSANO_RECOVERY; - FSocksLocalIP := FSocksResponseIP; - if FSocksLocalIP = cAnyHost then - FSocksLocalIP := FSocksIP; - FSocksLocalPort := FSocksResponsePort; - FSocksRemoteIP := ''; - FSocksRemotePort := ''; - end; - ExceptCheck; - DoStatus(HR_Listen, ''); -end; - -function TTCPBlockSocket.Accept: TSocket; -begin - if FUsingSocks then - begin - if not SocksResponse and (FLastError = 0) then - FLastError := WSANO_RECOVERY; - FSocksRemoteIP := FSocksResponseIP; - FSocksRemotePort := FSocksResponsePort; - Result := FSocket; - end - else - begin - Result := synsock.Accept(FSocket, FRemoteSin); -/// SockCheck(Result); - end; - ExceptCheck; - DoStatus(HR_Accept, ''); -end; - -procedure TTCPBlockSocket.Connect(IP, Port: string); -begin - if FSocksIP <> '' then - SocksDoConnect(IP, Port) - else - if FHTTPTunnelIP <> '' then - HTTPTunnelDoConnect(IP, Port) - else - inherited Connect(IP, Port); - if FLasterror = 0 then - DoAfterConnect; -end; - -procedure TTCPBlockSocket.SocksDoConnect(IP, Port: string); -var - b: Boolean; -begin - inherited Connect(FSocksIP, FSocksPort); - if FLastError = 0 then - begin - b := SocksOpen; - if b then - b := SocksRequest(1, IP, Port); - if b then - b := SocksResponse; - if not b and (FLastError = 0) then - FLastError := WSASYSNOTREADY; - FSocksLocalIP := FSocksResponseIP; - FSocksLocalPort := FSocksResponsePort; - FSocksRemoteIP := IP; - FSocksRemotePort := Port; - end; - ExceptCheck; - DoStatus(HR_Connect, IP + ':' + Port); -end; - -procedure TTCPBlockSocket.HTTPTunnelDoConnect(IP, Port: string); -//bugfixed by Mike Green (mgreen@emixode.com) -var - s: string; -begin - Port := IntToStr(ResolvePort(Port)); - inherited Connect(FHTTPTunnelIP, FHTTPTunnelPort); - if FLastError <> 0 then - Exit; - FHTTPTunnel := False; - if IsIP6(IP) then - IP := '[' + IP + ']'; - SendString('CONNECT ' + IP + ':' + Port + ' HTTP/1.0' + CRLF); - if FHTTPTunnelUser <> '' then - Sendstring('Proxy-Authorization: Basic ' + - EncodeBase64(FHTTPTunnelUser + ':' + FHTTPTunnelPass) + CRLF); - SendString(CRLF); - repeat - s := RecvTerminated(FHTTPTunnelTimeout, #$0a); - if FLastError <> 0 then - Break; - if (Pos('HTTP/', s) = 1) and (Length(s) > 11) then - FHTTPTunnel := s[10] = '2'; - until (s = '') or (s = #$0d); - if (FLasterror = 0) and not FHTTPTunnel then - FLastError := WSASYSNOTREADY; - FHTTPTunnelRemoteIP := IP; - FHTTPTunnelRemotePort := Port; - ExceptCheck; -end; - -procedure TTCPBlockSocket.SSLDoConnect; -begin - FLastError := 0; - if not FSSL.Connect then - FLastError := WSASYSNOTREADY; - ExceptCheck; -end; - -procedure TTCPBlockSocket.SSLDoShutdown; -begin - FLastError := 0; - FSSL.BiShutdown; -end; - -function TTCPBlockSocket.GetLocalSinIP: string; -begin - if FUsingSocks then - Result := FSocksLocalIP - else - Result := inherited GetLocalSinIP; -end; - -function TTCPBlockSocket.GetRemoteSinIP: string; -begin - if FUsingSocks then - Result := FSocksRemoteIP - else - if FHTTPTunnel then - Result := FHTTPTunnelRemoteIP - else - Result := inherited GetRemoteSinIP; -end; - -function TTCPBlockSocket.GetLocalSinPort: Integer; -begin - if FUsingSocks then - Result := StrToIntDef(FSocksLocalPort, 0) - else - Result := inherited GetLocalSinPort; -end; - -function TTCPBlockSocket.GetRemoteSinPort: Integer; -begin - if FUsingSocks then - Result := ResolvePort(FSocksRemotePort) - else - if FHTTPTunnel then - Result := StrToIntDef(FHTTPTunnelRemotePort, 0) - else - Result := inherited GetRemoteSinPort; -end; - -function TTCPBlockSocket.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; -begin - if FSSL.SSLEnabled then - begin - Result := 0; - if TestStopFlag then - Exit; - FLastError := 0; - LimitBandwidth(Len, FMaxRecvBandwidth, FNextRecv); - Result := FSSL.RecvBuffer(Buffer, Len); - if FSSL.LastError <> 0 then - FLastError := WSASYSNOTREADY; - ExceptCheck; - Inc(FRecvCounter, Result); - DoStatus(HR_ReadCount, IntToStr(Result)); - DoMonitor(False, Buffer, Result); - DoReadFilter(Buffer, Result); - end - else - Result := inherited RecvBuffer(Buffer, Len); -end; - -function TTCPBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; -var - x, y: integer; - l, r: integer; -{$IFNDEF CIL} - p: Pointer; -{$ENDIF} -begin - if FSSL.SSLEnabled then - begin - Result := 0; - if TestStopFlag then - Exit; - FLastError := 0; - DoMonitor(True, Buffer, Length); -{$IFDEF CIL} - Result := FSSL.SendBuffer(Buffer, Length); - if FSSL.LastError <> 0 then - FLastError := WSASYSNOTREADY; - Inc(FSendCounter, Result); - DoStatus(HR_WriteCount, IntToStr(Result)); -{$ELSE} - l := Length; - x := 0; - while x < l do - begin - y := l - x; - if y > FSendMaxChunk then - y := FSendMaxChunk; - if y > 0 then - begin - LimitBandwidth(y, FMaxSendBandwidth, FNextsend); - p := IncPoint(Buffer, x); - r := FSSL.SendBuffer(p, y); - if FSSL.LastError <> 0 then - FLastError := WSASYSNOTREADY; - if Flasterror <> 0 then - Break; - Inc(x, r); - Inc(Result, r); - Inc(FSendCounter, r); - DoStatus(HR_WriteCount, IntToStr(r)); - end - else - break; - end; -{$ENDIF} - ExceptCheck; - end - else - Result := inherited SendBuffer(Buffer, Length); -end; - -function TTCPBlockSocket.SSLAcceptConnection: Boolean; -begin - FLastError := 0; - if not FSSL.Accept then - FLastError := WSASYSNOTREADY; - ExceptCheck; - Result := FLastError = 0; -end; - -function TTCPBlockSocket.GetSocketType: integer; -begin - Result := integer(SOCK_STREAM); -end; - -function TTCPBlockSocket.GetSocketProtocol: integer; -begin - Result := integer(IPPROTO_TCP); -end; - -{======================================================================} - -function TICMPBlockSocket.GetSocketType: integer; -begin - Result := integer(SOCK_RAW); -end; - -function TICMPBlockSocket.GetSocketProtocol: integer; -begin - if FIP6Used then - Result := integer(IPPROTO_ICMPV6) - else - Result := integer(IPPROTO_ICMP); -end; - -{======================================================================} - -function TRAWBlockSocket.GetSocketType: integer; -begin - Result := integer(SOCK_RAW); -end; - -function TRAWBlockSocket.GetSocketProtocol: integer; -begin - Result := integer(IPPROTO_RAW); -end; - -{======================================================================} - -constructor TSynaClient.Create; -begin - inherited Create; - FIPInterface := cAnyHost; - FTargetHost := cLocalhost; - FTargetPort := cAnyPort; - FTimeout := 5000; - FUsername := ''; - FPassword := ''; -end; - -{======================================================================} - -constructor TCustomSSL.Create(const Value: TTCPBlockSocket); -begin - inherited Create; - FSocket := Value; - FSSLEnabled := False; - FUsername := ''; - FPassword := ''; - FLastError := 0; - FLastErrorDesc := ''; - FVerifyCert := False; - FSSLType := LT_all; - FKeyPassword := ''; - FCiphers := ''; - FCertificateFile := ''; - FPrivateKeyFile := ''; - FCertCAFile := ''; - FCertCA := ''; - FTrustCertificate := ''; - FTrustCertificateFile := ''; - FCertificate := ''; - FPrivateKey := ''; - FPFX := ''; - FPFXfile := ''; - FSSHChannelType := ''; - FSSHChannelArg1 := ''; - FSSHChannelArg2 := ''; -end; - -procedure TCustomSSL.Assign(const Value: TCustomSSL); -begin - FUsername := Value.Username; - FPassword := Value.Password; - FVerifyCert := Value.VerifyCert; - FSSLType := Value.SSLType; - FKeyPassword := Value.KeyPassword; - FCiphers := Value.Ciphers; - FCertificateFile := Value.CertificateFile; - FPrivateKeyFile := Value.PrivateKeyFile; - FCertCAFile := Value.CertCAFile; - FCertCA := Value.CertCA; - FTrustCertificate := Value.TrustCertificate; - FTrustCertificateFile := Value.TrustCertificateFile; - FCertificate := Value.Certificate; - FPrivateKey := Value.PrivateKey; - FPFX := Value.PFX; - FPFXfile := Value.PFXfile; -end; - -procedure TCustomSSL.ReturnError; -begin - FLastError := -1; - FLastErrorDesc := 'SLL is not implemented!'; -end; - -function TCustomSSL.LibVersion: String; -begin - Result := ''; -end; - -function TCustomSSL.LibName: String; -begin - Result := ''; -end; - -function TCustomSSL.CreateSelfSignedCert(Host: string): Boolean; -begin - Result := False; -end; - -function TCustomSSL.Connect: boolean; -begin - ReturnError; - Result := False; -end; - -function TCustomSSL.Accept: boolean; -begin - ReturnError; - Result := False; -end; - -function TCustomSSL.Shutdown: boolean; -begin - ReturnError; - Result := False; -end; - -function TCustomSSL.BiShutdown: boolean; -begin - ReturnError; - Result := False; -end; - -function TCustomSSL.SendBuffer(Buffer: TMemory; Len: Integer): Integer; -begin - ReturnError; - Result := integer(SOCKET_ERROR); -end; - -function TCustomSSL.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; -begin - ReturnError; - Result := integer(SOCKET_ERROR); -end; - -function TCustomSSL.WaitingData: Integer; -begin - ReturnError; - Result := 0; -end; - -function TCustomSSL.GetSSLVersion: string; -begin - Result := ''; -end; - -function TCustomSSL.GetPeerSubject: string; -begin - Result := ''; -end; - -function TCustomSSL.GetPeerName: string; -begin - Result := ''; -end; - -function TCustomSSL.GetPeerIssuer: string; -begin - Result := ''; -end; - -function TCustomSSL.GetPeerFingerprint: string; -begin - Result := ''; -end; - -function TCustomSSL.GetCertInfo: string; -begin - Result := ''; -end; - -function TCustomSSL.GetCipherName: string; -begin - Result := ''; -end; - -function TCustomSSL.GetCipherBits: integer; -begin - Result := 0; -end; - -function TCustomSSL.GetCipherAlgBits: integer; -begin - Result := 0; -end; - -function TCustomSSL.GetVerifyCert: integer; -begin - Result := 1; -end; - -{======================================================================} - -function TSSLNone.LibVersion: String; -begin - Result := 'Without SSL support'; -end; - -function TSSLNone.LibName: String; -begin - Result := 'ssl_none'; -end; - -{======================================================================} - -{$IFDEF ONCEWINSOCK} -initialization -begin - if not InitSocketInterface(DLLStackName) then - begin - e := ESynapseError.Create('Error loading Socket interface (' + DLLStackName + ')!'); - e.ErrorCode := 0; - e.ErrorMessage := 'Error loading Socket interface (' + DLLStackName + ')!'; - raise e; - end; - synsock.WSAStartup(WinsockLevel, WsaDataOnce); -end; -{$ENDIF} - -finalization -begin -{$IFDEF ONCEWINSOCK} - synsock.WSACleanup; - DestroySocketInterface; -{$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/httpsend.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/httpsend.pas deleted file mode 100644 index e90b4e4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/httpsend.pas +++ /dev/null @@ -1,773 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 003.010.007 | -|==============================================================================| -| Content: HTTP client | -|==============================================================================| -| Copyright (c)1999-2007, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c) 1999-2007. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@abstract(HTTP protocol client) - -Used RFC: RFC-1867, RFC-1947, RFC-2388, RFC-2616 -} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$H+} - -unit httpsend; - -interface - -uses - SysUtils, Classes, - blcksock, synautil, synaip, synacode, synsock; - -const - cHttpProtocol = '80'; - -type - {:These encoding types are used internally by the THTTPSend object to identify - the transfer data types.} - TTransferEncoding = (TE_UNKNOWN, TE_IDENTITY, TE_CHUNKED); - - {:abstract(Implementation of HTTP protocol.)} - THTTPSend = class(TSynaClient) - protected - FSock: TTCPBlockSocket; - FTransferEncoding: TTransferEncoding; - FAliveHost: string; - FAlivePort: string; - FHeaders: TStringList; - FDocument: TMemoryStream; - FMimeType: string; - FProtocol: string; - FKeepAlive: Boolean; - FStatus100: Boolean; - FProxyHost: string; - FProxyPort: string; - FProxyUser: string; - FProxyPass: string; - FResultCode: Integer; - FResultString: string; - FUserAgent: string; - FCookies: TStringList; - FDownloadSize: integer; - FUploadSize: integer; - FRangeStart: integer; - FRangeEnd: integer; - function ReadUnknown: Boolean; - function ReadIdentity(Size: Integer): Boolean; - function ReadChunked: Boolean; - procedure ParseCookies; - function PrepareHeaders: string; - function InternalDoConnect(needssl: Boolean): Boolean; - function InternalConnect(needssl: Boolean): Boolean; - public - constructor Create; - destructor Destroy; override; - - {:Reset headers and document and Mimetype.} - procedure Clear; - - {:Decode ResultCode and ResultString from Value.} - procedure DecodeStatus(const Value: string); - - {:Connects to host define in URL and access to resource defined in URL by - method. If Document is not empty, send it to server as part of HTTP request. - Server response is in Document and headers. Connection may be authorised - by username and password in URL. If you define proxy properties, connection - is made by this proxy. If all OK, result is @true, else result is @false. - - If you use in URL 'https:' instead only 'http:', then your request is made - by SSL/TLS connection (if you not specify port, then port 443 is used - instead standard port 80). If you use SSL/TLS request and you have defined - HTTP proxy, then HTTP-tunnel mode is automaticly used .} - function HTTPMethod(const Method, URL: string): Boolean; - - {:You can call this method from OnStatus event for break current data - transfer. (or from another thread.)} - procedure Abort; - published - {:Before HTTP operation you may define any non-standard headers for HTTP - request, except of: 'Expect: 100-continue', 'Content-Length', 'Content-Type', - 'Connection', 'Authorization', 'Proxy-Authorization' and 'Host' headers. - After HTTP operation contains full headers of returned document.} - property Headers: TStringList read FHeaders; - - {:This is stringlist with name-value stringlist pairs. Each this pair is one - cookie. After HTTP request is returned cookies parsed to this stringlist. - You can leave this cookies untouched for next HTTP request. You can also - save this stringlist for later use.} - property Cookies: TStringList read FCookies; - - {:Stream with document to send (before request, or with document received - from HTTP server (after request).} - property Document: TMemoryStream read FDocument; - - {:If you need download only part of requested document, here specify - possition of subpart begin. If here 0, then is requested full document.} - property RangeStart: integer read FRangeStart Write FRangeStart; - - {:If you need download only part of requested document, here specify - possition of subpart end. If here 0, then is requested document from - rangeStart to end of document. (for broken download restoration, - for example.)} - property RangeEnd: integer read FRangeEnd Write FRangeEnd; - - {:Mime type of sending data. Default is: 'text/html'.} - property MimeType: string read FMimeType Write FMimeType; - - {:Define protocol version. Possible values are: '1.1', '1.0' (default) - and '0.9'.} - property Protocol: string read FProtocol Write FProtocol; - - {:If @true (default value), keepalives in HTTP protocol 1.1 is enabled.} - property KeepAlive: Boolean read FKeepAlive Write FKeepAlive; - - {:if @true, then server is requested for 100status capability when uploading - data. Default is @false (off).} - property Status100: Boolean read FStatus100 Write FStatus100; - - {:Address of proxy server (IP address or domain name) where you want to - connect in @link(HTTPMethod) method.} - property ProxyHost: string read FProxyHost Write FProxyHost; - - {:Port number for proxy connection. Default value is 8080.} - property ProxyPort: string read FProxyPort Write FProxyPort; - - {:Username for connect to proxy server where you want to connect in - HTTPMethod method.} - property ProxyUser: string read FProxyUser Write FProxyUser; - - {:Password for connect to proxy server where you want to connect in - HTTPMethod method.} - property ProxyPass: string read FProxyPass Write FProxyPass; - - {:Here you can specify custom User-Agent indentification. By default is - used: 'Mozilla/4.0 (compatible; Synapse)'} - property UserAgent: string read FUserAgent Write FUserAgent; - - {:After successful @link(HTTPMethod) method contains result code of - operation.} - property ResultCode: Integer read FResultCode; - - {:After successful @link(HTTPMethod) method contains string after result code.} - property ResultString: string read FResultString; - - {:if this value is not 0, then data download pending. In this case you have - here total sice of downloaded data. It is good for draw download - progressbar from OnStatus event.} - property DownloadSize: integer read FDownloadSize; - - {:if this value is not 0, then data upload pending. In this case you have - here total sice of uploaded data. It is good for draw upload progressbar - from OnStatus event.} - property UploadSize: integer read FUploadSize; - {:Socket object used for TCP/IP operation. Good for seting OnStatus hook, etc.} - property Sock: TTCPBlockSocket read FSock; - end; - -{:A very usefull function, and example of use can be found in the THTTPSend - object. It implements the GET method of the HTTP protocol. This function sends - the GET method for URL document to an HTTP server. Returned document is in the - "Response" stringlist (without any headers). Returns boolean TRUE if all went - well.} -function HttpGetText(const URL: string; const Response: TStrings): Boolean; - -{:A very usefull function, and example of use can be found in the THTTPSend - object. It implements the GET method of the HTTP protocol. This function sends - the GET method for URL document to an HTTP server. Returned document is in the - "Response" stream. Returns boolean TRUE if all went well.} -function HttpGetBinary(const URL: string; const Response: TStream): Boolean; - -{:A very useful function, and example of use can be found in the THTTPSend - object. It implements the POST method of the HTTP protocol. This function sends - the SEND method for a URL document to an HTTP server. The document to be sent - is located in "Data" stream. The returned document is in the "Data" stream. - Returns boolean TRUE if all went well.} -function HttpPostBinary(const URL: string; const Data: TStream): Boolean; - -{:A very useful function, and example of use can be found in the THTTPSend - object. It implements the POST method of the HTTP protocol. This function is - good for POSTing form data. It sends the POST method for a URL document to - an HTTP server. You must prepare the form data in the same manner as you would - the URL data, and pass this prepared data to "URLdata". The following is - a sample of how the data would appear: 'name=Lukas&field1=some%20data'. - The information in the field must be encoded by EncodeURLElement function. - The returned document is in the "Data" stream. Returns boolean TRUE if all - went well.} -function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean; - -{:A very useful function, and example of use can be found in the THTTPSend - object. It implements the POST method of the HTTP protocol. This function sends - the POST method for a URL document to an HTTP server. This function simulate - posting of file by HTML form used method 'multipart/form-data'. Posting file - is in DATA stream. Its name is Filename string. Fieldname is for name of - formular field with file. (simulate HTML INPUT FILE) The returned document is - in the ResultData Stringlist. Returns boolean TRUE if all went well.} -function HttpPostFile(const URL, FieldName, FileName: string; - const Data: TStream; const ResultData: TStrings): Boolean; - -implementation - -constructor THTTPSend.Create; -begin - inherited Create; - FHeaders := TStringList.Create; - FCookies := TStringList.Create; - FDocument := TMemoryStream.Create; - FSock := TTCPBlockSocket.Create; - FSock.ConvertLineEnd := True; - FSock.SizeRecvBuffer := c64k; - FSock.SizeSendBuffer := c64k; - FTimeout := 90000; - FTargetPort := cHttpProtocol; - FProxyHost := ''; - FProxyPort := '8080'; - FProxyUser := ''; - FProxyPass := ''; - FAliveHost := ''; - FAlivePort := ''; - FProtocol := '1.0'; - FKeepAlive := True; - FStatus100 := False; - FUserAgent := 'Mozilla/4.0 (compatible; Synapse)'; - FDownloadSize := 0; - FUploadSize := 0; - Clear; -end; - -destructor THTTPSend.Destroy; -begin - FSock.Free; - FDocument.Free; - FCookies.Free; - FHeaders.Free; - inherited Destroy; -end; - -procedure THTTPSend.Clear; -begin - FRangeStart := 0; - FRangeEnd := 0; - FDocument.Clear; - FHeaders.Clear; - FMimeType := 'text/html'; -end; - -procedure THTTPSend.DecodeStatus(const Value: string); -var - s, su: string; -begin - s := Trim(SeparateRight(Value, ' ')); - su := Trim(SeparateLeft(s, ' ')); - FResultCode := StrToIntDef(su, 0); - FResultString := Trim(SeparateRight(s, ' ')); - if FResultString = s then - FResultString := ''; -end; - -function THTTPSend.PrepareHeaders: string; -begin - if FProtocol = '0.9' then - Result := FHeaders[0] + CRLF - else -{$IFNDEF WIN32} - Result := AdjustLineBreaks(FHeaders.Text, tlbsCRLF); -{$ELSE} - Result := FHeaders.Text; -{$ENDIF} -end; - -function THTTPSend.InternalDoConnect(needssl: Boolean): Boolean; -begin - Result := False; - FSock.CloseSocket; - FSock.Bind(FIPInterface, cAnyPort); - if FSock.LastError <> 0 then - Exit; - FSock.Connect(FTargetHost, FTargetPort); - if FSock.LastError <> 0 then - Exit; - if needssl then - begin - FSock.SSLDoConnect; - if FSock.LastError <> 0 then - Exit; - end; - FAliveHost := FTargetHost; - FAlivePort := FTargetPort; - Result := True; -end; - -function THTTPSend.InternalConnect(needssl: Boolean): Boolean; -begin - if FSock.Socket = INVALID_SOCKET then - Result := InternalDoConnect(needssl) - else - if (FAliveHost <> FTargetHost) or (FAlivePort <> FTargetPort) - or FSock.CanRead(0) then - Result := InternalDoConnect(needssl) - else - Result := True; -end; - -function THTTPSend.HTTPMethod(const Method, URL: string): Boolean; -var - Sending, Receiving: Boolean; - status100: Boolean; - status100error: string; - ToClose: Boolean; - Size: Integer; - Prot, User, Pass, Host, Port, Path, Para, URI: string; - s, su: string; - HttpTunnel: Boolean; - n: integer; -begin - {initial values} - Result := False; - FResultCode := 500; - FResultString := ''; - FDownloadSize := 0; - FUploadSize := 0; - - URI := ParseURL(URL, Prot, User, Pass, Host, Port, Path, Para); - if User = '' then - begin - User := FUsername; - Pass := FPassword; - end; - if UpperCase(Prot) = 'HTTPS' then - begin - HttpTunnel := FProxyHost <> ''; - FSock.HTTPTunnelIP := FProxyHost; - FSock.HTTPTunnelPort := FProxyPort; - FSock.HTTPTunnelUser := FProxyUser; - FSock.HTTPTunnelPass := FProxyPass; - end - else - begin - HttpTunnel := False; - FSock.HTTPTunnelIP := ''; - FSock.HTTPTunnelPort := ''; - FSock.HTTPTunnelUser := ''; - FSock.HTTPTunnelPass := ''; - end; - - Sending := FDocument.Size > 0; - {Headers for Sending data} - status100 := FStatus100 and Sending and (FProtocol = '1.1'); - if status100 then - FHeaders.Insert(0, 'Expect: 100-continue'); - if Sending then - begin - FHeaders.Insert(0, 'Content-Length: ' + IntToStr(FDocument.Size)); - if FMimeType <> '' then - FHeaders.Insert(0, 'Content-Type: ' + FMimeType); - end; - { setting User-agent } - if FUserAgent <> '' then - FHeaders.Insert(0, 'User-Agent: ' + FUserAgent); - { setting Ranges } - if (FRangeStart > 0) or (FRangeEnd > 0) then - begin - if FRangeEnd >= FRangeStart then - FHeaders.Insert(0, 'Range: bytes=' + IntToStr(FRangeStart) + '-' + IntToStr(FRangeEnd)) - else - FHeaders.Insert(0, 'Range: bytes=' + IntToStr(FRangeStart) + '-'); - end; - { setting Cookies } - s := ''; - for n := 0 to FCookies.Count - 1 do - begin - if s <> '' then - s := s + '; '; - s := s + FCookies[n]; - end; - if s <> '' then - FHeaders.Insert(0, 'Cookie: ' + s); - { setting KeepAlives } - if not FKeepAlive then - FHeaders.Insert(0, 'Connection: close'); - { set target servers/proxy, authorizations, etc... } - if User <> '' then - FHeaders.Insert(0, 'Authorization: Basic ' + EncodeBase64(User + ':' + Pass)); - if (FProxyHost <> '') and (FProxyUser <> '') and not(HttpTunnel) then - FHeaders.Insert(0, 'Proxy-Authorization: Basic ' + - EncodeBase64(FProxyUser + ':' + FProxyPass)); - if isIP6(Host) then - s := '[' + Host + ']' - else - s := Host; - if Port<>'80' then - FHeaders.Insert(0, 'Host: ' + s + ':' + Port) - else - FHeaders.Insert(0, 'Host: ' + s); - if (FProxyHost <> '') and not(HttpTunnel)then - URI := Prot + '://' + s + ':' + Port + URI; - if URI = '/*' then - URI := '*'; - if FProtocol = '0.9' then - FHeaders.Insert(0, UpperCase(Method) + ' ' + URI) - else - FHeaders.Insert(0, UpperCase(Method) + ' ' + URI + ' HTTP/' + FProtocol); - if (FProxyHost <> '') and not(HttpTunnel) then - begin - FTargetHost := FProxyHost; - FTargetPort := FProxyPort; - end - else - begin - FTargetHost := Host; - FTargetPort := Port; - end; - if FHeaders[FHeaders.Count - 1] <> '' then - FHeaders.Add(''); - - { connect } - if not InternalConnect(UpperCase(Prot) = 'HTTPS') then - begin - FAliveHost := ''; - FAlivePort := ''; - Exit; - end; - - { reading Status } - FDocument.Position := 0; - Status100Error := ''; - if status100 then - begin - { send Headers } - FSock.SendString(PrepareHeaders); - if FSock.LastError <> 0 then - Exit; - repeat - s := FSock.RecvString(FTimeout); - if s <> '' then - Break; - until FSock.LastError <> 0; - DecodeStatus(s); - Status100Error := s; - repeat - s := FSock.recvstring(FTimeout); - if s = '' then - Break; - until FSock.LastError <> 0; - if (FResultCode >= 100) and (FResultCode < 200) then - begin - { we can upload content } - Status100Error := ''; - FUploadSize := FDocument.Size; - FSock.SendBuffer(FDocument.Memory, FDocument.Size); - end; - end - else - { upload content } - if sending then - begin - if FDocument.Size >= c64k then - begin - FSock.SendString(PrepareHeaders); - FUploadSize := FDocument.Size; - FSock.SendBuffer(FDocument.Memory, FDocument.Size); - end - else - begin - s := PrepareHeaders + ReadStrFromStream(FDocument, FDocument.Size); - FUploadSize := Length(s); - FSock.SendString(s); - end; - end - else - begin - { we not need to upload document, send headers only } - FSock.SendString(PrepareHeaders); - end; - - if FSock.LastError <> 0 then - Exit; - - Clear; - Size := -1; - FTransferEncoding := TE_UNKNOWN; - - { read status } - if Status100Error = '' then - begin - repeat - s := FSock.RecvString(FTimeout); - if s <> '' then - Break; - until FSock.LastError <> 0; - if Pos('HTTP/', UpperCase(s)) = 1 then - begin - FHeaders.Add(s); - DecodeStatus(s); - end - else - begin - { old HTTP 0.9 and some buggy servers not send result } - s := s + CRLF; - WriteStrToStream(FDocument, s); - FResultCode := 0; - end; - end - else - FHeaders.Add(Status100Error); - - { if need receive headers, receive and parse it } - ToClose := FProtocol <> '1.1'; - if FHeaders.Count > 0 then - repeat - s := FSock.RecvString(FTimeout); - FHeaders.Add(s); - if s = '' then - Break; - su := UpperCase(s); - if Pos('CONTENT-LENGTH:', su) = 1 then - begin - Size := StrToIntDef(Trim(SeparateRight(s, ' ')), -1); - if Size <> -1 then - FTransferEncoding := TE_IDENTITY; - end; - if Pos('CONTENT-TYPE:', su) = 1 then - FMimeType := Trim(SeparateRight(s, ' ')); - if Pos('TRANSFER-ENCODING:', su) = 1 then - begin - s := Trim(SeparateRight(su, ' ')); - if Pos('CHUNKED', s) > 0 then - FTransferEncoding := TE_CHUNKED; - end; - if Pos('CONNECTION: CLOSE', su) = 1 then - ToClose := True; - until FSock.LastError <> 0; - Result := FSock.LastError = 0; - if not Result then - Exit; - - {if need receive response body, read it} - Receiving := Method <> 'HEAD'; - Receiving := Receiving and (FResultCode <> 204); - Receiving := Receiving and (FResultCode <> 304); - if Receiving then - case FTransferEncoding of - TE_UNKNOWN: - Result := ReadUnknown; - TE_IDENTITY: - Result := ReadIdentity(Size); - TE_CHUNKED: - Result := ReadChunked; - end; - - FDocument.Seek(0, soFromBeginning); - if ToClose then - begin - FSock.CloseSocket; - FAliveHost := ''; - FAlivePort := ''; - end; - ParseCookies; -end; - -function THTTPSend.ReadUnknown: Boolean; -var - s: string; -begin - repeat - s := FSock.RecvPacket(FTimeout); - if FSock.LastError = 0 then - WriteStrToStream(FDocument, s); - until FSock.LastError <> 0; - Result := FSock.LastError = WSAECONNRESET; -end; - -function THTTPSend.ReadIdentity(Size: Integer): Boolean; -begin - if Size > 0 then - begin - FDownloadSize := Size; - FSock.RecvStreamSize(FDocument, FTimeout, Size); - FDocument.Seek(0, soFromEnd); - Result := FSock.LastError = 0; - end - else - Result := true; -end; - -function THTTPSend.ReadChunked: Boolean; -var - s: string; - Size: Integer; -begin - repeat - repeat - s := FSock.RecvString(FTimeout); - until (s <> '') or (FSock.LastError <> 0); - if FSock.LastError <> 0 then - Break; - s := Trim(SeparateLeft(s, ' ')); - s := Trim(SeparateLeft(s, ';')); - Size := StrToIntDef('$' + s, 0); - if Size = 0 then - Break; - if not ReadIdentity(Size) then - break; - until False; - Result := FSock.LastError = 0; -end; - -procedure THTTPSend.ParseCookies; -var - n: integer; - s: string; - sn, sv: string; -begin - for n := 0 to FHeaders.Count - 1 do - if Pos('set-cookie:', lowercase(FHeaders[n])) = 1 then - begin - s := SeparateRight(FHeaders[n], ':'); - s := trim(SeparateLeft(s, ';')); - sn := trim(SeparateLeft(s, '=')); - sv := trim(SeparateRight(s, '=')); - FCookies.Values[sn] := sv; - end; -end; - -procedure THTTPSend.Abort; -begin - FSock.StopFlag := True; -end; - -{==============================================================================} - -function HttpGetText(const URL: string; const Response: TStrings): Boolean; -var - HTTP: THTTPSend; -begin - HTTP := THTTPSend.Create; - try - Result := HTTP.HTTPMethod('GET', URL); - if Result then - Response.LoadFromStream(HTTP.Document); - finally - HTTP.Free; - end; -end; - -function HttpGetBinary(const URL: string; const Response: TStream): Boolean; -var - HTTP: THTTPSend; -begin - HTTP := THTTPSend.Create; - try - Result := HTTP.HTTPMethod('GET', URL); - if Result then - begin - Response.Seek(0, soFromBeginning); - Response.CopyFrom(HTTP.Document, 0); - end; - finally - HTTP.Free; - end; -end; - -function HttpPostBinary(const URL: string; const Data: TStream): Boolean; -var - HTTP: THTTPSend; -begin - HTTP := THTTPSend.Create; - try - HTTP.Document.CopyFrom(Data, 0); - HTTP.MimeType := 'Application/octet-stream'; - Result := HTTP.HTTPMethod('POST', URL); - if Result then - begin - Data.Seek(0, soFromBeginning); - Data.CopyFrom(HTTP.Document, 0); - end; - finally - HTTP.Free; - end; -end; - -function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean; -var - HTTP: THTTPSend; -begin - HTTP := THTTPSend.Create; - try - WriteStrToStream(HTTP.Document, URLData); - HTTP.MimeType := 'application/x-www-form-urlencoded'; - Result := HTTP.HTTPMethod('POST', URL); - if Result then - Data.CopyFrom(HTTP.Document, 0); - finally - HTTP.Free; - end; -end; - -function HttpPostFile(const URL, FieldName, FileName: string; - const Data: TStream; const ResultData: TStrings): Boolean; -var - HTTP: THTTPSend; - Bound, s: string; -begin - Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary'; - HTTP := THTTPSend.Create; - try - s := '--' + Bound + CRLF; - s := s + 'content-disposition: form-data; name="' + FieldName + '";'; - s := s + ' filename="' + FileName +'"' + CRLF; - s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF; - WriteStrToStream(HTTP.Document, s); - HTTP.Document.CopyFrom(Data, 0); - s := CRLF + '--' + Bound + '--' + CRLF; - WriteStrToStream(HTTP.Document, s); - HTTP.MimeType := 'multipart/form-data; boundary=' + Bound; - Result := HTTP.HTTPMethod('POST', URL); - if Result then - ResultData.LoadFromStream(HTTP.Document); - finally - HTTP.Free; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sslinux.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sslinux.pas deleted file mode 100644 index c337281..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sslinux.pas +++ /dev/null @@ -1,1313 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 002.000.008 | -|==============================================================================| -| Content: Socket Independent Platform Layer - Linux definition include | -|==============================================================================| -| Copyright (c)1999-2003, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)2003. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@exclude} - -{$IFDEF LINUX} - -//{$DEFINE FORCEOLDAPI} -{Note about define FORCEOLDAPI: -If you activate this compiler directive, then is allways used old socket API -for name resolution. If you leave this directive inactive, then the new API -is used, when running system allows it. - -For IPv6 support you must have new API! -} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$H+} -interface - -uses - SyncObjs, SysUtils, Classes, - synafpc, - Libc; - -function InitSocketInterface(stack: string): Boolean; -function DestroySocketInterface: Boolean; - -const - WinsockLevel = $0202; - -type - u_char = Char; - u_short = Word; - u_int = Integer; - u_long = Longint; - pu_long = ^u_long; - pu_short = ^u_short; - TSocket = u_int; - TAddrFamily = integer; - - TMemory = pointer; - - -const - DLLStackName = 'libc.so.6'; - - cLocalhost = '127.0.0.1'; - cAnyHost = '0.0.0.0'; - cBroadcast = '255.255.255.255'; - c6Localhost = '::1'; - c6AnyHost = '::0'; - c6Broadcast = 'ffff::1'; - cAnyPort = '0'; - -type - DWORD = Integer; - __fd_mask = LongWord; -const - __FD_SETSIZE = 1024; - __NFDBITS = 8 * sizeof(__fd_mask); -type - __fd_set = {packed} record - fds_bits: packed array[0..(__FD_SETSIZE div __NFDBITS)-1] of __fd_mask; - end; - TFDSet = __fd_set; - PFDSet = ^TFDSet; - -const - FIONREAD = $541B; - FIONBIO = $5421; - FIOASYNC = $5452; - -type - PTimeVal = ^TTimeVal; - TTimeVal = packed record - tv_sec: Longint; - tv_usec: Longint; - end; - -const - IPPROTO_IP = 0; { Dummy } - IPPROTO_ICMP = 1; { Internet Control Message Protocol } - IPPROTO_IGMP = 2; { Internet Group Management Protocol} - IPPROTO_TCP = 6; { TCP } - IPPROTO_UDP = 17; { User Datagram Protocol } - IPPROTO_IPV6 = 41; - IPPROTO_ICMPV6 = 58; - - IPPROTO_RAW = 255; - IPPROTO_MAX = 256; - -type - PInAddr = ^TInAddr; - TInAddr = packed record - case integer of - 0: (S_bytes: packed array [0..3] of byte); - 1: (S_addr: u_long); - end; - - PSockAddrIn = ^TSockAddrIn; - TSockAddrIn = packed record - case Integer of - 0: (sin_family: u_short; - sin_port: u_short; - sin_addr: TInAddr; - sin_zero: array[0..7] of Char); - 1: (sa_family: u_short; - sa_data: array[0..13] of Char) - end; - - TIP_mreq = record - imr_multiaddr: TInAddr; { IP multicast address of group } - imr_interface: TInAddr; { local IP address of interface } - end; - - PInAddr6 = ^TInAddr6; - TInAddr6 = packed record - case integer of - 0: (S6_addr: packed array [0..15] of byte); - 1: (u6_addr8: packed array [0..15] of byte); - 2: (u6_addr16: packed array [0..7] of word); - 3: (u6_addr32: packed array [0..3] of integer); - end; - - PSockAddrIn6 = ^TSockAddrIn6; - TSockAddrIn6 = packed record - sin6_family: u_short; // AF_INET6 - sin6_port: u_short; // Transport level port number - sin6_flowinfo: u_long; // IPv6 flow information - sin6_addr: TInAddr6; // IPv6 address - sin6_scope_id: u_long; // Scope Id: IF number for link-local - // SITE id for site-local - end; - - TIPv6_mreq = record - ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. - ipv6mr_interface: integer; // Interface index. - padding: u_long; - end; - - PHostEnt = ^THostEnt; - THostent = record - h_name: PChar; - h_aliases: PPChar; - h_addrtype: Integer; - h_length: Cardinal; - case Byte of - 0: (h_addr_list: PPChar); - 1: (h_addr: PPChar); - end; - - PNetEnt = ^TNetEnt; - TNetEnt = record - n_name: PChar; - n_aliases: PPChar; - n_addrtype: Integer; - n_net: uint32_t; - end; - - PServEnt = ^TServEnt; - TServEnt = record - s_name: PChar; - s_aliases: PPChar; - s_port: Integer; - s_proto: PChar; - end; - - PProtoEnt = ^TProtoEnt; - TProtoEnt = record - p_name: PChar; - p_aliases: ^PChar; - p_proto: u_short; - end; - -const - INADDR_ANY = $00000000; - INADDR_LOOPBACK = $7F000001; - INADDR_BROADCAST = $FFFFFFFF; - INADDR_NONE = $FFFFFFFF; - ADDR_ANY = INADDR_ANY; - INVALID_SOCKET = TSocket(NOT(0)); - SOCKET_ERROR = -1; - -Const - IP_TOS = 1; { int; IP type of service and precedence. } - IP_TTL = 2; { int; IP time to live. } - IP_HDRINCL = 3; { int; Header is included with data. } - IP_OPTIONS = 4; { ip_opts; IP per-packet options. } - IP_ROUTER_ALERT = 5; { bool } - IP_RECVOPTS = 6; { bool } - IP_RETOPTS = 7; { bool } - IP_PKTINFO = 8; { bool } - IP_PKTOPTIONS = 9; - IP_PMTUDISC = 10; { obsolete name? } - IP_MTU_DISCOVER = 10; { int; see below } - IP_RECVERR = 11; { bool } - IP_RECVTTL = 12; { bool } - IP_RECVTOS = 13; { bool } - IP_MULTICAST_IF = 32; { in_addr; set/get IP multicast i/f } - IP_MULTICAST_TTL = 33; { u_char; set/get IP multicast ttl } - IP_MULTICAST_LOOP = 34; { i_char; set/get IP multicast loopback } - IP_ADD_MEMBERSHIP = 35; { ip_mreq; add an IP group membership } - IP_DROP_MEMBERSHIP = 36; { ip_mreq; drop an IP group membership } - - SOL_SOCKET = 1; - - SO_DEBUG = 1; - SO_REUSEADDR = 2; - SO_TYPE = 3; - SO_ERROR = 4; - SO_DONTROUTE = 5; - SO_BROADCAST = 6; - SO_SNDBUF = 7; - SO_RCVBUF = 8; - SO_KEEPALIVE = 9; - SO_OOBINLINE = 10; - SO_NO_CHECK = 11; - SO_PRIORITY = 12; - SO_LINGER = 13; - SO_BSDCOMPAT = 14; - SO_REUSEPORT = 15; - SO_PASSCRED = 16; - SO_PEERCRED = 17; - SO_RCVLOWAT = 18; - SO_SNDLOWAT = 19; - SO_RCVTIMEO = 20; - SO_SNDTIMEO = 21; -{ Security levels - as per NRL IPv6 - don't actually do anything } - SO_SECURITY_AUTHENTICATION = 22; - SO_SECURITY_ENCRYPTION_TRANSPORT = 23; - SO_SECURITY_ENCRYPTION_NETWORK = 24; - SO_BINDTODEVICE = 25; -{ Socket filtering } - SO_ATTACH_FILTER = 26; - SO_DETACH_FILTER = 27; - - SOMAXCONN = 128; - - IPV6_UNICAST_HOPS = 16; - IPV6_MULTICAST_IF = 17; - IPV6_MULTICAST_HOPS = 18; - IPV6_MULTICAST_LOOP = 19; - IPV6_JOIN_GROUP = 20; - IPV6_LEAVE_GROUP = 21; - - MSG_NOSIGNAL = $4000; // Do not generate SIGPIPE. - - // getnameinfo constants - NI_MAXHOST = 1025; - NI_MAXSERV = 32; - NI_NOFQDN = $4; - NI_NUMERICHOST = $1; - NI_NAMEREQD = $8; - NI_NUMERICSERV = $2; - NI_DGRAM = $10; - -const - SOCK_STREAM = 1; { stream socket } - SOCK_DGRAM = 2; { datagram socket } - SOCK_RAW = 3; { raw-protocol interface } - SOCK_RDM = 4; { reliably-delivered message } - SOCK_SEQPACKET = 5; { sequenced packet stream } - -{ TCP options. } - TCP_NODELAY = $0001; - -{ Address families. } - - AF_UNSPEC = 0; { unspecified } - AF_INET = 2; { internetwork: UDP, TCP, etc. } - AF_INET6 = 10; { Internetwork Version 6 } - AF_MAX = 24; - -{ Protocol families, same as address families for now. } - PF_UNSPEC = AF_UNSPEC; - PF_INET = AF_INET; - PF_INET6 = AF_INET6; - PF_MAX = AF_MAX; - -type - { Structure used by kernel to store most addresses. } - PSockAddr = ^TSockAddr; - TSockAddr = TSockAddrIn; - - { Structure used by kernel to pass protocol information in raw sockets. } - PSockProto = ^TSockProto; - TSockProto = packed record - sp_family: u_short; - sp_protocol: u_short; - end; - -type - PAddrInfo = ^TAddrInfo; - TAddrInfo = record - ai_flags: integer; // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST. - ai_family: integer; // PF_xxx. - ai_socktype: integer; // SOCK_xxx. - ai_protocol: integer; // 0 or IPPROTO_xxx for IPv4 and IPv6. - ai_addrlen: u_int; // Length of ai_addr. - ai_addr: PSockAddr; // Binary address. - ai_canonname: PChar; // Canonical name for nodename. - ai_next: PAddrInfo; // Next structure in linked list. - end; - -const - // Flags used in "hints" argument to getaddrinfo(). - AI_PASSIVE = $1; // Socket address will be used in bind() call. - AI_CANONNAME = $2; // Return canonical name in first ai_canonname. - AI_NUMERICHOST = $4; // Nodename must be a numeric address string. - -type -{ Structure used for manipulating linger option. } - PLinger = ^TLinger; - TLinger = packed record - l_onoff: integer; - l_linger: integer; - end; - -const - - MSG_OOB = $01; // Process out-of-band data. - MSG_PEEK = $02; // Peek at incoming messages. - -const - WSAEINTR = EINTR; - WSAEBADF = EBADF; - WSAEACCES = EACCES; - WSAEFAULT = EFAULT; - WSAEINVAL = EINVAL; - WSAEMFILE = EMFILE; - WSAEWOULDBLOCK = EWOULDBLOCK; - WSAEINPROGRESS = EINPROGRESS; - WSAEALREADY = EALREADY; - WSAENOTSOCK = ENOTSOCK; - WSAEDESTADDRREQ = EDESTADDRREQ; - WSAEMSGSIZE = EMSGSIZE; - WSAEPROTOTYPE = EPROTOTYPE; - WSAENOPROTOOPT = ENOPROTOOPT; - WSAEPROTONOSUPPORT = EPROTONOSUPPORT; - WSAESOCKTNOSUPPORT = ESOCKTNOSUPPORT; - WSAEOPNOTSUPP = EOPNOTSUPP; - WSAEPFNOSUPPORT = EPFNOSUPPORT; - WSAEAFNOSUPPORT = EAFNOSUPPORT; - WSAEADDRINUSE = EADDRINUSE; - WSAEADDRNOTAVAIL = EADDRNOTAVAIL; - WSAENETDOWN = ENETDOWN; - WSAENETUNREACH = ENETUNREACH; - WSAENETRESET = ENETRESET; - WSAECONNABORTED = ECONNABORTED; - WSAECONNRESET = ECONNRESET; - WSAENOBUFS = ENOBUFS; - WSAEISCONN = EISCONN; - WSAENOTCONN = ENOTCONN; - WSAESHUTDOWN = ESHUTDOWN; - WSAETOOMANYREFS = ETOOMANYREFS; - WSAETIMEDOUT = ETIMEDOUT; - WSAECONNREFUSED = ECONNREFUSED; - WSAELOOP = ELOOP; - WSAENAMETOOLONG = ENAMETOOLONG; - WSAEHOSTDOWN = EHOSTDOWN; - WSAEHOSTUNREACH = EHOSTUNREACH; - WSAENOTEMPTY = ENOTEMPTY; - WSAEPROCLIM = -1; - WSAEUSERS = EUSERS; - WSAEDQUOT = EDQUOT; - WSAESTALE = ESTALE; - WSAEREMOTE = EREMOTE; - WSASYSNOTREADY = -2; - WSAVERNOTSUPPORTED = -3; - WSANOTINITIALISED = -4; - WSAEDISCON = -5; - WSAHOST_NOT_FOUND = HOST_NOT_FOUND; - WSATRY_AGAIN = TRY_AGAIN; - WSANO_RECOVERY = NO_RECOVERY; - WSANO_DATA = -6; - - EAI_BADFLAGS = -1; { Invalid value for `ai_flags' field. } - EAI_NONAME = -2; { NAME or SERVICE is unknown. } - EAI_AGAIN = -3; { Temporary failure in name resolution. } - EAI_FAIL = -4; { Non-recoverable failure in name res. } - EAI_NODATA = -5; { No address associated with NAME. } - EAI_FAMILY = -6; { `ai_family' not supported. } - EAI_SOCKTYPE = -7; { `ai_socktype' not supported. } - EAI_SERVICE = -8; { SERVICE not supported for `ai_socktype'. } - EAI_ADDRFAMILY = -9; { Address family for NAME not supported. } - EAI_MEMORY = -10; { Memory allocation failure. } - EAI_SYSTEM = -11; { System error returned in `errno'. } - -const - WSADESCRIPTION_LEN = 256; - WSASYS_STATUS_LEN = 128; -type - PWSAData = ^TWSAData; - TWSAData = packed record - wVersion: Word; - wHighVersion: Word; - szDescription: array[0..WSADESCRIPTION_LEN] of Char; - szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; - iMaxSockets: Word; - iMaxUdpDg: Word; - lpVendorInfo: PChar; - end; - - function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; - function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; - function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; - function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; - function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; - function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; - procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); - procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); -var - in6addr_any, in6addr_loopback : TInAddr6; - -procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); -function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; -procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); -procedure FD_ZERO(var FDSet: TFDSet); - -{=============================================================================} - -type - TWSAStartup = function(wVersionRequired: Word; var WSData: TWSAData): Integer; - cdecl; - TWSACleanup = function: Integer; - cdecl; - TWSAGetLastError = function: Integer; - cdecl; - TGetServByName = function(name, proto: PChar): PServEnt; - cdecl; - TGetServByPort = function(port: Integer; proto: PChar): PServEnt; - cdecl; - TGetProtoByName = function(name: PChar): PProtoEnt; - cdecl; - TGetProtoByNumber = function(proto: Integer): PProtoEnt; - cdecl; - TGetHostByName = function(name: PChar): PHostEnt; - cdecl; - TGetHostByAddr = function(addr: Pointer; len, Struc: Integer): PHostEnt; - cdecl; - TGetHostName = function(name: PChar; len: Integer): Integer; - cdecl; - TShutdown = function(s: TSocket; how: Integer): Integer; - cdecl; - TSetSockOpt = function(s: TSocket; level, optname: Integer; optval: PChar; - optlen: Integer): Integer; - cdecl; - TGetSockOpt = function(s: TSocket; level, optname: Integer; optval: PChar; - var optlen: Integer): Integer; - cdecl; - TSendTo = function(s: TSocket; const Buf; len, flags: Integer; addrto: PSockAddr; - tolen: Integer): Integer; - cdecl; - TSend = function(s: TSocket; const Buf; len, flags: Integer): Integer; - cdecl; - TRecv = function(s: TSocket; var Buf; len, flags: Integer): Integer; - cdecl; - TRecvFrom = function(s: TSocket; var Buf; len, flags: Integer; from: PSockAddr; - var fromlen: Integer): Integer; - cdecl; - Tntohs = function(netshort: u_short): u_short; - cdecl; - Tntohl = function(netlong: u_long): u_long; - cdecl; - TListen = function(s: TSocket; backlog: Integer): Integer; - cdecl; - TIoctlSocket = function(s: TSocket; cmd: DWORD; var arg: integer): Integer; - cdecl; - TInet_ntoa = function(inaddr: TInAddr): PChar; - cdecl; - TInet_addr = function(cp: PChar): u_long; - cdecl; - Thtons = function(hostshort: u_short): u_short; - cdecl; - Thtonl = function(hostlong: u_long): u_long; - cdecl; - TGetSockName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; - cdecl; - TGetPeerName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; - cdecl; - TConnect = function(s: TSocket; name: PSockAddr; namelen: Integer): Integer; - cdecl; - TCloseSocket = function(s: TSocket): Integer; - cdecl; - TBind = function(s: TSocket; addr: PSockAddr; namelen: Integer): Integer; - cdecl; - TAccept = function(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket; - cdecl; - TTSocket = function(af, Struc, Protocol: Integer): TSocket; - cdecl; - TSelect = function(nfds: Integer; readfds, writefds, exceptfds: PFDSet; - timeout: PTimeVal): Longint; - cdecl; - - TGetAddrInfo = function(NodeName: PChar; ServName: PChar; Hints: PAddrInfo; - var Addrinfo: PAddrInfo): integer; - cdecl; - TFreeAddrInfo = procedure(ai: PAddrInfo); - cdecl; - TGetNameInfo = function( addr: PSockAddr; namelen: Integer; host: PChar; - hostlen: DWORD; serv: PChar; servlen: DWORD; flags: integer): integer; - cdecl; - -var - WSAStartup: TWSAStartup = nil; - WSACleanup: TWSACleanup = nil; - WSAGetLastError: TWSAGetLastError = nil; - GetServByName: TGetServByName = nil; - GetServByPort: TGetServByPort = nil; - GetProtoByName: TGetProtoByName = nil; - GetProtoByNumber: TGetProtoByNumber = nil; - GetHostByName: TGetHostByName = nil; - GetHostByAddr: TGetHostByAddr = nil; - ssGetHostName: TGetHostName = nil; - Shutdown: TShutdown = nil; - SetSockOpt: TSetSockOpt = nil; - GetSockOpt: TGetSockOpt = nil; - ssSendTo: TSendTo = nil; - ssSend: TSend = nil; - ssRecv: TRecv = nil; - ssRecvFrom: TRecvFrom = nil; - ntohs: Tntohs = nil; - ntohl: Tntohl = nil; - Listen: TListen = nil; - IoctlSocket: TIoctlSocket = nil; - Inet_ntoa: TInet_ntoa = nil; - Inet_addr: TInet_addr = nil; - htons: Thtons = nil; - htonl: Thtonl = nil; - ssGetSockName: TGetSockName = nil; - ssGetPeerName: TGetPeerName = nil; - ssConnect: TConnect = nil; - CloseSocket: TCloseSocket = nil; - ssBind: TBind = nil; - ssAccept: TAccept = nil; - Socket: TTSocket = nil; - Select: TSelect = nil; - - GetAddrInfo: TGetAddrInfo = nil; - FreeAddrInfo: TFreeAddrInfo = nil; - GetNameInfo: TGetNameInfo = nil; - -function LSWSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; cdecl; -function LSWSACleanup: Integer; cdecl; -function LSWSAGetLastError: Integer; cdecl; - -var - SynSockCS: SyncObjs.TCriticalSection; - SockEnhancedApi: Boolean; - SockWship6Api: Boolean; - -type - TVarSin = packed record - case integer of - 0: (AddressFamily: u_short); - 1: ( - case sin_family: u_short of - AF_INET: (sin_port: u_short; - sin_addr: TInAddr; - sin_zero: array[0..7] of Char); - AF_INET6: (sin6_port: u_short; - sin6_flowinfo: u_long; - sin6_addr: TInAddr6; - sin6_scope_id: u_long); - ); - end; - -function SizeOfVarSin(sin: TVarSin): integer; - -function Bind(s: TSocket; const addr: TVarSin): Integer; -function Connect(s: TSocket; const name: TVarSin): Integer; -function GetSockName(s: TSocket; var name: TVarSin): Integer; -function GetPeerName(s: TSocket; var name: TVarSin): Integer; -function GetHostName: string; -function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; -function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; -function Accept(s: TSocket; var addr: TVarSin): TSocket; - -function IsNewApi(Family: integer): Boolean; -function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; -function GetSinIP(Sin: TVarSin): string; -function GetSinPort(Sin: TVarSin): Integer; -procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); -function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; -function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; - -{==============================================================================} -implementation - -var - SynSockCount: Integer = 0; - LibHandle: TLibHandle = 0; - Libwship6Handle: TLibHandle = 0; - -function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and - (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); -end; - -function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and - (a^.u6_addr32[2] = 0) and - (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and - (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); -end; - -function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); -end; - -function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); -end; - -function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; -begin - Result := (a^.u6_addr8[0] = $FF); -end; - -function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; -begin - Result := (CompareMem( a, b, sizeof(TInAddr6))); -end; - -procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); -begin - FillChar(a^, sizeof(TInAddr6), 0); -end; - -procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); -begin - FillChar(a^, sizeof(TInAddr6), 0); - a^.u6_addr8[15] := 1; -end; - -{=============================================================================} -var -{$IFNDEF VER1_0} //FTP version 1.0.x - errno_loc: function: PInteger cdecl = nil; -{$ELSE} - errno_loc: function: PInteger = nil; cdecl; -{$ENDIF} - -function LSWSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; -begin - with WSData do - begin - wVersion := wVersionRequired; - wHighVersion := $202; - szDescription := 'Synsock - Synapse Platform Independent Socket Layer'; - szSystemStatus := 'Running on Linux'; - iMaxSockets := 32768; - iMaxUdpDg := 8192; - end; - Result := 0; -end; - -function LSWSACleanup: Integer; -begin - Result := 0; -end; - -function LSWSAGetLastError: Integer; -var - p: PInteger; -begin - p := errno_loc; - Result := p^; -end; - -function __FDELT(Socket: TSocket): Integer; -begin - Result := Socket div __NFDBITS; -end; - -function __FDMASK(Socket: TSocket): __fd_mask; -begin - Result := LongWord(1) shl (Socket mod __NFDBITS); -end; - -function FD_ISSET(Socket: TSocket; var fdset: TFDSet): Boolean; -begin - Result := (fdset.fds_bits[__FDELT(Socket)] and __FDMASK(Socket)) <> 0; -end; - -procedure FD_SET(Socket: TSocket; var fdset: TFDSet); -begin - fdset.fds_bits[__FDELT(Socket)] := fdset.fds_bits[__FDELT(Socket)] or __FDMASK(Socket); -end; - -procedure FD_CLR(Socket: TSocket; var fdset: TFDSet); -begin - fdset.fds_bits[__FDELT(Socket)] := fdset.fds_bits[__FDELT(Socket)] and (not __FDMASK(Socket)); -end; - -procedure FD_ZERO(var fdset: TFDSet); -var - I: Integer; -begin - with fdset do - for I := Low(fds_bits) to High(fds_bits) do - fds_bits[I] := 0; -end; - -{=============================================================================} - -function SizeOfVarSin(sin: TVarSin): integer; -begin - case sin.sin_family of - AF_INET: - Result := SizeOf(TSockAddrIn); - AF_INET6: - Result := SizeOf(TSockAddrIn6); - else - Result := 0; - end; -end; - -{=============================================================================} - -function Bind(s: TSocket; const addr: TVarSin): Integer; -begin - Result := ssBind(s, @addr, SizeOfVarSin(addr)); -end; - -function Connect(s: TSocket; const name: TVarSin): Integer; -begin - Result := ssConnect(s, @name, SizeOfVarSin(name)); -end; - -function GetSockName(s: TSocket; var name: TVarSin): Integer; -var - len: integer; -begin - len := SizeOf(name); - FillChar(name, len, 0); - Result := ssGetSockName(s, @name, Len); -end; - -function GetPeerName(s: TSocket; var name: TVarSin): Integer; -var - len: integer; -begin - len := SizeOf(name); - FillChar(name, len, 0); - Result := ssGetPeerName(s, @name, Len); -end; - -function GetHostName: string; -var - s: string; -begin - Result := ''; - setlength(s, 255); - ssGetHostName(pchar(s), Length(s) - 1); - Result := Pchar(s); -end; - -function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -begin - Result := ssSend(s, Buf^, len, flags); -end; - -function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -begin - Result := ssRecv(s, Buf^, len, flags); -end; - -function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; -begin - Result := ssSendTo(s, Buf^, len, flags, @addrto, SizeOfVarSin(addrto)); -end; - -function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; -var - x: integer; -begin - x := SizeOf(from); - Result := ssRecvFrom(s, Buf^, len, flags, @from, x); -end; - -function Accept(s: TSocket; var addr: TVarSin): TSocket; -var - x: integer; -begin - x := SizeOf(addr); - Result := ssAccept(s, @addr, x); -end; - -{=============================================================================} -function IsNewApi(Family: integer): Boolean; -begin - Result := SockEnhancedApi; - if not Result then - Result := (Family = AF_INET6) and SockWship6Api; -end; - -function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; -type - pu_long = ^u_long; -var - ProtoEnt: PProtoEnt; - ServEnt: PServEnt; - HostEnt: PHostEnt; - r: integer; - Hints1, Hints2: TAddrInfo; - Sin1, Sin2: TVarSin; - TwoPass: boolean; - - function GetAddr(const IP, port: string; Hints: TAddrInfo; var Sin: TVarSin): integer; - var - Addr: PAddrInfo; - begin - Addr := nil; - try - FillChar(Sin, Sizeof(Sin), 0); - if Hints.ai_socktype = SOCK_RAW then - begin - Hints.ai_socktype := 0; - Hints.ai_protocol := 0; - Result := synsock.GetAddrInfo(PChar(IP), nil, @Hints, Addr); - end - else - begin - if (IP = cAnyHost) or (IP = c6AnyHost) then - begin - Hints.ai_flags := AI_PASSIVE; - Result := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - end - else - if (IP = cLocalhost) or (IP = c6Localhost) then - begin - Result := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - end - else - begin - Result := synsock.GetAddrInfo(PChar(IP), PChar(Port), @Hints, Addr); - end; - end; - if Result = 0 then - if (Addr <> nil) then - Move(Addr^.ai_addr^, Sin, Addr^.ai_addrlen); - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; - -begin - Result := 0; - FillChar(Sin, Sizeof(Sin), 0); - if not IsNewApi(family) then - begin - SynSockCS.Enter; - try - Sin.sin_family := AF_INET; - ProtoEnt := synsock.GetProtoByNumber(SockProtocol); - ServEnt := nil; - if ProtoEnt <> nil then - ServEnt := synsock.GetServByName(PChar(Port), ProtoEnt^.p_name); - if ServEnt = nil then - Sin.sin_port := synsock.htons(StrToIntDef(Port, 0)) - else - Sin.sin_port := ServEnt^.s_port; - if IP = cBroadcast then - Sin.sin_addr.s_addr := u_long(INADDR_BROADCAST) - else - begin - Sin.sin_addr.s_addr := synsock.inet_addr(PChar(IP)); - if Sin.sin_addr.s_addr = u_long(INADDR_NONE) then - begin - HostEnt := synsock.GetHostByName(PChar(IP)); - Result := synsock.WSAGetLastError; - if HostEnt <> nil then - Sin.sin_addr.S_addr := u_long(Pu_long(HostEnt^.h_addr_list^)^); - end; - end; - finally - SynSockCS.Leave; - end; - end - else - begin - FillChar(Hints1, Sizeof(Hints1), 0); - FillChar(Hints2, Sizeof(Hints2), 0); - TwoPass := False; - if Family = AF_UNSPEC then - begin - if PreferIP4 then - begin - Hints1.ai_family := AF_INET; - Hints2.ai_family := AF_INET6; - TwoPass := True; - end - else - begin - Hints2.ai_family := AF_INET; - Hints1.ai_family := AF_INET6; - TwoPass := True; - end; - end - else - Hints1.ai_family := Family; - - Hints1.ai_socktype := SockType; - Hints1.ai_protocol := SockProtocol; - Hints2.ai_socktype := Hints1.ai_socktype; - Hints2.ai_protocol := Hints1.ai_protocol; - - r := GetAddr(IP, Port, Hints1, Sin1); - Result := r; - sin := sin1; - if r <> 0 then - if TwoPass then - begin - r := GetAddr(IP, Port, Hints2, Sin2); - Result := r; - if r = 0 then - sin := sin2; - end; - end; -end; - -function GetSinIP(Sin: TVarSin): string; -var - p: PChar; - host, serv: string; - hostlen, servlen: integer; - r: integer; -begin - Result := ''; - if not IsNewApi(Sin.AddressFamily) then - begin - p := synsock.inet_ntoa(Sin.sin_addr); - if p <> nil then - Result := p; - end - else - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(@sin, SizeOfVarSin(sin), PChar(host), hostlen, - PChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); - if r = 0 then - Result := PChar(host); - end; -end; - -function GetSinPort(Sin: TVarSin): Integer; -begin - if (Sin.sin_family = AF_INET6) then - Result := synsock.ntohs(Sin.sin6_port) - else - Result := synsock.ntohs(Sin.sin_port); -end; - -procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); -type - TaPInAddr = array[0..250] of PInAddr; - PaPInAddr = ^TaPInAddr; -var - Hints: TAddrInfo; - Addr: PAddrInfo; - AddrNext: PAddrInfo; - r: integer; - host, serv: string; - hostlen, servlen: integer; - RemoteHost: PHostEnt; - IP: u_long; - PAdrPtr: PaPInAddr; - i: Integer; - s: string; - InAddr: TInAddr; -begin - IPList.Clear; - if not IsNewApi(Family) then - begin - IP := synsock.inet_addr(PChar(Name)); - if IP = u_long(INADDR_NONE) then - begin - SynSockCS.Enter; - try - RemoteHost := synsock.GetHostByName(PChar(Name)); - if RemoteHost <> nil then - begin - PAdrPtr := PAPInAddr(RemoteHost^.h_addr_list); - i := 0; - while PAdrPtr^[i] <> nil do - begin - InAddr := PAdrPtr^[i]^; - s := Format('%d.%d.%d.%d', [InAddr.S_bytes[0], InAddr.S_bytes[1], - InAddr.S_bytes[2], InAddr.S_bytes[3]]); - IPList.Add(s); - Inc(i); - end; - end; - finally - SynSockCS.Leave; - end; - end - else - IPList.Add(Name); - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := SockProtocol; - Hints.ai_flags := 0; - r := synsock.GetAddrInfo(PChar(Name), nil, @Hints, Addr); - if r = 0 then - begin - AddrNext := Addr; - while not(AddrNext = nil) do - begin - if not(((Family = AF_INET6) and (AddrNext^.ai_family = AF_INET)) - or ((Family = AF_INET) and (AddrNext^.ai_family = AF_INET6))) then - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(AddrNext^.ai_addr, AddrNext^.ai_addrlen, - PChar(host), hostlen, PChar(serv), servlen, - NI_NUMERICHOST + NI_NUMERICSERV); - if r = 0 then - begin - host := PChar(host); - IPList.Add(host); - end; - end; - AddrNext := AddrNext^.ai_next; - end; - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; - if IPList.Count = 0 then - IPList.Add(cAnyHost); -end; - -function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; -var - ProtoEnt: PProtoEnt; - ServEnt: PServEnt; - Hints: TAddrInfo; - Addr: PAddrInfo; - r: integer; -begin - Result := 0; - if not IsNewApi(Family) then - begin - SynSockCS.Enter; - try - ProtoEnt := synsock.GetProtoByNumber(SockProtocol); - ServEnt := nil; - if ProtoEnt <> nil then - ServEnt := synsock.GetServByName(PChar(Port), ProtoEnt^.p_name); - if ServEnt = nil then - Result := StrToIntDef(Port, 0) - else - Result := synsock.htons(ServEnt^.s_port); - finally - SynSockCS.Leave; - end; - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := Sockprotocol; - Hints.ai_flags := AI_PASSIVE; - r := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - if (r = 0) and Assigned(Addr) then - begin - if Addr^.ai_family = AF_INET then - Result := synsock.htons(Addr^.ai_addr^.sin_port); - if Addr^.ai_family = AF_INET6 then - Result := synsock.htons(PSockAddrIn6(Addr^.ai_addr)^.sin6_port); - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; -end; - -function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; -var - Hints: TAddrInfo; - Addr: PAddrInfo; - r: integer; - host, serv: string; - hostlen, servlen: integer; - RemoteHost: PHostEnt; - IPn: u_long; -begin - Result := IP; - if not IsNewApi(Family) then - begin - IPn := synsock.inet_addr(PChar(IP)); - if IPn <> u_long(INADDR_NONE) then - begin - SynSockCS.Enter; - try - RemoteHost := GetHostByAddr(@IPn, SizeOf(IPn), AF_INET); - if RemoteHost <> nil then - Result := RemoteHost^.h_name; - finally - SynSockCS.Leave; - end; - end; - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := SockProtocol; - Hints.ai_flags := 0; - r := synsock.GetAddrInfo(PChar(IP), nil, @Hints, Addr); - if (r = 0) and Assigned(Addr)then - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(Addr^.ai_addr, Addr^.ai_addrlen, - PChar(host), hostlen, PChar(serv), servlen, - NI_NUMERICSERV); - if r = 0 then - Result := PChar(host); - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; -end; - -{=============================================================================} - -function InitSocketInterface(stack: string): Boolean; -begin - Result := False; - SockEnhancedApi := False; - if stack = '' then - stack := DLLStackName; - SynSockCS.Enter; - try - if SynSockCount = 0 then - begin - SockEnhancedApi := False; - SockWship6Api := False; - Libc.Signal(Libc.SIGPIPE, TSignalHandler(Libc.SIG_IGN)); - LibHandle := LoadLibrary(PChar(Stack)); - if LibHandle <> 0 then - begin - errno_loc := GetProcAddress(LibHandle, PChar('__errno_location')); - CloseSocket := GetProcAddress(LibHandle, PChar('close')); - IoctlSocket := GetProcAddress(LibHandle, PChar('ioctl')); - WSAGetLastError := LSWSAGetLastError; - WSAStartup := LSWSAStartup; - WSACleanup := LSWSACleanup; - ssAccept := GetProcAddress(LibHandle, PChar('accept')); - ssBind := GetProcAddress(LibHandle, PChar('bind')); - ssConnect := GetProcAddress(LibHandle, PChar('connect')); - ssGetPeerName := GetProcAddress(LibHandle, PChar('getpeername')); - ssGetSockName := GetProcAddress(LibHandle, PChar('getsockname')); - GetSockOpt := GetProcAddress(LibHandle, PChar('getsockopt')); - Htonl := GetProcAddress(LibHandle, PChar('htonl')); - Htons := GetProcAddress(LibHandle, PChar('htons')); - Inet_Addr := GetProcAddress(LibHandle, PChar('inet_addr')); - Inet_Ntoa := GetProcAddress(LibHandle, PChar('inet_ntoa')); - Listen := GetProcAddress(LibHandle, PChar('listen')); - Ntohl := GetProcAddress(LibHandle, PChar('ntohl')); - Ntohs := GetProcAddress(LibHandle, PChar('ntohs')); - ssRecv := GetProcAddress(LibHandle, PChar('recv')); - ssRecvFrom := GetProcAddress(LibHandle, PChar('recvfrom')); - Select := GetProcAddress(LibHandle, PChar('select')); - ssSend := GetProcAddress(LibHandle, PChar('send')); - ssSendTo := GetProcAddress(LibHandle, PChar('sendto')); - SetSockOpt := GetProcAddress(LibHandle, PChar('setsockopt')); - ShutDown := GetProcAddress(LibHandle, PChar('shutdown')); - Socket := GetProcAddress(LibHandle, PChar('socket')); - GetHostByAddr := GetProcAddress(LibHandle, PChar('gethostbyaddr')); - GetHostByName := GetProcAddress(LibHandle, PChar('gethostbyname')); - GetProtoByName := GetProcAddress(LibHandle, PChar('getprotobyname')); - GetProtoByNumber := GetProcAddress(LibHandle, PChar('getprotobynumber')); - GetServByName := GetProcAddress(LibHandle, PChar('getservbyname')); - GetServByPort := GetProcAddress(LibHandle, PChar('getservbyport')); - ssGetHostName := GetProcAddress(LibHandle, PChar('gethostname')); - -{$IFNDEF FORCEOLDAPI} - GetAddrInfo := GetProcAddress(LibHandle, PChar('getaddrinfo')); - FreeAddrInfo := GetProcAddress(LibHandle, PChar('freeaddrinfo')); - GetNameInfo := GetProcAddress(LibHandle, PChar('getnameinfo')); - SockEnhancedApi := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) - and Assigned(GetNameInfo); -{$ENDIF} - Result := True; - end; - end - else Result := True; - if Result then - Inc(SynSockCount); - finally - SynSockCS.Leave; - end; -end; - -function DestroySocketInterface: Boolean; -begin - SynSockCS.Enter; - try - Dec(SynSockCount); - if SynSockCount < 0 then - SynSockCount := 0; - if SynSockCount = 0 then - begin - if LibHandle <> 0 then - begin - FreeLibrary(libHandle); - LibHandle := 0; - end; - if LibWship6Handle <> 0 then - begin - FreeLibrary(LibWship6Handle); - LibWship6Handle := 0; - end; - end; - finally - SynSockCS.Leave; - end; - Result := True; -end; - -initialization -begin - SynSockCS := SyncObjs.TCriticalSection.Create; - SET_IN6_IF_ADDR_ANY (@in6addr_any); - SET_LOOPBACK_ADDR6 (@in6addr_loopback); -end; - -finalization -begin - SynSockCS.Free; -end; - -{$ENDIF} - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sswin32.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sswin32.pas deleted file mode 100644 index 7cc1ed9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/sswin32.pas +++ /dev/null @@ -1,1587 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 002.000.002 | -|==============================================================================| -| Content: Socket Independent Platform Layer - Win32 definition include | -|==============================================================================| -| Copyright (c)1999-2003, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)2003. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@exclude} - -{$IFDEF WIN32} - -//{$DEFINE WINSOCK1} -{Note about define WINSOCK1: -If you activate this compiler directive, then socket interface level 1.1 is -used instead default level 2.2. Level 2.2 is not available on old W95, however -you can install update. -} - -//{$DEFINE FORCEOLDAPI} -{Note about define FORCEOLDAPI: -If you activate this compiler directive, then is allways used old socket API -for name resolution. If you leave this directive inactive, then the new API -is used, when running system allows it. - -For IPv6 support you must have new API! -} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$H+} -{$IFDEF VER125} - {$DEFINE BCB} -{$ENDIF} -{$IFDEF BCB} - {$ObjExportAll On} - (*$HPPEMIT '/* EDE 2003-02-19 */' *) - (*$HPPEMIT 'namespace Synsock { using System::Shortint; }' *) - (*$HPPEMIT '#undef h_addr' *) - (*$HPPEMIT '#undef IOCPARM_MASK' *) - (*$HPPEMIT '#undef FD_SETSIZE' *) - (*$HPPEMIT '#undef IOC_VOID' *) - (*$HPPEMIT '#undef IOC_OUT' *) - (*$HPPEMIT '#undef IOC_IN' *) - (*$HPPEMIT '#undef IOC_INOUT' *) - (*$HPPEMIT '#undef FIONREAD' *) - (*$HPPEMIT '#undef FIONBIO' *) - (*$HPPEMIT '#undef FIOASYNC' *) - (*$HPPEMIT '#undef IPPROTO_IP' *) - (*$HPPEMIT '#undef IPPROTO_ICMP' *) - (*$HPPEMIT '#undef IPPROTO_IGMP' *) - (*$HPPEMIT '#undef IPPROTO_TCP' *) - (*$HPPEMIT '#undef IPPROTO_UDP' *) - (*$HPPEMIT '#undef IPPROTO_RAW' *) - (*$HPPEMIT '#undef IPPROTO_MAX' *) - (*$HPPEMIT '#undef INADDR_ANY' *) - (*$HPPEMIT '#undef INADDR_LOOPBACK' *) - (*$HPPEMIT '#undef INADDR_BROADCAST' *) - (*$HPPEMIT '#undef INADDR_NONE' *) - (*$HPPEMIT '#undef INVALID_SOCKET' *) - (*$HPPEMIT '#undef SOCKET_ERROR' *) - (*$HPPEMIT '#undef WSADESCRIPTION_LEN' *) - (*$HPPEMIT '#undef WSASYS_STATUS_LEN' *) - (*$HPPEMIT '#undef IP_OPTIONS' *) - (*$HPPEMIT '#undef IP_TOS' *) - (*$HPPEMIT '#undef IP_TTL' *) - (*$HPPEMIT '#undef IP_MULTICAST_IF' *) - (*$HPPEMIT '#undef IP_MULTICAST_TTL' *) - (*$HPPEMIT '#undef IP_MULTICAST_LOOP' *) - (*$HPPEMIT '#undef IP_ADD_MEMBERSHIP' *) - (*$HPPEMIT '#undef IP_DROP_MEMBERSHIP' *) - (*$HPPEMIT '#undef IP_DONTFRAGMENT' *) - (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_TTL' *) - (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_LOOP' *) - (*$HPPEMIT '#undef IP_MAX_MEMBERSHIPS' *) - (*$HPPEMIT '#undef SOL_SOCKET' *) - (*$HPPEMIT '#undef SO_DEBUG' *) - (*$HPPEMIT '#undef SO_ACCEPTCONN' *) - (*$HPPEMIT '#undef SO_REUSEADDR' *) - (*$HPPEMIT '#undef SO_KEEPALIVE' *) - (*$HPPEMIT '#undef SO_DONTROUTE' *) - (*$HPPEMIT '#undef SO_BROADCAST' *) - (*$HPPEMIT '#undef SO_USELOOPBACK' *) - (*$HPPEMIT '#undef SO_LINGER' *) - (*$HPPEMIT '#undef SO_OOBINLINE' *) - (*$HPPEMIT '#undef SO_DONTLINGER' *) - (*$HPPEMIT '#undef SO_SNDBUF' *) - (*$HPPEMIT '#undef SO_RCVBUF' *) - (*$HPPEMIT '#undef SO_SNDLOWAT' *) - (*$HPPEMIT '#undef SO_RCVLOWAT' *) - (*$HPPEMIT '#undef SO_SNDTIMEO' *) - (*$HPPEMIT '#undef SO_RCVTIMEO' *) - (*$HPPEMIT '#undef SO_ERROR' *) - (*$HPPEMIT '#undef SO_OPENTYPE' *) - (*$HPPEMIT '#undef SO_SYNCHRONOUS_ALERT' *) - (*$HPPEMIT '#undef SO_SYNCHRONOUS_NONALERT' *) - (*$HPPEMIT '#undef SO_MAXDG' *) - (*$HPPEMIT '#undef SO_MAXPATHDG' *) - (*$HPPEMIT '#undef SO_UPDATE_ACCEPT_CONTEXT' *) - (*$HPPEMIT '#undef SO_CONNECT_TIME' *) - (*$HPPEMIT '#undef SO_TYPE' *) - (*$HPPEMIT '#undef SOCK_STREAM' *) - (*$HPPEMIT '#undef SOCK_DGRAM' *) - (*$HPPEMIT '#undef SOCK_RAW' *) - (*$HPPEMIT '#undef SOCK_RDM' *) - (*$HPPEMIT '#undef SOCK_SEQPACKET' *) - (*$HPPEMIT '#undef TCP_NODELAY' *) - (*$HPPEMIT '#undef AF_UNSPEC' *) - (*$HPPEMIT '#undef SOMAXCONN' *) - (*$HPPEMIT '#undef AF_INET' *) - (*$HPPEMIT '#undef AF_MAX' *) - (*$HPPEMIT '#undef PF_UNSPEC' *) - (*$HPPEMIT '#undef PF_INET' *) - (*$HPPEMIT '#undef PF_MAX' *) - (*$HPPEMIT '#undef MSG_OOB' *) - (*$HPPEMIT '#undef MSG_PEEK' *) - (*$HPPEMIT '#undef WSABASEERR' *) - (*$HPPEMIT '#undef WSAEINTR' *) - (*$HPPEMIT '#undef WSAEBADF' *) - (*$HPPEMIT '#undef WSAEACCES' *) - (*$HPPEMIT '#undef WSAEFAULT' *) - (*$HPPEMIT '#undef WSAEINVAL' *) - (*$HPPEMIT '#undef WSAEMFILE' *) - (*$HPPEMIT '#undef WSAEWOULDBLOCK' *) - (*$HPPEMIT '#undef WSAEINPROGRESS' *) - (*$HPPEMIT '#undef WSAEALREADY' *) - (*$HPPEMIT '#undef WSAENOTSOCK' *) - (*$HPPEMIT '#undef WSAEDESTADDRREQ' *) - (*$HPPEMIT '#undef WSAEMSGSIZE' *) - (*$HPPEMIT '#undef WSAEPROTOTYPE' *) - (*$HPPEMIT '#undef WSAENOPROTOOPT' *) - (*$HPPEMIT '#undef WSAEPROTONOSUPPORT' *) - (*$HPPEMIT '#undef WSAESOCKTNOSUPPORT' *) - (*$HPPEMIT '#undef WSAEOPNOTSUPP' *) - (*$HPPEMIT '#undef WSAEPFNOSUPPORT' *) - (*$HPPEMIT '#undef WSAEAFNOSUPPORT' *) - (*$HPPEMIT '#undef WSAEADDRINUSE' *) - (*$HPPEMIT '#undef WSAEADDRNOTAVAIL' *) - (*$HPPEMIT '#undef WSAENETDOWN' *) - (*$HPPEMIT '#undef WSAENETUNREACH' *) - (*$HPPEMIT '#undef WSAENETRESET' *) - (*$HPPEMIT '#undef WSAECONNABORTED' *) - (*$HPPEMIT '#undef WSAECONNRESET' *) - (*$HPPEMIT '#undef WSAENOBUFS' *) - (*$HPPEMIT '#undef WSAEISCONN' *) - (*$HPPEMIT '#undef WSAENOTCONN' *) - (*$HPPEMIT '#undef WSAESHUTDOWN' *) - (*$HPPEMIT '#undef WSAETOOMANYREFS' *) - (*$HPPEMIT '#undef WSAETIMEDOUT' *) - (*$HPPEMIT '#undef WSAECONNREFUSED' *) - (*$HPPEMIT '#undef WSAELOOP' *) - (*$HPPEMIT '#undef WSAENAMETOOLONG' *) - (*$HPPEMIT '#undef WSAEHOSTDOWN' *) - (*$HPPEMIT '#undef WSAEHOSTUNREACH' *) - (*$HPPEMIT '#undef WSAENOTEMPTY' *) - (*$HPPEMIT '#undef WSAEPROCLIM' *) - (*$HPPEMIT '#undef WSAEUSERS' *) - (*$HPPEMIT '#undef WSAEDQUOT' *) - (*$HPPEMIT '#undef WSAESTALE' *) - (*$HPPEMIT '#undef WSAEREMOTE' *) - (*$HPPEMIT '#undef WSASYSNOTREADY' *) - (*$HPPEMIT '#undef WSAVERNOTSUPPORTED' *) - (*$HPPEMIT '#undef WSANOTINITIALISED' *) - (*$HPPEMIT '#undef WSAEDISCON' *) - (*$HPPEMIT '#undef WSAENOMORE' *) - (*$HPPEMIT '#undef WSAECANCELLED' *) - (*$HPPEMIT '#undef WSAEEINVALIDPROCTABLE' *) - (*$HPPEMIT '#undef WSAEINVALIDPROVIDER' *) - (*$HPPEMIT '#undef WSAEPROVIDERFAILEDINIT' *) - (*$HPPEMIT '#undef WSASYSCALLFAILURE' *) - (*$HPPEMIT '#undef WSASERVICE_NOT_FOUND' *) - (*$HPPEMIT '#undef WSATYPE_NOT_FOUND' *) - (*$HPPEMIT '#undef WSA_E_NO_MORE' *) - (*$HPPEMIT '#undef WSA_E_CANCELLED' *) - (*$HPPEMIT '#undef WSAEREFUSED' *) - (*$HPPEMIT '#undef WSAHOST_NOT_FOUND' *) - (*$HPPEMIT '#undef HOST_NOT_FOUND' *) - (*$HPPEMIT '#undef WSATRY_AGAIN' *) - (*$HPPEMIT '#undef TRY_AGAIN' *) - (*$HPPEMIT '#undef WSANO_RECOVERY' *) - (*$HPPEMIT '#undef NO_RECOVERY' *) - (*$HPPEMIT '#undef WSANO_DATA' *) - (*$HPPEMIT '#undef NO_DATA' *) - (*$HPPEMIT '#undef WSANO_ADDRESS' *) - (*$HPPEMIT '#undef ENAMETOOLONG' *) - (*$HPPEMIT '#undef ENOTEMPTY' *) - (*$HPPEMIT '#undef FD_CLR' *) - (*$HPPEMIT '#undef FD_ISSET' *) - (*$HPPEMIT '#undef FD_SET' *) - (*$HPPEMIT '#undef FD_ZERO' *) - (*$HPPEMIT '#undef NO_ADDRESS' *) - (*$HPPEMIT '#undef ADDR_ANY' *) - (*$HPPEMIT '#undef SO_GROUP_ID' *) - (*$HPPEMIT '#undef SO_GROUP_PRIORITY' *) - (*$HPPEMIT '#undef SO_MAX_MSG_SIZE' *) - (*$HPPEMIT '#undef SO_PROTOCOL_INFOA' *) - (*$HPPEMIT '#undef SO_PROTOCOL_INFOW' *) - (*$HPPEMIT '#undef SO_PROTOCOL_INFO' *) - (*$HPPEMIT '#undef PVD_CONFIG' *) - (*$HPPEMIT '#undef AF_INET6' *) - (*$HPPEMIT '#undef PF_INET6' *) -{$ENDIF} - -interface - -uses - SyncObjs, SysUtils, Classes, - Windows; - -function InitSocketInterface(stack: string): Boolean; -function DestroySocketInterface: Boolean; - -const -{$IFDEF WINSOCK1} - WinsockLevel = $0101; -{$ELSE} - WinsockLevel = $0202; -{$ENDIF} - -type - u_char = Char; - u_short = Word; - u_int = Integer; - u_long = Longint; - pu_long = ^u_long; - pu_short = ^u_short; - TSocket = u_int; - TAddrFamily = integer; - - TMemory = pointer; - -const - {$IFDEF WINSOCK1} - DLLStackName = 'wsock32.dll'; - {$ELSE} - DLLStackName = 'ws2_32.dll'; - {$ENDIF} - DLLwship6 = 'wship6.dll'; - - cLocalhost = '127.0.0.1'; - cAnyHost = '0.0.0.0'; - cBroadcast = '255.255.255.255'; - c6Localhost = '::1'; - c6AnyHost = '::0'; - c6Broadcast = 'ffff::1'; - cAnyPort = '0'; - - -const - FD_SETSIZE = 64; -type - PFDSet = ^TFDSet; - TFDSet = packed record - fd_count: u_int; - fd_array: array[0..FD_SETSIZE-1] of TSocket; - end; - -const - FIONREAD = $4004667f; - FIONBIO = $8004667e; - FIOASYNC = $8004667d; - -type - PTimeVal = ^TTimeVal; - TTimeVal = packed record - tv_sec: Longint; - tv_usec: Longint; - end; - -const - IPPROTO_IP = 0; { Dummy } - IPPROTO_ICMP = 1; { Internet Control Message Protocol } - IPPROTO_IGMP = 2; { Internet Group Management Protocol} - IPPROTO_TCP = 6; { TCP } - IPPROTO_UDP = 17; { User Datagram Protocol } - IPPROTO_IPV6 = 41; - IPPROTO_ICMPV6 = 58; - - IPPROTO_RAW = 255; - IPPROTO_MAX = 256; - -type - - PInAddr = ^TInAddr; - TInAddr = packed record - case integer of - 0: (S_bytes: packed array [0..3] of byte); - 1: (S_addr: u_long); - end; - - PSockAddrIn = ^TSockAddrIn; - TSockAddrIn = packed record - case Integer of - 0: (sin_family: u_short; - sin_port: u_short; - sin_addr: TInAddr; - sin_zero: array[0..7] of Char); - 1: (sa_family: u_short; - sa_data: array[0..13] of Char) - end; - - TIP_mreq = record - imr_multiaddr: TInAddr; { IP multicast address of group } - imr_interface: TInAddr; { local IP address of interface } - end; - - PInAddr6 = ^TInAddr6; - TInAddr6 = packed record - case integer of - 0: (S6_addr: packed array [0..15] of byte); - 1: (u6_addr8: packed array [0..15] of byte); - 2: (u6_addr16: packed array [0..7] of word); - 3: (u6_addr32: packed array [0..3] of integer); - end; - - PSockAddrIn6 = ^TSockAddrIn6; - TSockAddrIn6 = packed record - sin6_family: u_short; // AF_INET6 - sin6_port: u_short; // Transport level port number - sin6_flowinfo: u_long; // IPv6 flow information - sin6_addr: TInAddr6; // IPv6 address - sin6_scope_id: u_long; // Scope Id: IF number for link-local - // SITE id for site-local - end; - - TIPv6_mreq = record - ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. - ipv6mr_interface: integer; // Interface index. - padding: integer; - end; - - PHostEnt = ^THostEnt; - THostEnt = packed record - h_name: PChar; - h_aliases: ^PChar; - h_addrtype: Smallint; - h_length: Smallint; - case integer of - 0: (h_addr_list: ^PChar); - 1: (h_addr: ^PInAddr); - end; - - PNetEnt = ^TNetEnt; - TNetEnt = packed record - n_name: PChar; - n_aliases: ^PChar; - n_addrtype: Smallint; - n_net: u_long; - end; - - PServEnt = ^TServEnt; - TServEnt = packed record - s_name: PChar; - s_aliases: ^PChar; - s_port: Smallint; - s_proto: PChar; - end; - - PProtoEnt = ^TProtoEnt; - TProtoEnt = packed record - p_name: PChar; - p_aliases: ^Pchar; - p_proto: Smallint; - end; - -const - INADDR_ANY = $00000000; - INADDR_LOOPBACK = $7F000001; - INADDR_BROADCAST = $FFFFFFFF; - INADDR_NONE = $FFFFFFFF; - ADDR_ANY = INADDR_ANY; - INVALID_SOCKET = TSocket(NOT(0)); - SOCKET_ERROR = -1; - -Const - {$IFDEF WINSOCK1} - IP_OPTIONS = 1; - IP_MULTICAST_IF = 2; { set/get IP multicast interface } - IP_MULTICAST_TTL = 3; { set/get IP multicast timetolive } - IP_MULTICAST_LOOP = 4; { set/get IP multicast loopback } - IP_ADD_MEMBERSHIP = 5; { add an IP group membership } - IP_DROP_MEMBERSHIP = 6; { drop an IP group membership } - IP_TTL = 7; { set/get IP Time To Live } - IP_TOS = 8; { set/get IP Type Of Service } - IP_DONTFRAGMENT = 9; { set/get IP Don't Fragment flag } - {$ELSE} - IP_OPTIONS = 1; - IP_HDRINCL = 2; - IP_TOS = 3; { set/get IP Type Of Service } - IP_TTL = 4; { set/get IP Time To Live } - IP_MULTICAST_IF = 9; { set/get IP multicast interface } - IP_MULTICAST_TTL = 10; { set/get IP multicast timetolive } - IP_MULTICAST_LOOP = 11; { set/get IP multicast loopback } - IP_ADD_MEMBERSHIP = 12; { add an IP group membership } - IP_DROP_MEMBERSHIP = 13; { drop an IP group membership } - IP_DONTFRAGMENT = 14; { set/get IP Don't Fragment flag } - {$ENDIF} - - IP_DEFAULT_MULTICAST_TTL = 1; { normally limit m'casts to 1 hop } - IP_DEFAULT_MULTICAST_LOOP = 1; { normally hear sends if a member } - IP_MAX_MEMBERSHIPS = 20; { per socket; must fit in one mbuf } - - SOL_SOCKET = $ffff; {options for socket level } -{ Option flags per-socket. } - SO_DEBUG = $0001; { turn on debugging info recording } - SO_ACCEPTCONN = $0002; { socket has had listen() } - SO_REUSEADDR = $0004; { allow local address reuse } - SO_KEEPALIVE = $0008; { keep connections alive } - SO_DONTROUTE = $0010; { just use interface addresses } - SO_BROADCAST = $0020; { permit sending of broadcast msgs } - SO_USELOOPBACK = $0040; { bypass hardware when possible } - SO_LINGER = $0080; { linger on close if data present } - SO_OOBINLINE = $0100; { leave received OOB data in line } - SO_DONTLINGER = $ff7f; -{ Additional options. } - SO_SNDBUF = $1001; { send buffer size } - SO_RCVBUF = $1002; { receive buffer size } - SO_SNDLOWAT = $1003; { send low-water mark } - SO_RCVLOWAT = $1004; { receive low-water mark } - SO_SNDTIMEO = $1005; { send timeout } - SO_RCVTIMEO = $1006; { receive timeout } - SO_ERROR = $1007; { get error status and clear } - SO_TYPE = $1008; { get socket type } -{ WinSock 2 extension -- new options } - SO_GROUP_ID = $2001; { ID of a socket group} - SO_GROUP_PRIORITY = $2002; { the relative priority within a group} - SO_MAX_MSG_SIZE = $2003; { maximum message size } - SO_PROTOCOL_INFOA = $2004; { WSAPROTOCOL_INFOA structure } - SO_PROTOCOL_INFOW = $2005; { WSAPROTOCOL_INFOW structure } - SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA; - PVD_CONFIG = $3001; {configuration info for service provider } -{ Option for opening sockets for synchronous access. } - SO_OPENTYPE = $7008; - SO_SYNCHRONOUS_ALERT = $10; - SO_SYNCHRONOUS_NONALERT = $20; -{ Other NT-specific options. } - SO_MAXDG = $7009; - SO_MAXPATHDG = $700A; - SO_UPDATE_ACCEPT_CONTEXT = $700B; - SO_CONNECT_TIME = $700C; - - SOMAXCONN = $7fffffff; - - IPV6_UNICAST_HOPS = 8; // ??? - IPV6_MULTICAST_IF = 9; // set/get IP multicast i/f - IPV6_MULTICAST_HOPS = 10; // set/get IP multicast ttl - IPV6_MULTICAST_LOOP = 11; // set/get IP multicast loopback - IPV6_JOIN_GROUP = 12; // add an IP group membership - IPV6_LEAVE_GROUP = 13; // drop an IP group membership - - MSG_NOSIGNAL = 0; - - // getnameinfo constants - NI_MAXHOST = 1025; - NI_MAXSERV = 32; - NI_NOFQDN = $1; - NI_NUMERICHOST = $2; - NI_NAMEREQD = $4; - NI_NUMERICSERV = $8; - NI_DGRAM = $10; - - -const - SOCK_STREAM = 1; { stream socket } - SOCK_DGRAM = 2; { datagram socket } - SOCK_RAW = 3; { raw-protocol interface } - SOCK_RDM = 4; { reliably-delivered message } - SOCK_SEQPACKET = 5; { sequenced packet stream } - -{ TCP options. } - TCP_NODELAY = $0001; - -{ Address families. } - - AF_UNSPEC = 0; { unspecified } - AF_INET = 2; { internetwork: UDP, TCP, etc. } - AF_INET6 = 23; { Internetwork Version 6 } - AF_MAX = 24; - -{ Protocol families, same as address families for now. } - PF_UNSPEC = AF_UNSPEC; - PF_INET = AF_INET; - PF_INET6 = AF_INET6; - PF_MAX = AF_MAX; - -type - { Structure used by kernel to store most addresses. } - PSockAddr = ^TSockAddr; - TSockAddr = TSockAddrIn; - - { Structure used by kernel to pass protocol information in raw sockets. } - PSockProto = ^TSockProto; - TSockProto = packed record - sp_family: u_short; - sp_protocol: u_short; - end; - -type - PAddrInfo = ^TAddrInfo; - TAddrInfo = record - ai_flags: integer; // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST. - ai_family: integer; // PF_xxx. - ai_socktype: integer; // SOCK_xxx. - ai_protocol: integer; // 0 or IPPROTO_xxx for IPv4 and IPv6. - ai_addrlen: u_int; // Length of ai_addr. - ai_canonname: PChar; // Canonical name for nodename. - ai_addr: PSockAddr; // Binary address. - ai_next: PAddrInfo; // Next structure in linked list. - end; - -const - // Flags used in "hints" argument to getaddrinfo(). - AI_PASSIVE = $1; // Socket address will be used in bind() call. - AI_CANONNAME = $2; // Return canonical name in first ai_canonname. - AI_NUMERICHOST = $4; // Nodename must be a numeric address string. - -type -{ Structure used for manipulating linger option. } - PLinger = ^TLinger; - TLinger = packed record - l_onoff: u_short; - l_linger: u_short; - end; - -const - - MSG_OOB = $01; // Process out-of-band data. - MSG_PEEK = $02; // Peek at incoming messages. - -const - -{ All Windows Sockets error constants are biased by WSABASEERR from the "normal" } - WSABASEERR = 10000; - -{ Windows Sockets definitions of regular Microsoft C error constants } - - WSAEINTR = (WSABASEERR+4); - WSAEBADF = (WSABASEERR+9); - WSAEACCES = (WSABASEERR+13); - WSAEFAULT = (WSABASEERR+14); - WSAEINVAL = (WSABASEERR+22); - WSAEMFILE = (WSABASEERR+24); - -{ Windows Sockets definitions of regular Berkeley error constants } - - WSAEWOULDBLOCK = (WSABASEERR+35); - WSAEINPROGRESS = (WSABASEERR+36); - WSAEALREADY = (WSABASEERR+37); - WSAENOTSOCK = (WSABASEERR+38); - WSAEDESTADDRREQ = (WSABASEERR+39); - WSAEMSGSIZE = (WSABASEERR+40); - WSAEPROTOTYPE = (WSABASEERR+41); - WSAENOPROTOOPT = (WSABASEERR+42); - WSAEPROTONOSUPPORT = (WSABASEERR+43); - WSAESOCKTNOSUPPORT = (WSABASEERR+44); - WSAEOPNOTSUPP = (WSABASEERR+45); - WSAEPFNOSUPPORT = (WSABASEERR+46); - WSAEAFNOSUPPORT = (WSABASEERR+47); - WSAEADDRINUSE = (WSABASEERR+48); - WSAEADDRNOTAVAIL = (WSABASEERR+49); - WSAENETDOWN = (WSABASEERR+50); - WSAENETUNREACH = (WSABASEERR+51); - WSAENETRESET = (WSABASEERR+52); - WSAECONNABORTED = (WSABASEERR+53); - WSAECONNRESET = (WSABASEERR+54); - WSAENOBUFS = (WSABASEERR+55); - WSAEISCONN = (WSABASEERR+56); - WSAENOTCONN = (WSABASEERR+57); - WSAESHUTDOWN = (WSABASEERR+58); - WSAETOOMANYREFS = (WSABASEERR+59); - WSAETIMEDOUT = (WSABASEERR+60); - WSAECONNREFUSED = (WSABASEERR+61); - WSAELOOP = (WSABASEERR+62); - WSAENAMETOOLONG = (WSABASEERR+63); - WSAEHOSTDOWN = (WSABASEERR+64); - WSAEHOSTUNREACH = (WSABASEERR+65); - WSAENOTEMPTY = (WSABASEERR+66); - WSAEPROCLIM = (WSABASEERR+67); - WSAEUSERS = (WSABASEERR+68); - WSAEDQUOT = (WSABASEERR+69); - WSAESTALE = (WSABASEERR+70); - WSAEREMOTE = (WSABASEERR+71); - -{ Extended Windows Sockets error constant definitions } - - WSASYSNOTREADY = (WSABASEERR+91); - WSAVERNOTSUPPORTED = (WSABASEERR+92); - WSANOTINITIALISED = (WSABASEERR+93); - WSAEDISCON = (WSABASEERR+101); - WSAENOMORE = (WSABASEERR+102); - WSAECANCELLED = (WSABASEERR+103); - WSAEEINVALIDPROCTABLE = (WSABASEERR+104); - WSAEINVALIDPROVIDER = (WSABASEERR+105); - WSAEPROVIDERFAILEDINIT = (WSABASEERR+106); - WSASYSCALLFAILURE = (WSABASEERR+107); - WSASERVICE_NOT_FOUND = (WSABASEERR+108); - WSATYPE_NOT_FOUND = (WSABASEERR+109); - WSA_E_NO_MORE = (WSABASEERR+110); - WSA_E_CANCELLED = (WSABASEERR+111); - WSAEREFUSED = (WSABASEERR+112); - -{ Error return codes from gethostbyname() and gethostbyaddr() - (when using the resolver). Note that these errors are - retrieved via WSAGetLastError() and must therefore follow - the rules for avoiding clashes with error numbers from - specific implementations or language run-time systems. - For this reason the codes are based at WSABASEERR+1001. - Note also that [WSA]NO_ADDRESS is defined only for - compatibility purposes. } - -{ Authoritative Answer: Host not found } - WSAHOST_NOT_FOUND = (WSABASEERR+1001); - HOST_NOT_FOUND = WSAHOST_NOT_FOUND; -{ Non-Authoritative: Host not found, or SERVERFAIL } - WSATRY_AGAIN = (WSABASEERR+1002); - TRY_AGAIN = WSATRY_AGAIN; -{ Non recoverable errors, FORMERR, REFUSED, NOTIMP } - WSANO_RECOVERY = (WSABASEERR+1003); - NO_RECOVERY = WSANO_RECOVERY; -{ Valid name, no data record of requested type } - WSANO_DATA = (WSABASEERR+1004); - NO_DATA = WSANO_DATA; -{ no address, look for MX record } - WSANO_ADDRESS = WSANO_DATA; - NO_ADDRESS = WSANO_ADDRESS; - - EWOULDBLOCK = WSAEWOULDBLOCK; - EINPROGRESS = WSAEINPROGRESS; - EALREADY = WSAEALREADY; - ENOTSOCK = WSAENOTSOCK; - EDESTADDRREQ = WSAEDESTADDRREQ; - EMSGSIZE = WSAEMSGSIZE; - EPROTOTYPE = WSAEPROTOTYPE; - ENOPROTOOPT = WSAENOPROTOOPT; - EPROTONOSUPPORT = WSAEPROTONOSUPPORT; - ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT; - EOPNOTSUPP = WSAEOPNOTSUPP; - EPFNOSUPPORT = WSAEPFNOSUPPORT; - EAFNOSUPPORT = WSAEAFNOSUPPORT; - EADDRINUSE = WSAEADDRINUSE; - EADDRNOTAVAIL = WSAEADDRNOTAVAIL; - ENETDOWN = WSAENETDOWN; - ENETUNREACH = WSAENETUNREACH; - ENETRESET = WSAENETRESET; - ECONNABORTED = WSAECONNABORTED; - ECONNRESET = WSAECONNRESET; - ENOBUFS = WSAENOBUFS; - EISCONN = WSAEISCONN; - ENOTCONN = WSAENOTCONN; - ESHUTDOWN = WSAESHUTDOWN; - ETOOMANYREFS = WSAETOOMANYREFS; - ETIMEDOUT = WSAETIMEDOUT; - ECONNREFUSED = WSAECONNREFUSED; - ELOOP = WSAELOOP; - ENAMETOOLONG = WSAENAMETOOLONG; - EHOSTDOWN = WSAEHOSTDOWN; - EHOSTUNREACH = WSAEHOSTUNREACH; - ENOTEMPTY = WSAENOTEMPTY; - EPROCLIM = WSAEPROCLIM; - EUSERS = WSAEUSERS; - EDQUOT = WSAEDQUOT; - ESTALE = WSAESTALE; - EREMOTE = WSAEREMOTE; - - EAI_ADDRFAMILY = 1; // Address family for nodename not supported. - EAI_AGAIN = 2; // Temporary failure in name resolution. - EAI_BADFLAGS = 3; // Invalid value for ai_flags. - EAI_FAIL = 4; // Non-recoverable failure in name resolution. - EAI_FAMILY = 5; // Address family ai_family not supported. - EAI_MEMORY = 6; // Memory allocation failure. - EAI_NODATA = 7; // No address associated with nodename. - EAI_NONAME = 8; // Nodename nor servname provided, or not known. - EAI_SERVICE = 9; // Servname not supported for ai_socktype. - EAI_SOCKTYPE = 10; // Socket type ai_socktype not supported. - EAI_SYSTEM = 11; // System error returned in errno. - -const - WSADESCRIPTION_LEN = 256; - WSASYS_STATUS_LEN = 128; -type - PWSAData = ^TWSAData; - TWSAData = packed record - wVersion: Word; - wHighVersion: Word; - szDescription: array[0..WSADESCRIPTION_LEN] of Char; - szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; - iMaxSockets: Word; - iMaxUdpDg: Word; - lpVendorInfo: PChar; - end; - - function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; - function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; - function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; - function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; - function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; - function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; - procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); - procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); -var - in6addr_any, in6addr_loopback : TInAddr6; - -procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); -function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; -procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); -procedure FD_ZERO(var FDSet: TFDSet); - -{=============================================================================} - -type - TWSAStartup = function(wVersionRequired: Word; var WSData: TWSAData): Integer; - stdcall; - TWSACleanup = function: Integer; - stdcall; - TWSAGetLastError = function: Integer; - stdcall; - TGetServByName = function(name, proto: PChar): PServEnt; - stdcall; - TGetServByPort = function(port: Integer; proto: PChar): PServEnt; - stdcall; - TGetProtoByName = function(name: PChar): PProtoEnt; - stdcall; - TGetProtoByNumber = function(proto: Integer): PProtoEnt; - stdcall; - TGetHostByName = function(name: PChar): PHostEnt; - stdcall; - TGetHostByAddr = function(addr: Pointer; len, Struc: Integer): PHostEnt; - stdcall; - TGetHostName = function(name: PChar; len: Integer): Integer; - stdcall; - TShutdown = function(s: TSocket; how: Integer): Integer; - stdcall; - TSetSockOpt = function(s: TSocket; level, optname: Integer; optval: PChar; - optlen: Integer): Integer; - stdcall; - TGetSockOpt = function(s: TSocket; level, optname: Integer; optval: PChar; - var optlen: Integer): Integer; - stdcall; - TSendTo = function(s: TSocket; const Buf; len, flags: Integer; addrto: PSockAddr; - tolen: Integer): Integer; - stdcall; - TSend = function(s: TSocket; const Buf; len, flags: Integer): Integer; - stdcall; - TRecv = function(s: TSocket; var Buf; len, flags: Integer): Integer; - stdcall; - TRecvFrom = function(s: TSocket; var Buf; len, flags: Integer; from: PSockAddr; - var fromlen: Integer): Integer; - stdcall; - Tntohs = function(netshort: u_short): u_short; - stdcall; - Tntohl = function(netlong: u_long): u_long; - stdcall; - TListen = function(s: TSocket; backlog: Integer): Integer; - stdcall; - TIoctlSocket = function(s: TSocket; cmd: DWORD; var arg: Integer): Integer; - stdcall; - TInet_ntoa = function(inaddr: TInAddr): PChar; - stdcall; - TInet_addr = function(cp: PChar): u_long; - stdcall; - Thtons = function(hostshort: u_short): u_short; - stdcall; - Thtonl = function(hostlong: u_long): u_long; - stdcall; - TGetSockName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; - stdcall; - TGetPeerName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; - stdcall; - TConnect = function(s: TSocket; name: PSockAddr; namelen: Integer): Integer; - stdcall; - TCloseSocket = function(s: TSocket): Integer; - stdcall; - TBind = function(s: TSocket; addr: PSockAddr; namelen: Integer): Integer; - stdcall; - TAccept = function(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket; - stdcall; - TTSocket = function(af, Struc, Protocol: Integer): TSocket; - stdcall; - TSelect = function(nfds: Integer; readfds, writefds, exceptfds: PFDSet; - timeout: PTimeVal): Longint; - stdcall; - - TGetAddrInfo = function(NodeName: PChar; ServName: PChar; Hints: PAddrInfo; - var Addrinfo: PAddrInfo): integer; - stdcall; - TFreeAddrInfo = procedure(ai: PAddrInfo); - stdcall; - TGetNameInfo = function( addr: PSockAddr; namelen: Integer; host: PChar; - hostlen: DWORD; serv: PChar; servlen: DWORD; flags: integer): integer; - stdcall; - - T__WSAFDIsSet = function (s: TSocket; var FDSet: TFDSet): Bool; - stdcall; - - TWSAIoctl = function (s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: Pointer; - cbInBuffer: DWORD; lpvOutBuffer: Pointer; cbOutBuffer: DWORD; - lpcbBytesReturned: PDWORD; lpOverlapped: Pointer; - lpCompletionRoutine: pointer): u_int; - stdcall; - -var - WSAStartup: TWSAStartup = nil; - WSACleanup: TWSACleanup = nil; - WSAGetLastError: TWSAGetLastError = nil; - GetServByName: TGetServByName = nil; - GetServByPort: TGetServByPort = nil; - GetProtoByName: TGetProtoByName = nil; - GetProtoByNumber: TGetProtoByNumber = nil; - GetHostByName: TGetHostByName = nil; - GetHostByAddr: TGetHostByAddr = nil; - ssGetHostName: TGetHostName = nil; - Shutdown: TShutdown = nil; - SetSockOpt: TSetSockOpt = nil; - GetSockOpt: TGetSockOpt = nil; - ssSendTo: TSendTo = nil; - ssSend: TSend = nil; - ssRecv: TRecv = nil; - ssRecvFrom: TRecvFrom = nil; - ntohs: Tntohs = nil; - ntohl: Tntohl = nil; - Listen: TListen = nil; - IoctlSocket: TIoctlSocket = nil; - Inet_ntoa: TInet_ntoa = nil; - Inet_addr: TInet_addr = nil; - htons: Thtons = nil; - htonl: Thtonl = nil; - ssGetSockName: TGetSockName = nil; - ssGetPeerName: TGetPeerName = nil; - ssConnect: TConnect = nil; - CloseSocket: TCloseSocket = nil; - ssBind: TBind = nil; - ssAccept: TAccept = nil; - Socket: TTSocket = nil; - Select: TSelect = nil; - - GetAddrInfo: TGetAddrInfo = nil; - FreeAddrInfo: TFreeAddrInfo = nil; - GetNameInfo: TGetNameInfo = nil; - - __WSAFDIsSet: T__WSAFDIsSet = nil; - - WSAIoctl: TWSAIoctl = nil; - -var - SynSockCS: SyncObjs.TCriticalSection; - SockEnhancedApi: Boolean; - SockWship6Api: Boolean; - -type - TVarSin = packed record - case integer of - 0: (AddressFamily: u_short); - 1: ( - case sin_family: u_short of - AF_INET: (sin_port: u_short; - sin_addr: TInAddr; - sin_zero: array[0..7] of Char); - AF_INET6: (sin6_port: u_short; - sin6_flowinfo: u_long; - sin6_addr: TInAddr6; - sin6_scope_id: u_long); - ); - end; - -function SizeOfVarSin(sin: TVarSin): integer; - -function Bind(s: TSocket; const addr: TVarSin): Integer; -function Connect(s: TSocket; const name: TVarSin): Integer; -function GetSockName(s: TSocket; var name: TVarSin): Integer; -function GetPeerName(s: TSocket; var name: TVarSin): Integer; -function GetHostName: string; -function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; -function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; -function Accept(s: TSocket; var addr: TVarSin): TSocket; - -function IsNewApi(Family: integer): Boolean; -function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; -function GetSinIP(Sin: TVarSin): string; -function GetSinPort(Sin: TVarSin): Integer; -procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); -function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; -function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; - -{==============================================================================} -implementation - -var - SynSockCount: Integer = 0; - LibHandle: THandle = 0; - Libwship6Handle: THandle = 0; - -function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and - (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); -end; - -function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and - (a^.u6_addr32[2] = 0) and - (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and - (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); -end; - -function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); -end; - -function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; -begin - Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); -end; - -function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; -begin - Result := (a^.u6_addr8[0] = $FF); -end; - -function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; -begin - Result := (CompareMem( a, b, sizeof(TInAddr6))); -end; - -procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); -begin - FillChar(a^, sizeof(TInAddr6), 0); -end; - -procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); -begin - FillChar(a^, sizeof(TInAddr6), 0); - a^.u6_addr8[15] := 1; -end; - -{=============================================================================} -procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); -var - I: Integer; -begin - I := 0; - while I < FDSet.fd_count do - begin - if FDSet.fd_array[I] = Socket then - begin - while I < FDSet.fd_count - 1 do - begin - FDSet.fd_array[I] := FDSet.fd_array[I + 1]; - Inc(I); - end; - Dec(FDSet.fd_count); - Break; - end; - Inc(I); - end; -end; - -function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; -begin - Result := __WSAFDIsSet(Socket, FDSet); -end; - -procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); -begin - if FDSet.fd_count < FD_SETSIZE then - begin - FDSet.fd_array[FDSet.fd_count] := Socket; - Inc(FDSet.fd_count); - end; -end; - -procedure FD_ZERO(var FDSet: TFDSet); -begin - FDSet.fd_count := 0; -end; - -{=============================================================================} - -function SizeOfVarSin(sin: TVarSin): integer; -begin - case sin.sin_family of - AF_INET: - Result := SizeOf(TSockAddrIn); - AF_INET6: - Result := SizeOf(TSockAddrIn6); - else - Result := 0; - end; -end; - -{=============================================================================} - -function Bind(s: TSocket; const addr: TVarSin): Integer; -begin - Result := ssBind(s, @addr, SizeOfVarSin(addr)); -end; - -function Connect(s: TSocket; const name: TVarSin): Integer; -begin - Result := ssConnect(s, @name, SizeOfVarSin(name)); -end; - -function GetSockName(s: TSocket; var name: TVarSin): Integer; -var - len: integer; -begin - len := SizeOf(name); - FillChar(name, len, 0); - Result := ssGetSockName(s, @name, Len); -end; - -function GetPeerName(s: TSocket; var name: TVarSin): Integer; -var - len: integer; -begin - len := SizeOf(name); - FillChar(name, len, 0); - Result := ssGetPeerName(s, @name, Len); -end; - -function GetHostName: string; -var - s: string; -begin - Result := ''; - setlength(s, 255); - ssGetHostName(pchar(s), Length(s) - 1); - Result := Pchar(s); -end; - -function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -begin - Result := ssSend(s, Buf^, len, flags); -end; - -function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; -begin - Result := ssRecv(s, Buf^, len, flags); -end; - -function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; -begin - Result := ssSendTo(s, Buf^, len, flags, @addrto, SizeOfVarSin(addrto)); -end; - -function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; -var - x: integer; -begin - x := SizeOf(from); - Result := ssRecvFrom(s, Buf^, len, flags, @from, x); -end; - -function Accept(s: TSocket; var addr: TVarSin): TSocket; -var - x: integer; -begin - x := SizeOf(addr); - Result := ssAccept(s, @addr, x); -end; - -{=============================================================================} -function IsNewApi(Family: integer): Boolean; -begin - Result := SockEnhancedApi; - if not Result then - Result := (Family = AF_INET6) and SockWship6Api; -end; - -function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; -type - pu_long = ^u_long; -var - ProtoEnt: PProtoEnt; - ServEnt: PServEnt; - HostEnt: PHostEnt; - r: integer; - Hints1, Hints2: TAddrInfo; - Sin1, Sin2: TVarSin; - TwoPass: boolean; - - function GetAddr(const IP, port: string; Hints: TAddrInfo; var Sin: TVarSin): integer; - var - Addr: PAddrInfo; - begin - Addr := nil; - try - FillChar(Sin, Sizeof(Sin), 0); - if Hints.ai_socktype = SOCK_RAW then - begin - Hints.ai_socktype := 0; - Hints.ai_protocol := 0; - Result := synsock.GetAddrInfo(PChar(IP), nil, @Hints, Addr); - end - else - begin - if (IP = cAnyHost) or (IP = c6AnyHost) then - begin - Hints.ai_flags := AI_PASSIVE; - Result := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - end - else - if (IP = cLocalhost) or (IP = c6Localhost) then - begin - Result := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - end - else - begin - Result := synsock.GetAddrInfo(PChar(IP), PChar(Port), @Hints, Addr); - end; - end; - if Result = 0 then - if (Addr <> nil) then - Move(Addr^.ai_addr^, Sin, Addr^.ai_addrlen); - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; - -begin - Result := 0; - FillChar(Sin, Sizeof(Sin), 0); - if not IsNewApi(family) then - begin - SynSockCS.Enter; - try - Sin.sin_family := AF_INET; - ProtoEnt := synsock.GetProtoByNumber(SockProtocol); - ServEnt := nil; - if ProtoEnt <> nil then - ServEnt := synsock.GetServByName(PChar(Port), ProtoEnt^.p_name); - if ServEnt = nil then - Sin.sin_port := synsock.htons(StrToIntDef(Port, 0)) - else - Sin.sin_port := ServEnt^.s_port; - if IP = cBroadcast then - Sin.sin_addr.s_addr := u_long(INADDR_BROADCAST) - else - begin - Sin.sin_addr.s_addr := synsock.inet_addr(PChar(IP)); - if Sin.sin_addr.s_addr = u_long(INADDR_NONE) then - begin - HostEnt := synsock.GetHostByName(PChar(IP)); - Result := synsock.WSAGetLastError; - if HostEnt <> nil then - Sin.sin_addr.S_addr := u_long(Pu_long(HostEnt^.h_addr_list^)^); - end; - end; - finally - SynSockCS.Leave; - end; - end - else - begin - FillChar(Hints1, Sizeof(Hints1), 0); - FillChar(Hints2, Sizeof(Hints2), 0); - TwoPass := False; - if Family = AF_UNSPEC then - begin - if PreferIP4 then - begin - Hints1.ai_family := AF_INET; - Hints2.ai_family := AF_INET6; - TwoPass := True; - end - else - begin - Hints2.ai_family := AF_INET; - Hints1.ai_family := AF_INET6; - TwoPass := True; - end; - end - else - Hints1.ai_family := Family; - - Hints1.ai_socktype := SockType; - Hints1.ai_protocol := SockProtocol; - Hints2.ai_socktype := Hints1.ai_socktype; - Hints2.ai_protocol := Hints1.ai_protocol; - - r := GetAddr(IP, Port, Hints1, Sin1); - Result := r; - sin := sin1; - if r <> 0 then - if TwoPass then - begin - r := GetAddr(IP, Port, Hints2, Sin2); - Result := r; - if r = 0 then - sin := sin2; - end; - end; -end; - -function GetSinIP(Sin: TVarSin): string; -var - p: PChar; - host, serv: string; - hostlen, servlen: integer; - r: integer; -begin - Result := ''; - if not IsNewApi(Sin.AddressFamily) then - begin - p := synsock.inet_ntoa(Sin.sin_addr); - if p <> nil then - Result := p; - end - else - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(@sin, SizeOfVarSin(sin), PChar(host), hostlen, - PChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); - if r = 0 then - Result := PChar(host); - end; -end; - -function GetSinPort(Sin: TVarSin): Integer; -begin - if (Sin.sin_family = AF_INET6) then - Result := synsock.ntohs(Sin.sin6_port) - else - Result := synsock.ntohs(Sin.sin_port); -end; - -procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); -type - TaPInAddr = array[0..250] of PInAddr; - PaPInAddr = ^TaPInAddr; -var - Hints: TAddrInfo; - Addr: PAddrInfo; - AddrNext: PAddrInfo; - r: integer; - host, serv: string; - hostlen, servlen: integer; - RemoteHost: PHostEnt; - IP: u_long; - PAdrPtr: PaPInAddr; - i: Integer; - s: string; - InAddr: TInAddr; -begin - IPList.Clear; - if not IsNewApi(Family) then - begin - IP := synsock.inet_addr(PChar(Name)); - if IP = u_long(INADDR_NONE) then - begin - SynSockCS.Enter; - try - RemoteHost := synsock.GetHostByName(PChar(Name)); - if RemoteHost <> nil then - begin - PAdrPtr := PAPInAddr(RemoteHost^.h_addr_list); - i := 0; - while PAdrPtr^[i] <> nil do - begin - InAddr := PAdrPtr^[i]^; - s := Format('%d.%d.%d.%d', [InAddr.S_bytes[0], InAddr.S_bytes[1], - InAddr.S_bytes[2], InAddr.S_bytes[3]]); - IPList.Add(s); - Inc(i); - end; - end; - finally - SynSockCS.Leave; - end; - end - else - IPList.Add(Name); - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := SockProtocol; - Hints.ai_flags := 0; - r := synsock.GetAddrInfo(PChar(Name), nil, @Hints, Addr); - if r = 0 then - begin - AddrNext := Addr; - while not(AddrNext = nil) do - begin - if not(((Family = AF_INET6) and (AddrNext^.ai_family = AF_INET)) - or ((Family = AF_INET) and (AddrNext^.ai_family = AF_INET6))) then - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(AddrNext^.ai_addr, AddrNext^.ai_addrlen, - PChar(host), hostlen, PChar(serv), servlen, - NI_NUMERICHOST + NI_NUMERICSERV); - if r = 0 then - begin - host := PChar(host); - IPList.Add(host); - end; - end; - AddrNext := AddrNext^.ai_next; - end; - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; - if IPList.Count = 0 then - IPList.Add(cAnyHost); -end; - -function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; -var - ProtoEnt: PProtoEnt; - ServEnt: PServEnt; - Hints: TAddrInfo; - Addr: PAddrInfo; - r: integer; -begin - Result := 0; - if not IsNewApi(Family) then - begin - SynSockCS.Enter; - try - ProtoEnt := synsock.GetProtoByNumber(SockProtocol); - ServEnt := nil; - if ProtoEnt <> nil then - ServEnt := synsock.GetServByName(PChar(Port), ProtoEnt^.p_name); - if ServEnt = nil then - Result := StrToIntDef(Port, 0) - else - Result := synsock.htons(ServEnt^.s_port); - finally - SynSockCS.Leave; - end; - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := Sockprotocol; - Hints.ai_flags := AI_PASSIVE; - r := synsock.GetAddrInfo(nil, PChar(Port), @Hints, Addr); - if (r = 0) and Assigned(Addr) then - begin - if Addr^.ai_family = AF_INET then - Result := synsock.htons(Addr^.ai_addr^.sin_port); - if Addr^.ai_family = AF_INET6 then - Result := synsock.htons(PSockAddrIn6(Addr^.ai_addr)^.sin6_port); - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; -end; - -function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; -var - Hints: TAddrInfo; - Addr: PAddrInfo; - r: integer; - host, serv: string; - hostlen, servlen: integer; - RemoteHost: PHostEnt; - IPn: u_long; -begin - Result := IP; - if not IsNewApi(Family) then - begin - IPn := synsock.inet_addr(PChar(IP)); - if IPn <> u_long(INADDR_NONE) then - begin - SynSockCS.Enter; - try - RemoteHost := GetHostByAddr(@IPn, SizeOf(IPn), AF_INET); - if RemoteHost <> nil then - Result := RemoteHost^.h_name; - finally - SynSockCS.Leave; - end; - end; - end - else - begin - Addr := nil; - try - FillChar(Hints, Sizeof(Hints), 0); - Hints.ai_family := AF_UNSPEC; - Hints.ai_socktype := SockType; - Hints.ai_protocol := SockProtocol; - Hints.ai_flags := 0; - r := synsock.GetAddrInfo(PChar(IP), nil, @Hints, Addr); - if (r = 0) and Assigned(Addr)then - begin - hostlen := NI_MAXHOST; - servlen := NI_MAXSERV; - setlength(host, hostlen); - setlength(serv, servlen); - r := getnameinfo(Addr^.ai_addr, Addr^.ai_addrlen, - PChar(host), hostlen, PChar(serv), servlen, - NI_NUMERICSERV); - if r = 0 then - Result := PChar(host); - end; - finally - if Assigned(Addr) then - synsock.FreeAddrInfo(Addr); - end; - end; -end; - -{=============================================================================} - -function InitSocketInterface(stack: string): Boolean; -begin - Result := False; - SockEnhancedApi := False; - if stack = '' then - stack := DLLStackName; - SynSockCS.Enter; - try - if SynSockCount = 0 then - begin - SockEnhancedApi := False; - SockWship6Api := False; - LibHandle := LoadLibrary(PChar(Stack)); - if LibHandle <> 0 then - begin - WSAIoctl := GetProcAddress(LibHandle, PChar('WSAIoctl')); - __WSAFDIsSet := GetProcAddress(LibHandle, PChar('__WSAFDIsSet')); - CloseSocket := GetProcAddress(LibHandle, PChar('closesocket')); - IoctlSocket := GetProcAddress(LibHandle, PChar('ioctlsocket')); - WSAGetLastError := GetProcAddress(LibHandle, PChar('WSAGetLastError')); - WSAStartup := GetProcAddress(LibHandle, PChar('WSAStartup')); - WSACleanup := GetProcAddress(LibHandle, PChar('WSACleanup')); - ssAccept := GetProcAddress(LibHandle, PChar('accept')); - ssBind := GetProcAddress(LibHandle, PChar('bind')); - ssConnect := GetProcAddress(LibHandle, PChar('connect')); - ssGetPeerName := GetProcAddress(LibHandle, PChar('getpeername')); - ssGetSockName := GetProcAddress(LibHandle, PChar('getsockname')); - GetSockOpt := GetProcAddress(LibHandle, PChar('getsockopt')); - Htonl := GetProcAddress(LibHandle, PChar('htonl')); - Htons := GetProcAddress(LibHandle, PChar('htons')); - Inet_Addr := GetProcAddress(LibHandle, PChar('inet_addr')); - Inet_Ntoa := GetProcAddress(LibHandle, PChar('inet_ntoa')); - Listen := GetProcAddress(LibHandle, PChar('listen')); - Ntohl := GetProcAddress(LibHandle, PChar('ntohl')); - Ntohs := GetProcAddress(LibHandle, PChar('ntohs')); - ssRecv := GetProcAddress(LibHandle, PChar('recv')); - ssRecvFrom := GetProcAddress(LibHandle, PChar('recvfrom')); - Select := GetProcAddress(LibHandle, PChar('select')); - ssSend := GetProcAddress(LibHandle, PChar('send')); - ssSendTo := GetProcAddress(LibHandle, PChar('sendto')); - SetSockOpt := GetProcAddress(LibHandle, PChar('setsockopt')); - ShutDown := GetProcAddress(LibHandle, PChar('shutdown')); - Socket := GetProcAddress(LibHandle, PChar('socket')); - GetHostByAddr := GetProcAddress(LibHandle, PChar('gethostbyaddr')); - GetHostByName := GetProcAddress(LibHandle, PChar('gethostbyname')); - GetProtoByName := GetProcAddress(LibHandle, PChar('getprotobyname')); - GetProtoByNumber := GetProcAddress(LibHandle, PChar('getprotobynumber')); - GetServByName := GetProcAddress(LibHandle, PChar('getservbyname')); - GetServByPort := GetProcAddress(LibHandle, PChar('getservbyport')); - ssGetHostName := GetProcAddress(LibHandle, PChar('gethostname')); - -{$IFNDEF FORCEOLDAPI} - GetAddrInfo := GetProcAddress(LibHandle, PChar('getaddrinfo')); - FreeAddrInfo := GetProcAddress(LibHandle, PChar('freeaddrinfo')); - GetNameInfo := GetProcAddress(LibHandle, PChar('getnameinfo')); - SockEnhancedApi := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) - and Assigned(GetNameInfo); - if not SockEnhancedApi then - begin - LibWship6Handle := LoadLibrary(PChar(DLLWship6)); - if LibWship6Handle <> 0 then - begin - GetAddrInfo := GetProcAddress(LibWship6Handle, PChar('getaddrinfo')); - FreeAddrInfo := GetProcAddress(LibWship6Handle, PChar('freeaddrinfo')); - GetNameInfo := GetProcAddress(LibWship6Handle, PChar('getnameinfo')); - SockWship6Api := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) - and Assigned(GetNameInfo); - end; - end; -{$ENDIF} - Result := True; - end; - end - else Result := True; - if Result then - Inc(SynSockCount); - finally - SynSockCS.Leave; - end; -end; - -function DestroySocketInterface: Boolean; -begin - SynSockCS.Enter; - try - Dec(SynSockCount); - if SynSockCount < 0 then - SynSockCount := 0; - if SynSockCount = 0 then - begin - if LibHandle <> 0 then - begin - FreeLibrary(libHandle); - LibHandle := 0; - end; - if LibWship6Handle <> 0 then - begin - FreeLibrary(LibWship6Handle); - LibWship6Handle := 0; - end; - end; - finally - SynSockCS.Leave; - end; - Result := True; -end; - -initialization -begin - SynSockCS := SyncObjs.TCriticalSection.Create; - SET_IN6_IF_ADDR_ANY (@in6addr_any); - SET_LOOPBACK_ADDR6 (@in6addr_loopback); -end; - -finalization -begin - SynSockCS.Free; -end; - -{$ENDIF} - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synacode.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synacode.pas deleted file mode 100644 index f183c8c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synacode.pas +++ /dev/null @@ -1,1454 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 002.002.000 | -|==============================================================================| -| Content: Coding and decoding support | -|==============================================================================| -| Copyright (c)1999-2007, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)2000-2007. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@abstract(Various encoding and decoding support)} -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$Q-} -{$R-} -{$H+} - -unit synacode; - -interface - -uses - SysUtils; - -type - TSpecials = set of AnsiChar; - -const - - SpecialChar: TSpecials = - ['=', '(', ')', '[', ']', '<', '>', ':', ';', ',', '@', '/', '?', '\', - '"', '_']; - NonAsciiChar: TSpecials = - [Char(0)..Char(31), Char(127)..Char(255)]; - URLFullSpecialChar: TSpecials = - [';', '/', '?', ':', '@', '=', '&', '#', '+']; - URLSpecialChar: TSpecials = - [#$00..#$20, '_', '<', '>', '"', '%', '{', '}', '|', '\', '^', '~', '[', ']', - '`', #$7F..#$FF]; - TableBase64 = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - TableBase64mod = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,='; - TableUU = - '`!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'; - TableXX = - '+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - ReTablebase64 = - #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$3E +#$40 - +#$40 +#$40 +#$3F +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C - +#$3D +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$01 +#$02 +#$03 - +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F - +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$40 +#$40 - +#$40 +#$40 +#$40 +#$40 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 - +#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D - +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; - ReTableUU = - #$01 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C - +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 - +#$19 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$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 +#$00 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 - +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 - +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; - ReTableXX = - #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$40 - +#$01 +#$40 +#$40 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A - +#$0B +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$0C +#$0D +#$0E +#$0F - +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$1A +#$1B - +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$40 +#$40 - +#$40 +#$40 +#$40 +#$40 +#$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 +#$40 +#$40 +#$40 +#$40 +#$40; - -{:Decodes triplet encoding with a given character delimiter. It is used for - decoding quoted-printable or URL encoding.} -function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; - -{:Decodes a string from quoted printable form. (also decodes triplet sequences - like '=7F')} -function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; - -{:Decodes a string of URL encoding. (also decodes triplet sequences like '%7F')} -function DecodeURL(const Value: AnsiString): AnsiString; - -{:Performs triplet encoding with a given character delimiter. Used for encoding - quoted-printable or URL encoding.} -function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; - Specials: TSpecials): AnsiString; - -{:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) - are encoded.} -function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; - -{:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) and - @link(SpecialChar) are encoded.} -function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; - -{:Encodes a string to URL format. Used for encoding data from a form field in - HTTP, etc. (Encodes all critical characters including characters used as URL - delimiters ('/',':', etc.)} -function EncodeURLElement(const Value: AnsiString): AnsiString; - -{:Encodes a string to URL format. Used to encode critical characters in all - URLs.} -function EncodeURL(const Value: AnsiString): AnsiString; - -{:Decode 4to3 encoding with given table. If some element is not found in table, - first item from table is used. This is good for buggy coded items by Microsoft - Outlook. This software sometimes using wrong table for UUcode, where is used - ' ' instead '`'.} -function Decode4to3(const Value, Table: AnsiString): AnsiString; - -{:Decode 4to3 encoding with given REVERSE table. Using this function with -reverse table is much faster then @link(Decode4to3). This function is used -internally for Base64, UU or XX decoding.} -function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; - -{:Encode by system 3to4 (used by Base64, UU coding, etc) by given table.} -function Encode3to4(const Value, Table: AnsiString): AnsiString; - -{:Decode string from base64 format.} -function DecodeBase64(const Value: AnsiString): AnsiString; - -{:Encodes a string to base64 format.} -function EncodeBase64(const Value: AnsiString): AnsiString; - -{:Decode string from modified base64 format. (used in IMAP, for example.)} -function DecodeBase64mod(const Value: AnsiString): AnsiString; - -{:Encodes a string to modified base64 format. (used in IMAP, for example.)} -function EncodeBase64mod(const Value: AnsiString): AnsiString; - -{:Decodes a string from UUcode format.} -function DecodeUU(const Value: AnsiString): AnsiString; - -{:encode UUcode. it encode only datas, you must also add header and footer for - proper encode.} -function EncodeUU(const Value: AnsiString): AnsiString; - -{:Decodes a string from XXcode format.} -function DecodeXX(const Value: AnsiString): AnsiString; - -{:decode line with Yenc code. This code is sometimes used in newsgroups.} -function DecodeYEnc(const Value: AnsiString): AnsiString; - -{:Returns a new CRC32 value after adding a new byte of data.} -function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; - -{:return CRC32 from a value string.} -function Crc32(const Value: AnsiString): Integer; - -{:Returns a new CRC16 value after adding a new byte of data.} -function UpdateCrc16(Value: Byte; Crc16: Word): Word; - -{:return CRC16 from a value string.} -function Crc16(const Value: AnsiString): Word; - -{:Returns a binary string with a RSA-MD5 hashing of "Value" string.} -function MD5(const Value: AnsiString): AnsiString; - -{:Returns a binary string with HMAC-MD5 hash.} -function HMAC_MD5(Text, Key: AnsiString): AnsiString; - -{:Returns a binary string with a RSA-MD5 hashing of string what is constructed - by repeating "value" until length is "Len".} -function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; - -{:Returns a binary string with a SHA-1 hashing of "Value" string.} -function SHA1(const Value: AnsiString): AnsiString; - -{:Returns a binary string with HMAC-SHA1 hash.} -function HMAC_SHA1(Text, Key: AnsiString): AnsiString; - -{:Returns a binary string with a SHA-1 hashing of string what is constructed - by repeating "value" until length is "Len".} -function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; - -{:Returns a binary string with a RSA-MD4 hashing of "Value" string.} -function MD4(const Value: AnsiString): AnsiString; - -implementation - -const - - Crc32Tab: array[0..255] of Integer = ( - Integer($00000000), Integer($77073096), Integer($EE0E612C), Integer($990951BA), - Integer($076DC419), Integer($706AF48F), Integer($E963A535), Integer($9E6495A3), - Integer($0EDB8832), Integer($79DCB8A4), Integer($E0D5E91E), Integer($97D2D988), - Integer($09B64C2B), Integer($7EB17CBD), Integer($E7B82D07), Integer($90BF1D91), - Integer($1DB71064), Integer($6AB020F2), Integer($F3B97148), Integer($84BE41DE), - Integer($1ADAD47D), Integer($6DDDE4EB), Integer($F4D4B551), Integer($83D385C7), - Integer($136C9856), Integer($646BA8C0), Integer($FD62F97A), Integer($8A65C9EC), - Integer($14015C4F), Integer($63066CD9), Integer($FA0F3D63), Integer($8D080DF5), - Integer($3B6E20C8), Integer($4C69105E), Integer($D56041E4), Integer($A2677172), - Integer($3C03E4D1), Integer($4B04D447), Integer($D20D85FD), Integer($A50AB56B), - Integer($35B5A8FA), Integer($42B2986C), Integer($DBBBC9D6), Integer($ACBCF940), - Integer($32D86CE3), Integer($45DF5C75), Integer($DCD60DCF), Integer($ABD13D59), - Integer($26D930AC), Integer($51DE003A), Integer($C8D75180), Integer($BFD06116), - Integer($21B4F4B5), Integer($56B3C423), Integer($CFBA9599), Integer($B8BDA50F), - Integer($2802B89E), Integer($5F058808), Integer($C60CD9B2), Integer($B10BE924), - Integer($2F6F7C87), Integer($58684C11), Integer($C1611DAB), Integer($B6662D3D), - Integer($76DC4190), Integer($01DB7106), Integer($98D220BC), Integer($EFD5102A), - Integer($71B18589), Integer($06B6B51F), Integer($9FBFE4A5), Integer($E8B8D433), - Integer($7807C9A2), Integer($0F00F934), Integer($9609A88E), Integer($E10E9818), - Integer($7F6A0DBB), Integer($086D3D2D), Integer($91646C97), Integer($E6635C01), - Integer($6B6B51F4), Integer($1C6C6162), Integer($856530D8), Integer($F262004E), - Integer($6C0695ED), Integer($1B01A57B), Integer($8208F4C1), Integer($F50FC457), - Integer($65B0D9C6), Integer($12B7E950), Integer($8BBEB8EA), Integer($FCB9887C), - Integer($62DD1DDF), Integer($15DA2D49), Integer($8CD37CF3), Integer($FBD44C65), - Integer($4DB26158), Integer($3AB551CE), Integer($A3BC0074), Integer($D4BB30E2), - Integer($4ADFA541), Integer($3DD895D7), Integer($A4D1C46D), Integer($D3D6F4FB), - Integer($4369E96A), Integer($346ED9FC), Integer($AD678846), Integer($DA60B8D0), - Integer($44042D73), Integer($33031DE5), Integer($AA0A4C5F), Integer($DD0D7CC9), - Integer($5005713C), Integer($270241AA), Integer($BE0B1010), Integer($C90C2086), - Integer($5768B525), Integer($206F85B3), Integer($B966D409), Integer($CE61E49F), - Integer($5EDEF90E), Integer($29D9C998), Integer($B0D09822), Integer($C7D7A8B4), - Integer($59B33D17), Integer($2EB40D81), Integer($B7BD5C3B), Integer($C0BA6CAD), - Integer($EDB88320), Integer($9ABFB3B6), Integer($03B6E20C), Integer($74B1D29A), - Integer($EAD54739), Integer($9DD277AF), Integer($04DB2615), Integer($73DC1683), - Integer($E3630B12), Integer($94643B84), Integer($0D6D6A3E), Integer($7A6A5AA8), - Integer($E40ECF0B), Integer($9309FF9D), Integer($0A00AE27), Integer($7D079EB1), - Integer($F00F9344), Integer($8708A3D2), Integer($1E01F268), Integer($6906C2FE), - Integer($F762575D), Integer($806567CB), Integer($196C3671), Integer($6E6B06E7), - Integer($FED41B76), Integer($89D32BE0), Integer($10DA7A5A), Integer($67DD4ACC), - Integer($F9B9DF6F), Integer($8EBEEFF9), Integer($17B7BE43), Integer($60B08ED5), - Integer($D6D6A3E8), Integer($A1D1937E), Integer($38D8C2C4), Integer($4FDFF252), - Integer($D1BB67F1), Integer($A6BC5767), Integer($3FB506DD), Integer($48B2364B), - Integer($D80D2BDA), Integer($AF0A1B4C), Integer($36034AF6), Integer($41047A60), - Integer($DF60EFC3), Integer($A867DF55), Integer($316E8EEF), Integer($4669BE79), - Integer($CB61B38C), Integer($BC66831A), Integer($256FD2A0), Integer($5268E236), - Integer($CC0C7795), Integer($BB0B4703), Integer($220216B9), Integer($5505262F), - Integer($C5BA3BBE), Integer($B2BD0B28), Integer($2BB45A92), Integer($5CB36A04), - Integer($C2D7FFA7), Integer($B5D0CF31), Integer($2CD99E8B), Integer($5BDEAE1D), - Integer($9B64C2B0), Integer($EC63F226), Integer($756AA39C), Integer($026D930A), - Integer($9C0906A9), Integer($EB0E363F), Integer($72076785), Integer($05005713), - Integer($95BF4A82), Integer($E2B87A14), Integer($7BB12BAE), Integer($0CB61B38), - Integer($92D28E9B), Integer($E5D5BE0D), Integer($7CDCEFB7), Integer($0BDBDF21), - Integer($86D3D2D4), Integer($F1D4E242), Integer($68DDB3F8), Integer($1FDA836E), - Integer($81BE16CD), Integer($F6B9265B), Integer($6FB077E1), Integer($18B74777), - Integer($88085AE6), Integer($FF0F6A70), Integer($66063BCA), Integer($11010B5C), - Integer($8F659EFF), Integer($F862AE69), Integer($616BFFD3), Integer($166CCF45), - Integer($A00AE278), Integer($D70DD2EE), Integer($4E048354), Integer($3903B3C2), - Integer($A7672661), Integer($D06016F7), Integer($4969474D), Integer($3E6E77DB), - Integer($AED16A4A), Integer($D9D65ADC), Integer($40DF0B66), Integer($37D83BF0), - Integer($A9BCAE53), Integer($DEBB9EC5), Integer($47B2CF7F), Integer($30B5FFE9), - Integer($BDBDF21C), Integer($CABAC28A), Integer($53B39330), Integer($24B4A3A6), - Integer($BAD03605), Integer($CDD70693), Integer($54DE5729), Integer($23D967BF), - Integer($B3667A2E), Integer($C4614AB8), Integer($5D681B02), Integer($2A6F2B94), - Integer($B40BBE37), Integer($C30C8EA1), Integer($5A05DF1B), Integer($2D02EF8D) - ); - - Crc16Tab: array[0..255] of Word = ( - $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, - $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, - $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, - $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, - $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, - $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, - $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, - $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, - $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, - $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, - $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, - $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, - $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, - $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, - $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, - $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, - $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, - $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, - $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, - $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, - $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, - $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, - $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, - $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, - $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, - $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, - $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, - $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, - $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, - $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, - $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, - $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 - ); - -procedure ArrByteToLong(var ArByte: Array of byte; var ArLong: Array of Integer); -{$IFDEF CIL} -var - n: integer; -{$ENDIF} -begin - if (High(ArByte) + 1) > ((High(ArLong) + 1) * 4) then - Exit; - {$IFDEF CIL} - for n := 0 to ((high(ArByte) + 1) div 4) - 1 do - ArLong[n] := ArByte[n * 4 + 0] - + (ArByte[n * 4 + 1] shl 8) - + (ArByte[n * 4 + 2] shl 16) - + (ArByte[n * 4 + 3] shl 24); - {$ELSE} - Move(ArByte[0], ArLong[0], High(ArByte) + 1); - {$ENDIF} -end; - -procedure ArrLongToByte(var ArLong: Array of Integer; var ArByte: Array of byte); -{$IFDEF CIL} -var - n: integer; -{$ENDIF} -begin - if (High(ArByte) + 1) < ((High(ArLong) + 1) * 4) then - Exit; - {$IFDEF CIL} - for n := 0 to high(ArLong) do - begin - ArByte[n * 4 + 0] := ArLong[n] and $000000FF; - ArByte[n * 4 + 1] := (ArLong[n] shr 8) and $000000FF; - ArByte[n * 4 + 2] := (ArLong[n] shr 16) and $000000FF; - ArByte[n * 4 + 3] := (ArLong[n] shr 24) and $000000FF; - end; - {$ELSE} - Move(ArLong[0], ArByte[0], High(ArByte) + 1); - {$ENDIF} -end; - -type - TMDCtx = record - State: array[0..3] of Integer; - Count: array[0..1] of Integer; - BufAnsiChar: array[0..63] of Byte; - BufLong: array[0..15] of Integer; - end; - TSHA1Ctx= record - Hi, Lo: integer; - Buffer: array[0..63] of byte; - Index: integer; - Hash: array[0..4] of Integer; - HashByte: array[0..19] of byte; - end; - - TMDTransform = procedure(var Buf: array of LongInt; const Data: array of LongInt); - -{==============================================================================} - -function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; -var - x, l, lv: Integer; - c: AnsiChar; - b: Byte; - bad: Boolean; -begin - lv := Length(Value); - SetLength(Result, lv); - x := 1; - l := 1; - while x <= lv do - begin - c := Value[x]; - Inc(x); - if c <> Delimiter then - begin - Result[l] := c; - Inc(l); - end - else - if x < lv then - begin - Case Value[x] Of - #13: - if (Value[x + 1] = #10) then - Inc(x, 2) - else - Inc(x); - #10: - if (Value[x + 1] = #13) then - Inc(x, 2) - else - Inc(x); - else - begin - bad := False; - Case Value[x] Of - '0'..'9': b := (Byte(Value[x]) - 48) Shl 4; - 'a'..'f', 'A'..'F': b := ((Byte(Value[x]) And 7) + 9) shl 4; - else - begin - b := 0; - bad := True; - end; - end; - Case Value[x + 1] Of - '0'..'9': b := b Or (Byte(Value[x + 1]) - 48); - 'a'..'f', 'A'..'F': b := b Or ((Byte(Value[x + 1]) And 7) + 9); - else - bad := True; - end; - if bad then - begin - Result[l] := c; - Inc(l); - end - else - begin - Inc(x, 2); - Result[l] := AnsiChar(b); - Inc(l); - end; - end; - end; - end - else - break; - end; - Dec(l); - SetLength(Result, l); -end; - -{==============================================================================} - -function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; -begin - Result := DecodeTriplet(Value, '='); -end; - -{==============================================================================} - -function DecodeURL(const Value: AnsiString): AnsiString; -begin - Result := DecodeTriplet(Value, '%'); -end; - -{==============================================================================} - -function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; - Specials: TSpecials): AnsiString; -var - n, l: Integer; - s: AnsiString; - c: AnsiChar; -begin - SetLength(Result, Length(Value) * 3); - l := 1; - for n := 1 to Length(Value) do - begin - c := Value[n]; - if c in Specials then - begin - Result[l] := Delimiter; - Inc(l); - s := IntToHex(Ord(c), 2); - Result[l] := s[1]; - Inc(l); - Result[l] := s[2]; - Inc(l); - end - else - begin - Result[l] := c; - Inc(l); - end; - end; - Dec(l); - SetLength(Result, l); -end; - -{==============================================================================} - -function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; -begin - Result := EncodeTriplet(Value, '=', ['='] + NonAsciiChar); -end; - -{==============================================================================} - -function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; -begin - Result := EncodeTriplet(Value, '=', SpecialChar + NonAsciiChar); -end; - -{==============================================================================} - -function EncodeURLElement(const Value: AnsiString): AnsiString; -begin - Result := EncodeTriplet(Value, '%', URLSpecialChar + URLFullSpecialChar); -end; - -{==============================================================================} - -function EncodeURL(const Value: AnsiString): AnsiString; -begin - Result := EncodeTriplet(Value, '%', URLSpecialChar); -end; - -{==============================================================================} - -function Decode4to3(const Value, Table: AnsiString): AnsiString; -var - x, y, n, l: Integer; - d: array[0..3] of Byte; -begin - SetLength(Result, Length(Value)); - x := 1; - l := 1; - while x <= Length(Value) do - begin - for n := 0 to 3 do - begin - if x > Length(Value) then - d[n] := 64 - else - begin - y := Pos(Value[x], Table); - if y < 1 then - y := 1; - d[n] := y - 1; - end; - Inc(x); - end; - Result[l] := AnsiChar((D[0] and $3F) shl 2 + (D[1] and $30) shr 4); - Inc(l); - if d[2] <> 64 then - begin - Result[l] := AnsiChar((D[1] and $0F) shl 4 + (D[2] and $3C) shr 2); - Inc(l); - if d[3] <> 64 then - begin - Result[l] := AnsiChar((D[2] and $03) shl 6 + (D[3] and $3F)); - Inc(l); - end; - end; - end; - Dec(l); - SetLength(Result, l); -end; - -{==============================================================================} -function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; -var - x, y, lv: Integer; - d: integer; - dl: integer; - c: byte; - p: integer; -begin - lv := Length(Value); - SetLength(Result, lv); - x := 1; - dl := 4; - d := 0; - p := 1; - while x <= lv do - begin - y := Ord(Value[x]); - if y in [33..127] then - c := Ord(Table[y - 32]) - else - c := 64; - Inc(x); - if c > 63 then - continue; - d := (d shl 6) or c; - dec(dl); - if dl <> 0 then - continue; - Result[p] := AnsiChar((d shr 16) and $ff); - inc(p); - Result[p] := AnsiChar((d shr 8) and $ff); - inc(p); - Result[p] := AnsiChar(d and $ff); - inc(p); - d := 0; - dl := 4; - end; - case dl of - 1: - begin - d := d shr 2; - Result[p] := AnsiChar((d shr 8) and $ff); - inc(p); - Result[p] := AnsiChar(d and $ff); - inc(p); - end; - 2: - begin - d := d shr 4; - Result[p] := AnsiChar(d and $ff); - inc(p); - end; - end; - SetLength(Result, p - 1); -end; - -{==============================================================================} - -function Encode3to4(const Value, Table: AnsiString): AnsiString; -var - c: Byte; - n, l: Integer; - Count: Integer; - DOut: array[0..3] of Byte; -begin - setlength(Result, ((Length(Value) + 2) div 3) * 4); - l := 1; - Count := 1; - while Count <= Length(Value) do - begin - c := Ord(Value[Count]); - Inc(Count); - DOut[0] := (c and $FC) shr 2; - DOut[1] := (c and $03) shl 4; - if Count <= Length(Value) then - begin - c := Ord(Value[Count]); - Inc(Count); - DOut[1] := DOut[1] + (c and $F0) shr 4; - DOut[2] := (c and $0F) shl 2; - if Count <= Length(Value) then - begin - c := Ord(Value[Count]); - Inc(Count); - DOut[2] := DOut[2] + (c and $C0) shr 6; - DOut[3] := (c and $3F); - end - else - begin - DOut[3] := $40; - end; - end - else - begin - DOut[2] := $40; - DOut[3] := $40; - end; - for n := 0 to 3 do - begin - if (DOut[n] + 1) <= Length(Table) then - begin - Result[l] := Table[DOut[n] + 1]; - Inc(l); - end; - end; - end; - SetLength(Result, l - 1); -end; - -{==============================================================================} - -function DecodeBase64(const Value: AnsiString): AnsiString; -begin - Result := Decode4to3Ex(Value, ReTableBase64); -end; - -{==============================================================================} - -function EncodeBase64(const Value: AnsiString): AnsiString; -begin - Result := Encode3to4(Value, TableBase64); -end; - -{==============================================================================} - -function DecodeBase64mod(const Value: AnsiString): AnsiString; -begin - Result := Decode4to3(Value, TableBase64mod); -end; - -{==============================================================================} - -function EncodeBase64mod(const Value: AnsiString): AnsiString; -begin - Result := Encode3to4(Value, TableBase64mod); -end; - -{==============================================================================} - -function DecodeUU(const Value: AnsiString): AnsiString; -var - s: AnsiString; - uut: AnsiString; - x: Integer; -begin - Result := ''; - uut := TableUU; - s := trim(UpperCase(Value)); - if s = '' then Exit; - if Pos('BEGIN', s) = 1 then - Exit; - if Pos('END', s) = 1 then - Exit; - if Pos('TABLE', s) = 1 then - Exit; //ignore Table yet (set custom UUT) - //begin decoding - x := Pos(Value[1], uut) - 1; - case (x mod 3) of - 0: x :=(x div 3)* 4; - 1: x :=((x div 3) * 4) + 2; - 2: x :=((x div 3) * 4) + 3; - end; - //x - lenght UU line - s := Copy(Value, 2, x); - if s = '' then - Exit; - s := s + StringOfChar(' ', x - length(s)); - Result := Decode4to3(s, uut); -end; - -{==============================================================================} - -function EncodeUU(const Value: AnsiString): AnsiString; -begin - Result := ''; - if Length(Value) < Length(TableUU) then - Result := TableUU[Length(Value) + 1] + Encode3to4(Value, TableUU); -end; - -{==============================================================================} - -function DecodeXX(const Value: AnsiString): AnsiString; -var - s: AnsiString; - x: Integer; -begin - Result := ''; - s := trim(UpperCase(Value)); - if s = '' then - Exit; - if Pos('BEGIN', s) = 1 then - Exit; - if Pos('END', s) = 1 then - Exit; - //begin decoding - x := Pos(Value[1], TableXX) - 1; - case (x mod 3) of - 0: x :=(x div 3)* 4; - 1: x :=((x div 3) * 4) + 2; - 2: x :=((x div 3) * 4) + 3; - end; - //x - lenght XX line - s := Copy(Value, 2, x); - if s = '' then - Exit; - s := s + StringOfChar(' ', x - length(s)); - Result := Decode4to3(s, TableXX); -end; - -{==============================================================================} - -function DecodeYEnc(const Value: AnsiString): AnsiString; -var - C : Byte; - i: integer; -begin - Result := ''; - i := 1; - while i <= Length(Value) do - begin - c := Ord(Value[i]); - Inc(i); - if c = Ord('=') then - begin - c := Ord(Value[i]); - Inc(i); - Dec(c, 64); - end; - Dec(C, 42); - Result := Result + AnsiChar(C); - end; -end; - -{==============================================================================} - -function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; -begin - Result := (Crc32 shr 8) - xor crc32tab[Byte(Value xor (Crc32 and Integer($000000FF)))]; -end; - -{==============================================================================} - -function Crc32(const Value: AnsiString): Integer; -var - n: Integer; -begin - Result := Integer($FFFFFFFF); - for n := 1 to Length(Value) do - Result := UpdateCrc32(Ord(Value[n]), Result); - Result := not Result; -end; - -{==============================================================================} - -function UpdateCrc16(Value: Byte; Crc16: Word): Word; -begin - Result := ((Crc16 shr 8) and $00FF) xor - crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)]; -end; - -{==============================================================================} - -function Crc16(const Value: AnsiString): Word; -var - n: Integer; -begin - Result := $FFFF; - for n := 1 to Length(Value) do - Result := UpdateCrc16(Ord(Value[n]), Result); -end; - -{==============================================================================} - -procedure MDInit(var MDContext: TMDCtx); -var - n: integer; -begin - MDContext.Count[0] := 0; - MDContext.Count[1] := 0; - for n := 0 to high(MDContext.BufAnsiChar) do - MDContext.BufAnsiChar[n] := 0; - for n := 0 to high(MDContext.BufLong) do - MDContext.BufLong[n] := 0; - MDContext.State[0] := Integer($67452301); - MDContext.State[1] := Integer($EFCDAB89); - MDContext.State[2] := Integer($98BADCFE); - MDContext.State[3] := Integer($10325476); -end; - -procedure MD5Transform(var Buf: array of LongInt; const Data: array of LongInt); -var - A, B, C, D: LongInt; - - procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); - begin - Inc(W, (Z xor (X and (Y xor Z))) + Data); - W := (W shl S) or (W shr (32 - S)); - Inc(W, X); - end; - - procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); - begin - Inc(W, (Y xor (Z and (X xor Y))) + Data); - W := (W shl S) or (W shr (32 - S)); - Inc(W, X); - end; - - procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); - begin - Inc(W, (X xor Y xor Z) + Data); - W := (W shl S) or (W shr (32 - S)); - Inc(W, X); - end; - - procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); - begin - Inc(W, (Y xor (X or not Z)) + Data); - W := (W shl S) or (W shr (32 - S)); - Inc(W, X); - end; -begin - A := Buf[0]; - B := Buf[1]; - C := Buf[2]; - D := Buf[3]; - - Round1(A, B, C, D, Data[0] + Longint($D76AA478), 7); - Round1(D, A, B, C, Data[1] + Longint($E8C7B756), 12); - Round1(C, D, A, B, Data[2] + Longint($242070DB), 17); - Round1(B, C, D, A, Data[3] + Longint($C1BDCEEE), 22); - Round1(A, B, C, D, Data[4] + Longint($F57C0FAF), 7); - Round1(D, A, B, C, Data[5] + Longint($4787C62A), 12); - Round1(C, D, A, B, Data[6] + Longint($A8304613), 17); - Round1(B, C, D, A, Data[7] + Longint($FD469501), 22); - Round1(A, B, C, D, Data[8] + Longint($698098D8), 7); - Round1(D, A, B, C, Data[9] + Longint($8B44F7AF), 12); - Round1(C, D, A, B, Data[10] + Longint($FFFF5BB1), 17); - Round1(B, C, D, A, Data[11] + Longint($895CD7BE), 22); - Round1(A, B, C, D, Data[12] + Longint($6B901122), 7); - Round1(D, A, B, C, Data[13] + Longint($FD987193), 12); - Round1(C, D, A, B, Data[14] + Longint($A679438E), 17); - Round1(B, C, D, A, Data[15] + Longint($49B40821), 22); - - Round2(A, B, C, D, Data[1] + Longint($F61E2562), 5); - Round2(D, A, B, C, Data[6] + Longint($C040B340), 9); - Round2(C, D, A, B, Data[11] + Longint($265E5A51), 14); - Round2(B, C, D, A, Data[0] + Longint($E9B6C7AA), 20); - Round2(A, B, C, D, Data[5] + Longint($D62F105D), 5); - Round2(D, A, B, C, Data[10] + Longint($02441453), 9); - Round2(C, D, A, B, Data[15] + Longint($D8A1E681), 14); - Round2(B, C, D, A, Data[4] + Longint($E7D3FBC8), 20); - Round2(A, B, C, D, Data[9] + Longint($21E1CDE6), 5); - Round2(D, A, B, C, Data[14] + Longint($C33707D6), 9); - Round2(C, D, A, B, Data[3] + Longint($F4D50D87), 14); - Round2(B, C, D, A, Data[8] + Longint($455A14ED), 20); - Round2(A, B, C, D, Data[13] + Longint($A9E3E905), 5); - Round2(D, A, B, C, Data[2] + Longint($FCEFA3F8), 9); - Round2(C, D, A, B, Data[7] + Longint($676F02D9), 14); - Round2(B, C, D, A, Data[12] + Longint($8D2A4C8A), 20); - - Round3(A, B, C, D, Data[5] + Longint($FFFA3942), 4); - Round3(D, A, B, C, Data[8] + Longint($8771F681), 11); - Round3(C, D, A, B, Data[11] + Longint($6D9D6122), 16); - Round3(B, C, D, A, Data[14] + Longint($FDE5380C), 23); - Round3(A, B, C, D, Data[1] + Longint($A4BEEA44), 4); - Round3(D, A, B, C, Data[4] + Longint($4BDECFA9), 11); - Round3(C, D, A, B, Data[7] + Longint($F6BB4B60), 16); - Round3(B, C, D, A, Data[10] + Longint($BEBFBC70), 23); - Round3(A, B, C, D, Data[13] + Longint($289B7EC6), 4); - Round3(D, A, B, C, Data[0] + Longint($EAA127FA), 11); - Round3(C, D, A, B, Data[3] + Longint($D4EF3085), 16); - Round3(B, C, D, A, Data[6] + Longint($04881D05), 23); - Round3(A, B, C, D, Data[9] + Longint($D9D4D039), 4); - Round3(D, A, B, C, Data[12] + Longint($E6DB99E5), 11); - Round3(C, D, A, B, Data[15] + Longint($1FA27CF8), 16); - Round3(B, C, D, A, Data[2] + Longint($C4AC5665), 23); - - Round4(A, B, C, D, Data[0] + Longint($F4292244), 6); - Round4(D, A, B, C, Data[7] + Longint($432AFF97), 10); - Round4(C, D, A, B, Data[14] + Longint($AB9423A7), 15); - Round4(B, C, D, A, Data[5] + Longint($FC93A039), 21); - Round4(A, B, C, D, Data[12] + Longint($655B59C3), 6); - Round4(D, A, B, C, Data[3] + Longint($8F0CCC92), 10); - Round4(C, D, A, B, Data[10] + Longint($FFEFF47D), 15); - Round4(B, C, D, A, Data[1] + Longint($85845DD1), 21); - Round4(A, B, C, D, Data[8] + Longint($6FA87E4F), 6); - Round4(D, A, B, C, Data[15] + Longint($FE2CE6E0), 10); - Round4(C, D, A, B, Data[6] + Longint($A3014314), 15); - Round4(B, C, D, A, Data[13] + Longint($4E0811A1), 21); - Round4(A, B, C, D, Data[4] + Longint($F7537E82), 6); - Round4(D, A, B, C, Data[11] + Longint($BD3AF235), 10); - Round4(C, D, A, B, Data[2] + Longint($2AD7D2BB), 15); - Round4(B, C, D, A, Data[9] + Longint($EB86D391), 21); - - Inc(Buf[0], A); - Inc(Buf[1], B); - Inc(Buf[2], C); - Inc(Buf[3], D); -end; - -//fixed by James McAdams -procedure MDUpdate(var MDContext: TMDCtx; const Data: AnsiString; transform: TMDTransform); -var - Index, partLen, InputLen, I: integer; -{$IFDEF CIL} - n: integer; -{$ENDIF} -begin - InputLen := Length(Data); - with MDContext do - begin - Index := (Count[0] shr 3) and $3F; - Inc(Count[0], InputLen shl 3); - if Count[0] < (InputLen shl 3) then - Inc(Count[1]); - Inc(Count[1], InputLen shr 29); - partLen := 64 - Index; - if InputLen >= partLen then - begin - ArrLongToByte(BufLong, BufAnsiChar); - {$IFDEF CIL} - for n := 1 to partLen do - BufAnsiChar[index - 1 + n] := Ord(Data[n]); - {$ELSE} - Move(Data[1], BufAnsiChar[Index], partLen); - {$ENDIF} - ArrByteToLong(BufAnsiChar, BufLong); - Transform(State, Buflong); - I := partLen; - while I + 63 < InputLen do - begin - ArrLongToByte(BufLong, BufAnsiChar); - {$IFDEF CIL} - for n := 1 to 64 do - BufAnsiChar[n - 1] := Ord(Data[i + n]); - {$ELSE} - Move(Data[I+1], BufAnsiChar, 64); - {$ENDIF} - ArrByteToLong(BufAnsiChar, BufLong); - Transform(State, Buflong); - inc(I, 64); - end; - Index := 0; - end - else - I := 0; - ArrLongToByte(BufLong, BufAnsiChar); - {$IFDEF CIL} - for n := 1 to InputLen-I do - BufAnsiChar[Index + n - 1] := Ord(Data[i + n]); - {$ELSE} - Move(Data[I+1], BufAnsiChar[Index], InputLen-I); - {$ENDIF} - ArrByteToLong(BufAnsiChar, BufLong); - end -end; - -function MDFinal(var MDContext: TMDCtx; transform: TMDTransform): AnsiString; -var - Cnt: Word; - P: Byte; - digest: array[0..15] of Byte; - i: Integer; - n: integer; -begin - for I := 0 to 15 do - Digest[I] := I + 1; - with MDContext do - begin - Cnt := (Count[0] shr 3) and $3F; - P := Cnt; - BufAnsiChar[P] := $80; - Inc(P); - Cnt := 64 - 1 - Cnt; - if Cnt < 8 then - begin - for n := 0 to cnt - 1 do - BufAnsiChar[P + n] := 0; - ArrByteToLong(BufAnsiChar, BufLong); -// FillChar(BufAnsiChar[P], Cnt, #0); - Transform(State, BufLong); - ArrLongToByte(BufLong, BufAnsiChar); - for n := 0 to 55 do - BufAnsiChar[n] := 0; - ArrByteToLong(BufAnsiChar, BufLong); -// FillChar(BufAnsiChar, 56, #0); - end - else - begin - for n := 0 to Cnt - 8 - 1 do - BufAnsiChar[p + n] := 0; - ArrByteToLong(BufAnsiChar, BufLong); -// FillChar(BufAnsiChar[P], Cnt - 8, #0); - end; - BufLong[14] := Count[0]; - BufLong[15] := Count[1]; - Transform(State, BufLong); - ArrLongToByte(State, Digest); -// Move(State, Digest, 16); - Result := ''; - for i := 0 to 15 do - Result := Result + AnsiChar(digest[i]); - end; -// FillChar(MD5Context, SizeOf(TMD5Ctx), #0) -end; - -{==============================================================================} - -function MD5(const Value: AnsiString): AnsiString; -var - MDContext: TMDCtx; -begin - MDInit(MDContext); - MDUpdate(MDContext, Value, @MD5Transform); - Result := MDFinal(MDContext, @MD5Transform); -end; - -{==============================================================================} - -function HMAC_MD5(Text, Key: AnsiString): AnsiString; -var - ipad, opad, s: AnsiString; - n: Integer; - MDContext: TMDCtx; -begin - if Length(Key) > 64 then - Key := md5(Key); - ipad := StringOfChar(#$36, 64); - opad := StringOfChar(#$5C, 64); - for n := 1 to Length(Key) do - begin - ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); - opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); - end; - MDInit(MDContext); - MDUpdate(MDContext, ipad, @MD5Transform); - MDUpdate(MDContext, Text, @MD5Transform); - s := MDFinal(MDContext, @MD5Transform); - MDInit(MDContext); - MDUpdate(MDContext, opad, @MD5Transform); - MDUpdate(MDContext, s, @MD5Transform); - Result := MDFinal(MDContext, @MD5Transform); -end; - -{==============================================================================} - -function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; -var - cnt, rest: integer; - l: integer; - n: integer; - MDContext: TMDCtx; -begin - l := length(Value); - cnt := Len div l; - rest := Len mod l; - MDInit(MDContext); - for n := 1 to cnt do - MDUpdate(MDContext, Value, @MD5Transform); - if rest > 0 then - MDUpdate(MDContext, Copy(Value, 1, rest), @MD5Transform); - Result := MDFinal(MDContext, @MD5Transform); -end; - -{==============================================================================} -// SHA1 is based on sources by Dave Barton (davebarton@bigfoot.com) - -procedure SHA1init( var SHA1Context: TSHA1Ctx ); -var - n: integer; -begin - SHA1Context.Hi := 0; - SHA1Context.Lo := 0; - SHA1Context.Index := 0; - for n := 0 to High(SHA1Context.Buffer) do - SHA1Context.Buffer[n] := 0; - for n := 0 to High(SHA1Context.HashByte) do - SHA1Context.HashByte[n] := 0; -// FillChar(SHA1Context, SizeOf(TSHA1Ctx), #0); - SHA1Context.Hash[0] := integer($67452301); - SHA1Context.Hash[1] := integer($EFCDAB89); - SHA1Context.Hash[2] := integer($98BADCFE); - SHA1Context.Hash[3] := integer($10325476); - SHA1Context.Hash[4] := integer($C3D2E1F0); -end; - -//****************************************************************************** -function RB(A: integer): integer; -begin - Result := (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24); -end; - -procedure SHA1Compress(var Data: TSHA1Ctx); -var - A, B, C, D, E, T: integer; - W: array[0..79] of integer; - i: integer; - n: integer; - - function F1(x, y, z: integer): integer; - begin - Result := z xor (x and (y xor z)); - end; - function F2(x, y, z: integer): integer; - begin - Result := x xor y xor z; - end; - function F3(x, y, z: integer): integer; - begin - Result := (x and y) or (z and (x or y)); - end; - function LRot32(X: integer; c: integer): integer; - begin - result := (x shl c) or (x shr (32 - c)); - end; -begin - ArrByteToLong(Data.Buffer, W); -// Move(Data.Buffer, W, Sizeof(Data.Buffer)); - for i := 0 to 15 do - W[i] := RB(W[i]); - for i := 16 to 79 do - W[i] := LRot32(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16], 1); - A := Data.Hash[0]; - B := Data.Hash[1]; - C := Data.Hash[2]; - D := Data.Hash[3]; - E := Data.Hash[4]; - for i := 0 to 19 do - begin - T := LRot32(A, 5) + F1(B, C, D) + E + W[i] + integer($5A827999); - E := D; - D := C; - C := LRot32(B, 30); - B := A; - A := T; - end; - for i := 20 to 39 do - begin - T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($6ED9EBA1); - E := D; - D := C; - C := LRot32(B, 30); - B := A; - A := T; - end; - for i := 40 to 59 do - begin - T := LRot32(A, 5) + F3(B, C, D) + E + W[i] + integer($8F1BBCDC); - E := D; - D := C; - C := LRot32(B, 30); - B := A; - A := T; - end; - for i := 60 to 79 do - begin - T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($CA62C1D6); - E := D; - D := C; - C := LRot32(B, 30); - B := A; - A := T; - end; - Data.Hash[0] := Data.Hash[0] + A; - Data.Hash[1] := Data.Hash[1] + B; - Data.Hash[2] := Data.Hash[2] + C; - Data.Hash[3] := Data.Hash[3] + D; - Data.Hash[4] := Data.Hash[4] + E; - for n := 0 to high(w) do - w[n] := 0; -// FillChar(W, Sizeof(W), 0); - for n := 0 to high(Data.Buffer) do - Data.Buffer[n] := 0; -// FillChar(Data.Buffer, Sizeof(Data.Buffer), 0); -end; - -//****************************************************************************** -procedure SHA1Update(var Context: TSHA1Ctx; const Data: AnsiString); -var - Len: integer; - n: integer; - i, k: integer; -begin - Len := Length(data); - for k := 0 to 7 do - begin - i := Context.Lo; - Inc(Context.Lo, Len); - if Context.Lo < i then - Inc(Context.Hi); - end; - for n := 1 to len do - begin - Context.Buffer[Context.Index] := byte(Data[n]); - Inc(Context.Index); - if Context.Index = 64 then - begin - Context.Index := 0; - SHA1Compress(Context); - end; - end; -end; - -//****************************************************************************** -function SHA1Final(var Context: TSHA1Ctx): AnsiString; -type - Pinteger = ^integer; -var - i: integer; - procedure ItoArr(var Ar: Array of byte; I, value: Integer); - begin - Ar[i + 0] := Value and $000000FF; - Ar[i + 1] := (Value shr 8) and $000000FF; - Ar[i + 2] := (Value shr 16) and $000000FF; - Ar[i + 3] := (Value shr 24) and $000000FF; - end; -begin - Context.Buffer[Context.Index] := $80; - if Context.Index >= 56 then - SHA1Compress(Context); - ItoArr(Context.Buffer, 56, RB(Context.Hi)); - ItoArr(Context.Buffer, 60, RB(Context.Lo)); -// Pinteger(@Context.Buffer[56])^ := RB(Context.Hi); -// Pinteger(@Context.Buffer[60])^ := RB(Context.Lo); - SHA1Compress(Context); - Context.Hash[0] := RB(Context.Hash[0]); - Context.Hash[1] := RB(Context.Hash[1]); - Context.Hash[2] := RB(Context.Hash[2]); - Context.Hash[3] := RB(Context.Hash[3]); - Context.Hash[4] := RB(Context.Hash[4]); - ArrLongToByte(Context.Hash, Context.HashByte); - Result := ''; - for i := 0 to 19 do - Result := Result + AnsiChar(Context.HashByte[i]); -end; - -function SHA1(const Value: AnsiString): AnsiString; -var - SHA1Context: TSHA1Ctx; -begin - SHA1Init(SHA1Context); - SHA1Update(SHA1Context, Value); - Result := SHA1Final(SHA1Context); -end; - -{==============================================================================} - -function HMAC_SHA1(Text, Key: AnsiString): AnsiString; -var - ipad, opad, s: AnsiString; - n: Integer; - SHA1Context: TSHA1Ctx; -begin - if Length(Key) > 64 then - Key := SHA1(Key); - ipad := StringOfChar(#$36, 64); - opad := StringOfChar(#$5C, 64); - for n := 1 to Length(Key) do - begin - ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); - opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); - end; - SHA1Init(SHA1Context); - SHA1Update(SHA1Context, ipad); - SHA1Update(SHA1Context, Text); - s := SHA1Final(SHA1Context); - SHA1Init(SHA1Context); - SHA1Update(SHA1Context, opad); - SHA1Update(SHA1Context, s); - Result := SHA1Final(SHA1Context); -end; - -{==============================================================================} - -function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; -var - cnt, rest: integer; - l: integer; - n: integer; - SHA1Context: TSHA1Ctx; -begin - l := length(Value); - cnt := Len div l; - rest := Len mod l; - SHA1Init(SHA1Context); - for n := 1 to cnt do - SHA1Update(SHA1Context, Value); - if rest > 0 then - SHA1Update(SHA1Context, Copy(Value, 1, rest)); - Result := SHA1Final(SHA1Context); -end; - -{==============================================================================} - -procedure MD4Transform(var Buf: array of LongInt; const Data: array of LongInt); -var - A, B, C, D: LongInt; - function LRot32(a, b: longint): longint; - begin - Result:= (a shl b) or (a shr (32 - b)); - end; -begin - A := Buf[0]; - B := Buf[1]; - C := Buf[2]; - D := Buf[3]; - - A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 0], 3); - D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 1], 7); - C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 2], 11); - B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 3], 19); - A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 4], 3); - D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 5], 7); - C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 6], 11); - B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 7], 19); - A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 8], 3); - D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 9], 7); - C:= LRot32(C + (B xor (D and (A xor B))) + Data[10], 11); - B:= LRot32(B + (A xor (C and (D xor A))) + Data[11], 19); - A:= LRot32(A + (D xor (B and (C xor D))) + Data[12], 3); - D:= LRot32(D + (C xor (A and (B xor C))) + Data[13], 7); - C:= LRot32(C + (B xor (D and (A xor B))) + Data[14], 11); - B:= LRot32(B + (A xor (C and (D xor A))) + Data[15], 19); - - A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 0] + longint($5a827999), 3); - D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 4] + longint($5a827999), 5); - C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 8] + longint($5a827999), 9); - B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[12] + longint($5a827999), 13); - A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 1] + longint($5a827999), 3); - D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 5] + longint($5a827999), 5); - C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 9] + longint($5a827999), 9); - B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[13] + longint($5a827999), 13); - A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 2] + longint($5a827999), 3); - D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 6] + longint($5a827999), 5); - C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[10] + longint($5a827999), 9); - B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[14] + longint($5a827999), 13); - A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 3] + longint($5a827999), 3); - D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 7] + longint($5a827999), 5); - C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[11] + longint($5a827999), 9); - B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[15] + longint($5a827999), 13); - - A:= LRot32(A + (B xor C xor D) + Data[ 0] + longint($6ed9eba1), 3); - D:= LRot32(D + (A xor B xor C) + Data[ 8] + longint($6ed9eba1), 9); - C:= LRot32(C + (D xor A xor B) + Data[ 4] + longint($6ed9eba1), 11); - B:= LRot32(B + (C xor D xor A) + Data[12] + longint($6ed9eba1), 15); - A:= LRot32(A + (B xor C xor D) + Data[ 2] + longint($6ed9eba1), 3); - D:= LRot32(D + (A xor B xor C) + Data[10] + longint($6ed9eba1), 9); - C:= LRot32(C + (D xor A xor B) + Data[ 6] + longint($6ed9eba1), 11); - B:= LRot32(B + (C xor D xor A) + Data[14] + longint($6ed9eba1), 15); - A:= LRot32(A + (B xor C xor D) + Data[ 1] + longint($6ed9eba1), 3); - D:= LRot32(D + (A xor B xor C) + Data[ 9] + longint($6ed9eba1), 9); - C:= LRot32(C + (D xor A xor B) + Data[ 5] + longint($6ed9eba1), 11); - B:= LRot32(B + (C xor D xor A) + Data[13] + longint($6ed9eba1), 15); - A:= LRot32(A + (B xor C xor D) + Data[ 3] + longint($6ed9eba1), 3); - D:= LRot32(D + (A xor B xor C) + Data[11] + longint($6ed9eba1), 9); - C:= LRot32(C + (D xor A xor B) + Data[ 7] + longint($6ed9eba1), 11); - B:= LRot32(B + (C xor D xor A) + Data[15] + longint($6ed9eba1), 15); - - Inc(Buf[0], A); - Inc(Buf[1], B); - Inc(Buf[2], C); - Inc(Buf[3], D); -end; - -{==============================================================================} - -function MD4(const Value: AnsiString): AnsiString; -var - MDContext: TMDCtx; -begin - MDInit(MDContext); - MDUpdate(MDContext, Value, @MD4Transform); - Result := MDFinal(MDContext, @MD4Transform); -end; - -{==============================================================================} - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synafpc.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synafpc.pas deleted file mode 100644 index 0370d5e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synafpc.pas +++ /dev/null @@ -1,131 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 001.001.000 | -|==============================================================================| -| Content: Utils for FreePascal compatibility | -|==============================================================================| -| Copyright (c)1999-2006, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)2003-2006. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@exclude} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$H+} - -unit synafpc; - -interface - -uses -{$IFDEF FPC} - dynlibs, sysutils; -{$ELSE} - {$IFDEF WIN32} - Windows; - {$ELSE} - Sysutils; - {$ENDIF} -{$ENDIF} - -{$IFDEF FPC} -type - TLibHandle = dynlibs.TLibHandle; - -function LoadLibrary(ModuleName: PChar): TLibHandle; -function FreeLibrary(Module: TLibHandle): LongBool; -function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; -function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; -{$ELSE} -type - {$IFDEF CIL} - TLibHandle = Integer; - {$ELSE} - TLibHandle = HModule; - {$ENDIF} - {$IFDEF VER100} - LongWord = DWord; - {$ENDIF} -{$ENDIF} - -procedure Sleep(milliseconds: Cardinal); - - -implementation - -{==============================================================================} -{$IFDEF FPC} -function LoadLibrary(ModuleName: PChar): TLibHandle; -begin - Result := dynlibs.LoadLibrary(Modulename); -end; - -function FreeLibrary(Module: TLibHandle): LongBool; -begin - Result := dynlibs.UnloadLibrary(Module); -end; - -function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; -begin - Result := dynlibs.GetProcedureAddress(Module, Proc); -end; - -function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; -begin - Result := 0; -end; - -{$ELSE} -{$ENDIF} - -procedure Sleep(milliseconds: Cardinal); -begin -{$IFDEF WIN32} - {$IFDEF FPC} - sysutils.sleep(milliseconds); - {$ELSE} - windows.sleep(milliseconds); - {$ENDIF} -{$ELSE} - sysutils.sleep(milliseconds); -{$ENDIF} - -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synaip.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synaip.pas deleted file mode 100644 index f365a6f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synaip.pas +++ /dev/null @@ -1,397 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 001.000.002 | -|==============================================================================| -| Content: IP address support procedures and functions | -|==============================================================================| -| Copyright (c)2006, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c) 2006. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@abstract(IP adress support procedures and functions)} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$Q-} -{$R-} -{$H+} - -unit synaip; - -interface - -uses - SysUtils, SynaUtil; - -type -{:binary form of IPv6 adress (for string conversion routines)} - TIp6Bytes = array [0..15] of Byte; -{:binary form of IPv6 adress (for string conversion routines)} - TIp6Words = array [0..7] of Word; - -{:Returns @TRUE, if "Value" is a valid IPv4 address. Cannot be a symbolic Name!} -function IsIP(const Value: string): Boolean; - -{:Returns @TRUE, if "Value" is a valid IPv6 address. Cannot be a symbolic Name!} -function IsIP6(const Value: string): Boolean; - -{:Returns a string with the "Host" ip address converted to binary form.} -function IPToID(Host: string): string; - -{:Convert IPv6 address from their string form to binary byte array.} -function StrToIp6(value: string): TIp6Bytes; - -{:Convert IPv6 address from binary byte array to string form.} -function Ip6ToStr(value: TIp6Bytes): string; - -{:Convert IPv4 address from their string form to binary.} -function StrToIp(value: string): integer; - -{:Convert IPv4 address from binary to string form.} -function IpToStr(value: integer): string; - -{:Convert IPv4 address to reverse form.} -function ReverseIP(Value: AnsiString): AnsiString; - -{:Convert IPv6 address to reverse form.} -function ReverseIP6(Value: AnsiString): AnsiString; - - -implementation - -{==============================================================================} - -function IsIP(const Value: string): Boolean; -var - TempIP: string; - function ByteIsOk(const Value: string): Boolean; - var - x, n: integer; - begin - x := StrToIntDef(Value, -1); - Result := (x >= 0) and (x < 256); - // X may be in correct range, but value still may not be correct value! - // i.e. "$80" - if Result then - for n := 1 to length(Value) do - if not (Value[n] in ['0'..'9']) then - begin - Result := False; - Break; - end; - end; -begin - TempIP := Value; - Result := False; - if not ByteIsOk(Fetch(TempIP, '.')) then - Exit; - if not ByteIsOk(Fetch(TempIP, '.')) then - Exit; - if not ByteIsOk(Fetch(TempIP, '.')) then - Exit; - if ByteIsOk(TempIP) then - Result := True; -end; - -{==============================================================================} - -function IsIP6(const Value: string): Boolean; -var - TempIP: string; - s,t: string; - x: integer; - partcount: integer; - zerocount: integer; - First: Boolean; -begin - TempIP := Value; - Result := False; - if Value = '::' then - begin - Result := True; - Exit; - end; - partcount := 0; - zerocount := 0; - First := True; - while tempIP <> '' do - begin - s := fetch(TempIP, ':'); - if not(First) and (s = '') then - Inc(zerocount); - First := False; - if zerocount > 1 then - break; - Inc(partCount); - if s = '' then - Continue; - if partCount > 8 then - break; - if tempIP = '' then - begin - t := SeparateRight(s, '%'); - s := SeparateLeft(s, '%'); - x := StrToIntDef('$' + t, -1); - if (x < 0) or (x > $ffff) then - break; - end; - x := StrToIntDef('$' + s, -1); - if (x < 0) or (x > $ffff) then - break; - if tempIP = '' then - if not((PartCount = 1) and (ZeroCount = 0)) then - Result := True; - end; -end; - -{==============================================================================} -function IPToID(Host: string): string; -var - s: string; - i, x: Integer; -begin - Result := ''; - for x := 0 to 3 do - begin - s := Fetch(Host, '.'); - i := StrToIntDef(s, 0); - Result := Result + Chr(i); - end; -end; - -{==============================================================================} - -function StrToIp(value: string): integer; -var - s: string; - i, x: Integer; -begin - Result := 0; - for x := 0 to 3 do - begin - s := Fetch(value, '.'); - i := StrToIntDef(s, 0); - Result := (256 * Result) + i; - end; -end; - -{==============================================================================} - -function IpToStr(value: integer): string; -var - x1, x2: word; - y1, y2: byte; -begin - Result := ''; - x1 := value shr 16; - x2 := value and $FFFF; - y1 := x1 div $100; - y2 := x1 mod $100; - Result := inttostr(y1) + '.' + inttostr(y2) + '.'; - y1 := x2 div $100; - y2 := x2 mod $100; - Result := Result + inttostr(y1) + '.' + inttostr(y2); -end; - -{==============================================================================} - -function StrToIp6(Value: string): TIp6Bytes; -var - IPv6: TIp6Words; - Index: Integer; - ZeroAt: Integer; - n: integer; - b1, b2: byte; - s: string; - x: integer; -begin - for n := 0 to 15 do - Result[n] := 0; - for n := 0 to 7 do - Ipv6[n] := 0; - Index := 0; - ZeroAt := -1; - - while Value <> '' do - begin - if Index > 7 then - Exit; - s := fetch(value, ':'); - if s = '@' then - break; - if s = '' then - begin - ZeroAt := Index; - IPv6[Index] := 0; - end - else - begin - x := StrToIntDef('$' + s, -1); - if (x > 65535) or (x < 0) then - Exit; - IPv6[Index] := x; - end; - Inc(Index); - end; - if ZeroAt >= 0 then - Begin - x := Index - ZeroAt - 1; - for n := 1 to x do - IPv6[7 - n + 1] := Ipv6[ZeroAt + x - 1 + n]; - for n := ZeroAt + 1 to Index - 1 do - IPv6[n] := 0; - End; - for n := 0 to 7 do - begin - b1 := ipv6[n] div 256; - b2 := ipv6[n] mod 256; - Result[n * 2] := b1; - Result[(n * 2) + 1] := b2; - end; -end; - -{==============================================================================} -//based on routine by the Free Pascal development team -function Ip6ToStr(value: TIp6Bytes): string; -var - i, x: byte; - zr1,zr2: set of byte; - zc1,zc2: byte; - have_skipped: boolean; - ip6w: TIp6words; -begin - zr1 := []; - zr2 := []; - zc1 := 0; - zc2 := 0; - for i := 0 to 7 do - begin - x := i * 2; - ip6w[i] := value[x] * 256 + value[x + 1]; - if ip6w[i] = 0 then - begin - include(zr2, i); - inc(zc2); - end - else - begin - if zc1 < zc2 then - begin - zc1 := zc2; - zr1 := zr2; - zc2 := 0; - zr2 := []; - end; - end; - end; - if zc1 < zc2 then - begin - zr1 := zr2; - end; - SetLength(Result, 8*5-1); - SetLength(Result, 0); - have_skipped := false; - for i := 0 to 7 do - begin - if not(i in zr1) then - begin - if have_skipped then - begin - if Result = '' then - Result := '::' - else - Result := Result + ':'; - have_skipped := false; - end; - Result := Result + IntToHex(Ip6w[i], 1) + ':'; - end - else - begin - have_skipped := true; - end; - end; - if have_skipped then - if Result = '' then - Result := '::0' - else - Result := Result + ':'; - - if Result = '' then - Result := '::0'; - if not (7 in zr1) then - SetLength(Result, Length(Result)-1); - Result := LowerCase(result); -end; - -{==============================================================================} -function ReverseIP(Value: AnsiString): AnsiString; -var - x: Integer; -begin - Result := ''; - repeat - x := LastDelimiter('.', Value); - Result := Result + '.' + Copy(Value, x + 1, Length(Value) - x); - Delete(Value, x, Length(Value) - x + 1); - until x < 1; - if Length(Result) > 0 then - if Result[1] = '.' then - Delete(Result, 1, 1); -end; - -{==============================================================================} -function ReverseIP6(Value: AnsiString): AnsiString; -var - ip6: TIp6bytes; - n: integer; - x, y: integer; -begin - ip6 := StrToIP6(Value); - x := ip6[15] div 16; - y := ip6[15] mod 16; - Result := IntToHex(y, 1) + '.' + IntToHex(x, 1); - for n := 14 downto 0 do - begin - x := ip6[n] div 16; - y := ip6[n] mod 16; - Result := Result + '.' + IntToHex(y, 1) + '.' + IntToHex(x, 1); - end; -end; - -{==============================================================================} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synautil.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synautil.pas deleted file mode 100644 index dfa970d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synautil.pas +++ /dev/null @@ -1,1769 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 004.011.003 | -|==============================================================================| -| Content: support procedures and functions | -|==============================================================================| -| Copyright (c)1999-2005, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c) 1999-2005. | -| Portions created by Hernan Sanchez are Copyright (c) 2000. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -| Hernan Sanchez (hernan.sanchez@iname.com) | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@abstract(Support procedures and functions)} - -{$IFDEF FPC} - {$MODE DELPHI} -{$ENDIF} -{$Q-} -{$R-} -{$H+} - -unit synautil; - -interface - -uses -{$IFDEF WIN32} - Windows, -{$ELSE} - {$IFDEF FPC} - UnixUtil, Unix, BaseUnix, - {$ELSE} - Libc, - {$ENDIF} -{$ENDIF} -{$IFDEF CIL} - System.IO, -{$ENDIF} - SysUtils, Classes, SynaFpc; - -{:Return your timezone bias from UTC time in minutes.} -function TimeZoneBias: integer; - -{:Return your timezone bias from UTC time in string representation like "+0200".} -function TimeZone: string; - -{:Returns current time in format defined in RFC-822. Useful for SMTP messages, - but other protocols use this time format as well. Results contains the timezone - specification. Four digit year is used to break any Y2K concerns. (Example - 'Fri, 15 Oct 1999 21:14:56 +0200')} -function Rfc822DateTime(t: TDateTime): string; - -{:Returns date and time in format defined in C compilers in format "mmm dd hh:nn:ss"} -function CDateTime(t: TDateTime): string; - -{:Returns date and time in format defined in format 'yymmdd hhnnss'} -function SimpleDateTime(t: TDateTime): string; - -{:Returns date and time in format defined in ANSI C compilers in format - "ddd mmm d hh:nn:ss yyyy" } -function AnsiCDateTime(t: TDateTime): string; - -{:Decode three-letter string with name of month to their month number. If string - not match any month name, then is returned 0. For parsing are used predefined - names for English, French and German and names from system locale too.} -function GetMonthNumber(Value: AnsiString): integer; - -{:Return decoded time from given string. Time must be witch separator ':'. You - can use "hh:mm" or "hh:mm:ss".} -function GetTimeFromStr(Value: string): TDateTime; - -{:Decode string in format "m-d-y" to TDateTime type.} -function GetDateMDYFromStr(Value: string): TDateTime; - -{:Decode various string representations of date and time to Tdatetime type. - This function do all timezone corrections too! This function can decode lot of - formats like: - @longcode(# - ddd, d mmm yyyy hh:mm:ss - ddd, d mmm yy hh:mm:ss - ddd, mmm d yyyy hh:mm:ss - ddd mmm dd hh:mm:ss yyyy #) - -and more with lot of modifications, include: -@longcode(# -Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 -Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 -Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format -#) -Timezone corrections known lot of symbolic timezone names (like CEST, EDT, etc.) -or numeric representation (like +0200). By convention defined in RFC timezone - +0000 is GMT and -0000 is current your system timezone.} -function DecodeRfcDateTime(Value: string): TDateTime; - -{:Return current system date and time in UTC timezone.} -function GetUTTime: TDateTime; - -{:Set Newdt as current system date and time in UTC timezone. This function work - only if you have administrator rights!} -function SetUTTime(Newdt: TDateTime): Boolean; - -{:Return current value of system timer with precizion 1 millisecond. Good for - measure time difference.} -function GetTick: LongWord; - -{:Return difference between two timestamps. It working fine only for differences - smaller then maxint. (difference must be smaller then 24 days.)} -function TickDelta(TickOld, TickNew: LongWord): LongWord; - -{:Return two characters, which ordinal values represents the value in byte - format. (High-endian)} -function CodeInt(Value: Word): Ansistring; - -{:Decodes two characters located at "Index" offset position of the "Value" - string to Word values.} -function DecodeInt(const Value: Ansistring; Index: Integer): Word; - -{:Return four characters, which ordinal values represents the value in byte - format. (High-endian)} -function CodeLongInt(Value: LongInt): Ansistring; - -{:Decodes four characters located at "Index" offset position of the "Value" - string to LongInt values.} -function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; - -{:Dump binary buffer stored in a string to a result string.} -function DumpStr(const Buffer: Ansistring): string; - -{:Dump binary buffer stored in a string to a result string. All bytes with code - of character is written as character, not as hexadecimal value.} -function DumpExStr(const Buffer: Ansistring): string; - -{:Dump binary buffer stored in a string to a file with DumpFile filename.} -procedure Dump(const Buffer: AnsiString; DumpFile: string); - -{:Dump binary buffer stored in a string to a file with DumpFile filename. All - bytes with code of character is written as character, not as hexadecimal value.} -procedure DumpEx(const Buffer: AnsiString; DumpFile: string); - -{:Like TrimLeft, but remove only spaces, not control characters!} -function TrimSPLeft(const S: string): string; - -{:Like TrimRight, but remove only spaces, not control characters!} -function TrimSPRight(const S: string): string; - -{:Like Trim, but remove only spaces, not control characters!} -function TrimSP(const S: string): string; - -{:Returns a portion of the "Value" string located to the left of the "Delimiter" - string. If a delimiter is not found, results is original string.} -function SeparateLeft(const Value, Delimiter: string): string; - -{:Returns the portion of the "Value" string located to the right of the - "Delimiter" string. If a delimiter is not found, results is original string.} -function SeparateRight(const Value, Delimiter: string): string; - -{:Returns parameter value from string in format: - parameter1="value1"; parameter2=value2} -function GetParameter(const Value, Parameter: string): string; - -{:parse value string with elements differed by Delimiter into stringlist.} -procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); - -{:parse value string with elements differed by ';' into stringlist.} -procedure ParseParameters(Value: string; const Parameters: TStrings); - -{:Index of string in stringlist with same beginning as Value is returned.} -function IndexByBegin(Value: string; const List: TStrings): integer; - -{:Returns only the e-mail portion of an address from the full address format. - i.e. returns 'nobody@@somewhere.com' from '"someone" '} -function GetEmailAddr(const Value: string): string; - -{:Returns only the description part from a full address format. i.e. returns - 'someone' from '"someone" '} -function GetEmailDesc(Value: string): string; - -{:Returns a string with hexadecimal digits representing the corresponding values - of the bytes found in "Value" string.} -function StrToHex(const Value: Ansistring): string; - -{:Returns a string of binary "Digits" representing "Value".} -function IntToBin(Value: Integer; Digits: Byte): string; - -{:Returns an integer equivalent of the binary string in "Value". - (i.e. ('10001010') returns 138)} -function BinToInt(const Value: string): Integer; - -{:Parses a URL to its various components.} -function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, - Para: string): string; - -{:Replaces all "Search" string values found within "Value" string, with the - "Replace" string value.} -function ReplaceString(Value, Search, Replace: string): string; - -{:It is like RPos, but search is from specified possition.} -function RPosEx(const Sub, Value: string; From: integer): Integer; - -{:It is like POS function, but from right side of Value string.} -function RPos(const Sub, Value: String): Integer; - -{:Like @link(fetch), but working with binary strings, not with text.} -function FetchBin(var Value: string; const Delimiter: string): string; - -{:Fetch string from left of Value string.} -function Fetch(var Value: string; const Delimiter: string): string; - -{:Fetch string from left of Value string. This function ignore delimitesr inside - quotations.} -function FetchEx(var Value: string; const Delimiter, Quotation: string): string; - -{:If string is binary string (contains non-printable characters), then is - returned true.} -function IsBinaryString(const Value: string): Boolean; - -{:return position of string terminator in string. If terminator found, then is - returned in terminator parameter. - Possible line terminators are: CRLF, LFCR, CR, LF} -function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; - -{:Delete empty strings from end of stringlist.} -Procedure StringsTrim(const value: TStrings); - -{:Like Pos function, buf from given string possition.} -function PosFrom(const SubStr, Value: String; From: integer): integer; - -{$IFNDEF CIL} -{:Increase pointer by value.} -function IncPoint(const p: pointer; Value: integer): pointer; -{$ENDIF} - -{:Get string between PairBegin and PairEnd. This function respect nesting. - For example: - @longcode(# - Value is: 'Hi! (hello(yes!))' - pairbegin is: '(' - pairend is: ')' - In this case result is: 'hello(yes!)'#)} -function GetBetween(const PairBegin, PairEnd, Value: string): string; - -{:Return count of Chr in Value string.} -function CountOfChar(const Value: string; Chr: char): integer; - -{:Remove quotation from Value string. If Value is not quoted, then return same - string without any modification. } -function UnquoteStr(const Value: string; Quote: Char): string; - -{:Quote Value string. If Value contains some Quote chars, then it is doubled.} -function QuoteStr(const Value: string; Quote: Char): string; - -{:Convert lines in stringlist from 'name: value' form to 'name=value' form.} -procedure HeadersToList(const Value: TStrings); - -{:Convert lines in stringlist from 'name=value' form to 'name: value' form.} -procedure ListToHeaders(const Value: TStrings); - -{:swap bytes in integer.} -function SwapBytes(Value: integer): integer; - -{:read string with requested length form stream.} -function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; - -{:write string to stream.} -procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); - -{:Return filename of new temporary file in Dir (if empty, then default temporary - directory is used) and with optional filename prefix.} -function GetTempFile(const Dir, prefix: AnsiString): AnsiString; - -{:Return padded string. If length is greater, string is truncated. If length is - smaller, string is padded by Pad character.} -function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; - -var - {:can be used for your own months strings for @link(getmonthnumber)} - CustomMonthNames: array[1..12] of string; - -implementation - -{==============================================================================} - -const - MyDayNames: array[1..7] of AnsiString = - ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); -var - MyMonthNames: array[0..6, 1..12] of AnsiString = - ( - ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //rewrited by system locales - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), - ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //English - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), - ('jan', 'fév', 'mar', 'avr', 'mai', 'jun', //French - 'jul', 'aoû', 'sep', 'oct', 'nov', 'déc'), - ('jan', 'fev', 'mar', 'avr', 'mai', 'jun', //French#2 - 'jul', 'aou', 'sep', 'oct', 'nov', 'dec'), - ('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', //German - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), - ('Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', //German#2 - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), - ('Led', 'Úno', 'Bøe', 'Dub', 'Kvì', 'Èen', //Czech - 'Èec', 'Srp', 'Záø', 'Øíj', 'Lis', 'Pro') - ); - - -{==============================================================================} - -function TimeZoneBias: integer; -{$IFNDEF WIN32} -{$IFNDEF FPC} -var - t: TTime_T; - UT: TUnixTime; -begin - __time(@T); - localtime_r(@T, UT); - Result := ut.__tm_gmtoff div 60; -{$ELSE} -begin - Result := TZSeconds div 60; -{$ENDIF} -{$ELSE} -var - zoneinfo: TTimeZoneInformation; - bias: Integer; -begin - case GetTimeZoneInformation(Zoneinfo) of - 2: - bias := zoneinfo.Bias + zoneinfo.DaylightBias; - 1: - bias := zoneinfo.Bias + zoneinfo.StandardBias; - else - bias := zoneinfo.Bias; - end; - Result := bias * (-1); -{$ENDIF} -end; - -{==============================================================================} - -function TimeZone: string; -var - bias: Integer; - h, m: Integer; -begin - bias := TimeZoneBias; - if bias >= 0 then - Result := '+' - else - Result := '-'; - bias := Abs(bias); - h := bias div 60; - m := bias mod 60; - Result := Result + Format('%.2d%.2d', [h, m]); -end; - -{==============================================================================} - -function Rfc822DateTime(t: TDateTime): string; -var - wYear, wMonth, wDay: word; -begin - DecodeDate(t, wYear, wMonth, wDay); - Result := Format('%s, %d %s %s %s', [MyDayNames[DayOfWeek(t)], wDay, - MyMonthNames[1, wMonth], FormatDateTime('yyyy hh":"nn":"ss', t), TimeZone]); -end; - -{==============================================================================} - -function CDateTime(t: TDateTime): string; -var - wYear, wMonth, wDay: word; -begin - DecodeDate(t, wYear, wMonth, wDay); - Result:= Format('%s %2d %s', [MyMonthNames[1, wMonth], wDay, - FormatDateTime('hh":"nn":"ss', t)]); -end; - -{==============================================================================} - -function SimpleDateTime(t: TDateTime): string; -begin - Result := FormatDateTime('yymmdd hhnnss', t); -end; - -{==============================================================================} - -function AnsiCDateTime(t: TDateTime): string; -var - wYear, wMonth, wDay: word; -begin - DecodeDate(t, wYear, wMonth, wDay); - Result := Format('%s %s %d %s', [MyDayNames[DayOfWeek(t)], MyMonthNames[1, wMonth], - wDay, FormatDateTime('hh":"nn":"ss yyyy ', t)]); -end; - -{==============================================================================} - -function DecodeTimeZone(Value: string; var Zone: integer): Boolean; -var - x: integer; - zh, zm: integer; - s: string; -begin - Result := false; - s := Value; - if (Pos('+', s) = 1) or (Pos('-',s) = 1) then - begin - if s = '-0000' then - Zone := TimeZoneBias - else - if Length(s) > 4 then - begin - zh := StrToIntdef(s[2] + s[3], 0); - zm := StrToIntdef(s[4] + s[5], 0); - zone := zh * 60 + zm; - if s[1] = '-' then - zone := zone * (-1); - end; - Result := True; - end - else - begin - x := 32767; - if s = 'NZDT' then x := 13; - if s = 'IDLE' then x := 12; - if s = 'NZST' then x := 12; - if s = 'NZT' then x := 12; - if s = 'EADT' then x := 11; - if s = 'GST' then x := 10; - if s = 'JST' then x := 9; - if s = 'CCT' then x := 8; - if s = 'WADT' then x := 8; - if s = 'WAST' then x := 7; - if s = 'ZP6' then x := 6; - if s = 'ZP5' then x := 5; - if s = 'ZP4' then x := 4; - if s = 'BT' then x := 3; - if s = 'EET' then x := 2; - if s = 'MEST' then x := 2; - if s = 'MESZ' then x := 2; - if s = 'SST' then x := 2; - if s = 'FST' then x := 2; - if s = 'CEST' then x := 2; - if s = 'CET' then x := 1; - if s = 'FWT' then x := 1; - if s = 'MET' then x := 1; - if s = 'MEWT' then x := 1; - if s = 'SWT' then x := 1; - if s = 'UT' then x := 0; - if s = 'UTC' then x := 0; - if s = 'GMT' then x := 0; - if s = 'WET' then x := 0; - if s = 'WAT' then x := -1; - if s = 'BST' then x := -1; - if s = 'AT' then x := -2; - if s = 'ADT' then x := -3; - if s = 'AST' then x := -4; - if s = 'EDT' then x := -4; - if s = 'EST' then x := -5; - if s = 'CDT' then x := -5; - if s = 'CST' then x := -6; - if s = 'MDT' then x := -6; - if s = 'MST' then x := -7; - if s = 'PDT' then x := -7; - if s = 'PST' then x := -8; - if s = 'YDT' then x := -8; - if s = 'YST' then x := -9; - if s = 'HDT' then x := -9; - if s = 'AHST' then x := -10; - if s = 'CAT' then x := -10; - if s = 'HST' then x := -10; - if s = 'EAST' then x := -10; - if s = 'NT' then x := -11; - if s = 'IDLW' then x := -12; - if x <> 32767 then - begin - zone := x * 60; - Result := True; - end; - end; -end; - -{==============================================================================} - -function GetMonthNumber(Value: AnsiString): integer; -var - n: integer; - function TestMonth(Value: AnsiString; Index: Integer): Boolean; - var - n: integer; - begin - Result := False; - for n := 0 to 6 do - if Value = AnsiUppercase(MyMonthNames[n, Index]) then - begin - Result := True; - Break; - end; - end; -begin - Result := 0; - Value := AnsiUppercase(Value); - for n := 1 to 12 do - if TestMonth(Value, n) or (Value = AnsiUppercase(CustomMonthNames[n])) then - begin - Result := n; - Break; - end; -end; - -{==============================================================================} - -function GetTimeFromStr(Value: string): TDateTime; -var - x: integer; -begin - x := rpos(':', Value); - if (x > 0) and ((Length(Value) - x) > 2) then - Value := Copy(Value, 1, x + 2); - Value := ReplaceString(Value, ':', TimeSeparator); - Result := -1; - try - Result := StrToTime(Value); - except - on Exception do ; - end; -end; - -{==============================================================================} - -function GetDateMDYFromStr(Value: string): TDateTime; -var - wYear, wMonth, wDay: word; - s: string; -begin - Result := 0; - s := Fetch(Value, '-'); - wMonth := StrToIntDef(s, 12); - s := Fetch(Value, '-'); - wDay := StrToIntDef(s, 30); - wYear := StrToIntDef(Value, 1899); - if wYear < 1000 then - if (wYear > 99) then - wYear := wYear + 1900 - else - if wYear > 50 then - wYear := wYear + 1900 - else - wYear := wYear + 2000; - try - Result := EncodeDate(wYear, wMonth, wDay); - except - on Exception do ; - end; -end; - -{==============================================================================} - -function DecodeRfcDateTime(Value: string): TDateTime; -var - day, month, year: Word; - zone: integer; - x, y: integer; - s: string; - t: TDateTime; -begin -// ddd, d mmm yyyy hh:mm:ss -// ddd, d mmm yy hh:mm:ss -// ddd, mmm d yyyy hh:mm:ss -// ddd mmm dd hh:mm:ss yyyy -// Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 -// Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 -// Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format - - Result := 0; - if Value = '' then - Exit; - day := 0; - month := 0; - year := 0; - zone := 0; - Value := ReplaceString(Value, ' -', ' #'); - Value := ReplaceString(Value, '-', ' '); - Value := ReplaceString(Value, ' #', ' -'); - while Value <> '' do - begin - s := Fetch(Value, ' '); - s := uppercase(s); - // timezone - if DecodetimeZone(s, x) then - begin - zone := x; - continue; - end; - x := StrToIntDef(s, 0); - // day or year - if x > 0 then - if (x < 32) and (day = 0) then - begin - day := x; - continue; - end - else - begin - if (year = 0) and ((month > 0) or (x > 12)) then - begin - year := x; - if year < 32 then - year := year + 2000; - if year < 1000 then - year := year + 1900; - continue; - end; - end; - // time - if rpos(':', s) > Pos(':', s) then - begin - t := GetTimeFromStr(s); - if t <> -1 then - Result := t; - continue; - end; - //timezone daylight saving time - if s = 'DST' then - begin - zone := zone + 60; - continue; - end; - // month - y := GetMonthNumber(s); - if (y > 0) and (month = 0) then - month := y; - end; - if year = 0 then - year := 1980; - if month < 1 then - month := 1; - if month > 12 then - month := 12; - if day < 1 then - day := 1; - x := MonthDays[IsLeapYear(year), month]; - if day > x then - day := x; - Result := Result + Encodedate(year, month, day); - zone := zone - TimeZoneBias; - x := zone div 1440; - Result := Result - x; - zone := zone mod 1440; - t := EncodeTime(Abs(zone) div 60, Abs(zone) mod 60, 0, 0); - if zone < 0 then - t := 0 - t; - Result := Result - t; -end; - -{==============================================================================} - -function GetUTTime: TDateTime; -{$IFDEF WIN32} -{$IFNDEF FPC} -var - st: TSystemTime; -begin - GetSystemTime(st); - result := SystemTimeToDateTime(st); -{$ELSE} -var - st: SysUtils.TSystemTime; - stw: Windows.TSystemTime; -begin - GetSystemTime(stw); - st.Year := stw.wYear; - st.Month := stw.wMonth; - st.Day := stw.wDay; - st.Hour := stw.wHour; - st.Minute := stw.wMinute; - st.Second := stw.wSecond; - st.Millisecond := stw.wMilliseconds; - result := SystemTimeToDateTime(st); -{$ENDIF} -{$ELSE} -{$IFNDEF FPC} -var - TV: TTimeVal; -begin - gettimeofday(TV, nil); - Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; -{$ELSE} -var - TV: TimeVal; -begin - fpgettimeofday(@TV, nil); - Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; -{$ENDIF} -{$ENDIF} -end; - -{==============================================================================} - -function SetUTTime(Newdt: TDateTime): Boolean; -{$IFDEF WIN32} -{$IFNDEF FPC} -var - st: TSystemTime; -begin - DateTimeToSystemTime(newdt,st); - Result := SetSystemTime(st); -{$ELSE} -var - st: SysUtils.TSystemTime; - stw: Windows.TSystemTime; -begin - DateTimeToSystemTime(newdt,st); - stw.wYear := st.Year; - stw.wMonth := st.Month; - stw.wDay := st.Day; - stw.wHour := st.Hour; - stw.wMinute := st.Minute; - stw.wSecond := st.Second; - stw.wMilliseconds := st.Millisecond; - Result := SetSystemTime(stw); -{$ENDIF} -{$ELSE} -{$IFNDEF FPC} -var - TV: TTimeVal; - d: double; - TZ: Ttimezone; - PZ: PTimeZone; -begin - TZ.tz_minuteswest := 0; - TZ.tz_dsttime := 0; - PZ := @TZ; - gettimeofday(TV, PZ); - d := (newdt - UnixDateDelta) * 86400; - TV.tv_sec := trunc(d); - TV.tv_usec := trunc(frac(d) * 1000000); - Result := settimeofday(TV, TZ) <> -1; -{$ELSE} -var - TV: TimeVal; - d: double; -begin - d := (newdt - UnixDateDelta) * 86400; - TV.tv_sec := trunc(d); - TV.tv_usec := trunc(frac(d) * 1000000); - Result := fpsettimeofday(@TV, nil) <> -1; -{$ENDIF} -{$ENDIF} -end; - -{==============================================================================} - -{$IFNDEF WIN32} -function GetTick: LongWord; -var - Stamp: TTimeStamp; -begin - Stamp := DateTimeToTimeStamp(Now); - Result := Stamp.Time; -end; -{$ELSE} -function GetTick: LongWord; -var - tick, freq: TLargeInteger; -{$IFDEF VER100} - x: TLargeInteger; -{$ENDIF} -begin - if Windows.QueryPerformanceFrequency(freq) then - begin - Windows.QueryPerformanceCounter(tick); -{$IFDEF VER100} - x.QuadPart := (tick.QuadPart / freq.QuadPart) * 1000; - Result := x.LowPart; -{$ELSE} - Result := Trunc((tick / freq) * 1000) and High(LongWord) -{$ENDIF} - end - else - Result := Windows.GetTickCount; -end; -{$ENDIF} - -{==============================================================================} - -function TickDelta(TickOld, TickNew: LongWord): LongWord; -begin -//if DWord is signed type (older Deplhi), -// then it not work properly on differencies larger then maxint! - Result := 0; - if TickOld <> TickNew then - begin - if TickNew < TickOld then - begin - TickNew := TickNew + LongWord(MaxInt) + 1; - TickOld := TickOld + LongWord(MaxInt) + 1; - end; - Result := TickNew - TickOld; - if TickNew < TickOld then - if Result > 0 then - Result := 0 - Result; - end; -end; - -{==============================================================================} - -function CodeInt(Value: Word): Ansistring; -begin - setlength(result, 2); - result[1] := AnsiChar(Value div 256); - result[2] := AnsiChar(Value mod 256); -// Result := AnsiChar(Value div 256) + AnsiChar(Value mod 256) -end; - -{==============================================================================} - -function DecodeInt(const Value: Ansistring; Index: Integer): Word; -var - x, y: Byte; -begin - if Length(Value) > Index then - x := Ord(Value[Index]) - else - x := 0; - if Length(Value) >= (Index + 1) then - y := Ord(Value[Index + 1]) - else - y := 0; - Result := x * 256 + y; -end; - -{==============================================================================} - -function CodeLongInt(Value: Longint): Ansistring; -var - x, y: word; -begin - // this is fix for negative numbers on systems where longint = integer - x := (Value shr 16) and integer($ffff); - y := Value and integer($ffff); - setlength(result, 4); - result[1] := AnsiChar(x div 256); - result[2] := AnsiChar(x mod 256); - result[3] := AnsiChar(y div 256); - result[4] := AnsiChar(y mod 256); -end; - -{==============================================================================} - -function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; -var - x, y: Byte; - xl, yl: Byte; -begin - if Length(Value) > Index then - x := Ord(Value[Index]) - else - x := 0; - if Length(Value) >= (Index + 1) then - y := Ord(Value[Index + 1]) - else - y := 0; - if Length(Value) >= (Index + 2) then - xl := Ord(Value[Index + 2]) - else - xl := 0; - if Length(Value) >= (Index + 3) then - yl := Ord(Value[Index + 3]) - else - yl := 0; - Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); -end; - -{==============================================================================} - -function DumpStr(const Buffer: Ansistring): string; -var - n: Integer; -begin - Result := ''; - for n := 1 to Length(Buffer) do - Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); -end; - -{==============================================================================} - -function DumpExStr(const Buffer: Ansistring): string; -var - n: Integer; - x: Byte; -begin - Result := ''; - for n := 1 to Length(Buffer) do - begin - x := Ord(Buffer[n]); - if x in [65..90, 97..122] then - Result := Result + ' +''' + char(x) + '''' - else - Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); - end; -end; - -{==============================================================================} - -procedure Dump(const Buffer: AnsiString; DumpFile: string); -var - f: Text; -begin - AssignFile(f, DumpFile); - if FileExists(DumpFile) then - DeleteFile(DumpFile); - Rewrite(f); - try - Writeln(f, DumpStr(Buffer)); - finally - CloseFile(f); - end; -end; - -{==============================================================================} - -procedure DumpEx(const Buffer: AnsiString; DumpFile: string); -var - f: Text; -begin - AssignFile(f, DumpFile); - if FileExists(DumpFile) then - DeleteFile(DumpFile); - Rewrite(f); - try - Writeln(f, DumpExStr(Buffer)); - finally - CloseFile(f); - end; -end; - -{==============================================================================} - -function TrimSPLeft(const S: string): string; -var - I, L: Integer; -begin - Result := ''; - if S = '' then - Exit; - L := Length(S); - I := 1; - while (I <= L) and (S[I] = ' ') do - Inc(I); - Result := Copy(S, I, Maxint); -end; - -{==============================================================================} - -function TrimSPRight(const S: string): string; -var - I: Integer; -begin - Result := ''; - if S = '' then - Exit; - I := Length(S); - while (I > 0) and (S[I] = ' ') do - Dec(I); - Result := Copy(S, 1, I); -end; - -{==============================================================================} - -function TrimSP(const S: string): string; -begin - Result := TrimSPLeft(s); - Result := TrimSPRight(Result); -end; - -{==============================================================================} - -function SeparateLeft(const Value, Delimiter: string): string; -var - x: Integer; -begin - x := Pos(Delimiter, Value); - if x < 1 then - Result := Value - else - Result := Copy(Value, 1, x - 1); -end; - -{==============================================================================} - -function SeparateRight(const Value, Delimiter: string): string; -var - x: Integer; -begin - x := Pos(Delimiter, Value); - if x > 0 then - x := x + Length(Delimiter) - 1; - Result := Copy(Value, x + 1, Length(Value) - x); -end; - -{==============================================================================} - -function GetParameter(const Value, Parameter: string): string; -var - s: string; - v: string; -begin - Result := ''; - v := Value; - while v <> '' do - begin - s := Trim(FetchEx(v, ';', '"')); - if Pos(Uppercase(parameter), Uppercase(s)) = 1 then - begin - Delete(s, 1, Length(Parameter)); - s := Trim(s); - if s = '' then - Break; - if s[1] = '=' then - begin - Result := Trim(SeparateRight(s, '=')); - Result := UnquoteStr(Result, '"'); - break; - end; - end; - end; -end; - -{==============================================================================} - -procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); -var - s: string; -begin - Parameters.Clear; - while Value <> '' do - begin - s := Trim(FetchEx(Value, Delimiter, '"')); - Parameters.Add(s); - end; -end; - -{==============================================================================} - -procedure ParseParameters(Value: string; const Parameters: TStrings); -begin - ParseParametersEx(Value, ';', Parameters); -end; - -{==============================================================================} - -function IndexByBegin(Value: string; const List: TStrings): integer; -var - n: integer; - s: string; -begin - Result := -1; - Value := uppercase(Value); - for n := 0 to List.Count -1 do - begin - s := UpperCase(List[n]); - if Pos(Value, s) = 1 then - begin - Result := n; - Break; - end; - end; -end; - -{==============================================================================} - -function GetEmailAddr(const Value: string): string; -var - s: string; -begin - s := SeparateRight(Value, '<'); - s := SeparateLeft(s, '>'); - Result := Trim(s); -end; - -{==============================================================================} - -function GetEmailDesc(Value: string): string; -var - s: string; -begin - Value := Trim(Value); - s := SeparateRight(Value, '"'); - if s <> Value then - s := SeparateLeft(s, '"') - else - begin - s := SeparateLeft(Value, '<'); - if s = Value then - begin - s := SeparateRight(Value, '('); - if s <> Value then - s := SeparateLeft(s, ')') - else - s := ''; - end; - end; - Result := Trim(s); -end; - -{==============================================================================} - -function StrToHex(const Value: Ansistring): string; -var - n: Integer; -begin - Result := ''; - for n := 1 to Length(Value) do - Result := Result + IntToHex(Byte(Value[n]), 2); - Result := LowerCase(Result); -end; - -{==============================================================================} - -function IntToBin(Value: Integer; Digits: Byte): string; -var - x, y, n: Integer; -begin - Result := ''; - x := Value; - repeat - y := x mod 2; - x := x div 2; - if y > 0 then - Result := '1' + Result - else - Result := '0' + Result; - until x = 0; - x := Length(Result); - for n := x to Digits - 1 do - Result := '0' + Result; -end; - -{==============================================================================} - -function BinToInt(const Value: string): Integer; -var - n: Integer; -begin - Result := 0; - for n := 1 to Length(Value) do - begin - if Value[n] = '0' then - Result := Result * 2 - else - if Value[n] = '1' then - Result := Result * 2 + 1 - else - Break; - end; -end; - -{==============================================================================} - -function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, - Para: string): string; -var - x, y: Integer; - sURL: string; - s: string; - s1, s2: string; -begin - Prot := 'http'; - User := ''; - Pass := ''; - Port := '80'; - Para := ''; - - x := Pos('://', URL); - if x > 0 then - begin - Prot := SeparateLeft(URL, '://'); - sURL := SeparateRight(URL, '://'); - end - else - sURL := URL; - if UpperCase(Prot) = 'HTTPS' then - Port := '443'; - if UpperCase(Prot) = 'FTP' then - Port := '21'; - x := Pos('@', sURL); - y := Pos('/', sURL); - if (x > 0) and ((x < y) or (y < 1))then - begin - s := SeparateLeft(sURL, '@'); - sURL := SeparateRight(sURL, '@'); - x := Pos(':', s); - if x > 0 then - begin - User := SeparateLeft(s, ':'); - Pass := SeparateRight(s, ':'); - end - else - User := s; - end; - x := Pos('/', sURL); - if x > 0 then - begin - s1 := SeparateLeft(sURL, '/'); - s2 := SeparateRight(sURL, '/'); - end - else - begin - s1 := sURL; - s2 := ''; - end; - if Pos('[', s1) = 1 then - begin - Host := Separateleft(s1, ']'); - Delete(Host, 1, 1); - s1 := SeparateRight(s1, ']'); - if Pos(':', s1) = 1 then - Port := SeparateRight(s1, ':'); - end - else - begin - x := Pos(':', s1); - if x > 0 then - begin - Host := SeparateLeft(s1, ':'); - Port := SeparateRight(s1, ':'); - end - else - Host := s1; - end; - Result := '/' + s2; - x := Pos('?', s2); - if x > 0 then - begin - Path := '/' + SeparateLeft(s2, '?'); - Para := SeparateRight(s2, '?'); - end - else - Path := '/' + s2; - if Host = '' then - Host := 'localhost'; -end; - -{==============================================================================} - -function ReplaceString(Value, Search, Replace: string): string; -var - x, l, ls, lr: Integer; -begin - if (Value = '') or (Search = '') then - begin - Result := Value; - Exit; - end; - ls := Length(Search); - lr := Length(Replace); - Result := ''; - x := Pos(Search, Value); - while x > 0 do - begin - {$IFNDEF CIL} - l := Length(Result); - SetLength(Result, l + x - 1); - Move(Pointer(Value)^, Pointer(@Result[l + 1])^, x - 1); - {$ELSE} - Result:=Result+Copy(Value,1,x-1); - {$ENDIF} - {$IFNDEF CIL} - l := Length(Result); - SetLength(Result, l + lr); - Move(Pointer(Replace)^, Pointer(@Result[l + 1])^, lr); - {$ELSE} - Result:=Result+Replace; - {$ENDIF} - Delete(Value, 1, x - 1 + ls); - x := Pos(Search, Value); - end; - Result := Result + Value; -end; - -{==============================================================================} - -function RPosEx(const Sub, Value: string; From: integer): Integer; -var - n: Integer; - l: Integer; -begin - result := 0; - l := Length(Sub); - for n := From - l + 1 downto 1 do - begin - if Copy(Value, n, l) = Sub then - begin - result := n; - break; - end; - end; -end; - -{==============================================================================} - -function RPos(const Sub, Value: String): Integer; -begin - Result := RPosEx(Sub, Value, Length(Value)); -end; - -{==============================================================================} - -function FetchBin(var Value: string; const Delimiter: string): string; -var - s: string; -begin - Result := SeparateLeft(Value, Delimiter); - s := SeparateRight(Value, Delimiter); - if s = Value then - Value := '' - else - Value := s; -end; - -{==============================================================================} - -function Fetch(var Value: string; const Delimiter: string): string; -begin - Result := FetchBin(Value, Delimiter); - Result := TrimSP(Result); - Value := TrimSP(Value); -end; - -{==============================================================================} - -function FetchEx(var Value: string; const Delimiter, Quotation: string): string; -var - b: Boolean; -begin - Result := ''; - b := False; - while Length(Value) > 0 do - begin - if b then - begin - if Pos(Quotation, Value) = 1 then - b := False; - Result := Result + Value[1]; - Delete(Value, 1, 1); - end - else - begin - if Pos(Delimiter, Value) = 1 then - begin - Delete(Value, 1, Length(delimiter)); - break; - end; - b := Pos(Quotation, Value) = 1; - Result := Result + Value[1]; - Delete(Value, 1, 1); - end; - end; -end; - -{==============================================================================} - -function IsBinaryString(const Value: string): Boolean; -var - n: integer; -begin - Result := False; - for n := 1 to Length(Value) do - if Value[n] in [#0..#8, #10..#31] then - //ignore null-terminated strings - if not ((n = Length(value)) and (Value[n] = #0)) then - begin - Result := True; - Break; - end; -end; - -{==============================================================================} - -function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; -var - n, l: integer; -begin - Result := -1; - Terminator := ''; - l := length(value); - for n := 1 to l do - if value[n] in [#$0d, #$0a] then - begin - Result := n; - Terminator := Value[n]; - if n <> l then - case value[n] of - #$0d: - if value[n + 1] = #$0a then - Terminator := #$0d + #$0a; - #$0a: - if value[n + 1] = #$0d then - Terminator := #$0a + #$0d; - end; - Break; - end; -end; - -{==============================================================================} - -Procedure StringsTrim(const Value: TStrings); -var - n: integer; -begin - for n := Value.Count - 1 downto 0 do - if Value[n] = '' then - Value.Delete(n) - else - Break; -end; - -{==============================================================================} - -function PosFrom(const SubStr, Value: String; From: integer): integer; -var - ls,lv: integer; -begin - Result := 0; - ls := Length(SubStr); - lv := Length(Value); - if (ls = 0) or (lv = 0) then - Exit; - if From < 1 then - From := 1; - while (ls + from - 1) <= (lv) do - begin - {$IFNDEF CIL} - if CompareMem(@SubStr[1],@Value[from],ls) then - {$ELSE} - if SubStr = copy(Value, from, ls) then - {$ENDIF} - begin - result := from; - break; - end - else - inc(from); - end; -end; - -{==============================================================================} - -{$IFNDEF CIL} -function IncPoint(const p: pointer; Value: integer): pointer; -begin - Result := PChar(p) + Value; -end; -{$ENDIF} - -{==============================================================================} -//improved by 'DoggyDawg' -function GetBetween(const PairBegin, PairEnd, Value: string): string; -var - n: integer; - x: integer; - s: string; - lenBegin: integer; - lenEnd: integer; - str: string; - max: integer; -begin - lenBegin := Length(PairBegin); - lenEnd := Length(PairEnd); - n := Length(Value); - if (Value = PairBegin + PairEnd) then - begin - Result := '';//nothing between - exit; - end; - if (n < lenBegin + lenEnd) then - begin - Result := Value; - exit; - end; - s := SeparateRight(Value, PairBegin); - if (s = Value) then - begin - Result := Value; - exit; - end; - n := Pos(PairEnd, s); - if (n = 0) then - begin - Result := Value; - exit; - end; - Result := ''; - x := 1; - max := Length(s) - lenEnd + 1; - for n := 1 to max do - begin - str := copy(s, n, lenEnd); - if (str = PairEnd) then - begin - Dec(x); - if (x <= 0) then - Break; - end; - str := copy(s, n, lenBegin); - if (str = PairBegin) then - Inc(x); - Result := Result + s[n]; - end; -end; - -{==============================================================================} - -function CountOfChar(const Value: string; Chr: char): integer; -var - n: integer; -begin - Result := 0; - for n := 1 to Length(Value) do - if Value[n] = chr then - Inc(Result); -end; - -{==============================================================================} -// ! do not use AnsiExtractQuotedStr, it's very buggy and can crash application! -function UnquoteStr(const Value: string; Quote: Char): string; -var - n: integer; - inq, dq: Boolean; - c, cn: char; -begin - Result := ''; - if Value = '' then - Exit; - if Value = Quote + Quote then - Exit; - inq := False; - dq := False; - for n := 1 to Length(Value) do - begin - c := Value[n]; - if n <> Length(Value) then - cn := Value[n + 1] - else - cn := #0; - if c = quote then - if dq then - dq := False - else - if not inq then - inq := True - else - if cn = quote then - begin - Result := Result + Quote; - dq := True; - end - else - inq := False - else - Result := Result + c; - end; -end; - -{==============================================================================} - -function QuoteStr(const Value: string; Quote: Char): string; -var - n: integer; -begin - Result := ''; - for n := 1 to length(value) do - begin - Result := result + Value[n]; - if value[n] = Quote then - Result := Result + Quote; - end; - Result := Quote + Result + Quote; -end; - -{==============================================================================} - -procedure HeadersToList(const Value: TStrings); -var - n, x, y: integer; - s: string; -begin - for n := 0 to Value.Count -1 do - begin - s := Value[n]; - x := Pos(':', s); - if x > 0 then - begin - y:= Pos('=',s); - if not ((y > 0) and (y < x)) then - begin - s[x] := '='; - Value[n] := s; - end; - end; - end; -end; - -{==============================================================================} - -procedure ListToHeaders(const Value: TStrings); -var - n, x: integer; - s: string; -begin - for n := 0 to Value.Count -1 do - begin - s := Value[n]; - x := Pos('=', s); - if x > 0 then - begin - s[x] := ':'; - Value[n] := s; - end; - end; -end; - -{==============================================================================} - -function SwapBytes(Value: integer): integer; -var - s: string; - x, y, xl, yl: Byte; -begin - s := CodeLongInt(Value); - x := Ord(s[4]); - y := Ord(s[3]); - xl := Ord(s[2]); - yl := Ord(s[1]); - Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); -end; - -{==============================================================================} - -function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; -var - x: integer; -{$IFDEF CIL} - buf: Array of Byte; -{$ENDIF} -begin -{$IFDEF CIL} - Setlength(buf, Len); - x := Stream.read(buf, Len); - SetLength(buf, x); - Result := StringOf(Buf); -{$ELSE} - Setlength(Result, Len); - x := Stream.read(Pchar(Result)^, Len); - SetLength(Result, x); -{$ENDIF} -end; - -{==============================================================================} - -procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); -{$IFDEF CIL} -var - buf: Array of Byte; -{$ENDIF} -begin -{$IFDEF CIL} - buf := BytesOf(Value); - Stream.Write(buf,length(Value)); -{$ELSE} - Stream.Write(PChar(Value)^, Length(Value)); -{$ENDIF} -end; - -{==============================================================================} -function GetTempFile(const Dir, prefix: AnsiString): AnsiString; -{$IFNDEF FPC} -{$IFDEF WIN32} -var - Path: AnsiString; - x: integer; -{$ENDIF} -{$ENDIF} -begin -{$IFDEF FPC} - Result := GetTempFileName(Dir, Prefix); -{$ELSE} - {$IFNDEF WIN32} - Result := tempnam(Pointer(Dir), Pointer(prefix)); - {$ELSE} - {$IFDEF CIL} - Result := System.IO.Path.GetTempFileName; - {$ELSE} - if Dir = '' then - begin - SetLength(Path, MAX_PATH); - x := GetTempPath(Length(Path), PChar(Path)); - SetLength(Path, x); - end - else - Path := Dir; - x := Length(Path); - if Path[x] <> '\' then - Path := Path + '\'; - SetLength(Result, MAX_PATH + 1); - GetTempFileName(PChar(Path), PChar(Prefix), 0, PChar(Result)); - Result := PChar(Result); - SetFileattributes(PChar(Result), GetFileAttributes(PChar(Result)) or FILE_ATTRIBUTE_TEMPORARY); - {$ENDIF} - {$ENDIF} -{$ENDIF} -end; - -{==============================================================================} - -function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; -begin - if length(value) >= len then - Result := Copy(value, 1, len) - else - Result := Value + StringOfChar(Pad, len - length(value)); -end; - -{==============================================================================} -var - n: integer; -begin - for n := 1 to 12 do - begin - CustomMonthNames[n] := ShortMonthNames[n]; - MyMonthNames[0, n] := ShortMonthNames[n]; - end; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synsock.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synsock.pas deleted file mode 100644 index c4bc977..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/Synapse/synsock.pas +++ /dev/null @@ -1,67 +0,0 @@ -{==============================================================================| -| Project : Ararat Synapse | 005.001.000 | -|==============================================================================| -| Content: Socket Independent Platform Layer | -|==============================================================================| -| Copyright (c)1999-2003, Lukas Gebauer | -| All rights reserved. | -| | -| Redistribution and use in source and binary forms, with or without | -| modification, are permitted provided that the following conditions are met: | -| | -| Redistributions of source code must retain the above copyright notice, this | -| list of conditions and the following disclaimer. | -| | -| Redistributions in binary form must reproduce the above copyright notice, | -| this list of conditions and the following disclaimer in the documentation | -| and/or other materials provided with the distribution. | -| | -| Neither the name of Lukas Gebauer nor the names of its contributors may | -| be used to endorse or promote products derived from this software without | -| specific prior written permission. | -| | -| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | -| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | -| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | -| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | -| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | -| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | -| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | -| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | -| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | -| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | -| DAMAGE. | -|==============================================================================| -| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| -| Portions created by Lukas Gebauer are Copyright (c)2001-2003. | -| All Rights Reserved. | -|==============================================================================| -| Contributor(s): | -|==============================================================================| -| History: see HISTORY.HTM from distribution package | -| (Found at URL: http://www.ararat.cz/synapse/) | -|==============================================================================} - -{:@exclude} - -unit synsock; - -{$MINENUMSIZE 4} - -{$IFDEF CIL} - {$I ssdotnet.pas} -{$ENDIF} - -{$IFDEF WIN32} - {$I sswin32.pas} -{$ELSE} - {$IFDEF FPC} - {$I ssfpc.pas} - {$ELSE} - {$I sslinux.pas} - {$ENDIF} -{$ENDIF} - - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/FPC/uROZLib.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/FPC/uROZLib.pas deleted file mode 100644 index 164955b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/FPC/uROZLib.pas +++ /dev/null @@ -1,655 +0,0 @@ -{******************************************************************} -{ } -{ Borland Delphi Supplemental Components } -{ ZLIB Data Compression Interface Unit } -{ } -{ Copyright (c) 1997-2002 Borland Software Corporation } -{ } -{******************************************************************} - -unit uROZLib; -{$I ..\..\RemObjects.inc} -(* -{$IFDEF FPC} - {$IFDEF MSWINDOWS} - {$DEFINE FPCMSWIN} - {$ENDIF} - {$IFDEF LINUX} - {$DEFINE FPCLINUX} - {$ENDIF} - {$UNDEF MSWINDOWS} - {$DEFINE LINUX} -{$ENDIF FPC} -*) - -interface - -uses SysUtils, Classes, zlib; - -type -(* - TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} - TFree = procedure (AppData, Block: Pointer); -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} - - // Internal structure. Ignore. - TZStreamRec = packed record - next_in: PChar; // next input byte - avail_in: Integer; // number of bytes available at next_in - total_in: Integer; // total nb of input bytes read so far - - next_out: PChar; // next output byte should be put here - avail_out: Integer; // remaining free space at next_out - total_out: Integer; // total nb of bytes output so far - - msg: PChar; // last error message, NULL if no error - internal: Pointer; // not visible by applications - - zalloc: TAlloc; // used to allocate the internal state - zfree: TFree; // used to free the internal state - AppData: Pointer; // private data object passed to zalloc and zfree - - data_type: Integer; // best guess about the data type: ascii or binary - adler: Integer; // adler32 value of the uncompressed data - reserved: Integer; // reserved for future use - end; -*) - // Abstract ancestor class - TCustomZlibStream = class(TStream) - private - FStrm: TStream; - FStrmPos: Integer; - FOnProgress: TNotifyEvent; - FZRec: TZStreamRec; - FBuffer: array [Word] of Char; - protected - procedure Progress(Sender: TObject); dynamic; - property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; - constructor Create(Strm: TStream); - end; - -{ TCompressionStream compresses data on the fly as data is written to it, and - stores the compressed data to another stream. - - TCompressionStream is write-only and strictly sequential. Reading from the - stream will raise an exception. Using Seek to move the stream pointer - will raise an exception. - - Output data is cached internally, written to the output stream only when - the internal output buffer is full. All pending output data is flushed - when the stream is destroyed. - - The Position property returns the number of uncompressed bytes of - data that have been written to the stream so far. - - CompressionRate returns the on-the-fly percentage by which the original - data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 - If raw data size = 100 and compressed data size = 25, the CompressionRate - is 75% - - The OnProgress event is called each time the output buffer is filled and - written to the output stream. This is useful for updating a progress - indicator when you are writing a large chunk of data to the compression - stream in a single call.} - - - TCompressionLevel = (clNone, clFastest, clDefault, clMax); - - TCompressionStream = class(TCustomZlibStream) - private - function GetCompressionRate: Single; - public - constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream); - destructor Destroy; override; - function Read(var Buffer; Count: Longint): Longint; override; - function Write(const Buffer; Count: Longint): Longint; override; - function Seek(Offset: Longint; Origin: Word): Longint; override; - property CompressionRate: Single read GetCompressionRate; - property OnProgress; - end; - -{ TDecompressionStream decompresses data on the fly as data is read from it. - - Compressed data comes from a separate source stream. TDecompressionStream - is read-only and unidirectional; you can seek forward in the stream, but not - backwards. The special case of setting the stream position to zero is - allowed. Seeking forward decompresses data until the requested position in - the uncompressed data has been reached. Seeking backwards, seeking relative - to the end of the stream, requesting the size of the stream, and writing to - the stream will raise an exception. - - The Position property returns the number of bytes of uncompressed data that - have been read from the stream so far. - - The OnProgress event is called each time the internal input buffer of - compressed data is exhausted and the next block is read from the input stream. - This is useful for updating a progress indicator when you are reading a - large chunk of data from the decompression stream in a single call.} - - TDecompressionStream = class(TCustomZlibStream) - public - constructor Create(Source: TStream); - destructor Destroy; override; - function Read(var Buffer; Count: Longint): Longint; override; - function Write(const Buffer; Count: Longint): Longint; override; - function Seek(Offset: Longint; Origin: Word): Longint; override; - property OnProgress; - end; - - - -{ CompressBuf compresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - Out: OutBuf = ptr to newly allocated buffer containing decompressed data - OutBytes = number of bytes in OutBuf } -procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; - out OutBuf: Pointer; out OutBytes: Integer); - - -{ DecompressBuf decompresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - OutEstimate = zero, or est. size of the decompressed data - Out: OutBuf = ptr to newly allocated buffer containing decompressed data - OutBytes = number of bytes in OutBuf } -procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; - OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); - -{ DecompressToUserBuf decompresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - Out: OutBuf = ptr to user-allocated buffer to contain decompressed data - BufSize = number of bytes in OutBuf } -procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; - const OutBuf: Pointer; BufSize: Integer); -(* -const - zlib_Version = '1.0.4'; - Z_NO_FLUSH = 0; - Z_PARTIAL_FLUSH = 1; - Z_SYNC_FLUSH = 2; - Z_FULL_FLUSH = 3; - Z_FINISH = 4; - - Z_OK = 0; - Z_STREAM_END = 1; - Z_NEED_DICT = 2; - Z_ERRNO = (-1); - Z_STREAM_ERROR = (-2); - Z_DATA_ERROR = (-3); - Z_MEM_ERROR = (-4); - Z_BUF_ERROR = (-5); - Z_VERSION_ERROR = (-6); - - Z_NO_COMPRESSION = 0; - Z_BEST_SPEED = 1; - Z_BEST_COMPRESSION = 9; - Z_DEFAULT_COMPRESSION = (-1); - - Z_FILTERED = 1; - Z_HUFFMAN_ONLY = 2; - Z_DEFAULT_STRATEGY = 0; - - Z_BINARY = 0; - Z_ASCII = 1; - Z_UNKNOWN = 2; - - Z_DEFLATED = 8; -*) -type - EZlibError = class(Exception); - ECompressionError = class(EZlibError); - EDecompressionError = class(EZlibError); -(* -// Direct ZLib access - -function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; {$IFDEF LINUX} cdecl; {$ENDIF} -procedure zlibFreeMem(AppData, Block: Pointer); {$IFDEF LINUX} cdecl; {$ENDIF} -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; - recsize: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function deflate(var strm: TZStreamRec; flush: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function deflateEnd(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateInit_(var strm: TZStreamRec; version: PChar; - recsize: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflate(var strm: TZStreamRec; flush: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateEnd(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateReset(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -*) -implementation - -resourcestring - sTargetBufferTooSmall = 'ZLib: Target buffer may be too small'; - sInvalidStreamOp = 'ZLib: Invalid stream operation'; - sError = 'ZLib: Error'; -(* -{$IFDEF LINUX} -const - {$IFDEF FPC} - {$IFDEF FPCLINUX} - zlibso = 'libz.so.1'; - {$ELSE} - zlibso = 'zlib1.dll'; - {$ENDIF FPCLINUX} - {$ELSE} - zlibso = 'libz.so.1'; - {$ENDIF FPC} -{$ENDIF LINUX} - -{$IFDEF MSWINDOWS} -{$L deflate.obj} -{$L inflate.obj} -{$L inftrees.obj} -{$L trees.obj} -{$L adler32.obj} -{$L infblock.obj} -{$L infcodes.obj} -{$L infutil.obj} -{$L inffast.obj} - -procedure _tr_init; external; -procedure _tr_tally; external; -procedure _tr_flush_block; external; -procedure _tr_align; external; -procedure _tr_stored_block; external; -procedure adler32; external; -procedure inflate_blocks_new; external; -procedure inflate_blocks; external; -procedure inflate_blocks_reset; external; -procedure inflate_blocks_free; external; -procedure inflate_set_dictionary; external; -procedure inflate_trees_bits; external; -procedure inflate_trees_dynamic; external; -procedure inflate_trees_fixed; external; -procedure inflate_trees_free; external; -procedure inflate_codes_new; external; -procedure inflate_codes; external; -procedure inflate_codes_free; external; -procedure _inflate_mask; external; -procedure inflate_flush; external; -procedure inflate_fast; external; - -procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; -begin - FillChar(P^, count, B); -end; - -procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; -begin - Move(source^, dest^, count); -end; -{$ENDIF} - -// deflate compresses data -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; - recsize: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflateInit_'; -{$ENDIF} -function deflate(var strm: TZStreamRec; flush: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflate'; -{$ENDIF} -function deflateEnd(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflateEnd'; -{$ENDIF} - -// inflate decompresses data -function inflateInit_(var strm: TZStreamRec; version: PChar; - recsize: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateInit_'; -{$ENDIF} -function inflate(var strm: TZStreamRec; flush: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflate'; -{$ENDIF} -function inflateEnd(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateEnd'; -{$ENDIF} -function inflateReset(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateReset'; -{$ENDIF} - -function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} -begin - Result := AllocMem(Items * Size); -end; - -procedure zlibFreeMem(AppData, Block: Pointer); -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} -begin - FreeMem(Block); -end; -*) -function CCheck(code: Integer): Integer; -begin - Result := code; - if code < 0 then - raise ECompressionError.Create(sError); //!! -end; - -function DCheck(code: Integer): Integer; -begin - Result := code; - if code < 0 then - raise EDecompressionError.Create(sError); //!! -end; - -procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; - out OutBuf: Pointer; out OutBytes: Integer); -var - strm: TZStreamRec; - P: Pointer; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; - GetMem(OutBuf, OutBytes); - try - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := OutBytes; - CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm))); - try - while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, 256); - ReallocMem(OutBuf, OutBytes); - strm.next_out := pbytef(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := 256; - end; - finally - CCheck(deflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - - -procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; - OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); -var - strm: TZStreamRec; - P: Pointer; - BufInc: Integer; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - BufInc := (InBytes + 255) and not 255; - if OutEstimate = 0 then - OutBytes := BufInc - else - OutBytes := OutEstimate; - GetMem(OutBuf, OutBytes); - try - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := OutBytes; - DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); - try - while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, BufInc); - ReallocMem(OutBuf, OutBytes); - strm.next_out := pbytef(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := BufInc; - end; - finally - DCheck(inflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - -procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; - const OutBuf: Pointer; BufSize: Integer); -var - strm: TZStreamRec; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := BufSize; - DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); - try - if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then - raise EZlibError.CreateRes(@sTargetBufferTooSmall); - finally - DCheck(inflateEnd(strm)); - end; -end; - -// TCustomZlibStream - -constructor TCustomZLibStream.Create(Strm: TStream); -begin - inherited Create; - FStrm := Strm; - FStrmPos := Strm.Position; - FZRec.zalloc := zlibAllocMem; - FZRec.zfree := zlibFreeMem; -end; - -procedure TCustomZLibStream.Progress(Sender: TObject); -begin - if Assigned(FOnProgress) then FOnProgress(Sender); -end; - - -// TCompressionStream - -constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel; - Dest: TStream); -const - Levels: array [TCompressionLevel] of ShortInt = - (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION); -begin - inherited Create(Dest); - FZRec.next_out := pbytef(@FBuffer); - FZRec.avail_out := sizeof(FBuffer); - CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec))); -end; - -destructor TCompressionStream.Destroy; -begin - FZRec.next_in := nil; - FZRec.avail_in := 0; - try - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END) - and (FZRec.avail_out = 0) do - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := pbytef(@FBuffer); - FZRec.avail_out := sizeof(FBuffer); - end; - if FZRec.avail_out < sizeof(FBuffer) then - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out); - finally - deflateEnd(FZRec); - end; - inherited Destroy; -end; - -function TCompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - raise ECompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TCompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - FZRec.next_in := @Buffer; - FZRec.avail_in := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_in > 0) do - begin - CCheck(deflate(FZRec, 0)); - if FZRec.avail_out = 0 then - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := pbytef(@FBuffer); - FZRec.avail_out := sizeof(FBuffer); - FStrmPos := FStrm.Position; - Progress(Self); - end; - end; - Result := Count; -end; - -function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -begin - if (Offset = 0) and (Origin = soFromCurrent) then - Result := FZRec.total_in - else - raise ECompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TCompressionStream.GetCompressionRate: Single; -begin - if FZRec.total_in = 0 then - Result := 0 - else - Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0; -end; - - -// TDecompressionStream - -constructor TDecompressionStream.Create(Source: TStream); -begin - inherited Create(Source); - FZRec.next_in := pbytef(@FBuffer); - FZRec.avail_in := 0; - DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec))); -end; - -destructor TDecompressionStream.Destroy; -begin - FStrm.Seek(-FZRec.avail_in, 1); - inflateEnd(FZRec); - inherited Destroy; -end; - -function TDecompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - FZRec.next_out := @Buffer; - FZRec.avail_out := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_out > 0) do - begin - if FZRec.avail_in = 0 then - begin - FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); - if FZRec.avail_in = 0 then - begin - Result := Count - FZRec.avail_out; - Exit; - end; - FZRec.next_in := pbytef(@FBuffer); - FStrmPos := FStrm.Position; - Progress(Self); - end; - CCheck(inflate(FZRec, 0)); - end; - Result := Count; -end; - -function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - raise EDecompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -var - I: Integer; - Buf: array [0..4095] of Char; -begin - if (Offset = 0) and (Origin = soFromBeginning) then - begin - DCheck(inflateReset(FZRec)); - FZRec.next_in := pbytef(@FBuffer); - FZRec.avail_in := 0; - FStrm.Position := 0; - FStrmPos := 0; - end - else if ( (Offset >= 0) and (Origin = soFromCurrent)) or - ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then - begin - if Origin = soFromBeginning then Dec(Offset, FZRec.total_out); - if Offset > 0 then - begin - for I := 1 to Offset div sizeof(Buf) do - ReadBuffer(Buf, sizeof(Buf)); - ReadBuffer(Buf, Offset mod sizeof(Buf)); - end; - end - else - raise EDecompressionError.CreateRes(@sInvalidStreamOp); - Result := FZRec.total_out; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/adler32.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/adler32.obj deleted file mode 100644 index e953712..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/adler32.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/deflate.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/deflate.obj deleted file mode 100644 index 2821e1d..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/deflate.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infblock.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infblock.obj deleted file mode 100644 index 1bb9cb8..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infblock.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infcodes.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infcodes.obj deleted file mode 100644 index 7bf4a0c..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infcodes.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inffast.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inffast.obj deleted file mode 100644 index 93ec18e..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inffast.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inflate.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inflate.obj deleted file mode 100644 index 43b02a9..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inflate.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inftrees.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inftrees.obj deleted file mode 100644 index 345c222..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/inftrees.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infutil.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infutil.obj deleted file mode 100644 index f139af8..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/infutil.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/trees.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/trees.obj deleted file mode 100644 index 3355116..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/trees.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/uROZLib.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/uROZLib.pas deleted file mode 100644 index ecfeedc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/Kylix/uROZLib.pas +++ /dev/null @@ -1,633 +0,0 @@ -{******************************************************************} -{ } -{ Borland Delphi Supplemental Components } -{ ZLIB Data Compression Interface Unit } -{ } -{ Copyright (c) 1997-2002 Borland Software Corporation } -{ } -{******************************************************************} - -unit uROZLib; - -interface - -uses SysUtils, Classes; - -type - TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} - TFree = procedure (AppData, Block: Pointer); -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} - - // Internal structure. Ignore. - TZStreamRec = packed record - next_in: PChar; // next input byte - avail_in: Integer; // number of bytes available at next_in - total_in: Integer; // total nb of input bytes read so far - - next_out: PChar; // next output byte should be put here - avail_out: Integer; // remaining free space at next_out - total_out: Integer; // total nb of bytes output so far - - msg: PChar; // last error message, NULL if no error - internal: Pointer; // not visible by applications - - zalloc: TAlloc; // used to allocate the internal state - zfree: TFree; // used to free the internal state - AppData: Pointer; // private data object passed to zalloc and zfree - - data_type: Integer; // best guess about the data type: ascii or binary - adler: Integer; // adler32 value of the uncompressed data - reserved: Integer; // reserved for future use - end; - - // Abstract ancestor class - TCustomZlibStream = class(TStream) - private - FStrm: TStream; - FStrmPos: Integer; - FOnProgress: TNotifyEvent; - FZRec: TZStreamRec; - FBuffer: array [Word] of Char; - protected - procedure Progress(Sender: TObject); dynamic; - property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; - constructor Create(Strm: TStream); - end; - -{ TCompressionStream compresses data on the fly as data is written to it, and - stores the compressed data to another stream. - - TCompressionStream is write-only and strictly sequential. Reading from the - stream will raise an exception. Using Seek to move the stream pointer - will raise an exception. - - Output data is cached internally, written to the output stream only when - the internal output buffer is full. All pending output data is flushed - when the stream is destroyed. - - The Position property returns the number of uncompressed bytes of - data that have been written to the stream so far. - - CompressionRate returns the on-the-fly percentage by which the original - data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 - If raw data size = 100 and compressed data size = 25, the CompressionRate - is 75% - - The OnProgress event is called each time the output buffer is filled and - written to the output stream. This is useful for updating a progress - indicator when you are writing a large chunk of data to the compression - stream in a single call.} - - - TCompressionLevel = (clNone, clFastest, clDefault, clMax); - - TCompressionStream = class(TCustomZlibStream) - private - function GetCompressionRate: Single; - public - constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream); - destructor Destroy; override; - function Read(var Buffer; Count: Longint): Longint; override; - function Write(const Buffer; Count: Longint): Longint; override; - function Seek(Offset: Longint; Origin: Word): Longint; override; - property CompressionRate: Single read GetCompressionRate; - property OnProgress; - end; - -{ TDecompressionStream decompresses data on the fly as data is read from it. - - Compressed data comes from a separate source stream. TDecompressionStream - is read-only and unidirectional; you can seek forward in the stream, but not - backwards. The special case of setting the stream position to zero is - allowed. Seeking forward decompresses data until the requested position in - the uncompressed data has been reached. Seeking backwards, seeking relative - to the end of the stream, requesting the size of the stream, and writing to - the stream will raise an exception. - - The Position property returns the number of bytes of uncompressed data that - have been read from the stream so far. - - The OnProgress event is called each time the internal input buffer of - compressed data is exhausted and the next block is read from the input stream. - This is useful for updating a progress indicator when you are reading a - large chunk of data from the decompression stream in a single call.} - - TDecompressionStream = class(TCustomZlibStream) - public - constructor Create(Source: TStream); - destructor Destroy; override; - function Read(var Buffer; Count: Longint): Longint; override; - function Write(const Buffer; Count: Longint): Longint; override; - function Seek(Offset: Longint; Origin: Word): Longint; override; - property OnProgress; - end; - - - -{ CompressBuf compresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - Out: OutBuf = ptr to newly allocated buffer containing decompressed data - OutBytes = number of bytes in OutBuf } -procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; - out OutBuf: Pointer; out OutBytes: Integer); - - -{ DecompressBuf decompresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - OutEstimate = zero, or est. size of the decompressed data - Out: OutBuf = ptr to newly allocated buffer containing decompressed data - OutBytes = number of bytes in OutBuf } -procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; - OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); - -{ DecompressToUserBuf decompresses data, buffer to buffer, in one call. - In: InBuf = ptr to compressed data - InBytes = number of bytes in InBuf - Out: OutBuf = ptr to user-allocated buffer to contain decompressed data - BufSize = number of bytes in OutBuf } -procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; - const OutBuf: Pointer; BufSize: Integer); - -const - zlib_Version = '1.0.4'; - Z_NO_FLUSH = 0; - Z_PARTIAL_FLUSH = 1; - Z_SYNC_FLUSH = 2; - Z_FULL_FLUSH = 3; - Z_FINISH = 4; - - Z_OK = 0; - Z_STREAM_END = 1; - Z_NEED_DICT = 2; - Z_ERRNO = (-1); - Z_STREAM_ERROR = (-2); - Z_DATA_ERROR = (-3); - Z_MEM_ERROR = (-4); - Z_BUF_ERROR = (-5); - Z_VERSION_ERROR = (-6); - - Z_NO_COMPRESSION = 0; - Z_BEST_SPEED = 1; - Z_BEST_COMPRESSION = 9; - Z_DEFAULT_COMPRESSION = (-1); - - Z_FILTERED = 1; - Z_HUFFMAN_ONLY = 2; - Z_DEFAULT_STRATEGY = 0; - - Z_BINARY = 0; - Z_ASCII = 1; - Z_UNKNOWN = 2; - - Z_DEFLATED = 8; - -type - EZlibError = class(Exception); - ECompressionError = class(EZlibError); - EDecompressionError = class(EZlibError); - -// Direct ZLib access - -function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; {$IFDEF LINUX} cdecl; {$ENDIF} -procedure zlibFreeMem(AppData, Block: Pointer); {$IFDEF LINUX} cdecl; {$ENDIF} -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; - recsize: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function deflate(var strm: TZStreamRec; flush: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function deflateEnd(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateInit_(var strm: TZStreamRec; version: PChar; - recsize: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflate(var strm: TZStreamRec; flush: Integer): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateEnd(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} -function inflateReset(var strm: TZStreamRec): Integer; {$IFDEF LINUX} cdecl; {$ENDIF} - -implementation - -resourcestring - sTargetBufferTooSmall = 'ZLib: Target buffer may be too small'; - sInvalidStreamOp = 'ZLib: Invalid stream operation'; - sError = 'ZLib: Error'; - -{$IFDEF LINUX} -const - zlibso = 'libz.so.1'; -{$ENDIF} - -{$IFDEF MSWINDOWS} -{$L deflate.obj} -{$L inflate.obj} -{$L inftrees.obj} -{$L trees.obj} -{$L adler32.obj} -{$L infblock.obj} -{$L infcodes.obj} -{$L infutil.obj} -{$L inffast.obj} - -procedure _tr_init; external; -procedure _tr_tally; external; -procedure _tr_flush_block; external; -procedure _tr_align; external; -procedure _tr_stored_block; external; -procedure adler32; external; -procedure inflate_blocks_new; external; -procedure inflate_blocks; external; -procedure inflate_blocks_reset; external; -procedure inflate_blocks_free; external; -procedure inflate_set_dictionary; external; -procedure inflate_trees_bits; external; -procedure inflate_trees_dynamic; external; -procedure inflate_trees_fixed; external; -procedure inflate_trees_free; external; -procedure inflate_codes_new; external; -procedure inflate_codes; external; -procedure inflate_codes_free; external; -procedure _inflate_mask; external; -procedure inflate_flush; external; -procedure inflate_fast; external; - -procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; -begin - FillChar(P^, count, B); -end; - -procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; -begin - Move(source^, dest^, count); -end; -{$ENDIF} - -// deflate compresses data -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; - recsize: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflateInit_'; -{$ENDIF} -function deflate(var strm: TZStreamRec; flush: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflate'; -{$ENDIF} -function deflateEnd(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'deflateEnd'; -{$ENDIF} - -// inflate decompresses data -function inflateInit_(var strm: TZStreamRec; version: PChar; - recsize: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateInit_'; -{$ENDIF} -function inflate(var strm: TZStreamRec; flush: Integer): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflate'; -{$ENDIF} -function inflateEnd(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateEnd'; -{$ENDIF} -function inflateReset(var strm: TZStreamRec): Integer; -{$IFDEF MSWINDOWS} - external; -{$ENDIF} -{$IFDEF LINUX} - cdecl; external zlibso name 'inflateReset'; -{$ENDIF} - -function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} -begin - Result := AllocMem(Items * Size); -end; - -procedure zlibFreeMem(AppData, Block: Pointer); -{$IFDEF MSWINDOWS} - register; -{$ENDIF} -{$IFDEF LINUX} - cdecl; -{$ENDIF} -begin - FreeMem(Block); -end; - -function CCheck(code: Integer): Integer; -begin - Result := code; - if code < 0 then - raise ECompressionError.Create(sError); //!! -end; - -function DCheck(code: Integer): Integer; -begin - Result := code; - if code < 0 then - raise EDecompressionError.Create(sError); //!! -end; - -procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; - out OutBuf: Pointer; out OutBytes: Integer); -var - strm: TZStreamRec; - P: Pointer; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; - GetMem(OutBuf, OutBytes); - try - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := OutBytes; - CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm))); - try - while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, 256); - ReallocMem(OutBuf, OutBytes); - strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := 256; - end; - finally - CCheck(deflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - - -procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; - OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); -var - strm: TZStreamRec; - P: Pointer; - BufInc: Integer; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - BufInc := (InBytes + 255) and not 255; - if OutEstimate = 0 then - OutBytes := BufInc - else - OutBytes := OutEstimate; - GetMem(OutBuf, OutBytes); - try - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := OutBytes; - DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); - try - while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do - begin - P := OutBuf; - Inc(OutBytes, BufInc); - ReallocMem(OutBuf, OutBytes); - strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); - strm.avail_out := BufInc; - end; - finally - DCheck(inflateEnd(strm)); - end; - ReallocMem(OutBuf, strm.total_out); - OutBytes := strm.total_out; - except - FreeMem(OutBuf); - raise - end; -end; - -procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; - const OutBuf: Pointer; BufSize: Integer); -var - strm: TZStreamRec; -begin - FillChar(strm, sizeof(strm), 0); - strm.zalloc := zlibAllocMem; - strm.zfree := zlibFreeMem; - strm.next_in := InBuf; - strm.avail_in := InBytes; - strm.next_out := OutBuf; - strm.avail_out := BufSize; - DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); - try - if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then - raise EZlibError.CreateRes(@sTargetBufferTooSmall); - finally - DCheck(inflateEnd(strm)); - end; -end; - -// TCustomZlibStream - -constructor TCustomZLibStream.Create(Strm: TStream); -begin - inherited Create; - FStrm := Strm; - FStrmPos := Strm.Position; - FZRec.zalloc := zlibAllocMem; - FZRec.zfree := zlibFreeMem; -end; - -procedure TCustomZLibStream.Progress(Sender: TObject); -begin - if Assigned(FOnProgress) then FOnProgress(Sender); -end; - - -// TCompressionStream - -constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel; - Dest: TStream); -const - Levels: array [TCompressionLevel] of ShortInt = - (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION); -begin - inherited Create(Dest); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec))); -end; - -destructor TCompressionStream.Destroy; -begin - FZRec.next_in := nil; - FZRec.avail_in := 0; - try - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END) - and (FZRec.avail_out = 0) do - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - end; - if FZRec.avail_out < sizeof(FBuffer) then - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out); - finally - deflateEnd(FZRec); - end; - inherited Destroy; -end; - -function TCompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - raise ECompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TCompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - FZRec.next_in := @Buffer; - FZRec.avail_in := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_in > 0) do - begin - CCheck(deflate(FZRec, 0)); - if FZRec.avail_out = 0 then - begin - FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); - FZRec.next_out := FBuffer; - FZRec.avail_out := sizeof(FBuffer); - FStrmPos := FStrm.Position; - Progress(Self); - end; - end; - Result := Count; -end; - -function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -begin - if (Offset = 0) and (Origin = soFromCurrent) then - Result := FZRec.total_in - else - raise ECompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TCompressionStream.GetCompressionRate: Single; -begin - if FZRec.total_in = 0 then - Result := 0 - else - Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0; -end; - - -// TDecompressionStream - -constructor TDecompressionStream.Create(Source: TStream); -begin - inherited Create(Source); - FZRec.next_in := FBuffer; - FZRec.avail_in := 0; - DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec))); -end; - -destructor TDecompressionStream.Destroy; -begin - FStrm.Seek(-FZRec.avail_in, 1); - inflateEnd(FZRec); - inherited Destroy; -end; - -function TDecompressionStream.Read(var Buffer; Count: Longint): Longint; -begin - FZRec.next_out := @Buffer; - FZRec.avail_out := Count; - if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; - while (FZRec.avail_out > 0) do - begin - if FZRec.avail_in = 0 then - begin - FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); - if FZRec.avail_in = 0 then - begin - Result := Count - FZRec.avail_out; - Exit; - end; - FZRec.next_in := FBuffer; - FStrmPos := FStrm.Position; - Progress(Self); - end; - CCheck(inflate(FZRec, 0)); - end; - Result := Count; -end; - -function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - raise EDecompressionError.CreateRes(@sInvalidStreamOp); -end; - -function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -var - I: Integer; - Buf: array [0..4095] of Char; -begin - if (Offset = 0) and (Origin = soFromBeginning) then - begin - DCheck(inflateReset(FZRec)); - FZRec.next_in := FBuffer; - FZRec.avail_in := 0; - FStrm.Position := 0; - FStrmPos := 0; - end - else if ( (Offset >= 0) and (Origin = soFromCurrent)) or - ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then - begin - if Origin = soFromBeginning then Dec(Offset, FZRec.total_out); - if Offset > 0 then - begin - for I := 1 to Offset div sizeof(Buf) do - ReadBuffer(Buf, sizeof(Buf)); - ReadBuffer(Buf, Offset mod sizeof(Buf)); - end; - end - else - raise EDecompressionError.CreateRes(@sInvalidStreamOp); - Result := FZRec.total_out; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/adler32.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/adler32.obj deleted file mode 100644 index 84d2850..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/adler32.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/compress.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/compress.obj deleted file mode 100644 index 90cf74f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/compress.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/crc32.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/crc32.obj deleted file mode 100644 index ea14153..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/crc32.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/deflate.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/deflate.obj deleted file mode 100644 index 3ffc8bc..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/deflate.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/gzio.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/gzio.obj deleted file mode 100644 index ff94037..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/gzio.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/infback.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/infback.obj deleted file mode 100644 index 2114f10..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/infback.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inffast.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inffast.obj deleted file mode 100644 index c8f5b1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inffast.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inflate.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inflate.obj deleted file mode 100644 index 4c53c01..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inflate.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inftrees.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inftrees.obj deleted file mode 100644 index c37455e..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/inftrees.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/trees.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/trees.obj deleted file mode 100644 index 98a6110..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/trees.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uROZLib.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uROZLib.pas deleted file mode 100644 index 013be22..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uROZLib.pas +++ /dev/null @@ -1,923 +0,0 @@ -(* - License file: - The MIT License -Copyright (c) 2002-2005 Roberto Della Pasqua and previous - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*) -{***************************************************************************** -* ZLibEx.pas (zlib 1.2.3) * -* * -* copyright (c) 2002-2005 Roberto Della Pasqua (www.dellapasqua.com) * -* copyright (c) 2000-2002 base2 technologies (www.base2ti.com) * -* copyright (c) 1997 Borland International (www.borland.com) * -* * -* revision history * -* 2006.04.21 updated with latest Borland C++ 2006 SP2 * -* 2005.02.03 updated with latest zlib 1.2.2, thanks to Fabio Dell'Aria * -* (www.eurekalog.com) for provide me the compiled objects * -* zlib is compiled without crc32-compressBound * -* 2003.12.18 updated with latest zlib 1.2.1 (see www.zlib.org) * -* obj's compiled with fastest speed optimizations (bcc 5.6.4) * -* (hint:see basm newsgroup about a Move RTL fast replacement) * -* Thanks to Cosmin Truta for the pascal zlib reference * -* * -* 2002.11.02 ZSendToBrowser: deflate algorithm for HTTP1.1 compression * -* 2002.10.24 ZFastCompressString and ZFastDecompressString:300% faster * -* 2002.10.15 recompiled zlib 1.1.4 c sources with speed optimizations * -* (and targeting 686+ cpu) and changes to accomodate Borland * -* standards (C++ v5.6 compiler) * -* 2002.10.15 optimized move mem for not aligned structures (strings,etc)* -* 2002.10.15 little changes to avoid system unique string calls * -* * -* 2002.03.15 updated to zlib version 1.1.4 * -* 2001.11.27 enhanced TZDecompressionStream.Read to adjust source * -* stream position upon end of compression data * -* fixed endless loop in TZDecompressionStream.Read when * -* destination count was greater than uncompressed data * -* 2001.10.26 renamed unit to integrate "nicely" with delphi 6 * -* 2000.11.24 added soFromEnd condition to TZDecompressionStream.Seek * -* added ZCompressStream and ZDecompressStream * -* 2000.06.13 optimized, fixed, rewrote, and enhanced the zlib.pas unit * -* included on the delphi cd (zlib version 1.1.3) * -* * -* acknowledgements * -* erik turner Z*Stream routines * -* david bennion finding the nastly little endless loop quirk with the * -* TZDecompressionStream.Read method * -* burak kalayci informing me about the zlib 1.1.4 update * -*****************************************************************************} - -unit uROZlib; - -interface - -uses - Windows, - Sysutils, - Classes; - -const - ZLIB_VERSION = '1.2.3'; - -type - TZAlloc = function(opaque: Pointer; items, size: Integer): Pointer; - TZFree = procedure(opaque, block: Pointer); - TZCompressionLevel = (clNone, clFastest, clDefault, clMax); - - {** TZStreamRec ***********************************************************} - - TZStreamRec = packed record - next_in: PChar; // next input byte - avail_in: Longint; // number of bytes available at next_in - total_in: Longint; // total nb of input bytes read so far - next_out: PChar; // next output byte should be put here - avail_out: Longint; // remaining free space at next_out - total_out: Longint; // total nb of bytes output so far - msg: PChar; // last error message, NULL if no error - state: Pointer; // not visible by applications - zalloc: TZAlloc; // used to allocate the internal state - zfree: TZFree; // used to free the internal state - opaque: Pointer; // private data object passed to zalloc and zfree - data_type: Integer; // best guess about the data type: ascii or binary - adler: Longint; // adler32 value of the uncompressed data - reserved: Longint; // reserved for future use - end; - - {** TCustomZStream ********************************************************} - - TCustomZStream = class(TStream) - private - FStream: TStream; - FStreamPos: Integer; - FOnProgress: TNotifyEvent; - FZStream: TZStreamRec; - FBuffer: array[Word] of Char; - protected - constructor Create(stream: TStream); - procedure DoProgress; dynamic; - property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; - end; - - {** TZCompressionStream ***************************************************} - - TCompressionStream = class(TCustomZStream) - private - function GetCompressionRate: Single; - public - constructor Create(compressionLevel: TZCompressionLevel; dest: TStream); - destructor Destroy; override; - function Read(var buffer; count: Longint): Longint; override; - function Write(const buffer; count: Longint): Longint; override; - function Seek(offset: Longint; origin: Word): Longint; override; - property CompressionRate: Single read GetCompressionRate; - property OnProgress; - end; - - {** TZDecompressionStream *************************************************} - - TDecompressionStream = class(TCustomZStream) - public - constructor Create(source: TStream); - destructor Destroy; override; - function Read(var buffer; count: Longint): Longint; override; - function Write(const buffer; count: Longint): Longint; override; - function Seek(offset: Longint; origin: Word): Longint; override; - property OnProgress; - end; - -{** zlib public routines ****************************************************} - -{***************************************************************************** -* ZCompress * -* * -* pre-conditions * -* inBuffer = pointer to uncompressed data * -* inSize = size of inBuffer (bytes) * -* outBuffer = pointer (unallocated) * -* level = compression level * -* * -* post-conditions * -* outBuffer = pointer to compressed data (allocated) * -* outSize = size of outBuffer (bytes) * -*****************************************************************************} - -procedure ZCompress(const inBuffer: Pointer; inSize: Integer; - out outBuffer: Pointer; out outSize: Integer; - level: TZCompressionLevel = clDefault); - -{***************************************************************************** -* ZDecompress * -* * -* pre-conditions * -* inBuffer = pointer to compressed data * -* inSize = size of inBuffer (bytes) * -* outBuffer = pointer (unallocated) * -* outEstimate = estimated size of uncompressed data (bytes) * -* * -* post-conditions * -* outBuffer = pointer to decompressed data (allocated) * -* outSize = size of outBuffer (bytes) * -*****************************************************************************} - -procedure ZDecompress(const inBuffer: Pointer; inSize: Integer; - out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer = 0); - -{** string routines *********************************************************} - -function ZCompressStr(const s: string; level: TZCompressionLevel = clDefault): string; - -function ZDecompressStr(const s: string): string; - -{** stream routines *********************************************************} - -procedure ZCompressStream(inStream, outStream: TStream; - level: TZCompressionLevel = clDefault); - -procedure ZDecompressStream(inStream, outStream: TStream); - -{** export routines ********************************************************} - -function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt; -procedure MoveI32(const Source; var Dest; Count: Integer); -procedure ZFastCompressString(var s: string; level: TZCompressionLevel); -procedure ZFastDecompressString(var s: string); -procedure ZSendToBrowser(var s: string); -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; recsize: Integer): Integer; -function DeflateInit2_(var strm: TZStreamRec; level: integer; method: integer; windowBits: integer; memLevel: integer; strategy: integer; version: PChar; recsize: integer): integer; -function deflate(var strm: TZStreamRec; flush: Integer): Integer; -function deflateEnd(var strm: TZStreamRec): Integer; -function inflateInit_(var strm: TZStreamRec; version: PChar; recsize: Integer): Integer; -function inflateInit2_(var strm: TZStreamRec; windowBits: integer; version: PChar; recsize: integer): integer; -function inflate(var strm: TZStreamRec; flush: Integer): Integer; -function inflateEnd(var strm: TZStreamRec): Integer; -function inflateReset(var strm: TZStreamRec): Integer; - -type - EZLibError = class(Exception); - EZCompressionError = class(EZLibError); - EZDecompressionError = class(EZLibError); - -implementation - -{** link zlib 1.2.3 **************************************************************} -{** bcc32 -c -6 -O2 -Ve -X -pr -a8 -b -d -k- -vi -tWM -r -RT- -ff *.c **} - -{$L adler32.obj} -{$L deflate.obj} -{$L infback.obj} -{$L inffast.obj} -{$L inflate.obj} -{$L inftrees.obj} -{$L trees.obj} -{$L compress.obj} -{$L crc32.obj} - -{***************************************************************************** -* note: do not reorder the above -- doing so will result in external * -* functions being undefined * -*****************************************************************************} - -const - {** flush constants *******************************************************} - - Z_NO_FLUSH = 0; - Z_PARTIAL_FLUSH = 1; - Z_SYNC_FLUSH = 2; - Z_FULL_FLUSH = 3; - Z_FINISH = 4; - - {** return codes **********************************************************} - - Z_OK = 0; - Z_STREAM_END = 1; - Z_NEED_DICT = 2; - Z_ERRNO = (-1); - Z_STREAM_ERROR = (-2); - Z_DATA_ERROR = (-3); - Z_MEM_ERROR = (-4); - Z_BUF_ERROR = (-5); - Z_VERSION_ERROR = (-6); - - {** compression levels ****************************************************} - - Z_NO_COMPRESSION = 0; - Z_BEST_SPEED = 1; - Z_BEST_COMPRESSION = 9; - Z_DEFAULT_COMPRESSION = (-1); - - {** compression strategies ************************************************} - - Z_FILTERED = 1; - Z_HUFFMAN_ONLY = 2; - Z_DEFAULT_STRATEGY = 0; - - {** data types ************************************************************} - - Z_BINARY = 0; - Z_ASCII = 1; - Z_UNKNOWN = 2; - - {** compression methods ***************************************************} - - Z_DEFLATED = 8; - - {** return code messages **************************************************} - - _z_errmsg: array[0..9] of PChar = ( - 'need dictionary', // Z_NEED_DICT (2) - 'stream end', // Z_STREAM_END (1) - '', // Z_OK (0) - 'file error', // Z_ERRNO (-1) - 'stream error', // Z_STREAM_ERROR (-2) - 'data error', // Z_DATA_ERROR (-3) - 'insufficient memory', // Z_MEM_ERROR (-4) - 'buffer error', // Z_BUF_ERROR (-5) - 'incompatible version', // Z_VERSION_ERROR (-6) - '' - ); - - ZLevels: array[TZCompressionLevel] of Shortint = ( - Z_NO_COMPRESSION, - Z_BEST_SPEED, - Z_DEFAULT_COMPRESSION, - Z_BEST_COMPRESSION - ); - - SZInvalid = 'Invalid ZStream operation!'; - -{*********************** Peter Morris not aligned move **********************} - -procedure MoveI32(const Source; var Dest; Count: Integer); register; -asm - cmp ECX,0 - Je @JustQuit - push ESI - push EDI - mov ESI, EAX - mov EDI, EDX - @Loop: - Mov AL, [ESI] - Inc ESI - mov [EDI], AL - Inc EDI - Dec ECX - Jnz @Loop - pop EDI - pop ESI - @JustQuit: -end; -{****************************************************************************} - -{** deflate routines ********************************************************} - -function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; - recsize: Integer): Integer; external; - -function DeflateInit2_(var strm: TZStreamRec; level: integer; method: integer; windowBits: integer; - memLevel: integer; strategy: integer; version: PChar; recsize: integer): integer; external; - -function deflate(var strm: TZStreamRec; flush: Integer): Integer; - external; - -function deflateEnd(var strm: TZStreamRec): Integer; external; - -{** inflate routines ********************************************************} - -function inflateInit_(var strm: TZStreamRec; version: PChar; - recsize: Integer): Integer; external; - -function inflateInit2_(var strm: TZStreamRec; windowBits: integer; - version: PChar; recsize: integer): integer; external; - -function inflate(var strm: TZStreamRec; flush: Integer): Integer; - external; - -function inflateEnd(var strm: TZStreamRec): Integer; external; - -function inflateReset(var strm: TZStreamRec): Integer; external; - -{** utility routines *******************************************************} - -function adler32; external; -//function crc32; external; -//function compressBound; external; - -{** zlib function implementations *******************************************} - -function zcalloc(opaque: Pointer; items, size: Integer): Pointer; -begin - GetMem(result, items * size); -end; - -procedure zcfree(opaque, block: Pointer); -begin - FreeMem(block); -end; - -{** c function implementations **********************************************} - -procedure _memset(p: Pointer; b: Byte; count: Integer); cdecl; -begin - FillChar(p^, count, b); -end; - -procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; -begin - Move(source^, dest^, count); -end; - -function _malloc(Size: Integer): Pointer; cdecl; -begin - GetMem(Result, Size); -end; - -procedure _free(Block: Pointer); cdecl; -begin - FreeMem(Block); -end; - -{** custom zlib routines ****************************************************} - -function DeflateInit(var stream: TZStreamRec; level: Integer): Integer; -begin - result := DeflateInit_(stream, level, ZLIB_VERSION, SizeOf(TZStreamRec)); -end; - -function DeflateInit2(var stream: TZStreamRec; level, method, windowBits, - memLevel, strategy: Integer): Integer; -begin - result := DeflateInit2_(stream, level, method, windowBits, memLevel, strategy, ZLIB_VERSION, SizeOf(TZStreamRec)); -end; - -function InflateInit(var stream: TZStreamRec): Integer; -begin - result := InflateInit_(stream, ZLIB_VERSION, SizeOf(TZStreamRec)); -end; - -function InflateInit2(var stream: TZStreamRec; windowBits: Integer): Integer; -begin - result := InflateInit2_(stream, windowBits, ZLIB_VERSION, SizeOf(TZStreamRec)); -end; - -{****************************************************************************} - -function ZCompressCheck(code: Integer): Integer; -begin - result := code; - - if code < 0 then - begin - raise EZCompressionError.Create(_z_errmsg[2 - code]); - end; -end; - -function ZDecompressCheck(code: Integer): Integer; -begin - Result := code; - - if code < 0 then - begin - raise EZDecompressionError.Create(_z_errmsg[2 - code]); - end; -end; - -procedure ZCompress(const inBuffer: Pointer; inSize: Integer; - out outBuffer: Pointer; out outSize: Integer; - level: TZCompressionLevel); -const - delta = 256; -var - zstream: TZStreamRec; -begin - FillChar(zstream, SizeOf(TZStreamRec), 0); - - outSize := ((inSize + (inSize div 10) + 12) + 255) and not 255; - GetMem(outBuffer, outSize); - - try - zstream.next_in := inBuffer; - zstream.avail_in := inSize; - zstream.next_out := outBuffer; - zstream.avail_out := outSize; - - ZCompressCheck(DeflateInit(zstream, ZLevels[level])); - - try - while ZCompressCheck(deflate(zstream, Z_FINISH)) <> Z_STREAM_END do - begin - Inc(outSize, delta); - ReallocMem(outBuffer, outSize); - - zstream.next_out := PChar(Integer(outBuffer) + zstream.total_out); - zstream.avail_out := delta; - end; - finally - ZCompressCheck(deflateEnd(zstream)); - end; - - ReallocMem(outBuffer, zstream.total_out); - outSize := zstream.total_out; - except - FreeMem(outBuffer); - raise; - end; -end; - -procedure ZCompress2(const inBuffer: Pointer; inSize: Integer; - out outBuffer: Pointer; out outSize: Integer); -const - delta = 256; -var - zstream: TZStreamRec; -begin - FillChar(zstream, SizeOf(TZStreamRec), 0); - - outSize := ((inSize + (inSize div 10) + 12) + 255) and not 255; - GetMem(outBuffer, outSize); - - try - zstream.next_in := inBuffer; - zstream.avail_in := inSize; - zstream.next_out := outBuffer; - zstream.avail_out := outSize; - - ZCompressCheck(DeflateInit2(zstream, 1, 8, -15, 9, 0)); - - try - while ZCompressCheck(deflate(zstream, Z_FINISH)) <> Z_STREAM_END do - begin - Inc(outSize, delta); - ReallocMem(outBuffer, outSize); - - zstream.next_out := PChar(Integer(outBuffer) + zstream.total_out); - zstream.avail_out := delta; - end; - finally - ZCompressCheck(deflateEnd(zstream)); - end; - - ReallocMem(outBuffer, zstream.total_out); - outSize := zstream.total_out; - except - FreeMem(outBuffer); - raise; - end; -end; - -procedure ZDecompress(const inBuffer: Pointer; inSize: Integer; - out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer); -var - zstream: TZStreamRec; - delta: Integer; -begin - FillChar(zstream, SizeOf(TZStreamRec), 0); - - delta := (inSize + 255) and not 255; - - if outEstimate = 0 then outSize := delta - else outSize := outEstimate; - - GetMem(outBuffer, outSize); - - try - zstream.next_in := inBuffer; - zstream.avail_in := inSize; - zstream.next_out := outBuffer; - zstream.avail_out := outSize; - - ZDecompressCheck(InflateInit(zstream)); - - try - while ZDecompressCheck(inflate(zstream, Z_NO_FLUSH)) <> Z_STREAM_END do - begin - Inc(outSize, delta); - ReallocMem(outBuffer, outSize); - - zstream.next_out := PChar(Integer(outBuffer) + zstream.total_out); - zstream.avail_out := delta; - end; - finally - ZDecompressCheck(inflateEnd(zstream)); - end; - - ReallocMem(outBuffer, zstream.total_out); - outSize := zstream.total_out; - except - FreeMem(outBuffer); - raise; - end; -end; - -{** string routines *********************************************************} - -function ZCompressStr(const s: string; level: TZCompressionLevel): string; -var - buffer: Pointer; - size: Integer; -begin - ZCompress(PChar(s), Length(s), buffer, size, level); - SetLength(result, size); - Move(buffer^, pointer(result)^, size); - FreeMem(buffer); -end; - -procedure ZFastCompressString(var s: string; level: TZCompressionLevel); -var - outBuf: Pointer; - outBytes: Integer; -begin - ZCompress(pointer(s), length(s), outBuf, outBytes, level); - SetLength(s, outBytes); - MoveI32(pointer(outBuf)^, pointer(s)^, outBytes); - FreeMem(outBuf); -end; - -procedure ZFastDecompressString(var s: string); -var - outBuf: Pointer; - outBytes: Integer; -begin - ZDecompress(pointer(s), Length(s), outBuf, outBytes); - SetLength(s, outBytes); - MoveI32(pointer(outBuf)^, pointer(s)^, outBytes); - FreeMem(outBuf); -end; - -procedure ZSendToBrowser(var s: string); -var - outBuf: Pointer; - outBytes: Integer; -begin - ZCompress2(pointer(s), length(s), outBuf, outBytes); - SetLength(s, outBytes); - Move(pointer(outBuf)^, pointer(s)^, outBytes); - FreeMem(outBuf); -end; - -function ZDecompressStr(const s: string): string; -var - buffer: Pointer; - size: Integer; -begin - ZDecompress(PChar(s), Length(s), buffer, size); - SetLength(result, size); - Move(buffer^, pointer(result)^, size); - FreeMem(buffer); -end; - -{** stream routines *********************************************************} - -procedure ZCompressStream(inStream, outStream: TStream; - level: TZCompressionLevel); -const - bufferSize = 32768; -var - zstream: TZStreamRec; - zresult: Integer; - inBuffer: array[0..bufferSize - 1] of Char; - outBuffer: array[0..bufferSize - 1] of Char; - inSize: Integer; - outSize: Integer; -begin - FillChar(zstream, SizeOf(TZStreamRec), 0); - - ZCompressCheck(DeflateInit(zstream, ZLevels[level])); - - inSize := inStream.Read(inBuffer, bufferSize); - - while inSize > 0 do - begin - zstream.next_in := inBuffer; - zstream.avail_in := inSize; - - repeat - zstream.next_out := outBuffer; - zstream.avail_out := bufferSize; - - ZCompressCheck(deflate(zstream, Z_NO_FLUSH)); - - // outSize := zstream.next_out - outBuffer; - outSize := bufferSize - zstream.avail_out; - - outStream.Write(outBuffer, outSize); - until (zstream.avail_in = 0) and (zstream.avail_out > 0); - - inSize := inStream.Read(inBuffer, bufferSize); - end; - - repeat - zstream.next_out := outBuffer; - zstream.avail_out := bufferSize; - - zresult := ZCompressCheck(deflate(zstream, Z_FINISH)); - - // outSize := zstream.next_out - outBuffer; - outSize := bufferSize - zstream.avail_out; - - outStream.Write(outBuffer, outSize); - until (zresult = Z_STREAM_END) and (zstream.avail_out > 0); - - ZCompressCheck(deflateEnd(zstream)); -end; - -procedure ZDecompressStream(inStream, outStream: TStream); -const - bufferSize = 32768*2; -var - zstream: TZStreamRec; - zresult: Integer; - inBuffer: array[0..bufferSize - 1] of Char; - outBuffer: array[0..bufferSize - 1] of Char; - inSize: Integer; - outSize: Integer; -begin - FillChar(zstream, SizeOf(TZStreamRec), 0); - - ZCompressCheck(InflateInit(zstream)); - - inSize := inStream.Read(inBuffer, bufferSize); - - while inSize > 0 do - begin - zstream.next_in := inBuffer; - zstream.avail_in := inSize; - - repeat - zstream.next_out := outBuffer; - zstream.avail_out := bufferSize; - - ZCompressCheck(inflate(zstream, Z_NO_FLUSH)); - - // outSize := zstream.next_out - outBuffer; - outSize := bufferSize - zstream.avail_out; - - outStream.Write(outBuffer, outSize); - until (zstream.avail_in = 0) and (zstream.avail_out > 0); - - inSize := inStream.Read(inBuffer, bufferSize); - end; - - repeat - zstream.next_out := outBuffer; - zstream.avail_out := bufferSize; - - zresult := ZCompressCheck(inflate(zstream, Z_FINISH)); - - // outSize := zstream.next_out - outBuffer; - outSize := bufferSize - zstream.avail_out; - - outStream.Write(outBuffer, outSize); - until (zresult = Z_STREAM_END) and (zstream.avail_out > 0); - - ZCompressCheck(inflateEnd(zstream)); -end; - -{** TCustomZStream **********************************************************} - -constructor TCustomZStream.Create(stream: TStream); -begin - inherited Create; - FStream := stream; - FStreamPos := stream.Position; -end; - -procedure TCustomZStream.DoProgress; -begin - if Assigned(FOnProgress) then FOnProgress(Self); -end; - -{** TZCompressionStream *****************************************************} - -constructor TCompressionStream.Create(compressionLevel: TZCompressionLevel; dest: TStream); -begin - inherited Create(dest); - - FZStream.next_out := FBuffer; - FZStream.avail_out := SizeOf(FBuffer); - - ZCompressCheck(DeflateInit(FZStream, ZLevels[compressionLevel])); -end; - -destructor TCompressionStream.Destroy; -begin - FZStream.next_in := nil; - FZStream.avail_in := 0; - - try - if FStream.Position <> FStreamPos then FStream.Position := FStreamPos; - - while ZCompressCheck(deflate(FZStream, Z_FINISH)) <> Z_STREAM_END do - begin - FStream.WriteBuffer(FBuffer, SizeOf(FBuffer) - FZStream.avail_out); - - FZStream.next_out := FBuffer; - FZStream.avail_out := SizeOf(FBuffer); - end; - - if FZStream.avail_out < SizeOf(FBuffer) then - begin - FStream.WriteBuffer(FBuffer, SizeOf(FBuffer) - FZStream.avail_out); - end; - finally - deflateEnd(FZStream); - end; - - inherited Destroy; -end; - -function TCompressionStream.Read(var buffer; count: Longint): Longint; -begin - raise EZCompressionError.Create(SZInvalid); -end; - -function TCompressionStream.Write(const buffer; count: Longint): Longint; -begin - FZStream.next_in := @buffer; - FZStream.avail_in := count; - - if FStream.Position <> FStreamPos then FStream.Position := FStreamPos; - - while FZStream.avail_in > 0 do - begin - ZCompressCheck(deflate(FZStream, Z_NO_FLUSH)); - - if FZStream.avail_out = 0 then - begin - FStream.WriteBuffer(FBuffer, SizeOf(FBuffer)); - - FZStream.next_out := FBuffer; - FZStream.avail_out := SizeOf(FBuffer); - - FStreamPos := FStream.Position; - - DoProgress; - end; - end; - - result := Count; -end; - -function TCompressionStream.Seek(offset: Longint; origin: Word): Longint; -begin - if (offset = 0) and (origin = soFromCurrent) then - begin - result := FZStream.total_in; - end - else raise EZCompressionError.Create(SZInvalid); -end; - -function TCompressionStream.GetCompressionRate: Single; -begin - if FZStream.total_in = 0 then result := 0 - else result := (1.0 - (FZStream.total_out / FZStream.total_in)) * 100.0; -end; - -{** TZDecompressionStream ***************************************************} - -constructor TDecompressionStream.Create(source: TStream); -begin - inherited Create(source); - FZStream.next_in := FBuffer; - FZStream.avail_in := 0; - ZDecompressCheck(InflateInit(FZStream)); -end; - -destructor TDecompressionStream.Destroy; -begin - inflateEnd(FZStream); - inherited Destroy; -end; - -function TDecompressionStream.Read(var buffer; count: Longint): Longint; -var - zresult: Integer; -begin - FZStream.next_out := @buffer; - FZStream.avail_out := count; - - if FStream.Position <> FStreamPos then FStream.Position := FStreamPos; - - zresult := Z_OK; - - while (FZStream.avail_out > 0) and (zresult <> Z_STREAM_END) do - begin - if FZStream.avail_in = 0 then - begin - FZStream.avail_in := FStream.Read(FBuffer, SizeOf(FBuffer)); - - if FZStream.avail_in = 0 then - begin - result := count - FZStream.avail_out; - - Exit; - end; - - FZStream.next_in := FBuffer; - FStreamPos := FStream.Position; - - DoProgress; - end; - - zresult := ZDecompressCheck(inflate(FZStream, Z_NO_FLUSH)); - end; - - if (zresult = Z_STREAM_END) and (FZStream.avail_in > 0) then - begin - FStream.Position := FStream.Position - FZStream.avail_in; - FStreamPos := FStream.Position; - - FZStream.avail_in := 0; - end; - - result := count - FZStream.avail_out; -end; - -function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; -begin - raise EZDecompressionError.Create(SZInvalid); -end; - -function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; -var - buf: array[0..8191] of Char; - i: Integer; -begin - if (offset = 0) and (origin = soFromBeginning) then - begin - ZDecompressCheck(inflateReset(FZStream)); - - FZStream.next_in := FBuffer; - FZStream.avail_in := 0; - - FStream.Position := 0; - FStreamPos := 0; - end - else if ((offset >= 0) and (origin = soFromCurrent)) or - (((offset - FZStream.total_out) > 0) and (origin = soFromBeginning)) then - begin - if origin = soFromBeginning then Dec(offset, FZStream.total_out); - - if offset > 0 then - begin - for i := 1 to offset div SizeOf(buf) do ReadBuffer(buf, SizeOf(buf)); - ReadBuffer(buf, offset mod SizeOf(buf)); - end; - end - else if (offset = 0) and (origin = soFromEnd) then - begin - while Read(buf, SizeOf(buf)) > 0 do ; - end - else raise EZDecompressionError.Create(SZInvalid); - - result := FZStream.total_out; -end; - -end. - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uncompr.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uncompr.obj deleted file mode 100644 index 12cd70b..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/uncompr.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/zutil.obj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/zutil.obj deleted file mode 100644 index 9395409..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/ZLib/zutil.obj and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/eDefines.inc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/eDefines.inc deleted file mode 100644 index 3fde647..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/eDefines.inc +++ /dev/null @@ -1,373 +0,0 @@ -{----------------------------------------------------------------------------} -{file: eDefines.inc } -{type: Delphi include file } -{ } -{compiler: Borland Pascal 7, } -{ Delphi 1-7, Delphi 2005 for Win32 } -{ Kylix 1-3, } -{ C++Builder 1-5 (Pascal Only) } -{ } -{platforms: DOS, DPMI, Win16, Win32, Linux } -{ } -{author: mh@elitedev.com } -{date: 8/3/1997, last changed: 7/2/2002 for Delphi 7 and Kylix 3 } -{ } -{contents: Defines that can be flexibily used to determine the exact } -{ compiler version used. } -{ } -{(c)opyright elitedevelopments. all rights reserved. } -{ http://www.elitedev.com } -{ } -{ Third Party component developers are encouraged to use the set of defines } -{ established in this file, rather then their own system, for checking their } -{ component libraries agains different versions of Delphi and C++Builder. } -{ } -{ This file may be distributed freely with both free and commercial source } -{ libraries, but you are asked to please leave this comment in place, and } -{ to return any improvements you make to this file to the maintainer that } -{ is noted above. } -{----------------------------------------------------------------------------} - -{----------------------------------------------------------------------------} -{ Compiler and OS version defines: } -{ } -{ exact compiler versions: } -{ } -{ BP7 Borland Pascal 7.0 } -{ DELPHI1 Delphi 1.0 (any Delphi) } -{ DELPHI2 Delphi 2.0 } -{ DELPHI3 Delphi 3.0 } -{ DELPHI4 Delphi 4.0 } -{ DELPHI5 Delphi 5.0 } -{ DELPHI6 Delphi 6.0 } -{ DELPHI7 Delphi 7.0 } -{ DELPHI9 Delphi 2005 } -{ DELPHI2005 Delphi 2005 } -{ KYLIX1 Kylix 1.0 } -{ KYLIX2 Kylix 2.0 } -{ KYLIX3 Kylix 3.0 } -{ CBUILDER1 C++Builder 1.0 } -{ CBUILDER3 C++Builder 3.0 } -{ CBUILDER4 C++Builder 4.0 } -{ CBUILDER5 C++Builder 5.0 } -{ } -{ } -{ minimum compiler versions: } -{ } -{ DELPHI1UP Delphi 1.0 and above (any Delphi) } -{ DELPHI2UP Delphi 2.0 and above } -{ DELPHI3UP Delphi 3.0 and above } -{ DELPHI4UP Delphi 4.0 and above } -{ DELPHI5UP Delphi 5.0 and above } -{ DELPHI6UP Delphi 6.0 and above } -{ DELPHI7UP Delphi 7.0 and above } -{ DELPHI9UP Delphi 9.0 and above } -{ DELPHI2005UP Delphi 2005 and above } -{ KYLIX1UP Kylix 1.0 and above (any Kylix) } -{ KYLIX2UP Kylix 2.0 and above (any Kylix) } -{ KYLIX3UP Kylix 3.0 and above (any Kylix) } -{ CBUILDER1UP C++Builder 1.0 and above or Delphi 2 and above (any C++Builder) } -{ CBUILDER3UP C++Builder 3.0 and above or Delphi 3.0 and above } -{ CBUILDER4UP C++Builder 4.0 and above or Delphi 4.0 and above } -{ CBUILDER5UP C++Builder 5.0 and above or Delphi 5.0 and above } -{ CBUILDER6UP C++Builder 5.0 and above or Delphi 5.0 and above } -{ } -{ } -{ compiler types: } -{ } -{ BP Borland Pascal (not Delphi or C++Builder) } -{ DELPHI any Delphi version (but not C++Builder or Kylix) } -{ KYLIX any Kylix version (not Delphi or C++Builder for Windows) } -{ CBUILDER any C++Builder for Windows (Pascal) } -{ } -{ } -{ target platforms compiler types: } -{ } -{ DELPHI_16BIT 16bit Delphi (but not C++Builder!) } -{ DELPHI_32BIT 32bit Delphi (but not C++Builder) } -{ KYLIX_32BIT 32bit Kylix (but not C++Builder) } -{ CBUILDER_32BIT 32bit C++Builer's Pascal (but not Delphi) } -{ } -{ } -{ target platforms } -{ } -{ DOS any DOS (plain and DPMI) } -{ REALMODE 16bit realmode DOS } -{ PROTECTEDMODE 16bit DPMI DOS } -{ } -{ MSWINDOWS any Windows platform } -{ WIN16 16bit Windows } -{ WIN32 32bit Windows } -{ DOTNET .NET } -{ } -{ LINUX any Linux platform } -{ LINUX32 32bit Linux } -{----------------------------------------------------------------------------} - -{ defines for Borland Pascal 7.0 } -{$IFDEF VER70} - {$DEFINE BP} - {$DEFINE BP7} - {$DEFINE 16BIT} - - { defines for BP7 DOS real mode } - {$IFDEF MSDOS} - {$DEFINE DOS} - {$DEFINE REALMODE} - {$ENDIF} - - { defines for BP7 DOS protected mode } - {$IFDEF DPMI} - {$DEFINE DOS} - {$DEFINE PROTECTEDMODE} - {$ENDIF} - - { defines for BP7 Windows } - {$IFDEF WINDOWS} - {$DEFINE MSWINDOWS} - {$DEFINE WIN16} - {$ENDIF} -{$ENDIF} - -{ defines for Delphi 1.0 thru 7.0 } -{$IFNDEF LINUX} - - { defines for Delphi 1.0 } - {$IFDEF VER80} - {$DEFINE DELPHI} - {$DEFINE DELPHI1} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI_16BIT} - {$DEFINE WIN16} - {$DEFINE 16BIT} - {$ENDIF} - - { defines for Delphi 2.0 } - {$IFDEF VER90} - {$DEFINE DELPHI} - {$DEFINE DELPHI2} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$ENDIF} - - { defines for C++Builder 1.0 } - {$IFDEF VER93} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE CBUILDER} - {$DEFINE CBUILDER1} - {$DEFINE CBUILDER1UP} - {$ENDIF} - - { defines for Delphi 3.0 } - {$IFDEF VER100} - {$DEFINE DELPHI} - {$DEFINE DELPHI3} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$ENDIF} - - { defines for C++Builder 3.0 } - {$IFDEF VER110} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE CBUILDER} - {$DEFINE CBUILDER3} - {$DEFINE CBUILDER1UP} - {$DEFINE CBUILDER3UP} - {$ENDIF} - - { defines for Delphi 4.0 } - {$IFDEF VER120} - {$DEFINE DELPHI} - {$DEFINE DELPHI4} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$ENDIF} - - { defines for C++Builder 4.0 } - {$IFDEF VER125} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE CBUILDER} - {$DEFINE CBUILDER4} - {$DEFINE CBUILDER1UP} - {$DEFINE CBUILDER3UP} - {$DEFINE CBUILDER4UP} - {$ENDIF} - { defines for Delphi 5.0 } - {$IFDEF VER130} - {$DEFINE DELPHI} - {$DEFINE DELPHI5} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$ENDIF} - - { defines for C++Builder 5.0 } - {$IFDEF VER135} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$DEFINE CBUILDER} - {$DEFINE CBUILDER5} - {$DEFINE CBUILDER1UP} - {$DEFINE CBUILDER3UP} - {$DEFINE CBUILDER4UP} - {$DEFINE CBUILDER5UP} - {$ENDIF} - - { defines for Delphi 6.0 } - {$IFDEF VER140} - {$DEFINE VER140UP} - {$DEFINE DELPHI} - {$DEFINE DELPHI6} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$DEFINE DELPHI6UP} - {$ENDIF} - - { defines for Delphi 7.0 } - {$IFDEF VER150} - {$DEFINE VER140UP} - {$DEFINE DELPHI} - {$DEFINE DELPHI7} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$DEFINE DELPHI6UP} - {$DEFINE DELPHI7UP} - {$ENDIF} - - { defines for Delphi 2005 } - {$IFDEF VER170} - {$DEFINE VER140UP} - {$DEFINE DELPHI} - {$DEFINE DELPHI9} - {$DEFINE DELPHI2005} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$DEFINE DELPHI6UP} - {$DEFINE DELPHI7UP} - {$DEFINE DELPHI9UP} - {$DEFINE DELPHI2005UP} - {$DEFINE BDS} - {$DEFINE BDS3} - {$DEFINE BDS3UP} - {$ENDIF} - - { defines for Delphi 2006 } - {$IFDEF VER180} - {$DEFINE VER140UP} - {$DEFINE DELPHI} - {$DEFINE DELPHI10} - {$DEFINE DELPHI2006} - {$DEFINE DELPHI1UP} - {$DEFINE DELPHI2UP} - {$DEFINE DELPHI3UP} - {$DEFINE DELPHI4UP} - {$DEFINE DELPHI5UP} - {$DEFINE DELPHI6UP} - {$DEFINE DELPHI7UP} - {$DEFINE DELPHI9UP} - {$DEFINE DELPHI10A} - {$DEFINE DELPHI10UP} - {$DEFINE DELPHI2005UP} - {$DEFINE DELPHI2006UP} - {$DEFINE BDS} - {$DEFINE BDS4} - {$DEFINE BDS3UP} - {$DEFINE BDS4UP} - {$ENDIF} - - { defines for Delphi 2007 } - {$IFDEF VER185} - {$UNDEF DELPHI10A} // declared in VER180 - {$UNDEF DELPHI2006} // declared in VER180 - {$UNDEF BDS4} // declared in VER180 - - {$DEFINE DELPHI10B} - {$DEFINE DELPHI2007} - {$DEFINE DELPHI2007UP} - {$DEFINE BDS5} - {$DEFINE BDS5UP} - {$ENDIF} - - - {$IFDEF WIN32} - {$DEFINE MSWINDOWS} //not automatically defined for Delphi 2 thru 5 - {$DEFINE 32BIT} - {$ENDIF} - -{$ENDIF MSWINDOWS} - -{ defines for "Delphi for .NET" } -{$IFDEF CLR} - {$DEFINE DOTNET} -{$ENDIF} - -{$IFDEF DELPHI} - {$IFDEF DELPHI2UP} - {$DEFINE DELPHI_32BIT} - {$ENDIF} -{$ENDIF} - -{$IFDEF CBUILDER} - {$DEFINE CBUILDER_32BIT} -{$ENDIF} - -{ defines for Kylix 1.0 thru 3.0 } -{$IFDEF LINUX} - - {$DEFINE VER140UP} - - { Any Kylix } - {$DEFINE 32BIT} - {$DEFINE LINUX32} - {$DEFINE KYLIX_32BIT} - {$DEFINE KYLIX} - {$DEFINE KYLIX1UP} - - {$IFDEF CONDITIONALEXPRESSIONS} - {$IF Declared(CompilerVersion)} - - { Kylix 2.0 } - {$IF Declared(RTLVersion) and (RTLVersion = 14.1)} - {$DEFINE KYLIX2} - {$DEFINE KYLIX1UP} - {$DEFINE KYLIX2UP} - {$IFEND} - - { Kylix 3.0 - Delphi portion } - {$IF Declared(RTLVersion) and (RTLVersion = 14.5)} - {$DEFINE KYLIX3} - {$DEFINE KYLIX1UP} - {$DEFINE KYLIX2UP} - {$DEFINE KYLIX3UP} - {$IFEND} - - { Kylix 1.0 } - {$ELSE} - {$DEFINE KYLIX1} - {$IFEND} - {$ENDIF CONDITIONALEXPRESSIONS} - -{$ENDIF LINUX} diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncHttpServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncHttpServer.pas deleted file mode 100644 index f3e2f68..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncHttpServer.pas +++ /dev/null @@ -1,531 +0,0 @@ -unit uIPAsyncHttpServer; - -interface - -{$I RemObjects.inc} - -uses - SysUtils, Classes, uIPAsyncSocket, uIPHttpHeaders; - -const - DefaultMaxPostData = 1024 * 1024 * 2; // 2 mb - -type - TIPAsyncHttpServer = class; - TIPAsyncContext = class; - IIPAsyncContext = interface - ['{83983C87-A9ED-47F2-9352-8C61455325A0}'] - function GetOwner: TIPAsyncHttpServer; - function GetRequest: TIPHttpRequestHeaders; - function GetResponse: TIPHttpResponseHeaders; - function GetRequestData: TDynamicByteArray; - procedure SetRequestData(aData: TDynamicByteArray); - function GetResponseData: TDynamicByteArray; - procedure SetResponseData(aData: TDynamicByteArray); - function GetResponseSent: Boolean; - function GetUserData: Pointer; - procedure SetUserData(aData: Pointer); - function GetDisconnected: Boolean; - - property Owner: TIPAsyncHttpServer read GetOwner; - property Request: TIPHttpRequestHeaders read GetRequest; - property Response: TIPHttpResponseHeaders read GetResponse; - property RequestData: TDynamicByteArray read GetRequestData write SetRequestData; - property ResponseData: TDynamicByteArray read GetResponseData write SetResponseData; - property ResponseSent: Boolean read GetResponseSent; - property UserData: Pointer read GetUserData write SetUserData; - property Disconnected: Boolean read GetDisconnected; - - procedure SendResponse; - function GetSelf: TIPAsyncContext; - end; - TIPAsyncContext = class(TInterfacedObject, IIPAsyncContext) - private - fOwner: TIPAsyncHttpServer; - fRequest: TIPHttpRequestHeaders; - fResponse: TIPHttpResponseHeaders; - fRequestData: TDynamicByteArray; - fResponseData: TDynamicByteArray; - fResponseSent: Boolean; - fConnection: TIPBaseAsyncSocket; - fUserData: Pointer; - fTempBuf: TDynamicByteArray; - fBodyOffset: Integer; - fDisconnected: Boolean; - procedure cbDisconnect(sender: TIPBaseAsyncSocket); - procedure cbFirstLine(sender: TIPBaseAsyncSocket); - procedure cbHeaderLine(sender: TIPBaseAsyncSocket); - procedure cbPostData(sender: TIPBaseAsyncSocket); - procedure cbResponse(sender: TIPBaseAsyncSocket); - procedure SendInvalidRequest(aMessage: string = ''); - function GetDisconnected: Boolean; - function GetOwner: TIPAsyncHttpServer; - function GetRequest: TIPHttpRequestHeaders; - function GetRequestData: TDynamicByteArray; - function GetResponse: TIPHttpResponseHeaders; - function GetResponseData: TDynamicByteArray; - function GetResponseSent: Boolean; - function GetUserData: Pointer; - procedure SetRequestData(aData: TDynamicByteArray); - procedure SetResponseData(aData: TDynamicByteArray); - procedure SetUserData(aData: Pointer); - public - constructor Create(aOwner: TIPAsyncHttpServer; aConnection: TIPBaseAsyncSocket); - destructor Destroy; override; - - procedure Clear; - - procedure Disconnect; - - property Owner: TIPAsyncHttpServer read fOwner; - property Request: TIPHttpRequestHeaders read fRequest; - property Response: TIPHttpResponseHeaders read fResponse; - property RequestData: TDynamicByteArray read fRequestData write fRequestData; - property ResponseData: TDynamicByteArray read fResponseData write fResponseData; - property ResponseSent: Boolean read fResponseSent; - property UserData: Pointer read fUserData write fUserData; - property Disconnected: Boolean read fDisconnected; - - procedure SendResponse; - function GetSelf: TIPAsyncContext; - end; - TIPAsyncHttpRequestHandler = procedure (Sender: TObject; aContext: IIPAsyncContext) of Object; - TIPAsyncHttpServer = class(TObject) - private - fOnManualBind: TNotifyEvent; - fOnBeforeData, - fOnBeforeCleanupContext, - fOnRequest: TIPAsyncHttpRequestHandler; - fOnResponseSent, - fOnResponsefailed: TIPAsyncHttpRequestHandler; - fMaxPostData: Integer; - fMaxHeaderLines: Integer; - fActive: Boolean; - fSocket4, - fSocket6: TIPBaseAsyncSocket; - fBindV4, - fBindV6: Boolean; - fPort: Integer; - fClients: TInterfaceList; - procedure SetActive(aValue: Boolean); - procedure cbAccept(aSender: TIPBaseAsyncSocket); - procedure DisconnectClients; - public - constructor Create; - destructor Destroy; override; - - property Socket4: TIPBaseAsyncSocket read fSocket4; - property Socket6: TIPBaseAsyncSocket read fSocket6; - property Port: Integer read fPort write fPort default 80; - property BindV4: Boolean read fBindV4 write fBindV4 default true; - property BindV6: Boolean read fBindV6 write fBindV6 default false; - property MaxHeaderLines: Integer read fMaxHeaderLines write fMaxHeaderLines default 64; - - property Active: Boolean read fActive write SetActive; - - property MaxPostData: Integer read fMaxPostData write fMaxPostData default DefaultMaxPostData; - - property OnManualBind: TNotifyEvent read fOnManualBind write fOnManualBind; - property OnBeforeData: TIPAsyncHttpRequestHandler read fOnBeforeData write fOnBeforeData; - property OnRequest: TIPAsyncHttpRequestHandler read fOnrequest write fOnrequest; - property OnBeforeCleanupContext: TIPAsyncHttpRequestHandler read fOnBeforeCleanupContext write fOnBeforeCleanupContext; - property OnResponseSent: TIPAsyncHttpRequestHandler read fOnResponseSent write fOnResponseSent; - property OnResponseFailed: TIPAsyncHttpRequestHandler read fOnResponsefailed write fOnResponsefailed; - - end; - -implementation - -uses Math; - -{ TIPAsyncContext } - -procedure TIPAsyncContext.cbDisconnect(sender: TIPBaseAsyncSocket); -var - lConn: TIPBaseAsyncSocket; -begin - fDisconnected := true; - if assigned(fOwner) and assigned(fOwner.fOnBeforeCleanupContext) then - fOwner.fOnBeforeCleanupContext(fOwner, Self); - lConn := fConnection; - fConnection := nil; - if lConn <> nil then begin - lConn.EndDisconnect; - lConn.Free; - end; - if assigned(fOwner) then begin - fOwner.fClients.Remove(IIPAsyncContext(self)); - end; -end; - -procedure TIPAsyncContext.cbFirstLine(sender: TIPBaseAsyncSocket); -var - lLine: string; - lIdx: Integer; -begin - if not sender.EndReadLine(lLine) then begin - cbDisconnect(sender); - exit; - end; - lIdx := pos(' ', lLine); - if lIdx = 0 then begin - SendInvalidRequest; - exit; - end; - fRequest.Method := copy(lLine, 1, lIdx-1); - Delete(lLine, 1, lIdx); - lIdx := pos(' ', lLine); - if lIdx = 0 then begin - SendInvalidRequest; - exit; - end; - fRequest.Path := copy(lLine, 1, lIdx -1); - fRequest.Version := UpperCase(copy(lLine, lIdx+1, MaxInt)); - if (fRequest.Method <> 'GET') and (fRequest.Method <> 'POST') then begin - SendInvalidRequest; - exit; - end; - - sender.BeginReadLine(cbHeaderLine); -end; - -procedure TIPAsyncContext.cbHeaderLine(sender: TIPBaseAsyncSocket); -var - lLine: string; - i: Integer; - lName, lVal: string; -begin - if not Sender.EndReadLine(lLine) then begin - cbDisconnect(sender); - exit; - end; - if lLine <> '' then begin - if assigned(fOwner) and (fRequest.Headers.Count > fOwner.MaxHeaderLines) then begin - SendInvalidRequest; - exit; - end; - i := Pos(':', lLine); - if i = 0 then begin - SendInvalidRequest; - exit; - end; - lName := Trim(copy(lLine, 1, i-1)); - lVal := trim(Copy(lLine, i+1, MaxInt)); - fRequest.Headers.Add(lName+'='+lVal); - sender.BeginReadLine(cbHeaderLine); - end else begin - if fRequest.Method = 'POST' then begin - try - if assigned(fOwner) and assigned(fowner.fOnBeforeData) then fOwner.fOnBeforeData(fOwner, Self); - except - SendInvalidRequest; // we cannot let exceptions escape to the caller thread. - exit; - end; - if fRequest.ContentLength > fOwner.fMaxPostData then begin - SendInvalidRequest('Content-Length too large'); - exit; - end; - SetLength(fRequestData, fRequest.ContentLength); - sender.BeginReceive(@fRequestData[0], 0, Length(fRequestData), cbPostData); - end else begin - try - if assigned(fOwner) and assigned(fOwner.fOnRequest) then begin - fOwner.fOnRequest(fOwner, Self); - end else begin - SendInvalidRequest('Request handler not assigned'); - exit; - end; - except - SendInvalidRequest; - exit; - end; - end; - end; -end; - -procedure TIPAsyncContext.cbPostData(sender: TIPBaseAsyncSocket); -begin - if sender.EndReceive < Length(fRequestData) then begin - cbDisconnect(sender); // we got disconnected when there's less data. When buffered is true it won't return until all data is there. - exit; - end; - try - if assigned(fOwner) and assigned(fOwner.fOnRequest) then begin - fOwner.fOnRequest(fOwner, Self); - end else begin - SendInvalidRequest('Request handler not assigned'); - exit; - end; - except - SendInvalidRequest; - exit; - end; -end; - -procedure TIPAsyncContext.Clear; -begin - if assigned(fOwner) and assigned(fOwner.fOnBeforeCleanupContext) then - fOwner.fOnBeforeCleanupContext(fOwner, Self); - fRequest.Clear; - fResponse.Clear; - fRequestData := nil; - fResponseData := nil; - fResponseSent := false; -end; - -constructor TIPAsyncContext.Create(aOwner: TIPAsyncHttpServer; - aConnection: TIPBaseAsyncSocket); -begin - fOwner := aOwner; - fConnection := aConnection; - fConnection.MaxLineLength := 8096; - fConnection.OnDisconnected := cbDisconnect; - fRequest := TIPHttpRequestHeaders.Create; - fResponse := TIPHttpResponseHeaders.Create; - fconnection.Buffered := true; - fConnection.IdleTimeout := 180; // 3min - fConnection.OnTimeout := cbDisconnect; - fConnection.BeginReadLine(cbFirstLine); -end; - -destructor TIPAsyncContext.Destroy; -begin - inc(FRefCount); - Clear; - Dec(FRefCount); - fRequest.Free; - fResponse.Free; - inherited Destroy; -end; - -procedure TIPAsyncContext.Disconnect; -begin - fDisconnected := true; - if fResponseSent then begin - if assigned(fOwner) and assigned(fOwner.fOnResponsefailed) then fOwner.fOnResponsefailed(fOwner, Self); - end; - - if assigned(fConnection) then - fConnection.BeginDisconnect(cbDisconnect); -end; - -procedure TIPAsyncContext.SendInvalidRequest(aMessage: string = ''); -begin - fResponse.Code := 500; - fResponse.Reason := 'Internal Server Error'; - fResponse.Headers.VAlues['Content-Type'] := 'text/html'; - aMessage := 'Invalid Request

Invalid Request

'+aMessage+''; - SetLength(fResponseData, Length(aMessage)); - Move(aMessage[1], fResponseData[0], Length(aMessage)); - SendResponse; -end; - -procedure TIPAsyncContext.SendResponse; -var - lHeaderData: string; -begin - if fResponseSent then raise EIPSocketError.Create('Response already sent'); - fResponseSent := true; - if fDisconnected then begin - if assigned(fOwner) and assigned(fOwner.fOnResponsefailed) then begin - fOwner.fOnResponsefailed(fOwner, self); - end; - exit; - end; - fResponse.Headers.Values['Content-Length'] := IntToStr(Length(fResponseData)); - lHeaderData := fResponse.ToString; - if (Length(lHeaderData) > 4096) or (Length(fResponseData) = 0) then begin - if Length(fTempBuf) < Length(lHeaderData) then begin - if Length(lHeaderData) > 4096 then - SetLength(fTempBuf, Length(lHeaderData)) - else - SetLength(fTempBuf, 4096); - end; - Move(lHeaderdata[1], fTempBuf[0], Length(lHeaderData)); - fBodyOffset := 0; - fConnection.BeginSend(@ftempBuf[0], 0, Length(lHeaderData), cbResponse); - end else begin - if Length(fTempBuf) < 4096 then SetLength(fTempBuf, 4096); - Move(lHeaderdata[1], fTempBuf[0], Length(lHeaderData)); - fBodyOffset := 4096 - Length(lHeaderData); - if fBodyOffset > Length(fResponseData) then fBodyOffset := Length(fResponseData); - Move(fResponseData[0], fTempBuf[Length(lHeaderData)], fBodyOffset); - fconnection.BeginSend(@fTempBuf[0], 0, fBodyOffset + Length(lHeaderData), cbResponse); - end; -end; - - -procedure TIPAsyncContext.cbResponse(sender: TIPBaseAsyncSocket); -var - lLen: Integer; -begin - if fConnection.EndSend <= 0 then begin - cbDisconnect(sender); - exit; - end; - lLen := 4096; - if fBodyOffset+ lLen > Length(fResponseData) then - lLen := Length(fResponseData) - fBodyOffset; - if lLen <= 0 then begin - if assigned(fOwner) and assigned(fOwner.fOnResponseSent) then fOwner.fOnResponseSent(fOwner, Self); - Clear; // we're done - fConnection.BeginReadLine(cbFirstLine); - end else begin - move(fResponseData[fBodyOffset], fTempBuf[0], lLen); - fBodyOffset := fBodyOffset + lLen; - fcOnnection.BeginSend(@fTempBuf[0], 0, lLen, cbResponse); - end; -end; - - -function TIPAsyncContext.GetDisconnected: Boolean; -begin - result := fDisconnected; -end; - -function TIPAsyncContext.GetOwner: TIPAsyncHttpServer; -begin - result := fOwner; -end; - -function TIPAsyncContext.GetRequest: TIPHttpRequestHeaders; -begin - result := fRequest; -end; - -function TIPAsyncContext.GetRequestData: TDynamicByteArray; -begin - result := fRequestData; -end; - -function TIPAsyncContext.GetResponse: TIPHttpResponseHeaders; -begin - result := fREsponse; -end; - -function TIPAsyncContext.GetResponseData: TDynamicByteArray; -begin - result := fResponseData; -end; - -function TIPAsyncContext.GetResponseSent: Boolean; -begin - result := fResponseSent; -end; - -function TIPAsyncContext.GetUserData: Pointer; -begin - result := fUserData; -end; - -procedure TIPAsyncContext.SetRequestData(aData: TDynamicByteArray); -begin - fRequestData := aData; -end; - -procedure TIPAsyncContext.SetResponseData(aData: TDynamicByteArray); -begin - fResponseData := aData; -end; - -procedure TIPAsyncContext.SetUserData(aData: Pointer); -begin - fUserData := aDAta; -end; - -function TIPAsyncContext.GetSelf: TIPAsyncContext; -begin - result := self; -end; - -{ TIPAsyncHttpServer } - -procedure TIPAsyncHttpServer.cbAccept(aSender: TIPBaseAsyncSocket); -var - lSock: TIPBaseAsyncSocket; - lContext: IIPAsyncContext; -begin - try - lSock := aSender.EndAccept; - except - on e: EIPSocketError do - exit; - // We're shutting down, exit now. - end; - lContext := TIPAsyncContext.Create(self, lSock); - fClients.Add(lContext); - aSender.BeginAccept(cbAccept); -end; - -constructor TIPAsyncHttpServer.Create; -begin - inherited Create; - fMaxPostData := DefaultMaxPostData; - fMaxHeaderLines := 64; - fBindV6 := false; - fBindV4 := true; - fPort := 80; - fClients := TInterfaceList.Create; -end; - -destructor TIPAsyncHttpServer.Destroy; -begin - Active := False; - DisconnectClients; - fClients.Free; - inherited Destroy; -end; - -procedure TIPAsyncHttpServer.DisconnectClients; -var - i: integer; - ctx: IIPAsyncContext; -begin - fClients.Lock; - try - for i := 0 to fClients.Count -1 do begin - ctx := IIPAsyncContext(fClients[i]); - ctx.GetSelf.fOwner := nil; - ctx.GetSelf.Disconnect; - end; - finally - fClients.Unlock; - end; - fClients.Clear; -end; - -procedure TIPAsyncHttpServer.SetActive(aValue: Boolean); -begin - if fActive = aValue then exit; - fActive := aValue; - if aValue then begin - if fBindV4 then begin - fSocket4 := TIPAsyncSocket.Create(rsmTCPIP4); - if not assigned(fOnManualBind) then - fSocket4.Bind('0.0.0.0', fPort); - end; - if fBindV6 then begin - fSocket6 := TIPAsyncSocket.Create(rsmTCPIP6); - if not assigned(fOnManualBind) then - fSocket6.Bind('0.0.0.0', fPort); - end; - if assigned(fOnManualBind) then fOnManualBind(self); - if assigned(fSocket4) then begin - fSocket4.Listen(10); - fSocket4.BeginAccept(cbAccept); - end; - if assigned(fSocket6) then begin - fSocket6.Listen(10); - fSocket6.BeginAccept(cbAccept); - end; - end else begin - DisconnectClients; - fSocket4.Free; - fSocket6.Free; - fSocket4 := nil; - fSocket6 := nil; - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncSocket.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncSocket.pas deleted file mode 100644 index 7df11a8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPAsyncSocket.pas +++ /dev/null @@ -1,947 +0,0 @@ -unit uIPAsyncSocket; -{$R-,Q-} -interface - -{$I RemObjects.inc} - -uses - SysUtils, Classes, SyncObjs, synsock, uROThread; - -const - SocketsPerWorkerThread = 64; - -type - EIPSocketError = class(Exception); - TIPBaseAsyncSocket = class; - TIPSocketMode = (rsmTCPIP4, rsmTCPIP6); - TIPSocketCallback = procedure(Sender: TIPBaseAsyncSocket) of object; - TIPBaseAsyncSocket = class(TObject) - private - fBuffered: Boolean; - fMaxLineLength: Integer; - - fOnDisconnected: TIPSocketCallback; - fBufWriteCallback, fBufReadCallback: TIPSocketCallback; - - fLineSoFar: string; - fReadLineCallback: TIPSocketCallback; - fReadLineBuf: array of Byte; - fReadLineBufStart, - fReadLineBufEnd: Integer; - fIdleTimeout: Integer; - fOnTimeout: TIPSocketCallback; - - procedure BufferedSendCallback(Sender: TIPBaseAsyncSocket); - procedure BufferedReceiveCallback(sender: TIPBaseAsyncSocket); - procedure ReadLineCallback(sender: TIPBaseAsyncSocket); - - procedure BufferedBeginReceive(aCallback: TIPSocketCallback); - function BufferedEndReceive: Integer; - protected - fLastData: TDateTime; - - fWriteDestData: Pointer; - fWriteStart, - fWriteLength: Integer; - - fReadDestData: Pointer; - fReadStart, - fReadLength: Integer; - function GetReceiverBufferSize: Integer; virtual; abstract; - function GetSendBufferSize: Integer; virtual; abstract; - procedure SetReceiverBufferSize(const Value: Integer); virtual; abstract; - procedure SetSendBufferSize(const Value: Integer); virtual; abstract; - - procedure IntBeginSend(aCallback: TIPSocketCallback); virtual; abstract; - function IntEndSend: Integer; virtual; abstract; - procedure IntBeginReceive(aCallback: TIPSocketCallback); virtual; abstract; - function IntEndReceive: Integer; virtual; abstract; - public - constructor Create; - destructor Destroy; override; - - property IdleTimeout: Integer read fIdleTimeout write fIdleTimeout; // default: 0 = no timeout; Is checked every 30 seconds - property Buffered: Boolean read fBuffered write fBuffered; - property MaxLineLength: Integer read fMaxLineLength write fMaxLineLength; // 8192 - function GetLocalPort: Integer; virtual; abstract; - function GetLocalIp: string; virtual; abstract; - function GetRemotePort: Integer; virtual; abstract; - function GetRemoteIp: string; virtual; abstract; - - property ReceiverBufferSize: Integer read GetReceiverBufferSize write SetReceiverBufferSize; - property SendBufferSize: Integer read GetSendBufferSize write SetSendBufferSize; - - procedure BeginAccept(aCallback: TIPSocketCallback); virtual; abstract; - function EndAccept: TIPBaseAsyncSocket; virtual; abstract; - - procedure BeginConnect(const aIp: string; aPort: Integer; aCallback: TIPSocketCallback); virtual; abstract; - function EndConnect: Boolean; virtual; abstract; - - procedure BeginDisconnect(aCallback: TIPSocketCallback); virtual; abstract; - procedure EndDisconnect; virtual; abstract; - - // When Buffered is set; the data to be sent and the data to be received is guaranteed to be of the size requested; or the user has been disconnected - procedure BeginSend(aData: Pointer; aStart, aLength: Integer; aCallback: TIPSocketCallback); - function EndSend: Integer; - - procedure BeginReceive(aData: Pointer; aStart, aLength: Integer; aCallback: TIPSocketCallback); - function EndReceive: Integer; - - // returns true if there still is a line in the buffers - function BufferReadLine(var aLine: string): Boolean; - - procedure BeginReadLine(aCallback: TIPSocketCallback); - function EndReadLine(var aLine: string): Boolean; - - procedure Bind(const aIp: string; aPort: Integer); virtual; abstract; - procedure Listen(aBacklog: Integer); virtual; abstract; - - property OnDisconnected: TIPSocketCallback read fOnDisconnected write fOnDisconnected; - property OnTimeout: TIPSocketCallback read fOnTimeout write fOnTimeout; - end; - - TIPAsyncSocket = class; - - TIPSocketWorkerThread = class(TROThread) - private - fReadSet, - fWriteSet, - fErrorSet: TFDSet; - - fCount: Integer; - fLastTimeoutCheck: TDateTime; - - fData: array[0.. SocketsPerWorkerThread-1] of TIPAsyncSocket; - fMyCs: TCriticalSection; - fSleepEvent: TEvent; - protected - procedure Execute; override; - public - constructor Create; - destructor Destroy; override; - end; - - TIPAsyncSocket = class(TIPBaseAsyncSocket) - private - fSock: TSocket; - fLocSin, - fRemSin: TVarSin; - fMode: TIPSocketMode; - fThread: TIPSocketWorkerThread; - fReadEvent, - fWriteEvent, - fAcceptEvent, - fConnectEvent, - fDisconnectEvent: TIPSocketCallback; - fWantRead, - fWantWrite, - fWantError: Boolean; - fConnectResult: Integer; - protected - function GetReceiverBufferSize: Integer; override; - function GetSendBufferSize: Integer; override; - procedure IntBeginReceive(aCallback: TIPSocketCallback); override; - procedure IntBeginSend(aCallback: TIPSocketCallback); override; - function IntEndReceive: Integer; override; - function IntEndSend: Integer; override; - procedure SetReceiverBufferSize(const Value: Integer); override; - procedure SetSendBufferSize(const Value: Integer); override; - - constructor Create(aMode: TIPSocketMode; aHandle: TSocket); overload; - public - constructor Create(aMode: TIPSocketMode); overload; - destructor Destroy; override; - - procedure BeginAccept(aCallback: TIPSocketCallback); override; - function EndAccept: TIPBaseAsyncSocket; override; - - procedure BeginConnect(const aIp: String; aPort: Integer; aCallback: TIPSocketCallback); override; - function EndConnect: Boolean; override; - - procedure BeginDisconnect(aCallback: TIPSocketCallback); override; - procedure EndDisconnect; override; - - procedure Bind(const aIp: String; aPort: Integer); override; - - function GetLocalIp: String; override; - function GetLocalPort: Integer; override; - function GetRemoteIp: String; override; - function GetRemotePort: Integer; override; - procedure Listen(aBacklog: Integer); override; - end; - - -function InitSocket: Boolean; - -implementation - -var - SockInitialized: Boolean = False; - WsaData: TWSAData; - -type - TByteArray = array[0..4095] of byte; - PByteArray = ^TByteArray; - - -var - WorkerCS: TCriticalSection; - Workers: TList; - -function GetWorker(aSock: TIPAsyncSocket): TIPSocketWorkerThread; -var - i, j: Integer; - lWorker: TIPSocketWorkerThread; -begin - WorkerCS.Enter; - try - for i := 0 to Workers.Count -1 do begin - lWorker := TIPSocketWorkerThread(Workers[i]); - if lWorker.fCount < SocketsPerWorkerThread then begin - lWorker.Fcount := lWorker.fCount +1; - lWorker.fMyCs.Enter; - try - for j := 0 to SocketsPerWorkerThread -1 do begin - if lworker.fData[j] = nil then begin - lWorker.FData[j] := aSock; - result := lWorker; - exit; - end; - end; - finally - lWorker.fMyCs.Leave; - end; - end; - end; - lWorker := TIPSocketWorkerThread.Create; - lWorker.fMyCs.Enter; - try - lWorker.fData[0] :=aSock; - lWorker.fCount := 1; - finally - lWorker.fMyCs.Leave; - end; - Workers.Add(lWorker); - result := lWorker; - finally - WorkerCS.Leave; - end; -end; - -procedure ReleaseWorker(aWorker: TIPSocketWorkerThread; fSocket: TIPAsyncSocket); -var - j: Integer; -begin - if aworker = nil then exit; - if fSocket = nil then exit; - aWorker.fMyCs.Enter; - try - for j := 0 to SocketsPerWorkerThread -1 do begin - if aWorker.fData[j] = fSocket then begin - aWorker.FData[j] := nil; - aWorker.fCount := aWorker.fCount -1; - Exit; - end; - end; - finally - aWorker.fMyCs.Leave; - end; -end; - -function InitSocket: Boolean; -begin - if SockInitialized then begin - result := true; - exit; - end; - - if not InitSocketInterface(DLLStackName) then begin - result := False; - exit; - end; - synsock.WSAStartup(WinsockLevel, WsaData); - SockInitialized := true; - result := true; -end; - - -{ TIPBaseAsyncSocket } - -procedure TIPBaseAsyncSocket.BeginReadLine(aCallback: TIPSocketCallback); -var - i, lLen: Integer; -begin - if not fBuffered then raise EIPSocketError.Create('Buffered has to be set for BeginReadLine to work'); - if (@fBufReadCallback <> nil) or (@fReadLineCallback <> nil) then raise EIPSocketError.Create('BeginReceive already running'); - fReadLineCallback := aCallback; - if fReadLineBuf <> nil then begin - for i := fReadLineBufStart to fReadLineBufEnd -1 do begin - if fReadLineBuf[i] = 10 then begin - lLen := i - fReadLineBufStart; - if (i > fReadLineBufStart) and (fReadLineBuf[i-1] = 13) then dec(lLen); - SetLength(fLineSoFar, lLen); - Move(fReadLineBuf[fReadlineBufStart], fLineSoFar[1], lLen); - fReadLineBufStart := i +1; - fReadLineCallback := nil; - aCallback(self); - exit; - end; - end; - SetLength(fLineSoFar, fReadLineBufEnd - fReadLineBufStart); - Move(fReadLineBuf[fReadlineBufStart], fLineSoFar[1], fReadLineBufEnd - fReadLineBufStart); - end; - if fReadLineBuf = nil then SetLength(fReadLineBuf, 4096); - fReadLineBufStart := 0; - fReadLineBufEnd := 0; - fReadDestData := fReadLineBuf; - fReadStart := 0; - fReadLength := 4096; - IntBeginReceive(ReadLineCallback); -end; - -procedure TIPBaseAsyncSocket.BeginReceive(aData: Pointer; aStart, aLength: Integer; aCallback: TIPSocketCallback); -begin - if not fBuffered then begin - fReadDestData := aData; - fReadStart := aStart; - fReadLength := aLength; - IntBeginReceive(aCallback); - exit; - end; - if @aCallback = nil then raise EIPSocketError.Create('Invalid callback'); - if aLength <= 0 then raise EIPSocketError.Create('Invalid length'); - if (@fBufReadCallback <> nil) or (@fReadLineCallback <> nil) then raise EIPSocketError.Create('BeginReceive already running'); - fBufReadCallback := aCallback; - fReadDestData := @(PByteArray(aData)^[aStart]); // move ahead so we always start at 0; - fReadStart := 0; - fReadLength := aLength; - BufferedBeginReceive(BufferedReceiveCallback); -end; - - -procedure TIPBaseAsyncSocket.BufferedBeginReceive(aCallback: TIPSocketCallback); -begin - if (fReadLineBuf <> nil) and (fReadLineBufStart < fReadLineBufEnd) then begin - aCallback(self); - exit; - end; - IntBeginReceive(aCallback); -end; - -function TIPBaseAsyncSocket.BufferedEndReceive: Integer; -begin - if (fReadLineBufStart < fReadLineBufEnd) and (fReadLineBuf <> nil) then begin - result := fReadLineBufEnd - fReadLineBufStart; - if result > fReadLength then result := fReadLength; - - Move(fReadLineBuf[fReadLineBufStart], PByteArray(fReadDestData)^[fReadStart], Result); - fReadLineBufStart := fReadLineBufStart + Result; - fReadStart := fReadStart + Result; - exit; - end; - result := IntEndReceive; - fReadStart := fReadStart + Result; -end; - - -procedure TIPBaseAsyncSocket.BufferedReceiveCallback( - sender: TIPBaseAsyncSocket); -var - lCallback: TIPSocketCallback; - lEndReceiveResult: Integer; -begin - lEndReceiveResult := BufferedEndReceive; - if lEndReceiveResult <= 0 then begin // disconnected - // fReadStart := fReadStart + lEndReceiveResult; - lCallback := fBufReadCallback; - fBufReadCallback := nil; - lCallback(self); - if assigned(fOnDisconnected) then - fOnDisconnected(Self); - exit; - end; - //ReadStart := fReadStart + lEndReceiveResult; - if fReadStart < fReadLength then begin - BufferedBeginReceive(BufferedReceiveCallback); - end else begin - lCallback := fBufReadCallback; - fBufReadCallback := nil; - lCallback(self); - end; -end; - -function TIPBaseAsyncSocket.EndReceive: Integer; -begin - if not fBuffered then begin - result := IntEndReceive; - exit; - end; - result := fReadStart; - fWriteDestData := nil; - fBufWriteCallback := nil; -end; - -procedure TIPBaseAsyncSocket.BeginSend(aData: Pointer; aStart, - aLength: Integer; aCallback: TIPSocketCallback); -begin - if not fBuffered then begin - fWriteDestData:= aData; - fWriteStart := aStart; - fWriteLength := aLength; - IntBeginSend(aCallback); - exit; - end; - if @aCallback = nil then raise EIPSocketError.Create('Invalid callback'); - if aLength <= 0 then raise EIPSocketError.Create('Invalid length'); - if @fBufWriteCallback <> nil then raise EIPSocketError.Create('BeginSend already running'); - - fBufWriteCallback := aCallback; - fWriteDestData:= @(PByteArray(aData)^[aStart]); // move ahead so we always start at 0 - fWriteStart := 0; - fWriteLength := aLength; - IntBeginSend(BufferedSendCallback); -end; - -procedure TIPBaseAsyncSocket.BufferedSendCallback(Sender: TIPBaseAsyncSocket); -var - lCallback: TIPSocketCallback; - lEndSendResult: Integer; -begin - lEndSendResult := IntEndSend; - if lEndSendResult <= 0 then begin // disconnected - fWriteStart := fWriteStart + lEndSendResult; - lCallback := fBufWriteCallback; - fBufWriteCallback := nil; - lCallback(self); - if assigned(fOnDisconnected) then - fOnDisconnected(Self); - exit; - end; - fWriteStart := fWriteStart + lEndSendResult; - if fWriteStart < fWriteLength then begin - IntBeginSend(BufferedSendCallback); - end else begin - lCallback := fBufWriteCallback; - fBufWriteCallback := nil; - lCallback(self); - end; -end; - -function TIPBaseAsyncSocket.EndSend: Integer; -begin - if not fBuffered then begin - result := IntEndSend; - if (Result <= 0) and assigned(fOnDisconnected) then fOnDisconnected(Self); - exit; - end; - result := fWriteStart; - fWriteDestData := nil; - fBufWriteCallback := nil; -end; - -function TIPBaseAsyncSocket.BufferReadLine(var aLine: string): Boolean; -var - lLen, i: Integer; -begin - if not fBuffered then raise EIPSocketError.Create('Buffered has to be set for EndReadLine to work'); - if fReadLineBuf <> nil then begin - for i := fReadLineBufStart to fReadLineBufEnd -1 do begin - if fReadLineBuf[i] = 10 then begin - lLen := i - fReadLineBufStart; - if (i > fReadLineBufStart) and (fReadLineBuf[i-1] = 13) then dec(lLen); - SetLength(aLine, lLen); - Move(fReadLineBuf[fReadlineBufStart], aLine[1], lLen); - fReadLineBufStart := i +1; - result := true; - exit; - end; - end; - end; - result := false; -end; - -constructor TIPBaseAsyncSocket.Create; -begin - inherited; - fMaxLineLength := 8192; -end; - -destructor TIPBaseAsyncSocket.Destroy; -begin - inherited; -end; - -function TIPBaseAsyncSocket.EndReadLine(var aLine: string): Boolean; -begin - aLine := fLineSoFar; - result := fReadLineBufEnd >= 0; -end; - -procedure TIPBaseAsyncSocket.ReadLineCallback(sender: TIPBaseAsyncSocket); -var - s: string; - lCb: TIPSocketCallback; - i, lLen: Integer; -begin - fReadLineBufEnd := IntEndReceive; - if (fReadLineBufEnd <= 0) then begin - if assigned(fOnDisconnected) then - OnDisconnected(self); - exit; - end; - - for i := fReadLineBufStart to fReadLineBufEnd -1 do begin - if fReadLineBuf[i] = 10 then begin - lLen := i - fReadLineBufStart; - if (i > fReadLineBufStart) and (fReadLineBuf[i-1] = 13) then dec(lLen); - SetLength(s, lLen); - Move(fReadLineBuf[fReadlineBufStart], s[1], lLen); - fReadLineBufStart := i +1; - fLineSoFar := fLineSoFar + s; - lCb := fReadLineCallback; - fReadLineCallback := nil; - lCb(self); - exit; - end; - end; - SetLength(s, fReadLineBufEnd - fReadLineBufStart); - Move(fReadLineBuf[fReadlineBufStart], s[1], fReadLineBufEnd - fReadLineBufStart); - fLineSoFar := fLineSoFar + s; - fReadLineBufStart := 0; - fReadLineBufEnd := 0; - fReadDestData := fReadLineBuf; - fReadStart := 0; - fReadLength := 4096; - IntBeginReceive(ReadLineCallback); -end; - -{ TIPAsyncSocket } - -procedure TIPAsyncSocket.BeginAccept(aCallback: TIPSocketCallback); -begin - if assigned(fAcceptEvent) then raise EIPSocketError.Create('BeginAccept already called'); - if fThread = nil then fThread := GetWorker(self); - fAcceptEvent := aCallback; - fWantRead := true; -end; - -procedure TIPAsyncSocket.BeginConnect(const aIp: String; aPort: Integer; - aCallback: TIPSocketCallback); -var - lSin: TVarSin; - lRes: Integer; -begin - if assigned(fConnectEvent) then raise EIPSocketError.Create('BeginConnect already called'); - if fThread = nil then fThread := GetWorker(self); - - fConnectEvent := aCallback; - fConnectResult := 0; - if fMode = rsmTCPIP6 then - lRes := SetVarSin(lSin, aIp, IntToStr(aPort), AF_INET6, PF_INET6, SOCK_STREAM, false) - else - lRes := SetVarSin(lSin, aIp, IntToStr(aPort), AF_INET, PF_INET, SOCK_STREAM, true); - if lRes <> 0 then raise EIPSocketError.Create('Invalid Address/Port: '+inttostr(WSAGetLastError)); - lRes := Connect(fSock, lSin); - if lRes <> 0 then begin - LRes := WSAGetLastError; - if lRes <> WSAEWOULDBLOCK then raise EIPSocketError.Create('Cannot connect: '+inttostr(Lres)); - end; - fWantWrite := true; - fWantError := true; -end; - -procedure TIPAsyncSocket.BeginDisconnect(aCallback: TIPSocketCallback); -begin - if assigned(fDisconnectEvent) then raise EIPSocketError.Create('BeginDisconnect already called'); - fDisconnectEvent := aCallback; - Synsock.Shutdown(FSock, 1); - fWantRead := true; -end; - -procedure TIPAsyncSocket.Bind(const aIp: String; aPort: Integer); -var - lRes: Integer; - lSin: TVarSin; -begin - if fMode = rsmTCPIP6 then - lRes := SetVarSin(lSin, aIp, IntToStr(aPort), AF_INET6, PF_INET6, SOCK_STREAM, false) - else - lRes := SetVarSin(lSin, aIp, IntToStr(aPort), AF_INET, PF_INET, SOCK_STREAM, true); - if lRes <> 0 then raise EIPSocketError.Create('Invalid Address/Port: '+inttostr(WSAGetLastError)); - lRes := SynSock.Bind(fSock, lSin); - if lRes <> 0 then raise EIPSocketError.Create('Cannot bind: '+inttostr(WSAGetLastError)); -end; - -constructor TIPAsyncSocket.Create(aMode: TIPSocketMode); -var - lRes, lVal: Integer; -begin - inherited Create; - if not InitSocket then raise EIPSocketError.Create('Could not load socket stack'); - fMode := aMode; - if aMode = rsmTCPIP6 then - fSock := Socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP) - else - fSock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if fSock <= 0 then raise EIPSocketError.Create('Unable to create socket'); - lVal := 1; - lRes := IoctlSocket(fsock, FIONBIO, lVal); - if lRes <> 0 then raise EIPSocketError.Create('Cannot set socket to asynchronous mode: '+inttostr(synsock.WSAGetLastError)); -end; - -constructor TIPAsyncSocket.Create(aMode: TIPSocketMode; aHandle: TSocket); -var - lVal, lRes: Integer; - -begin - inherited Create; - fMode := aMode; - fSock := aHandle; - lVal := 1; - lRes := IoctlSocket(fsock, FIONBIO, lVal); - if lRes <> 0 then raise EIPSocketError.Create('Cannot set socket to asynchronous mode'); - if fThread = nil then fThread := GetWorker(self); -end; - -destructor TIPAsyncSocket.Destroy; -begin - if fThread <> nil then begin - ReleaseWorker(fThread, self); - fThread := nil; - end; - if FSock <>0 then - CloseSocket(fSock); - inherited; -end; - -function TIPAsyncSocket.EndAccept: TIPBaseAsyncSocket; -var - lAddr: TVarSin; - lSock: TSocket; -begin - fAcceptEvent := nil; - - lSock := synsock.Accept(fSock, lAddr); - - if lSock <= 0 then raise EIPSocketError.Create('Cannot accept connection'); - Result := TIPAsyncSocket.Create(fMode, lSock); - fWantRead := false; -end; - -function TIPAsyncSocket.EndConnect: Boolean; -begin - if fConnectResult = 0 then result := true - else result := false; - fConnectEvent := nil; - fWantWrite := false; - fWantError := false; -end; - -procedure TIPAsyncSocket.EndDisconnect; -begin - fDisconnectEvent := nil; - CloseSocket(fSock); - if fThread <> nil then begin - ReleaseWorker(fThread, self); - fThread := nil; - end; - fSock := 0; - fWantRead := false; -end; - -function TIPAsyncSocket.GetLocalIp: String; -begin - if fLocSin.AddressFamily = 0 then - synsock.GetSockName(FSock, fLocSin); - result := GetSinIP(fLocSin); -end; - -function TIPAsyncSocket.GetLocalPort: Integer; -begin - if fLocSin.AddressFamily = 0 then - synsock.GetSockName(FSock, fLocSin); - result := GetSinPort(fLocSin); -end; - -function TIPAsyncSocket.GetReceiverBufferSize: Integer; -var - lRes: Integer; -begin - result := 0; - lRes := 4; - GetSockOpt(fSock, SOL_Socket, SO_RCVBUF, PChar(@Result), lRes); -end; - -function TIPAsyncSocket.GetRemoteIp: String; -begin - if fRemSin.AddressFamily = 0 then - synsock.GetPeerName(FSock, fRemSin); - result := GetSinIp(fRemSin); -end; - -function TIPAsyncSocket.GetRemotePort: Integer; -begin - if fRemSin.AddressFamily = 0 then - synsock.GetPeerName(FSock, fRemSin); - result := GetSinPort(fRemSin); -end; - -function TIPAsyncSocket.GetSendBufferSize: Integer; -var - lRes: Integer; -begin - result := 0; - lRes := 4; - GetSockOpt(fSock, SOL_Socket, SO_SNDBUF, PChar(@Result), lRes); -end; - -procedure TIPAsyncSocket.IntBeginReceive(aCallback: TIPSocketCallback); -begin - if assigned(fReadEvent) then raise EIPSocketError.Create('beginReceive already called'); - fLastData := Now; - fReadEvent := aCallback; - fWantRead := true; -end; - -procedure TIPAsyncSocket.IntBeginSend(aCallback: TIPSocketCallback); -begin - if assigned(fWriteEvent) then raise EIPSocketError.Create('BeginSend already called'); - fLastData := Now; - fWriteEvent := aCallback; - fWantWrite := true; -end; - -function TIPAsyncSocket.IntEndReceive: Integer; -begin - fwantRead := false; - fReadEvent := nil; - fLastData := Now; - result := Recv(fSock, @PByteArray(fReadDestData)[fReadStart], fReadLength, 0); -end; - -function TIPAsyncSocket.IntEndSend: Integer; -begin - fWriteEvent := nil; - fWantWrite := false; - fLastData := Now; - Result := Send(fSock, @PByteArray(fWriteDestData)[fWriteStart], fWriteLength, 0); -end; - -procedure TIPAsyncSocket.Listen(aBacklog: Integer); -begin - synsock.Listen(fSock, aBacklog); -end; - -procedure TIPAsyncSocket.SetReceiverBufferSize(const Value: Integer); -var - lRes: Integer; -begin - lRes := SetSockOpt(fsock, SOL_Socket, SO_RCVBUF, pchar(@value), 4); - if lRes <> 0 then raise EIPSocketError.Create('Unable to set option: '+Inttostr(WSAGetLastError)); -end; - -procedure TIPAsyncSocket.SetSendBufferSize(const Value: Integer); -var - lRes: Integer; -begin - lRes := SetSockOpt(fsock, SOL_Socket, SO_SNDBUF, pchar(@value), 4); - if lRes <> 0 then raise EIPSocketError.Create('Unable to set option: '+Inttostr(WSAGetLastError)); -end; - -procedure CleanupWorkers; -var - i: Integer; - lWorker: TIPSocketWorkerThread; -begin - WorkerCS.Enter; - try - for i := Workers.Count - 1 downto 0 do begin - lWorker := TIPSocketWorkerThread(Workers[i]); - lWorker.Free; - end; - finally - WorkerCS.Leave; - end; -end; - -{ TIPSocketWorkerThread } - -constructor TIPSocketWorkerThread.Create; -begin - inherited Create(True); - fMyCs := TCriticalSection.Create; - fSleepEvent := TEvent.Create(nil, false, false, ''); - Resume; -end; - -destructor TIPSocketWorkerThread.Destroy; -begin - fSleepEvent.Free; - FMyCs.Free; - inherited Destroy; -end; - -const - TimeoutCheckSpan = 1.0 / (24 * 60 * 2); // every 30 sec - OneSecond = 1.0 / (24 * 60 * 60); - -procedure TIPSocketWorkerThread.Execute; -var - i: Integer; - lCount: Integer; - lDummy: Integer; - lDate: TDateTime; - lSock: TIPAsyncSocket; - lEvent: TIPSocketCallback; - TimeVal: TTimeVal; -begin - TimeVal.tv_sec := 0; - TimeVal.tv_usec := 50; - fLastTimeoutCheck := Now; - while not Terminated do - begin - fMyCs.Enter; - try - lDate := Now; - if (lDate - fLastTimeoutCheck) > TimeoutCheckSpan then begin - fLastTimeoutCheck := lDate; - for i := 0 to SocketsPerWorkerThread -1 do begin - lSock := fData[i]; - if lSock <> nil then begin - if (lSock.IdleTimeout > 0) and (lSock.fLastData + (OneSecond * lSock.IdleTimeout) < lDate) then begin - fMyCs.Leave; - try - if assigned(lSock.OnTimeout) then lSock.OnTimeout(lSock); - finally - fMyCs.Enter; - end; - end; - end; - end; - - end; - fSleepEvent.ResetEvent; - lCount := fCount ; - if lCount > 0 then begin - FD_ZERO(fReadSet); - FD_ZERO(fWriteSet); - FD_ZERO(fErrorSet); - - for i := 0 to SocketsPerWorkerThread -1 do begin - if fData[i] <> nil then begin - if fData[i].fWantRead then - FD_Set(fData[i].fSock, fReadset); - if fData[i].fWantWrite then - FD_Set(fData[i].fSock, fWriteset); - if fData[i].fWantError then - FD_Set(fData[i].fSock, fErrorSet); - end; - end; - end; - finally - fMyCs.Leave; - end; - if lCount = 0 then fSleepEvent.WaitFor(1000) else begin - lCount := Select(lCount, @fReadSet, @FwriteSet, @fErrorSet, @TimeVal); - if lCount > 0 then begin - fMycs.Enter; - try - for i := 0 to SocketsPerWorkerThread do begin - if lCount = 0 then break; - if Fdata[i] = nil then continue; - - - if FD_ISSET(fData[i].fSock, fReadSet) then begin // Read, Accept and Disconnect - lEvent := fData[i].fReadEvent; - if assigned(lEvent) then begin - fMyCS.Leave; - try - dec(lCount); - lEvent(fData[i]); - finally - fMyCs.Enter; - end; - end else begin - lEvent := fData[i].fAcceptEvent; - if assigned(lEvent) then begin - fMyCS.Leave; - try - dec(lCount); - lEvent(fData[i]); - finally - fMyCs.Enter; - end; - end else begin - lEvent := fData[i].fDisconnectEvent; - if assigned(lEvent) then begin - fMyCS.Leave; - try - dec(lCount); - lEvent(fData[i]); - finally - fMyCs.Enter; - end; - end; - end; - end; - end else - - if FD_ISSET(fData[i].FSock, FWriteset) then begin // Connect, Write - lEvent := fData[i].fWriteEvent; - if assigned(lEvent) then begin - fMyCS.Leave; - try - dec(lCount); - lEvent(fData[i]); - finally - fMyCs.Enter; - end; - end else begin - lEvent := fData[i].fConnectEvent; - if assigned(lEvent) then begin - fMyCs.Leave; - try - dec(lCount); - lEvent(FData[i]); - finally - fMyCs.Enter; - end; - end; - end; - end else - - if FD_ISSET(fData[i].FSock, fErrorSet) then begin // Connect - lEvent := fData[i].fConnectEvent; - lDummy := 4; - GetSockOpt(fData[i].FSock, SOL_SOCKET, SO_ERROR, Pchar(@fData[i].fConnectResult), lDummy); - if assigned(lEvent) then begin - fMyCS.Leave; - try - dec(lCount); - lEvent(fData[i]); - finally - fMyCs.Enter; - end; - end; - end; - end; - finally - fMycs.Leave; - end; - end; - end; - end; -end; - -initialization - WorkerCS := TCriticalSection.Create; - Workers := TList.Create; -finalization - if SockInitialized then begin - synsock.WSACleanup; - DestroySocketInterface; - end; - CleanupWorkers; - Workers.Free; - WorkerCS.Free; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPHttpHeaders.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPHttpHeaders.pas deleted file mode 100644 index c70c711..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uIPHttpHeaders.pas +++ /dev/null @@ -1,157 +0,0 @@ -unit uIPHttpHeaders; - -interface - -{$I RemObjects.inc} - -uses - SysUtils, Classes; - -type - TDynamicByteArray = array of Byte; - TIPHttpRequestHeaders = class - private - fHeaders: TStrings; - fMethod: string; - fPath: string; - fVersion: string; - function GetContentType: string; - function GetContentLength: Int64; - public - constructor Create; - destructor Destroy; override; - - property Headers: TStrings read fHeaders; - - procedure AddHeaderLine(const aLine: string); - - property Method: string read fMethod write fMethod; - property Path: string read fPath write fPath; - property Version: string read fVersion write fVersion; - - property ContentLength: Int64 read GetContentLength; - property ContentType: string read GetContentType; - - procedure Clear; - end; - TIPHttpResponseHeaders = class - private - fHeaders: TStrings; - fCode: Integer; - fVersion, fReason: string; - public - constructor Create; - destructor Destroy; override; - - property Headers: TStrings read fHeaders; - property Version: string read fVersion write fVersion; - property Code: Integer read fCode write fCode; - property Reason: string read fReason write fReason; - - procedure Assign(aOrg: TIPHttpResponseHeaders); - procedure Clear; - function ToString: string; - end; - -implementation -{ TIPHttpRequestHeaders } - -procedure TIPHttpRequestHeaders.AddHeaderLine(const aLine: string); -var - lPos: Integer; - lName, lVal: string; -begin - lPos := Pos(':', aline); - if lPos = 0 then exit; - lName := Trim(copy(aLine, 1, lPos -1)); - lVal := Trim(copy(aLine, lPos+1, MaxInt)); - fHeaders.ADd(lName+'='+lVal); -end; - -procedure TIPHttpRequestHeaders.Clear; -begin - fHeaders.Clear; - fMethod := ''; - fPath := ''; - fVersion := ''; -end; - -constructor TIPHttpRequestHeaders.Create; -begin - fHeaders := TStringList.Create; -end; - -destructor TIPHttpRequestHeaders.Destroy; -begin - fHeaders.Free; - inherited Destroy; -end; - -function TIPHttpRequestHeaders.GetContentLength: Int64; -var - s: string; -begin - s := fHeaders.Values['Content-Length']; - Result := StrToInt64Def(s, 0); -end; - -function TIPHttpRequestHeaders.GetContentType: string; -begin - result := fHeaders.Values['Content-Type']; -end; - -{ TIPHttpResponseHeaders } - -procedure TIPHttpResponseHeaders.Assign(aOrg: TIPHttpResponseHeaders); -begin - fHeaders.Assign(aOrg.Headers); - fCode := aOrg.Code; - fVersion := aOrg.Version; - fReason := aOrg.Reason; -end; - -procedure TIPHttpResponseHeaders.Clear; -begin - fCode := 200; - fVersion := 'HTTP/1.1'; - fReason := 'OK'; - fHeaders.Clear; -end; - -constructor TIPHttpResponseHeaders.Create; -begin - inherited Create; - fHeaders := TStringList.Create; - fVersion := 'HTTP/1.1'; - Clear; -end; - -destructor TIPHttpResponseHeaders.Destroy; -begin - fHeaders.Free; - inherited Destroy; -end; - - - -function TIPHttpResponseHeaders.ToString: string; -var - lHeaders, lName, lVal: string; - lPos, i: Integer; -begin - lHeaders := fVersion +' '+ IntToStr(fCode)+' '+fReason + #13#10; - for i := 0 to fHeaders.Count -1 do begin - lVal := fHeaders[i]; - lPos := Pos('=', lVal); - if lPos > 0 then begin - lName := Trim(Copy(lVal, 1, lPos -1)); - lVal := Trim(Copy(lVal, lPos + 1, MaxInt)); - lHeaders := lHeaders + lName+': '+lVal + #13#10; - end; - end; - lHeaders := lHeaders + #13#10; - Result := lHeaders; -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsync.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsync.pas deleted file mode 100644 index b9e0916..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsync.pas +++ /dev/null @@ -1,331 +0,0 @@ -unit uROAsync; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, SyncObjs, SysUtils, - uROClientIntf, uROClasses, uROThread, uROTypes, uROClient; - -type - IROAsyncInterface = interface - ['{E858979E-78C4-4AE1-A708-9E6766FDD9B4}'] - function GetBusy:Boolean; - function GetMessageID:string; - procedure SetMessageID(aMessageID:string); - function GetAnswerReceived:Boolean; - function GetAnswerReceivedEvent:TROEvent; - property Busy:Boolean read GetBusy; - property MessageID:string read GetMessageID write SetMessageID; - property AnswerReceived:Boolean read GetAnswerReceived; - property AnswerReceivedEvent:TROEvent read GetAnswerReceivedEvent; - end; - - IROAsyncTransportChannel = interface - ['{206811E7-ABE9-41E6-893C-33DA14E44FF6}'] - function InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string; - procedure RetrieveResponse(const iMessageID:string; aResponse:TStream); - function CheckStatus(const iMessageID:string):boolean; - end; - - IROActiveAsyncTransportChannel = interface(IROAsyncTransportChannel) - ['{3FC70749-3F4C-4D6A-AB30-01E0E03A25F4}'] - function InvokeRequest(aRequest:TStream; aGetResponse:boolean=true; aEvent: TROEvent=nil):string; - end; - - IROTransportChannelEx = interface - ['{96C85DD3-6372-49DF-B259-04BCD5C0E369}'] - procedure BeforeDispatch(aMessage: IROMessage); - end; - - EROAsyncException = class(EROException); - EROAsyncNoAnswerYet = class(EROAsyncException); - EROAsyncNoMoreAnswers = class(EROAsyncException); - - TROAsyncProxy = class; - - TROAsyncProxyThread = class(TROThread) - private - fOwner:TROAsyncProxy; - fGetResponse:boolean; - fRequest:TStream; - protected - procedure Execute; override; - public - constructor Create(iOwner:TROAsyncProxy; const iName:string; iRequest:TStream; iGetResponse:boolean); - destructor Destroy; override; - end; - - TROAsyncProxy = class(TInterfacedObject, IUnknown, IROAsyncInterface) - private - fCriticalSection:TCriticalSection; - fMessage:IROMessage; - fTransportChannel:IROTransportChannel; - fAsyncTransportChannel:IROAsyncTransportChannel; - fActiveAsyncTransportChannel:IROActiveAsyncTransportChannel; - fBeforeDispatch: IROTransportChannelEx; - fBusy:Boolean; - fAnswerReceived:Boolean; - fAnswerReceivedEvent: TROEvent; - fMethodName:string; - fMessageID:string; - fResponse:TStream; - - protected - procedure __AssertProxyNotBusy(const iMethodName:string); - procedure __DispatchAsyncRequest(const iMethodName:string; iRequest:TStream; iGetResponse:boolean=true); overload; - procedure __DispatchAsyncRequest(const iMethodName:string; iRequest:IROMessage; iGetResponse:boolean=true); overload; - function __RetrieveAsyncResponse(const iMethodName:string):TStream; - property __Message:IROMessage read fMessage; - property __TransportChannel:IROTransportChannel read fTransportChannel; - - function __GetInterfaceName:string; virtual; abstract; - - function GetBusy:Boolean; - function GetMessageID:string; - procedure SetMessageID(aMessageID:string); - function GetAnswerReceived:Boolean; - function GetAnswerReceivedEvent:TROEvent; - property __InterfaceName:string read __GetInterfaceName; - - property __CriticalSection: TCriticalSection read fCriticalSection; - - public - constructor Create(const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); virtual; - destructor Destroy; override; - property Busy:Boolean read fBusy; - property AnswerReceived:Boolean read fAnswerReceived; - property MessageID:string read GetMessageID write SetMessageID; - end; - -const - REQUEST_MESSAGE_PREFIX = 'ROSDK REQUEST'; - RESPONSE_MESSAGE_PREFIX = 'ROSDK RESPONSE'; - -implementation - -{ TROAsyncProxy } - -constructor TROAsyncProxy.Create(const aMessage: IROMessage; const aTransportChannel: IROTransportChannel); -begin - fMessage := aMessage; - fTransportChannel := aTransportChannel; - Supports(fTransportChannel, IROAsyncTransportChannel, fAsyncTransportChannel); - Supports(fTransportChannel, IROActiveAsyncTransportChannel, fActiveAsyncTransportChannel); - Supports(fTransportChannel, IROTransportChannelEx, fBeforeDispatch); - - fCriticalSection := TCriticalSection.Create(); - fAnswerReceivedEvent := TROEvent.Create(nil,false,false,''); -end; - -destructor TROAsyncProxy.Destroy; -begin - //Todo: important: we MUST wait for and free the worker thread here!!! - FreeAndNil(fResponse); - FreeAndNil(fCriticalSection); - FreeAndNil(fAnswerReceivedEvent); - inherited; -end; - -function TROAsyncProxy.GetAnswerReceived: Boolean; -begin - fCriticalSection.Enter(); - try - if Assigned(fAsyncTransportChannel) then begin - result := fAsyncTransportChannel.CheckStatus(fMessageID); - end - else begin - Result := fAnswerReceived; - end; - finally - fCriticalSection.Leave(); - end; -end; - -function TROAsyncProxy.GetAnswerReceivedEvent: TROEvent; -begin - if assigned(fAsyncTransportChannel) and not assigned(fActiveAsyncTransportChannel) then - raise EROAsyncException.Create('TransportChannel does not support to receive responses without explicit polling.'); - result := fAnswerReceivedEvent; -end; - -function TROAsyncProxy.GetBusy: Boolean; -begin - fCriticalSection.Enter(); - try - Result := fBusy; - finally - fCriticalSection.Leave(); - end; -end; - -function TROAsyncProxy.GetMessageID: string; -begin - result := fMessageID; -end; - -procedure TROAsyncProxy.SetMessageID(aMessageID: string); -begin - fMessageID := aMessageID; -end; - -procedure TROAsyncProxy.__AssertProxyNotBusy(const iMethodName: string); -begin - if (Busy) then - raise EROChannelBusy.CreateFmt('There''s already an async request to %s in progress.',[fMethodName]); -end; - -procedure TROAsyncProxy.__DispatchAsyncRequest(const iMethodName:string; iRequest:TStream; iGetResponse:boolean=true); -begin - fCriticalSection.Enter(); - try - - fAnswerReceivedEvent.ResetEvent(); - __AssertProxyNotBusy(iMethodName); - - if iGetResponse then begin - fMethodName := iMethodName; - end; - fAnswerReceived := False; - - if Assigned(fActiveAsyncTransportChannel) then begin - fMessageID := fActiveAsyncTransportChannel.InvokeRequest(iRequest, iGetResponse, fAnswerReceivedEvent) - end - else if Assigned(fAsyncTransportChannel) then begin - fMessageID := fAsyncTransportChannel.InvokeRequest(iRequest, iGetResponse); - end - else begin - fBusy := true; - TROAsyncProxyThread.Create(Self,Format('TROAsyncProxyThread for %s calling %s',[ClassName,iMethodName]),iRequest,iGetResponse); - end; - - finally - fCriticalSection.Leave(); - end; -end; - -procedure TROAsyncProxy.__DispatchAsyncRequest(const iMethodName: string; - iRequest: IROMessage; iGetResponse: boolean); -var - lRequest: TStream; -begin - if fBeforeDispatch <> nil then - fBeforeDispatch.BeforeDispatch(iRequest); - lRequest := TMemoryStream.Create; - - iRequest.WriteToStream(lRequest); - - __DispatchAsyncRequest(iMethodName, lRequest, iGetResponse); -end; - -function TROAsyncProxy.__RetrieveAsyncResponse(const iMethodName: string): TStream; -begin - result := nil; - - fCriticalSection.Enter(); - try - - { Only check the Methodname if we actually preserved one before. depending on - the call history, that might have gotten lost. } - if (fMethodName <> '') and (fMethodName <> iMethodName) then - raise EROAsyncException.CreateFmt('Call to Retrieve_%s does not match previous call to Invoke_%s.',[iMethodName,fMethodName]); - - if Assigned(fAsyncTransportChannel) then begin - fResponse := TMemoryStream.Create(); - try - fAsyncTransportChannel.RetrieveResponse(fMessageID,fResponse); - except - FreeAndNil(fResponse); - raise; - end; - end - else begin - //fResponse was created by thread. - if not fAnswerReceived then - raise EROAsyncNoAnswerYet.CreateFmt('Answer for %s has not been received yet.',[iMethodName]); - end; - - Assert(Assigned(fResponse)); - - Result := fResponse; - fResponse := nil; - - fBusy := False; - fAnswerReceived := False; - fMethodName := ''; - - finally - fCriticalSection.Leave(); - end; -end; - -{ TROAsyncProxyThread } - -constructor TROAsyncProxyThread.Create(iOwner:TROAsyncProxy; const iName: string; iRequest:TStream; iGetResponse:boolean); -begin - inherited Create(True,iName); - FreeOnTerminate := true; - fOwner := iOwner; - fGetResponse := iGetResponse; - fRequest := iRequest; - Resume(); -end; - -destructor TROAsyncProxyThread.Destroy; -begin - FreeAndNil(fRequest); - inherited; -end; - -procedure TROAsyncProxyThread.Execute; -var - lResponse:TStream; -begin - inherited; - try - - lResponse := TMemoryStream.Create(); - try - fOwner.__TransportChannel.Dispatch(fRequest, lResponse); - - fOwner.fCriticalSection.Enter(); - try - if fGetResponse then begin - fOwner.fResponse := lResponse; - lResponse := nil; - fOwner.fAnswerReceived := True; - fOwner.fAnswerReceivedEvent.SetEvent(); - end - else begin - fOwner.fBusy := False; - end; - finally - fOwner.fCriticalSection.Leave(); - end; - - - finally - FreeAndNil(lResponse); - end; - - except - on E: Exception do begin - fOwner.fBusy := False; - //ToDo: marshal exception to main thread. - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsyncResponseStorage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsyncResponseStorage.pas deleted file mode 100644 index 06526d7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROAsyncResponseStorage.pas +++ /dev/null @@ -1,290 +0,0 @@ -unit uROAsyncResponseStorage; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, SysUtils, uROClasses, uROClient; - -type - TROResponseItem = class; - - { IROAsyncResponseStorage } - IROAsyncResponseStorage = interface - ['{CD2C473C-F557-4B04-876A-4367D5959680}'] - procedure AddResp(aResp: TROResponseItem); - procedure RemoveResp(aResp: TROResponseItem); - procedure RemoveRespByUID(aUID: String); - procedure DeleteResp(Index: Integer); - function GetResp(Index: Integer): TROResponseItem; - function GetRespByUID(aUID: String): TROResponseItem; - function IndexOfResp(aResp: TROResponseItem): Integer; - function CountOfResp: Integer; - procedure ClearStorage; - - property ResponseItem[Index: Integer]: TROResponseItem read GetResp; - end; - - { TROAsyncResponseStorage } - TROAsyncResponseStorage = class(TROComponent, IROAsyncResponseStorage) - private - protected - function GetResp(Index: Integer): TROResponseItem;virtual;abstract; - public - procedure DeleteResp(Index: Integer);virtual;abstract; - procedure AddResp(aResp: TROResponseItem);virtual;abstract; - procedure RemoveResp(aResp: TROResponseItem);virtual;abstract; - procedure RemoveRespByUID(aUID: String);virtual;abstract; - function GetRespByUID(aUID: String): TROResponseItem;virtual; - function IndexOfResp(aResp: TROResponseItem): Integer;virtual;abstract; - function CountOfResp: Integer;virtual; - procedure ClearStorage;virtual; - - property ResponseItem[Index: Integer]: TROResponseItem read GetResp; - - end; - - { TROSimpleAsyncResponseStorage } - TROSimpleAsyncResponseStorage = class(TROAsyncResponseStorage, IROAsyncResponseStorage) - private - FStorage: TThreadList; - protected - function GetResp(Index: Integer): TROResponseItem;override; - public - procedure DeleteResp(Index: Integer);override; - procedure AddResp(aResp: TROResponseItem);override; - procedure RemoveResp(aResp: TROResponseItem);override; - procedure RemoveRespByUID(aUID: String);override; - function IndexOfResp(aResp: TROResponseItem): Integer;override; - function CountOfResp: Integer;override; - procedure ClearStorage;override; - - constructor Create(AOwner: TComponent);override; - Destructor Destroy;override; - end; - - EROResponseItem = class(EROException); - - { TROResponseItem } - TROResponseItem = class - private - FUID: String; - FResponse: TStream; - FPort: Integer; - FIP: String; - procedure SetIP(const Value: String); - procedure SetPort(const Value: Integer); - public - property UID: String read FUID; - property IP: String read FIP write SetIP; - property Port: Integer read FPort write SetPort; - property Response: TStream read FResponse; - - constructor Create(aResponse: TStream;aUID: String); - Destructor Destroy;override; - end; - -implementation - -{ TROResponseItem } -constructor TROResponseItem.Create(aResponse: TStream; aUID: String); -begin - if (not(Assigned(aResponse))) or (aUID = '') then - raise EROResponseItem.Create('Invalid constructor parameter value''s'); - - FResponse := aResponse; - FUID := aUID; -end; - -destructor TROResponseItem.Destroy; -begin - FResponse.Free; - inherited; -end; - -procedure TROResponseItem.SetIP(const Value: String); -begin - FIP := Value; -end; - -procedure TROResponseItem.SetPort(const Value: Integer); -begin - FPort := Value; -end; - -{ TROAsyncResponseStorage } -procedure TROAsyncResponseStorage.ClearStorage; -var i: Integer; -begin - for i := 0 to CountOfResp-1 do - DeleteResp(0); -end; - -function TROAsyncResponseStorage.CountOfResp: Integer; -begin - result := 0; -end; - -function TROAsyncResponseStorage.GetRespByUID(aUID: String): TROResponseItem; -var i: Integer; -begin - result := nil; - if aUID = '' then - Exit; - - for i := 0 to CountOfResp-1 do - begin - if ResponseItem[i].UID = aUID then - begin - result := ResponseItem[i]; - Break; - end; - end; -end; - -{ TROSimpleAsyncResponseStorage } -constructor TROSimpleAsyncResponseStorage.Create(AOwner: TComponent); -begin - inherited; - FStorage := TThreadList.Create; -end; - -destructor TROSimpleAsyncResponseStorage.Destroy; -begin - ClearStorage; - FStorage.Free; - inherited; -end; - -procedure TROSimpleAsyncResponseStorage.AddResp(aResp: TROResponseItem); -begin - if not(Assigned(aResp)) then - Exit; - - FStorage.Add(aResp); -end; - -procedure TROSimpleAsyncResponseStorage.ClearStorage; -begin - Inherited; - try - with FStorage.LockList do - begin - Clear; - end; - finally - FStorage.UnlockList; - end; -end; - -function TROSimpleAsyncResponseStorage.CountOfResp: Integer; -begin - try - with FStorage.LockList do - begin - result := Count; - end; - finally - FStorage.UnlockList; - end; -end; - -function TROSimpleAsyncResponseStorage.GetResp(Index: Integer): TROResponseItem; -begin - try - with FStorage.LockList do - begin - // TList will throw an exception when out of bounds - result := TROResponseItem(Items[Index]); - end; - finally - FStorage.UnlockList; - end; -end; - -function TROSimpleAsyncResponseStorage.IndexOfResp(aResp: TROResponseItem): Integer; -var i: Integer; -begin - result := -1; - if not(Assigned(aResp)) then - Exit; - - try - with FStorage.LockList do - begin - for i := 0 to Count-1 do - begin - if TROResponseItem(Items[i]) = aResp then - begin - result := i; - Break; - end; - end; - end; - finally - FStorage.UnlockList; - end; -end; - -procedure TROSimpleAsyncResponseStorage.RemoveResp(aResp: TROResponseItem); -var lIdx: Integer; -begin - if not(Assigned(aResp)) then - Exit; - - lIdx := IndexOfResp(aResp); - if lIdx <> -1 then - DeleteResp(lIdx); -end; - -procedure TROSimpleAsyncResponseStorage.RemoveRespByUID(aUID: String); -var i: Integer; -begin - if aUID = '' then - Exit; - - try - with FStorage.LockList do - begin - for i := 0 to Count-1 do - begin - if TROResponseItem(Items[i]).UID = aUID then - begin - DeleteResp(i); - Break; - end; - end; - end; - finally - FStorage.UnlockList; - end; -end; - -procedure TROSimpleAsyncResponseStorage.DeleteResp(Index: Integer); -begin - try - with FStorage.LockList do - begin - // TList will throw an exception when out of bounds - TROResponseItem(Items[Index]).Free; - Delete(Index); - end; - finally - FStorage.UnlockList; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXHTTPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXHTTPServer.pas deleted file mode 100644 index 764ddc7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXHTTPServer.pas +++ /dev/null @@ -1,474 +0,0 @@ -unit uROBPDXHTTPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROServer, uROClientIntf, uROBPDXTCPServer, - {$IFDEF RemObjects_USE_RODX} - uRODXString, uRODXServerCore, uRODXSock, uRODXHTTPServerCore, uRODXHTTPHeaderTools; - {$ELSE} - DXString, DXServerCore, DXSock, DXHTTPServerCore, DXHTTPHeaderTools; - {$ENDIF} - -type - { TROBPDXHTTPTransport } - TROBPDXHTTPTransport = class(TInterfacedObject, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fResponseHeaders : TStringList; - - fClientThread: TDXClientThread; - fHeaderInfo: PHeaderInfo; - fOverriddenPathInfo: string; - protected - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - function GetContentType : string; - procedure SetContentType(const aValue : string); - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - function GetTargetURL : string; - procedure SetTargetURL(const aValue : string); - function GetPathInfo : string; - function GetLocation : string; - function GetQueryString : string; - procedure SetPathInfo(const aValue: String); - - { IROTransport } - function GetTransportObject : TObject; - function GetClientAddress : string; - public - constructor Create(aClientThread: TDXClientThread; aHeaderInfo: PHeaderInfo); - destructor Destroy; override; - - property ClientThread: TDXClientThread read fClientThread; - property HeaderInfo: PHeaderInfo read fHeaderInfo; - end; - - { TROBPDXHTTPServer } - TROBPDXHTTPServer = class(TROBPDXTCPServer) - private - fServeInfoPage, fServeRodl: Boolean; - fSendExceptionsAs500: boolean; - function GetBPDXServer: TDXHTTPServerCore; - function GetSupportKeepAlive: Boolean; - procedure SetSupportKeepAlive(const Value: Boolean); - - protected - function CreateBPDXServer : TDXServerCore; override; - - function BuildResponseHeader(StatusCode:Integer;var EnableKeepAlive : Boolean) : string; - procedure CleanupNetscapeAndProxyRequests(HeaderInfo:PHeaderInfo); - - procedure InternalOnNewConnect(ClientThread:TDXClientThread); - procedure InternalHandleSession(ClientThread: TDXClientThread; HeaderInfo: PHeaderInfo; var EnableKeepAlive: boolean); - - function GetDispatchersClass : TROMessageDispatchersClass; override; - public - constructor Create(aOwner: TComponent); override; - - published - property BPDXServer: TDXHTTPServerCore read GetBPDXServer; - property SupportKeepAlive: Boolean read GetSupportKeepAlive write SetSupportKeepAlive; - property ServeInfoPage : Boolean read fServeInfoPage write fServeInfoPage default true; - property ServeRodl : Boolean read fServeRodl write fServeRodl default true; - property SendExceptionsAs500: boolean read fSendExceptionsAs500 write fSendExceptionsAs500 default true; - property OnGetRODLReader; - end; - -implementation - -uses SysUtils, uRORes, uROHTTPDispatch, uROHTTPTools, uROClient, uROServerIntf, - uROHtmlServerInfo, uRODL; - -constructor TROBPDXHTTPTransport.Create(aClientThread: TDXClientThread; aHeaderInfo: PHeaderInfo); -begin - inherited Create; - fResponseHeaders := TStringList.Create; - fClientThread := aClientThread; - fHeaderInfo := aHeaderInfo; -end; - -destructor TROBPDXHTTPTransport.Destroy; -begin - fResponseHeaders.Free; - - inherited; -end; - -procedure TROBPDXHTTPTransport.SetHeaders(const aName, aValue : string); -begin - SetHeaderValue(fResponseHeaders, aName, aValue); -end; - -function TROBPDXHTTPTransport.GetHeaders(const aName : string) : string; -var - s: string; - lPos: Integer; -begin - lPos := Pos(#13#10+aName+'=', fHeaderInfo.Unknown); - if lPos = 0 then begin - result := ''; - exit; - end; - s := Copy(fHeaderInfo.Unknown, lPos + 2, MaxInt); - s := copy(s,1,pos(#13#10, s)-1); - s := copy(s,pos('=', s)+1, MaxInt); - result := s; -end; - -function TROBPDXHTTPTransport.GetContentType : string; -begin - result := fHeaderInfo.ContentType -end; - -procedure TROBPDXHTTPTransport.SetContentType(const aValue : string); -begin - SetHeaders(id_ContentType, aValue); -end; - -function TROBPDXHTTPTransport.GetUserAgent : string; -begin - result := fHeaderInfo.UserAgent -end; - -procedure TROBPDXHTTPTransport.SetUserAgent(const aValue : string); -begin - SetHeaders(id_UserAgent, aValue); -end; - -function TROBPDXHTTPTransport.GetTargetURL : string; -begin - result := '' -end; - -procedure TROBPDXHTTPTransport.SetTargetURL(const aValue : string); -begin - -end; - -function TROBPDXHTTPTransport.GetTransportObject : TObject; -begin - result := Self; -end; - -function TROBPDXHTTPTransport.GetClientAddress : string; -begin - result := fClientThread.Socket.PeerIPAddress; -end; - -function TROBPDXHTTPTransport.GetPathInfo : string; -begin - if fOverriddenPathInfo <> '' then - result := fOverriddenPathInfo - else begin - result := StringReplace(fHeaderInfo^.URI, 'http://', '', []); - result := Copy(result, Pos('/', result), MaxInt); - end; -end; - -function TROBPDXHTTPTransport.GetLocation : string; -begin - result := 'http://'+fHeaderInfo^.Host -end; - -{ TROBPDXHTTPServer } -function TROBPDXHTTPServer.GetBPDXServer: TDXHTTPServerCore; -begin - result := TDXHTTPServerCore(inherited BPDXServer); -end; - -function TROBPDXHTTPServer.CreateBPDXServer: TDXServerCore; -begin - //DXSock.TDXXferTimeout := 100; - result := TDXHTTPServerCore.Create(Self); - - with TDXHTTPServerCore(result) do begin - ServerPort := 8099; - BindTo := ''; // blank = ALL IP's! - Timeout := 50000; // 50 seconds for initial header - ThreadCacheSize := 10; - SocketOutputBufferSize := bsfHuge; - - // Optimized settings - {$IFNDEF LINUX} - ListenerThreadPriority := tpIdle; - SpawnedThreadPriority := tpIdle; - {$ENDIF LINUX} - SocketOutputBufferSize := bsfNormal; - UseThreadPool := FALSE; - SupportKeepAlive := FALSE; - - OnNewConnect := InternalOnNewConnect; - OnCommandGET := InternalHandleSession; - OnCommandPOST := InternalHandleSession; - OnCommandHEAD := InternalHandleSession; - end; -end; - -function TROBPDXHTTPServer.BuildResponseHeader(StatusCode:Integer;var EnableKeepAlive : Boolean) : string; -begin - Result := 'HTTP/1.1 '+BPDXServer.HeaderText(StatusCode)+#13#10+ - 'Server: RemObjects DXSock Web Server v1.0'+#13#10+ - 'Date: '+{DXString.}DateTimeToGMTRFC822(Now)+#13#10+ - 'MIME-Version: 1.0'+#13#10+ - 'Public: GET,POST,HEAD,TRACE'+#13#10+ - 'Accept-Ranges: none'+#13#10; - if StatusCode<>200 then begin - Result := Result+ - 'Pragma: no-cache'+#13#10+ - 'Cache-Control: no-cache'+#13#10; - EnableKeepAlive := False; - end; - if EnableKeepAlive then begin - Result := Result+'Connection: Keep-Alive'+#13#10+ - 'Keep-Alive: timeout='+IntToStr((BPDXServer.Timeout div 1000))+#13#10; - End - else begin - Result := Result+'Connection: close'+#13#10; - end; -end; - -Procedure TROBPDXHTTPServer.CleanupNetscapeAndProxyRequests(HeaderInfo:PHeaderInfo); -Var - Ws:String; -begin - if (QuickPos('://',HeaderInfo^.Raw)>0) and (QuickPos('://',HeaderInfo^.Raw)<10) then begin - Ws := Copy(HeaderInfo^.RAW,1,CharPos(#32,HeaderInfo^.RAW)); - Delete(HeaderInfo^.RAW,1,QuickPos('://',HeaderInfo^.RAW)+2); - if CharPos('/',HeaderInfo^.RAW)=0 then HeaderInfo^.RAW := '/ HTTP/1.1' - else Delete(HeaderInfo^.RAW,1,CharPos('/',HeaderInfo^.RAW)-1); - HeaderInfo^.RAW := Ws+HeaderInfo^.RAW; - end; -end; - -procedure TROBPDXHTTPServer.InternalOnNewConnect(ClientThread:TDXClientThread); -begin -// ClientThread.Socket.SetNagle(False); - BPDXServer.ProcessSession(ClientThread); // tell server to handle connection -end; - -procedure TROBPDXHTTPServer.InternalHandleSession(ClientThread: TDXClientThread; HeaderInfo: PHeaderInfo; var EnableKeepAlive: boolean); -Var - StatusCode:Integer; // you set this! - req : TStringStream; - resp:TMemoryStream; // you set this! - transport : IROHTTPTransport; - HeaderStr:String; - disp : TROHTTPDispatcher; - s, root, sub : string; - lIgnore: TROResponseOptions; - format: TDataFormat; - info: IRONamedModuleInfo; - lRodl: TRodlLibrary; - ok: Boolean; -begin - req := NIL; - resp := NIL; - - // if POST then collect the post data! - if HeaderInfo^.Method='POST' then begin // collect post data! - if HeaderInfo^.ContentLength=0 then begin // HACKER!! - ClientThread.Socket.Writeln(BuildResponseHeader(411,EnableKeepAlive)); - Exit; - end; - - while Length(HeaderInfo^.PostData) e.g. text/html } - - root := transport.PathInfo; - if (root <> '') and (root[1] = '/') then delete(root, 1,1); - if pos('/', root) > 0 then - begin - sub := copy(root, pos('/', root)+1, maxint); - root := '/' + copy(root, 1, pos('/', root) - 1); - end else - begin - root := '/' + root; - sub := ''; - end; - - disp := TROHTTPMessageDispatchers(Dispatchers).GetDispatcherByPath(root) as TROHTTPDispatcher; - - if disp <> nil then - begin - if (req.Size = 0) then begin - ok := fServeRodl; - if ok then - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - else begin - s := '500 Invalid Path
'+err_CannotFindMessageDispatcher; - resp.Write(s[1], length(s)); - end; - end else if (sub = '') then - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - else if (CompareText(sub, 'rodl') = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then transport.PathInfo := disp.PathInfo else transport.PathInfo := '/'+disp.PathInfo; - GetRodl(resp, transport, format, GetRODLReader); - ok := true; - end else if Supports(disp.Message, IRONamedModuleInfo, info) and (CompareText(info.ModuleInfoName, sub) = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then transport.PathInfo := disp.PathInfo else transport.PathInfo := '/'+disp.PathInfo; - info.GetModuleInfo(resp, transport, format); - ok := true; - end else - begin - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - end; - end else if (CompareText(root, '/rodl') = 0) and (sub = '') and fServeRodl then - begin - GetRodl(resp, transport, format, GetRODLReader); - ok := true; - end else if fServeInfoPage and (CompareText(root, '/doc') = 0) then - begin - if sub = 'css' then - begin - s := GetRodlCss; - resp.Write(s[1], length(s)); - transport.ContentType := 'text/css'; - ok := true; - end else - if sub = 'xslt' then - begin - s := GetRodlStyleSheet; - resp.Write(s[1], length(s)); - transport.ContentType := 'text/xml'; - ok := true; - end else if sub = '' then - begin - lRodl := GetRodlLibrary(GetRODLReader); - try - s := GetRodlWithStyleSheet(lRodl, '/doc/xslt'); - resp.Write(s[1], length(s)); - transport.ContentType := 'text/xml'; - finally - lRodl.Free; - end; - ok := true; - end else - begin - s := '500 Invalid Path
'+err_CannotFindMessageDispatcher; - resp.Write(s[1], length(s)); - ok := false; - end; - end else if fServeInfoPage and (CompareStr(root, '/favicon.ico') = 0) then - begin - GetRodlFavIcon(resp); - transport.ContentType := 'image/x-icon'; - ok := true; - end else if fServeInfoPage and (root = '/') then - begin - lrodl := GetRodlLibrary(GetRODLReader); - try - s := GetRodlServerInfo(transport.PathInfo, lRodl, Dispatchers); - resp.Write(s[1], length(s)); - finally - lRodl.Free; - end; - ok := true; - end else - begin - s := '500 Invalid Path
'+err_CannotFindMessageDispatcher; - resp.Write(s[1], length(s)); - ok := false; - end; - - if ok or (not fSendExceptionsAs500) then - StatusCode:= HTTP_OK - else - StatusCode := HTTP_FAILED; - - HeaderStr := BuildResponseHeader(StatusCode,EnableKeepAlive)+ - id_UserAgent+': '+str_ProductName+#13#10+ - id_ContentLength+': '+IntToStr(resp.Size)+#13#10+ - id_ContentType+': '+transport.Headers[id_ContentType]+#13#10; - - ClientThread.Socket.Writeln(HeaderStr); - - if (HeaderInfo^.Method<>'HEAD') and (resp.Size>0) then begin - {$IFDEF VER100} - ClientThread.Socket.BlockWrite(resp.Memory,resp.Size); - {$ELSE} - ClientThread.Socket.Write(resp.Memory,resp.Size); - {$ENDIF} - end; - finally - req.Free; - resp.Free; - end; -end; - -function TROBPDXHTTPServer.GetDispatchersClass : TROMessageDispatchersClass; -begin - result := TROHTTPMessageDispatchers -end; - - -function TROBPDXHTTPServer.GetSupportKeepAlive: Boolean; -begin - Result := BPDXServer.SupportKeepAlive; -end; - -procedure TROBPDXHTTPServer.SetSupportKeepAlive(const Value: Boolean); -begin - BPDXServer.SupportKeepAlive := Value; -end; - -function TROBPDXHTTPTransport.GetQueryString: string; -begin - result := fHeaderInfo^.QueryString -end; - -constructor TROBPDXHTTPServer.Create(aOwner: TComponent); -begin - inherited; - fServeInfoPage := true; - fServeRodl := true; - fSendExceptionsAs500 := true; -end; - -procedure TROBPDXHTTPTransport.SetPathInfo(const aValue: String); -begin - fOverriddenPathInfo := aValue; -end; - -initialization - RegisterServerClass(TROBPDXHTTPServer); -finalization - UnregisterServerClass(TROBPDXHTTPServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXTCPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXTCPServer.pas deleted file mode 100644 index bbbd554..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBPDXTCPServer.pas +++ /dev/null @@ -1,189 +0,0 @@ -unit uROBPDXTCPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROServer, uROClientIntf, - {$IFDEF RemObjects_USE_RODX} - uRODXString, uRODXSock, uRODXServerCore; - {$ELSE} - DXString, DXSock, DXServerCore; - {$ENDIF} - -type - { TROBPDXTCPTransport } - TROBPDXTCPTransport = class(TInterfacedObject, IROTransport, IROTCPTransport) - private - fClientThread: TDXClientThread; - - protected - { IROTransport } - function GetTransportObject : TObject; - function GetClientAddress : string; - - public - constructor Create(aClientThread: TDXClientThread); - - property ClientThread: TDXClientThread read fClientThread; - end; - - { TROBPDXTCPServer } - TROBPDXTCPServer = class(TROServer) - private - fBPDXServer: TDXServerCore; - function GetPort: integer; - procedure SetPort(const Value: integer); - - protected - function CreateBPDXServer : TDXServerCore; virtual; - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - procedure InternalOnNewConnect(ClientThread:TDXClientThread); - - public - constructor Create(aComponent: TComponent); override; - destructor Destroy; override; - - published - property BPDXServer: TDXServerCore read fBPDXServer; - property Port:integer read GetPort write SetPort; - end; - -implementation - -uses SysUtils, - uRORes; - - -{ TROBPDXTCPTransport } - -constructor TROBPDXTCPTransport.Create(aClientThread: TDXClientThread); -begin - inherited Create; - fClientThread := aClientThread; -end; - -function TROBPDXTCPTransport.GetClientAddress: string; -begin - result := fClientThread.Socket.PeerIPAddress; -end; - -function TROBPDXTCPTransport.GetTransportObject: TObject; -begin - result := Self; -end; - -{ TROBPDXTCPServer } - -constructor TROBPDXTCPServer.Create(aComponent: TComponent); -begin - inherited; - - fBPDXServer := CreateBPDXServer; - fBPDXServer.Name := 'InternalBPDXServer'; - {$IFDEF DELPHI6UP} - fBPDXServer.SetSubComponent(True); - {$ENDIF} -end; - -function TROBPDXTCPServer.CreateBPDXServer: TDXServerCore; -begin - //DXSock.TDXXferTimeout := 100; - result:=TDXServerCore.Create(Self); - result.ServerPort:=8090; - result.BindTo:=''; // blank = ALL IP's! - result.ThreadCacheSize := 10; - result.OnNewConnect:=InternalOnNewConnect; // accept new connections - - // Optimized settings - {$IFNDEF LINUX} - result.ListenerThreadPriority := tpIdle; - result.SocketOutputBufferSize := bsfNormal; - result.SpawnedThreadPriority := tpIdle; - {$ENDIF LINUX} - result.UseThreadPool := FALSE; -end; - -destructor TROBPDXTCPServer.Destroy; -begin - fBPDXServer.Stop; // terminate all sessions! - fBPDXServer.Free; - - inherited; -end; - -procedure TROBPDXTCPServer.InternalOnNewConnect( - ClientThread: TDXClientThread); -var req:TMemoryStream; - resp:TMemoryStream; - transport : IROTCPTransport; -begin - req:=TMemoryStream.Create; - resp:=TMemoryStream.Create; - try - ClientThread.Socket.SetNagle(true); - // this is the same as INDY, will read a stream for the 4 byte length header - // or fatal socket error - // or time out of 120,000ms (2 minutes). - ClientThread.Socket.SaveToStreamWithSize(req,120000); - - //If ClientThread.Socket.DroppedConnection then Exit; BIG BOTTLENECK! - - transport := TROBPDXTCPTransport.Create(ClientThread); - req.Position := 0; - DispatchMessage(transport, req, resp); - //ProcessMessage(MessageIntf, transport, req, resp); - - resp.Seek(0,0); // A MUST! - - ClientThread.Socket.WriteInteger(resp.Size); - ClientThread.Socket.Write(resp.Memory, resp.Size); - finally - resp.Free; - req.Free; - end; -end; - -function TROBPDXTCPServer.IntGetActive: boolean; -begin - result := fBPDXServer.IsActive and not fBPDXServer.Suspend -end; - -procedure TROBPDXTCPServer.IntSetActive(const Value: boolean); -begin - if Value then begin - if not fBPDXServer.IsActive then fBPDXServer.Start - else if fBPDXServer.Suspend then fBPDXServer.Resume; - end - else fBPDXServer.Pause -end; - -procedure TROBPDXTCPServer.SetPort(const Value:integer); -begin - BPDXServer.ServerPort := Value; -end; - -function TROBPDXTCPServer.GetPort: integer; -begin - Result := BPDXServer.ServerPort; -end; - -initialization - RegisterServerClass(TROBPDXTCPServer); -finalization - UnregisterServerClass(TROBPDXTCPServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpChannel.pas deleted file mode 100644 index 6bc3cdd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpChannel.pas +++ /dev/null @@ -1,586 +0,0 @@ -unit uROBaseSuperHttpChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, SysUtils, uROClient, uROClientIntf, uROAsync, uROClasses, SyncObjs, - {$IFDEF RemObjects_UseEncryption} uRoEncryption, {$ENDIF}uROThreadPool; - -type - TDynByteArray = array of byte; - TROHttpWaitingRequest = class - private - fEvent: TROEvent; - fFreeEvent: Boolean; - fId: Integer; - fResultData: TDynByteArray; - fResultErrorCode: Integer; - public - property Id: Integer read fId; - property Event: TROEvent read fEvent; - property Resultdata: TDynByteArray read fResultData write fResultData; - property ResultErrorCode: Integer read fResultErrorCode write fResultErrorCode; - - constructor Create(Id: Integer); overload; - constructor Create(Id: Integer; Ev: TROEvent); overload; - destructor Destroy; override; - end; - EROSuperHttpChannelException = class(EROException); - TROBaseSuperHttpChannel = class(TROTransportChannel, IROTransport, - IROActiveEventChannel, IROMultiThreadAwareChannel, - IROAsyncTransportChannel, IROActiveAsyncTransportChannel, IROTransportChannelEx) - private - fConnectWait: TROEvent; - fActive, fConnected: Boolean; - fSessionId, fConnectionId: TGuid; - fRemoteMaxPackageSize, - fMaxPackageSize: Integer; - fWaitingRequest: TThreadList; - fPackageCounter: Integer; - fOwnsThreadPool: Boolean; - fEventThreadPool: TROThreadPool; - fDispatchLock: TCriticalSection; - fWaitingThread: TThread; - fEventReceiver: IROEventReceiver; - fRequestTimeout: Integer; - fConnectTimeout: Integer; - fHttpRequestTimeout: Integer; - procedure SetActive(const Value: Boolean); - procedure ProcessEvent(aId: Integer; aData: TDynByteArray); - procedure SetEventThreadPool(const Value: TROThreadPool); - protected - procedure IntDispatch(aRequest: TStream; aResponse: TStream); override; - procedure IntSetServerLocator(aServerLocator: TROServerLocator); override; - function CheckStatus(const iMessageID: String): Boolean; - procedure RetrieveResponse(const iMessageID: String; - aResponse: TStream); - procedure BeforeDispatch(aMessage: IROMessage); override; - procedure RegisterEventReceiver(aReceiver: IROEventReceiver); - procedure UnregisterEventReceiver(aReceiver: IROEventReceiver); - function InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string; overload; - function InvokeRequest(aRequest:TStream; aGetResponse:boolean=true; aEvent: TROEvent=nil):string; overload; - - procedure CancelRequest(aWaitingThread: Boolean); virtual; abstract; - procedure DispatchHttpRequest(aWaitingThread: Boolean; aRequest: TDynByteArray; out aResponse: TDynByteArray); virtual; abstract; - - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - - property EventThreadPool :TROThreadPool read fEventThreadPool write SetEventThreadPool; - property ConnectionId: TGUID read fConnectionId write fConnectionId; - property SessionId: TGuid read fSessionId write fSessionId; - property Connected: Boolean read fConnected; - property Active: Boolean read fActive write SetActive; - property MaxPackageSize: Integer read fMaxPackageSize write fMaxPackageSize default 1024 * 1024; - property RequestTimeout: Integer read fRequestTimeout write fRequestTimeout default 60000; - property ConnectTimeout: Integer read fConnectTimeout write fConnectTimeout default 10000; - property HttpRequestTimeout: Integer read fHttpRequestTimeout write fHttpRequestTimeout default 10000; - end; -const - ShHello = 0; - ShGoodbye = 1; - ShPackage = 2; - ShError = 3; - ShError_InvalidClientId = 0; - ShError_QueueFull = 1; - ShError_UnknownOption = 2; - ShOptions = 4; - ShAsyncWait = 5; -implementation - -uses Math; - -type - TROSuperHttpThread = class(TThread) - private - fOwner: TROBaseSuperHttpChannel; - public - constructor Create(aOwner: TROBaseSuperHttpChannel); - procedure Execute; override; - end; - -{ TROHttpWaitingRequest } - -constructor TROHttpWaitingRequest.Create(Id: Integer); -begin - fId := Id; - fEvent := TROEvent.Create(nil, true, false, ''); - fFreeEvent := true; -end; - -constructor TROHttpWaitingRequest.Create(Id: Integer; Ev: TROEvent); -begin - fEvent := Ev; - if Fevent = nil then begin - fEvent := TROEvent.Create(nil, true, false, ''); - fFreeEvent := true; - end; - fId := Id; -end; - -destructor TROHttpWaitingRequest.Destroy; -begin - if fFreeEvent then fEvent.Free; - inherited; -end; - -{ TROBaseSuperHttpChannel } - -procedure TROBaseSuperHttpChannel.BeforeDispatch(aMessage: IROMessage); -begin - if not fConnected then begin - Active := true; - if (fConnectWait.WaitFor(fConnectTimeout) <> wrSignaled) or not fConnected then - raise EROSuperHttpChannelException.Create('Timeout connecting'); - end; - aMessage.ClientID := fSessionId; - inherited; -end; - -constructor TROBaseSuperHttpChannel.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - fMaxPackageSize := 1 * 1024 * 1024; - fRequestTimeout := 60000; - fConnectTimeout := 10000; - fHttpRequestTimeout := 10000; - fConnectWait := TROEvent.Create(nil, true, false, ''); - fWaitingRequest := TThreadList.Create; - ThreadSafe := true; - fDispatchLock := TCriticalSection.Create; -end; - -destructor TROBaseSuperHttpChannel.Destroy; -var - i: Integer; - lList: TList; -begin - if fOwnsThreadPool then fEventThreadPool.Free; - Active := False; - fConnectWait.Free; - lList := fWaitingRequest.LockList; - try - for i := 0 to lList.Count -1 do begin - TROHttpWaitingRequest(lList[i]).Free; - end; - finally - fWaitingRequest.UnlockList; - end; - fWaitingRequest.Free; - fDispatchLock.Free; - inherited; -end; - -procedure TROBaseSuperHttpChannel.IntDispatch(aRequest, - aResponse: TStream); -var - lRequest, lResponse: TDynByteArray; - lList:TList; - lId: Integer; - lReq: TROHttpWaitingRequest; -begin - if aRequest.Size > fRemoteMaxPackageSize then raise EROSuperHttpChannelException.Create('Package too large'); - SetLength(lRequest, 16 + 1 + 4 + aRequest.Size); - aRequest.Position := 0; - - Move(fConnectionId, lRequest[0], 16); - lRequest[16] := ShPackage; - aRequest.Read(lRequest[21], aRequest.Size); - lList := fWaitingRequest.LockList; - try - inc(fPackageCounter); - if fPackageCounter < 0 then fPackageCounter := 1; - lId := fPackageCounter; - lReq := TROHttpWaitingRequest.Create(lId); - lList.Add(lReq); - finally - fWaitingRequest.UnlockList; - end; - try - lRequest[17] := lId; - lRequest[18] := lId shr 8; - lRequest[19] := lId shr 16; - lRequest[20] := lId shr 24; - fDispatchLock.Enter; - try - DispatchHttpRequest(false, lRequest, lResponse); - if Length(lResponse) >= 6 then begin - if lResponse[0] = shError then begin - case lResponse[5] of - ShError_InvalidClientId: raise EROSuperHttpChannelException.Create('Invalid client id'); - ShError_QueueFull: raise EROSuperHttpChannelException.Create('Queue full'); - else - raise EROSuperHttpChannelException.Create('Unknown error'); - end; - end; - end; - finally - fDispatchLock.Release; - end; - if lReq.Event.WaitFor(fRequestTimeout) <> wrSignaled then - raise EROSuperHttpChannelException.Create('Timeout'); - - if Length(lReq.fResultData) <> 0 then begin - aResponse.Write(lReq.fResultData[0], length(lReq.fResultData)) - end else begin - case lReq.fResultErrorCode of - ShError_InvalidClientId: raise EROSuperHttpChannelException.Create('Invalid client id'); - ShError_QueueFull: raise EROSuperHttpChannelException.Create('Queue full'); - else - raise EROSuperHttpChannelException.Create('Unknown error'); - end; - end; - finally - lList := fWaitingRequest.LockList; - lList.Remove(lReq); - fWaitingRequest.UnlockList; - lReq.Free; - end; -end; - -procedure TROBaseSuperHttpChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - -end; - -procedure TROBaseSuperHttpChannel.SetActive(const Value: Boolean); -begin - if fActive = Value then exit; - fActive := Value; - if fActive then begin - fConnectWait.ResetEvent; - if fWaitingThread <> nil then fWaitingThread.Free; - fWaitingThread := TROSuperHttpThread.Create(self); - end else begin - fWaitingThread.Terminate; - CancelRequest(true); - fWaitingThread.Free; - fwaitingThread := nil; - end; -end; - -procedure TROBaseSuperHttpChannel.SetEventThreadPool( - const Value: TROThreadPool); -begin - if fOwnsThreadPool and (fEventThreadPool <> nil) then fEventThreadPool.Free; - fEventThreadPool := Value; - fOwnsThreadPool := false; -end; - -procedure TROBaseSuperHttpChannel.RegisterEventReceiver( - aReceiver: IROEventReceiver); -begin - fEventReceiver := aReceiver; -end; - -procedure TROBaseSuperHttpChannel.UnregisterEventReceiver( - aReceiver: IROEventReceiver); -begin - if fEventReceiver = aReceiver then fEventReceiver := nil; -end; - - -function FindWaitingRequest(aList: TList; aId: Integer): TROHttpWaitingRequest; -var - i: Integer; -begin - for i := aList.count -1 downto 0 do begin - result := TROHttpWaitingRequest(aList[i]); - if result.fId = aId then exit; - end; - result := nil; -end; - -function TROBaseSuperHttpChannel.CheckStatus( - const iMessageID: String): Boolean; -var - lList: TList; - wr: TROHttpWaitingRequest; -begin - lList := fWaitingRequest.LockList; - try - wr := FindWaitingRequest(lList, StrToInt(iMessageId)); - if wr = nil then - result := true - else - result := (Length(wr.Resultdata) <> 0) or (wr.ResultErrorCode <> 0); - finally - fWaitingRequest.UnlockList; - end; -end; - -procedure TROBaseSuperHttpChannel.RetrieveResponse( - const iMessageID: String; aResponse: TStream); -var - lList: TList; - wr: TROHttpWaitingRequest; -begin - lList := fWaitingRequest.LockList; - try - wr := FindWaitingRequest(lList, StrToInt(iMessageId)); - finally - fWaitingRequest.UnlockList; - end; - if wr = nil then raise EROSuperHttpChannelException.Create('Invalid request id'); - try - if wr.fEvent.WaitFor(fRequestTimeout) <> wrSignaled then raise EROSuperHttpChannelException.Create('Timeout'); - if Length(wr.fResultData) > 0 then begin - aResponse.Write(wr.fresultData[0], Length(wr.fresultData)); - aResponse.Position := 0; - end else begin - case wr.fResultErrorCode of - ShError_InvalidClientId: raise EROSuperHttpChannelException.Create('Invalid client id'); - ShError_QueueFull: raise EROSuperHttpChannelException.Create('Queue full'); - else - raise EROSuperHttpChannelException.Create('Unknown error'); - end; - end; - finally - lList := fWaitingRequest.LockList; - try - lList.Remove(wr); - wr.Free; - finally - fWaitingRequest.UnlockList; - end; - end; - -end; - -function TROBaseSuperHttpChannel.InvokeRequest(aRequest: TStream; - iGetResponse: boolean): string; -begin - result := InvokeRequest(aRequest, iGetResponse, nil); -end; - -function TROBaseSuperHttpChannel.InvokeRequest(aRequest: TStream; - aGetResponse: boolean; aEvent: TROEvent): string; -var - lRequest, lResponse: TDynByteArray; - lList:TList; - lId: Integer; - lReq: TROHttpWaitingRequest; -begin - if aRequest.Size > fRemoteMaxPackageSize then raise EROSuperHttpChannelException.Create('Package too large'); - SetLength(lRequest, 16 + 1 + 4 + aRequest.Size); - aRequest.Position := 0; - - Move(fConnectionId, lRequest[0], 16); - lRequest[16] := ShPackage; - aRequest.Read(lRequest[21], aRequest.Size); - lList := fWaitingRequest.LockList; - try - inc(fPackageCounter); - if fPackageCounter < 0 then fPackageCounter := 1; - lId := fPackageCounter; - if aGetResponse then begin - lReq := TROHttpWaitingRequest.Create(lId); - lList.Add(lReq); - end else - lReq := nil; - finally - fWaitingRequest.UnlockList; - end; - try - lRequest[17] := lId; - lRequest[18] := lId shr 8; - lRequest[19] := lId shr 16; - lRequest[20] := lId shr 24; - fDispatchLock.Enter; - try - DispatchHttpRequest(false, lRequest, lResponse); - if Length(lResponse) >= 6 then begin - if lResponse[0] = shError then begin - case lResponse[5] of - ShError_InvalidClientId: raise EROSuperHttpChannelException.Create('Invalid client id'); - ShError_QueueFull: raise EROSuperHttpChannelException.Create('Queue full'); - else - raise EROSuperHttpChannelException.Create('Unknown error'); - end; - end; - end; - finally - fDispatchLock.Release; - end; - result := inttostr(lId); - except - lList := fWaitingRequest.LockList; - lList.Remove(lReq); - fWaitingRequest.UnlockList; - lReq.Free; - raise; - end; -end; - -type - TROSuperEventCallback = class(TInterfacedObject, IROThreadPoolCallback) - private - fData: TDynByteArray; - fOwner: TROBaseSuperHttpChannel; - public - procedure Callback(Caller: TROThreadPool; aThread: TThread); - end; - -procedure TROBaseSuperHttpChannel.ProcessEvent(aId: Integer; - aData: TDynByteArray); -var - lCb: TROSuperEventCallback; -begin - lCb := TROSuperEventCallback.Create; - lCb.fOwner := self; - lCb.fData := aData; - fEventThreadPool.QueueItem(lCb); -end; - -{ TROSuperHttpThread } - -constructor TROSuperHttpThread.Create(aOwner: TROBaseSuperHttpChannel); -begin - inherited Create(true); - fOwner := aOwner; - Resume; -end; - -procedure TROSuperHttpThread.Execute; -var - lRequest, - lTmpData, - lResponse: TDynByteArray; - lList: TList; - lPackageId: Integer; - wr: TROHttpWaitingRequest; -begin - try - if IsEqualGuid(fOwner.fConnectionId, Emptyguid) then fOwner.fConnectionId := NewGuid; - SetLength(lRequest, 16 + 1 +8 + 4 + 16); - Move(fOwner.fConnectionId, lRequest[0], 16); - lRequest[16] := shHello; - lRequest[17] := ord('R'); - lRequest[18] := ord('O'); - lRequest[19] := ord('S'); - lRequest[20] := ord('H'); - lRequest[21] := ord('1'); - lRequest[22] := ord('0'); - lRequest[23] := ord('0'); - lRequest[24] := ord('0'); - lRequest[25] := fOwner.fMaxPackageSize; - lRequest[26] := fOwner.fMaxPackageSize shr 8; - lRequest[27] := fOwner.fMaxPackageSize shr 16; - lRequest[28] := fOwner.fMaxPackageSize shr 16; - Move(fOwner.fSessionId, lRequest[29], 16); - fOwner.fDispatchLock.Enter; - try - fOwner.DispatchHttpRequest(false, lRequest, lResponse); - finally - fOwner.fDispatchLock.Leave; - end; - if Length(lResponse) <> (16 + 8 + 4) then - raise EROSuperHttpChannelException.Create('Invalid response from server for connection initiation command'); - - if (lResponse[0] <> ord('R')) or (lResponse[1] <> ord('O')) or (lResponse[2] <> ord('S')) or (lResponse[3] <> ord('H')) then - raise EROSuperHttpChannelException.Create('Invalid response from server for connection initiation command'); - fOwner.fRemoteMaxPackageSize := Integer(lResponse[8]) or (Integer(lResponse[9]) shl 8) - or (Integer(lResponse[10]) shl 16) or (Integer(lResponse[11]) shl 24); - move(lResponse[12], fOwner.fSessionId, 16); - fOwner.fConnected := true; - fOwner.fConnectWait.SetEvent; - SetLength(lRequest, 17); - move(fOwner.fConnectionId, lRequest[0], 16); - lRequest[16] := ShAsyncWait; - while not Terminated do begin - try - fOwner.DispatchHttpRequest(true, lRequest, lResponse); - except - continue; - end; - if Length(lResponse) <> 0 then begin - case lResponse[0] of - ShError: begin - if Length(lResponse) < 5 then continue; - lPackageId := Integer(lResponse[1]) or (Integer(lResponse[2]) shl 8) - or (Integer(lResponse[3]) shl 16) or (Integer(lResponse[4]) shl 24); - lList := fOwner.fWaitingRequest.LockList; - try - wr := FindWaitingRequest(lList, lPackageId); - if wr <> nil then begin - wr.fResultErrorCode := lResponse[4]; - wr.fEvent.SetEvent; - end; - finally - fOwner.fWaitingRequest.UnlockList; - end; - end; - shPackage: begin - if Length(lResponse) < 5 then continue; - lPackageId := Integer(lResponse[1]) or (Integer(lResponse[2]) shl 8) - or (Integer(lResponse[3]) shl 16) or (Integer(lResponse[4]) shl 24); - setLength(lTmpData, Length(lResponse) -5); - Move(lResponse[5], lTmpData[0], Length(lTmpData)); - if lPackageId < 0 then - fOwner.ProcessEvent(lPackageId, lTmpData) - else begin - lList := fOwner.fWaitingRequest.LockList; - try - wr := FindWaitingRequest(lList, lPackageId); - if wr <> nil then begin - wr.fResultData := lTmpData; - wr.fEvent.SetEvent; - end; - finally - fOwner.fWaitingRequest.UnlockList; - end; - end; - end; - end; - end; - end; - lRequest[16] := shGoodbye; - fOwner.fDispatchLock.Enter; - try - fOwner.DispatchHttpRequest(false, lRequest, lResponse); - finally - fOwner.fDispatchLock.Leave; - end; - except - // cannot let exceptions escape here - end; -end; - -{ TROSuperEventCallback } - -procedure TROSuperEventCallback.Callback(Caller: TROThreadPool; - aThread: TThread); -var - lData: TMemoryStream; -begin - if fOwner.fEventReceiver <> nil then begin - lData := TMemoryStream.Create; - try - lData.Write(fData[0], length(fData)); - lData.Position := 0; - fOwner.fEventReceiver.Dispatch(lData, aThread); - finally - lData.Free; - end; - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpServer.pas deleted file mode 100644 index 49aa64a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBaseSuperHttpServer.pas +++ /dev/null @@ -1,1146 +0,0 @@ -unit uROBaseSuperHttpServer; - -interface - -{$I RemObjects.inc} - -uses - SysUtils, Classes, uROClientIntf, uROServer, uROServerIntf, uROClasses, - uIPHttpHeaders, uROThreadPool, uROThread, uROClient, uROEventRepository, - uROHtmlServerInfo, uRODL, uROHTTPDispatch, uROTypes, uROSessions; - -type - TROSuperHttpWaitingConnection = class(TObject) - private - fChannel: IUnknown; - fTimeout: TDateTime; - public - constructor Create(aChannel: IUnknown); - property Timeout: TDateTime read fTimeout; - property Channel: IUnknown read fChannel; - end; - TROBaseSuperHttpServer = class; - TROSuperHttpServerConnection = class; - IROSuperHttpServerConnection = interface - ['{48AF124A-38F5-43A4-BD82-684A74EDF77F}'] - function GetSelf: TROSuperHttpServerConnection; - function GetGuid: TGuid; - function GuidMatches(const aGuid: TGuid): Boolean; - - procedure DisposeData; - end; - TROSuperHttpServerConnection = class(TInterfacedObject, IROSuperHttpServerConnection, IROActiveEventServer) - private - fServer: TROBaseSuperHttpServer; - fLastTalk: TDateTime; - fRemoteMaxPackageLength: Integer; - fConnectionId: TGuid; - fSessionId: TGuid; - fResponseQueue: TInterfaceList; - fWaitingConnections: TThreadList; - fEventId: Integer; - protected - function GetSelf: TROSuperHttpServerConnection; - public - constructor Create(aServer: TROBaseSuperHttpServer); - destructor Destroy; override; - - procedure DisposeData; - - function GetGuid: TGuid; - function GuidMatches(const aGuid: TGuid): Boolean; - - property Server: TROBaseSuperHttpServer read fServer; - property LastTalk: TDateTime read fLastTalk write fLastTalk; - property ResponseQueue: TInterfaceList read fResponseQueue; - property WaitingConnections: TThreadList read fWaitingConnections; - property RemoteMaxPackageLength: Integer read fRemoteMaxPackageLength write fRemoteMaxPackageLength; - property ConnectionId: TGuid read fConnectionId write fConnectionId; - property SessionId: TGUID read fSessionId write fSessionId; - procedure EventsRegistered(aSender: TObject; aClient: TGUID); - procedure DispatchEvent(anEventDataItem: TROEventData; - aSessionReference: TGUID; aSender: TObject); - end; - - TROSuperHttpServerResponse = class; - IROSuperHttpServerResponse = interface - ['{9C33C4C2-F6AA-452C-9E67-F49F75F292F2}'] - function GetSelf: TROSuperHttpServerResponse; - end; - TROSuperHttpServerResponse = class(TInterfacedObject, IROSuperHttpServerResponse) - private - fHeaders: TIPHttpResponseHeaders; - fData: TDynamicByteArray; - fConnection: IROSuperHttpServerConnection; - fAttempt: Integer; - function GetSelf: TROSuperHttpServerResponse; - public - constructor Create(aConn: IROSuperHttpServerConnection; aHeaders: TIPHttpResponseHeaders); - destructor Destroy; override; - - property Headers: TIPHttpResponseHeaders read fHeaders; - property Data: TDynamicByteArray read fData write fData; - property Connection: IROSuperHttpServerConnection read fConnection write fConnection; - property Attempt: Integer read fAttempt write fAttempt; - end; - TROBaseSuperHttpServer = class(TROServer) - private - fTimer: TROThreadTimer; - fThreadPool: TROThreadPool; - fOwnsThreadPool: boolean; - fMaxPackageSize: Integer; - fConnections: TInterfaceList; - fServeRodl, - fServeInfoPage: Boolean; - fActive: Boolean; - fEventRepository: TROEventRepository; - fConnectionTimeout: Integer; - - function GetConnection(const aGuid: TGuid): IROSuperHttpServerConnection; - procedure KillConnection(aConnection: IROSuperHttpServerConnection); - procedure SendError(aTarget: IUnknown; anError: string); - procedure IncomingData(aTarget: IUnknown; aRequestHeaders: TIPHttpRequestHeaders; aData: TDynamicByteArray; aDispatcher: TROMessageDispatcher); - procedure SendRodl(ATarget: IUnknown; aRequest: TIPHttpRequestHeaders; aDispatcher: TROMessageDispatcher; const aTargetService: string); - procedure AddWaitingRequest(aTarget: IUnknown; aConnection: IROSuperHttpServerConnection); - procedure ProcessPackage(aTarget: IROSuperHttpServerConnection; aHeaders: TIPHttpRequestHeaders; aMessageDispatcher: TROMessageDispatcher; aId: Integer; aData: TDynamicByteArray); - procedure SendAsyncResponse(aTarget: IROSuperHttpServerConnection; lHeaders: TIPHttpResponseHeaders; aData: TDynamicByteArray); - procedure SetThreadPool(const Value: TROThreadPool); - procedure cbCleanup(CurrentTickCount : Cardinal); - protected - - procedure CloseConnection(aConnection: IUnknown); virtual; abstract; - procedure SendResponse(aTarget: IUnknown; aHeaders: TIPHttpResponseHeaders; aData: TDynamicByteArray; UserData: IInterface); virtual; abstract; - function HandleUnknownRequest(aTarget: IUnknown; arequest: TIPHttpRequestHeaders; aData: TDynamicByteArray): Boolean; virtual; abstract; - procedure SetDefaultHeaders(aTarget: IUnknown; aHeaders: TIPHttpResponseHeaders); virtual; abstract; - - procedure HandleRequest(aTarget: IUnknown; aRequestHeaders: TIPHttpRequestHeaders; aRequest: TDynamicByteArray); - procedure ResponseFailed(aUserData: IInterface); - procedure ResponseSucessful(aUserData: IInterface); - - procedure DoActivate; virtual; - procedure DoDeactivate; virtual; - - function IntGetActive: Boolean; override; - procedure IntSetActive(const Value: Boolean); override; - function GetDispatchersClass : TROMessageDispatchersClass; override; - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - - published - property ServeRodl: Boolean read fServeRodl write fServeRodl default true; - property ServeInfoPage: Boolean read fServeInfoPage write fServeInfoPage default true; - - property MaxPackageSize: Integer read fMaxPackageSize write fMaxPackageSize default 1 * 1024 * 1024; - property ConnectionTimeout: Integer read fConnectionTimeout write fConnectionTimeout default 5 * 60; - property ThreadPool: TROThreadPool read fThreadPool write SetThreadPool; - property EventRepository: TROEventRepository read fEventRepository write fEventRepository; - end; - -const - ShHello = 0; - ShGoodbye = 1; - ShPackage = 2; - ShError = 3; - ShError_InvalidClientId = 0; - ShError_QueueFull = 1; - ShError_UnknownOption = 2; - ShOptions = 4; - ShAsyncWait = 5; - - -implementation - -{ TROSuperHttpWaitingConnection } - -constructor TROSuperHttpWaitingConnection.Create(aChannel: IUnknown); -begin - fChannel := aChannel; -end; - -{ TROSuperHttpServerResponse } - -constructor TROSuperHttpServerResponse.Create(aConn: IROSuperHttpServerConnection; aHeaders: TIPHttpResponseHeaders); -begin - inherited Create; - fHeaders := aHeaders; - if fHeaders = nil then fhEaders := TIPHttpResponseHeaders.Create; - fConnection := aConn; -end; - -destructor TROSuperHttpServerResponse.Destroy; -begin - fHeaders.Free; - inherited Destroy; -end; - -function TROSuperHttpServerResponse.GetSelf: TROSuperHttpServerResponse; -begin - result := Self; -end; - -{ TROSuperHttpServerConnection } - -procedure TROSuperHttpServerConnection.DisposeData; -var - i: Integer; - lConn: TROSuperHttpWaitingConnection; - lList: TList; -begin - FreeAndNil(fResponseQueue); - lList := fWaitingConnections.LockList; - for i := 0 to lList.Count -1 do - begin - lConn := TROSuperHttpWaitingConnection(lList[i]); - fServer.CloseConnection(lConn.Channel); - lConn.Free; - end; - fWaitingConnections.UnlockList; - FreeAndNil(fWaitingConnections); -end; - -constructor TROSuperHttpServerConnection.Create( - aServer: TROBaseSuperHttpServer); -begin - fServer := aServer; - fResponseQueue := TInterfaceList.Create; - fWaitingConnections := TThreadList.Create; -end; - -destructor TROSuperHttpServerConnection.Destroy; -begin - fResponseQueue.Free; - fWaitingConnections.Free; - inherited; -end; - -function TROSuperHttpServerConnection.GetSelf: TROSuperHttpServerConnection; -begin - result := self; -end; - -procedure TROSuperHttpServerConnection.DispatchEvent( - anEventDataItem: TROEventData; aSessionReference: TGUID; aSender: TObject); -var - lId: Integer; - lData: TDynamicByteArray; -begin - fResponseQueue.Lock; - fEventId := fEventId - 1; - if fEventId > 0 then fEventId := -1; - lId := fEventId; - fResponseQueue.Unlock; - - SetLength(lData, anEventDataItem.Data.size + 5); - lData[0] := ShPackage; - lData[1] := lId; - lData[2] := lId shr 8; - lData[3] := lId shr 16; - lData[4] := lId shr 24; - anEventDataItem.Data.Seek(0, soFromBeginning); - anEventDataItem.Data.Read(lData[5], Length(lData) -5); - fServer.SendAsyncResponse(self, nil, lData); -end; - -function TROSuperHttpServerConnection.GetGuid: TGuid; -begin - result := fConnectionId; -end; - -function TROSuperHttpServerConnection.GuidMatches( - const aGuid: TGuid): Boolean; -begin - result := (fConnectionId.D1 = aGuid.D1) and - (fConnectionId.D2 = aGuid.D2) and - (fConnectionId.D3 = aGuid.D3) and - (fConnectionId.D4[0] = aGuid.D4[0]) and - (fConnectionId.D4[1] = aGuid.D4[1]) and - (fConnectionId.D4[2] = aGuid.D4[2]) and - (fConnectionId.D4[3] = aGuid.D4[3]) and - (fConnectionId.D4[4] = aGuid.D4[4]) and - (fConnectionId.D4[5] = aGuid.D4[5]) and - (fConnectionId.D4[6] = aGuid.D4[6]) and - (fConnectionId.D4[7] = aGuid.D4[7]); -end; - -procedure TROSuperHttpServerConnection.EventsRegistered(aSender: TObject; - aClient: TGUID); -begin - // do nothing. -end; - -{ TROBaseSuperHttpServer } - -procedure TROBaseSuperHttpServer.AddWaitingRequest(aTarget: IUnknown; - aConnection: IROSuperHttpServerConnection); -var - lRealConnection: TROSuperHttpServerConnection; - lResp: IROSuperHttpServerResponse; -begin - lRealConnection := aConnection.GetSelf; - lRealConnection.ResponseQueue.Lock; - try - if lRealConnection.ResponseQueue.Count > 0 then begin - lResp := IROSuperHttpServerResponse(lRealConnection.ResponseQueue[0]); - lRealConnection.ResponseQueue.Delete(0); - - Sendresponse(aTarget, lResp.GetSelf.Headers, lResp.GetSelf.Data, lResp); - exit; - end; - finally - lRealConnection.ResponseQueue.Unlock; - end; - lRealConnection.WaitingConnections.Add(TROSuperHttpWaitingConnection.Create(aTarget)); -end; - -procedure TROBaseSuperHttpServer.cbCleanup(CurrentTickCount: Cardinal); -var - lTimeoutTime, lConnTimeout: TDateTime; - i: Integer; - lList: TList; - lConn: IROSuperHttpServerConnection; -begin - lTimeoutTime := Now - (90 * (1.0 / (24 * 60 * 60))); - lConnTimeout := Now - (fConnectionTimeout * (1.0 / (24 * 60 * 60))); - fConnections.Lock; - try - for i := fconnections.Count -1 downto 0 do begin - lConn := IROSuperHttpServerconnection(fConnections[i]); - if lConn.GetSelf.fLastTalk < lConnTimeout then begin - KillConnection(lConn); - continue; - end; - - lList := lConn.GetSelf.fWaitingConnections.LockList; - while lList.Count > 0 do - begin - if TROSuperHttpWaitingConnection(lList[0]).Timeout < lTimeoutTime then begin - SendResponse(TROSuperHttpWaitingConnection(lList[0]).fChannel, nil, nil, nil); - TROSuperHttpWaitingConnection(lList[0]).Free; - lList.Delete(0); - end else break; - end; - lConn.GetSelf.fWaitingConnections.UnlockList; - end; - finally - fConnections.Unlock; - end; -end; - -constructor TROBaseSuperHttpServer.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - fMaxPackageSize := 1024 *1024 * 1; - fServeRodl := true; - fServeInfoPage := true; - fConnections := TInterfaceList.Create; - fConnectionTimeout := 5 * 60; -end; - -destructor TROBaseSuperHttpServer.Destroy; -var - i: Integer; -begin - Active := False; - if fTimer <> nil then FreeAndNil(fTimer); - if fOwnsThreadPool then FreeAndNil(fThreadPool); - - fConnections.Lock; - try - for i := fConnections.Count -1 downto 0 do begin - IROSuperHttpServerConnection(fConnections[i]).DisposeData; - end; - finally - fConnections.Unlock; - end; - fConnections.Free; - inherited Destroy; -end; - -procedure TROBaseSuperHttpServer.DoActivate; -begin - if fTimer <> nil then - fTimer.Free; - fTimer := TROThreadTimer.Create(cbCleanup, 30000); - if fThreadPool = nil then begin - fThreadPool := TROThreadPool.Create(self); - fOwnsThreadPool := true; - end; -end; - -procedure TROBaseSuperHttpServer.DoDeactivate; -begin - if fTimer <> nil then - fTimer.Free; - fTimer := nil; -end; - -function TROBaseSuperHttpServer.GetConnection( - const aGuid: TGuid): IROSuperHttpServerConnection; -var - i: Integer; -begin - fConnections.Lock; - try - for i := fConnections.Count -1 downto 0 do begin - Result := IROSuperHttpServerConnection(fConnections[i]); - if Result.GuidMatches(aGuid) then exit; - end; - finally - fConnections.Unlock; - end; - result := nil; -end; - -function TROBaseSuperHttpServer.IntGetActive: Boolean; -begin - result := fActive; -end; - -procedure TROBaseSuperHttpServer.IntSetActive(const Value: Boolean); -begin - inherited; - if fActive <> Value then begin - fActive := Value; - if value then - DoActivate - else - DoDeactivate; - end; -end; - -procedure TROBaseSuperHttpServer.KillConnection( - aConnection: IROSuperHttpServerConnection); -var - fListener: IROSessionsChangesListener; -begin - fConnections.Remove(aConnection); - if Supports(fEventRepository, IROSessionsChangesListener, fListener) then - flistener.SessionsChangedNotification(aConnection.GetSelf.SessionId, saRemoveActiveListener, aConnection.GetSelf); - aConnection.DisposeData; -end; - -procedure TROBaseSuperHttpServer.SendError(aTarget: IUnknown; - anError: string); -var - lData: TDynamicByteArray; - lHeaders: TIPHttpResponseHeaders; -begin - anError := 'Internal Server Error

Internal Server Error

'+anError+''; - lHeaders := TIPHttpResponseHeaders.Create; - try - lHeaders.Code := 500; - lHeaders.Reason := 'Internal Error'; - lHeaders.Headers.Values['Content-Type'] := 'text/html'; - SetLength(lData, Length(anError)); - Move(anError[1], lData[0], Length(anError)); - SendResponse(aTarget, lHeaders, lData, nil); - finally - lHeaders.Free; - end; -end; - -procedure TROBaseSuperHttpServer.SendRodl(ATarget: IUnknown; - aRequest: TIPHttpRequestHeaders; aDispatcher: TROMessageDispatcher; - const aTargetService: string); -var - lResponse: TMemoryStream; - moduleinfo: IROModuleInfo; - aFormat: string; - lData: TDynamicByteArray; - lHeaders: TIPHttpResponseHeaders; -begin - lResponse := TMemoryStream.Create; - try - aFormat := 'text/xml'; - if Supports(aDispatcher, IROModuleInfo, moduleinfo) then - moduleinfo.GetModuleInfo(lResponse, nil, aFormat) - else - GetRodl(lResponse, nil, aformat, GetRODLReader); - SetLength(lData, lResponse.Size); - lResponse.Seek(0, soFromBeginning); - lResponse.Read(lData[0], Length(lData)); - - except - SendError(aTarget, 'Error retrieving RODL file'); - exit; - end; - lHeaders := TIPHttpResponseHeaders.Create; - try - SetDefaultHeaders(aTarget, lHeaders); - lHeaders.Headers.Values['Content-Type'] := aFormat; - SendResponse(ATarget, lHeaders, lData, nil); - finally - lHeaders.Free; - end; -end; - -function SameGuid(const g1, g2: TGuid): Boolean; -begin - result := (g1.D1 = g2.D1) and - (g1.D2 = g2.D2) and - (g1.D3 = g2.D3) and - (g1.D4[0] = g2.D4[0]) and - (g1.D4[1] = g2.D4[1]) and - (g1.D4[2] = g2.D4[2]) and - (g1.D4[3] = g2.D4[3]) and - (g1.D4[4] = g2.D4[4]) and - (g1.D4[5] = g2.D4[5]) and - (g1.D4[6] = g2.D4[6]) and - (g1.D4[7] = g2.D4[7]); - -end; - -procedure TROBaseSuperHttpServer.IncomingData(aTarget: IUnknown; - aRequestHeaders: TIPHttpRequestHeaders; aData: TDynamicByteArray; - aDispatcher: TROMessageDispatcher); -var - lClientId: TGuid; - lResp: TDynamicByteArray; - lConnection: IROSuperHttpServerConnection; - i: Integer; -begin - if Length(aData) < 17 then begin - SendError(aTarget, 'Invalid Request'); - exit; - end; - Move(aData[0], lClientId, Sizeof(lClientID)); - case aData[16] of - ShHello: - begin - if Length(aData) <> (16 { cid:guid } + 1 { cmd } + 8 { hello command } + - 4 { max package } + 16 { session guid }) then begin - SendError(aTarget, 'Invalid Request'); - exit; - end; - if (aData[17] <> ord('R')) or (aData[18] <> ord('O')) or (aData[19] <> ord('S')) or - (aData[20] <> ord('H')) then begin - SendError(aTarget, 'Invalid Request'); - exit; - end; - fConnections.Lock; - try - lConnection := GetConnection(lClientId); - if lConnection <> nil then begin - SetLength(lResp, 6); - lResp[0] := shError; - lResp[5] := shError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - exit; - end; - lConnection := TROSuperHttpServerConnection.Create(self); - lConnection.GetSelf.ConnectionId := lClientId; - lConnection.GetSelf.LastTalk := Now; - lConnection.GetSelf.RemoteMaxPackageLength := - aData[25] or - (Integer(aData[26]) shl 8) or - (Integer(aData[27]) shl 16) or - (Integer(aData[28]) shl 24); - lConnection.GetSelf.SessionId := TGuid((@aData[29])^); - fConnections.Add(lConnection); - if SameGuid(lConnection.GetSelf.SessionId, EmptyGUID) then - lConnection.GetSelf.SessionId := NewGuid(); - - if fEventRepository <> nil then begin - fEventRepository.AddSession(lConnection.GetSelf.SessionId, lConnection.GetSelf); - end; - finally - fconnections.Unlock; - end; - SetLength(lResp, 8 + 4 + 16); - lResp[0] :=ord('R'); - lResp[1] := ord('O'); - lResp[2] := ord('S'); - lResp[3] :=ord('H'); - lResp[4] := ord('1'); - lResp[5] := ord('0'); - lResp[6] := ord('0'); - lResp[7] := ord('0'); - lResp[8] := fMaxPackageSize; - lResp[9] := fMaxPackageSize shr 8; - lResp[10] := fMaxPackageSize shr 16; - lResp[11] := fMaxPackageSize shr 24; - Move(lConnection.GetSelf.SessionId, lResp[12], Sizeof(TGuid)); - SendResponse(aTarget, nil, lResp, nil); - exit; - end; - ShGoodbye: - begin - lConnection := GetConnection(lClientId); - if lConnection = nil then begin - SetLength(lResp, 6); - lResp[0] := ShError; - lResp[5] := ShError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - - exit; - end; - KillConnection(lConnection); - SendResponse(aTarget, nil, nil, nil); - exit; - end; - ShPackage: - begin - lConnection := GetConnection(lClientId); - if lConnection = nil then begin - SetLength(lResp, 6); - lResp[0] := ShError; - lResp[5] := ShError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - - exit; - end; - - lConnection.GetSelf.LastTalk := Now; - if Length(aData) < 16 + 1 + 4 then begin - SendError(aTarget, 'Invalid Request'); - exit; - end; - - i := aData[17] or (Integer(aData[18]) shl 8) or (Integer(aData[19]) shl 16) or (Integer(aData[20]) shl 24); - SetLength(lResp, Length(aData)-21); - Move(aData[21], lResp[0], Length(lResp)); - try - ProcessPackage(lConnection, aRequestHeaders, aDispatcher, i, lResp); - except - SetLength(lResp, 6); - lResp[0] := ShError; - lResp[5] := ShError_QueueFull; - lResp[1] := aData[0]; - lResp[2] := aData[1]; - lResp[3] := aData[2]; - lResp[4] := aData[3]; - SendResponse(aTarget, nil, lResp, nil); - exit; - end; - SendResponse(aTarget, nil, nil, nil); - exit; - end; - ShError: - begin - SendResponse(aTarget, nil, nil, nil); - exit; - end; - ShOptions: - begin - lConnection := GetConnection(lClientId); - if lConnection = nil then begin - SetLength(lResp, 6); - lResp[0] := shError; - lResp[5] := ShError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - exit; - end - else begin - SetLength(lResp, 6); - lResp[0] := shError; - lResp[5] := ShError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - lConnection.GetSelf.LastTalk := Now; - exit; - end; - end; - ShAsyncWait: - begin - lConnection := GetConnection(lClientId); - if lConnection = nil then begin - SetLength(lResp, 6); - lResp[0] := shError; - lResp[5] := ShError_InvalidClientId; - SendResponse(aTarget, nil, lResp, nil); - exit; - end; - lConnection.GetSelf.LastTalk := Now; - - AddWaitingRequest(aTarget, lConnection); - exit; - end; - else - SendError(aTarget, 'Invalid Request'); - end; -end; - -procedure TROBaseSuperHttpServer.HandleRequest(aTarget: IUnknown; - aRequestHeaders: TIPHttpRequestHeaders; aRequest: TDynamicByteArray); -var - lMd: TROMessageDispatcher; - lTempStr: TMemoryStream; - lQueryString, - lServiceName, - s, - lSubPath, - lDispatcher: string; - lResponseHeaders: TIPHttpResponseHeaders; - lResponse: TDynamicByteArray; - lRodl: TRODLLibrary; -begin - try - lDispatcher := aRequestHeaders.Path; - if Pos('?', lDispatcher) >0 then begin - lQueryString := copy(lDispatcher, pos('?', lDispatcher)+1, MaxInt); - Delete(lDispatcher, pos('?', lDispatcher), MaxInt); - end else - lQueryString := ''; - - if (lDispatcher <> '') and (lDispatcher[1] = '/') then delete(lDispatcher, 1,1); - if pos('/', lDispatcher) > 0 then - begin - lSubPath := copy(lDispatcher, pos('/', lDispatcher)+1, MaxInt); - lDispatcher := '/' + copy(lDispatcher, 1, pos('/', lDispatcher) - 1); - end else - begin - lDispatcher := '/' + lDispatcher; - lSubPath := ''; - end; - - if lQueryString <> '' then begin - if copy(lQueryString, 1, 8) = 'service=' then begin - lServiceName := copy(lQueryString, 9, MaxInt); - end else if pos('&service=', lQueryString) > 0 then begin - lServiceName := Copy(lQueryString, pos('&service=', lQueryString)+10, MaxInt); - end; - if pos('&', lServiceName) >0 then Delete(lServiceName, pos('&', lServiceName), MaxInt); - end; - - lMd := TROHTTPMessageDispatchers(Dispatchers).GetDispatcherByPath(lDispatcher) as TROHTTPDispatcher; - - if lmd = nil then begin - if HandleUnknownRequest(aTarget, aRequestHeaders, aRequest) then - exit - else - begin - if (lDispatcher = '/') and (fServeInfoPage) then begin - lResponseHeaders := TIPHttpResponseHeaders.Create; - try - SetDefaultHeaders(aTarget, lResponseHeaders); - lResponseHeaders.Headers.Values['Content-Type'] := 'text/html; charset=utf-8'; - - lrodl := GetRodlLibrary(GetRODLReader); - try - s := GetRodlServerInfo('', lRodl, Dispatchers); - finally - lRodl.Free; - end; - SetLength(lResponse, length(s)); - Move(s[1], lResponse[0], Length(S)); - SendResponse(aTarget, lResponseHeaders, lResponse, nil); - finally - lResponseHeaders.Free; - end; - exit; - end - else if (Lowercase(lDispatcher) = '/doc')and (fServeInfoPage) then begin - lResponseHeaders := TIPHttpResponseHeaders.Create; - try - SetDefaultHeaders(aTarget, lResponseHeaders); - if lSubPath = 'css' then - begin - s := GetRodlCss; - lResponseHeaders.Headers.Values['Content-Type'] := 'text/css'; - end else - if lSubPath = 'xslt' then - begin - s := GetRodlStyleSheet; - lResponseHeaders.Headers.Values['Content-Type'] := 'text/xml'; - end else if lSubPath = '' then - begin - lRodl := GetRodlLibrary(GetRODLReader); - try - lResponseHeaders.Headers.Values['Content-Type'] := 'text/xml'; - s := GetRodlWithStyleSheet(lRodl, '/doc/xslt'); - finally - lRodl.Free; - end; - end else - begin - SendError(aTarget, 'Invalid Path'); - exit; - end; - SetLength(lResponse, length(s)); - Move(s[1], lResponse[0], Length(S)); - SendResponse(aTarget, lResponseHeaders, lResponse, nil); - finally - lResponseHeaders.Free; - end; - exit; - end - else if (LowerCase(lDispatcher) = '/favicon.ico') and (fServeInfoPage) then begin - lResponseHeaders := TIPHttpResponseHeaders.Create; - try - SetDefaultHeaders(aTarget, lResponseHeaders); - lResponseHeaders.Headers.Values['Content-Type'] := 'image/x-icon'; - lTempStr := TMemoryStream.Create; - try - GetRodlFavIcon(lTempStr); - SetLengtH(lResponse, lTempStr.Size); - lTempStr.Position := 0; - lTempstr.Read(lResponse[0], Length(lResponse)); - finally - lTempStr.Free; - end; - SendResponse(aTarget, lResponseHeaders, lResponse, nil); - finally - lResponseHeaders.Free; - end; - exit; - end - else if (Lowercase(lDispatcher) = '/rodl') and (fServeRodl) then begin - SendRodl(aTarget, aRequestHeaders, lMd, lServiceName); - exit; - end else begin - SendError(aTarget, 'No dispatcher configured for "'+lDispatcher+'".'); - exit; - end; - end; - end; - if not lMd.Enabled then begin - SendError(aTarget, 'Dispatcher for "'+lDispatcher+'" is disabled.'); - exit; - end; - if lMd.Message = nil then begin - SendError(aTarget, 'Message for dispatcher "'+lDispatcher+'" is has not been assigned.'); - exit; - end; - - if ((aRequestHeaders.Method = 'GET') or - (Length(aRequest) = 4)) and(fServeRodl) then begin - if (lSubPath = '') or (lSubPath = 'rodl') then begin - SendRodl(aTarget, aRequestHeaders, lmd, lServiceName); - exit; - end - else begin - SendError(aTarget, 'Message for dispatcher "'+lDispatcher+'" is has not been assigned.'); - exit; - end; - end; - - IncomingData(aTarget, aRequestHeaders, aRequest, lmd); - except - on e: Exception do - SendError(aTarget, e.Message); - end; -end; - -procedure TROBaseSuperHttpServer.SendAsyncResponse( - aTarget: IROSuperHttpServerConnection; lHeaders: TIPHttpResponseHeaders; - aData: TDynamicByteArray); -var - lResponse: IROSuperHttpServerResponse; - lList: TList; - lWc: TROSuperHttpWaitingConnection; -begin - lResponse := TROSuperHttpServerResponse.Create(aTarget.GetSelf, lHeaders); - lResponse.GetSelf.fData := aData; - lResponse.GetSelf.fConnection := aTarget.GetSelf; - lList := aTarget.GetSelf.WaitingConnections.LockList; - try - if lList.Count > 0 then begin - lResponse.GetSelf.Attempt :=lResponse.GetSelf.Attempt + 1; - lWc := lList[0]; - lList.Delete(0); - SendResponse(lWc.Channel, lResponse.GetSelf.Headers, lResponse.GetSelf.Data, lResponse); - lWc.Free; - exit; - end; - aTarget.GetSelf.ResponseQueue.Add(lResponse); - finally - aTarget.GetSelf.WaitingConnections.UnlockList; - end; -end; - -procedure TROBaseSuperHttpServer.SetThreadPool(const Value: TROThreadPool); -begin - if fOwnsThreadPool then - FreeAndNil(fThreadPool); - fOwnsThreadPool := false; - fThreadPool := Value; -end; - -type - TQueueItem = class(TInterfacedObject, IROThreadPoolCallback, IROTransport, IROHTTPTransport) - private - fTarget: IROSuperHttpServerConnection; - fHeaders: TIPHttpRequestHeaders; - fMessageDispatcher: TROMessageDispatcher; - fId: Integer; - fData: TDynamicByteArray; - fOwner: TROBaseSuperHttpServer; - public - constructor Create(aOwner: TROBaseSuperHttpServer; aTarget: IROSuperHttpServerConnection; aHeaders: TIPHttpRequestHeaders; - aMessageDispatcher: TROMessageDispatcher; aId: Integer; - aData: TDynamicByteArray); - destructor Destroy; override; - procedure Callback(Caller: TROThreadPool; aThread: TThread); - function GetTransportObject: TObject; - function GetContentType: String; - function GetHeaders(const aName: String): String; - function GetLocation: String; - function GetPathInfo: String; - function GetQueryString: String; - function GetTargetURL: String; - function GetUserAgent: String; - procedure SetContentType(const aValue: String); - procedure SetHeaders(const aName: String; const aValue: String); - procedure SetPathInfo(const aValue: String); - procedure SetTargetURL(const aValue: String); - procedure SetUserAgent(const aValue: String); - function GetClientAddress: String; - end; - - -procedure TROBaseSuperHttpServer.ProcessPackage( - aTarget: IROSuperHttpServerConnection; aHeaders: TIPHttpRequestHeaders; - aMessageDispatcher: TROMessageDispatcher; aId: Integer; - aData: TDynamicByteArray); -begin - fThreadPool.QueueItem(TQueueItem.Create(self, aTarget, aHeaders, aMessageDispatcher, aId, aData)); -end; - - - -procedure TROBaseSuperHttpServer.ResponseFailed(aUserData: IInterface); -var - lData: IROSuperHttpServerResponse; - lConn: IROSuperHttpServerConnection; - lList: TList; - lWc: TROSuperHttpWaitingConnection; - -begin - if aUserData = nil then exit; - - lData := IROSuperHttpServerResponse(aUserData); - if lData.GetSelf.Attempt = 16 then exit; // it won't arrive after 16 tries. - - lConn := lData.GetSelf.Connection; - lList := lConn.GetSelf.WaitingConnections.LockList; - try - if lList.Count > 0 then begin - lData.GetSelf.Attempt := lData.GetSelf.Attempt + 1; - lWc := TROSuperHttpWaitingConnection(lList[0]); - lList.Delete(0); - SendResponse(lWc.Channel, lData.GetSelf.Headers, lData.GetSelf.Data, lData); - lWc.Free; - exit; - end; - lConn.GetSelf.ResponseQueue.Add(lData); - finally - lConn.GetSelf.WaitingConnections.UnlockList; - end; - - -end; - -procedure TROBaseSuperHttpServer.ResponseSucessful(aUserData: IInterface); -begin - // nothing to do here. -end; - -function TROBaseSuperHttpServer.GetDispatchersClass: TROMessageDispatchersClass; -begin - Result := TROHTTPMessageDispatchers; -end; - -type - TByteArrayStream = class(TStream) - private - fPos: Integer; - fData: TDynamicByteArray; - protected - {$IFDEF DELPHI7UP} - function GetSize: Int64; override; - {$ENDIF} - public - constructor Create(aData: TDynamicByteArray); - function Write(const Buffer; Count: Integer): Integer; override; - function Read(var Buffer; Count: Integer): Integer; override; - function Seek(Offset: Integer; Origin: Word): Integer; override; - end; - -{ TQueueItem } - -procedure TQueueItem.Callback(Caller: TROThreadPool; aThread: TThread); -var - lStream, lResponse: TStream; - lResp: TDynamicByteArray; -begin - lStream := nil; - lResponse := TMemoryStream.Create; - try - if assigned(fOwner.OnReadFromStream) then begin - lStream := TMemoryStream.Create; - lStream.Write(fData[0], Length(fData)); - lstream.Position := 0; - fOwner.OnReadFromStream(lStream); - end - else - lStream := TByteArrayStream.Create(fData); - fData := nil; - - fOwner.DispatchMessage(self, lStream, lResponse); - - if assigned(fOwner.OnWriteToStream) then - fOwner.OnWriteToStream(lResponse); - - lResponse.Position := 0; - - SetLength(lResp, lResponse.Size + 5); - lResp[0] := ShPackage; - lResp[1] := fId; - lResp[2] := fId shr 8; - lResp[3] := fId shr 16; - lResp[4] := fId shr 24; - lResponse.Read(lResp[5], lResponse.Size); - fOwner.SendAsyncResponse(fTarget, nil, lResp); - except - on E: Exception do begin - setLength(lResp, 4 + 1 + 1); - lResp[0] := ShError; - lResp[1] := fId; - lResp[2] := fId shr 8; - lResp[3] := fId shr 16; - lResp[4] := fId shr 24; - lResp[5] := ShError_QueueFull; - fOwner.SendAsyncResponse(fTarget, nil, lResp); - end; - end; - lStream.Free; - lResponse.Free; -end; - -constructor TQueueItem.Create(aOwner: TROBaseSuperHttpServer; - aTarget: IROSuperHttpServerConnection; aHeaders: TIPHttpRequestHeaders; - aMessageDispatcher: TROMessageDispatcher; aId: Integer; - aData: TDynamicByteArray); -begin - inherited Create; - fOwner := aOwner; - fTarget := aTarget; - fHeaders := TIPHttpRequestHeaders.Create; - fHeaders.Headers.Assign(aHeaders.Headers); - fHeaders.Method := aHeaders.Method; - fHeaders.Version := aHeaders.Version; - fHeaders.Path := aHeaders.Path; - - fMessageDispatcher := aMessageDispatcher; - fId := aId; - fData := aData; -end; - -destructor TQueueItem.Destroy; -begin - fHeaders.Free; - inherited Destroy; -end; - -function TQueueItem.GetClientAddress: String; -begin - result := ''; -end; - -function TQueueItem.GetContentType: String; -begin - result := fHeaders.ContentType; -end; - -function TQueueItem.GetHeaders(const aName: String): String; -begin - result := fHeaders.Headers.Values[aName]; -end; - -function TQueueItem.GetLocation: String; -begin - result := ''; -end; - -function TQueueItem.GetPathInfo: String; -begin - result := fHeaders.Path; -end; - -function TQueueItem.GetQueryString: String; -begin - result := fHeaders.Path; - if pos('?', Result) <> 0 then - result := copy(Result, pos('?', Result) + 1 ,MaxInt) - else - result := ''; -end; - -function TQueueItem.GetTargetURL: String; -begin - result := ''; -end; - -function TQueueItem.GetTransportObject: TObject; -begin - result := fOwner; -end; - -function TQueueItem.GetUserAgent: String; -begin - result := fHeaders.Headers.Values['User-Agent']; -end; - -procedure TQueueItem.SetContentType(const aValue: String); -begin -end; - -procedure TQueueItem.SetHeaders(const aName, aValue: String); -begin - fHeaders.Headers.Values[aName] := aValue; -end; - -procedure TQueueItem.SetPathInfo(const aValue: String); -begin -end; - -procedure TQueueItem.SetTargetURL(const aValue: String); -begin -end; - -procedure TQueueItem.SetUserAgent(const aValue: String); -begin -end; - -{ TByteArrayStream } - -constructor TByteArrayStream.Create(aData: TDynamicByteArray); -begin - inherited Create; - fData := aData; - fPos := 0; -end; - -{$IFDEF DELPHI7UP} -function TByteArrayStream.GetSize: Int64; -begin - result := Length(fData); -end; -{$ENDIF} - -function TByteArrayStream.Read(var Buffer; Count: Integer): Integer; -begin - if fPos + Count >= Length(fData) then Count := Length(fData) - fPos; - Move(fData[fPos], Buffer, Count); - fPos := fPos + Count; - result := Count; -end; - -function TByteArrayStream.Seek(Offset: Integer; Origin: Word): Integer; -begin - case Origin of - soFromBeginning: fPos := Offset; - soFromCurrent: fPos := fPos + Offset; - soFromEnd: fPos := Length(fData) + Offset; - end; - if fPos < 0 then fPos := 0; - if fPos >= Length(fData) then fPos := Length(fData) -1; - Result := fPos; -end; - -function TByteArrayStream.Write(const Buffer; Count: Integer): Integer; -begin - raise Exception.Create('Readonly stream cannot be written to'); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinMessage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinMessage.pas deleted file mode 100644 index 43b578e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinMessage.pas +++ /dev/null @@ -1,625 +0,0 @@ -unit uROBinMessage; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - Classes, SysUtils, TypInfo, - uROSerializer, uROClient, uROClientIntf; - -type - TBinMessageSignature = array[0..4] of char; - -const - BinSignature: TBinMessageSignature = 'RO107'; - EncryptedBinSignature: TBinMessageSignature = 'roroc'; - - BIN_HEADER_SIZE = $1c; - - { Misc } - { - // Header BINARY LAYOUT: $1C bytes - // - // Keep in sync with - // - Delphi - uROBINMessage.pas - // - C# - BinMessage.cs - // - // 52 4f 31 30 = "RO10" basic RO signature for RO 1.0 - // XX YY ZZ -- = XX: subversion (currenly "7") - // YY: option flags: 01 = compressed - // ZZ: message type as defined in uROClientIntf - // --: reserved for future use - // -- -- UU UU = UU: user data (word) - // CC CC CC CC $10 bytes ClientID (guid) - // CC CC CC CC - // CC CC CC CC - // CC CC CC CC - } - -type - TBinHeaderArray = array[0..BIN_HEADER_SIZE - 1] of byte; - TBinMessageType = Byte; - -type - TBinHeader = class - private - fHeader: TBinHeaderArray; - function GetCompressed: boolean; - procedure SetCompressed(const Value: boolean); - function GetSignatureValid: boolean; - function GetSignatureIsEncrypted: boolean; - function GetMessageType: TBinMessageType; - procedure SetMessageType(const Value: TBinMessageType); - function GetUserData: Word; - procedure SetUserData(const Value: Word); - function GetClientID: TGUID; - procedure SetClientID(const Value: TGUID); - - public - constructor CreateFromStream(iStream: TStream); - constructor Create; - procedure WriteToStream(iStream: TStream); - - {$IFNDEF DELPHI10UP}property Header: TBinHeaderArray read fHeader;{$ENDIF} - property Compressed: boolean read GetCompressed write SetCompressed; - property SignatureValid: boolean read GetSignatureValid; - property SignatureIsEncrypted: boolean read GetSignatureIsEncrypted; - property MessageType: TBinMessageType read GetMessageType write SetMessageType; - property UserData: Word read GetUserData write SetUserData; - property ClientID: TGUID read GetClientID write SetClientID; - end; - - TROCompressionEvent = procedure(OriginalSize, CompressedSize, CompressionTime: integer) of object; - - { TROBinMessage } - - IROBinMessage = interface(IROMessage) - ['{255E6B2C-66BC-4BE3-9C29-459D00221F7E}'] - function GetCompressionBufferSize: integer; - function GetUseCompression: boolean; - function GetMinSizeForCompression: integer; - procedure SetMinSizeForCompression(const Value: integer); - procedure SetCompressionBufferSize(const Value: integer); - procedure SetUseCompression(const Value: boolean); - function GetWasCompressed : boolean; - - function GetStream: TStream; - - property UseCompression: boolean read GetUseCompression write SetUseCompression; - property MinSizeForCompression: integer read GetMinSizeForCompression write SetMinSizeForCompression; - property CompressionBufferSize: integer read GetCompressionBufferSize write SetCompressionBufferSize; - property Stream: TStream read GetStream; - property WasCompressed : boolean read GetWasCompressed; - end; - - TROBinMessage = class(TROMessage, IROBinMessage, IROStreamAccess) - private - fStream: TStream; - fUseCompression: boolean; - fDestroyStream: boolean; - fWasCompressed: boolean; - fOnCompress: TROCompressionEvent; - fOnDecompress: TROCompressionEvent; - fCompressionBufferSize: integer; - fType: TMessageType; - fMinSizeForCompression: integer; - function GetMinSizeForCompression: integer; - procedure SetMinSizeForCompression(const Value: integer); - - procedure WriteStream(aMessageType: TBinMessageType; Source, Destination: TStream); - - function GetCompressionBufferSize: integer; - function GetUseCompression: boolean; - procedure SetCompressionBufferSize(const Value: integer); - procedure SetUseCompression(const Value: boolean); - function GetWasCompressed : boolean; - - protected - { Internals } - function ReadException: Exception; override; - procedure WriteException(aStream: TStream; anException: Exception); override; - - function CreateSerializer: TROSerializer; override; - - { IROMessage } - procedure Initialize(const aTransport: IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); override; - - - procedure WriteToStream(aStream: TStream); override; - procedure IntReadFromStream(aStream: TStream; CopyStream: Boolean); - - procedure ReadFromStream(aStream: TStream); overload; override; - procedure ReadFromStream(aStream: TStream; var aFreeStream: Boolean); overload; override; - - function GetStream: TStream; - procedure FreeStream; override; - procedure InitializeExceptionMessage(const aTransport: IROTransport; - const aLibraryName: String; const anInterfaceName: String; - const aMessageName: String); override; - public - procedure InitObject; override; - destructor Destroy; override; - - procedure Assign(iSource: TPersistent); override; - - property Stream: TStream read FStream; - function IsValidMessage(aData: PChar; aLength: Integer): boolean; override; - published - property UseCompression: boolean read GetUseCompression write SetUseCompression default true; - property MinSizeForCompression: integer read GetMinSizeForCompression write SetMinSizeForCompression default 4096; - property CompressionBufferSize: integer read GetCompressionBufferSize write SetCompressionBufferSize default 256 * 1024; - property OnCompress: TROCompressionEvent read fOnCompress write fOnCompress; - property OnDecompress: TROCompressionEvent read fOnDecompress write fOnDecompress; - end; - -implementation - -uses - {$IFDEF MSWINDOWS}Windows, {$ENDIF MSWINDOWS} - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE}eDebugServer, {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - uROStreamSerializer, - uRORes, uROCompression, uROHTTPTools, uROClasses, - uROTypes, uROBinaryHelpers, uROZLib; - -{ TROBinMessage } - -destructor TROBinMessage.Destroy; -begin - if fDestroyStream then FreeAndNIL(fStream); - inherited; -end; - -function TROBinMessage.CreateSerializer: TROSerializer; -begin - result := TROStreamSerializer.Create(nil); -end; - -procedure TROBinMessage.Initialize(const aTransport: IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); -begin - inherited; - - SetHTTPInfo(aTransport, DataFormatBinary); - - if fDestroyStream then FreeAndNIL(fStream); - fStream := TMemoryStream.Create; - fDestroyStream := TRUE; - - (Serializer as TROStreamSerializer).SetStorageRef(fStream); // Very important! - - MessageName := aMessageName; - InterfaceName := anInterfaceName; - fType := aType; - - Stream_WriteStringWithLength(fStream, InterfaceName); - Stream_WriteStringWithLength(fStream, MessageName); -end; - -procedure TROBinMessage.IntReadFromStream(aStream: TStream; CopyStream: Boolean); -var //sze : integer; - //s : string; - lHeader: TBinHeader; - lPos: Int64; - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - start: Integer; - PerformanceFrequency, - PerformanceCounter: Int64; - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} -begin - inherited; - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - DebugServer.EnterMethod('TROBinMessage.ReadFromStream(stream=%x; position:$%x)', [integer(pointer(aStream)), aStream.Position]); - try - DebugServer.WriteHexDump('Incoming BIN, start of ReadFromStream: ', aStream); - //aStream.Seek(0,soBeginning); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - - if fDestroyStream then FreeAndNIL(fStream); - - lHeader := TBinHeader.CreateFromStream(aStream); - try - fWasCompressed := lHeader.Compressed; - SetClientID(lHeader.ClientID); - - if lHeader.Compressed then begin - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - if not QueryPerformanceFrequency(PerformanceFrequency) then RaiseLastOSError; - if not QueryPerformanceCounter(PerformanceCounter) then RaiseLastOSError; - start := GetTickCount(); - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} - - fDestroyStream := TRUE; - fStream := TMemoryStream.Create; - - ZDecompressStream(aStream, fStream); - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - DebugServer.WriteHexDump('Decompressed BIN message (sans Header): ', fStream); - //aStream.Seek(0,soBeginning); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - if not QueryPerformanceCounter(PerformanceCounter) then RaiseLastOSError; - if Assigned(OnDeCompress) then OnDecompress(fStream.Size, aStream.Size, GetTickCount - start); - {$ELSE} - if Assigned(OnDeCompress) then OnDecompress(fStream.Size, aStream.Size, 0); - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} - - fStream.Position := 0; - // TROTransportChannel.Dispatch always destroys stream if error. - if (lHeader.MessageType<>MESSAGE_TYPE_EXCEPTION) then - if not CopyStream then aStream.Free; - end - else begin - if CopyStream then begin - fStream := TMemoryStream.Create; - lPos := aStream.Position; - aStream.position := 0; - fStream.CopyFrom(aStream, aStream.Size); - fStream.Position := lPos; - end - else - fStream := aStream; - fDestroyStream := true; - end; - - (Serializer as TROStreamSerializer).SetStorageRef(fStream); // Very important! - - case lHeader.MessageType of - MESSAGE_TYPE_EVENT, - MESSAGE_TYPE_MESSAGE: begin - InterfaceName := Stream_ReadStringWithLength(fStream, MAX_ITEM_NAME); - MessageName := Stream_ReadStringWithLength(fStream, MAX_ITEM_NAME); - end; - MESSAGE_TYPE_EXCEPTION: begin - ProcessException; - end; - else // Do what? - end; - - finally - FreeAndNil(lHeader); - end; - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - finally - DebugServer.ExitMethod('TROBinMessage.ReadFromStream(stream=%x; position:$%x)', [integer(pointer(fStream)), fStream.Position]); - end; - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - -end; - -procedure TROBinMessage.WriteToStream(aStream: TStream); -begin - if fType = mtEvent then - WriteStream(MESSAGE_TYPE_EVENT, fStream, aStream) - else - WriteStream(MESSAGE_TYPE_MESSAGE, fStream, aStream); - - inherited; -end; - -function TROBinMessage.ReadException: Exception; -var - lExceptionName, lMessage: string; -begin - // At this point the stream is already at position 1 - lExceptionName := Stream_ReadStringWithLength(fStream, MAX_ITEM_NAME); - lMessage := Stream_ReadStringWithLength(fStream, MAX_EXCEPTION_TEXT); - - result := CreateException(lExceptionName, lMessage); - - // Reads the other fields which have been properly serialized - if result.InheritsFrom(EROException) then - Serializer.Read(name_Exception, result.ClassType.ClassInfo, result); - - fDestroyStream:=False; // we destroy stream in TROTransportChannel.Dispatch -end; - -procedure TROBinMessage.WriteException(aStream: TStream; anException: Exception); -var typinfo : PTypeInfo; -begin - if fDestroyStream then FreeAndNIL(fStream); - fStream := TMemoryStream.Create; - fDestroyStream := TRUE; - - Stream_WriteStringWithLength(fStream, anException.ClassName); - Stream_WriteStringWithLength(fStream, anException.Message); - - if (anException is EROException) then begin - with TROStreamSerializer.Create(fStream) do try - typinfo := anException.ClassInfo; - Write(name_Exception, typinfo, anException); - finally - Free; - end; - end; - - WriteStream(MESSAGE_TYPE_EXCEPTION, fStream, aStream); - inherited; -end; - -procedure TROBinMessage.WriteStream(aMessageType: TBinMessageType; Source, Destination: TStream); -var - lHeader: TBinHeader; - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - start: Integer; - PerformanceFrequency, - PerformanceCounter: Int64; - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} -begin - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - DebugServer.EnterMethod('TROBinMessage.WriteStream()'); - try - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - - // Writes the header - lHeader := TBinHeader.Create(); - try - lHeader.Compressed := UseCompression and (Source.Size >= MinSizeForCompression); - lHeader.MessageType := aMessageType; - lHeader.ClientID := GetClientID; - lHeader.WriteToStream(Destination); - finally - FreeAndNil(lHeader); - end; - - // Writes the data - Source.Position := 0; - if UseCompression and (Source.Size >= MinSizeForCompression) then begin - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - DebugServer.WriteHexDump('Uncompressed BIN: ', Source); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - if not QueryPerformanceFrequency(PerformanceFrequency) then - RaiseLastOSError; - if not QueryPerformanceCounter(PerformanceCounter) then - RaiseLastOSError; - start := GetTickCount { + Frac(PerformanceCounter / PerformanceFrequency * MSecsPerSec)}; - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} - - ZCompressStream(Source, Destination); - - {$IFDEF REMOBJECTS_PERFORMANCE_MEASUREMENT} - if not QueryPerformanceCounter(PerformanceCounter) then RaiseLastOSError; - if Assigned(OnCompress) then OnCompress(Source.Size, Destination.Size, GetTickCount - start); - {$ELSE } - if Assigned(OnCompress) then OnCompress(Source.Size, Destination.Size, 0); - {$ENDIF REMOBJECTS_PERFORMANCE_MEASUREMENT} - end - else begin - TMemoryStream(Source).SaveToStream(Destination); - {ToDo -cOptimization/RO4: The infrastructure could re rearranged so that the message - could be written to the final stream right away. This would require significant - changes to proxy and invoker code, among others, so we'll defer to RO4. mh. } - end; - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE} - DebugServer.WriteHexDump('Outgoing BIN: ', Destination); - finally - DebugServer.ExitMethod('TROBinMessage.WriteStream()'); - end; - //Destination.Seek(0,soBeginning); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE} - -end; - -procedure TROBinMessage.InitObject; -begin - inherited; - fUseCompression := true; - fCompressionBufferSize := 256 * 1024; - fMinSizeForCompression := 4096; -end; - -procedure TROBinMessage.Assign(iSource: TPersistent); -var - lSource: TROBinMessage; -begin - inherited; - if Assigned(iSource) then begin - if not (iSource is TROBinMessage) then RaiseError('Cannot Assign a %s t a %s', [ClassName, iSource.ClassName]); - lSource := TROBinMessage(iSource); - self.UseCompression := lSource.UseCompression; - self.MinSizeForCompression := lSource.MinSizeForCompression; - self.CompressionBufferSize := lSource.CompressionBufferSize; - self.OnCompress := lSource.OnCompress; - self.OnDecompress := lSource.OnDecompress; - //ToDO -c2.0 -omh: clone the stream to, if one is assigned; - end; -end; - -function TROBinMessage.GetCompressionBufferSize: integer; -begin - result := fCompressionBufferSize; -end; - -function TROBinMessage.GetMinSizeForCompression: integer; -begin - result := fMinSizeForCompression; -end; - -function TROBinMessage.GetUseCompression: boolean; -begin - result := fUseCompression; -end; - -procedure TROBinMessage.SetCompressionBufferSize(const Value: integer); -begin - fCompressionBufferSize := Value; -end; - -procedure TROBinMessage.SetMinSizeForCompression(const Value: integer); -begin - fMinSizeForCompression := Value; -end; - -procedure TROBinMessage.SetUseCompression(const Value: boolean); -begin - fUseCompression := Value; -end; - -function TROBinMessage.GetStream: TStream; -begin - result := fStream; -end; - -function TROBinMessage.GetWasCompressed: boolean; -begin - result := fWasCompressed; -end; - -procedure TROBinMessage.ReadFromStream(aStream: TStream); -begin - inherited; - IntReadFromStream(aStream, true); -end; - -procedure TROBinMessage.ReadFromStream(aStream: TStream; - var aFreeStream: Boolean); -begin - inherited ReadFromStream(aStream); - aFreeStream := False; // set to false BEFORE the call; as the following might raise exceptions - IntReadFromStream(aStream, false); -end; - -procedure TROBinMessage.FreeStream; -begin - inherited; - if fDestroyStream then FreeAndNil(FStream); -end; - -procedure TROBinMessage.InitializeExceptionMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: String); -begin - inherited; - SetHTTPInfo(aTransport, DataFormatBinary); -end; - -function TROBinMessage.IsValidMessage(aData: PChar; aLength: Integer): boolean; -begin - Result := (aLength >= Sizeof(TBinMessageSignature)) and - ((StrLComp(aData, Pchar(@BinSignature),SizeOf(TBinMessageSignature))=0) or - (StrLComp(aData, Pchar(@EncryptedBinSignature),SizeOf(TBinMessageSignature))=0)); -end; - -{ TBinHeader } - -const - OFFSET_MESSAGE_FLAGS = $05; { offset of Flags field in header } - OFFSET_MESSAGE_TYPE = $06; { offset of Type field in header } - OFFSET_USER_DATA = $0a; { offset of UserData field in header } - OFFSET_CLIENTID = $0c; { offset of ClientID GUID } - - BINMESSAGE_FLAG_COMPRESSED = $01; - -constructor TBinHeader.Create; -begin - inherited Create(); - - fHeader[0] := Ord(BINSignature[0]); - fHeader[1] := Ord(BINSignature[1]); - fHeader[2] := Ord(BINSignature[2]); - fHeader[3] := Ord(BINSignature[3]); - fHeader[4] := Ord(BINSignature[4]); -end; - -constructor TBinHeader.CreateFromStream(iStream: TStream); -begin - inherited Create(); - iStream.ReadBuffer(fHeader, SizeOf(fHeader)); - if not SignatureValid then begin - if SignatureIsEncrypted then - RaiseInvalidStreamError(err_InvalidHeaderEncrypted, [], iStream); - RaiseInvalidStreamError(err_InvalidHeader, [], iStream); - end; -end; - -function TBinHeader.GetMessageType: TBinMessageType; -begin - result := TBinMessageType(fHeader[OFFSET_MESSAGE_TYPE]); -end; - -procedure TBinHeader.SetMessageType(const Value: TBinMessageType); -begin - fHeader[OFFSET_MESSAGE_TYPE] := byte(Value); -end; - -function TBinHeader.GetSignatureIsEncrypted: boolean; -begin - result := (fHeader[0] = ord(EncryptedBinSignature[0])) and - (fHeader[1] = ord(EncryptedBinSignature[1])) and - (fHeader[2] = ord(EncryptedBinSignature[2])) and - (fHeader[3] = ord(EncryptedBinSignature[3])) and - (fHeader[4] = ord(EncryptedBinSignature[4])); -end; - -function TBinHeader.GetSignatureValid: boolean; -begin - result := (fHeader[0] = ord(BINSignature[0])) and - (fHeader[1] = ord(BINSignature[1])) and - (fHeader[2] = ord(BINSignature[2])) and - (fHeader[3] = ord(BINSignature[3])) and - (fHeader[4] = ord(BINSignature[4])); -end; - -function TBinHeader.GetCompressed: boolean; -begin - result := fHeader[OFFSET_MESSAGE_FLAGS] and BINMESSAGE_FLAG_COMPRESSED = BINMESSAGE_FLAG_COMPRESSED; -end; - -procedure TBinHeader.SetCompressed(const Value: boolean); -begin - if Value then - fHeader[OFFSET_MESSAGE_FLAGS] := fHeader[OFFSET_MESSAGE_FLAGS] or BINMESSAGE_FLAG_COMPRESSED - else - fHeader[OFFSET_MESSAGE_FLAGS] := fHeader[OFFSET_MESSAGE_FLAGS] and not BINMESSAGE_FLAG_COMPRESSED; -end; - -procedure TBinHeader.WriteToStream(iStream: TStream); -begin - iStream.Write(fHeader, SizeOf(fHeader)); -end; - -function TBinHeader.GetUserData: Word; -begin - result := Word((@fHeader[OFFSET_USER_DATA])^); -end; - -procedure TBinHeader.SetUserData(const Value: Word); -begin - Word((@fHeader[OFFSET_USER_DATA])^) := Value; -end; - -function TBinHeader.GetClientID: TGUID; -begin - Move(fHeader[OFFSET_CLIENTID], result, SizeOf(TGUID)); -end; - -procedure TBinHeader.SetClientID(const Value: TGUID); -begin - Move(Value, fHeader[OFFSET_CLIENTID], SizeOf(TGUID)); -end; - -initialization - RegisterMessageClass(TROBinMessage); - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinaryHelpers.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinaryHelpers.pas deleted file mode 100644 index 3bfa742..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBinaryHelpers.pas +++ /dev/null @@ -1,710 +0,0 @@ -unit uROBinaryHelpers; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -{ToDo: -cRO3 clean up this mess, rename the methods appropriately and group - them depending on what they do (ie handle complex variants; do - conversions of *plain* binaries, etc. } - -uses - Classes, {$IFDEF FPC}Variants, {$ELSE}{$IFDEF VER140UP}Variants,{$ENDIF}{$ENDIF} - uROTypes, uROClasses, FMTBcd; - -type - EROBinaryConversionException = class(EROException); -{$IFDEF FPC}OleVariant = Variant; {$ENDIF} - -function BinaryFromVariant(const iVariant:OleVariant):Binary; -function VariantFromBinary(const iBinary:TStream):OleVariant; - -procedure WriteVariantBinaryToBinary(const iVariant:OleVariant; ioBinary:TStream); -procedure WriteVariantArrayToBinary(const iVariant:OleVariant; ioBinary:TStream); - -function VariantArrayFromBinary(const iBinary:TStream; iType:word):OleVariant; -function VariantBinaryFromBinary(const iBinary:TStream):OleVariant; - -procedure WriteVariantToBinary(const iVariant:OleVariant; ioBinary:TStream); -function ReadVariantFromBinary(const iBinary:TStream):OleVariant; - -function VariantBinaryFromRawBinary(const iBinary:TStream):OleVariant; -procedure VariantBinaryToRawBinary(const iVariant:OleVariant; ioBinary:TStream); -function VariantBinaryToString(const iVariant:OleVariant):string; - -function Stream_ReadStringWithLength(iStream:TStream; iMaxLength:integer=-1): string; -procedure Stream_WriteStringWithLength(iStream:TStream; const iString: string); - -{$IFDEF DEBUG_REMOBJECTS_VARIANTS} -function TestVariant(iVariant:OleVariant):OleVariant; -{$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - -type - PDecimal = ^TDecimal; - TDecimal = array[0..3] of Cardinal; - -function BCDToDecimal(const aBcd: TBcd): TDecimal; -function DecimalToBCD(const aDecimal: TDecimal): TBcd; -function DecimalToString(const aDecimal: TDecimal; aDot: Char): string; -function StringToDecimal(const aString: string; aDot: Char): TDecimal; -function DecimalToVariant(const aDecimal: TDecimal): Variant; -function VariantToDecimal(const aVariant: Variant): TDecimal; -function VariantToBCD(const aVariant: Variant): TBCD; -function BCDToVariant(const aBCD: TBCD; const StoreAsDecimal: Boolean = False): Variant; -{ ToDo: extend this to handle all common Variant types, and use it for - marshaling OwnerData, instead of string. } - -function VarByteArrayToDecimal(const aVariant: Variant; var aDecimal: TDecimal): Boolean; - -implementation - -uses {$IFDEF DEBUG_REMOBJECTS_VARIANTS}eDebugServer,{$ENDIF} - SysUtils, uRORes; - -procedure WriteVariantToBinary(const iVariant:OleVariant; ioBinary:TStream); -var lType:integer; - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortIntValue:shortint; - lSmallIntValue: smallint; - lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lDoubleValue:double; - lSingleValue:single; - lCurrencyValue:currency; - lStringValue:string; -begin - lType := VarType(iVariant); - - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.Write('BinaryFromVariant type=%d',[lType]); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - { Array types } - if (lType and $2000) = $2000 then begin - - case lType of - $2011:WriteVariantBinaryToBinary(iVariant,ioBinary); {8209; handle Array of Byte special. for now. } - else WriteVariantArrayToBinary(iVariant,ioBinary); - end; - - end - { Plain Types } - else begin - - case lType of - varEmpty,varNull,varError:begin { 0, 1, A } - ioBinary.Write(lType,sizeof(integer)); - end; - {$IFNDEF DELPHI5} - varShortInt:begin { 2, 10, 12 } - lShortIntValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lShortIntValue,sizeof(shortint)); - end; - varSmallInt,varWord : begin - lSmallIntValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lSmallIntValue,sizeof(lSmallIntValue)); - end; - {$ENDIF DELPHI5} - {$IFNDEF DELPHI5}varLongWord,{$ENDIF DELPHI5} - varInteger:begin { 3, 13 } - lIntegerValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lIntegerValue,sizeof(integer)); - end; - varSingle:begin { 4 } - lSingleValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lSingleValue,sizeof(single)); - end; - varDouble, varDate:begin { 5, 7 } - lDoubleValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lDoubleValue,sizeof(double)); - end; - varCurrency:begin { 6 } - lCurrencyValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lCurrencyValue,sizeof(currency)); - end; - varDispatch:begin { 9 } - raise EROBinaryConversionException.CreateFmt(err_IDispatchMarshalingNotSupported,[VarType(iVariant)]); - end; - varBoolean:begin { B } - if iVariant then lByteValue := 1 else lByteValue := 0; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lByteValue,sizeof(byte)); - end; - varByte:begin { 11 } - lByteValue := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lByteValue,sizeof(byte)); - end; - {$IFNDEF DELPHI5} - varInt64:begin { 14 } - lInt64Value := iVariant; - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lInt64Value,sizeof(Int64)); - end; - {$ENDIF DELPHI5} - varOleStr: - begin - lStringValue := UTF8Encode(iVariant); - lIntegerValue := Length(lStringValue); - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lIntegerValue,sizeof(integer)); - ioBinary.Write(lStringValue[1],lIntegerValue); - end; - varString:begin { 8, 100 } - lStringValue := iVariant; - lIntegerValue := Length(lStringValue); - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lIntegerValue,sizeof(integer)); - ioBinary.Write(lStringValue[1],lIntegerValue); - end; - else raise EROBinaryConversionException.CreateFmt(err_UnsupportedVariantType, [VarType(iVariant)]); - end; { case } - - end; -end; - -function BinaryFromVariant(const iVariant:OleVariant):Binary; -begin - result := Binary.Create(); - WriteVariantToBinary(iVariant,result); - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.WriteHexDump('Written Binary',result); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - result.Seek(0,soFromBeginning) -end; - -function StringFromBinary(const iBinary:TStream):string; -var lSize:integer; -begin - iBinary.Read(lSize,sizeof(integer)); - SetLength(Result,lSize); - iBinary.read(Result[1],lSize); -end; - -function ReadVariantFromBinary(const iBinary:TStream):OleVariant; -var lType:integer; - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortInt:shortint; - lSmallIntValue: smallint; - lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lDoubleValue:double; - lSingleValue:single; - lCurrencyValue:currency; - lString: string; -begin - iBinary.Read(lType,sizeof(integer)); - - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.Write('VariantFromBinary type=%d',[lType]); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - { Array types } - if (lType and $2000) = $2000 then begin - - case lType of - $2011:result := VariantBinaryFromBinary(iBinary); - else result := VariantArrayFromBinary(iBinary,(lType and $fff)); - end; - - end - { Plain Types } - else begin - - case lType of - varEmpty:result := Unassigned; - varNull:result := Null; - varError:result := EmptyParam; - {$IFNDEF DELPHI5} - varShortInt:begin - iBinary.Read(lShortInt,sizeof(shortint)); - result := lShortInt; - end; - varSmallInt,varWord : begin - iBinary.Read(lSmallIntValue,sizeof(lSmallIntValue)); - result := lSmallIntValue; - end; - {$ENDIF DELPHI5} - {$IFNDEF DELPHI5} - varLongWord, - {$ENDIF DELPHI5} - varInteger:begin - iBinary.Read(lIntegerValue,sizeof(integer)); - result := lIntegerValue; - end; - varSingle:begin - iBinary.Read(lSingleValue,sizeof(single)); - result := lSingleValue; - end; - varDouble:begin - iBinary.Read(lDoubleValue,sizeof(double)); - result := lDoubleValue; - end; - varCurrency:begin - iBinary.Read(lCurrencyValue,sizeof(currency)); - result := lcurrencyValue; - end; - varDate:begin - iBinary.Read(lDoubleValue,sizeof(double)); - result := TDateTime(lDoubleValue); - end; - varBoolean:begin - iBinary.Read(lByteValue,sizeof(byte)); - result := (lByteValue <> 0); - end; - varByte:begin - iBinary.Read(lByteValue,sizeof(byte)); - result := lByteValue; - end; - {$IFNDEF DELPHI5} - varInt64:begin - iBinary.Read(lInt64Value,sizeof(Int64)); - result := lInt64Value; - end; - {$ENDIF DELPHI5} - varOleStr: - begin - iBinary.Read(lIntegerValue,sizeof(integer)); - SetLength(lString, lIntegerValue); - iBinary.Read(lString[1], lIntegerValue); - Result := UTF8Decode(lString); - end; - varString:Result := StringFromBinary(iBinary); - else raise EROBinaryConversionException.CreateFmt(err_UnsupportedVariantType, [lType]); - end; { case } - end; -end; - -function VariantFromBinary(const iBinary:TStream):OleVariant; -begin - if iBinary.Size < 4 then raise EROBinaryConversionException.Create(err_InvalidBinaryFormat); - - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.WriteHexDump('Read Binary',iBInary); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - iBinary.Seek(0,soFromBeginning); - result := ReadVariantFromBinary(iBinary); -end; - -procedure CheckVariant(const iVariant:OleVariant); -begin - // Introduced by AleF to address part of this check mess - if not VarIsArray(iVariant) - then raise EROBinaryConversionException.CreateFmt(err_VariantIsNotArray,[VarType(iVariant)]); - - if VarArrayDimCount(iVariant) <> 1 - then raise EROBinaryConversionException.CreateFmt(err_InvalidVarArrayDimCount, [VarArrayDimCount(iVariant)]); -end; - -procedure WriteVariantBinaryToBinary(const iVariant:OleVariant; ioBinary:TStream); -var //l:longword; - lType,lSize:integer; - p:pointer; -begin - CheckVariant(iVariant); - - lSize := VarArrayHighBound(iVariant,1)-VarArrayLowBound(iVariant,1)+1; - - p := VarArrayLock(iVariant); - try - lType := VarType(iVariant); - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.Write('BinaryFromVariantBinary type=%d',[lType]); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lSize,sizeof(integer)); - ioBinary.Write(p^,lSize); - finally - VarArrayUnlock(iVariant); - end; - -end; - -procedure WriteVariantArrayToBinary(const iVariant:OleVariant; ioBinary:TStream); -var lLowBound,lHighBound:integer; - i:Integer; - lType:integer; -begin - CheckVariant(iVariant); - - lType := VarType(iVariant); - lLowBound := VarArrayLowBound(iVariant,1); - lHighBound := VarArrayHighBound(iVariant,1); - //l := VarArrayHighBound(iVariant,1)-VarArrayLowBound(iVariant,1)+1; - - {$IFDEF DEBUG_REMOBJECTS_VARIANTS} - DebugServer.Write('WriteVariantArrayToBinary type=%d, bounds=%d..%d',[lType,lLowBound,lHighBound]); - {$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - ioBinary.Write(lType,sizeof(integer)); - ioBinary.Write(lLowBound,sizeof(integer)); - ioBinary.Write(lHighBound,sizeof(integer)); - - for i := lLowBound to lHighBound do begin - WriteVariantToBinary(iVariant[i],ioBinary); - end; - -end; - -function VariantBinaryFromBinary(const iBinary:TStream):OleVariant; -var p:pointer; - lSize:integer; -begin - iBinary.Read(lSize,sizeof(integer)); - result := VarArrayCreate([0,lSize-1],varByte); - p := VarArrayLock(result); - try - iBinary.Read(p^,lSize); - finally - VarArrayUnlock(result); - end; -end; - - - -function VariantArrayFromBinary(const iBinary:TStream; iType:word):OleVariant; -var lLowBound,lHighBound:integer; - i:Integer; -begin - iType := (iType and $fff); - - iBinary.Read(lLowBound,sizeof(integer)); - iBinary.Read(lHighBound,sizeof(integer)); - - result := VarArrayCreate([lLowBound,lHighBound],iType); - - for i := lLowBound to lHighBound do begin - result[i] := ReadVariantFromBinary(iBinary); - end; - -end; - -{$IFDEF DEBUG_REMOBJECTS_VARIANTS} -function TestVariant(iVariant:OleVariant):OleVariant; -var - lBinary:Binary; -begin - DebugServer.EnterMethod('Original varType '+IntToStr(VarType(iVariant))); - lBinary := BinaryFromVariant(iVariant); - try - result := VariantFromBinary(lBinary); - DebugServer.ExitMethod('Result varType '+IntToStr(VarType(result))); - finally - FreeAndNil(lBinary); - end; -end; -{$ENDIF DEBUG_REMOBJECTS_VARIANTS} - - -{-----------------------------------------------------------------------------} -{ Conversion fromto Binary "Array of Bytes" Variants to other data types -{ containing *just* the binary data, no additional type info. -{-----------------------------------------------------------------------------} - -{ Description: - Will read the *remainder* of the iBinary stream into a new - binary variant (aka array of bytes). } - -function VariantBinaryFromRawBinary(const iBinary:TStream):OleVariant; -var p:pointer; - lSize:integer; -begin - lSize := iBinary.Size-iBinary.Position; - - result := VarArrayCreate([0,lSize-1],varByte); - p := VarArrayLock(result); - try - iBinary.Read(p^,lSize); - finally - VarArrayUnlock(result); - end; -end; - -{ Description: - Will write the data from the binary variant (aka array of bytes) to the - current position of the iBinary stream. } -procedure VariantBinaryToRawBinary(const iVariant:OleVariant; ioBinary:TStream); -var - lSize:integer; - p:pointer; -begin - if (VarType(iVariant)=varEmpty) then Exit; - - CheckVariant(iVariant); - - lSize := VarArrayHighBound(iVariant,1)-VarArrayLowBound(iVariant,1)+1; - - p := VarArrayLock(iVariant); - try - ioBinary.Write(p^,lSize); - finally - VarArrayUnlock(iVariant); - end; - -end; - -{ Description: - Will return the data from the binary variant (aka array of bytes) as a - binary AnsiString } -function VariantBinaryToString(const iVariant:OleVariant):string; -var - lSize:integer; - p:pointer; -begin - if (VarType(iVariant)=varEmpty) then Exit; - if not VarIsArray(iVariant) then begin - Result:= VarToStr(iVariant); - Exit; - end; - - CheckVariant(iVariant); - - lSize := VarArrayHighBound(iVariant,1)-VarArrayLowBound(iVariant,1)+1; - - p := VarArrayLock(iVariant); - try - SetLength(result,lSize); - if lSize > 0 then - Move(p^,result[1],lSize); - finally - VarArrayUnlock(iVariant); - end; - -end; - -function Stream_ReadStringWithLength(iStream:TStream; iMaxLength:integer=-1): string; -var lLength:integer; - lBytesRead:Integer; -begin - lBytesRead := iStream.Read(lLength, sizeof(lLength)); - if lBytesRead <> sizeof(lLength) then RaiseError(err_UnexpectedEndOfStream,[]); - - if (iMaxLength > -1) and (lLength > iMaxLength) then - RaiseError(err_InvalidStringLength,[lLength]); - - SetLength(result, lLength); - if (lLength > 0) then - iStream.Read(result[1], lLength); - //ToDo: find a save and FAST way to do this in .NET -end; - -procedure Stream_WriteStringWithLength(iStream:TStream; const iString: string); -var lLength:integer; -begin - lLength := Length(iString); - iStream.Write(lLength, SizeOf(lLength)); - if (lLength > 0) then - iStream.Write(iString[1], lLength); - //ToDo: find a save and FAST way to do this in .NET -end; - -var - numbers: array[0..9] of char = '0123456789'; - -function DecimalToString(const aDecimal: TDecimal; aDot: Char): string; -var - modres: Integer; - d: Int64; - pos: Integer; - scale: Integer; - sign: Boolean; - aDec: TDecimal; - aResult: array[0..31] of Char; -begin - aDec := aDecimal; - sign := (aDecimal[3] and $80000000) <> 0; - scale := (aDecimal[3] and $FF0000) shr 16; - pos := 31; - while (aDec[0] <> 0) or (aDec[1] <> 0) or (aDec[2] <> 0) or (31 - pos < scale) do begin - modres := 0; - d := Int64(Int64(ModRes) shl 32) or aDec[2]; - ModRes := d mod 10; - aDec[2] := d div 10; - d := Int64(Int64(ModRes) shl 32) or aDec[1]; - ModRes := d mod 10; - aDec[1] := d div 10; - d := Int64(Int64(ModRes) shl 32) or aDec[0]; - ModRes := d mod 10; - aDec[0] := d div 10; - - aResult[pos] := numbers[Modres]; - Dec(pos); - if 31 - pos = scale then begin - aresult[pos] := aDot; - dec(pos); - if (aDec[0] = 0) and (aDec[1] = 0) and (aDec[2] = 0) then begin - aresult[pos] := '0'; - dec(pos); - end; - end; - end; - if pos = 31 then begin result := '0'; exit; end; - if sign then begin - aResult[pos] := '-'; - dec(pos); - end; - SetString(Result, pchar(@aResult[pos+1]), 31-Pos); -end; - -function StringToDecimal(const aString: string; aDot: Char): TDecimal; -var - scalepos, pos, i: Integer; - mulres: Integer; - d: Int64; - aRes: TDecimal; -begin - Fillchar(aRes, sizeof(aRes), 0); - pos := 0; - scalepos := -1; - for i := 0 to Length(aString) do begin - mulres := 0; - case aString[i] of - '0': ; // already set - '1': mulres := 1; - '2': mulres := 2; - '3': mulres := 3; - '4': mulres := 4; - '5': mulres := 5; - '6': mulres := 6; - '7': mulres := 7; - '8': mulres := 8; - '9': mulres := 9; - else begin - if aString[i] = '-' then begin - aRes[3] := aRes[3] or $80000000; - continue; - end else if aString[i] = aDot then begin - if scalepos = -1 then - scalepos := pos; - continue; - end else - continue; // ignore invalid chars for now - end; - end; - d := Int64(aRes[0]) * 10 + mulres; - mulres := d shr 32; - aRes[0] := d; - d := Int64(aRes[1]) * 10 + mulres; - mulres := d shr 32; - aRes[1] := d; - aRes[2] := Int64(aRes[2]) * 10 + mulres; - Inc(pos); - end; - if scalepos <> -1 then begin - pos:= pos - scalepos; - aRes[3] := aRes[3] or Cardinal(Pos shl 16); - end; - Result := aRes; -end; - - -function BCDToDecimal(const aBcd: TBcd): TDecimal; -begin - Result := StringToDecimal(BcdToStr(aBcd), DecimalSeparator); -end; - -function DecimalToBCD(const aDecimal: TDecimal): TBcd; -begin - Result := StrToBcd(DecimalToString(aDecimal, DecimalSeparator)); -end; - -function DecimalToVarByteArray(const aDecimal: TDecimal): Variant; -var - p: Pointer; -begin - Result := VarArrayCreate([0,SizeOf(TDecimal)-1],varByte); - p := VarArrayLock(Result); - try - move(PDecimal(@aDecimal)^, p^ ,SizeOf(TDecimal)); - finally - VarArrayUnlock(Result); - end; -end; - -function VarByteArrayToDecimal(const aVariant: Variant; var aDecimal: TDecimal): Boolean; -var - p: Pointer; -begin - Result:= False; - if (VarType(aVariant) = varByte or varArray) and - (VarArrayDimCount(aVariant) = 1) and - (VarArrayHighBound(aVariant,1)-VarArrayLowBound(aVariant,1)+1 = SizeOf(TDecimal)) then begin - p := VarArrayLock(aVariant); - try - move(p^, PDecimal(@aDecimal)^, SizeOf(TDecimal)); - finally - VarArrayUnlock(aVariant); - end; - Result:=True; - end; -end; - -function DecimalToVariant(const aDecimal: TDecimal): Variant; -begin - Result := DecimalToVarByteArray(aDecimal); -end; - -function VariantToDecimal(const aVariant: Variant): TDecimal; -var - s: string; -begin - if VarIsNull(aVariant) then - FillChar(PDecimal(@result)^,SizeOf(Result),0) - else if not VarByteArrayToDecimal(aVariant,Result) then begin - if VarIsFMTBcd(aVariant) then - s:=BcdToStr(VarToBcd(aVariant)) - else - s:=VarToStr(aVariant); - Result:=StringToDecimal(s, DecimalSeparator); - end; -end; - -function VariantToBCD(const aVariant: Variant): TBCD; -var - aDecimal: TDecimal; -begin - if VarIsNull(aVariant) then - Result := NullBcd - else if VarByteArrayToDecimal(aVariant,aDecimal) then - Result:=DecimalToBCD(aDecimal) - else begin - if VarIsFMTBcd(aVariant) then - Result := VarToBcd(aVariant) - else - Result:= StrToBcd(VarToStr(aVariant)); - end; -end; - -function BCDToVariant(const aBCD: TBCD; const StoreAsDecimal: Boolean): Variant; -begin - if StoreAsDecimal then - Result := DecimalToVarByteArray(BCDToDecimal(aBCD)) - else - Result := VarFMTBcdCreate(aBCD); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastChannel.pas deleted file mode 100644 index 4017a9f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastChannel.pas +++ /dev/null @@ -1,226 +0,0 @@ -unit uROBroadcastChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Nico Schoemaker (nico.schoemaker@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, ContNrs, SysUtils, - uROIndyUDPChannel, uROClasses; - -type - - IROBroadcastNotification = interface - ['{5C18A885-76D2-40D2-9529-CC81B00E7C99}'] - procedure ResponseReceived(ServerIP, ResponseUID: string); - end; - - TROBCResponseThread = class(TROUDPResponseThread) - private - protected - procedure Execute; override; - public - end; - - TROResponseReceivedEvent = procedure(ServerIP, ResponseUID: string) of object; - - TROBroadcastChannel = class(TROIndyUDPChannel) - private - FNotifyList: TROInterfaceRegistry; - FGetServerGUID: string; - FOnBroadcastResponseReceived: TROResponseReceivedEvent; - procedure SetOnBroadcastResponseReceived(const Value: TROResponseReceivedEvent); - - protected - procedure NotifyListners(aServerIP, aResponseUID: string); - procedure Loaded; override; - procedure SendReq(aRequest: TStream; UID: string; AddToStorage: Boolean = true); override; - function GetResponseThreadClass: TROUDPResponseThreadClass; override; - procedure DoEndOfThread(Sender: TROUDPResponseThread); override; - public - procedure RegisterResponseListner(aListner: IROBroadcastNotification); - procedure UnRegisterResponseListner(aListner: IROBroadcastNotification); - function ReceiveResp(aTimeOut: Integer): Boolean; override; - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - published - property OnBroadcastResponseReceived: TROResponseReceivedEvent read FOnBroadcastResponseReceived write SetOnBroadcastResponseReceived; - end; - -implementation - -uses uROClient, uROStreamUtils, uROAsyncResponseStorage, idGlobal; - -constructor TROBroadcastChannel.Create(AOwner: TComponent); -begin - inherited; - FGetServerGUID := ''; - FNotifyList := TROInterfaceRegistry.Create(IROBroadcastNotification); -end; - -destructor TROBroadcastChannel.Destroy; -begin - FNotifyList.Free; - inherited; -end; - -procedure TROBroadcastChannel.SendReq(aRequest: TStream; UID: string; AddToStorage: Boolean = true); -var - lReq: string; -begin - lReq := Strm_StreamToStr(aRequest); - // Sends the Message identifier in front of the actual message - IndyClient.Broadcast(UID + lReq, IndyClient.Port); - if AddToStorage then - AddRequestToStorage(aRequest, UID); -end; - -procedure TROBroadcastChannel.Loaded; -begin - inherited; - Self.IndyClient.BroadcastEnabled := True; -end; - -function TROBroadcastChannel.GetResponseThreadClass: TROUDPResponseThreadClass; -begin - result := TROBCResponseThread; -end; - -procedure TROBroadcastChannel.RegisterResponseListner(aListner: IROBroadcastNotification); -begin - if not (Assigned(aListner)) then - Exit; - FNotifyList.Register(aListner); -end; - -procedure TROBroadcastChannel.UnRegisterResponseListner(aListner: IROBroadcastNotification); -begin - if not (Assigned(aListner)) then - Exit; - FNotifyList.Unregister(aListner); -end; - -procedure TROBroadcastChannel.NotifyListners(aServerIP, aResponseUID: string); -var - i: Integer; -begin - for i := 0 to FNotifyList.Count - 1 do - IROBroadcastNotification(FNotifyList[i]).ResponseReceived(aServerIP, aResponseUID); -end; - -procedure TROBroadcastChannel.DoEndOfThread(Sender: TROUDPResponseThread); -var - lUID: string; - lResItm: TROResponseItem; -begin - try - lUID := Sender.RequestUID; - if (Sender.ReceivedResponse) and - ((Assigned(FOnBroadcastResponseReceived)) or (FNotifyList.Count > 0)) then begin - while CheckStatus(lUID) do begin - // Atention, the event handler is supposed to process the response - // Processing the response will remove the response automaticly - lResItm := ResponseStorage.GetRespByUID(lUID); - if Assigned(lResItm) then {// to be sure} begin - NotifyListners(lResItm.IP, lResItm.UID); - if Assigned(FOnBroadcastResponseReceived) then - FOnBroadcastResponseReceived(lResItm.IP, lResItm.UID); - // Remove the response in case the user didn't process it. - // If it is already gone , no harm is done - ResponseStorage.RemoveResp(lResItm); - end; - end; - end; - - finally - RequestStorage.RemoveRespByUID(lUID); - inherited; - end; -end; - -procedure TROBroadcastChannel.SetOnBroadcastResponseReceived(const Value: TROResponseReceivedEvent); -begin - FOnBroadcastResponseReceived := Value; -end; - -{----------------------------------------------------------------------------- - Procedure: TROBroadcastChannel.ReceiveResp - Author: Nico - Date: 23-apr-2003 - Arguments: aTimeOut: Integer - Result: Boolean - Keeps reading from the socket until a read time out occurs ------------------------------------------------------------------------------} - -function TROBroadcastChannel.ReceiveResp(aTimeOut: Integer): Boolean; -var - lBuf: string; - lID: string; - lResItm: TROResponseItem; - lResp: TStringStream; - lIP: string; -{$IFDEF RemObjects_INDY10} - lPort: TIDPort; -{$ELSE} - lPort: Integer; -{$ENDIF} -begin - FCriticalSection.Enter; - try - result := False; - repeat - lBuf := IndyClient.ReceiveString(lIP, lPort, aTimeOut); - if lBuf <> '' then begin - lID := StripID(lBuf); - lResp := TStringStream.Create(lBuf); - lResItm := TROResponseItem.Create(lResp, lID); - lResItm.IP := lIP; - lResItm.Port := lPort; - ResponseStorage.AddResp(lResItm); - result := True; - end; - until lBuf = ''; - finally - FCriticalSection.Leave; - end; -end; - -//------------------------------------------------------------------------------ - { TROBCResponseThread } -//------------------------------------------------------------------------------ - -procedure TROBCResponseThread.Execute; -begin - {$IFDEF RemObjects_SetThreadName} - SetName(Name); - {$ENDIF} - - Channel.ReceiveResp(Channel.AsyncTimeOut); - FRespReceived := Channel.CheckStatus(RequestUID); - - if not FRespReceived then - Synchronize(DoTimeOut) - else - Synchronize(DoEnd); -end; - -initialization - RegisterTransportChannelClass(TROBroadcastChannel); - -finalization - UnRegisterTransportChannelClass(TROBroadcastChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastServer.pas deleted file mode 100644 index c56902d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROBroadcastServer.pas +++ /dev/null @@ -1,152 +0,0 @@ -unit uROBroadcastServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Nico Schoemaker (nico.schoemaker@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, Sysutils, - IdSocketHandle, IdGlobal, - uROIndyUDPServer; - -type - TROBroadcastTransport = class(TROIndyUDPTransport) - end; - - TROBroadcastServer = class(TROIndyUDPServer) - private - FOnRORequest: TNotifyEvent; - FUIDCnt: Integer; - FLastMessage: string; - - procedure SetOnRORequest(const Value: TNotifyEvent); - - protected - {$IFDEF RemObjects_INDY10} - procedure InternalUDPRead(Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle); override; - {$ELSE} - procedure InternalUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); override; - {$ENDIF} - function GetTransportClass: TROIndyUDPTransportClass; override; - procedure Loaded; override; - - public - constructor Create(AOwner: TComponent); override; - published - property OnRORequest: TNotifyEvent read FOnRORequest write SetOnRORequest; - end; - -implementation - -{ TROBroadcastServer } - -uses - uROServer, uROClasses, uROClientIntf, uROServerIntf; - -constructor TROBroadcastServer.Create(AOwner: TComponent); -begin - inherited; - // In case implementation of NewStrippedGuidAsString changes - FUIDCnt := Length(NewGuidAsString); - FLastMessage := ''; -end; - -{$IFDEF RemObjects_INDY10} -procedure TROBroadcastServer.InternalUDPRead(Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle); -{$ELSE} -procedure TROBroadcastServer.InternalUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); -{$ENDIF} -var - lResp: TStringStream; - lReq: TMemoryStream; - lRespS: String; - lTransport: IROTCPTransport; - lMesgID: String; - lRespOpt: TROResponseOptions; - lStream: TStream; -begin - {$IFDEF RemObjects_INDY10} - lStream := TMemoryStream.Create(); - WriteTIdBytesToStream(lStream, AData); - lStream.Position := 0; - try - {$ELSE} - lStream := AData; - {$ENDIF} - - lMesgID := GetMessageID(lStream); - - if FLastMessage <> lMesgID then - begin - FLastMessage := lMesgID; - if Assigned(FOnRORequest) then - FOnRORequest(Self); - - lResp := TStringStream.Create(''); - lReq := nil; - try - lReq := FormatDispStream(lStream); - if Assigned(lReq) then // lReq becomes nil if not a valid (RO) AData Stream - begin - lTransport := GetTransportClass.Create(Self,ABinding); - DispatchMessage(lTransport, lReq, lResp,lRespOpt); - if not(roNoResponse in lRespOpt) then - begin - lRespS := lMesgID+lResp.DataString; - {$IFDEF RemObjects_INDY10} - ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ToBytes(lRespS)); - {$ELSE} - ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, lRespS[1], Length(lRespS)); - {$ENDIF} - end; - end; - finally - if Assigned(lReq) then - lReq.Free; - lResp.Free; - end; - end; - {$IFDEF RemObjects_INDY10} - finally - FreeAndNil(lStream); - end; - {$ENDIF} -end; - -function TROBroadcastServer.GetTransportClass: TROIndyUDPTransportClass; -begin - result := TROBroadcastTransport -end; - -procedure TROBroadcastServer.SetOnRORequest(const Value: TNotifyEvent); -begin - FOnRORequest := Value; -end; - -procedure TROBroadcastServer.Loaded; -begin - inherited; - IndyUDPServer.BroadcastEnabled := True; -end; - -initialization - RegisterServerClass(TROBroadcastServer); -finalization - UnregisterServerClass(TROBroadcastServer); - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCOMInit.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCOMInit.pas deleted file mode 100644 index 12ac239..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCOMInit.pas +++ /dev/null @@ -1,31 +0,0 @@ -unit uROCOMInit; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -implementation - -{$IFDEF MSWINDOWS} -uses ActiveX; - -initialization - CoInitializeEx(nil,COINIT_MULTITHREADED); - -finalization - CoUninitialize; -{$ENDIF} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClassFactories.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClassFactories.pas deleted file mode 100644 index bb9a8af..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClassFactories.pas +++ /dev/null @@ -1,468 +0,0 @@ -unit uROClassFactories; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - SysUtils, SyncObjs, Contnrs, Classes, - uROServer, uROThread, uROClasses, uROTypes,uROServerIntf; - -type - { TROSingletonClassFactory } - TROSingletonClassFactory = class(TROClassFactory) - private - fInstance : IInterface; - - protected - procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface); override; - procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface); override; - public - end; - - { TROSynchronizedSingletonClassFactory } - TROSynchronizedSingletonClassFactory = class(TROSingletonClassFactory) - private - fCriticalSection:TCriticalSection; - protected - procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface); override; - procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface); override; - public - constructor Create(const anInterfaceName : string; - aCreatorFunc : TRORemotableCreatorFunc; - anInvokerClass : TROInvokerClass); - destructor Destroy; override; - end; - - TROPoolInterfaceEntry = record - fInterface:IInterface; - fInUse:Boolean; - end; - - EROPoolNoFreeObjects = class(EROException); - - TROPoolBehavior = (pbFail, pbWait, pbCreateAdditional); - - { TROPooledClassFactory } - TROPooledClassFactory = class(TROClassFactory,IROPooledClassFactory) - private - fInstances : array of TROPoolInterfaceEntry; - fCriticalSection:TCriticalSection; - fPoolBehavior:TROPoolBehavior; - fPoolSize:Integer; - //,fLastInc : integer; - - protected - procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface); override; - procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface); override; - - public - constructor Create(const anInterfaceName : string; - aCreatorFunc : TRORemotableCreatorFunc; - anInvokerClass : TROInvokerClass; - aPoolSize : Integer; - aPoolBehavior:TROPoolBehavior=pbCreateAdditional; - aPreInitializePool:Boolean=false); - destructor Destroy; override; - procedure ClearPool(); - end; - - { TROPerClientClassFactory } - TClientInstance = class - ServerObject:IInterface; - ClientID:TGUID; - LastAccess:TDateTime; - end; - - TROPerClientClassFactory = class; - - { TROPerClientClassFactory_TimeoutThread } - TROPerClientClassFactory_TimeoutThread = class(TROThread) - private - fOwner:TROPerClientClassFactory; - fTimeoutSeconds:Integer; - fWakeUp:TROEvent; - protected - procedure Execute; override; - public - constructor Create(iOwner:TROPerClientClassFactory; iTimeoutSeconds:integer); - destructor Destroy; override; - end; - - { TROPerClientClassFactory } - TROPerClientClassFactory = class(TROClassFactory) - private - fInstances:TObjectList; - fCriticalSection:TCriticalSection; - fTimeoutThread:TROPerClientClassFactory_TimeoutThread; - fTimeoutSeconds:Integer; - - protected - procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface); override; - procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface); override; - - public - constructor Create(const anInterfaceName : string; - aCreatorFunc : TRORemotableCreatorFunc; - anInvokerClass : TROInvokerClass; - aTimeoutSeconds:cardinal); - destructor Destroy; override; - - procedure TimeoutSessions(); - end; - -implementation - -uses {$IFDEF DELPHI5}ActiveX, Windows, {$ENDIF} // for IsEqualGuid and Sleep - {$IFDEF DEBUG_REMOBJECTS_CLASSFACTORIES}eDebugServer, {$ENDIF} - uROClient, uRORes; - -const POOL_SLEEP_MS_WHILE_WAITING = 500; { sleep 0.5 seconds between trys while waiting for a pooled - instance to become free } - -{ TROSingletonClassFactory } - -procedure TROSingletonClassFactory.CreateInstance(const aClientID: TGUID; out anInstance: IInterface); -begin - if (fInstance=NIL) - then inherited CreateInstance(aClientID, fInstance); - - anInstance := fInstance; -end; - -procedure TROSingletonClassFactory.ReleaseInstance(const aClientID: TGUID; var anInstance: IInterface); -begin - //DeactivateInstance(aClientID,anInstance); - { Do nothing else, since we want to keep instance alive } -end; - -{ TROPooledClassFactory } - -constructor TROPooledClassFactory.Create(const anInterfaceName: string; - aCreatorFunc: TRORemotableCreatorFunc; anInvokerClass: TROInvokerClass; - aPoolSize : Integer; aPoolBehavior:TROPoolBehavior=pbCreateAdditional; aPreInitializePool:Boolean=false); -var i : integer; -begin - inherited Create(anInterfaceName, aCreatorFunc, anInvokerClass); - - fCriticalSection := TCriticalSection.Create(); - - SetLength(fInstances, aPoolSize); - fPoolSize := aPoolSize; - fPoolBehavior := aPoolBehavior; - - if fPoolSize < 1 then RaiseError(err_PoolSizeMustBe1orHigher,[]); - - //fLastInc := -1; - if aPreInitializePool then - for i := 0 to (fPoolSize-1) do inherited CreateInstance(EmptyGUID, fInstances[i].fInterface); -end; - -destructor TROPooledClassFactory.Destroy; -var i : integer; -begin - for i := Low(fInstances) to High(fInstances) do fInstances[i].fInterface := nil; - FreeAndNil(fCriticalSection); - inherited; -end; - -procedure TROPooledClassFactory.CreateInstance(const aClientID : TGUID; out anInstance : IInterface); -var i:Integer; - //, refcnt : integer; -begin - anInstance := nil; - - repeat - - fCriticalSection.Acquire(); - try - - for I := 0 to fPoolSize-1 do begin - if not fInstances[i].fInUse then begin - - { is this pool instance initialized yet? if not, create pool instance now } - if not Assigned(fInstances[i].fInterface) then - inherited CreateInstance(EmptyGUID, fInstances[i].fInterface); - - { return instance and break loop } - anInstance := fInstances[i].fInterface; - fInstances[i].fInUse := True; - break; - - end; - end; { for } - - finally - fCriticalSection.Release(); - end; - - if not Assigned(anInstance) then - case fPoolBehavior of - pbFail:raise EROPoolNoFreeObjects.CreateFmt(err_NoFreeObjectsInPool,[GetInterfaceName, fPoolSize]); - pbWait:Sleep(POOL_SLEEP_MS_WHILE_WAITING); - pbCreateAdditional:inherited CreateInstance(EmptyGUID, anInstance); - end; { case } - - until (fPoolBehavior <> pbWait) or (Assigned(anInstance)); - - //if Assigned(anInstance) then ActivateInstance(aClientID,anInstance); - - //i := fLastInc; - {while (anInstance=NIL) do try - if (i>=fPoolSize-1) then i := 0 else Inc(i); - - refcnt := fInstances[i]._AddRef; - if (refcnt=2) then begin - anInstance := fInstances[i]; - fLastInc := i; - end; - finally - fInstances[i]._Release; - end;} -end; - -procedure TROPooledClassFactory.ClearPool; -var i:Integer; -begin - fCriticalSection.Acquire(); - try - - for i := 0 to fPoolSize-1 do begin - fInstances[i].fInUse := false; - fInstances[i].fInterface := nil; - end; { for } - - finally - fCriticalSection.Release(); - end; -end; - - -procedure TROPooledClassFactory.ReleaseInstance(const aClientID: TGUID; var anInstance: IInterface); -var i:Integer; -begin - //DeactivateInstance(aClientID,anInstance); - - fCriticalSection.Acquire(); - try - - for i := 0 to fPoolSize-1 do begin - if fInstances[i].fInterface = anInstance then begin - - { return instance and break loop } - anInstance := nil; - fInstances[i].fInUse := false; - break; - - end; - end; { for } - - finally - fCriticalSection.Release(); - end; - - { still assigned? then we had a spare object created to serve this request. Just free it. } - if Assigned(anInstance) then anInstance := nil; -end; - -{ TROSynchronizedSingletonClassFactory } - -constructor TROSynchronizedSingletonClassFactory.Create(const anInterfaceName: string; aCreatorFunc: TRORemotableCreatorFunc; anInvokerClass: TROInvokerClass); -begin - inherited; - fCriticalSection := TCriticalSection.Create(); -end; - -destructor TROSynchronizedSingletonClassFactory.Destroy; -begin - FreeAndNil(fCriticalSection); - inherited; -end; - -procedure TROSynchronizedSingletonClassFactory.CreateInstance(const aClientID : TGUID; out anInstance : IInterface); -begin - fCriticalSection.Enter(); - inherited; -end; - -procedure TROSynchronizedSingletonClassFactory.ReleaseInstance(const aClientID: TGUID; var anInstance: IInterface); -begin - inherited; - fCriticalSection.Leave(); -end; - -{ TROPerClientClassFactory } - -constructor TROPerClientClassFactory.Create(const anInterfaceName: string; - aCreatorFunc: TRORemotableCreatorFunc; anInvokerClass: TROInvokerClass; - aTimeoutSeconds:cardinal); -begin - inherited Create(anInterfaceName, aCreatorFunc, anInvokerClass); - fCriticalSection := TCriticalSection.Create; - fInstances := TObjectList.Create; - fTimeoutSeconds := aTimeoutSeconds; - fTimeoutThread := TROPerClientClassFactory_TimeoutThread.Create(Self, aTimeoutSeconds div 10); -end; - -destructor TROPerClientClassFactory.Destroy; -begin - fTimeoutThread.Free; - FreeAndNil(fInstances); - FreeAndNil(fCriticalSection); - inherited; -end; - -procedure TROPerClientClassFactory.CreateInstance(const aClientID: TGUID; - out anInstance: IInterface); -var i : integer; - instinfo : TClientInstance; -begin - anInstance := NIL; - - fCriticalSection.Enter(); - try - - for i := 0 to fInstances.Count-1 do - if IsEqualGUID(TClientInstance(fInstances[i]).ClientID, aClientID) then begin - anInstance := TClientInstance(fInstances[i]).ServerObject; - TClientInstance(fInstances[i]).LastAccess := Now(); - Exit; - end; - - //CreatorFunc(anInstance); // If not found the creates it - inherited CreateInstance(aClientID, anInstance); - - instinfo := TClientInstance.Create; - instinfo.ServerObject := anInstance; - instinfo.ClientID := aClientID; - instinfo.LastAccess := Now(); - - fInstances.Add(instinfo) - finally - fCriticalSection.Leave(); - end; -end; - -procedure TROPerClientClassFactory.ReleaseInstance(const aClientID: TGUID; - var anInstance: IInterface); -var destcontr : IRODestructorController; - i : integer; -begin - //DeactivateInstance(aClientID,anInstance); - - if Supports(anInstance, IRODestructorController, destcontr) and destcontr.CanBeDestroyed then begin - - fCriticalSection.Enter(); - try - for i := 0 to fInstances.Count-1 do - if IsEqualGUID(TClientInstance(fInstances[i]).ClientID, aClientID) then begin - anInstance := NIL; - fInstances.Delete(i); - break; - end; - finally - fCriticalSection.Leave(); - end; - - end; -end; - -procedure TROPerClientClassFactory.TimeoutSessions; -var i:Integer; - - function IsExpired(iInfo:TClientInstance):Boolean; - var lExpireTime:TDateTime; - const lSecsPerDay=24*60*60; - begin - lExpireTime := ((iInfo.LastAccess * lSecsPerDay) + fTimeoutSeconds) / lSecsPerDay; - Result := lExpireTime < Now(); - {$IFDEF DEBUG_REMOBJECTS_CLASSFACTORIES} - DebugServer.Write('Instance for Client ID %s - Last accessed %s, expires %s (now is %s)', - [GuidToString(iInfo.ClientID), - DateTimeToStr(iInfo.LastAccess), - DateTimeToStr(lExpireTime), - DateTimeToStr(Now())]); - {$ENDIF DEBUG_REMOBJECTS_CLASSFACTORIES} - end; - -var lInstance:IInterface; - lObjectTimeout:IROObjectTimeout; -begin - {$IFDEF DEBUG_REMOBJECTS_CLASSFACTORIES} - DebugServer.EnterMethod('TROPerClientClassFactory.TimeoutSessions()'); try - DebugServer.Write('%d instances in class factory',[fInstances.Count]); - {$ENDIF DEBUG_REMOBJECTS_CLASSFACTORIES} - - fCriticalSection.Enter(); - try - - for i := fInstances.Count-1 downto 0 do - if IsExpired(TClientInstance(fInstances[i])) then begin - {$IFDEF DEBUG_REMOBJECTS_CLASSFACTORIES} - DebugServer.Write('Expired PerClient instance for %s',[GuidToString(TClientInstance(fInstances[i]).ClientID)]); - {$ENDIF DEBUG_REMOBJECTS_CLASSFACTORIES} - - lInstance := (fInstances[i] as TClientInstance).ServerObject; - if Supports(lInstance,IROObjectTimeout,lObjectTimeout) then - lObjectTimeout.OnTimeout(); - lInstance := nil; - - fInstances.Delete(i); - end; - - finally - fCriticalSection.Leave(); - end; - - {$IFDEF DEBUG_REMOBJECTS_CLASSFACTORIES} - finally DebugServer.ExitMethod('TROPerClientClassFactory.TimeoutSessions()'); end; - {$ENDIF DEBUG_REMOBJECTS_CLASSFACTORIES} -end; - -{ TROPerClientClassFactory_TimeoutThread } - -constructor TROPerClientClassFactory_TimeoutThread.Create(iOwner: TROPerClientClassFactory; iTimeoutSeconds:integer); -begin - inherited Create(true,'TROPerClientClassFactory_TimeoutThread'); - fWakeUp := TROEvent.Create(nil,False,False,''); - fOwner := iOwner; - fTimeoutSeconds := iTimeoutSeconds; - if fTimeoutSeconds < 10 then fTimeoutSeconds := 10; - Resume(); -end; - -destructor TROPerClientClassFactory_TimeoutThread.Destroy(); -begin - Terminate(); - fWakeUp.SetEvent(); - inherited; - FreeAndNil(fWakeUp); -end; - -procedure TROPerClientClassFactory_TimeoutThread.Execute; -begin - while not Terminated do begin - fWakeUp.WaitFor(fTimeoutSeconds*1000); { WaitFor expects ms } - if not Terminated then begin - fOwner.TimeoutSessions(); - end; - end; { while } -end; - -initialization - RegisterExceptionClass(EROPoolNoFreeObjects); -finalization - UnregisterExceptionClass(EROPoolNoFreeObjects); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClasses.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClasses.pas deleted file mode 100644 index 5e5b6ea..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClasses.pas +++ /dev/null @@ -1,1915 +0,0 @@ -unit uROClasses; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, {$IFDEF MSWINDOWS} Windows, {$ENDIF} SyncObjs, SysUtils - {$IFDEF LINUX}, Libc{$ENDIF}; - -const MinTimerMS = 100; - -type - {$IFDEF DELPHI5} - IInterface = IUnknown; - {$ENDIF DELPHI5} - {$IFDEF LINUX} - TROEvent = class - private - FEvent: TSemaphore; - public - constructor Create(Dummy: Pointer; ManualReset, InitialVal: Boolean; Name: string); - destructor Destroy; override; - function WaitFor(Timeout: LongWord): TWaitResult; - procedure SetEvent; - procedure ResetEvent; - end; - {$ELSE} - TROEvent = TEvent; - {$ENDIF} - { IROStrings - Interface wrapper around a TStrings } - IROStrings = interface - ['{A96F7741-E9C4-4055-BF38-185B6063380C}'] - function GetCount : integer; - function GetStringsObj : TStrings; - - function GetValues(const Name: string): string; - procedure SetValues(const Name, Value: string); - function GetNames(Index: Integer): string; - - function GetObject(Index: Integer): TObject; - procedure PutObject(Index: Integer; const Value: TObject); - - function GetText : string; - procedure SetText(const Value : string); - - function GetCommaText : string; - procedure SetCommaText(const Value : string); - - function GetStrings(Index : integer) : string; - procedure SetStrings(Index : integer; const Value : string); - - function GetSorted : boolean; - procedure SetSorted(aValue : boolean); - procedure CustomSort(Compare: TStringListSortCompare); - - function GetDuplicates : TDuplicates; - procedure SetDuplicates(Value : TDuplicates); - - function Add(const aString : string) : integer; - function AddObject(const aString: string; aObject: TObject): Integer; - - procedure Insert(Index: Integer; const S: string); - procedure InsertObject(Index: Integer; const S: string; AObject: TObject); - - procedure Delete(Index : integer); - function IndexOf(const aString : string) : integer; - - - function ExtractValue(const aName : string) : string; - function RenameName(const aName : string) : boolean; - - function Find(const aString : string) : integer; - - procedure Clear; - - function IndexOfName(const aName : string) : integer; - - procedure AddStrings(aList : TStrings); - - property Count : integer read GetCount; - property Sorted : boolean read GetSorted write SetSorted; - property Duplicates: TDuplicates read GetDuplicates write SetDuplicates; - //property StringsObj : TStrings read GetStringsObj; - property Strings : TStrings read GetStringsObj; - property Values[const aName : string] : string read GetValues write SetValues; - property Names[Index : integer] : string read GetNames; - property StringAccess[Index : integer] : string read GetStrings write SetStrings; default; - property Text : string read GetText write SetText; - property CommaText : string read GetCommaText write SetCommaText; - property Objects[Index: Integer]: TObject read GetObject write PutObject; - end; - - {$IFDEF DELPHI5} - TSeekOrigin = (soBeginning, soCurrent, soEnd); { Under Delphi 5 we can assume 0,1,m2 to be used } - {$ENDIF} - - { IROStream - Interface wrapper around TStream } - IROStream = interface - ['{662BD786-2337-46DA-9F5C-FD226C2BBB13}'] - function GetStreamObj : TStream; - function GetPosition: Int64; - procedure SetPosition(const aValue: Int64); - function GetSize: Int64; - procedure SetSize(const aValue: Int64); - function Read(var Buffer; Count: Longint): Longint; - function Write(const Buffer; Count: Longint): Longint; - function Seek(Offset: Longint; Origin: Word): Longint; overload; - function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; - procedure ReadBuffer(var Buffer; Count: Longint); - procedure WriteBuffer(const Buffer; Count: Longint); - function ReadComponent(Instance: TComponent): TComponent; - procedure WriteComponent(Instance: TComponent); - - property Stream : TStream read GetStreamObj; - property Position: Int64 read GetPosition write SetPosition; - property Size: Int64 read GetSize write SetSize; - - procedure BeginUpdate; - procedure EndUpdate; - function InUpdateMode: Boolean; - end; - - { IROIdentifiedInterface } - IROInterfaceWithID = interface - ['{048F42B5-D3E4-4BD5-9E72-16BF9FC01388}'] - function GetID : string; - end; - - { Forwards } - TROThreadTimer = class; - - { Misc } - TStringArray = array of string; - - { TROStrings } - TROStrings = class(TInterfacedObject, IROStrings) - private - fListRef : TStrings; - fOwnsList : boolean; - - protected - // IROStrings - function GetCount : integer; - function GetStringsObj : TStrings; - function GetValues(const Name: string): string; - procedure SetValues(const Name, Value: string); - function GetNames(Index: Integer): string; - function GetStrings(Index : integer) : string; - procedure SetStrings(Index : integer; const Value : string); - - function GetObject(Index: Integer): TObject; - procedure PutObject(Index: Integer; const Value: TObject); - - function GetDuplicates : TDuplicates; - procedure SetDuplicates(Value : TDuplicates); - - function GetText : string; - procedure SetText(const Value : string); - - function GetCommaText : string; - procedure SetCommaText(const Value : string); - - function GetSorted : boolean; - procedure SetSorted(aValue : boolean); - - procedure CustomSort(Compare: TStringListSortCompare); - - procedure Clear; - - function Add(const aString : string) : integer; - function AddObject(const aString: string; aObject: TObject): Integer; - procedure Insert(Index: Integer; const S: string); - procedure InsertObject(Index: Integer; const S: string; AObject: TObject); - - procedure Delete(Index : integer); - function IndexOf(const aString : string) : integer; - - function ExtractValue(const aName : string) : string; - function RenameName(const aName : string) : boolean; - - function Find(const aString : string) : integer; - - procedure AddStrings(aList : TStrings); - - function IndexOfName(const aName : string) : integer; - - public - constructor Create(aList : TStrings; OwnsList : boolean); overload; virtual; - constructor CreateCopy(aList:TStrings); overload; virtual; - constructor Create; overload; - - destructor Destroy; override; - end; - - { TROStream } - TROStream = class(TInterfacedObject, IROStream) - private - fStreamRef : TStream; - fOwnsStream : boolean; - FOnChange: TNotifyEvent; - FChanging: byte; - procedure Changed; - protected - // IROStream - function GetStreamObj : TStream; - function GetPosition: Int64; - procedure SetPosition(const aValue: Int64); - function GetSize: Int64; - procedure SetSize(const aValue: Int64); - function Read(var Buffer; Count: Longint): Longint; - function Write(const Buffer; Count: Longint): Longint; - function Seek(Offset: Longint; Origin: Word): Longint; overload; - function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; - procedure ReadBuffer(var Buffer; Count: Longint); - procedure WriteBuffer(const Buffer; Count: Longint); - function ReadComponent(Instance: TComponent): TComponent; - procedure WriteComponent(Instance: TComponent); - procedure BeginUpdate; - procedure EndUpdate; - function InUpdateMode: Boolean; - public - constructor Create(aStream : TStream; OwnsStream : boolean); overload; virtual; - constructor Create; overload; - - destructor Destroy; override; - property OnChange: TNotifyEvent read FOnChange write FOnChange; - end; - - - {$M+} - TROBinaryMemoryStream = class(TMemoryStream) - private - FCapacityIncrement: integer; - protected - function Realloc(var NewCapacity: Longint): Pointer; override; - public - constructor Create(const iString:string); overload; - constructor Create; overload; // required for C++ compatibility - procedure Assign(iSource:TStream); - function Clone:TROBinaryMemoryStream; - - procedure LoadFromString(const iString:string); - procedure LoadFromHexString(const iString:string); - function ToString:string; - function ToHexString:string; - function ToReadableString:string; - property CapacityIncrement: integer read FCapacityIncrement write FCapacityIncrement; - end; - {$M-} - - TROConstantMemoryStream = class(TROBinaryMemoryStream) - public - constructor Create(aStream: TCustomMemoryStream; aFreeOldStream: boolean=false); reintroduce; - destructor Destroy; override; - - function Write(const Buffer; Count: Integer): Integer; override; - end; - - { TROThreadTimer } - TROTimerEvent = procedure(CurrentTickCount : cardinal) of object; - - TROThreadTimer = class(TThread) - private - {$IFDEF MSWINDOWS} - fFreeWaiting: TObject; // TROEvent - fIsTerminated: Boolean; - {$ENDIF MSWINDOWS} - - fTimerEvent : TROTimerEvent; - fTimeoutMS : integer; - {$IFDEF WIN32} - fWakeUp : TEvent; - {$ENDIF} - fSynchronized: Boolean; - - function GetTimeout: integer; - procedure SetTimeout(const Value: integer); - procedure RunEvent; - - protected - {$IFDEF MSWINDOWS} - procedure DoTerminate; override; - {$ENDIF MSWINDOWS} - procedure Execute; override; - - public - constructor Create(aTimerEvent: TROTimerEvent; aTimeout: integer); overload; - constructor Create(aTimerEvent: TROTimerEvent; aTimeout: integer; Synchronized: Boolean); overload; - destructor Destroy; override; - - procedure TerminateWaitFor; virtual; - - {$IFDEF MSWINDOWS} - function WaitFor: DWORD; reintroduce; - {$IFNDEF FPC} - procedure Free; reintroduce; // Windows limitation workaround - {$ENDIF} - {$ENDIF MSWINDOWS} - - // got to make sure we aren't freeing threads from within themselves - procedure AsyncFree; - - // In MS - property Timeout : integer read GetTimeout write SetTimeout; - property Synchronized : Boolean read fSynchronized write fSynchronized; - end; - - TROInterfaceRegistry = class(TInterfaceList) - private - fInterfaceType:TGUID; - public - constructor Create(aInterfaceType:TGUID); - procedure Register(aInterface:IInterface); - procedure Unregister(aInterface:IInterface); - end; - - TClassList = TList; - - { Exceptions } - {$M+} - EROException = class(Exception) - public - procedure ReadException(ASerializer: TObject);virtual; - procedure WriteException(ASerializer: TObject);virtual; - destructor Destroy; override; - end; - {$M-} - - EROServerException = class(EROException); - EROUnregisteredServerException = class(EROServerException); // Marshelled exceptions that have not being registered in the framework - - EROInvalidStream = class(EROException); - - EROUserError = class(EROException); // Indicates something was done incorrectly by the user - - EROUnknownItem = class(EROException); // uRODL, uRODynamicRequest and similar - - EROIDEProblem = class(EROException); - - { TROCollection } - TROSearchOption = (soIgnoreCase); - - TROSearchOptions = set of TROSearchOption; - TROCollection = class(TCollection) - private - protected - public - function Search(const aPropertyName : string; - const aPropertyValue : Variant; - StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : TCollectionItem; - function GetIndex(const aPropertyName : string; - const aPropertyValue : Variant; - StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : integer; - end; - - TROInterfacedObject = class(TObject, IInterface) - protected - FRefCount: Integer; - function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall; - function _AddRef: Integer; virtual; stdcall; - function _Release: Integer; virtual; stdcall; - public - procedure AfterConstruction; override; - procedure BeforeDestruction; override; - class function NewInstance: TObject; override; - property RefCount: Integer read FRefCount; - end; - -// Exceptions -procedure Check(DoRaise : boolean; const aMessage : string; const Parameters : array of const; iExceptionClass:ExceptClass); overload; -procedure Check(DoRaise : boolean; const aMessage : string; const Parameters : array of const); overload; -procedure Check(DoRaise : boolean; const aMessage : string); overload; - -procedure RaiseError(const aMessage : string; const Parameters : array of const; iExceptionClass:ExceptClass); overload; -procedure RaiseError(const aMessage : string; const Parameters : array of const); overload; -procedure RaiseError(const aMessage : string); overload; -procedure RaiseInvalidStreamError(const anErrorMessage : string; const someParams : array of const; iStream:TStream); -procedure NotSupported(const Hint : string = ''); - -// IROStrings -function NewROStrings : IROStrings; overload; -function NewROStrings(const someStrings : array of string) : IROStrings; overload; -function NewROStrings(const someText : string) : IROStrings; overload; -function NewROStrings(const aList : TStrings; OwnList : boolean = TRUE) : IROStrings; overload; -function ListStringElements(const aString : string; const aSeparator : string = ';') : IROStrings; -function ListParameters(const aString : string; ParameterID : char = ':'; StringDelimiter : char = '''') : IROStrings; -function PackStrings(aList : IROStrings; const aDelimiter : string) : string; - -// IROStreams -function NewROStream : IROStream; overload; -function NewROStream(aStream : TStream; OwnsStream : boolean = TRUE) : IROStream; overload; - -// TStrings -procedure StringArrayToStrings(const anArray : TStringArray; Destination : TStrings; ClearStrings : boolean = TRUE); -function StringsToStringArray(aSource : TStrings) : TStringArray; -function StringsToString(const aStringList : TStrings) : string; - -// Numeric -function IncID(CurrVal, MaxVal : integer) : integer; -function LoopList(var CurrentIndex : integer; const ListCount : integer; var EvalCount : integer) : boolean; - -// Time -procedure StartTickCounter(var aTickTracker : cardinal); -function GetElapsedTicks(const aTickTracker : cardinal) : cardinal; - -// Variants -function StreamToVariant(Stream: TStream): Variant; -procedure VariantToStream(const Data: Variant; Stream: TStream); - -// Interfaces -function GetRefCount(const anInstance : IUnknown) : integer; - -// Strings -function TrimAndClean(const aString : string) : string; -function SameText(const Str1, Str2 : string) : boolean; -function WriteSpace(Count : integer) : string; - -type - TSetOfChars = set of char; - -function NewGuid:TGUID; -function NewGuidAsString:string; -function NewStrippedGuidAsString:string; - -procedure ReplaceChar(var s:string; iChars:TSetOfChars; iChar:char); -procedure Remove(var s:string; iChars:TSetOfChars); overload; -procedure RemoveExcept(var s:string; iChars:TSetOfChars); -function MakeValidIdentifier(const aName:string):string; -function CleanStringFromBinaries(const iString:string):string; -procedure SaveStringToFile(const aFilename, aString: string); - -function EndsWith(const iSubStr,iString:string):boolean; - -function GetTempPath:string; -function GetTempFileName(const aFileExt:string):string; - -{$IFDEF LINUX} -function GetTickCount:cardinal; -{$ENDIF} - -{$IFDEF DELPHI5} -function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean; -procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); -function MinutesBetween(const ANow, AThen: TDateTime): Int64; -{$ENDIF DELPHI5} -{$IFNDEF DELPHI7UP} -function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64): TDateTime; -function IncYear(const AValue: TDateTime; const ANumberOfYears: Integer): TDateTime; -{$ENDIF DELPHI7UP} - -function WrappedHexString(iData:string; iWrapLength:integer=40):string; -function StringFromHexString(iData:string):string; -function StringToHexString(iData:string):string; -function ROVariantsEqual(const A, B: Variant): Boolean; -function ROWideCompare(const S1, S2: WideString; aCaseInsensitive: Boolean {$IFDEF MSWINDOWS};aLocale: LCID = LOCALE_USER_DEFAULT{$ENDIF}): Integer; - -implementation - -uses {$IFDEF MSWINDOWS}ActiveX,{$ENDIF} - {$IFDEF FPC}Variants, - {$ELSE} - {$IFDEF VER140UP}Variants,{$ENDIF} - {$ENDIF} - TypInfo,uRORes, uROSerializer; - - -{ TROBinaryMemoryStream } - -procedure TROBinaryMemoryStream.Assign(iSource:TStream); -begin - if (iSource is TROBinaryMemoryStream) then begin - Clear(); - CopyFrom(iSource,0); - Position := iSource.Position; - end - else begin - raise EConvertError.CreateResFmt(@err_AssignError, [iSource.ClassName, ClassName]); - end; -end; - -function TROBinaryMemoryStream.Clone:TROBinaryMemoryStream; -begin - Result := ClassType.Create() as TROBinaryMemoryStream; - Result.Assign(self); -end; - -constructor TROBinaryMemoryStream.Create; -begin - inherited Create; -end; - -constructor TROBinaryMemoryStream.Create(const iString: string); -begin - FCapacityIncrement:=0; //standard mode - Create(); - LoadFromString(iString); -end; - -procedure TROBinaryMemoryStream.LoadFromString(const iString: string); -var - lLength:integer; -begin - lLength := Length(iString); - SetSize(lLength); - Move(pChar(iString)^,Memory^,Length(iString)); - Seek(0,soFromBeginning); -end; - -procedure TROBinaryMemoryStream.LoadFromHexString(const iString: string); -begin - if Length(iString) mod 2 <> 0 then RaiseError('String length must be 2n'); - Size := Length(iString) div 2; - HexToBin(pChar(iString),Memory,Size); - Seek(0,soFromBeginning); -end; - -function TROBinaryMemoryStream.ToHexString: string; -begin - SetLength(result,Size*2); - BinToHex(Memory,pChar(result),Size); -end; - -function TROBinaryMemoryStream.ToReadableString: string; -begin - Result := CleanStringFromBinaries(ToString); -end; - -function TROBinaryMemoryStream.ToString: string; -begin - SetLength(Result,Size); - Seek(0,soFromBeginning); - Read(Result[1],Size); -end; - - -// Exceptions -procedure RaiseError(const aMessage : string; const Parameters : array of const); -begin - raise EROException.CreateFmt(aMessage, Parameters); -end; - -procedure RaiseError(const aMessage : string; const Parameters : array of const; iExceptionClass:ExceptClass); -begin - raise iExceptionClass.CreateFmt(aMessage, Parameters); -end; - -procedure Check(DoRaise : boolean; const aMessage : string; const Parameters : array of const; iExceptionClass:ExceptClass); overload; -begin - if DoRaise - then RaiseError(aMessage, Parameters, iExceptionClass); -end; - -procedure Check(DoRaise : boolean; const aMessage : string; const Parameters : array of const); -begin - if DoRaise - then RaiseError(aMessage, Parameters); -end; - -procedure RaiseError(const aMessage : string); -begin - RaiseError(aMessage, []); -end; - -procedure Check(DoRaise : boolean; const aMessage : string); -begin - Check(DoRaise, aMessage, []); -end; - -procedure NotSupported(const Hint : string = ''); -const Msg = 'Not Supported'; -begin - if (Hint<>'') then RaiseError(Hint+' '+Msg) else RaiseError(Msg); -end; - -procedure RaiseInvalidStreamError(const anErrorMessage : string; const someParams : array of const; iStream:TStream); -var - lStringStream:TStringStream; - lSize:Int64; -begin - lStringStream := TStringStream.Create(''); - try - iStream.Seek(0,soFromBeginning); - lSize := iStream.Size; - if lSize > 500 then lSize := 500; - lStringStream.CopyFrom(iStream,lSize); - raise EROInvalidStream.Create(Format(anErrorMessage,someParams)+#13#13+CleanStringFromBinaries(lStringStream.DataString)); - finally - lStringStream.Free(); - end; -end; - -// IROStrings -function NewROStrings : IROStrings; -var sl : TStringList; -begin - sl := TStringList.Create; - result := NewROStrings(sl, TRUE); -end; - -function NewROStrings(const aList : TStrings; OwnList : boolean = TRUE) : IROStrings; -begin - result := TROStrings.Create(aList, OwnList); -end; - -function NewROStrings(const someStrings : array of string) : IROStrings; -var i : integer; -begin - result := NewROStrings; - for i := 0 to Length(someStrings) do - result.Add(someStrings[i]) -end; - -function NewROStrings(const someText : string) : IROStrings; overload; -begin - result := NewROStrings; - result.Text := someText; -end; - -function ListStringElements(const aString : string; const aSeparator : string = ';') : IROStrings; -var str : string; - spl, i : integer; - list : TStringList; -begin - str := aString; - spl := Length(aSeparator); - list := TStringList.Create; - - result := NewROStrings(list); - - i := Pos(aSeparator, str); - while (i>0) do begin - result.Add(Copy(str, 1, i-1)); - Delete(str, 1, i-1+spl); - - i := Pos(aSeparator, str); - end; - - if (str<>'') then result.Add(str); -end; - -function ListParameters(const aString : string; ParameterID : char = ':'; StringDelimiter : char = '''') : IROStrings; -var startidx, i, len : integer; - //instr : boolean; -begin - result := NewROStrings; - //instr := FALSE; was not used elsewhere? - - startidx := 0; - len := Length(aString); - - for i := 0 to len do begin - if (aString[i]=StringDelimiter) then begin - //instr := instr XOR TRUE; was not used elsewhere? - Continue; - end - - else if (aString[i]=ParameterID) - then startidx := i - - else if ((startidx>0) and not (aString[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_'])) then begin - result.Add(Copy(aString, startidx+1, i-startidx-1)); - startidx := 0; - end - - else if ((i=len) and (startidx>0)) - then result.Add(Copy(aString, startidx+1, i-startidx-1)); - end; -end; - -function PackStrings(aList : IROStrings; const aDelimiter : string) : string; -var i : integer; -begin - result := ''; - if (aList.Count=0) then Exit; - - for i := 0 to (aList.Count-1) do - result := result+aList[i]+aDelimiter; - - Delete(result, Length(result), Length(aDelimiter)); -end; - -// IROStreams -function NewROStream : IROStream; -begin - result := TROStream.Create; -end; - -function NewROStream(aStream : TStream; OwnsStream : boolean = TRUE) : IROStream; -begin - result := TROStream.Create(aStream, OwnsStream); -end; - -// TStrings -procedure StringArrayToStrings(const anArray : TStringArray; Destination : TStrings; ClearStrings : boolean = TRUE); -var i : integer; -begin - if ClearStrings then Destination.Clear; - for i := 0 to Length(anArray)-1 do - Destination.Add(anArray[i]) -end; - -function StringsToStringArray(aSource : TStrings) : TStringArray; -var i : integer; -begin - SetLength(result, aSource.Count-1); - for i := 0 to (aSource.Count-1) do - result[i] := aSource[i]; -end; - -function StringsToString(const aStringList : TStrings) : string; -var i : integer; -begin - result := aStringList.Text; - for i := 1 to Length(result) do - if (result[i] in [#10, #13]) then result[i] := #32 -end; - -// Streams -function StreamToVariant(Stream: TStream): Variant; -var p: Pointer; -begin - Result := VarArrayCreate([0, Stream.Size - 1], varByte); - p := VarArrayLock(Result); - try - Stream.Position := 0; //start from beginning of stream - Stream.Read(p^, Stream.Size); - finally - VarArrayUnlock(Result); - end; -end; - -procedure VariantToStream(const Data: Variant; Stream: TStream); -var p: Pointer; -begin - p := VarArrayLock(Data); - try - Stream.Write(p^, VarArrayHighBound(Data, 1) + 1); //assuming low bound = 0 - finally - VarArrayUnlock(Data); - end; -end; - -// Interfaces -function GetRefCount(const anInstance : IUnknown) : integer; -begin - anInstance._AddRef; - result := anInstance._Release; -end; - -// Strings -function TrimAndClean(const aString : string) : string; -const DirtyChars : set of char = [#13, #10, #32]; -var i : integer; -begin - result := aString; - - while ((Length(result)>0) and (result[1] in DirtyChars)) - do Delete(result, 1, 1); - - while (Length(result)>0) do begin - i := Length(result); - if (result[i] in DirtyChars) - then Delete(result, i, 1) - else Exit; - end; -end; - -function SameText(const Str1, Str2 : string) : boolean; -begin - result := CompareText(Str1, Str2)=0 -end; - -function WriteSpace(Count : integer) : string; -begin - SetLength(result, Count); - FillChar(result[1], Count, #32); -end; - -// Numeric -function IncID(CurrVal, MaxVal : integer) : integer; -begin - if (CurrVal>=MaxVal) - then result := 0 - else result := CurrVal+1; -end; - -procedure StartListLoop(const StartFrom : integer; var CurrentIndex : integer; var EvalCount : integer); -begin - CurrentIndex := StartFrom; - EvalCount := 0; -end; - -function LoopList(var CurrentIndex : integer; const ListCount : integer; var EvalCount : integer) : boolean; -begin - result := TRUE; - if (EvalCount iString[Len2-i+1] then begin - result := false; - exit; - end - end; - result := true; - end - else begin - result := false; - end; -end; - -{$IFNDEF DELPHI7UP} -const - HoursPerDay = 24; - MinsPerHour = 60; - SecsPerMin = 60; - MSecsPerSec = 1000; - MinsPerDay = HoursPerDay * MinsPerHour; - SecsPerDay = MinsPerDay * SecsPerMin; - MSecsPerDay = SecsPerDay * MSecsPerSec; -{$ENDIF DELPHI7UP} - -{$IFDEF DELPHI5} -function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean; -var - I: Integer; - DayTable: PDayTable; -begin - Result := False; - DayTable := @MonthDays[IsLeapYear(Year)]; - if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) and - (Day >= 1) and (Day <= DayTable^[Month]) then - begin - for I := 1 to Month - 1 do Inc(Day, DayTable^[I]); - I := Year - 1; - Date := I * 365 + I div 4 - I div 100 + I div 400 + Day - DateDelta; - Result := True; - end; -end; - -function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean; -begin - Result := False; - if (Hour < HoursPerDay) and (Min < MinsPerHour) and (Sec < SecsPerMin) and (MSec < MSecsPerSec) then - begin - Time := (Hour * (MinsPerHour * SecsPerMin * MSecsPerSec) + - Min * (SecsPerMin * MSecsPerSec) + - Sec * MSecsPerSec + - MSec) / MSecsPerDay; - Result := True; - end; -end; - -function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean; -var - LTime: TDateTime; -begin - Result := TryEncodeDate(AYear, AMonth, ADay, AValue); - if Result then begin - Result := TryEncodeTime(AHour, AMinute, ASecond, AMilliSecond, LTime); - if Result then - AValue := AValue + LTime; - end; -end; - -procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word); -begin - DecodeDate(AValue, AYear, AMonth, ADay); - DecodeTime(AValue, AHour, AMinute, ASecond, AMilliSecond); -end; -{$ENDIF DELPHI5} - -{$IFNDEF DELPHI7UP} -function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime; -begin - if ANow < AThen then - Result := AThen - ANow - else - Result := ANow - AThen; -end; - -function MinuteSpan(const ANow, AThen: TDateTime): Double; -begin - Result := MinsPerDay * SpanOfNowAndThen(ANow, AThen); -end; - -function MinutesBetween(const ANow, AThen: TDateTime): Int64; -begin - Result := Trunc(MinuteSpan(ANow, AThen)); -end; - -function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64):TDateTime; -begin - Result := ((AValue * MinsPerDay) + ANumberOfMinutes) / MinsPerDay; -end; - -function IncYear(const AValue: TDateTime; const ANumberOfYears: Integer): TDateTime; -begin - Result := AValue+365; -end; -{$ENDIF DELPHI7UP} - -function StringFromHexString(iData:string):string; -begin - Remove(iData,[#13,#10,#32]); - if Length(iData) mod 2 <> 0 then raise EROException.Create('String length must be 2n'); - SetLength(Result,Length(iData) div 2); - HexToBin(pChar(iData),pChar(result),Length(result)); -end; - -{----------------------------------------------------------------------------} -function StringToHexString(iData:string):string; -begin - SetLength(Result,Length(iData) * 2); - BinToHex(pChar(iData),pChar(result),Length(iData)); -end; - -{----------------------------------------------------------------------------} -function WrappedHexString(iData:string; iWrapLength:integer=40):string; -var i:integer; - s:string; -begin - for i := 1 to length(iData) do begin - s := s+IntToHex(byte(iData[i]),2); - if i mod iWrapLength = 0 then s := s+#13#10; - end; - result := s; -end; - -function TROBinaryMemoryStream.Realloc(var NewCapacity: Integer): Pointer; -begin - if (FCapacityIncrement = 0) or (NewCapacity=0) then begin - Result := inherited Realloc(NewCapacity) - end else begin - inc(NewCapacity,FCapacityIncrement); - Result := inherited Realloc(NewCapacity); - end; -end; - -{ TROStrings } - -function TROStrings.Add(const aString: string): integer; -begin - result := fListRef.Add(aString) -end; - -function TROStrings.AddObject(const aString: string; aObject: TObject): Integer; -begin - result := fListRef.AddObject(aString, aObject); -end; - -procedure TROStrings.AddStrings(aList: TStrings); -begin - fListRef.AddStrings(aList); -end; - -constructor TROStrings.Create(aList: TStrings; OwnsList: boolean); -begin - inherited Create; - - if not Assigned(aList) then begin - fListRef := TStringList.Create; - fOwnsList := true; - end - else begin - fListRef := aList; - fOwnsList := OwnsList; - end; -end; - -constructor TROStrings.Create; -begin - Create(nil,true); -end; - -constructor TROStrings.CreateCopy(aList: TStrings); -begin - Create(nil,true); - fListRef.Assign(aList); -end; - -procedure TROStrings.CustomSort(Compare: TStringListSortCompare); -begin - if (fListRef is TStringList) - then TStringList(fListRef).CustomSort(Compare); -end; - -procedure TROStrings.Clear; -begin - fListRef.Clear -end; - -procedure TROStrings.Delete(Index: integer); -begin - fListRef.Delete(Index); -end; - -destructor TROStrings.Destroy; -begin - if fOwnsList - then fListRef.Free; - - inherited; -end; - -function TROStrings.ExtractValue(const aName: string): string; -var idx : integer; -begin - result := ''; - - idx := fListRef.IndexOfName(aName); - if (idx>=0) then begin - result := fListRef.Values[aName]; - fListRef.Delete(idx); - end -end; - -function TROStrings.Find(const aString: string): integer; -begin - result := fListRef.IndexOf(aString) -end; - -function TROStrings.GetCount: integer; -begin - result := fListRef.Count -end; - -function TROStrings.GetDuplicates: TDuplicates; -begin - if (fListRef is TStringList) then - result := TStringList(fListRef).Duplicates - else - result := dupAccept; -end; - -function TROStrings.GetNames(Index: Integer): string; -begin - result := fListRef.Names[Index] -end; - -function TROStrings.GetSorted: boolean; -begin - if (fListRef is TStringList) - then result := TStringList(fListRef).Sorted - else result := FALSE; -end; - -function TROStrings.GetStrings(Index: integer): string; -begin - result := fListRef[Index] -end; - -function TROStrings.GetStringsObj: TStrings; -begin - result := fListRef -end; - -function TROStrings.GetText: string; -begin - result := fListRef.Text -end; - -function TROStrings.GetValues(const Name: string): string; -begin - result := fListRef.Values[Name] -end; - -function TROStrings.IndexOf(const aString: string): integer; -begin - result := fListRef.IndexOf(aString) -end; - -function TROStrings.IndexOfName(const aName: string): integer; -begin - if (fListRef is TStringList) - then result := TStringList(fListRef).IndexOfName(aName) - else result := -1 -end; - -function TROStrings.RenameName(const aName : string) : boolean; -var idx : integer; - curr : string; -begin - // TODO: check this works... - idx := fListRef.IndexOfName(aName); - result := idx>=0; - - if result then begin - curr := fListRef[idx]; - fListRef[idx] := aName+Copy(curr, Pos('=', curr), MaxInt); - end; -end; - -procedure TROStrings.SetDuplicates(Value: TDuplicates); -begin - if (fListRef is TStringList) then - TStringList(fListRef).Duplicates := Value; -end; - -procedure TROStrings.SetSorted(aValue: boolean); -begin - if (fListRef is TStringList) - then TStringList(fListRef).Sorted := aValue -end; - -procedure TROStrings.SetStrings(Index: integer; const Value: string); -begin - fListRef[Index] := Value -end; - -procedure TROStrings.SetText(const Value: string); -begin - fListRef.Text := Value -end; - -procedure TROStrings.SetValues(const Name, Value: string); -begin - fListRef.Values[Name] := Value -end; - -function TROStrings.GetObject(Index: Integer): TObject; -begin - result := fListRef.Objects[Index]; -end; - -procedure TROStrings.PutObject(Index: Integer; const Value: TObject); -begin - fListRef.Objects[Index] := Value; -end; - -procedure TROStrings.Insert(Index: Integer; const S: string); -begin - fListRef.Insert(Index, S); -end; - -procedure TROStrings.InsertObject(Index: Integer; const S: string; AObject: TObject); -begin - fListRef.InsertObject(Index, S, AObject); -end; - -function TROStrings.GetCommaText: string; -begin - result := fListRef.CommaText -end; - -procedure TROStrings.SetCommaText(const Value: string); -begin - fListRef.CommaText := Value -end; - -{ TROThreadTimer } - -constructor TROThreadTimer.Create(aTimerEvent: TROTimerEvent; aTimeout: integer); -begin - inherited Create(true); -{$IFDEF WIN32} - fWakeUp := TEvent.Create(nil,False,False,''); -{$ENDIF} - fTimerEvent := aTimerEvent; - Timeout := aTimeout; - - Resume(); -end; - -destructor TROThreadTimer.Destroy; -begin - Terminate(); -{$IFDEF WIN32} - fWakeUp.SetEvent(); -{$ENDIF} - inherited; -{$IFDEF WIN32} - FreeAndNIL(fWakeUp); -{$ENDIF} -end; - -procedure TROThreadTimer.Execute; -{$IFNDEF WIN32} -var - nexttime: Cardinal; -{$ENDIF} -begin -// inherited; - - while not Terminated do begin - {$IFDEF WIN32} - fWakeUp.WaitFor(fTimeoutMS); - {$ELSE} - nexttime := GetTickCount + fTimeoutMS; - if nexttime < fTimeoutMS then // truncated integer - begin - while not terminated and (GetTickCount > $80000000) do - Sleep(10); - end; - while not terminated do - begin - Sleep(10); - if GetTickCount > nexttime then - break; - end; - {$ENDIF} - if (not Terminated) then - begin - if fSynchronized then - Synchronize(RunEvent) - else - RunEvent; - end; - end; -end; - -procedure TROThreadTimer.RunEvent; -begin - if Assigned(fTimerEvent) then - begin - fTimerEvent(GetTickCount()); - end; -end; - -function TROThreadTimer.GetTimeout: integer; -begin - result := fTimeoutMS; -end; - -procedure TROThreadTimer.SetTimeout(const Value: integer); -begin - if (Value nil then - TROEvent(fFreeWaiting).SetEvent; -end; - -{$ENDIF MSWINDOWS} - -{ TROInterfaceRegistry } - -constructor TROInterfaceRegistry.Create(aInterfaceType: TGUID); -begin - inherited Create(); - fInterfaceType := fInterfaceType; -end; - -procedure TROInterfaceRegistry.Register(aInterface: IInterface); -begin - //ToDo: if not Supports(aInterface,fInterfaceType) then RaiseError('Unsupported Interface Type.'); - if IndexOf(aInterface) = -1 then Add(aInterface); -end; - -procedure TROInterfaceRegistry.Unregister(aInterface: IInterface); -var - lIndex:integer; -begin - lIndex := IndexOf(aInterface); - if lIndex <> -1 then Delete(lIndex); -end; - -{ TROStream } -constructor TROStream.Create(aStream : TStream; OwnsStream : boolean); -begin - inherited Create; - - if not Assigned(aStream) then begin - fStreamRef := TMemoryStream.Create; - fOwnsStream := TRUE; - end - else begin - fStreamRef := aStream; - fOwnsStream := OwnsStream; - end; -end; - -procedure TROStream.BeginUpdate; -begin - Check(FChanging <> 0, 'Stream is already in UpdateMode'); - inc(FChanging); -end; - -constructor TROStream.Create; -begin - Create(NIL, TRUE); -end; - -destructor TROStream.Destroy; -begin - if fOwnsStream - then fStreamRef.Free; - - inherited; -end; - -procedure TROStream.EndUpdate; -begin - Check(FChanging = 0, 'Stream is not in UpdateMode'); - dec(FChanging); - Changed; -end; - -function TROStream.GetPosition: Int64; -begin - result := fStreamRef.Position -end; - -function TROStream.GetSize: Int64; -begin - result := fStreamRef.Size -end; - -function TROStream.GetStreamObj: TStream; -begin - result := fStreamRef -end; - -function TROStream.Read(var Buffer; Count: Integer): Longint; -begin - result := fStreamRef.Read(Buffer, Count) -end; - -procedure TROStream.ReadBuffer(var Buffer; Count: Integer); -begin - fStreamRef.ReadBuffer(Buffer, Count); -end; - -function TROStream.ReadComponent(Instance: TComponent): TComponent; -begin - result := fStreamRef.ReadComponent(Instance) -end; - -function TROStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; -begin - {$IFDEF DELPHI5} - result := fStreamRef.Seek(Offset, word(Origin)); - {$ELSE} - result := fStreamRef.Seek(Offset, Origin); - {$ENDIF DELPHI5} -end; - -function TROStream.Seek(Offset: Integer; Origin: Word): Longint; -begin - result := fStreamRef.Seek(Offset, Origin); -end; - -procedure TROStream.SetPosition(const aValue: Int64); -begin - fStreamRef.Position := aValue; -end; - -procedure TROStream.SetSize(const aValue: Int64); -begin - fStreamRef.Size := aValue; - Changed; -end; - -function TROStream.Write(const Buffer; Count: Integer): Longint; -begin - result := fStreamRef.Write(Buffer, Count); - Changed; -end; - -procedure TROStream.WriteBuffer(const Buffer; Count: Integer); -begin - fStreamRef.WriteBuffer(Buffer, Count); - Changed; -end; - -procedure TROStream.WriteComponent(Instance: TComponent); -begin - fStreamRef.WriteComponent(Instance); - Changed; -end; - -procedure TROStream.Changed; -begin - if (FChanging = 0) and Assigned(FOnChange) then FOnChange(Self); -end; - -function TROStream.InUpdateMode: Boolean; -begin - Result:= FChanging<>0; -end; - -{ TROCollection } - -function TROCollection.GetIndex(const aPropertyName: string; - const aPropertyValue: Variant; StartFrom: integer; - Options: TROSearchOptions): integer; -var i : integer; - val : Variant; - curritem : TObject; -begin - result := -1; - - for i := StartFrom to (Count-1) do begin - curritem := Items[i]; - if (curritem=NIL) then Continue; - - val := GetPropValue(curritem, aPropertyName, FALSE); - - if (soIgnoreCase in Options) then begin - if (VarToStr(val)=VarToStr(aPropertyValue)) then begin - result := i; - Exit; - end; - end - else begin - if (val=aPropertyValue) then begin - result := i; - Exit; - end; - end; - end; -end; - -function TROCollection.Search(const aPropertyName : string; - const aPropertyValue : Variant; StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : TCollectionItem; -var idx : integer; -begin - idx := GetIndex(aPropertyName, aPropertyValue, StartFrom, Options); - if (idx>=0) - then result := Items[idx] - else result := NIL; -end; - -{ TROConstantMemoryStream } - -constructor TROConstantMemoryStream.Create(aStream: TCustomMemoryStream; aFreeOldStream: boolean=false); -var - lSize: longint; - lMemory: Pointer; -begin - inherited Create(); - lSize := aStream.Size; - GetMem(lMemory, lSize); - Move(aStream.Memory^, lMemory^, lSize); - SetPointer(lMemory, lSize); - if aFreeOldStream then - aStream.Free(); -end; - -destructor TROConstantMemoryStream.Destroy; -begin - FreeMem(Memory); - inherited; -end; - -function TROConstantMemoryStream.Write(const Buffer; Count: Integer): Integer; -begin - result := 0; // else it will warn - RaiseError(err_StreamIsReadOnly); -end; - -{ TROInterfacedObject } - -function TROInterfacedObject.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - if GetInterface(IID, Obj) then - Result := 0 - else - Result := E_NOINTERFACE; -end; - -function TROInterfacedObject._AddRef: Integer; -begin - Result := InterlockedIncrement(FRefCount); -end; - -function TROInterfacedObject._Release: Integer; -begin - Result := InterlockedDecrement(FRefCount); - if Result = 0 then - Destroy; -end; - -procedure TROInterfacedObject.AfterConstruction; -begin -// Release the constructor's implicit refcount - InterlockedDecrement(FRefCount); -end; - -procedure TROInterfacedObject.BeforeDestruction; -begin - if RefCount <> 0 then -{$IFDEF FPC} - raise Exception.Create('Invalid Pointer Operation'); -{$ELSE} - System.Error(reInvalidPtr); -{$ENDIF} -end; - -// Set an implicit refcount so that refcounting -// during construction won't destroy the object. -class function TROInterfacedObject.NewInstance: TObject; -begin - Result := inherited NewInstance; - TROInterfacedObject(Result).FRefCount := 1; -end; - -{$IFDEF LINUX} -constructor TROEvent.Create(Dummy: Pointer; ManualReset, InitialVal: Boolean; - Name: string); -begin - inherited Create; - sem_init(FEvent, {$IFDEF FPC}0{$ELSE}False{$ENDIF}, Byte(InitialVal)); -end; - -destructor TROEvent.Destroy; -begin - sem_destroy(FEvent); - inherited Destroy; -end; - -procedure TROEvent.SetEvent; -var - i: Integer; -begin - sem_getvalue(FEvent,{$IFDEF FPC}@{$ENDIF FPC}I); - if I = 0 then - sem_post(FEvent); -end; - -function TROEvent.WaitFor(Timeout: LongWord): TWaitResult; -var - inttimeout: TimeSpec; -begin - if Timeout = Cardinal($FFFFFFFF) then - begin - if sem_Wait(FEvent) = 0 then - result := wrSignaled - else - result := wrTimeout; - end - else begin - inttimeout.tv_sec := __time(nil) + (timeout div 1000); - inttimeout.tv_nsec := (timeout mod 1000); - if sem_timedwait(FEvent, {$IFDEF FPC}@{$ENDIF FPC}inttimeout) = 0 then - Result := wrSignaled - else - Result := wrTimeout; - end; -end; -procedure TROEvent.ResetEvent; -begin -end; - -{$ENDIF} - - -function ROWideCompare(const S1, S2: WideString; aCaseInsensitive: Boolean {$IFDEF MSWINDOWS};aLocale: LCID = LOCALE_USER_DEFAULT{$ENDIF}): Integer;{$IFDEF MSWINDOWS} -var - dwCmpFlags: integer; - ls1,ls2: AnsiString; -begin - SetLastError(0); - if aCaseInsensitive then - dwCmpFlags := NORM_IGNORECASE - else - dwCmpFlags := 0; - if Win32Platform = VER_PLATFORM_WIN32_NT then - Result := CompareStringW(ALocale, dwCmpFlags, PWideChar(S1), Length(S1), PWideChar(S2), Length(S2)) - 2 - else begin - ls1:= s1; - ls2:= s2; - Result := CompareStringA(ALocale, dwCmpFlags, PAnsiChar(ls1), Length(ls1), PAnsiChar(ls2), Length(ls2)) - 2 - end; - if GetLastError <>0 then RaiseLastOSError; -end; -{$ENDIF} -{$IFDEF LINUX} -var - UCS4_S1, UCS4_S2: UCS4String; - ls1,ls2: WideString; -begin - if aCaseInsensitive then begin - ls1:= WideUpperCase(s1); - ls2:= WideUpperCase(s2); - end else begin - ls1:=s1; - ls2:=s2; - end; - UCS4_S1 := WideStringToUCS4String(ls1); - UCS4_S2 := WideStringToUCS4String(ls2); - {$IFDEF FPC} - Result:=wcscoll(pwchar_t(UCS4_S1),pwchar_t(UCS4_S2)); - {$ELSE} - SetLastError(0); - Result := wcscoll(PUCS4Chars(UCS4_S1), PUCS4Chars(UCS4_S2)); - if GetLastError <> 0 then RaiseLastOSError; - {$ENDIF} -end; -{$ENDIF} - -function ROVariantsEqual(const A, B: Variant): Boolean; - - function VarCompareArray(const A, B: Variant): TVariantRelationship; - const - varArrayOfByte = varArray or varByte; - var - lALen, lBLen: Integer; - lAPtr, lBPtr: Pointer; - begin - // The only type of variant arrays we expect to find is variant array of byte - // All other types are not supported by this simple procedure - Result := vrNotEqual; - if VarIsType(A, varArrayOfByte) and VarIsType(B, varArrayOfByte) then - begin - lALen := VarArrayHighBound(A, 1) - VarArrayLowBound(A, 1) + 1; - lBLen := VarArrayHighBound(B, 1) - VarArrayLowBound(B, 1) + 1; - if lALen <> lBLen then Exit; - - lAPtr := nil; - lBPtr := nil; - try - lAPtr := VarArrayLock(A); - lBPtr := VarArrayLock(B); - if CompareMem(lAPtr, lBPtr, lALen) then Result := vrEqual; - finally - if Assigned(lAPtr) then VarArrayUnlock(A); - if Assigned(lBPtr) then VarArrayUnlock(B); - end; - end; - end; - -begin - if VarIsArray(A) xor VarIsArray(B) then - Result := False - else - if VarIsArray(A) and VarIsArray(B) then - Result := VarCompareArray(A, B) = vrEqual - else - if (VarType(A) = VarType(B)) and (VarType(A)= varOleStr) then - Result:= ROWideCompare(VarToWideStr(A),VarToWideStr(B),False) =0 - else - Result := VarCompareValue(A, B) = vrEqual; -end; - - - -{ EROException } - -destructor EROException.Destroy; -var props : PPropList; - cnt, i : integer; - sub : TObject; -begin - cnt := GetTypeData(ClassInfo).PropCount; - if (cnt=0) then Exit; - - GetMem(props, cnt*SizeOf(PPropInfo)); - try - cnt := GetPropList(ClassInfo, [tkClass], props); - - for i := 0 to (cnt-1) do begin - with props^[i]^ do - if (PropType^.Kind=tkClass) then begin - sub := GetObjectProp(Self, Name); - sub.Free; - end; - end; - finally - FreeMem(props, cnt*SizeOf(PPropInfo)); - end; - - inherited; -end; - -procedure EROException.ReadException(ASerializer: TObject); -begin - ReadObjectFromSerializer(TROSerializer(ASerializer),Self); -end; - -procedure EROException.WriteException(ASerializer: TObject); -begin - WriteObjectToSerializer(TROSerializer(ASerializer),Self); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClient.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClient.pas deleted file mode 100644 index f420df5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClient.pas +++ /dev/null @@ -1,1772 +0,0 @@ -unit uROClient; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF RemObjects_UseEncryption}uROEncryption,{$ENDIF} - Classes, SysUtils, TypInfo, uROTypes, - uRODL, uROSerializer, uROClientIntf, uROClasses; - -const - EmptyGUID : TGUID = '{00000000-0000-0000-0000-000000000000}'; - - MetadataRequestIDLength = 4; - MetadataRequestID : array[0..MetadataRequestIDLength-1] of char = 'RODL'; - - ProbeRequestIDLength = 5; - ProbeRequestID : array[0..ProbeRequestIDLength-1] of char = 'PROBE'; - - ProbeResponseIDLength = 8; - ProbeResponseID : array[0..ProbeResponseIDLength-1] of char = 'PROBEDOK'; - - name_Exception = 'ROException'; // User by the message components to write exceptions - DataFormatXml = 'text/xml; charset="utf-8"'; - DataFormatBinary = 'application/binary'; - -type - TROCustomRODLReader = class; - TROMessage = class; - TROTransportChannel = class; - - EROChannelBusy = class(EROException); - - EROUnknownType = class(EROUnknownItem); - EROMessageTooLarge = class(EROException); - - EROSessionNotFound = class(EROException); - EROSessionExpired = class(EROSessionNotFound); - SessionNotFoundException = class(EROSessionNotFound); - - TROEventSinkType = (esWriter, esReader); - { TROProxy } - - TROProxy = class(TInterfacedObject, IUnknown) - private - fMessage, - fTransportChannel : pointer; - // Weak references because the Application frees the components before ref counting steps in. This results in AVs - - fInterfaceName : string; - - function _GetMessage: IROMessage; // cannot use "GetMessage" name for C++Builder compatibility - function GetTransportChannel: IROTransportChannel; - function GetInterfaceName:string; - - protected - function __GetInterfaceName:string; virtual; abstract; - - public - constructor Create(const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); overload; virtual; - - // Added to support polymorphic invocation in Data Abstract. Shouldn't be used in regular situations. - constructor Create(const anInterfaceName : string; - const aMessage : IROMessage; - const aTransportChannel : IROTransportChannel); overload; virtual; - - property __Message : IROMessage read _GetMessage; - property __TransportChannel : IROTransportChannel read GetTransportChannel; - property __InterfaceName:string read GetInterfaceName; - end; - - TROProxyClass = class of TROProxy; - - { TROComponent } - TROComponent = class(TComponent) - end; - - { TROMessageAwareComponent } - TROMessageAwareComponent = class(TROComponent) - private - fMessage: TROMessage; - - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure SetMessage(const Value: TROMessage); virtual; - - public - property Message : TROMessage read fMessage write SetMessage; - end; - - { TROChannelAwareComponent } - TROChannelAwareComponent = class(TROMessageAwareComponent) - private - fChannel: TROTransportChannel; - - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure SetChannel(const Value: TROTransportChannel); virtual; - - public - property Channel : TROTransportChannel read fChannel write SetChannel; - end; - - { TROMessage } - TStreamOperation = procedure(aStream : TStream) of object; - - TROServerExceptionEvent = procedure(anException : Exception; var RaiseException: boolean) of object; - TROInitializeMessageEvent = procedure(Sender : TROMessage; const aTransport : IROTransport; const anInterfaceName, aMessageName : string) of object; - TROFinalizeMessageEvent = procedure(Sender : TROMessage) of object; - TROWriteMessageParameterEvent = procedure(Sender : TROMessage; const aName : string; aTypeInfo : PTypeInfo; const DataRef : pointer; Attributes : TParamAttributes) of object; - TROReadMessageParameterEvent = procedure(Sender : TROMessage; const aName : string; aTypeInfo : PTypeInfo; const DataRef : pointer; Attributes : TParamAttributes) of object; - TROWriteExceptionEvent = procedure(Sender : TROMessage; aStream: TStream; E : Exception) of object; - - - { TROCustomRODLReader } - TROReadRODLEvent = procedure(aRODLReader : TROCustomRODLReader; aStream : TStream) of object; - - TROCustomRODLReader = class(TROComponent) - private - fOnBeforeReadRODL: TROReadRODLEvent; - fOnAfterReadRODL: TROReadRODLEvent; - - protected - procedure DoReadRODLResource(aStream : TStream); virtual; abstract; - - public - procedure ReadRODLResource(aStream : TStream); - - published - property OnBeforeReadRODL : TROReadRODLEvent read fOnBeforeReadRODL write fOnBeforeReadRODL; - property OnAfterReadRODL : TROReadRODLEvent read fOnAfterReadRODL write fOnAfterReadRODL; - end; - - { TROMessage } - TROMessage = class(TROComponent, IUnknown, IROMessage, IROMessageCloneable, IROModuleInfo) - private - fSerializer : TROSerializer; - fMessageName, - fInterfaceName : string; - fOnReadFromStream: TStreamOperation; - fOnWriteToStream: TStreamOperation; - fOnServerException: TROServerExceptionEvent; - - fRefCount:integer; - fReferenceCounted:boolean; - fClientID : TGUID; - fRODLReader: TROCustomRODLReader; - fOnFinalizeMessage: TROFinalizeMessageEvent; - fOnInitializeMessage: TROInitializeMessageEvent; - fOnReadMessageParameter: TROReadMessageParameterEvent; - fOnWriteMessageParameter: TROWriteMessageParameterEvent; - fOnWriteException: TROWriteExceptionEvent; - fAddServerExceptionPrefix: boolean; - - procedure SetRODLReader(const Value: TROCustomRODLReader); - procedure TriggerOnWriteToStream(aStream: TStream); - - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - - constructor CreateRefCountedClone(iMessage:TROMessage); virtual; - - procedure ProcessException; - function ReadException : Exception; virtual; abstract; - function CreateException(const aExceptionName, aMessage: string): Exception; - - { Internals } - procedure InitObject; virtual; - function CreateSerializer : TROSerializer; virtual; abstract; - - { IROUnknown } - - function _AddRef:integer; stdcall; - function _Release:integer; stdcall; - - { IROMessage } - procedure Initialize(const aTransport : IROTransport; const anInterfaceName, aMessageName : string; aType: TMessageType); overload; virtual; - procedure Initialize(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string; aType: TMessageType); overload; virtual; - procedure InitializeRead(const aTransport : IROTransport); virtual; - - procedure InitializeRequestMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeResponseMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeEventMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeExceptionMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); virtual; - - procedure Finalize; virtual; - - {$IFDEF DOTNET} - {$ELSE} - procedure Write(const aName : string; aTypeInfo : PTypeInfo; const Ptr; Attributes : TParamAttributes); virtual; - procedure Read(const aName : string; aTypeInfo : PTypeInfo; var Ptr; Attributes : TParamAttributes); virtual; - {$ENDIF} - - function GetClientID : TGUID; - procedure SetClientID(const Value : TGUID); - - function GetMessageName : string; - function GetInterfaceName : string; - - procedure SetInterfaceName(const aValue : string); - procedure SetMessageName(const aValue : string); - - procedure WriteToStream(aStream : TStream); virtual; - procedure ReadFromStream(aStream : TStream); overload; virtual; - procedure ReadFromStream(aStream : TStream; var aFreeStream: Boolean); overload; virtual; - - procedure WriteException(aStream : TStream; anException : Exception); virtual; - - procedure FreeStream; virtual; - function GetMessageType: TMessageType; virtual; - - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteXml(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteGuid(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDecimal(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1); - { Readers } - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadXml(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadGuid(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadDecimal(const aName : string; var Ref; ArrayElementId : integer = -1); - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1); - { IROModuleInfo } - - procedure GetModuleInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); virtual; - procedure GetRodlInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); overload; - - { IROMessageClonable } - function Clone: IROMessage; - procedure SetAttributes(aTransport: IROTransport; - const aNames: array of String; const aValues: array of String); virtual; - procedure UnsetAttributes(aTransport: IROTransport); virtual; - public - - constructor Create; reintroduce; overload; virtual; - constructor Create(aOwner : TComponent); overload; override; - destructor Destroy; override; - - procedure Assign(iSource:TPersistent); override; - - property Serializer : TROSerializer read fSerializer; - - property MessageName : string read GetMessageName write SetMessageName; - property InterfaceName : string read GetInterfaceName write SetInterfaceName; - - property ClientID:TGuid read GetClientID write SetClientID; - function IsValidMessage(aData: PChar; aLength: Integer): boolean; virtual; abstract; - procedure CheckProperties; virtual; - published - property OnWriteToStream : TStreamOperation read fOnWriteToStream Write fOnWriteToStream; - property OnReadFromStream : TStreamOperation read fOnReadFromStream Write fOnReadFromStream; - property OnServerException : TROServerExceptionEvent read fOnServerException write fOnServerException; - - property RODLReader : TROCustomRODLReader read fRODLReader write SetRODLReader; - property AddServerExceptionPrefix: boolean read fAddServerExceptionPrefix write fAddServerExceptionPrefix default true; - - property OnInitializeMessage : TROInitializeMessageEvent read fOnInitializeMessage write fOnInitializeMessage; - property OnFinalizeMessage : TROFinalizeMessageEvent read fOnFinalizeMessage write fOnFinalizeMessage; - property OnWriteMessageParameter : TROWriteMessageParameterEvent read fOnWriteMessageParameter write fOnWriteMessageParameter; - property OnReadMessageParameter : TROReadMessageParameterEvent read fOnReadMessageParameter write fOnReadMessageParameter; - property OnWriteException: TROWriteExceptionEvent read fOnWriteException write fOnWriteException; - - end; - - TROMessageClass = class of TROMessage; - ExceptionClass = class of Exception; - - { TROTransportChannel } - TRODispatchOption = (doFaultTolerant, doLoadBalanced); - TRODispatchOptions = set of TRODispatchOption; - - TROBeginProbeServersEvent = procedure(Sender : TROTransportChannel) of object; - TROEndProbeServersEvent = procedure(Sender : TROTransportChannel; ProbedCount, EnabledCount, DisabledCount : integer) of object; - - TROBeginProbeServerEvent = procedure(Sender : TROTransportChannel; aServerLocator : TROServerLocator) of object; - TROEndProbeServerEvent = procedure(Sender : TROTransportChannel; aServerLocator : TROServerLocator; Failed : boolean) of object; - - TStreamDispatch = procedure(aStream : TStream) of object; - - TServerLocatorAssignment = procedure(Sender : TROTransportChannel; - aLocator : TROServerLocator; - aException : Exception) of object; - - TProgressType = (ptUnknown, ptStart, ptInProgress, ptDone); - TProgressDirection = (pdUnknown, pdSending, pdReceiving); - TProgressEvent = procedure(iSender:TObject; iType:TProgressType; iDirection:TProgressDirection; iTransferred,iTotal:integer) of object; - - TROExceptionEvent = procedure(Sender: TROTransportChannel; anException: Exception; var aRetry: Boolean) of object; - - - { TROBaseConnection } - TROBaseConnection = class(TROComponent) - private - {$IFDEF RemObjects_UseEncryption} - fEncryption: TROEncryption; - procedure SetEncryption(NewValue: TROEncryption); - {$ENDIF} - protected - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - - {$IFDEF RemObjects_UseEncryption} - procedure DoEncryption(iPlainText, iCipherText: TStream); virtual; - procedure DoDecryption(iCipherText, iPlainText: TStream); virtual; - {$ENDIF} - - published - {$IFDEF RemObjects_UseEncryption} - property Encryption: TROEncryption read fEncryption write SetEncryption; - {$ENDIF} - end; - - - {$ifdef REMOBJECTS_UseEncryption} - TROTransportChannel = class(TROBaseConnection, IROTransportChannel, IROTransport, IROMetadataReader) - {$else} - TROTransportChannel = class(TComponent, IROTransportChannel, IROTransport, IROMetadataReader) - {$endif} - private - fOnReceiveStream : TStreamDispatch; - fOnSendStream : TStreamDispatch; - fBusy: boolean; - fOnProgress: TProgressEvent; - fServerLocators: TROServerLocatorCollection; - fOnServerLocatorAssignment : TServerLocatorAssignment; - fDispatchOptions: TRODispatchOptions; - - fCurrentLocator : TROServerLocator; - - fLoadBalancerLocatorIdx, - fFaultToleranceLocatorIdx : integer; - fProbingClone : TROTransportChannel; - - fProbeTimer : TROThreadTimer; - fLoadedProbeServers, - fProbeServers: boolean; - fProbeFrequency: cardinal; - fOnBeforeProbingServers: TROBeginProbeServersEvent; - fOnAfterProbingServers: TROEndProbeServersEvent; - fOnBeforeProbingServer: TROBeginProbeServerEvent; - fOnAfterProbingServer: TROEndProbeServerEvent; - fSynchronizedProbing: Boolean; - fOnLoginNeeded: TROExceptionEvent; - fOnException: TROExceptionEvent; - fThreadSafe: Boolean; - - { IROTransportChannel } - procedure Dispatch(aRequest, aResponse : TStream); reintroduce; overload; - - procedure SetProbeFrequency(const Value: cardinal); - procedure SetProbeServers(const Value: boolean); - procedure SetServerLocators(const Value: TROServerLocatorCollection); - procedure SetCurrentLocator(const Value: TROServerLocator); - procedure OnProbeTimerTick(Dummy: Cardinal); - procedure SetSynchronizedProbing(const Value: Boolean); - protected - property ThreadSafe: Boolean read fThreadSafe write fThreadSafe; - procedure Loaded; override; - { IROTransport } - function GetTransportObject : TObject; virtual; abstract; - - { IROTransportChannel } - procedure Dispatch(aMessage: IROMessage); reintroduce; overload; - function Probe(aServerLocator : TROServerLocator) : boolean; - procedure ProbeAll; - procedure SetServerLocator(aServerLocator : TROServerLocator; anException : Exception = NIL); - - { IROMetadataReader } - procedure RetrieveMetadata(out Metadata : TStream); virtual; - procedure RetrieveRODL(out RODLLibrary : TRODLLibrary); - - { TROTransportChannel } - procedure IntDispatch(aRequest, aResponse : TStream); virtual; abstract; - procedure IntSetServerLocator(aServerLocator : TROServerLocator); virtual; abstract; - - procedure TriggerProgress(iType:TProgressType; iDirection:TProgressDirection; iTransfered,iTotal:integer); - - procedure BeforeDispatch(aMessage: IROMessage); virtual; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure Assign(aSource : TPersistent); override; - - property CurrentLocator : TROServerLocator read fCurrentLocator write SetCurrentLocator; - - property Busy : boolean read fBusy; - property LoadBalancerLocatorIdx : Integer read fLoadBalancerLocatorIdx write fLoadBalancerLocatorIdx; - property FaultToleranceLocatorIdx : integer read fFaultToleranceLocatorIdx write fFaultToleranceLocatorIdx; - procedure CheckProperties; virtual; - public - property SynchronizedProbing: Boolean read fSynchronizedProbing write SetSynchronizedProbing default true; - property OnSendStream : TStreamDispatch read fOnSendStream write fOnSendStream; - property OnReceiveStream : TStreamDispatch read fOnReceiveStream write fOnReceiveStream; - property OnServerLocatorAssignment : TServerLocatorAssignment read fOnServerLocatorAssignment write fOnServerLocatorAssignment; - property ProbeServers : boolean read fProbeServers write SetProbeServers default false; - property ProbeFrequency : cardinal read fProbeFrequency write SetProbeFrequency default 60000; - property OnBeforeProbingServers : TROBeginProbeServersEvent read fOnBeforeProbingServers write fOnBeforeProbingServers; - property OnAfterProbingServers : TROEndProbeServersEvent read fOnAfterProbingServers write fOnAfterProbingServers; - property OnBeforeProbingServer : TROBeginProbeServerEvent read fOnBeforeProbingServer write fOnBeforeProbingServer; - property OnAfterProbingServer : TROEndProbeServerEvent read fOnAfterProbingServer write fOnAfterProbingServer; - property OnLoginNeeded : TROExceptionEvent read fOnLoginNeeded write fOnLoginNeeded; - property OnProgress:TProgressEvent read fOnProgress write fOnProgress; - property ServerLocators : TROServerLocatorCollection read fServerLocators write SetServerLocators; - property DispatchOptions : TRODispatchOptions read fDispatchOptions write fDispatchOptions; - published - property OnFailure : TROExceptionEvent read fOnException write fOnException; { deprecated } - property OnException : TROExceptionEvent read fOnException write fOnException; - end; - - TROTransportChannelClass = class of TROTransportChannel; - - { IROObjectRetainer } - IROObjectRetainer = interface - ['{1DFCCCAB-CD61-415F-ADFB-258C067E9A59}'] - procedure RetainObject(const anObject : TObject); - procedure ReleaseObject(const anObject : TObject); - function IsRetained(const anObject : TObject) : boolean; - end; - - { TROObjectDisposer } - TROObjectDisposer = class(TList) - private - fService : IInterface; - - public - constructor Create(const aService : IInterface); - destructor Destroy; override; - - procedure Add(iObject: TObject); - end; - -{ Message class registration routines } -procedure RegisterMessageClass(aROMessageClass : TROMessageClass); -procedure UnregisterMessageClass(aROMessageClass : TROMessageClass); -function GetMessageClass(Index : integer) : TROMessageClass; -function GetMessageClassCount : integer; -function FindMessageClass(const aName : string; Silent : boolean = FALSE) : TROMessageClass; -procedure ListMessageClasses(aList : TStrings); - -{ Proxy registration } -procedure RegisterProxyClass(const anInterfaceID : TGUID; aProxyClass : TROProxyClass); -procedure UnregisterProxyClass(const anInterfaceID : TGUID); -function FindProxyClass(const anInterfaceID : TGUID; Silent : boolean = FALSE) : TROProxyClass; -procedure ListProxyClasses(aList : TStrings); - -{ Exception registration } -function GetExceptionClass(const anExceptionClassName : string) : ExceptionClass; -procedure RegisterExceptionClass(anExceptionClass : ExceptionClass); -procedure UnregisterExceptionClass(anExceptionClass : ExceptionClass); - -{ Transport channels registration } -procedure RegisterTransportChannelClass(aTransportChannelClass : TROTransportChannelClass); -procedure UnregisterTransportChannelClass(aTransportChannelClass : TROTransportChannelClass); -function FindTransportChannelClass(const aName : string; Silent : boolean = FALSE) : TROTransportChannelClass; -procedure ListTransportChannelClasses(aList : TStrings); - -procedure GetRodl(aStream: TStream; const aTransport : IROTransport; var aFormat : TDataFormat; ARODLReader: TROCustomRODLReader = nil); -function GetRodlLibrary(ARodlReader: TROCustomRODLReader = nil): TRODLLibrary; - -implementation - -uses {$IFDEF MSWINDOWS}Windows, {$ENDIF} - {$IFDEF KYLIX}Types, Libc, {$ENDIF} - {$IFDEF DEBUG_REMOBJECTS}eDebugServer,{$ENDIF} - uRORes, uROHTTPTools, uRODLToXML; - -var _MessageClasses : TClassList; - _ExceptionClasses : TClassList; - -procedure RegisterMessageClass(aROMessageClass : TROMessageClass); -begin - _MessageClasses.Add(aROMessageClass); - Classes.RegisterClass(aROMessageClass); -end; - -procedure UnregisterMessageClass(aROMessageClass : TROMessageClass); -begin - _MessageClasses.Remove(aROMessageClass); - Classes.UnRegisterClass(aROMessageClass); -end; - -function GetMessageClass(Index : integer) : TROMessageClass; -begin - result := TROMessageClass(_MessageClasses[Index]); -end; - -function GetMessageClassCount : integer; -begin - result := _MessageClasses.Count -end; - -function FindMessageClass(const aName : string; Silent : boolean = FALSE) : TROMessageClass; -var i: integer; -begin - result := NIL; - for i := 0 to (_MessageClasses.Count-1) do - if SameText(TROMessageClass(_MessageClasses[i]).ClassName, aName) then begin - result := TROMessageClass(_MessageClasses[i]); - Exit; - end; - - if not Silent - then RaiseError(err_UnknownMessageClass, [aName]); -end; - -procedure ListMessageClasses(aList : TStrings); -var i: integer; -begin - for i := 0 to (_MessageClasses.Count-1) do - aList.Add(TROMessageClass(_MessageClasses[i]).ClassName); -end; -var _ProxyClasses, - _TransportChannels : TStringList; - -{ Transport channels registration } -procedure RegisterTransportChannelClass(aTransportChannelClass : TROTransportChannelClass); -begin - if _TransportChannels.IndexOf(aTransportChannelClass.ClassName)<0 then begin - _TransportChannels.AddObject(aTransportChannelClass.ClassName, TObject(aTransportChannelClass)); - Classes.RegisterClass(aTransportChannelClass); - end; -end; - -procedure UnregisterTransportChannelClass(aTransportChannelClass : TROTransportChannelClass); -var idx : integer; -begin - idx := _TransportChannels.IndexOf(aTransportChannelClass.ClassName); - if idx>=0 then begin - _TransportChannels.Delete(idx); - Classes.UnregisterClass(aTransportChannelClass); - end; -end; - -function FindTransportChannelClass(const aName : string; Silent : boolean = FALSE) : TROTransportChannelClass; -var idx : integer; -begin - result := nil; - idx := _TransportChannels.IndexOf(aName); - if (idx>=0) - then result := TROTransportChannelClass(_TransportChannels.Objects[idx]) - else begin - if not Silent - then RaiseError(err_UnknownTransportChannelClass, [aName]) - end; -end; - -procedure ListTransportChannelClasses(aList : TStrings); -begin - aList.Assign(_TransportChannels); -end; - -{ Proxy registration } -procedure RegisterProxyClass(const anInterfaceID : TGUID; aProxyClass : TROProxyClass); -var s : string; -begin - s := GUIDToString(anInterfaceID); - if _ProxyClasses.IndexOf(s)<0 - then _ProxyClasses.AddObject(GUIDToString(anInterfaceID), TObject(aProxyClass)) -end; - -procedure UnregisterProxyClass(const anInterfaceID : TGUID); -var idx : integer; - s : string; -begin - s := GUIDToString(anInterfaceID); - idx := _ProxyClasses.IndexOf(s); - if (idx>=0) - then _ProxyClasses.Delete(idx) -end; - -function FindProxyClass(const anInterfaceID : TGUID; Silent : boolean = FALSE) : TROProxyClass; -var idx : integer; - s : string; -begin - result := NIL; - s := GUIDToString(anInterfaceID); - idx := _ProxyClasses.IndexOf(s); - if (idx>=0) - then result := TROProxyClass(_ProxyClasses.Objects[idx]) - else begin - if not Silent - then RaiseError(err_UnknownProxyInterface, [s]) - end; -end; - -procedure ListProxyClasses(aList : TStrings); -begin - aList.Assign(_ProxyClasses); -end; - -{ Exceptions registration } -function GetExceptionClass(const anExceptionClassName : string) : ExceptionClass; -var i : integer; -begin - result := EROUnregisteredServerException; - - for i := 0 to (_ExceptionClasses.Count-1) do - {$IFDEF DOTNET} - if (ExceptionClass(_ExceptionClasses[i]).ClassName = anExceptionClassName) then begin - {$ELSE} - if (CompareText(ExceptionClass(_ExceptionClasses[i]).ClassName, anExceptionClassName)=0) then begin - {$ENDIF DOTNET} - result := ExceptionClass(_ExceptionClasses[i]); - Exit; - end; -end; - -procedure RegisterExceptionClass(anExceptionClass : ExceptionClass); -begin - _ExceptionClasses.Add(anExceptionClass) -end; - -procedure UnregisterExceptionClass(anExceptionClass : ExceptionClass); -begin - _ExceptionClasses.Remove(anExceptionClass) -end; - -{ TROProxy } - -constructor TROProxy.Create(const aMessage: IROMessage; - const aTransportChannel: IROTransportChannel); -begin - inherited Create; - fMessage := pointer(aMessage); - fTransportChannel := pointer(aTransportChannel); -end; - -constructor TROProxy.Create(const anInterfaceName: string; - const aMessage: IROMessage; - const aTransportChannel: IROTransportChannel); -begin - Create(aMessage, aTransportChannel); - - fInterfaceName := anInterfaceName; -end; - -function TROProxy.GetInterfaceName: string; -begin - if (fInterfaceName<>'') - then result := fInterfaceName // If the proxy has been created specifiing one then that is the strongest - else result := __GetInterfaceName; -end; - -function TROProxy._GetMessage: IROMessage; -begin - result := IROMessage(fMessage); -end; - -function TROProxy.GetTransportChannel: IROTransportChannel; -begin - result := IROTransportChannel(fTransportChannel); -end; - -{ TROMessageAwareComponent } - -procedure TROMessageAwareComponent.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited; - - if (Operation<>opRemove) then Exit; - - if (AComponent=fMessage) then fMessage := NIL; -end; - -procedure TROMessageAwareComponent.SetMessage(const Value: TROMessage); -begin - if (fMessage=Value) then Exit; - - fMessage := Value; - if (fMessage<>NIL) then fMessage.FreeNotification(Self); -end; - -{ TROMessage } -constructor TROMessage.Create(aOwner : TComponent); -begin - inherited Create(aOwner); - InitObject; -end; - -constructor TROMessage.Create; -begin - inherited Create(NIL); - InitObject; -end; - -function TROMessage.CreateException(const aExceptionName, aMessage: string): Exception; -var - lExceptionClass: ExceptionClass; -begin - lExceptionClass := GetExceptionClass(aExceptionName); - - if Assigned(lExceptionClass) then begin - // The exception was registered so we can reraise the right type - if AddServerExceptionPrefix then - result := lExceptionClass.Create(Format(str_ExceptionReraisedFromServer,[aMessage])) - else - result := lExceptionClass.Create(aMessage); - - end - else begin - // Un-registered exception. We fire a EROUnregisteredServerException - if AddServerExceptionPrefix then - result := EROUnregisteredServerException.CreateFmt(str_ExceptionOnServer, [aExceptionName, aMessage]) - else - result := EROUnregisteredServerException.Create(aMessage); - end; -end; - -destructor TROMessage.Destroy; -begin - if Assigned(fSerializer) - then FreeAndNIL(fSerializer); - - inherited; -end; - -procedure TROMessage.InitObject; -begin - fAddServerExceptionPrefix := true; - fSerializer := CreateSerializer; - fClientID := NewGuid(); - //CreateGUID(fClientID); -end; - -procedure TROMessage.Initialize(const aTransport : IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); -begin - if Assigned(fOnInitializeMessage) then fOnInitializeMessage(Self, aTransport, anInterfaceName, aMessageName); - - fInterfaceName := anInterfaceName; - fMessageName := aMessageName; -end; - -procedure TROMessage.Initialize(const aTransport: IROTransport; const aLibraryName, anInterfaceName, aMessageName: string; aType: TMessageType); -begin - Initialize(aTransport, anInterfaceName, aMessageName, aType); -end; - -procedure TROMessage.Finalize; -begin - //FreeAndNIL(fSerializer); - if Assigned(fOnFinalizeMessage) then fOnFinalizeMessage(Self); -end; - -function TROMessage.GetInterfaceName: string; -begin - result := fInterfaceName -end; - -function TROMessage.GetMessageName: string; -begin - result := fMessageName -end; - -procedure TROMessage.SetInterfaceName(const aValue: string); -begin - fInterfaceName := aValue -end; - -procedure TROMessage.SetMessageName(const aValue: string); -begin - fMessageName := aValue -end; - -procedure TROMessage.GetModuleInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); -begin - GetRodlInfo(aStream, aTransport, aFormat); -end; - -procedure TROMessage.GetRodlInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); -begin - GetRodl(aStream, aTransport, aFormat, fRODLReader); -end; - -procedure GetRodl(aStream: TStream; const aTransport : IROTransport; var aFormat : TDataFormat; ARODLReader: TROCustomRODLReader); -var rs : TResourceStream; - instance : cardinal; -begin - { ToDo: investigate if we should maybe use hMainInstance instead? the current one - breaks with Packages, hMainInstance wouldn't work with DLLs. Since packages - are currently not supported, i suggest we keep this the way it is? mh. - - Alef: the following "IF" seems to nicely solve the problem... } - if Assigned(ARODLReader) then - ARODLReader.ReadRODLResource(aStream) - else begin - {$IFNDEF FPC} - if ModuleIsPackage then - instance := MainInstance - else - {$ENDIF} - instance := hInstance; - - rs := TResourceStream.Create(instance, res_RODLFile, RT_RCDATA); - try - rs.SaveToStream(aStream); - finally - rs.Free; - end; - end; - - if aTransport <> nil then - SetHTTPInfo(aTransport, DataFormatXml); - aFormat := DataFormatXml; -end; - -function GetRodlLibrary(ARodlReader: TROCustomRODLReader): TRODLLibrary; -var - lStream: TMemoryStream; - lDummy: TDataFormat; - lXmlToRodl: TXMLToRODL; -begin - lStream := TMemoryStream.Create; - lXmlToRodl := TXMLToRODL.Create; - try - GetRodl(lStream, nil, lDummy, ARodlReader); - lStream.Position := 0; - result := lXmlToRodl.Read(lStream); - finally - lXmlToRodl.Free; - lStream.Free; - end; -end; - - -procedure TROMessage.ReadFromStream(aStream: TStream); -begin - if Assigned(fOnReadFromStream) then fOnReadFromStream(aStream); - aStream.Position := 0; // Just in case -end; - -procedure TROMessage.WriteToStream(aStream: TStream); -begin - TriggerOnWriteToStream(aStream); -end; - -procedure TROMessage.TriggerOnWriteToStream(aStream: TStream); -begin - if Assigned(fOnWriteToStream) then begin - aStream.Position := 0; // Just in case - fOnWriteToStream(aStream); - end; - aStream.Position := 0; // Just in case -end; - -{$IFDEF DOTNET} -{$ELSE} -procedure TROMessage.Read(const aName: string; aTypeInfo: PTypeInfo; - var Ptr; Attributes: TParamAttributes); -begin - Serializer.Read(aName, aTypeInfo, Ptr); - if Assigned(fOnReadMessageParameter) then fOnReadMessageParameter(Self, aName, aTypeInfo, pointer(Ptr), Attributes); -end; - -procedure TROMessage.Write(const aName: string; aTypeInfo: PTypeInfo; - const Ptr; Attributes: TParamAttributes); -begin - if Assigned(fOnWriteMessageParameter) then fOnWriteMessageParameter(Self, aName, aTypeInfo, pointer(Ptr), Attributes); - Serializer.Write(aName, aTypeInfo, Ptr); -end; -{$ENDIF DOTNET} - -procedure TROMessage.ProcessException; -var E: Exception; - raiseException: boolean; -begin - E := ReadException; - raiseException := TRUE; - if Assigned(E) then begin - if Assigned(fOnServerException) then fOnServerException(E, raiseException); - - if raiseException then raise E; - end; -end; - -function TROMessage.Clone: IROMessage; -begin - result := TROMessageClass(ClassType).CreateRefCountedClone(self) as IROMessage; -end; - -constructor TROMessage.CreateRefCountedClone(iMessage: TROMessage); -begin - Create(); - Assign(iMessage); - fReferenceCounted := true; - - //Todo: implement reference counting; -end; - -procedure TROMessage.Assign(iSource: TPersistent); -var lSource:TROMessage; -begin - if Assigned(iSource) then begin - - // might very well be a descendand, too - if not (iSource is ClassType) - then RaiseError('Cannot Assign a %s t a %s', [ClassName,iSource.ClassName]); - - lSource := TROMessage(iSource); - - Self.RODLReader := lSource.RODLReader; - Self.OnWriteToStream := lSource.OnWriteToStream; - Self.OnReadFromStream := lSource.OnReadFromStream; - Self.OnServerException := lSource.OnServerException; - Self.OnWriteException := lSource.OnWriteException; - - Self.OnInitializeMessage := lSource.OnInitializeMessage; - Self.OnFinalizeMessage := lSource.OnFinalizeMessage; - Self.OnWriteMessageParameter := lSource.OnWriteMessageParameter; - Self.OnReadMessageParameter := lSource.OnReadMessageParameter; - end; -end; - -function TROMessage._AddRef: integer; -begin - result := InterlockedIncrement(fRefCount); -end; - -function TROMessage._Release: integer; -begin - result := InterlockedDecrement(fRefCount); - - if (fRefCount = 0) and fReferenceCounted then Free(); -end; - -function TROMessage.GetClientID: TGUID; -begin - result := fClientID; -end; - -procedure TROMessage.SetClientID(const Value: TGUID); -begin - fClientID := Value -end; - -procedure TROMessage.SetRODLReader(const Value: TROCustomRODLReader); -begin - fRODLReader := Value; - if Assigned(fRODLReader) then fRODLReader.FreeNotification(Self); -end; - -procedure TROMessage.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation=opRemove) and (aComponent=fRODLReader) - then fRODLReader := NIL; -end; - -procedure TROMessage.WriteException(aStream: TStream; - anException: Exception); -begin - if Assigned(fOnWriteException) then begin - fOnWriteException(Self, aStream, anException); - end; - TriggerOnWriteToStream(aStream); -end; - -procedure TROMessage.InitializeRequestMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: string); -begin - Initialize(aTransport, aLibraryName, anInterfaceName,aMessageName, mtRequest); -end; - -procedure TROMessage.InitializeResponseMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: string); -begin - Initialize(aTransport, aLibraryName, anInterfaceName,aMessageName, mtResponse); -end; - -procedure TROMessage.InitializeEventMessage(const aTransport: IROTransport; - const aLibraryName, anInterfaceName, aMessageName: string); -begin - Initialize(aTransport, aLibraryName, anInterfaceName,aMessageName, mtEvent); -end; - -procedure TROMessage.ReadFromStream(aStream: TStream; - var aFreeStream: Boolean); -begin - aFreeStream := True; - ReadFromStream(aStream); -end; - -procedure TROMessage.FreeStream; -begin - -end; - -function TROMessage.GetMessageType: TMessageType; -begin - Result := mtRequest; -end; - -procedure TROMessage.InitializeExceptionMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: string); -begin - // do nothing here; descendents can override this to set the types -end; - -procedure TROMessage.SetAttributes(aTransport: IROTransport; const aNames, - aValues: array of String); -begin - // overridable -end; - -procedure TROMessage.UnsetAttributes(aTransport: IROTransport); -begin - // overridable -end; - -procedure TROMessage.InitializeRead(const aTransport: IROTransport); -begin - // do nothing. -end; - -procedure TROMessage.CheckProperties; -begin -// nothing -end; - -procedure TROMessage.ReadDateTime(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadDateTime(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadDecimal(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadDecimal(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId: integer); -begin - fSerializer.ReadEnumerated(aName, anEnumTypeInfo, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadDouble(const aName: string; aFloatType: TFloatType; - var Ref; ArrayElementId: integer); -begin - fSerializer.ReadDouble(aName, aFloatType, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadGuid(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadGuid(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadInt64(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadInt64(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadInteger(const aName: string; anOrdType: TOrdType; - var Ref; ArrayElementId: integer); -begin - fSerializer.ReadInteger(aName, anOrdType, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadUTF8String(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -begin - fSerializer.ReadUTF8String(aName, Ref, ArrayElementId, iMaxLength); -end; - -procedure TROMessage.ReadVariant(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadVariant(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadWideString(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -begin - fSerializer.ReadWideString(aName, Ref, ArrayElementId, iMaxLength); -end; - -procedure TROMessage.ReadXml(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadXml(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteDateTime(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteDateTime(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteDecimal(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteDecimal(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId: integer); -begin - fSerializer.WriteEnumerated(aName, anEnumTypeInfo, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteDouble(const aName: string; - aFloatType: TFloatType; const Ref; ArrayElementId: integer); -begin - fSerializer.WriteDouble(aName, aFloatType, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteGuid(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteGuid(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteInt64(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteInt64(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteInteger(const aName: string; anOrdType: TOrdType; - const Ref; ArrayElementId: integer); -begin - fSerializer.WriteInteger(aName, anOrdType, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteUTF8String(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteUTF8String(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteVariant(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteVariant(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteWideString(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteWideString(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteXml(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteXml(aName, Ref, ArrayElementId); -end; - -function TROMessage.ReadArray(const aName: string; aClass : TClass; var Ref; - ArrayElementId: integer): Boolean; -begin - Result:= fSerializer.ReadArray(aName, aClass, Ref, ArrayElementId); -end; - -function TROMessage.ReadStruct(const aName: string; aClass : TClass; var Ref; - ArrayElementId: integer): Boolean; -begin - Result:= fSerializer.ReadStruct(aName, aClass, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteArray(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteArray(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteStruct(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteStruct(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.ReadBinary(const aName: string; var Ref; - ArrayElementId: integer); -begin - fSerializer.ReadBinary(aName, Ref, ArrayElementId); -end; - -procedure TROMessage.WriteBinary(const aName: string; const Ref; - ArrayElementId: integer); -begin - fSerializer.WriteBinary(aName, Ref, ArrayElementId); -end; - -{ TROChannelAwareComponent } - -procedure TROChannelAwareComponent.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation<>opRemove) then Exit; - - if (AComponent=fChannel) then fChannel := NIL; -end; - -procedure TROChannelAwareComponent.SetChannel(const Value: TROTransportChannel); -begin - if (fChannel=Value) then Exit; - - fChannel := Value; - if (fChannel<>NIL) then fChannel.FreeNotification(Self); -end; - -{ TROCustomRODLReader } - -procedure TROCustomRODLReader.ReadRODLResource(aStream: TStream); -begin - if Assigned(fOnBeforeReadRODL) then fOnBeforeReadRODL(Self, aStream); - DoReadRODLResource(aStream); - if Assigned(fOnAfterReadRODL) then fOnAfterReadRODL(Self, aStream); -end; - -constructor TROBaseConnection.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - {$IFDEF RemObjects_UseEncryption} - fEncryption := TROEncryption.Create();//(nil); - {$ENDIF} -end; - -{$IFDEF RemObjects_UseEncryption} -procedure TROBaseConnection.DoEncryption(iPlainText, iCipherText: TStream); { public } -begin - iPlainText.Seek(0,soFromBeginning); - if Assigned(Encryption) then - Encryption.Encrypt(iPlainText, iCipherText) - else - if iPlainText.Size > 0 then - iCipherText.CopyFrom(iPlainText, iPlainText.Size); - iCipherText.Seek(0,soFromBeginning); -end; - -procedure TROBaseConnection.DoDecryption(iCipherText, iPlainText: TStream); { public } -begin - {ToDo: we should find a solution where if no encryption is used, we don't need to copy the stream AT ALL. } - iCipherText.Seek(0,soFromBeginning); - if Assigned(Encryption) then - Encryption.Decrypt(iCipherText, iPlainText) - else - if iCipherText.Size > 0 then - iPlainText.CopyFrom(iCipherText, iCipherText.Size); -end; - -procedure TROBaseConnection.SetEncryption(NewValue: TROEncryption); -begin - fEncryption.Assign(NewValue); -end; -{$ENDIF} - -destructor TROBaseConnection.Destroy; -begin - inherited Destroy; - - {$IFDEF RemObjects_UseEncryption} - FreeAndNil(fEncryption); - {$ENDIF} -end; - -{ TROTransportChannel } -procedure TROTransportChannel.Assign(aSource: TPersistent); -var lSource:TROTransportChannel; -begin - if Assigned(aSource) then begin - if not (aSource is Self.ClassType) then RaiseError('Cannot Assign a %s t a %s',[ClassName,aSource.ClassName]); - lSource := TROTransportChannel(aSource); - self.OnProgress := lSource.OnProgress; - self.OnReceiveStream := lSource.OnReceiveStream; - self.OnSendStream := lSource.OnSendStream; - self.OnFailure := lSource.OnFailure; - - self.ServerLocators.Assign(lSource.ServerLocators); - self.DispatchOptions := lSource.DispatchOptions; -{$IFDEF RemObjects_UseEncryption} - self.Encryption.Assign(lSource.Encryption); -{$ENDIF} - end - else - inherited; -end; - -constructor TROTransportChannel.Create(aOwner: TComponent); -begin - inherited; - fSynchronizedProbing := true; - fProbeFrequency := 60000; // Every minute - fLoadBalancerLocatorIdx := -1; - fFaultToleranceLocatorIdx := -1; - fServerLocators := TROServerLocatorCollection.Create(Self); -end; - -destructor TROTransportChannel.Destroy; -begin - FreeAndNIL(fServerLocators); - - inherited; -end; - -procedure TROTransportChannel.Dispatch(aRequest, aResponse : TStream); -var retry : boolean; - {$ifdef REMOBJECTS_UseEncryption} - EncRequest,EncResponse : TMemoryStream; - {$endif} - faultstartlocatoridx : integer; - templocator : TROServerLocator; -begin - retry := TRUE; - if not fThreadsafe then - begin - if Busy then raise EROChannelBusy.Create(err_ChannelBusy); - - fBusy := TRUE; - end; -//removed because of a warning faultstartlocatoridx := -1; - - templocator := NIL; - faultstartlocatoridx := fFaultToleranceLocatorIdx; - - // Performs load balacing by changing the target host - if (doLoadBalanced in fDispatchOptions) then begin - if fServerLocators.GetNextLocator(templocator, fLoadBalancerLocatorIdx, fLoadBalancerLocatorIdx, TRUE) then begin - SetServerLocator(templocator, NIL); - fCurrentLocator := templocator; - - faultstartlocatoridx := fLoadBalancerLocatorIdx; - fFaultToleranceLocatorIdx := faultstartlocatoridx; - end; - end; - - try - if Assigned(fOnSendStream) - then fOnSendStream(aRequest); - - repeat - try - aRequest.Position := 0; - - {$IFDEF REMOBJECTS_UseEncryption} - if Encryption.EncryptionMethod <> tetNone then begin - EncRequest:= TMemoryStream.Create; - EncResponse := TMemoryStream.Create; - try - DoEncryption(aRequest,EncRequest); - IntDispatch(encRequest, encResponse); - DoDecryption(EncResponse,aResponse); - finally - EncRequest.Free; - EncResponse.free; - end; - end - else - {$ENDIF} - begin - IntDispatch(aRequest, aResponse); - end; - - aResponse.Position := 0; - if Assigned(fOnReceiveStream) then begin - fOnReceiveStream(aResponse); - aResponse.Position := 0; - end; - - Exit; - except - on E:Exception do begin - retry := FALSE; - - if (doFaultTolerant in fDispatchOptions) then begin - // This can improve speed during the next requests - if (fCurrentLocator<>NIL) and fCurrentLocator.DisableOnFailure - then fCurrentLocator.Enabled := FALSE; - - // Fail-over support: checks using all server locators - if fServerLocators.GetNextLocator(templocator, fFaultToleranceLocatorIdx, faultstartlocatoridx, FALSE) then begin - retry := TRUE; - - SetServerLocator(templocator{fCurrentLocator}, E); - fCurrentLocator := templocator; - end - end; - - //if not retry then begin - //if Assigned(fOnException) then fOnException(Self, E, retry); - if not retry then raise - //end; - end; - end; - until not retry; - finally - if not fThreadSafe then - fBusy := FALSE; - end; -end; - -procedure TROTransportChannel.Loaded; -begin - inherited; - ProbeServers := fLoadedProbeServers; -end; - -procedure TROTransportChannel.ProbeAll; -var i : integer; - probedcount, - disabledcount, - enabledcount : integer; - locator : TROServerLocator; - proberes : boolean; -begin - probedcount := 0; - enabledcount := 0; - disabledcount := 0; -//removed because of a warning proberes := FALSE; - - if (fServerLocators.Count=0) then Exit; - - if Assigned(fOnBeforeProbingServers) then fOnBeforeProbingServers(Self); - - for i := 0 to (fServerLocators.Count-1) do begin - locator := fServerLocators[i]; - - if (locator.ProbingOptions=[]) then Continue; // Not subject to probing - - Inc(probedcount); - - // Probe - if locator.Enabled and (poProbeWhenEnabled in locator.ProbingOptions) then begin - proberes := Probe(locator); - if not proberes then Inc(disabledcount); - end - - else if not locator.Enabled and (poProbeWhenDisabled in locator.ProbingOptions) then begin - proberes := Probe(locator); - if proberes then Inc(enabledcount); - end; - end; - - if Assigned(fOnAfterProbingServers) then fOnAfterProbingServers(Self, probedcount, enabledcount, disabledcount); -end; - -function TROTransportChannel.Probe(aServerLocator : TROServerLocator): boolean; -var req, resp : TStringStream; -begin - result := FALSE; - - if (fProbingClone=NIL) then begin - // Creates a transport of the same type that will be used during probing operations - fProbingClone := TROTransportChannelClass(ClassType).Create(Self); - {$ifdef REMOBJECTS_UseEncryption} - fProbingClone.Encryption.Assign(Encryption); - {$endif} - //Probably there is needed Clone infrastructure for channels, the same as for messages. - //Because assigning only encryption is not enough here. Proxy setting is required too - but it is channel dependent. - //When it will be ready - change code here. - - end; - fProbingClone.SetServerLocator(aServerLocator); - - req := TStringStream.Create(ProbeRequestID); - resp := TStringStream.Create(''); - - try - // Before probing server - if Assigned(fOnBeforeProbingServer) then fOnBeforeProbingServer(Self, aServerLocator); - - try - fProbingClone.BeforeDispatch(nil); - fProbingClone.Dispatch(req, resp); - result := (resp.DataString=ProbeResponseID); - - if result and (poEnableIfProbeSucceeded in aServerLocator.ProbingOptions) - then aServerLocator.Enabled := TRUE - - else if not result then SysUtils.Abort; - - except - if (poDisableIfProbeFailed in aServerLocator.ProbingOptions) - then aServerLocator.Enabled := FALSE; - - // We can ignore exceptions. This actually means the method failed. - end; - finally - req.Free; - resp.Free; - - // After probing server - if Assigned(fOnAfterProbingServer) then fOnAfterProbingServer(Self, aServerLocator, not result); - end; -end; - -procedure TROTransportChannel.RetrieveMetadata(out Metadata: TStream); -var req : TStringStream; -begin - BeforeDispatch(nil); - req := TStringStream.Create(MetadataRequestID); - Metadata := TStringStream.Create(''); - - try - try - Dispatch(req, Metadata); - except - FreeAndNIL(Metadata); - raise; - end; - finally - req.Free; - end; -end; - -procedure TROTransportChannel.RetrieveRODL(out RODLLibrary : TRODLLibrary); -var - resp : TStream; - XmlToRodl: TXMLToRODL; -begin - RODLLibrary := NIL; - - RetrieveMetadata(resp); - - XmltoRodl := TXMLToRODL.Create(nil); - try - RODLLibrary := XmltoRodl.Read(resp,''); - except - end; - resp.Free; - XmlToRodl.Free; -end; - -procedure TROTransportChannel.SetProbeFrequency( - const Value: cardinal); -begin - fProbeFrequency := Value; - if Assigned(fProbeTimer) - then fProbeTimer.Timeout := Value; -end; - -procedure TROTransportChannel.OnProbeTimerTick(Dummy: Cardinal); -begin - ProbeAll; -end; - -procedure TROTransportChannel.SetProbeServers(const Value: boolean); -begin - if (csLoading in ComponentState) then fLoadedProbeServers := Value - else if (fProbeServers<>Value) then begin - fProbeServers := Value; - - if (csDesigning in ComponentState) then Exit; - - if fProbeServers then begin - fProbeTimer := TROThreadTimer.Create(OnProbeTimerTick, fProbeFrequency, fSynchronizedProbing); - end - else begin - fProbeTimer.Free; - fProbeTimer := nil; - end; - end; -end; - -procedure TROTransportChannel.SetServerLocator( - aServerLocator: TROServerLocator; anException : Exception = NIL); -begin - if Assigned(fOnServerLocatorAssignment) - then fOnServerLocatorAssignment(Self, aServerLocator, anException); - - IntSetServerLocator(aServerLocator); -end; - -procedure TROTransportChannel.SetServerLocators( - const Value: TROServerLocatorCollection); -begin - fServerLocators.Assign(Value); -end; - -procedure TROTransportChannel.TriggerProgress(iType:TProgressType; iDirection: TProgressDirection; iTransfered, iTotal: integer); -begin - if Assigned(OnProgress) then OnProgress(self, iType, iDirection, iTransfered, iTotal); -end; - -procedure TROTransportChannel.SetSynchronizedProbing(const Value: Boolean); -begin - fSynchronizedProbing := Value; - if fProbeTimer <> nil then - fProbeTimer.Synchronized := fSynchronizedProbing; -end; - -procedure TROTransportChannel.Dispatch(aMessage: IROMessage); -var - lRequest, lResponse: TMemoryStream; - aFreeStream: Boolean; - lRetry: boolean; -begin - try - BeforeDispatch(aMessage); - except - on E: Exception do begin - lRetry:=False; - if assigned(OnException) then OnException(self, e, lRetry); - if not lRetry then raise; - end; - end; -// if aMessage.ClientID = EmptyGUID then -// aMessage.ClientID := NewGuid; - - lRequest := TMemoryStream.Create; - try - - aMessage.WriteToStream(lRequest); - repeat - lRetry := false; - - try - aFreeStream := true; - lResponse := TMemoryStream.Create; - try - Dispatch(lRequest, lResponse); - - aMessage.InitializeRead(Self); - try - aMessage.ReadFromStream(lResponse, aFreeStream); - except - aFreeStream:= True; - raise; - end; - finally - if aFreeStream then FreeAndNil(lResponse); - end; - except - on E: EROSessionNotFound do - begin - if assigned(fOnLoginNeeded) then - OnLoginNeeded(self, e, lRetry); - if not lRetry then - raise; - end; - on E: Exception do - begin - if assigned(OnException) then - OnException(self, e, lRetry); - if not lRetry then - raise; - end; - end; - until not lRetry; - finally - lRequest.Free; - end; -end; - -procedure TROTransportChannel.SetCurrentLocator(const Value: TROServerLocator); -begin - if (fCurrentLocator <> Value) and (ServerLocators.IndexOf(Value) > -1) then - fCurrentLocator := Value; -end; - -procedure TROTransportChannel.BeforeDispatch(aMessage: IROMessage); -begin - // -end; - -procedure TROTransportChannel.CheckProperties; -begin -// nothing -end; - -{ TROObjectDisposer } - -procedure TROObjectDisposer.Add(iObject: TObject); -begin - if IndexOf(iObject) = -1 then inherited Add(iObject); -end; - -constructor TROObjectDisposer.Create(const aService: IInterface); -begin - inherited Create; - - fService := aService; -end; - -destructor TROObjectDisposer.Destroy; -var i: integer; - objretainer : IROObjectRetainer; -begin - if Supports(fService, IROObjectRetainer, objretainer) then begin - // Only destroyes the var and out params the service is not retaining - for i := (Count-1) downto 0 do - if not objretainer.IsRetained(Items[i]) - then TObject(Items[i]).Free(); - end - - else begin - for i := 0 to (Count-1) do - TObject(Items[i]).Free(); - end; - - fService := NIL; - - inherited; -end; - -initialization - _MessageClasses := TClassList.Create; - _ExceptionClasses := TClassList.Create; - - _ProxyClasses := TStringList.Create; - _ProxyClasses.Duplicates := dupError; - _ProxyClasses.Sorted := TRUE; - - _TransportChannels := TStringList.Create; - _TransportChannels.Duplicates := dupError; - _TransportChannels.Sorted := TRUE; - - RegisterExceptionClass(EROUnknownType); - RegisterExceptionClass(EROMessageTooLarge); - RegisterExceptionClass(EROSessionNotFound); - RegisterExceptionClass(EROSessionExpired); - RegisterExceptionClass(SessionNotFoundException); - -finalization - UnregisterExceptionClass(EROUnknownType); - UnregisterExceptionClass(EROMessageTooLarge); - UnregisterExceptionClass(SessionNotFoundException); - UnregisterExceptionClass(EROSessionExpired); - UnregisterExceptionClass(EROSessionNotFound); - - _MessageClasses.Free; - _ExceptionClasses.Free; - - FreeAndNil(_ProxyClasses); - FreeAndNil(_TransportChannels); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClientIntf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClientIntf.pas deleted file mode 100644 index 88cccbb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROClientIntf.pas +++ /dev/null @@ -1,522 +0,0 @@ -unit uROClientIntf; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, SysUtils, TypInfo, uRODL, uRORes, uROTypes; - -const - MESSAGE_TYPE_MESSAGE = 0; - MESSAGE_TYPE_EXCEPTION = 1; - MESSAGE_TYPE_EVENT = 2; - - MAX_ITEM_NAME = $100; { max name length for interface, function etc. } - MAX_EXCEPTION_TEXT = $10000; { max exception text } - -type - { Misc } - TROURIType = (utHTTP, utTCP, utUDP, utPipes, utSMTP, utPOP3); - TROProbingOption = (poProbeWhenEnabled, poProbeWhenDisabled, poEnableIfProbeSucceeded, poDisableIfProbeFailed); - TROProbingOptions = set of TROProbingOption; - -const - URITypeIdentifiers : array[TROURIType] of string = - ('HTTP', 'TCP', 'UDP', 'PIPE', 'SMTP', 'POP3'); - -type - TMessageType = (mtRequest, - mtResponse, - mtException, - mtQueryServiceInfo, - mtEvent, - mtPoll); - - { for Delphi 5 know we can reply on the correct value-assignment 0,1,2 } - - { Forward declarations } - IROMessage = interface; - TROServerLocator = class; - - { Misc } - - DateTime = TDateTime; { Alias for the type TDateTime } - - { IROMessage } - TParamAttribute = (paIsDateTime, paIsArrayElement); - TParamAttributes = set of TParamAttribute; { Set of TParamAttribute } - - IROTransport = interface; - - { IROMessage } - IROMessage = interface - ['{092FB8BE-5FC4-48CB-BB50-623465168B98}'] - procedure Initialize(const aTransport : IROTransport; const anInterfaceName, aMessageName : string; aType: TMessageType); overload; - procedure Initialize(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string; aType: TMessageType); overload; - - procedure InitializeRequestMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeResponseMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeEventMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - procedure InitializeExceptionMessage(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string); - - procedure Finalize; - - function GetClientID : TGUID; - procedure SetClientID(const Value : TGUID); - - {$IFDEF DOTNET} - {$ELSE} - procedure Write(const aName : string; aTypeInfo : PTypeInfo; const Ptr; ExtraAttributes : TParamAttributes); - {$ENDIF} - {$IFDEF DOTNET} - {$ELSE} - procedure Read(const aName : string; aTypeInfo : PTypeInfo; var Ptr; ExtraAttributes : TParamAttributes); - {$ENDIF} - - function GetInterfaceName : string; - function GetMessageName : string; - procedure SetInterfaceName(const aValue : string); - procedure SetMessageName(const aValue : string); - procedure WriteToStream(aStream : TStream); - procedure ReadFromStream(aStream : TStream); overload; - procedure ReadFromStream(aStream : TStream; var aFreeStream: Boolean); overload; - procedure WriteException(aStream : TStream; anException : Exception); - function GetMessageType: TMessageType; - - procedure FreeStream; - - procedure SetAttributes(aTransport: IROTransport; const aNames: array of string; const aValues: array of string); - procedure UnsetAttributes(aTransport: IROTransport); - - procedure InitializeRead(const aTransport : IROTransport); - - property MessageName : string read GetMessageName write SetMessageName; - property InterfaceName : string read GetInterfaceName write SetInterfaceName; - property ClientID : TGUID read GetClientID write SetClientID; - property MessageType : TMessageType read GetMessageType; - // - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteXml(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteGuid(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteDecimal(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1); - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1); - - { Readers } - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadXml(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadGuid(const aName : string; var Ref; ArrayElementId : integer = -1); - procedure ReadDecimal(const aName : string; var Ref; ArrayElementId : integer = -1); - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1); - end; - - IROMessageCloneable = interface - ['{4AA33660-25B7-4794-A978-CB791640475D}'] - function Clone:IROMessage; - end; - - IROStreamAccess = interface - ['{DF3D000F-7EB3-4981-AA01-921553CAFF52}'] - function GetStream : TStream; - - property Stream : TStream read GetStream; - end; - - { IROTransport } - IROTransport = interface - ['{56FA09B9-FFC8-4432-80E3-BF78E5E7DF33}'] - function GetTransportObject : TObject; - end; - - { IROTransportChannel } - IROTransportChannel = interface(IROTransport) - ['{EDFA0CF3-3265-46C9-AC5C-14C3CACF2721}'] - procedure SetServerLocator(aServerLocator : TROServerLocator; anException : Exception = NIL); - function Probe(aServerLocator : TROServerLocator) : boolean; - procedure ProbeAll; - - procedure Dispatch(aRequest, aResponse : TStream); overload; - procedure Dispatch(aMessage: IROMessage); overload; - procedure BeforeDispatch(aMessage: IROMessage); - end; - - { IROMetadataReader } - IROMetadataReader = interface - ['{526269B5-FAB2-45A2-A2E6-8CBFF317BC98}'] - procedure RetrieveMetadata(out Metadata : TStream); - procedure RetrieveRODL(out RODLLibrary : TRODLLibrary); - end; - - { IROTCPTransport } - IROTCPTransport = interface(IROTransport) - ['{C80E773D-B8A8-4E0D-9B49-2668EFC1E27F}'] - function GetClientAddress : string; - - property ClientAddress : string read GetClientAddress; - end; - - { IROHTTPTransport } - IROHTTPTransport = interface(IROTCPTransport) - ['{AD51DB69-993F-49C1-9F3B-4C678A95007D}'] - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - - function GetContentType : string; - procedure SetContentType(const aValue : string); - - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - - function GetTargetURL : string; - procedure SetTargetURL(const aValue : string); - - procedure SetPathInfo (const aValue : string); - function GetPathInfo : string; - function GetQueryString : string; - function GetLocation : string; - - property ContentType : string read GetContentType write SetContentType; - property UserAgent : string read GetUserAgent write SetUserAgent; - property TargetURL : string read GetTargetURL write SetTargetURL; - property Headers[const aName : string] : string read GetHeaders write SetHeaders; - - property PathInfo : string read GetPathInfo write SetPathInfo; - property QueryString : string read GetQueryString; - - property Location : string read GetLocation; - end; - - { IROEventWriter } - IROEventWriter = interface - ['{501A01A8-0663-488A-BB29-3C0FBA7F43B5}'] - function GetSessionList: TStrings; - function GetExcludeSender: boolean; - function GetExcludeSessionList: boolean; - procedure SetExcludeSender(const Value: boolean); - procedure SetExcludeSessionList(const Value: boolean); - - property ExcludeSender : boolean read GetExcludeSender write SetExcludeSender; - property ExcludeSessionList : boolean read GetExcludeSessionList write SetExcludeSessionList; - property SessionList : TStrings read GetSessionList; - end; - - IROEventsWriter = IROEventWriter {$IFDEF DELPHI10UP}deprecated{$ENDIF}; - - { IROModuleInfo } - TDataFormat = string; - IROModuleInfo = interface - ['{83ED3A44-DA4B-4F4E-884A-DDF5E726A2C1}'] - procedure GetModuleInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); - procedure GetRodlInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); - end; - - IRONamedModuleInfo = interface(IROModuleInfo) - ['{C7D24186-D600-465C-9B09-4E1E2CF835BE}'] - function ModuleInfoName: string; - end; - - { TROServerLocator } - TROServerLocatorNotifyEvent = procedure(Sender : TROServerLocator) of object; - TROServerLocator = class(TCollectionItem) - private - fEnabled: boolean; - fPort: integer; - fHost: string; - fDisableOnFailure: boolean; - fLoadBalancingServer: boolean; - fProbingOptions: TROProbingOptions; - fOnEnabledChanged: TROServerLocatorNotifyEvent; - fName: string; - - procedure SetHost(const Value: string); - procedure SetPort(const Value: integer); - function GetEnabled: boolean; - procedure SetEnabled(const Value: boolean); - - protected - function GetDisplayName: string; override; - - public - constructor Create(Collection: TCollection); override; - destructor Destroy; override; - - function GetNamePath: string; override; - procedure Assign(Source: TPersistent); override; - - published - property Name : string read fName write fName; - property Enabled : boolean read GetEnabled write SetEnabled; - property Host : string read fHost write SetHost; - property Port : integer read fPort write SetPort; - property DisableOnFailure : boolean read fDisableOnFailure write fDisableOnFailure; - property LoadBalancingServer : boolean read fLoadBalancingServer write fLoadBalancingServer; - property ProbingOptions : TROProbingOptions read fProbingOptions write fProbingOptions; - - property OnEnabledChanged : TROServerLocatorNotifyEvent read fOnEnabledChanged write fOnEnabledChanged; - end; - - { IROMultiThreadAwareChannel } - IROMultiThreadAwareChannel = interface - ['{0C2FD6DE-DEC1-4B1D-851C-F55C36869920}'] - end; - - { TROServerLocatorCollection } - TROServerLocatorCollection = class(TCollection) - private - fOwner : TComponent; - - protected - function GetItems(aIndex: integer): TROServerLocator; - procedure SetItems(aIndex: integer; aNewItem: TROServerLocator); - function GetOwner: TPersistent; override; - public - constructor Create(aOwner : TComponent); - destructor Destroy; override; - - function Add: TROServerLocator; - function Insert(aIndex: integer): TROServerLocator; - function IndexOf(aItem: TROServerLocator): integer; - - function GetNextLocator(out aLocator : TROServerLocator; - var CurrentIndex : integer; - InitialIndex : integer; - ForLoadBalancing : boolean) : boolean; - - procedure EnableAll; - procedure DisableAll; - - property Items[Index: integer]: TROServerLocator read GetItems write SetItems; default; - end; - - IROEventReceiver = interface - ['{A3320CBC-2E62-41C8-9C3D-FB7ADCBF6920}'] - procedure Dispatch(aStream: TStream; aCaller: TThread); - function GetObject: TObject; - end; - - IROActiveEventChannel = interface - ['{BFDD73B9-3C6A-4E78-AFFA-7B9A182A5CC4}'] - procedure RegisterEventReceiver(aReceiver: IROEventReceiver); - procedure UnregisterEventReceiver(aReceiver: IROEventReceiver); - end; - - - -implementation - -uses - uROClasses; - -{ TROServerLocator } -constructor TROServerLocator.Create(Collection: TCollection); -begin - inherited; - - fProbingOptions := [poProbeWhenEnabled, poProbeWhenDisabled, poEnableIfProbeSucceeded, poDisableIfProbeFailed]; - fLoadBalancingServer := TRUE; - fEnabled := TRUE; - fDisableOnFailure := TRUE; -end; - -destructor TROServerLocator.Destroy; -begin - inherited; -end; - -function TROServerLocator.GetDisplayName: string; -var options : string; -begin - if (Trim(fHost)='') - then result := '!!Empty!!' - else result := fHost; - - if (fPort>0) then result := result+':'+IntToStr(fPort); - - if not Enabled then result := '(Disabled) '+result; - - if LoadBalancingServer then options := 'LBS' else options := 'non-LBS'; - if DisableOnFailure then options := options+', Disable On Failure' else options := options+','; - options := options+', '+GetPropValue(Self, 'ProbingOptions'); - - result := result+' '+options; -end; - -function TROServerLocator.GetEnabled: boolean; -begin - result := fEnabled and (Length(fHost)>0); -end; - -procedure TROServerLocator.SetEnabled(const Value: boolean); -begin - if (fEnabled=Value) then Exit; - - fEnabled := Value; - if Assigned(fOnEnabledChanged) then fOnEnabledChanged(Self); -end; - -procedure TROServerLocator.SetHost(const Value: string); -begin - fHost := Trim(Value); -end; - -procedure TROServerLocator.SetPort(const Value: integer); -begin - if (fPort<>Value) and (Value>=0) - then fPort := Value; -end; - -function TROServerLocator.GetNamePath: string; -begin - if (Collection <> nil) and (Collection.Owner <> nil) then - result := TComponent(Collection.Owner).Name + '.' + FName - else - result := inherited GetNamePath -end; - -procedure TROServerLocator.Assign(Source: TPersistent); -begin - if Source is TROServerLocator then begin - Name := TROServerLocator(Source).Name; - Enabled := TROServerLocator(Source).Enabled; - Host := TROServerLocator(Source).Host; - Port := TROServerLocator(Source).Port; - DisableOnFailure := TROServerLocator(Source).DisableOnFailure; - LoadBalancingServer := TROServerLocator(Source).LoadBalancingServer; - ProbingOptions := TROServerLocator(Source).ProbingOptions; - OnEnabledChanged := TROServerLocator(Source).OnEnabledChanged; - end - else - inherited; -end; - -{ TROServerLocatorCollection } -constructor TROServerLocatorCollection.Create(aOwner : TComponent); -begin - inherited Create(TROServerLocator); - - fOwner := aOwner; -end; - -destructor TROServerLocatorCollection.Destroy; -begin - inherited; -end; - -function TROServerLocatorCollection.Add: TROServerLocator; -begin - result := TROServerLocator(inherited Add); -end; - -function TROServerLocatorCollection.Insert(aIndex: integer): TROServerLocator; -begin - result := TROServerLocator(inherited Insert(aIndex)); -end; - -function TROServerLocatorCollection.GetItems(aIndex: integer): TROServerLocator; -begin - result := TROServerLocator(inherited Items[aIndex]); -end; - -function TROServerLocatorCollection.IndexOf(aItem: TROServerLocator): integer; -var i: integer; -begin - result := - 1; - for i := 0 to (Count - 1) do - if (aItem = Items[i]) then begin - result := i; - Exit; - end; -end; - -procedure TROServerLocatorCollection.SetItems(aIndex: integer; aNewItem: TROServerLocator); -begin - inherited Items[aIndex].Assign(aNewItem); -end; - - -function TROServerLocatorCollection.GetNextLocator(out aLocator : TROServerLocator; - var CurrentIndex : integer; InitialIndex : integer; ForLoadBalancing : boolean) : boolean; -var idx : integer; -begin - aLocator := NIL; - result := FALSE; - if Count=0 then Exit; - - idx := CurrentIndex; - repeat - try - idx := IncID(idx, Count-1); - - if (idx=InitialIndex) - then Exit // We ended up to the first one. - - else if Items[idx].Enabled then begin - if ForLoadBalancing and not Items[idx].LoadBalancingServer - then Continue; - - result := TRUE; - aLocator := Items[idx]; - CurrentIndex := idx; - Exit; - end; - finally - if InitialIndex = -1 then - InitialIndex := 0; - end; - until FALSE; -end; - -procedure TROServerLocatorCollection.DisableAll; -var i: Integer; -begin - for i := 0 to (Count - 1) do begin - Items[i].Enabled := FALSE; - end; -end; - -procedure TROServerLocatorCollection.EnableAll; -var i: Integer; -begin - for i := 0 to (Count - 1) do begin - Items[i].Enabled := TRUE; - end; -end; - -function TROServerLocatorCollection.GetOwner: TPersistent; -begin - result := fOwner; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROComboService.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROComboService.pas deleted file mode 100644 index c360cac..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROComboService.pas +++ /dev/null @@ -1,293 +0,0 @@ -unit uROComboService; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - - -interface - -uses - Classes, SvcMgr; - -type - TROService = class(TService) - private - protected - procedure Start(Sender: TService; var Started: boolean); - procedure Stop(Sender: TService; var Stopped: boolean); - - procedure Execute(Sender: TService); - public - function GetServiceController: TServiceController; override; - - constructor CreateNew(AOwner: TComponent; Dummy: integer = 0); override; - - procedure CreateForm(InstanceClass: TComponentClass; var Reference); - procedure Run; - published - end; - -function ROStartService(const aServiceName, aDisplayName: string; aDescription: string = ''; - aStartType: TStartType = stAuto; aDependency : string = ''; aServiceType: TServiceType = stWin32; - aUserName: string = ''; aPassword: string = ''; aLoadGroup: string = '---'; aParameters: string = ''): Boolean; -function ROStartDependentService(const aServiceName, aDisplayName: string; aDependency : string = ''): Boolean; -function ROIsService: boolean; - -var - ROService: TROService; - -implementation -uses - Windows, SysUtils, WinSvc; - -var - FIsService: boolean; - FServiceName: string; - FDisplayName: string; - FStartType: TStartType; - FServiceType: TServiceType; - FUserName: string; - FPassword: string; - FLoadGroup: string; - FRegisterService: boolean = False; - -type - PServiceDescriptionA = ^TServiceDescriptionA; - PServiceDescriptionW = ^TServiceDescriptionW; - PServiceDescription = ^TServiceDescriptionA; - _SERVICE_DESCRIPTIONA = record - lpDescription: PChar; - end; - {$EXTERNALSYM _SERVICE_DESCRIPTIONA} - _SERVICE_DESCRIPTIONW = record - lpDescription: PWideChar; - end; - {$EXTERNALSYM _SERVICE_DESCRIPTIONW} - _SERVICE_DESCRIPTION = _SERVICE_DESCRIPTIONA; - {$EXTERNALSYM _SERVICE_DESCRIPTION} - SERVICE_DESCRIPTIONA = _SERVICE_DESCRIPTIONA; - {$EXTERNALSYM SERVICE_DESCRIPTIONA} - SERVICE_DESCRIPTIONW = _SERVICE_DESCRIPTIONW; - {$EXTERNALSYM SERVICE_DESCRIPTIONW} - SERVICE_DESCRIPTION = _SERVICE_DESCRIPTIONA; - {$EXTERNALSYM SERVICE_DESCRIPTION} - TServiceDescriptionA = _SERVICE_DESCRIPTIONA; - TServiceDescriptionW = _SERVICE_DESCRIPTIONW; - TServiceDescription = TServiceDescriptionA; - - TChangeServiceConfig2 = function (hService: SC_HANDLE; dwInfoLevel: DWORD; lpInfo: Pointer): BOOL; stdcall; - -const - SERVICE_CONFIG_DESCRIPTION = 1; - {$EXTERNALSYM SERVICE_CONFIG_DESCRIPTION} - SERVICE_CONFIG_FAILURE_ACTIONS = 2; - {$EXTERNALSYM SERVICE_CONFIG_FAILURE_ACTIONS} - -procedure ServiceController(CtrlCode: dword); stdcall; -begin - ROService.Controller(CtrlCode); -end; - -function TROService.GetServiceController: TServiceController; -begin - Result := ServiceController; -end; - -procedure TROService.CreateForm(InstanceClass: TComponentClass; var Reference); -begin - SvcMgr.Application.CreateForm(InstanceClass, Reference); -end; - -procedure TROService.Run; -begin - SvcMgr.Application.Run; -end; - -constructor TROService.CreateNew(AOwner: TComponent; Dummy: integer); -begin - inherited; - AllowPause := False; - Interactive := True; - DisplayName := FDisplayName; - Name := FServiceName; - OnStart := Start; - OnStop := Stop; - - if FRegisterService then - begin - // New part - StartType := FStartType; - ServiceType := FServiceType; - ServiceStartName := FUserName; - Password := FPassword; - LoadGroup := FLoadGroup; - end; -end; - -procedure TROService.Start(Sender: TService; var Started: boolean); -begin - Started := True; -end; - -procedure TROService.Execute(Sender: TService); -begin - while not Terminated do - ServiceThread.ProcessRequests(True); -end; - -procedure TROService.Stop(Sender: TService; var Stopped: boolean); -begin - Stopped := True; -end; - -function ROIsService: boolean; -begin - Result := FIsService; -end; - -function ROStartService(const aServiceName, aDisplayName: string; aDescription: string = ''; - aStartType: TStartType = stAuto; aDependency : string = ''; aServiceType: TServiceType = stWin32; - aUserName: string = ''; aPassword: string = ''; aLoadGroup: string = '---'; aParameters: string = ''): Boolean; -var - Mgr, Svc: Integer; - ServiceStartName: string; - Config: Pointer; - Size: DWord; - lServiceDescr: TServiceDescription; - lHandle: HMODULE; - lChangeServiceConfig2: TChangeServiceConfig2; -begin - FRegisterService := False; - FDisplayName := aDisplayName; - FServiceName := StringReplace(aServiceName, ' ', '_', [rfReplaceAll]); - FStartType := aStartType; - FServiceType := aServiceType; - FUserName := aUserName; - FPassword := aPassword; - FLoadGroup := aLoadGroup; - - FIsService := FindCmdLineSwitch('install', ['-', '\', '/'], True) or - FindCmdLineSwitch('uninstall', ['-', '\', '/'], True); - - if FIsService then - begin - FRegisterService := True; - try - SvcMgr.Application.Initialize; - ROService := TROService.CreateNew(SvcMgr.Application, 0); - - (* Version 1.1, block added 29.10.2004 by Janne Timmerbacka *) - if Length( aDependency ) > 0 then - with RoService.Dependencies do - begin - Clear; - with Add as TDependency do Name := aDependency; - end; - - ROService.Run; - FreeAndNil(ROService); - finally - FRegisterService := False; - end; - - Mgr := OpenSCManager(nil, nil, SC_MANAGER_CONNECT); - if Mgr <> 0 then - begin - Svc := OpenService(Mgr, PChar(FServiceName), SERVICE_QUERY_CONFIG OR SERVICE_CHANGE_CONFIG); - if Svc<>0 then - begin - if Length(aParameters)>0 then begin - if pos(' ', ParamStr(0))>0 then - ServiceStartName := AnsiQuotedStr(AnsiDequotedStr(ParamStr(0),'"'),'"') - else - ServiceStartName := ParamStr(0); - if ChangeServiceConfig(Svc, - SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, - SERVICE_NO_CHANGE, - PChar(ServiceStartName + ' ' + aParameters), - nil, nil, nil, nil, nil, nil) = False then begin - // OutputDebugString(Pchar(SysErrorMessage(GetLastError))); - end; - end; - lServiceDescr.lpDescription := PChar(aDescription); - lHandle := GetModuleHandle(advapi32); - if lHandle <> 0 then - begin - @lChangeServiceConfig2 := GetProcAddress(lHandle, 'ChangeServiceConfig2A'); - if Assigned(lChangeServiceConfig2) then - lChangeServiceConfig2(Svc, SERVICE_CONFIG_DESCRIPTION, @lServiceDescr); - end; - CloseServiceHandle(Svc); - end; - CloseServiceHandle(Mgr); - end; - ExitProcess(0); - - Result := True; - Exit; - end; - - if FindCmdLineSwitch('standalone', ['-', '\', '/'], True) then - FIsService := False - else begin - Mgr := OpenSCManager(nil, nil, SC_MANAGER_CONNECT); - if Mgr <> 0 then - begin - Svc := OpenService(Mgr, PChar(FServiceName), SERVICE_QUERY_CONFIG); - FIsService := Svc <> 0; - if FIsService then - begin - QueryServiceConfig(Svc, nil, 0, Size); - Config := AllocMem(Size); - try - QueryServiceConfig(Svc, Config, Size, Size); - ServiceStartName := PQueryServiceConfig(Config)^.lpServiceStartName; - if CompareText(ServiceStartName, 'LocalSystem') = 0 then - ServiceStartName := 'SYSTEM'; - finally - Dispose(Config); - end; - CloseServiceHandle(Svc); - end; - CloseServiceHandle(Mgr); - end; - end; -(* - if FIsService then - begin - Size := 256; - SetLength(UserName, Size); - GetUserName(PChar(UserName), Size); - SetLength(UserName, StrLen(PChar(UserName))); - n := Pos('\', ServiceStartName); - if (n <> -1) then - ServiceStartName := Trim(Copy(ServiceStartName, n + 1, maxInt)); - FIsService := CompareText(UserName, ServiceStartName) = 0; - end; -*) - Result := FIsService; - - if FIsService then - begin - SvcMgr.Application.Initialize; - ROService := TROService.CreateNew(SvcMgr.Application, 0); - end; -end; - -function ROStartDependentService(const aServiceName, aDisplayName: string; aDependency : string = ''): Boolean; -begin - Result := ROStartService(aServiceName, aDisplayName, '', stAuto, - aDependency); -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCompression.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCompression.pas deleted file mode 100644 index 11b2b07..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROCompression.pas +++ /dev/null @@ -1,354 +0,0 @@ -unit uROCompression; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} -{$IFDEF FPC} - {$IFDEF MSWINDOWS} - {$DEFINE FPCMSWIN} - {$ENDIF} - {$IFDEF LINUX} - {$DEFINE FPCLINUX} - {$ENDIF} - {$UNDEF MSWINDOWS} - {$DEFINE LINUX} -{$ENDIF FPC} - -interface - -uses {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes; - - -{$IFDEF LINUX} -procedure ZCompressStream(anInputStream, aCompressedStream : TStream); -procedure ZDecompressStream(aCompressedStream, anOutputStream : TStream); -{$ENDIF LINUX} -function CompressStr(const aString : String) : String; -function DecompressStr(const aString : String) : String; -function CompressAndEncode(const aString: string): string; -function DecodeAndUnCompress(const aString: string): string; -procedure EncodeStream(anInputStream, anOutputStream: TStream); -procedure DecodeStream(anInputStream, anOutputStream: TStream); - -implementation - -uses - uROZLib, SysUtils; - -const - EncodeTable: array[0..63] of Char = - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + - 'abcdefghijklmnopqrstuvwxyz' + - '0123456789+/'; - - DecodeTable: array[#0..#127] of Integer = ( - Byte('='), 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64, - 64, 0, 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, 64, 64, 64, 64, 64, - 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64); - -type - PPacket = ^TPacket; - TPacket = packed record - case Integer of - 0: (b0, b1, b2, b3: Byte); - 1: (i: Integer); - 2: (a: array[0..3] of Byte); - 3: (c: array[0..3] of Char); - end; - -procedure EncodePacket(const Packet: TPacket; NumChars: Integer; OutBuf: PChar); -begin - OutBuf[0] := EnCodeTable[Packet.a[0] shr 2]; - OutBuf[1] := EnCodeTable[((Packet.a[0] shl 4) or (Packet.a[1] shr 4)) and $0000003f]; - if NumChars < 2 then - OutBuf[2] := '=' - else OutBuf[2] := EnCodeTable[((Packet.a[1] shl 2) or (Packet.a[2] shr 6)) and $0000003f]; - if NumChars < 3 then - OutBuf[3] := '=' - else OutBuf[3] := EnCodeTable[Packet.a[2] and $0000003f]; -end; - -function DecodePacket(InBuf: PChar; var nChars: Integer): TPacket; -begin - Result.a[0] := (DecodeTable[InBuf[0]] shl 2) or - (DecodeTable[InBuf[1]] shr 4); - NChars := 1; - if InBuf[2] <> '=' then - begin - Inc(NChars); - Result.a[1] := (DecodeTable[InBuf[1]] shl 4) or - (DecodeTable[InBuf[2]] shr 2); - end; - if InBuf[3] <> '=' then - begin - Inc(NChars); - Result.a[2] := (DecodeTable[InBuf[2]] shl 6) or DecodeTable[InBuf[3]]; - end; -end; - -procedure EncodeStream(anInputStream, anOutputStream: TStream); -type - PInteger = ^Integer; -var - InBuf: array[0..509] of Byte; - OutBuf: array[0..1023] of Char; - BufPtr: PChar; - I, J, K, BytesRead: Integer; - Packet: TPacket; -begin - K := 0; - repeat - BytesRead := anInputStream.Read(InBuf, SizeOf(InBuf)); - I := 0; - BufPtr := OutBuf; - while I < BytesRead do - begin - if BytesRead - I < 3 then - J := BytesRead - I - else J := 3; - Packet.i := 0; - Packet.b0 := InBuf[I]; - if J > 1 then - Packet.b1 := InBuf[I + 1]; - if J > 2 then - Packet.b2 := InBuf[I + 2]; - EncodePacket(Packet, J, BufPtr); - Inc(I, 3); - Inc(BufPtr, 4); - Inc(K, 4); - if K > 75 then - begin - BufPtr[0] := #$0D; - BufPtr[1] := #$0A; - Inc(BufPtr, 2); - K := 0; - end; - end; - anOutputStream.Write(Outbuf, BufPtr - PChar(@OutBuf)); - until BytesRead = 0; -end; - -procedure DecodeStream(anInputStream, anOutputStream: TStream); -var - InBuf: array[0..75] of Char; - OutBuf: array[0..49] of Byte; - InBufPtr, OutBufPtr: PChar; - I, J, K, BytesRead: Integer; - Packet: TPacket; - - procedure SkipWhite; - var - C: Char; - NumRead: Integer; - begin - while True do - begin - NumRead := anInputStream.Read(C, 1); - if NumRead = 1 then - begin - if C in ['0'..'9','A'..'Z','a'..'z','+','/','='] then - begin - anInputStream.Position := anInputStream.Position - 1; - Break; - end; - end else Break; - end; - end; - -begin - repeat - SkipWhite; - BytesRead := anInputStream.Read(InBuf, SizeOf(InBuf)); - InBufPtr := InBuf; - OutBufPtr := @OutBuf; - I := 0; - while I < BytesRead do - begin - Packet := DecodePacket(InBufPtr, J); - K := 0; - while J > 0 do - begin - OutBufPtr^ := Char(Packet.a[K]); - Inc(OutBufPtr); - Dec(J); - Inc(K); - end; - Inc(InBufPtr, 4); - Inc(I, 4); - end; - anOutputStream.Write(OutBuf, OutBufPtr - PChar(@OutBuf)); - until BytesRead = 0; -end; - -function CompressStr(const aString : String) : String; -{$IFDEF LINUX} -var - Buffer : Pointer; - Size : Integer; -begin - try - try - CompressBuf(PChar(aString), Length(aString), Buffer, Size); - SetLength(Result, Size); - Move(Buffer^, Result[1], Size); - except - Buffer := nil; - end; - finally - FreeMem(Buffer); - end; -end; -{$ELSE} -begin - Result := aString; - ZFastCompressString(Result, clMax); -end; -{$ENDIF LINUX} - -function DecompressStr(const aString : String) : String; -{$IFDEF LINUX} -var - Buffer : Pointer; - Size : Integer; -begin - try - try - DecompressBuf(PChar(aString), Length(aString), 0, Buffer, Size); - SetLength(Result, Size); - Move(Buffer^, Result[1], Size); - except - Buffer := nil; - end; - finally - FreeMem(Buffer); - end; -end; -{$ELSE} -begin - Result := aString; - ZFastDecompressString(Result); -end; -{$ENDIF LINUX} - -{$IFDEF LINUX} -procedure ZCompressStream(anInputStream, aCompressedStream : TStream); -var - zstream : TCompressionStream; -begin - try - zstream := TCompressionStream.Create(clMax, aCompressedStream); - zstream.CopyFrom(anInputStream, 0); - finally - FreeAndNIL(zstream); - end; -end; - -procedure ZDecompressStream(aCompressedStream, anOutputStream : TStream); -var - zstream : TDecompressionStream; - buffer : array of byte; - bufflen : integer; - lBufferSize: integer; -begin - lBufferSize := 10*1024; - - SetLength(buffer,lBufferSize); - zstream := TDecompressionStream.Create(aCompressedStream); - try - - bufflen := zstream.Read(buffer[0], lBufferSize); - while (bufflen>0) do begin - anOutputStream.Write(buffer[0], bufflen); - bufflen := zstream.Read(buffer[0], lBufferSize); - end; - - finally - FreeAndNIL(zstream); - end; -end; -{$ENDIF} - -function CompressAndEncode(const aString: string): string; -var - fCompressedStream: TMemoryStream; - fStreamCompressor: TCompressionStream; - fStringStream: TStringStream; -begin - fCompressedStream := TMemoryStream.Create; - try - fStreamCompressor := TCompressionStream.Create(clMax, (fCompressedStream)); - try - fStreamCompressor.Write(aString[1], length(aString)); - finally - FreeAndNil(fStreamCompressor); - end; - fStringStream := TStringStream.create(''); - try - fCompressedStream.Position := 0; - EncodeStream(fCompressedStream, fStringStream); - Result := fStringStream.datastring; - finally - FreeAndNil(fStringStream); - end; - finally - FreeAndNil(fCompressedStream); - end; -end; - -function DecodeAndUnCompress(const aString: string): string; -var - fWorkStream: TMemoryStream; - fEncodedStream: TMemoryStream; - fStreamDeCompressor: TDecompressionStream; - fBufLen: integer; - fBuffer: array[0..16383] of byte; -begin - fWorkStream := TMemoryStream.create; - try - fWorkStream.size := length(aString); - move(aString[1], fWorkStream.memory^, fWorkStream.size); - fWorkStream.position := 0; - fEncodedStream := TMemoryStream.create; - try - DecodeStream(fWorkStream, fEncodedStream); - fWorkStream.size := 0; - fEncodedStream.position := 0; - fStreamDeCompressor := TDecompressionStream.Create(fEncodedStream); - try - fBufLen := fStreamDeCompressor.Read(fBuffer, SizeOf(fBuffer)); - while fBufLen > 0 do - begin - fWorkStream.Write(fBuffer, fBufLen); - fBufLen := fStreamDeCompressor.Read(fBuffer, SizeOf(fBuffer)); - end; - finally - FreeAndNil(fStreamDeCompressor); - end; - finally - FreeAndnil(fEncodedStream); - end; - fWorkStream.position := 0; - SetLength(Result, fWorkStream.size); - move(fWorkStream.memory^, Result[1], fWorkStream.size); - finally - FreeAndNil(fWorkStream); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODBSessionManager.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODBSessionManager.pas deleted file mode 100644 index 9b4f5cd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODBSessionManager.pas +++ /dev/null @@ -1,383 +0,0 @@ -unit uRODBSessionManager; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Niko Schoemaker (niko.schoemaker@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROSessions, DB; - -type - TConvertGUIDEvent = function(Sender: TROCustomSessionManager; const aGUID: TGUID): string of object; - { TRODBSessionManager } - TRODBSessionManager = class(TROCustomSessionManager) - private - fInsertDataset, - fDeleteDataset, - fUpdateDataset, - fSelectDataset, - fGetCountDataset, - fClearSessionsDataset, - fSelectAllDataset : TDataset; - - fFieldNameSessionID, - fFieldNameCreated, - fFieldNameLastAccessed, - fFieldNameData: string; - fClearSessionsOnDestroy: boolean; - fClearSessionsOnCreate: boolean; - fOnConvertGUID: TConvertGUIDEvent; - - function GetProvider(aDataset: TDataset): IProviderSupport; - procedure SetClearSessionsDataset(const Value: TDataset); - procedure SetDeleteDataset(const Value: TDataset); - procedure SetGetCountDataset(const Value: TDataset); - procedure SetInsertDataset(const Value: TDataset); - procedure SetSelectDataset(const Value: TDataset); - procedure SetUpdateDataset(const Value: TDataset); - procedure SetSelectAllDataset(const Value: TDataSet); - - protected - // TROCustomSessionManager - function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; override; - procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); override; - procedure DoClearSessions(OnlyExpired : boolean); override; - function DoGetSessionCount : integer; override; - procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); override; - procedure DoGetAllSessions(Dest: TStringList); override; - - function DoConvertGUID(const aGUID: TGUID): string; virtual; - // Internals - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure Loaded; override; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; - published - property FieldNameSessionID : string read fFieldNameSessionID write fFieldNameSessionID; - property FieldNameCreated : string read fFieldNameCreated write fFieldNameCreated; - property FieldNameLastAccessed : string read fFieldNameLastAccessed write fFieldNameLastAccessed; - property FieldNameData : string read fFieldNameData write fFieldNameData; - - property InsertDataset : TDataset read fInsertDataset write SetInsertDataset; - property DeleteDataset : TDataset read fDeleteDataset write SetDeleteDataset; - property UpdateDataset : TDataset read fUpdateDataset write SetUpdateDataset; - property SelectDataset : TDataset read fSelectDataset write SetSelectDataset; - property GetCountDataset : TDataset read fGetCountDataset write SetGetCountDataset; - {$WARNINGS OFF} - property ClearSessionsDataset : TDataset read fClearSessionsDataset write SetClearSessionsDataset; - {$WARNINGS ON} - property SelectAllDataset : TDataSet read fSelectAllDataset write SetSelectAllDataset; - - property ClearSessionsOnCreate : boolean read fClearSessionsOnCreate write fClearSessionsOnCreate default true; - property ClearSessionsOnDestroy : boolean read fClearSessionsOnDestroy write fClearSessionsOnDestroy default true; - property OnConvertGUID: TConvertGUIDEvent read fOnConvertGUID write fOnConvertGUID; - property SessionDuration; - property SessionCheckInterval; - - end; - -implementation - -uses - {$IFDEF DELPHI5}ComObj,{$ENDIF} - SysUtils,uROClasses; - -{ TRODBSessionManager } - -constructor TRODBSessionManager.Create(aOwner: TComponent); -begin - inherited; - - fClearSessionsOnDestroy := TRUE; - ClearSessionsOnCreate := TRUE; - - fFieldNameSessionID := 'SessionID'; - fFieldNameCreated := 'Created'; - fFieldNameLastAccessed := 'LastAccessed'; - fFieldNameData := 'Data'; -end; - -destructor TRODBSessionManager.Destroy; -begin - InsertDataset := nil; - DeleteDataset := nil; - UpdateDataset := nil; - SelectDataset := nil; - GetCountDataset := nil; - ClearSessionsDataset := nil; - inherited; -end; - -function TRODBSessionManager.GetProvider(aDataset : TDataset) : IProviderSupport; -begin - {$IFDEF DELPHI7UP} - result := aDataset as IProviderSupport; - {$ELSE} - result := IProviderSupport(aDataset); - {$ENDIF} -end; - -procedure TRODBSessionManager.DoClearSessions(OnlyExpired: boolean); -const HoursPerDay = 24; - MinsPerDay = HoursPerDay * 60; -var params : TParams; - provider : IProviderSupport; -begin - CheckProperties; - provider := GetProvider(fClearSessionsDataset); - - params := provider.PSGetParams; - - if OnlyExpired - then params.ParamByName(fFieldNameLastAccessed).AsDateTime := ((Now*MinsPerDay) - SessionDuration) / MinsPerDay - else params.ParamByName(fFieldNameLastAccessed).AsDateTime := Now+30; // 30 days from now. Enough to say all! - - provider.PSSetParams(params); - provider.PSExecute; -end; - -procedure TRODBSessionManager.DoDeleteSession(const aSessionID: TGUID; - IsExpired: boolean); -var params : TParams; - provider : IProviderSupport; -begin - CheckProperties; - provider := GetProvider(fDeleteDataset); - - params := provider.PSGetParams; - params.ParamByName(fFieldNameSessionID).Value := DoConvertGUID(aSessionID); - - provider.PSSetParams(params); - provider.PSExecute; -end; - -function TRODBSessionManager.DoFindSession(const aSessionID: TGUID; aUpdateTime: Boolean): TROSession; -var params : TParams; - data : TStream; - datafld : TBlobField; - provider : IProviderSupport; -begin - CheckProperties; - result := NIL; - provider := GetProvider(fSelectDataset); - - params := provider.PSGetParams; - params.ParamByName(fFieldNameSessionID).Value := DoConvertGUID(aSessionID); - provider.PSSetParams(params); - - data := nil; - fSelectDataset.Open; - try - if (fSelectDataset.RecordCount=0) - then Exit; - data := TMemoryStream.Create; - - //result := TROSession.Create(aSessionID); - result := DoCreateSession(aSessionID); - result.Created := fSelectDataset.FieldByName(fFieldNameCreated).AsDateTime; - result.LastAccessed := fSelectDataset.FieldByName(fFieldNameLastAccessed).AsDateTime; - - datafld := TBlobField(fSelectDataset.FieldByName(fFieldNameData)); - datafld.SaveToStream(data); - data.Position := 0; - result.LoadFromStream(data, TRUE); - finally - fSelectDataset.Close; - data.Free; - end; -end; - -function TRODBSessionManager.DoGetSessionCount: integer; -begin - CheckProperties; - fGetCountDataset.Open; - try - result := fGetCountDataset.Fields[0].AsInteger; - finally - fGetCountDataset.Close; - end; -end; - -procedure TRODBSessionManager.DoReleaseSession(aSession: TROSession; NewSession : boolean); -var params : TParams; - data : TStream; - provider : IProviderSupport; -begin - CheckProperties; - inherited; - data := TMemoryStream.Create; - try - if NewSession then begin - provider := GetProvider(fInsertDataset); - - params := provider.PSGetParams; - - params.ParamByName(fFieldNameSessionID).Value := DoConvertGUID(aSession.SessionID); - params.ParamByName(fFieldNameLastAccessed).AsDateTime := aSession.LastAccessed; - params.ParamByName(fFieldNameCreated).AsDateTime := aSession.Created; - - aSession.SaveToStream(data, TRUE); - data.Position := 0; - params.ParamByName(fFieldNameData).LoadFromStream(data, ftBlob); - - provider.PSSetParams(params); - provider.PSExecute; - end - else begin - provider := GetProvider(fUpdateDataset); - - params := provider.PSGetParams; - params.ParamByName(fFieldNameSessionID).Value := DoConvertGUID(aSession.SessionID); - params.ParamByName(fFieldNameLastAccessed).AsDateTime := aSession.LastAccessed; - //params.ParamByName(fFieldNameSessionID).Value := GUIDToString(aSession.SessionID); - - aSession.SaveToStream(data, TRUE); - params.ParamByName(fFieldNameData).LoadFromStream(data, ftBlob); - - provider.PSSetParams(params); - provider.PSExecute; - end; - finally - data.Free; - end; - aSession.Free(); -end; - -procedure TRODBSessionManager.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation=opRemove) then begin - if (AComponent=fInsertDataset) then fInsertDataset := NIL - else if (AComponent=fDeleteDataset) then fDeleteDataset := NIL - else if (AComponent=fUpdateDataset) then fUpdateDataset := NIL - else if (AComponent=fSelectDataset) then fSelectDataset := NIL - else if (AComponent=fGetCountDataset) then fGetCountDataset := NIL - else if (AComponent=fSelectAllDataset) then fSelectAllDataset := nil - else if (AComponent=fClearSessionsDataset) then begin - - if (csDestroying in ComponentState) and ClearSessionsOnDestroy then begin - // Cleans up after itself. If you get an AV related to the dataset's connection - // be aware of the fact that the dataset's creation order MUST BE after its relative - // connection. To see your form's Creation Order simply right click on it and select - // the relative menu item. - - DoClearSessions(false); - end; - - fClearSessionsDataset := NIL - end; - end; -end; - -procedure TRODBSessionManager.SetClearSessionsDataset(const Value: TDataset); -begin - fClearSessionsDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.SetDeleteDataset(const Value: TDataset); -begin - fDeleteDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.SetGetCountDataset(const Value: TDataset); -begin - fGetCountDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.SetInsertDataset(const Value: TDataset); -begin - fInsertDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.SetSelectDataset(const Value: TDataset); -begin - fSelectDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.SetUpdateDataset(const Value: TDataset); -begin - fUpdateDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -procedure TRODBSessionManager.Loaded; -begin - inherited; - - if not (csDesigning in ComponentState) and ClearSessionsOnCreate - then DoClearSessions(false); -end; - -procedure TRODBSessionManager.DoGetAllSessions(Dest: TStringList); -begin - CheckProperties; - fSelectAllDataset.Open; - try - fSelectAllDataset.First; - while not fSelectAllDataset.Eof do begin - Dest.Add(fSelectAllDataset.Fields[0].Value); - fSelectAllDataset.Next; - end; - finally - fSelectAllDataset.Close; - end; -end; - -procedure TRODBSessionManager.SetSelectAllDataset(const Value: TDataSet); -begin - fSelectAllDataset := Value; - if (Value<>NIL) then Value.FreeNotification(Self); -end; - -function TRODBSessionManager.DoConvertGUID(const aGUID: TGUID): string; -begin - if Assigned(fOnConvertGUID) then - try - Result:= fOnConvertGUID(Self, aGUID); - except - Result:= GUIDToString(aGUID); - end - else - Result:= GUIDToString(aGUID); -end; - -procedure TRODBSessionManager.CheckProperties; -begin - Check(FieldNameSessionID = '', Name + '.FieldNameSessionID must be set.'); - Check(FieldNameCreated = '', Name + '.FieldNameCreated must be set.'); - Check(FieldNameLastAccessed = '', Name + '.FieldNameLastAccessed must be assigned.'); - Check(FieldNameData = '', Name + '.FieldNameData must be set.'); - Check(InsertDataset = nil, Name + '.InsertDataset must be assigned.'); - Check(DeleteDataset = nil, Name + '.DeleteDataset must be assigned.'); - Check(UpdateDataset = nil, Name + '.UpdateDataset must be assigned.'); - Check(SelectDataset = nil, Name + '.SelectDataset must be assigned.'); - Check(GetCountDataset = nil, Name + '.GetCountDataset must be assigned.'); - Check(ClearSessionsDataset = nil, Name + '.ClearSessionsDataset must be assigned.'); - Check(SelectAllDataset = nil, Name + '.SelectAllDataset must be assigned.'); -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODL.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODL.pas deleted file mode 100644 index 2d9b3c5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODL.pas +++ /dev/null @@ -1,2072 +0,0 @@ -unit uRODL; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - Classes, Contnrs, uROClasses; - -const - EmptyGUID: TGUID = (D1: 0; D2: 0; D3: 0; D4: (0, 0, 0, 0, 0, 0, 0, 0)); - - DefaultIntfName = 'Default'; - -type - { Misc types } - TRODLParamFlag = (fIn, fOut, fInOut, fResult); - -const - RODLParamFlagNames: array[TRODLParamFlag] of string = ('in', 'out', 'in/out', 'result'); - -type - { TRODLNameInfo } - TRODLEntity = class; - TRODLLibrary = class; - - TRoPluginMessageType = (rmtInfo, rmtHint, rmtWarning, rmtError, rmtSuccess, rmtCustom); - - IROPluginMessages = interface - ['{9B07B5C2-FC07-4B9B-9207-D487CDC58D0E}'] - procedure AddMessage(iType:TRoPluginMessageType; const iSource, iMessage:string; aReserved:integer=-1; aEntity:TRODLEntity=nil); - end; - - IRODLEntityWithAncestor = interface - ['{88D59A20-5B47-4CF0-A06C-C135EB598B12}'] - function GetAncestor:string; - procedure SetAncestor(const iValue:string); - property Ancestor:string read GetAncestor write SetAncestor; - end; - - TRODLUse = class; - TRODLGroup = class; - - { TRODLEntity } - TRODLEntity = class(TObject, IUnknown) - private - fIsFromUsedRodl: boolean; - fLocatedInRodlUse: TRODLUse; - fOwner:TRODLEntity; - - fData: TObject; - fGroupUnder: TRODLGroup; - - fName: string; - fAttributes: TStringList; - fDocumentation: string; - fUID: TGUID; - - procedure SetName(const Value: string); virtual; - procedure SetDocumentation(const Value: string); - function GetAttributes: TStrings; - - function GetInfo: TRODLEntity; - function GetOwnerLibrary: TRODLLibrary; - - protected - function _AddRef: Integer; stdcall; - function _Release: Integer; stdcall; - function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; - - public - constructor Create; virtual; - destructor Destroy; override; - - procedure Validate(iMessages:IRoPluginMessages); virtual; - //function Validate(out FaultyEntity: TRODLEntity; out ErrorMessage: string): boolean; virtual; - - property Name: string read fName write SetName; - property Documentation: string read fDocumentation write SetDocumentation; - property UID: TGUID read fUID write fUID; - property Attributes: TStrings read GetAttributes; - - property Owner:TRODLEntity read fOwner; - property OwnerLibrary:TRODLLibrary read GetOwnerLibrary; - - property Info: TRODLEntity read GetInfo; { for backwards comatibility } - property IsFromUsedRodl:boolean read fIsFromUsedRodl write fIsFromUsedRodl; - property LocatedInRodlUse:TRODLUse read fLocatedInRodlUse write fLocatedInRodlUse; - - { Helpers for visual representation in SB and elsewhere } - property GroupUnder:TRODLGroup read fGroupUnder write fGroupUnder; - class function ReadableEntityTypeName: string; - - { Properties to hold custom application-specific data at runtime, for - the application coding convenience. These are not persisted in any way } - property Data:TObject read fData write fData; - - end; - - TRODLEntityClass = class of TRODLEntity; - - TRODLGroup = class(TRODLEntity) - end; - - { TRODLComplexEntity } - TRODLComplexEntity = class(TRODLEntity) - private - fItems: TObjectList; - fAutoCreateParams: boolean; - fAbstract: boolean; - - function GetCount: integer; - function GetItems(Index: integer): TRODLEntity; - - protected - function GetItemClass: TRODLEntityClass; virtual; abstract; - - public - constructor Create; override; - destructor Destroy; override; - - procedure Validate(iMessages:IRoPluginMessages); override; - //function Validate(out FaultyEntity: TRODLEntity; out ErrorMessage: string): boolean; override; - - function ContainsEntity(aEntity: TRODLEntity; aRecurse:boolean=true):boolean; - - function ItemByName(const aName: string): TRODLEntity; - function ItemByUID(const aUID: TGUID): TRODLEntity; - - function Add(anEntity: TRODLEntity): integer; overload; virtual; - function Add: TRODLEntity; overload; virtual; - procedure Insert(aIndex: integer; anEntity: TRODLEntity); overload; virtual; - function Insert(aIndex: integer): TRODLEntity; overload; virtual; - - function UniqueName(aBaseName:string):string; - - procedure Exchange(Index1, Index2: integer); virtual; - - - procedure Remove(anEntity: TRODLEntity); virtual; - procedure Delete(Index: integer); virtual; - procedure Clear; - procedure Sort; - - property AutoCreateParams:boolean read fAutoCreateParams write fAutoCreateParams; - property Abstract:boolean read fAbstract write fAbstract; - - property ItemClass: TRODLEntityClass read GetItemClass; - property Items[Index: integer]: TRODLEntity read GetItems; default; - property Count: integer read GetCount; - - end; - - { TRODLTypedEntity } - TRODLTypedEntity = class(TRODLEntity) - private - fDataType: string; - procedure SetDataType(const Value: string); - public - procedure Validate(iMessages: IRoPluginMessages); override; - property DataType: string read fDataType write SetDataType; - end; - - { TRODLStruct } - TRODLBaseStruct = class(TRODLComplexEntity, IRODLEntityWithAncestor) - private - fAncestor: string; - function GetItems(Index: integer): TRODLTypedEntity; - procedure SetAncestor(const Value: string); - - protected - function GetItemClass: TRODLEntityClass; override; - - public - function Add(aStructElement: TRODLTypedEntity): integer; reintroduce; overload; - function Add: TRODLTypedEntity; reintroduce; overload; - - procedure Validate(iMessages:IRoPluginMessages); override; - property Items[Index: integer]: TRODLTypedEntity read GetItems; default; - property Ancestor: string read fAncestor write SetAncestor; - function GetAncestor: string; - - function CalcItemsMarshalingOrder(aIncludeAncestors: boolean=true): IROStrings; - end; - - TRODLStruct = class(TRODLBaseStruct); - - { TRODLArray } - TRODLArray = class(TRODLEntity) - private - fElementType: string; - procedure SetElementType(const Value: string); - public - procedure Validate(iMessages:IRoPluginMessages); override; - //function Validate(out FaultyEntity: TRODLEntity; out ErrorMessage: string): boolean; override; - - property ElementType: string read fElementType write SetElementType; - end; - - { TRODLEnumValue } - TRODLEnumValue = class(TRODLEntity) - private - end; - - { TRODLEnum } - TRODLEnum = class(TRODLComplexEntity) - private - fPrefixEnumValues: Boolean; - function GetItems(Index: integer): TRODLEnumValue; - - protected - function GetItemClass: TRODLEntityClass; override; - - public - constructor Create; override; - - function Add(aStructElement: TRODLEnumValue): integer; reintroduce; overload; - function Add: TRODLEnumValue; reintroduce; overload; - - procedure Validate(iMessages:IRoPluginMessages); override; - property Items[Index: integer]: TRODLEnumValue read GetItems; default; - - property PrefixEnumValues: Boolean read fPrefixEnumValues write fPrefixEnumValues; - end; - - { TRODLOperationParam } - TRODLOperationParam = class(TRODLTypedEntity) - private - fFlag: TRODLParamFlag; - function GetFlag: string; - procedure SetFlag(const aValue: string); - public - property Flag: TRODLParamFlag read fFlag write fFlag; - property FlagAsString: string read GetFlag write SetFlag; - end; - - { TRODLOperation } - TRODLOperation = class(TRODLComplexEntity) - private - fOperationResult: TRODLOperationParam; - fCodeBodies: TStringList; - fForceAsyncResponse: boolean; - function GetItems(Index: integer): TRODLOperationParam; - function GetResult: TRODLOperationParam; - function GetCodeBody(iLanguage: string): TStrings; - function GetCodeBodyCount: integer; - function GetCodeBodyLanguages(iIndex: integer): string; - - protected - function GetItemClass: TRODLEntityClass; override; - - public - constructor Create; override; - destructor Destroy; override; - - function Add(aParam: TRODLOperationParam): integer; reintroduce; overload; - function Add: TRODLOperationParam; reintroduce; overload; - - {procedure MoveResult(); - procedure Exchange(Index1, Index2: integer); override;} - - procedure SetCodeBody(iLanguage: string; Value: TStrings); - procedure SetCodeBodyAsString(iLanguage: string; const Value: string); - - function GetParameter(const aParameterName : string) : TRODLOperationParam; - - property Items[Index: integer]: TRODLOperationParam read GetItems; default; - - property Result: TRODLOperationParam read GetResult; - function AddResult: TRODLOperationParam; - procedure RemoveResult; - - property ForceAsyncResponse:boolean read fForceAsyncResponse write fForceAsyncResponse; - - property CodeBodies[iLanguage:string]:TStrings read GetCodeBody write SetCodeBody; - property CodeBodyCount:integer read GetCodeBodyCount; - property CodeBodyLanguages[iIndex:integer]:string read GetCodeBodyLanguages; - - procedure Validate(iMessages: IROPluginMessages); override; - end; - - { TRODLServiceInterface } - TRODLServiceInterface = class(TRODLComplexEntity) - private - function GetItems(Index: integer): TRODLOperation; - - protected - function GetItemClass: TRODLEntityClass; override; - - public - procedure GetOperationsList(AList: TList); - function FindOperation(const anOperationName : string; IncludeAnchestors : boolean = FALSE) : TRODLOperation; - function GetOperation(const anOperationName : string; IncludeAnchestors : boolean = FALSE) : TRODLOperation; - - function Add(aParam: TRODLOperation): integer; reintroduce; overload; - function Add: TRODLOperation; reintroduce; overload; - - property Items[Index: integer]: TRODLOperation read GetItems; default; - end; - - { TRODLBaseService } - TRODLBaseService = class(TRODLComplexEntity, IRODLEntityWithAncestor) - private - fAncestor: string; - fImplClass: string; - fImplUnit: string; - fisPrivate: Boolean; - function GetItems(Index: integer): TRODLServiceInterface; - function GetDefault: TRODLServiceInterface; - procedure SetAncestor(const Value: string); - - protected - function GetItemClass: TRODLEntityClass; override; - public - constructor Create; override; - - function Add(aServiceInterface: TRODLServiceInterface): integer; reintroduce; overload; - function Add: TRODLServiceInterface; reintroduce; overload; - - procedure Validate(iMessages: IRoPluginMessages); override; - property Items[Index: integer]: TRODLServiceInterface read GetItems; default; - property Default: TRODLServiceInterface read GetDefault; - property Ancestor: string read fAncestor write SetAncestor; - - property ImplUnit:string read fImplUnit write fImplUnit; - property ImplClass:string read fImplClass write fImplClass; - function GetAncestor:string; - property isPrivate: Boolean read fisPrivate write fisPrivate; - end; - - TRODLService = class(TRODLBaseService); - TRODLEventSink = class(TRODLBaseService); - - { TRODLArray } - TRODLException = class(TRODLBaseStruct) - public - procedure Validate(iMessages:IRoPluginMessages); override; - end; - - { TRODLUse } - TRODLUse = class(TRODLEntity) - private - fRodlFile: string; - fAbsoluteRodlFile: string; - fLoadedRodlLibraryName: string; - fGenerateCode: boolean; - public - procedure Validate(iMessages:IRoPluginMessages); override; - property RodlFile:string read fRodlFile write fRodlFile; - property AbsoluteRodlFile:string read fAbsoluteRodlFile write fAbsoluteRodlFile; - property LoadedRodlLibraryName: string read fLoadedRodlLibraryName write fLoadedRodlLibraryName; - property GenerateCode: boolean read fGenerateCode write fGenerateCode; - end; - - { TRODLLibrary } - TRODLLibrary = class(TRODLComplexEntity) - private - fArrayCount: integer; - fServiceCount: integer; - fStructCount: integer; - fEnumCount: integer; - fExceptionCount: integer; - fUseCount: integer; - fEventSinkCount: integer; - fGroupCount: integer; - fRodlFilename: string; - fNamespace: string; - - function GetByType(aIndex:integer; aType:TRODLEntityClass):TRODLEntity; - function GetArray(Index: integer): TRODLArray; - function GetEnums(Index: integer): TRODLEnum; - function GetServices(Index: integer): TRODLService; - function GetStructs(Index: integer): TRODLStruct; - function GetExceptions(Index: integer): TRODLException; - function GetUse(Index: integer): TRODLUse; - function CalcOrder(const iObjects: IROStrings): IROStrings; - function GetGroups(Index: integer): TRODLGroup; - function GetEventSinks(Index: integer): TRODLEventSink; - - protected - function GetItemClass: TRODLEntityClass; override; - - public - constructor Create(); override; - - procedure GetArraysByElement(const aElementName:string; AList: TList); - function FindService(const iServiceName: string): TRODLService; - function FindStruct(const iStructName: string): TRODLStruct; - function FindBaseStruct(const iStructName: string): TRODLBaseStruct; - function FindEnum(const iEnumName: string): TRODLEnum; - function FindArray(const iArrayName: string): TRODLArray; - function FindGroup(const aID: TGUID): TRODLGroup; overload; - function FindException(const iExceptionName: string): TRODLException; - function FindUse(const iUseName: string): TRODLUse; - function FindUseByFilename(const iUseRODLFile: string): TRODLUse; - - procedure ClearDuplicates(); - - function GetService(const aServiceName: string): TRODLService; - function GetStruct(const aStructName: string): TRODLStruct; - - function IsValidCustomType(const iTypeName:string):boolean; - function IsValidSimpleType(const iTypeName: string): boolean; - function IsValidType(const iTypeName:string):boolean; - function IsValidService(const iServiceName:string):boolean; - function IsValidEventSink(const iEventSink:string):boolean; - function IsValidException(const iTypeName:string):boolean; - - function Add(anEntity: TRODLEntity): integer; override; - - function CalcServiceOrder:IROStrings; - function CalcEventSinkOrder: IROStrings; - function CalcExceptionOrder: IROStrings; - function CalcStructOrder: IROStrings; - - procedure Delete(Index: integer); override; - procedure Remove(anEntity: TRODLEntity); override; - - property RodlFilename:string read fRodlFilename write fRodlFilename; - property Namespace: string read fNamespace write fNamespace; - - property Structs[Index: integer]: TRODLStruct read GetStructs; - property StructCount: integer read fStructCount; - - property Arrays[Index: integer]: TRODLArray read GetArray; - property ArrayCount: integer read fArrayCount; - - property Enums[Index: integer]: TRODLEnum read GetEnums; - property EnumCount: integer read fEnumCount; - - property Services[Index: integer]: TRODLService read GetServices; - property ServiceCount: integer read fServiceCount; - - property Exceptions[Index: integer]: TRODLException read GetExceptions; - property ExceptionCount: integer read fExceptionCount; - - property Use[Index: integer]: TRODLUse read GetUse; - property UseCount: integer read fUseCount; - - property Groups[Index: integer]: TRODLGroup read GetGroups; - property GroupCount: integer read fGroupCount; - - property EventSinks[Index: integer]: TRODLEventSink read GetEventSinks; - property EventSinkCount: integer read fEventSinkCount; - end; - - { TRODLConverter } - TRODLConverter = class - private - fBuffer: TStringList; - fTargetEntity: string; - - function GetBuffer: TStrings; - - protected - procedure IntConvert(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); virtual; abstract; - function ValidateTargetEntity(const aLibrary: TRODLLibrary; const aTargetEntity: string): boolean; virtual; - - public - constructor Create(const aLibraryFile: string; const aTargetEntity: string = ''); overload; virtual; - constructor Create(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); overload; virtual; - destructor Destroy; override; - - procedure Write(const someText: string; Indentation: integer = 0); overload; - procedure WriteLines(const someText: string); - procedure WriteEmptyLine; - - procedure Convert(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); - class function GetTargetFileName(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''): string; virtual; - - property Buffer: TStrings read GetBuffer; - property TargetEntity: string read fTargetEntity; - end; - - TRODLConverterClass = class of TRODLConverter; - - { TRODLReader } - TRODLReader = class - private - protected - function IntReadFromStream(aStream: TStream; aFilename:string): TRODLLibrary; virtual; abstract; - - public - constructor Create; virtual; - - function Read(aStream: TStream; const aFilename:string=''): TRODLLibrary; - function ReadFromFile(const aFileName: string): TRODLLibrary; - end; - - TRODLReaderClass = class of TRODLReader; - -function ReadRODLFromFile(aReaderClass: TRODLReaderClass; const aFileName: string): TRODLLibrary; - -function ExpandVariables(const aFilename:string):string; - -implementation - -uses - {$IFDEF DEBUG_REMOBJECTS_RODL}eDebugServer, {$ENDIF} - {$IFDEF DELPHI5} ActiveX, Windows, {$ENDIF} - {$IFDEF MSWINDOWS}Registry, {$IFNDEF DELPHI5}Windows,{$ENDIF}{$ENDIF} - SysUtils, TypInfo, uRORes, uRODLToXML, uROTypes, Math; - -{ Support routines } - -{$IFDEF MSWINDOWS} -function LookupVariable(const aVariable:string):string; -begin - with TRegistry.Create do try - RootKey := HKEY_CURRENT_USER; - OpenKey('Software\RemObjects\RemObjects SDK\Variables',false); - result := ReadString(aVariable); -{ if result = '' then - RaiseError('Variable $(%s) used in RODL is not defined.',[aVariable]); - } - finally - Free; - end; -end; -{$ENDIF} - -{$IFDEF MSWINDOWS} -function ExpandVariables(const aFilename:string):string; -var - p: Integer; - lName,lVar:string; -begin - lName := aFilename; - if Pos('$(',lName) = 1 then begin - p := Pos(')',lName); - if p > 1 then begin - lVar := Copy(lName,3,p-3); - Delete(lName,1,p); - result := LookupVariable(lVar)+lName; - exit; - end; - end; - result := aFilename; -end; -{$ELSE} -function ExpandVariables(const aFilename:string):string; -begin - result := aFilename; -end; -{$ENDIF} - -function CleanupText(const someText: string): string; -var - i: integer; -begin - result := Trim(someText); - for i := 1 to Length(result) do - case result[i] of - '0'..'9': begin - if (i = 1) then result[i] := '_'; - end; - 'a'..'z', - 'A'..'Z', - '_': Continue; - else - result[i] := '_'; - end; -end; - -function CleanupTextAllowSpaces(const someText: string): string; -var - i: integer; -begin - result := Trim(someText); - for i := 1 to Length(result) do - case result[i] of - {'0'..'9' : begin - if (i=1) then result[i] := '_'; - end;} - #13, #10, #09, - #$20..#$21, - #$23..#$25, - #$27..#$3b, - #$3d, - #$3f..#$7e: Continue; - else - result[i] := '_'; - end; -end; - -function ReadRODLFromFile(aReaderClass: TRODLReaderClass; const aFileName: string): TRODLLibrary; -begin - with aReaderClass.Create do try - result := ReadFromFile(aFileName); - finally - Free; - end; -end; - -{ TRODLNameInfo } - -{constructor TRODLNameInfo.Create(const aName: string; aOwner:TRODLEntity); -begin - Name := aName; - fOwner := aOwner; - fUID := NewUID(); -end; - -destructor TRODLNameInfo.Destroy; -begin - if Assigned(fAttributes) then fAttributes.Free; - inherited; -end; - -function TRODLNameInfo.GetAttributes: TStrings; -begin - if (fAttributes = nil) then fAttributes := TStringList.Create; - result := fAttributes; -end; - -procedure TRODLNameInfo.SetName(const Value: string); -begin - fName := CleanupText(Value); -end; - -procedure TRODLNameInfo.SetDocumentation(const Value: string); -begin - fDocumentation := CleanupTextAllowSpaces(Value); -end; } - -{ TRODLEntityInfo } - -{constructor TRODLEntityInfo.Create(const aName: string; const aUID: TGUID; const someDocumentation: string; aOwner:TRODLEntity); -begin - inherited Create(aName,aOwner); - - UID := aUID; - Documentation := someDocumentation; -end;} - -{procedure TRODLEntityInfo.Validate(iMessages:IRoPluginMessages); -//function TRODLEntityInfo.GetIsValid: boolean; -begin - //result := inherited GetIsValid and - if IsEqualGUID(UID, EmptyGUID) then - iMessages.AddMessage(rmtWarning,Name,'No UID specified',-1,Owner); -end;} - -{ TRODLEntity } - -constructor TRODLEntity.Create; -begin - fUID := NewGUID(); -end; - -destructor TRODLEntity.Destroy; -begin - if Assigned(fAttributes) then fAttributes.Free; - inherited; -end; - -function TRODLEntity.GetInfo: TRODLEntity; -begin - result := self; -end; - -procedure TRODLEntity.Validate(iMessages:IRoPluginMessages); -begin - if (Trim(Name) = '') then - iMessages.AddMessage(rmtError,'','No Name specified',-1,Owner); - - { ToDo: add a flag that specified whether UID is needed for the explicit base types } - if IsEqualGUID(UID, EmptyGUID) then - iMessages.AddMessage(rmtWarning,Name,'No UID specified',-1,Owner); - - {result := Info.IsValid; - if not result then begin - FaultyEntity := Self; - ErrorMessage := err_InvalidInfo; - end;} -end; - -function TRODLEntity.GetOwnerLibrary: TRODLLibrary; -var lOwner:TRODLEntity; -begin - lOwner := fOwner; - while Assigned(lOwner) and (not (lOwner is TRODLLibrary)) do - lOwner := lOwner.Owner; - - Assert(Assigned(lOwner)); - result := lOwner as TRODLLibrary; -end; - -function TRODLEntity._AddRef: Integer; -begin - result := 1; -end; - -function TRODLEntity._Release: Integer; -begin - result := 1; -end; - -function TRODLEntity.QueryInterface(const IID: TGUID; out Obj): HRESULT; -begin - if GetInterface(IID, Obj) then - Result := 0 - else - Result := E_NOINTERFACE; -end; - -class function TRODLEntity.ReadableEntityTypeName: string; -begin - result := ClassName; - Delete(result,1,5); { delete the "TRODL" } -end; - -function TRODLEntity.GetAttributes: TStrings; -begin - if (fAttributes = nil) then fAttributes := TStringList.Create; - result := fAttributes; -end; - -procedure TRODLEntity.SetDocumentation(const Value: string); -begin - fDocumentation := Value; -end; - -procedure TRODLEntity.SetName(const Value: string); -begin - fName := CleanupText(Value); -end; - -{ TRODLComplexEntity } - -function TRODLComplexEntity.Add(anEntity: TRODLEntity): integer; -begin - if not (anEntity is ItemClass) then RaiseError(err_InvalidType, [anEntity.ClassName, ItemClass.ClassName]); - result := fItems.Add(anEntity); - anEntity.fOwner := self; -end; - -function TRODLComplexEntity.Add: TRODLEntity; -begin - result := ItemClass.Create; - result.fOwner := self; - Add(result); -end; - -procedure TRODLComplexEntity.Insert(aIndex: integer; anEntity: TRODLEntity); -begin - if not (anEntity is ItemClass) then RaiseError(err_InvalidType, [anEntity.ClassName, ItemClass.ClassName]); - fItems.Insert(aIndex, anEntity); - anEntity.fOwner := self; -end; - -function TRODLComplexEntity.Insert(aIndex: integer): TRODLEntity; -begin - result := ItemClass.Create; - result.fOwner := self; - Insert(aIndex, result); -end; - -procedure TRODLComplexEntity.Clear; -begin - fItems.Clear; -end; - -constructor TRODLComplexEntity.Create; -begin - inherited; - fAutoCreateParams := true; - fItems := TObjectList.Create; -end; - -procedure TRODLComplexEntity.Delete(Index: integer); -begin - fItems.Delete(Index); -end; - -destructor TRODLComplexEntity.Destroy; -begin - fItems.Free; - inherited; -end; - -function TRODLComplexEntity.GetCount: integer; -begin - result := fItems.Count -end; - -procedure TRODLComplexEntity.Validate(iMessages:IRoPluginMessages); -//function TRODLComplexEntity.Validate(out FaultyEntity: TRODLEntity; out ErrorMessage: string): boolean; -var - i, n: integer; -begin - inherited Validate(iMessages); - //if not result then Exit; - //result := FALSE; - - // Check type names are unique - for i := 0 to (Count - 2) do - for n := i + 1 to (Count - 1) do - if (CompareText(Items[i].Info.Name, Items[n].Info.Name) = 0) then begin - - iMessages.AddMessage(rmtError,Info.Name+'.'+Items[i].Info.Name,err_RodlDuplicateName,-1,Items[n]); - - {FaultyEntity := ; - ErrorMessage := Format(err_DuplicateName, [Items[n].Info.Name]); - Exit;} - end; - - // Check they are all valid on a basic level - for i := 0 to (Count - 1) do - Items[i].Validate(iMessages); - //if not Items[i].Validate(FaultyEntity, ErrorMessage) then Exit; - - //result := TRUE; -end; - -function TRODLComplexEntity.GetItems(Index: integer): TRODLEntity; -begin - result := TRODLEntity(fItems[Index]); -end; - -function TRODLComplexEntity.ItemByName(const aName: string): TRODLEntity; -var - i: integer; -begin - result := nil; - - for i := 0 to (Count - 1) do - if (CompareText(Items[i].Info.Name, aName) = 0) then begin - result := Items[i]; - Exit; - end; -end; - -function TRODLComplexEntity.ItemByUID(const aUID: TGUID): TRODLEntity; -var - i: integer; -begin - result := nil; - - for i := 0 to (Count - 1) do - if IsEqualGUID(Items[i].Info.UID, aUID) then begin - result := Items[i]; - Exit; - end; -end; - -procedure TRODLComplexEntity.Remove(anEntity: TRODLEntity); -begin - fItems.Remove(anEntity) -end; - -procedure TRODLComplexEntity.Exchange(Index1, Index2: integer); -begin - fItems.Exchange(Index1, Index2); -end; - -function TRODLComplexEntity.UniqueName(aBaseName: string): string; -var - i: Integer; - lIndex: Integer; - lOk: boolean; -begin - lIndex := 0; - result := aBasename; - repeat - lOk := true; - for i := 0 to Count-1 do begin - if result = Items[i].Info.Name then begin - inc(lIndex); - result := aBaseName+IntToStr(lIndex); - lOk := false; - end; - end; { for } - until lOk; -end; - -function TRODLComplexEntity.ContainsEntity(aEntity: TRODLEntity; aRecurse:boolean=true): boolean; -var - i: Integer; -begin - result := false; - for i := 0 to Count-1 do begin - if Items[i] = aEntity then begin - result := true; - exit; - end; - if aRecurse and (Items[i] is TRODLComplexEntity) then begin - result := TRODLComplexEntity(Items[i]).ContainsEntity(aEntity); - if result then exit; - end; - end; { for } -end; - -function SortItem(Item1, Item2: Pointer): Integer; -begin - Result := CompareText(TRODLEntity(Item1).Name, TRODLEntity(Item2).name); -end; - -procedure TRODLComplexEntity.Sort; -begin - fItems.Sort(@SortItem); -end; - -{ TRODLTypedEntity } - -procedure TRODLTypedEntity.Validate(iMessages:IRoPluginMessages); -begin - if (DataType = '') then begin - iMessages.AddMessage(rmtError,Owner.Owner.Info.Name+'.'+Name,err_RodlNoDataTypeSpecified,-1,Owner); - exit; - end; - - if not Owner.OwnerLibrary.IsValidType(DataType) then - iMessages.AddMessage(rmtError,Owner.Owner.Info.Name+'.'+Name,Format(err_RodlInvalidDataType,[DataType]),-1,Owner); - - if not (Owner is TRODLOperation) then - begin - if (CompareText(DataType,Owner.Info.Name) = 0) then - iMessages.AddMessage(rmtError,Owner.Info.Name,Format(err_RodlStructCannotBeNested,[DataType]),-1,Owner); - end; -end; - -procedure TRODLTypedEntity.SetDataType(const Value: string); -begin - fDataType := CleanupText(Value); -end; - -{ TRODLStruct } - -function TRODLBaseStruct.Add(aStructElement: TRODLTypedEntity): integer; -begin - result := inherited Add(aStructElement) -end; - -function TRODLBaseStruct.Add: TRODLTypedEntity; -begin - result := TRODLTypedEntity(inherited Add); - result.Info.Name := 'Field' + IntToStr(Count); -end; - -function CompareRODLBaseStructItems(List: TStringList; Index1, Index2: Integer): Integer; -begin - Result := CompareText(List[Index1], List[Index2]); -end; - -function TRODLBaseStruct.CalcItemsMarshalingOrder(aIncludeAncestors: boolean=true): IROStrings; -var - lAncestor: TRODLBaseStruct; - i:integer; -begin - result := NewROStrings(); - result.Sorted := True; - result.Duplicates := dupIgnore; - - lAncestor := self; - repeat - for i := lAncestor.Count-1 downto 0 do - result.AddObject(lAncestor.Items[i].Name, lAncestor.Items[i]); - - if lAncestor.Ancestor <> '' then - lAncestor := OwnerLibrary.FindBaseStruct(lAncestor.Ancestor) - else - lAncestor := nil; - - until (not Assigned(lAncestor)) or (not aIncludeAncestors); - - // Do not use "Result.Sorted" because it uses AnsiCompareText for the comparisons - // whereas the SortPropList method originally used via GetGetPropList in TROSerializer.ReadObject - // does a case insensitive ASCII based sort. Hence the need to do our own - // sorting that calls CompareText. - result.Sorted := False; - result.CustomSort(CompareRODLBaseStructItems); -end; - -function TRODLBaseStruct.GetAncestor: string; -begin - result := fAncestor; -end; - -function TRODLBaseStruct.GetItemClass; -begin - result := TRODLTypedEntity; -end; - -function TRODLBaseStruct.GetItems(Index: integer): TRODLTypedEntity; -begin - result := TRODLTypedEntity(inherited Items[Index]); -end; - -procedure TRODLBaseStruct.SetAncestor(const Value: string); -begin - fAncestor := Trim(Value); -end; - -procedure TRODLBaseStruct.Validate(iMessages: IRoPluginMessages); -begin - inherited; - { Hack: for exemptions, dont warn about missing elements } - { ToDo: create a command base class for struct and exception, and derrive both, to avoid this kind of prob. } - if (Count = 0) and not (self is TRODLException) and (Ancestor = '') then - iMessages.AddMessage(rmtWarning,Info.Name,err_RodlNoStructElementsDefined,-1,self); - - if (Ancestor <> '') and not OwnerLibrary.IsValidType(Ancestor) and not (self is TRODLException) then // exceptions ancestors are checked in TRODLException.Validate - iMessages.AddMessage(rmtError,Info.Name,Format(err_RodlInvalidAncestorType,[Ancestor]),-1,self); -end; - -{ TRODLEnum } - -function TRODLEnum.Add(aStructElement: TRODLEnumValue): integer; -begin - result := inherited Add(aStructElement) -end; - -function TRODLEnum.Add: TRODLEnumValue; -begin - result := TRODLEnumValue(inherited Add); - result.Info.Name := 'Value' + IntToSTr(Count); -end; - -constructor TRODLEnum.Create; -begin - inherited; - fPrefixEnumValues := True; -end; - -function TRODLEnum.GetItemClass: TRODLEntityClass; -begin - result := TRODLEnumValue; -end; - -function TRODLEnum.GetItems(Index: integer): TRODLEnumValue; -begin - result := TRODLEnumValue(inherited Items[Index]); -end; - -procedure TRODLEnum.Validate(iMessages: IRoPluginMessages); -begin - inherited; - if Count = 0 then - iMessages.AddMessage(rmtError,Info.Name,err_RodlNoEnumValues,-1,self); -end; - -{ TRODLBaseService } - -function TRODLBaseService.Add(aServiceInterface: TRODLServiceInterface): integer; -begin - result := inherited Add(aServiceInterface); -end; - -function TRODLBaseService.Add: TRODLServiceInterface; -begin - result := TRODLServiceInterface(inherited Add); -end; - -constructor TRODLBaseService.Create; -var - defintf: TRODLServiceInterface; -begin - inherited; - fisPrivate := False; - defintf := Add; - defintf.Info.Name := DefaultIntfName; - defintf.Info.UID := NewGUID; -end; - -function TRODLBaseService.GetAncestor: string; -begin - result := fAncestor; -end; - -function TRODLBaseService.GetDefault: TRODLServiceInterface; -var - i: integer; -begin - result := nil; - if (Count = 1) then - result := Items[0] - else - for i := 0 to (Count - 1) do - if (CompareText(Items[i].Info.name, DefaultIntfName) = 0) then begin - result := Items[i]; - Exit; - end; -end; - -function TRODLBaseService.GetItemClass: TRODLEntityClass; -begin - result := TRODLServiceInterface; -end; - -function TRODLBaseService.GetItems(Index: integer): TRODLServiceInterface; -begin - result := TRODLServiceInterface(inherited Items[Index]); -end; - -procedure TRODLBaseService.SetAncestor(const Value: string); -begin - fAncestor := Trim(Value); -end; - -procedure TRODLBaseService.Validate(iMessages: IRoPluginMessages); -var - i:integer; -begin - inherited; - for i := 0 to Count-1 do begin - //Items[i].Validate(iMessages); - if (Items[i].Count = 0) and (Ancestor = '') then - iMessages.AddMessage(rmtWarning,Info.Name+'.'+Items[i].Info.Name,err_RodlNoOperationsDefined,-1,self); - end; - - if (Ancestor <> '') then begin - if self is TRODLEventSink then begin - if not OwnerLibrary.IsValidEventSink(Ancestor) then - iMessages.AddMessage(rmtError,Info.Name,Format(err_RodlInvalidAncestorType,[Ancestor]),-1,self); - end else begin - if not OwnerLibrary.IsValidService(Ancestor) then - iMessages.AddMessage(rmtError,Info.Name,Format(err_RodlInvalidAncestorType,[Ancestor]),-1,self); - end; - end; -end; - -{ TRODLOperationParam } - -{constructor TRODLOperationParam.Create(const aName, aTypeName: string; aFlag: TRODLParamFlag; aOwner:TRODLEntity); -begin - inherited Create(aName, aTypeName, aOwner); - Flag := aFlag; -end;} - -function TRODLOperationParam.GetFlag: string; -begin - result := RODLParamFlagNames[fFlag]; -end; - -procedure TRODLOperationParam.SetFlag(const aValue: string); -var - lFlag: TRODLParamFlag; -begin - for lFlag := Low(TRODLParamFlag) to High(TRODLParamFlag) do - if SameText(RODLParamFlagNames[lFlag], aValue) then begin - fFlag := lFlag; - exit; - end; - RaiseError(err_InvalidParamFlag, [aValue]); -end; - -{ TRODLOperation } - -function TRODLOperation.Add(aParam: TRODLOperationParam): integer; -begin - if aParam.fFlag = fResult then - RaiseError(err_MayNotAddResult); - - result := inherited Add(aParam) -end; - -function TRODLOperation.Add: TRODLOperationParam; -begin - result := TRODLOperationParam(inherited Add); - result.Info.Name := 'Param' + IntToStr(Count); -end; - -function TRODLOperation.GetItemClass: TRODLEntityClass; -begin - result := TRODLOperationParam; -end; - -function TRODLOperation.GetItems(Index: integer): TRODLOperationParam; -begin - result := TRODLOperationParam(inherited Items[Index]); -end; - -function TRODLOperation.GetResult: TRODLOperationParam; -{var - i: integer;} -begin - result := fOperationResult; - {result := nil; - for i := 0 to (Count - 1) do - if (Items[i].Info.Flag = fResult) then begin - result := Items[i]; - Exit; - end;} -end; - -{ Makes sure the Result patrameter is always at the top of the list, so it - doesn't get in the way of sorting methods. } - -{procedure TRODLOperation.MoveResult; -var - i: integer; -begin - for i := 0 to (Count - 1) do - if (Items[i].Info.Flag = fResult) then begin - if i <> 0 then fItems.Move(i,0); - Exit; - end; -end;} - - -function TRODLOperation.GetCodeBody(iLanguage: string): TStrings; -var - lIndex:integer; -begin - result := nil; - - lIndex := fCodeBodies.IndexOf(iLanguage); - if lIndex > -1 then result := fCodeBodies.Objects[lIndex] as TStrings -end; - -procedure TRODLOperation.SetCodeBody(iLanguage: string; Value: TStrings); -var - lStrings:TStrings; - lIndex:integer; -begin - if Assigned(Value) then begin - lStrings := GetCodeBody(iLanguage); - if not Assigned(lStrings) then begin - lStrings := TStringList.Create(); - fCodeBodies.AddObject(Lowercase(iLanguage),lStrings); - end; - lStrings.Assign(Value); - end - else begin - lIndex := fCodeBodies.IndexOf(iLanguage); - if lIndex > 0 then fCodeBodies.Delete(lIndex); - end; -end; - -procedure TRODLOperation.SetCodeBodyAsString(iLanguage: string; const Value: string); -var - lStrings:TStrings; - lIndex:integer; -begin - if Value <> '' then begin - lStrings := GetCodeBody(iLanguage); - if not Assigned(lStrings) then begin - lStrings := TStringList.Create(); - fCodeBodies.AddObject(Lowercase(iLanguage),lStrings); - end; - lStrings.Text := Value; - end - else begin - lIndex := fCodeBodies.IndexOf(iLanguage); - if lIndex > 0 then fCodeBodies.Delete(lIndex); - end; -end; - -constructor TRODLOperation.Create; -begin - inherited; - fCodeBodies := TStringList.Create(); - fCodeBodies.Sorted := true; - fCodeBodies.Duplicates := dupError; -end; - -destructor TRODLOperation.Destroy; -var i:integer; -begin - RemoveResult; - for i := 0 to fCodeBodies.Count-1 do fCodeBodies.Objects[i].Free(); - FreeAndNil(fCodeBodies); - inherited; -end; - -function TRODLOperation.GetCodeBodyCount: integer; -begin - result := fCodeBodies.Count; -end; - -function TRODLOperation.GetCodeBodyLanguages(iIndex: integer): string; -begin - result := fCodeBodies[iIndex]; -end; - -{procedure TRODLOperation.Exchange(Index1, Index2: integer); -begin - MoveResult(); - if Assigned(GetResult()) then begin - inc(Index1); - inc(Index2); - end; - inherited Exchange(Index1, Index2); -end;} - -function TRODLOperation.AddResult: TRODLOperationParam; -begin - if not Assigned(fOperationResult) then begin - fOperationResult := TRODLOperationParam.Create; - fOperationResult.fOwner := self; - fOperationResult.Flag := fResult; - fOperationResult.Name := 'Result'; - end; - result := fOperationResult; -end; - -procedure TRODLOperation.RemoveResult; -begin - if Assigned(fOperationResult) then - FreeAndNil(fOperationResult); -end; - -function TRODLOperation.GetParameter(const aParameterName: string): TRODLOperationParam; -begin - result := TRODLOperationParam(ItemByName(aParameterName)); - if result=NIL then raise EROUnknownItem.CreateFmt('Cannot find parameter %s', [aParameterName]); -end; - -procedure TRODLOperation.Validate(iMessages: IROPluginMessages); -begin - inherited; - if (Result <> nil) and (Result.DataType <> '') then begin - if not Owner.OwnerLibrary.IsValidType(Result.DataType) then - iMessages.AddMessage(rmtError,Info.Name+'.'+Name,Format(err_RodlInvalidDataType,[Result.DataType]),-1,Self); - end; -end; - -{ TRODLServiceInterface } - -function TRODLServiceInterface.Add(aParam: TRODLOperation): integer; -begin - result := inherited Add(aParam) -end; - -function TRODLServiceInterface.Add: TRODLOperation; -begin - result := TRODLOperation(inherited Add); - result.Info.Name := 'Operation' + IntToStr(Count); - result.Info.UID := NewGUID; -end; - -function TRODLServiceInterface.GetOperation( - const anOperationName: string; - IncludeAnchestors : boolean = FALSE) : TRODLOperation; -begin - result := FindOperation(anOperationName, IncludeAnchestors); - if (result=NIL) then raise EROUnknownItem.CreateFmt('Cannot find operation %s', [anOperationName]); -end; - -procedure TRODLServiceInterface.GetOperationsList(AList: TList); -var svc : TRODLService; - i: Integer; - lib : TRODLLibrary; -begin - AList.Clear; - - For i:=0 to Count-1 do - AList.Add(Items[i]); - - lib := info.Owner.OwnerLibrary; - svc := lib.FindService((Owner as TRODLService).Info.Name); - - while TRUE do begin - if (svc.Ancestor='') then Break; - - svc := lib.GetService(svc.Ancestor); - - For i:=0 to Count-1 do - AList.Add(svc.Default.Items[i]); - end; -end; - -function TRODLServiceInterface.GetItemClass: TRODLEntityClass; -begin - result := TRODLOperation; -end; - -function TRODLServiceInterface.GetItems(Index: integer): TRODLOperation; -begin - result := TRODLOperation(inherited Items[Index]); -end; - -function TRODLServiceInterface.FindOperation(const anOperationName : string; IncludeAnchestors : boolean = FALSE) : TRODLOperation; -var svc : TRODLService; - i: Integer; - lib : TRODLLibrary; -begin - result := NIL; - for i := 0 to (Count-1) do - if SameText(anOperationName, Items[i].Info.Name) then begin - result := Items[i]; - Exit; - end; - - if (result=NIL) and IncludeAnchestors then begin - lib := info.Owner.OwnerLibrary; - //intf := TRODLServiceInterface; - svc := lib.FindService((Owner as TRODLService).Info.Name); - - while TRUE do begin - if (svc.Ancestor='') then Break; - - svc := lib.GetService(svc.Ancestor); - result := svc.Default.FindOperation(anOperationName); - - if (result<>NIL) then Exit; - end; - end; -end; - -{ TRODLLibrary } - -function TRODLLibrary.Add(anEntity: TRODLEntity): integer; -begin - if (anEntity is TRODLArray) then - Inc(fArrayCount) - else if (anEntity is TRODLEnum) then - Inc(fEnumCount) - else if (anEntity is TRODLStruct) then - Inc(fStructCount) - else if (anEntity is TRODLService) then - Inc(fServiceCount) - else if (anEntity is TRODLUse) then - Inc(fUseCount) - else if (anEntity is TRODLException) then - Inc(fExceptionCount) - else if (anEntity is TRODLEventSink) then - Inc(fEventSinkCount) - else if (anEntity is TRODLGroup) then - Inc(fGroupCount); - - result := inherited Add(anEntity); -end; - -function TRODLLibrary.GetItemClass: TRODLEntityClass; -begin - result := TRODLEntity; -end; - -procedure TRODLLibrary.Remove(anEntity: TRODLEntity); -var - i: Integer; -begin - if (anEntity is TRODLGroup) then begin - for i := 0 to Count-1 do - if Items[i].GroupUnder = anEntity then - Items[i].GroupUnder := anEntity.GroupUnder; - end - else if (anEntity is TRODLUse) then begin - for i := Count-1 downto 0 do - if Items[i].LocatedInRodlUse = anEntity then - Remove(Items[i]); - end; - - if (anEntity is TRODLArray) then - Dec(fArrayCount) - else if (anEntity is TRODLEnum) then - Dec(fEnumCount) - else if (anEntity is TRODLStruct) then - Dec(fStructCount) - else if (anEntity is TRODLService) then - Dec(fServiceCount) - else if (anEntity is TRODLUse) then - Dec(fUseCount) - else if (anEntity is TRODLException) then - Dec(fExceptionCount) - else if (anEntity is TRODLEventSink) then - Dec(fEventSinkCount) - else if (anEntity is TRODLGroup) then - Dec(fGroupCount); - - inherited; -end; - -procedure TRODLLibrary.Delete(Index: integer); -var - item: TRODLEntity; -begin - item := Items[Index]; - Remove(item); - inherited Delete(Index); -end; - -function TRODLLibrary.GetArray(Index: integer): TRODLArray; -begin - if (Index > ArrayCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLArray) as TRODLArray; -end; - -function TRODLLibrary.GetEnums(Index: integer): TRODLEnum; -begin - if (Index > EnumCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLEnum) as TRODLEnum; -end; - -function TRODLLibrary.GetServices(Index: integer): TRODLService; -begin - if (Index > ServiceCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLService) as TRODLService; -end; - -function TRODLLibrary.GetStructs(Index: integer): TRODLStruct; -begin - if (Index > StructCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLStruct) as TRODLStruct; -end; - -function TRODLLibrary.GetExceptions(Index: integer): TRODLException; -begin - if (Index > ExceptionCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLException) as TRODLException; -end; - -function TRODLLibrary.GetUse(Index: integer): TRODLUse; -begin - if (Index > UseCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLUse) as TRODLUse; -end; - -function TRODLLibrary.GetGroups(Index: integer): TRODLGroup; -begin - if (Index > GroupCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLGroup) as TRODLGroup; -end; - -function TRODLLibrary.GetEventSinks(Index: integer): TRODLEventSink; -begin - if (Index > EventSinkCount - 1) then RaiseError(err_InvalidIndex, [Index]); - result := GetByType(Index,TRODLEventSink) as TRODLEventSink; -end; - -function TRODLLibrary.GetByType(aIndex:integer; aType:TRODLEntityClass):TRODLEntity; -var - i, c: integer; -begin - result := nil; - if (aIndex < 0) then RaiseError(err_InvalidIndex, [aIndex]); - - c := -1; - for i := 0 to (Count - 1) do begin - if (Items[i] is aType) then Inc(c); - if (c = aIndex) then begin - result := Items[i]; - Exit; - end; - end; -end; - - -constructor TRODLLibrary.Create; -begin - inherited; - Info.Name := 'NewLibrary'; - Info.UID := NewGUID; -end; - -function TRODLLibrary.IsValidCustomType(const iTypeName: string): boolean; -var - i:integer; -begin - result := false; - for i := 0 to ArrayCount-1 do begin - if CompareText(Arrays[i].Info.Name,iTypeName) = 0 then begin - result := true; - exit; - end; - end; - for i := 0 to StructCount-1 do begin - if CompareText(Structs[i].Info.Name,iTypeName) = 0 then begin - result := true; - exit; - end; - end; - for i := 0 to EnumCount-1 do begin - if CompareText(Enums[i].Info.Name,iTypeName) = 0 then begin - result := true; - exit; - end; - end; -end; - -function TRODLLibrary.IsValidSimpleType(const iTypeName: string): boolean; -var - d:TRODataType; - i: Integer; -begin - result := false; - for d := Low(TRODataType) to High(TRODataType) do begin - if (not (d in [rtUserDefined])) and - (CompareText(DataTypeNames[d],iTypeName) = 0) then begin - result := true; - exit; - end; - end; - for i := Low(DataTypeRemapping) to High(DataTypeRemapping) do begin - if CompareText(DataTypeRemapping[i].Name, iTypeName) = 0 then begin - result := true; - exit; - end; - end; -end; - - -function TRODLLibrary.IsValidType(const iTypeName: string): boolean; -begin - result := IsValidCustomType(iTypeName) or IsValidSimpleType(iTypeName); -end; - -function TRODLLibrary.FindStruct(const iStructName: string): TRODLStruct; -var - i:integer; -begin - result := nil; - for i := 0 to StructCount-1 do begin - if CompareText(Structs[i].Info.Name,iStructName) = 0 then begin - result := Structs[i]; - exit; - end; - end; -end; - -function TRODLLibrary.FindBaseStruct(const iStructName: string): TRODLBaseStruct; -var - i:integer; -begin - result := nil; - for i := 0 to Count-1 do begin - if (Items[i] is TRODLBaseStruct) and (CompareText(Items[i].Info.Name,iStructName) = 0) then begin - result := Items[i] as TRODLBaseStruct; - exit; - end; - end; -end; - - -function TRODLLibrary.FindEnum(const iEnumName: string): TRODLEnum; -var - i:integer; -begin - result := nil; - for i := 0 to EnumCount-1 do begin - if CompareText(Enums[i].Info.Name,iEnumName) = 0 then begin - result := Enums[i]; - exit; - end; - end; -end; - -function TRODLLibrary.FindArray(const iArrayName: string): TRODLArray; -var - i:integer; -begin - result := nil; - for i := 0 to ArrayCount-1 do begin - if CompareText(Arrays[i].Info.Name,iArrayName) = 0 then begin - result := Arrays[i]; - exit; - end; - end; -end; - - -function TRODLLibrary.FindGroup(const aID: TGUID): TRODLGroup; -var - i:integer; -begin - result := nil; - for i := 0 to GroupCount-1 do begin - if IsEqualGUID(Groups[i].UID,aID) then begin - result := Groups[i]; - exit; - end; - end; -end; - - -function TRODLLibrary.IsValidService(const iServiceName: string): boolean; -var - i:integer; -begin - result := false; - for i := 0 to ServiceCount-1 do begin - if CompareText(Services[i].Info.Name,iServiceName) = 0 then begin - result := true; - exit; - end; - end; -end; - -function TRODLLibrary.FindService(const iServiceName: string):TRODLService; -var - i:integer; -begin - result := nil; - for i := 0 to ServiceCount-1 do begin - if CompareText(Services[i].Info.Name,iServiceName) = 0 then begin - result := Services[i]; - exit; - end; - end; -end; - -function TRODLLibrary.FindException(const iExceptionName: string):TRODLException; -var - i:integer; -begin - result := nil; - for i := 0 to ExceptionCount-1 do begin - if CompareText(Exceptions[i].Info.Name,iExceptionName) = 0 then begin - result := Exceptions[i]; - exit; - end; - end; -end; - -function TRODLLibrary.FindUse(const iUseName: string):TRODLUse; -var - i:integer; -begin - result := nil; - for i := 0 to fUseCount-1 do begin - if CompareText(Use[i].Info.Name,iUseName) = 0 then begin - result := Use[i]; - exit; - end; - end; -end; - -function TRODLLibrary.FindUseByFilename(const iUseRODLFile: string):TRODLUse; -var - i:integer; -begin - result := nil; - for i := 0 to fUseCount-1 do begin - if CompareText(Use[i].RodlFile, iUseRODLFile) = 0 then begin - result := Use[i]; - exit; - end; - end; -end; - -function TRODLLibrary.IsValidException(const iTypeName:string):boolean; -var - i:integer; -begin - result := false; - for i := 0 to ExceptionCount-1 do begin - if CompareText(Exceptions[i].Info.Name,iTypeName) = 0 then begin - result := true; - exit; - end; - end; -end; - -function TRODLLibrary.CalcServiceOrder: IROStrings; -var - lEntities:IROStrings; - i:integer; -begin - lEntities := NewROStrings(); - for i := ServiceCount-1 downto 0 do begin - if not Services[i].IsFromUsedRodl then - lEntities.AddObject(Services[i].Info.Name,Services[i]) - end; - result := CalcOrder(lEntities); -end; - -function TRODLLibrary.CalcEventSinkOrder: IROStrings; -var - lEntities:IROStrings; - i:integer; -begin - lEntities := NewROStrings(); - for i := EventSinkCount-1 downto 0 do begin - if not EventSinks[i].IsFromUsedRodl then - lEntities.AddObject(EventSinks[i].Info.Name,EventSinks[i]) - end; - result := CalcOrder(lEntities); -end; - -function TRODLLibrary.CalcStructOrder: IROStrings; -var - lEntities:IROStrings; - i:integer; -begin - lEntities := NewROStrings(); - for i := StructCount-1 downto 0 do begin - if not Structs[i].IsFromUsedRodl then - lEntities.AddObject(Structs[i].Info.Name,Structs[i]) - end; - result := CalcOrder(lEntities); -end; - -function TRODLLibrary.CalcExceptionOrder: IROStrings; -var - lEntities:IROStrings; - i:integer; -begin - lEntities := NewROStrings(); - for i := ExceptionCount-1 downto 0 do begin - if not Exceptions[i].IsFromUsedRodl then - lEntities.AddObject(Exceptions[i].Info.Name,Exceptions[i]) - end; - result := CalcOrder(lEntities); -end; - -function TRODLLibrary.CalcOrder(const iObjects:IROStrings):IROStrings; -var - lAncestors:IROStrings; - i,lIndex:integer; - lEntity:TRODLEntity; - lWorked:boolean; -begin - lAncestors := NewROStrings(); - result := NewROStrings(); - - for i := 0 to iObjects.Count-1 do begin - lEntity := iObjects.Objects[i] as TRODLEntity; - lAncestors.AddObject((lEntity as IRODLEntityWithAncestor).Ancestor,lEntity) - end; - - for i := lAncestors.Count-1 downto 0 do begin - if lAncestors[i] <> '' then lIndex := iObjects.IndexOf(lAncestors[i]) else lIndex := -1; { else needed to keep the warning away only } - if (lAncestors[i] = '') or (lIndex = -1) then begin - result.AddObject((lAncestors.Objects[i] as TRODLEntity).Info.Name,lAncestors.Objects[i]); - lAncestors.Delete(i); - end; - end; - - while lAncestors.Count > 0 do begin - lWorked := false; - for i := lAncestors.Count-1 downto 0 do begin - lIndex := result.IndexOf(lAncestors[i]); - if (lIndex > -1) then begin - result.InsertObject(lIndex+1,(lAncestors.Objects[i] as TRODLEntity).Info.Name,lAncestors.Objects[i]); - lAncestors.Delete(i); - lWorked := true; - end; - end; - if (not lWorked) and (lAncestors.Count > 0) then - RaiseError('Invalid or recursive inheritance for the following entities: '+lAncestors.Text); - end; -end; - -function TRODLLibrary.GetService(const aServiceName: string): TRODLService; -begin - result := FindService(aServiceName); - if result=NIL then raise EROUnknownItem.CreateFmt('Cannot find service %s', [aServiceName]) -end; - -function TRODLLibrary.GetStruct(const aStructName: string): TRODLStruct; -begin - result := FindStruct(aStructName); - if result=NIL then raise EROUnknownItem.CreateFmt('Cannot find struct %s', [aStructName]) -end; - -procedure TRODLLibrary.ClearDuplicates; -var - lID: string; - lItem: TRODLEntity; - lIDs: TStringList; - i: Integer; -const - EMPTY_GUID = '{00000000-0000-0000-0000-000000000000}'; -begin - lIDs := TStringList.Create(); - try - lIDs.Duplicates := dupError; - lIDs.Sorted := true; - for i := Count-1 downto 0 do begin - lItem := Items[i]; - - if (lItem is TRODLUse) then continue; { removing duplicate uses would blow up the order; and they do no harm anyway } - lID := GUIDToString(lItem.UID); - if SameText(lID, EMPTY_GUID) then continue; - - if (lIDs.IndexOf(lID) > -1) and (not SameText(lID, EMPTY_GUID)) then begin - {$IFDEF DEBUG_REMOBJECTS_RODL} - DebugServer.Write('Removing duplicate %s %s (%s)',[lItem.ReadableEntityTypeName, lItem.Name, lID]); - {$ENDIF} - Remove(lItem); - end - else begin - lIDs.Add(lID); - end; - end; { for } - finally - lIDs.Free(); - end; -end; - -procedure TRODLLibrary.GetArraysByElement(const aElementName: string; - AList: TList); -var - i: integer; -begin - AList.Clear; - for i := 0 to ArrayCount-1 do - if CompareText(Arrays[i].ElementType,aElementName) = 0 then - AList.Add(Arrays[i]); -end; - -function TRODLLibrary.IsValidEventSink( - const iEventSink: string): boolean; -var - i: integer; -begin - result := false; - - for i := 0 to EventSinkCount-1 do begin - if CompareText(EventSinks[i].Info.Name,iEventsink) = 0 then begin - result := true; - exit; - end; - end; -end; - -{ TRODLArray } - -procedure TRODLArray.SetElementType(const Value: string); -begin - fElementType := Trim(Value); -end; - -procedure TRODLArray.Validate(iMessages:IRoPluginMessages); -//function TRODLArray.Validate(out FaultyEntity: TRODLEntity; out ErrorMessage: string): boolean; -begin - inherited; - if (ElementType = '') then - iMessages.AddMessage(rmtError,Info.Name,err_RodlNoDataTypeSpecified,-1,self); - - if (ElementType <> '') and not OwnerLibrary.IsValidType(ElementType) then - iMessages.AddMessage(rmtError,Info.Name,Format(err_RodlInvalidDataType,[ElementType]),-1,Owner); -end; - -{ TRODLConverter } - -constructor TRODLConverter.Create(const aLibraryFile: string; const aTargetEntity: string = ''); -var - lLibrary: TRODLLibrary; -begin - with TXMLToRODL.Create(nil) do try - lLibrary := ReadFromFile(aLibraryFile); - try - Self.Create(lLibrary, aTargetEntity); - finally - FreeAndNil(lLibrary); - end; - finally - Free; - end; -end; - -constructor TRODLConverter.Create(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); -begin - inherited Create; - - fBuffer := TStringList.Create; - if (aLibrary <> nil) then Convert(aLibrary, aTargetEntity); -end; - -destructor TRODLConverter.Destroy; -begin - fBuffer.Free; - inherited; -end; - -procedure TRODLConverter.Convert(const aLibrary: TRODLLibrary; const aTargetEntity: string = ''); -begin - if (aLibrary = nil) then - RaiseError(err_InvalidLibrary, []) - else if (aTargetEntity<>'') and not ValidateTargetEntity(aLibrary, aTargetEntity) then - RaiseError(err_InvalidTargetEntity, [aTargetEntity]); - - fTargetEntity := aTargetEntity; - - fBuffer.Clear; - IntConvert(aLibrary, aTargetEntity); -end; - -function TRODLConverter.GetBuffer: TStrings; -begin - result := fBuffer as TStrings; -end; - -function TRODLConverter.ValidateTargetEntity(const aLibrary: TRODLLibrary; const aTargetEntity: string): boolean; -begin - result := aLibrary.FindService(aTargetEntity)<>NIL; -end; - -procedure TRODLConverter.Write(const someText: string; Indentation: integer = 0); -var - i: integer; - s: string; -begin - s := ''; - - for i := 1 to Indentation do - s := s + ' '; - s := s + someText; - - fBuffer.Add(s) -end; - -procedure TRODLConverter.WriteLines(const someText: string); -begin - fBuffer.Text := fBuffer.Text + someText; -end; - -procedure TRODLConverter.WriteEmptyLine; -begin - fBuffer.Add(''); -end; - -class function TRODLConverter.GetTargetFileName(const aLibrary: TRODLLibrary; - const aTargetEntity: string): string; -begin - result := ''; -end; - -{ TRODLReader } - -constructor TRODLReader.Create; -begin -end; - -function TRODLReader.Read(aStream: TStream; const aFilename:string): TRODLLibrary; -begin - if (aStream = nil) then RaiseError(err_InvalidStream, []); - result := IntReadFromStream(aStream, aFilename) -end; - -function TRODLReader.ReadFromFile(const aFileName: string): TRODLLibrary; -var - fs: TFileStream; -begin - fs := TFileStream.Create(aFileName, fmOpenRead); - try - result := Read(fs, aFilename) - finally - fs.Free; - end; -end; - -{ TRODLException } - -procedure TRODLException.Validate(iMessages: IRoPluginMessages); -begin - inherited; - - if (Ancestor <> '') and not OwnerLibrary.IsValidException(Ancestor) then - iMessages.AddMessage(rmtError,Info.Name,Format(err_RodlInvalidAncestorType,[Ancestor]),-1,self); -end; - -{ TRODLUse } - -procedure TRODLUse.Validate(iMessages: IRoPluginMessages); -begin - inherited; - - if not (FileExists(ExpandVariables(fRodlFile)) or FileExists(fAbsoluteRodlFile)) then - iMessages.AddMessage(rmtWarning,ExtractFileName(fRodlFile),Format(err_RodlUsedFileDoesNotExist,[ExpandVariables(fRodlFile)]),-1,self); - - -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLChannel.pas deleted file mode 100644 index 011c135..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLChannel.pas +++ /dev/null @@ -1,272 +0,0 @@ -unit uRODLLChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, Windows, uROClient, uROClientIntf, uRODLLHelpers; - -type - TDLLProcessMessage = function(aRequest:THandle):THandle; - TDLLRegisterEventHandler = function(const ClientId: TGuid; const Handler: IRODllEventCallback): Boolean; - TDLLUnRegisterEventHandler = procedure(const ClientId: TGuid); -//type TDLLProcessMessage = procedure(aRequestStream, aResponseStream : TStream); - -const DLLProcessMessageName = 'DLLProcessMessage'; - DLLRegisterEventHandlerName = 'DLLRegisterEventHandler'; - DLLUnRegisterEventHandlerName = 'DLLUnRegisterEventHandler'; - -type { TRODLLChannel } - - TDLLLoadEvent = procedure(Sender:TObject ;DLLHandle: THandle) of object; - TDLLUnloadEvent = TNotifyEvent; - - TRODLLChannel = class(TROTransportChannel, IROActiveEventChannel, IRODllEventCallback) - private - fDLLName: string; - fDLLHandle : Cardinal; - fKeepDLLLoaded: boolean; - fDLLProcessMessage : TDLLProcessMessage; - FDLLRegisterEventHandler: TDLLRegisterEventHandler; - fDLLUnregisterEventHandler: TDLLUnRegisterEventHandler; - - fOnDLLLoaded: TDLLLoadEvent; - fOnDLLUnloaded: TDLLUnloadEvent; - fSupportsActiveEvents: Boolean; - fEventReceiver: IROEventReceiver; - fActiveEvents: Boolean; - fActiveClientID: TGuid; - - protected - { IROTransport } - function GetTransportObject : TObject; override; - - - { TROTransportChannel } - procedure IntDispatch(aRequest, aResponse : TStream); override; - - { Getters and setters } - function GetDLLLoaded: Boolean; - - - procedure LoadDLL; - procedure IntSetServerLocator(aServerLocator: TROServerLocator); override; - procedure BeforeDispatch(aMessage: IROMessage); override; - - procedure UnregisterEventReceiver(aReceiver: IROEventReceiver); - procedure RegisterEventReceiver(aReceiver: IROEventReceiver); - procedure ProcessEvent(Data: Pointer; DataSize: Integer); - function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall; - - public - property DLLHandle: THandle read fDLLHandle; - property DLLLoaded: Boolean read GetDLLLoaded; - - property SupportsActiveEvents: Boolean read fSupportsActiveEvents; - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure UnloadDLL; - procedure CheckProperties; override; - {$IFDEF FPC} - property ActiveClientID: TGuid read fActiveClientID write fActiveClientID; - {$ENDIF} - published - property OnDLLLoaded: TDLLLoadEvent read FOnDLLLoaded write FOnDLLLoaded; - property OnDLLUnloaded: TDLLUnloadEvent read FOnDLLUnloaded write FOnDLLUnloaded; - property DLLName : string read fDLLName write fDLLName; - property KeepDLLLoaded : boolean read fKeepDLLLoaded write fKeepDLLLoaded default true; - property ActiveEvents : Boolean read fActiveEvents write fActiveEvents default true; - {$IFNDEF FPC} - property ActiveClientID: TGuid read fActiveClientID write fActiveClientID; - {$ENDIF FPC} - property ServerLocators; - property DispatchOptions; - end; - -implementation - -uses SysUtils, uROClasses; - -{ TRODLLChannel } - -procedure TRODLLChannel.BeforeDispatch(aMessage: IROMessage); -begin - inherited; - LoadDLL; - if fActiveEvents and fSupportsActiveEvents then begin - if IsEqualGUID(fActiveClientID, EmptyGUID) then fActiveClientID := NewGuid; - aMessage.ClientID := ActiveClientID; - end; -end; - -procedure TRODLLChannel.CheckProperties; -begin - inherited; - Check(not FileExists(DLLName), 'Cannot locate %s', [DLLName]); // TODO: Move in uRORes -end; - -constructor TRODLLChannel.Create(aOwner: TComponent); -begin - inherited; - fKeepDLLLoaded := TRUE; - ThreadSafe := true; - fActiveEvents := true; -end; - -destructor TRODLLChannel.Destroy; -begin - UnloadDLL; - inherited; -end; - -function TRODLLChannel.GetDLLLoaded: Boolean; -begin - result := fDLLHandle <> 0; -end; - -function TRODLLChannel.GetTransportObject: TObject; -begin - result := Self; -end; - -procedure TRODLLChannel.IntDispatch(aRequest, aResponse: TStream); -var lRequestHandle, lResponseHandle:THandle; -begin - try - lRequestHandle := StreamToHGlobal(aRequest); - try - lResponseHandle := fDLLProcessMessage(lRequestHandle); - try - HGlobalToStream(lResponseHandle,aResponse); - finally - GlobalFree(lResponseHandle); - end; - finally - GlobalFree(lRequestHandle); - end; - finally - if not KeepDLLLoaded then UnloadDLL; - end; -end; - -procedure TRODLLChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - // Do nothing -end; - -procedure TRODLLChannel.LoadDLL; -begin - CheckProperties; - if (fDLLHandle>0) then Exit; // Already loaded - try - fDLLHandle := LoadLibrary(PChar(DLLName)); - if fDLLHandle = 0 then - RaiseLastOSError; - - @fDLLProcessMessage := GetProcAddress(fDLLHandle, PChar(DLLProcessMessageName)); - if (@fDLLProcessMessage=NIL) then begin - fDLLHandle := 0; - RaiseError('Not a RemObjects DLL', []); // TODO: Move in uRORes - end; - @FDLLRegisterEventHandler := GetProcAddress(fDLLHandle, DLLRegisterEventHandlerName); - @FDLLUnregisterEventHandler:= GetProcAddress(fDllHandle, DLLUnRegisterEventHandlerName); - fSupportsActiveEvents := assigned(FDLLRegisterEventHandler) and assigned(FDLLUnregisterEventHandler) and - FDLLRegisterEventHandler(EmptyGUID, nil); // returns false if active events aren't supported by the server - except - if (fDLLHandle>0) then begin - FreeLibrary(fDLLHandle); - fDLLHandle := 0; - end; - @fDLLProcessMessage := NIL; - raise; - end; - - //toDO: make proper Trigger functions. - if (DLLLoaded) and (Assigned(fOnDLLLoaded)) then - fOnDLLLoaded(Self,fDLLHandle); - -end; - -procedure TRODLLChannel.ProcessEvent(Data: Pointer; DataSize: Integer); -var - ms: TMemoryStream; -begin - if fEventReceiver = nil then exit; - ms := TMemorySTream.Create; - try - ms.Write(Data^, DataSize); - ms.Position := 0; - fEventReceiver.Dispatch(ms, nil); - finally - ms.Free; - end; - -end; - -function TRODLLChannel.QueryInterface(const IID: TGUID; out Obj): HRESULT; -begin - if IsEqualGUID(IID, IROActiveEventChannel) then begin - try - if fDLLHandle = 0 then LoadDLL; - except - Result := E_NOINTERFACE; - exit; - end; - if fKeepDLLLoaded and fSupportsActiveEvents and fActiveEvents then - Result := inherited QueryInterface(IID, obj) - else - Result := E_NOINTERFACE; - end else Result := inherited QueryInterface(IID, obj); -end; - -procedure TRODLLChannel.RegisterEventReceiver(aReceiver: IROEventReceiver); -begin - fEventReceiver := aReceiver; - LoadDLL; - if fActiveEvents and fSupportsActiveEvents then begin - if IsEqualGUID(fActiveClientID, EmptyGUID) then fActiveClientID := NewGuid; - FDLLRegisterEventHandler(fActiveClientID, Self); - end; -end; - -procedure TRODLLChannel.UnloadDLL; -begin - if (fDLLHandle<>0) then begin - FreeLibrary(fDLLHandle); - fDLLHandle := 0; - if Assigned(fOnDLLUnloaded) then - fOnDLLUnloaded(Self); - end; -end; - - -procedure TRODLLChannel.UnregisterEventReceiver( - aReceiver: IROEventReceiver); -begin - if fActiveEvents and fSupportsActiveEvents and (fDLLHandle <> 0) then begin - fDLLUnregisterEventHandler(fActiveClientID); - end; - fEventReceiver := nil; -end; - -initialization - RegisterTransportChannelClass(TRODLLChannel); - -finalization - UnRegisterTransportChannelClass(TRODLLChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLHelpers.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLHelpers.pas deleted file mode 100644 index 17b48b2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLHelpers.pas +++ /dev/null @@ -1,88 +0,0 @@ -unit uRODLLHelpers; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Windows, Classes; - -{ Description: - Creates a hGlobal object that contains the contents of the stream. - The Stream is positioned at it's end when the function returns - The Caller is responsible for freeing the returnd hGloba using the - GlobalFree API call. } -function StreamToHGlobal(iStream:TStream):THandle; - -{ Description: - Loads an hGlobal into the passed Stream. The stream is completeley - cleared before loading the memory; It's positioned at 0 when the - function returns. } -procedure HGlobalToStream(lHandle:THandle; iStream:TStream); - -type - IRODllEventCallback = interface - ['{39084976-A3F5-43DB-B2F0-B9EE3137C6EF}'] - procedure ProcessEvent(Data: Pointer; DataSize: Integer); - end; - -implementation - -uses SysUtils; - -type PInteger = ^Integer; - -function StreamToHGlobal(iStream:TStream):THandle; -var lPointer:Pointer; -begin - Result := GlobalAlloc(0,iStream.Size+sizeof(Integer)); - if Result = 0 then RaiseLastOSError(); - try - lPointer := GlobalLock(Result); - if not Assigned(lPointer) then RaiseLastOSError(); - try - iStream.Seek(0,soFromBeginning); - PInteger(lPointer)^ := iStream.Size; - inc(PInteger(lPointer)); - iStream.ReadBuffer(lPointer^,iStream.Size); - finally - //if not GlobalUnlock(Result) then RaiseLastOSError(); - //ToDo: it seesm the return value on success is also zero (and GetLastError will yield NO_ERROR) on Win9x systems. - GlobalUnlock(Result); - end; - except - if GlobalFree(Result) <> 0 then RaiseLastOSError(); - raise; - end; -end; - -procedure HGlobalToStream(lHandle:THandle; iStream:TStream); -var - lPointer:Pointer; - lSize:integer; -begin - lPointer := GlobalLock(lHandle); - if not Assigned(lPointer) then RaiseLastOSError(); - try - iStream.Size := 0; - lSize := PInteger(lPointer)^; - inc(PInteger(lPointer)); - iStream.WriteBuffer(lPointer^,lSize); - iStream.Seek(0,soFromBeginning); - finally - GlobalUnlock(lHandle); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLServer.pas deleted file mode 100644 index c76d561..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODLLServer.pas +++ /dev/null @@ -1,179 +0,0 @@ -unit uRODLLServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROClientIntf, uROClient, uROServer, uRODLLHelpers, uROEventRepository; - -type { TRODLLServer } - TRODLLServer = class(TROServer, IROTransport) - private - fActiveEventRepository: TROEventRepository; - protected - { IROTransport } - function GetTransportObject : TObject; - - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - public - property ActiveEventRepository: TROEventRepository read fActiveEventRepository write fActiveEventRepository; - end; - -{ Call this to add a dispatcher to the DLLServer } -procedure RegisterMessage(aMessage : TROMessage); - -{ Use this singleton if you need to hook to the server instance } -function DLLServer : TRODLLServer; - -{ EXPORTED (for external user only): Main DLL entry point for message processing } -function DLLProcessMessage(aRequest:THandle):THandle; -function DLLRegisterEventHandler(const ClientId: TGuid; const Handler: IRODllEventCallback): Boolean; -procedure DLLUnRegisterEventHandler(const ClientId: TGuid); - -implementation - -uses Windows, uRODLLChannel, uROServerIntf; - -var fDLLServer: TRODLLServer; - -type - TCallbackWrapper = class(TInterfacedObject, IROActiveEventServer) - private - FDll: IRODllEventCallback; - public - procedure DispatchEvent(anEventDataItem: TROEventData; - aSessionReference: TGUID; aSender: TObject); - procedure EventsRegistered(aSender: TObject; aClient: TGUID); - constructor Create(aDll: IRODllEventCallback); - end; - -procedure RegisterMessage(aMessage : TROMessage); -begin - with TROMessageDispatcher(fDLLServer.Dispatchers.Add) do begin - Message := aMessage; - end; -end; - -function DLLServer : TRODLLServer; -begin - result := fDLLServer; -end; - -{procedure DLLProcessMessage(aRequestStream, - aResponseStream : TStream); -var transport : IROTransport; -begin - fDLLServer.QueryInterface(IROTransport, transport); - fDLLServer.DispatchMessage(transport, aRequestStream, aResponseStream); - //fDLLServer.DispatchMessage((fDLLServer as IROTransport), aRequestStream, aResponseStream); -end;} - - -{ EXPORTED (for external user only): Main DLL entry point for message processing } - -function DLLProcessMessage(aRequest:THandle):THandle; -var lTransport : IROTransport; -var lRequestStream, lResponseStream:TMemoryStream; -begin - lRequestStream := TMemoryStream.Create(); - try - lResponseStream := TMemoryStream.Create(); - try - - HGlobalToStream(aRequest,lRequestStream); - fDLLServer.QueryInterface(IROTransport, lTransport); - fDLLServer.DispatchMessage(lTransport, lRequestStream, lResponseStream); - Result := StreamToHGlobal(lResponseStream); - - finally - lResponseStream.Free(); - end; - finally - lRequestStream.Free(); - end; -end; - -exports DLLProcessMessage name DLLProcessMessageName, - DLLRegisterEventHandler name DLLRegisterEventHandlerName, - DLLUnRegisterEventHandler name DLLUnRegisterEventHandlerName; - - -{ TRODLLServer } - -function TRODLLServer.GetTransportObject: TObject; -begin - result := Self; -end; - -function TRODLLServer.IntGetActive: boolean; -begin - result := TRUE; -end; - -procedure TRODLLServer.IntSetActive(const Value: boolean); -begin - // not required in this case. Always active -end; - -function DLLRegisterEventHandler(const ClientId: TGuid; const Handler: IRODllEventCallback): Boolean; -begin - if fDLLServer.ActiveEventRepository = nil then begin - result := false; - exit; - end; - if Handler <> nil then - fDLLServer.ActiveEventRepository.AddSession(ClientID, TCallbackWrapper.Create(Handler)); - Result := TRue; -end; - -procedure DLLUnRegisterEventHandler(const ClientId: TGuid); -begin - if fDLLServer.ActiveEventRepository = nil then begin - exit; - end; - fDLLServer.ActiveEventRepository.RemoveSession(ClientId); -end; - - - -{ TCallbackWrapper } - -constructor TCallbackWrapper.Create(aDll: IRODllEventCallback); -begin - inherited Create; - FDll := aDll; -end; - -procedure TCallbackWrapper.DispatchEvent(anEventDataItem: TROEventData; - aSessionReference: TGUID; aSender: TObject); -begin - FDll.ProcessEvent(TMemoryStream(anEventDataItem.Data).Memory, TMemoryStream(anEventDataItem.Data).Size); -end; - -procedure TCallbackWrapper.EventsRegistered(aSender: TObject; - aClient: TGUID); -begin - // do nothing. -end; - -initialization - fDLLServer := TRODLLServer.Create(NIL); - -finalization - fDLLServer.Free; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery.pas deleted file mode 100644 index b9528dc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery.pas +++ /dev/null @@ -1,342 +0,0 @@ -unit uRODiscovery; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, Contnrs, SysUtils, - uROBroadcastChannel, uROClient, uRODiscovery_Intf, uRODiscovery_Async; - -type - TRODiscoveryNewServiceFoundEvent = procedure(aSender:TObject; aName:string; aDiscoveryOptions:TRODiscoveryOptions) of object; - - TRODiscoveryException = procedure(aSender: TObject; aException: Exception) of object; - - TROCustomDiscoveryClient = class(TROComponent, IROBroadcastNotification) - private - fChannel: TROBroadcastChannel; - fMessage: TROMessage; - fServerList: TStrings; - fServiceName: string; - fOnNewServersFound: TNotifyEvent; - fDiscoveryService: IRODiscoveryService_Async; - fOnNewServiceFound: TRODiscoveryNewServiceFoundEvent; - FOnDiscoveryException: TRODiscoveryException; - - procedure SetChannel(const Value: TROBroadcastChannel); - procedure SetMessage(const Value: TROMessage); - procedure SetServiceName(const Value: string); - procedure TriggerNewServersFound; - procedure TriggerNewServiceFound(aName:string; aDiscoveryOptions:TRODiscoveryOptions); - private - { IROBroadcastNotification } - procedure ResponseReceived(ServerIP,ResponseUID: String); - protected - procedure Notification(aComponent:TComponent; aOperation:TOperation); override; - public - constructor Create(aOwner:TComponent); override; - destructor Destroy; override; - procedure RefreshServerList(aDiscoveryOptions: TRODiscoveryOptions=nil); - procedure CheckProperties; - property Channel:TROBroadcastChannel read fChannel write SetChannel; - property Message:TROMessage read fMessage write SetMessage; - property ServerList:TStrings read fServerList; - property ServiceName:string read fServiceName write SetServiceName; - property OnNewServersFound:TNotifyEvent read fOnNewServersFound write fOnNewServersFound; - property OnNewServiceFound:TRODiscoveryNewServiceFoundEvent read fOnNewServiceFound write fOnNewServiceFound; - property OnDiscoveryException: TRODiscoveryException read FOnDiscoveryException write FOnDiscoveryException; - end; - - TRODiscoveryClient = class(TROCustomDiscoveryClient) - published - property Channel; - property Message; - property ServerList; - property ServiceName; - property OnNewServersFound; - property OnNewServiceFound; - property OnDiscoveryException; - end; - - TRODiscoveryServiceFoundEvent = procedure (aSender:TObject; aName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean) of object; - - TROCustomDiscoveryServer = class(TROComponent) - private - fServiceList: TStrings; - fSupportRegisteredServerClasses: boolean; - fOnServiceFound: TRODiscoveryServiceFoundEvent; - fServerAddress: string; - procedure SetServiceList(const Value: TStrings); - procedure TriggerOnServiceFound(aName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean); - function FindServiceInList(iList:TStrings; const iName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; - protected - procedure Notification(aComponent:TComponent; aOperation:TOperation); override; - function FindService(const iName: string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; - public - constructor Create(aOwner:TComponent); override; - destructor Destroy; override; - property ServerAddress:string read fServerAddress write fServerAddress; - property ServiceList:TStrings read fServiceList write SetServiceList; - property SupportRegisteredServerClasses:boolean read fSupportRegisteredServerClasses write fSupportRegisteredServerClasses default true; - property OnServiceFound:TRODiscoveryServiceFoundEvent read fOnServiceFound write fOnServiceFound; - end; - - TRODiscoveryServer = class(TROCustomDiscoveryServer) - published - property ServiceList; - property SupportRegisteredServerClasses; - property OnServiceFound; - end; - - TRODiscoveryServerManager = class(TObjectList) - public - constructor Create(); - procedure RegisterDiscoveryServer(iDiscoveryServer:TROCustomDiscoveryServer); - procedure UnregisterDiscoveryServer(iDiscoveryServer:TROCustomDiscoveryServer); - function FindService(const iName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; - end; - -var - DiscoveryServerManager:TRODiscoveryServerManager; - -implementation - -uses - {$IFDEF VER140UP}DateUtils,{$ENDIF} - IdStack, - uROClassFactories, uROServer, uRODiscoveryService_Impl, uROClasses; - -{ TROCustomDiscoveryClient } - -constructor TROCustomDiscoveryClient.Create(aOwner: TComponent); -begin - inherited; - fServerList := TStringList.Create; - TStringList(fServerList).Duplicates := dupIgnore; -end; - -destructor TROCustomDiscoveryClient.Destroy; -begin - Channel := nil; - FreeAndNil(fServerList); - inherited; -end; - -procedure TROCustomDiscoveryClient.Notification(aComponent: TComponent; aOperation: TOperation); -begin - inherited; - if aOperation <> opRemove then exit; - if aComponent = Channel then Channel := nil; - if aComponent = Message then Message := nil; -end; - -procedure TROCustomDiscoveryClient.RefreshServerList(aDiscoveryOptions: TRODiscoveryOptions=nil); -begin - CheckProperties; - fServerList.Clear(); - TriggerNewServersFound(); - - if not Assigned(fDiscoveryService) then - fDiscoveryService := CoIRODiscoveryService_Async.Create(Message,Channel); - - fDiscoveryService.Invoke_FindService(ServiceName, aDiscoveryOptions); -end; - -procedure TROCustomDiscoveryClient.TriggerNewServersFound; -begin - if Assigned(OnNewServersFound) then OnNewServersFound(self); -end; - -procedure TROCustomDiscoveryClient.ResponseReceived(ServerIP, ResponseUID: String); -var - lOptions: TRODiscoveryOptions; - lServer:string; -begin - lOptions := nil; - - if not Assigned(fDiscoveryService) then exit; - - try - lServer := fDiscoveryService.Retrieve_FindService(lOptions); - except - on E: Exception do begin - if Assigned(FOnDiscoveryException) then begin - FOnDiscoveryException(Self, E); - exit; - end - else begin - raise; - end; - end; - end; - - try - TriggerNewServiceFound(lServer, lOptions); - if (lServer <> '') and (fServerList.IndexOf(lServer) = -1) then begin - fServerList.Add(lServer); - TriggerNewServersFound(); - end; - finally - FreeAndNil(lOptions); - end; -end; - -procedure TROCustomDiscoveryClient.SetChannel(const Value: TROBroadcastChannel); -var - lBroadcastNotification:IROBroadcastNotification; -begin - if fChannel <> Value then begin - fDiscoveryService := nil; { proxy is no longer valid } - if Assigned(fChannel) then begin - fChannel.UnregisterResponseListner(self); - end; - - fChannel := Value; - if Assigned(fChannel) then begin - fChannel.FreeNotification(self); - if Supports(self,IROBroadcastNotification,lBroadcastNotification) then - fChannel.RegisterResponseListner(lBroadcastNotification); - end; - end; -end; - -procedure TROCustomDiscoveryClient.SetMessage(const Value: TROMessage); -begin - if fMessage <> Value then begin - fDiscoveryService := nil; { proxy is no longer valid } - fMessage := Value; - if Assigned(fMessage) then fMessage.FreeNotification(self); - end; -end; - -procedure TROCustomDiscoveryClient.SetServiceName(const Value: string); -begin - if fServiceName <> Value then begin - fServiceName := Value; - end; -end; - -procedure TROCustomDiscoveryClient.TriggerNewServiceFound(aName: string; aDiscoveryOptions: TRODiscoveryOptions); -begin - if Assigned(OnNewServiceFound) then - OnNewServiceFound(self, aName, aDiscoveryOptions); -end; - -procedure TROCustomDiscoveryClient.CheckProperties; -begin - Check(Channel = NIL, Name + '.Channel must be assigned.'); - Channel.CheckProperties; - Check(Message = NIL, Name + '.Message must be assigned.'); - Message.CheckProperties; - Check(ServiceName = '', Name + '.ServiceName must be set.'); -end; - -{ TROCustomDiscoveryServer } - -constructor TROCustomDiscoveryServer.Create(aOwner: TComponent); -begin - inherited; - fServiceList := TStringList.Create; - TStringList(fServiceList).Sorted := true; - SupportRegisteredServerClasses := true; - - RegisterDiscoveryService(); - DiscoveryServerManager.RegisterDiscoveryServer(self); -end; - -destructor TROCustomDiscoveryServer.Destroy; -begin - DiscoveryServerManager.UnregisterDiscoveryServer(self); - FreeAndNil(fServiceList); - inherited; -end; - -function TROCustomDiscoveryServer.FindService(const iName: string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; -begin - result := FindServiceInList(fServiceList, iName, ioDiscoveryOptions, ioHandled); - if (not ioHandled) and SupportRegisteredServerClasses then - result := FindServiceInList(GetClassFactoryNames.Strings, iName, ioDiscoveryOptions, ioHandled); -end; - -function TROCustomDiscoveryServer.FindServiceInList(iList:TStrings; const iName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; -begin - result := ''; - if iList.IndexOf(iName) > -1 then begin - ioHandled := true; - TriggerOnServiceFound(iName,ioDiscoveryOptions,ioHandled); - if ioHandled then begin - if fServerAddress <> '' then begin - result := fServerAddress; - end - else begin - result := GStack.LocalAddress; - end; - end; - end; -end; - -procedure TROCustomDiscoveryServer.Notification(aComponent:TComponent; aOperation:TOperation); -begin - inherited; - if aOperation <> opRemove then exit; -end; - -procedure TROCustomDiscoveryServer.SetServiceList(const Value: TStrings); -begin - fServiceList.Assign(Value); -end; - -procedure TROCustomDiscoveryServer.TriggerOnServiceFound(aName:string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean); -begin - if Assigned(OnServiceFound) then - OnServiceFound(self,aName,ioDiscoveryOptions,ioHandled); -end; - -{ TRODiscoveryServerManager } - -constructor TRODiscoveryServerManager.Create; -begin - inherited Create(false); -end; - -function TRODiscoveryServerManager.FindService(const iName: string; var ioDiscoveryOptions:TRODiscoveryOptions; var ioHandled:boolean):string; -var - i:integer; -begin - for i := 0 to Count-1 do begin - result := (Items[i] as TROCustomDiscoveryServer).FindService(iName,ioDiscoveryOptions,ioHandled); - if ioHandled then exit; - end; -end; - -procedure TRODiscoveryServerManager.RegisterDiscoveryServer(iDiscoveryServer:TROCustomDiscoveryServer); -begin - if IndexOf(iDiscoveryServer) = -1 then Add(iDiscoveryServer); -end; - -procedure TRODiscoveryServerManager.UnregisterDiscoveryServer(iDiscoveryServer:TROCustomDiscoveryServer); -var - lIndex:integer; -begin - lIndex := IndexOf(iDiscoveryServer); - if IndexOf(iDiscoveryServer) <> -1 then Delete(lIndex); -end; - -initialization - DiscoveryServerManager := TRODiscoveryServerManager.Create; -finalization - FreeAndNil(DiscoveryServerManager); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscoveryService_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscoveryService_Impl.pas deleted file mode 100644 index 6e8853c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscoveryService_Impl.pas +++ /dev/null @@ -1,54 +0,0 @@ -unit uRODiscoveryService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, - {Generated:} uRODiscovery_Intf; - -type - TRODiscoveryService = class(TRORemotable, IRODiscoveryService) - private - protected - function FindService(const iName:string; var ioDiscoveryOptions:TRODiscoveryOptions):string; - end; - -procedure RegisterDiscoveryService(); - -implementation - -uses - {Generated:} uRODiscovery_Invk, uROClassFactories, uRODiscovery; - -procedure Create_TRODiscoveryService(out anInstance:IUnknown); -begin - anInstance := TRODiscoveryService.Create; -end; - -procedure RegisterDiscoveryService(); -begin - //ToDo: prevent class factory from being registered multiple times. - if not IsClassFactoryRegistered('IRODiscoveryService') then - TROSingletonClassFactory.Create('IRODiscoveryService', Create_TRODiscoveryService, TIRODiscoveryService_Invoker); -end; - -function TRODiscoveryService.FindService(const iName:string; var ioDiscoveryOptions:TRODiscoveryOptions):string; -var - lHandled:boolean; -begin - lHandled := false; - result := DiscoveryServerManager.FindService(iName, ioDiscoveryOptions, lHandled); - if not lHandled then ROSendNoResponse(); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Async.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Async.pas deleted file mode 100644 index dcccb52..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Async.pas +++ /dev/null @@ -1,89 +0,0 @@ -unit uRODiscovery_Async; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClient, uROTypes, uROClientIntf, uROAsync, - {Project:} uRODiscovery_Intf; - -type - { IRODiscoveryService_Async } - IRODiscoveryService_Async = interface(IROAsyncInterface) - ['{8E88E437-8B20-4AF4-8C81-DF27E6A6413D}'] - procedure Invoke_FindService(const iName: String; const ioServerOptions: TRODiscoveryOptions); - function Retrieve_FindService(out ioServerOptions: TRODiscoveryOptions): String; - end; - - { CoIRODiscoveryService_Async } - CoIRODiscoveryService_Async = class - class function Create(const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IRODiscoveryService_Async; - end; - - TIRODiscoveryService_AsyncProxy = class(TROAsyncProxy, IRODiscoveryService_Async) - private - protected - function __GetInterfaceName: String; override; - - procedure Invoke_FindService(const iName: String; const ioServerOptions: TRODiscoveryOptions); - function Retrieve_FindService(out ioServerOptions: TRODiscoveryOptions): String; - end; - -implementation - -uses - {vcl:} SysUtils; - -{ CoIRODiscoveryService } - -class function CoIRODiscoveryService_Async.Create(const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IRODiscoveryService_Async; -begin - result := TIRODiscoveryService_AsyncProxy.Create(aMessage, aTransportChannel); -end; - -{ TIRODiscoveryService_Proxy } - -function TIRODiscoveryService_AsyncProxy.__GetInterfaceName: String; -begin - result := 'IRODiscoveryService'; -end; - -procedure TIRODiscoveryService_AsyncProxy.Invoke_FindService(const iName: String; const ioServerOptions: TRODiscoveryOptions); -var __request:TStream; -begin - __AssertProxyNotBusy('FindService'); - __request := TMemoryStream.Create; - - __Message.InitializeRequestMessage(__TransportChannel, 'RODiscovery', 'IRODiscoveryService', 'FindService'); - __Message.Write('iName', TypeInfo(String), iName, []); - __Message.Write('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - __Message.Finalize; - - __Message.WriteToStream(__request); - __DispatchAsyncRequest('FindService',__request); -end; - -function TIRODiscoveryService_AsyncProxy.Retrieve_FindService(out ioServerOptions: TRODiscoveryOptions): String; -var __response:TStream; -begin - __response := __RetrieveAsyncResponse('FindService'); - __Message.ReadFromStream(__response); - - __Message.Read('Result', TypeInfo(String), Result, []); - __Message.Read('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - - __response.Free(); -end; - -initialization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Intf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Intf.pas deleted file mode 100644 index 40cd0b0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Intf.pas +++ /dev/null @@ -1,98 +0,0 @@ -unit uRODiscovery_Intf; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {vcl:} Classes, TypInfo, - {RemObjects:} uROClient, uROTypes, uROClientIntf; - -const - LibraryUID = '{943975A3-664A-4F07-AD0F-7357744276BF}'; - - IRODiscoveryService_IID : TGUID = '{D0F69433-544B-4003-946F-AD35046169B0}'; - -type - { Forward declarations } - IRODiscoveryService = interface; - TRODiscoveryOptions = class; - - { TRODiscoveryOptions } - - { Description: - Use this base class to define custom Option strcuts that you can pass back from your Server Discovery calls } - TRODiscoveryOptions = class(TROComplexType) - end; - - { IRODiscoveryService } - IRODiscoveryService = interface - ['{D0F69433-544B-4003-946F-AD35046169B0}'] - function FindService(const iName: String; var ioServerOptions: TRODiscoveryOptions): String; - end; - - { CoIRODiscoveryService } - CoRODiscoveryService = class - class function Create(const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IRODiscoveryService; - end; - - TRODiscoveryService_Proxy = class(TROProxy, IRODiscoveryService) - protected - function __GetInterfaceName:string; override; - - function FindService(const iName: String; var ioServerOptions: TRODiscoveryOptions): String; - end; - -implementation - -uses - {vcl:} SysUtils, - {RemObjects:} uROClasses, uRORes; - -{ CoIRODiscoveryService } - -class function CoRODiscoveryService.Create(const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IRODiscoveryService; -begin - result := TRODiscoveryService_Proxy.Create(aMessage, aTransportChannel); -end; - -{ TRODiscoveryService_Proxy } - -function TRODiscoveryService_Proxy.__GetInterfaceName:string; -begin - result := 'IRODiscoveryService'; -end; - -function TRODiscoveryService_Proxy.FindService(const iName: String; var ioServerOptions: TRODiscoveryOptions): String; -begin - try - __Message.InitializeRequestMessage(__TransportChannel, 'RODiscovery', __InterfaceName, 'FindService'); - __Message.Write('iName', TypeInfo(String), iName, []); - __Message.Write('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - __Message.Finalize; - - __TransportChannel.Dispatch(__Message); - - __Message.Read('Result', TypeInfo(String), result, []); - __Message.Read('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - finally - __Message.FreeStream; - end -end; - -initialization - RegisterROClass(TRODiscoveryOptions); - RegisterProxyClass(IRODiscoveryService_IID, TRODiscoveryService_Proxy); - -finalization - UnregisterROClass(TRODiscoveryOptions); - UnregisterProxyClass(IRODiscoveryService_IID); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Invk.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Invk.pas deleted file mode 100644 index 2cdb1f6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODiscovery_Invk.pas +++ /dev/null @@ -1,68 +0,0 @@ -unit uRODiscovery_Invk; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ Do not modify this unit manually, or your changes will be lost when this } -{ unit is regenerated the next time you compile the project. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {vcl:} Classes, - {RemObjects:} uROServer, uROServerIntf, uROTypes, uROClientIntf, - {Generated:} uRODiscovery_Intf; - -type - TIRODiscoveryService_Invoker = class(TROInvoker) - private - protected - published - procedure Invoke_FindService(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - -implementation - -uses - {RemObjects:} uRORes, uROClient; - -{ TIRODiscoveryService_Invoker } - -procedure TIRODiscoveryService_Invoker.Invoke_FindService(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -var - iName: String; - ioServerOptions: TRODiscoveryOptions; - __in_ioServerOptions: TRODiscoveryOptions; - lResult: String; - __lObjectDisposer: TROObjectDisposer; -begin - ioServerOptions := nil; - __in_ioServerOptions := nil; - try - __Message.Read('iName', TypeInfo(String), iName, []); - __Message.Read('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - __in_ioServerOptions := ioServerOptions; - - lResult := (__Instance as IRODiscoveryService).FindService(iName, ioServerOptions); - - __Message.InitializeResponseMessage(__Transport, 'RODiscovery', 'IRODiscoveryService', 'FindServiceResponse'); - __Message.Write('Result', TypeInfo(String), lResult, []); - __Message.Write('ioServerOptions', TypeInfo(TRODiscoveryOptions), ioServerOptions, []); - __Message.Finalize; - - finally - __lObjectDisposer := TROObjectDisposer.Create(__Instance); - try - __lObjectDisposer.Add(__in_ioServerOptions); - __lObjectDisposer.Add(ioServerOptions); - finally - __lObjectDisposer.Free(); - end; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODynamicRequest.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODynamicRequest.pas deleted file mode 100644 index d9e3a71..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRODynamicRequest.pas +++ /dev/null @@ -1,1424 +0,0 @@ -unit uRODynamicRequest; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} -{$I RemObjects.inc} - -interface - -uses - Classes, SysUtils, uROClient, uROTypes, uRORemoteService, uRODL, uROClasses; - -const - RODLParamFlagStr : array[TRODLParamFlag] of string = ('In', 'Out', 'InOut', 'Result'); - - err_UnknownComplexType = 'Complex type %s was not found. The type is not registered or the package containing it is not loaded.'; - -type - { Misc } - TRODynamicRequest = class; - TRORequestParamCollection = class; - TRORequestParam = class; - - TRODynamicRequestNotifyEvent = procedure(Sender : TRODynamicRequest) of object; - TRODynamicRequestErrorEvent = procedure(Sender : TRODynamicRequest; Error : Exception; var Ignore : boolean) of object; - TROStringPropertyChangeEvent = procedure(Sender : TRODynamicRequest; const OldValue, NewValue : string) of object; - TROFindCustomTypeImplementationEvent = procedure(Sender: TRODynamicRequest; const aTypeName:string; aParameter: TRORequestParam; out aImplementor: TROComplexType) of object; - - { TRORequestParam } - TRORequestParam = class(TCollectionItem) - private - fName: string; - fDataType: TRODataType; - fFlag: TRODLParamFlag; - fTypeName: string; - - fOwnsBinary, fOwnsComplexType: boolean; - fBinaryValue: Binary; - fComplexTypeValue: TROComplexType; - fSimpleValue: Variant; - procedure SetFlag(const Value: TRODLParamFlag); - procedure SetName(const Value: string); - - procedure SetDataType(const Value: TRODataType); - procedure SetTypeName(const Value: string); - function GetAsBoolean: boolean; - function GetAsCurrency: currency; - function GetAsDateTime: TDateTime; - function GetAsFloat: double; - function GetAsInteger: integer; - function GetAsComplexType: TROComplexType; - function GetAsString: string; - function GetAsVariant: variant; - procedure SetAsBoolean(const Value: boolean); - procedure SetAsCurrency(const Value: currency); - procedure SetAsDateTime(const Value: TDateTime); - procedure SetAsFloat(const Value: double); - procedure SetAsInteger(const Value: integer); - procedure SetAsComplexType(const Value: TROComplexType); - procedure SetAsString(const Value: string); - procedure SetAsVariant(const Value: variant); - function GetAsWideString: string; - procedure SetAsWideString(const Value: string); - function GetAsInt64: Int64; - procedure SetAsInt64(const Value: Int64); - function GetAsBinary: Binary; - procedure SetAsBinary(const Value: Binary); - function GetIsNull: boolean; - - {$IFDEF FPC} - procedure FPC_ReadVariant(Reader: TReader); - procedure FPC_WriteVariant(Writer: TWriter); - {$ENDIF FPC} - protected - function GetDisplayName: string; override; - - public - constructor Create(Collection: TCollection); override; - destructor Destroy; override; - - function GetSimpleValueReference: PVariant; - procedure CopyRODLParam(aSourceParam: TRODLOperationParam; aPersistValues: boolean=true; aOldParams: TRORequestParamCollection=nil); - - procedure ReadSimpleValue(Reader: TReader); - procedure WriteSimpleValue(Writer: TWriter); - procedure ReadComplexTypeValue(Reader: TReader); - procedure WriteComplexTypeValue(Writer: TWriter); - procedure ReadBinaryValue(Stream: TStream); - procedure WriteBinaryValue(Stream: TStream); - procedure DefineProperties(Filer: TFiler); override; - - procedure Assign(Source: TPersistent); override; - - procedure ClearValue; - procedure Check; // check if param has values adequate to its datatype - - property IsNull : boolean read GetIsNull; - - property AsBoolean: boolean read GetAsBoolean write SetAsBoolean; - property AsCurrency: currency read GetAsCurrency write SetAsCurrency; - property AsDateTime: TDateTime read GetAsDateTime write SetAsDateTime; - property AsFloat: double read GetAsFloat write SetAsFloat; - property AsInteger: integer read GetAsInteger write SetAsInteger; - property AsString: string read GetAsString write SetAsString; - property AsWideString: string read GetAsWideString write SetAsWideString; - property AsInt64 : Int64 read GetAsInt64 write SetAsInt64; - property AsVariant: variant read GetAsVariant write SetAsVariant; - - property AsComplexType: TROComplexType read GetAsComplexType write SetAsComplexType; - property AsBinary : Binary read GetAsBinary write SetAsBinary; - - property OwnsBinary: boolean read fOwnsBinary write fOwnsBinary; - property OwnsComplexType: boolean read fOwnsComplexType write fOwnsComplexType; - - published - property Name : string read fName write SetName; - property DataType : TRODataType read fDataType write SetDataType; - property Flag : TRODLParamFlag read fFlag write SetFlag; - property TypeName : string read fTypeName write SetTypeName; - property Value: variant read GetAsVariant write SetAsVariant; - end; - - { TRORequestParamCollection } - TRORequestParamCollection = class(TCollection) - private - fRequest : TRODynamicRequest; - function GetHasResultParam: boolean; - function GetResultParam: TRORequestParam; - - protected - function GetItems(aIndex: integer): TRORequestParam; - procedure SetItems(aIndex: integer; aNewItem: TRORequestParam); - - public - constructor Create(aDynamicRequest : TRODynamicRequest); - destructor Destroy; override; - - function Add: TRORequestParam; overload; - function Add(const aName: string; aDataType: TRODataType; aParamFlag: TRODLParamFlag; const aTypeName: string=''): TRORequestParam; overload; - function Insert(aIndex: integer): TRORequestParam; - - function FindParam(const aParamName: string): TRORequestParam; - function ParamByName(const aParamName: string): TRORequestParam; - - procedure CopyRODLOperation(anOperation : TRODLOperation); - - procedure Refresh; - - procedure ClearValues; - procedure ClearInputValues; - procedure ClearOutputValues; - procedure Clone(Source : TRORequestParamCollection); - - function IndexOf(aItem: TRORequestParam): integer; - - property ResultParam : TRORequestParam read GetResultParam; - property HasResultParam: boolean read GetHasResultParam; - property Items[Index: integer]: TRORequestParam read GetItems write SetItems; default; - end; - - { TRODynamicRequest } - TRODynamicRequest = class(TROComponent) - private - fMethodName: string; - fParams: TRORequestParamCollection; - fOnExecuteError: TRODynamicRequestErrorEvent; - fOnAfterExecute: TRODynamicRequestNotifyEvent; - fOnBeforeExecute: TRODynamicRequestNotifyEvent; - fOnChangeMethodName: TROStringPropertyChangeEvent; - fOnChangeServiceName: TROStringPropertyChangeEvent; - fOnFindCustomTypeImplementation: TROFindCustomTypeImplementationEvent; - fRemoteService: TRORemoteService; - function GetRODLLibrary: TRODLLibrary; - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure SetRemoteService(const Value: TRORemoteService); - - procedure SetMethodName(const Value: string); - function GetParams: TRORequestParamCollection; - procedure SetParams(const Value: TRORequestParamCollection); - function GetIsFunction: boolean; - - protected - procedure DoExecute(aParams: TRORequestParamCollection=nil); virtual; - procedure MethodNameChanged; virtual; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure CreateInputComplexTypes(SkipIfAssigned : boolean); - - procedure Execute(aParams: TRORequestParamCollection=nil); - - procedure RefreshParams(aPersistValues: boolean = false); overload; - procedure RefreshParams(aOperation: TRODLOperation; aPersistValues: boolean = false); overload; - - function FindParam(const aParamName: string): TRORequestParam; - function ParamByName(const aParamName: string): TRORequestParam; - - procedure ListServiceOperations(const aServiceName : string; aList : TStrings); - procedure CheckProperties; - property RODLLibrary : TRODLLibrary read GetRODLLibrary; - property IsFunction : boolean read GetIsFunction; - - - published - property OnBeforeExecute : TRODynamicRequestNotifyEvent read fOnBeforeExecute write fOnBeforeExecute; - property OnAfterExecute : TRODynamicRequestNotifyEvent read fOnAfterExecute write fOnAfterExecute; - property OnExecuteError : TRODynamicRequestErrorEvent read fOnExecuteError write fOnExecuteError; - property OnFindCustomTypeImplementation: TROFindCustomTypeImplementationEvent read fOnFindCustomTypeImplementation write fOnFindCustomTypeImplementation; - - property OnChangeServiceName : TROStringPropertyChangeEvent read fOnChangeServiceName write fOnChangeServiceName; - property OnChangeMethodName : TROStringPropertyChangeEvent read fOnChangeMethodName write fOnChangeMethodName; - - property RemoteService: TRORemoteService read fRemoteService write SetRemoteService; - {$WARNINGS OFF} - property MethodName : string read fMethodName write SetMethodName; - {$WARNINGS ON} - property Params : TRORequestParamCollection read GetParams write SetParams; - end; - -{ Cloning functions } -function CloneObject(Proto : TPersistent) : TPersistent; -function CloneComplexType(Proto : TROComplexType) : TROComplexType; -function CloneBinary(Proto : Binary) : Binary; - -implementation - -uses - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST}eDebugServer,{$ENDIF} - Variants, TypInfo, IniFiles, - uROClientIntf, uRORes; - -var CloneNumber : Integer = 0; - -{ Copy Event handlers from one component to another. } -procedure CopyEvents( S, D : TPersistent ); -var - I : Integer; - PProps : PPropList; - PCount : Integer; - M : TMethod; -begin - { Scan through all published properties... } - PCount := GetTypeData( S.ClassInfo ).PropCount; - GetMem( PProps, PCount * sizeof(PPropInfo)); - try - GetPropInfos( S.ClassInfo, PProps ); - for I := 0 to PCount - 1 do - begin - if PProps[I].PropType^.Kind = tkMethod then - begin - M := GetMethodProp( S, PProps[I] ); - SetMethodProp( D, PProps[I], M ); - end; - end; - finally - FreeMem( PProps, PCount * sizeof(PPropInfo)); - end; -end; - -function CloneObject(Proto : TPersistent) : TPersistent; -var - M : TMemoryStream; - T : TComponent; -begin - if Proto=NIL then begin - result := NIL; - Exit; - end - - else if (Proto is TROComplexType) then begin - result := TPersistent(TROComplexTypeClass(Proto.ClassType).Create); - result.Assign(Proto); - Exit; - end; - - RegisterClass( TPersistentClass(Proto.ClassType) ); - - M := TMemoryStream.Create; - try - { Write prototype to stream & create a new item by reading it back. } - M.WriteComponent(TComponent(Proto)); - M.Seek( 0, soFromBeginning ); - T := M.ReadComponent( nil ); - - { Set owner and parent as required. } - if T.Owner <> nil then T.Owner.RemoveComponent( T ); - T.Name := format( 'Clone%d', [CloneNumber] ); - CloneNumber := CloneNumber+1; - - { The above will lose event handlers for some reason so we must } - { copy these using some black magic... } - CopyEvents( Proto, T ); - finally - M.Free; - end; - Result := T; -end; - -function CloneComplexType(Proto : TROComplexType) : TROComplexType; -begin - result := TROComplexType(CloneObject(Proto)); -end; - -function CloneBinary(Proto : Binary) : Binary; -begin - if Proto=NIL then result := NIL - else begin - result := Binary.Create; - result.LoadFromStream(Proto); - result.Position := 0; - end; -end; - -{ TRORequestParam } - -constructor TRORequestParam.Create(Collection: TCollection); -begin - inherited; -end; - -destructor TRORequestParam.Destroy; -begin - if fOwnsComplexType then FreeAndNil(fComplexTypeValue); - if fOwnsBinary then FreeAndNil(fBinaryValue); - inherited; -end; - -function TRORequestParam.GetDisplayName: string; -begin - if (Trim(Name)='') then - result := inherited GetDisplayName - else - result := Name+': '+GetEnumName(TypeInfo(TRODataType), Ord(DataType)); -end; - -procedure TRORequestParam.SetTypeName(const Value: string); -begin - fTypeName := Value; - if fTypeName <> '' then - DataType := rtUserDefined; -end; - -procedure TRORequestParam.SetDataType(const Value: TRODataType); -begin - fDataType := Value; - - if (Value = rtBinary) then begin - if not assigned(fBinaryValue) then begin - fBinaryValue := Binary.Create(); - fOwnsBinary := true; - end; - end - else begin - if fOwnsBinary then FreeAndNil(fBinaryValue); - fBinaryValue := nil; - fOwnsBinary := false; - end; - - if Value <> rtUserDefined then - fTypeName := ''; -end; - -procedure TRORequestParam.SetFlag(const Value: TRODLParamFlag); -begin - fFlag := Value; -end; - -procedure TRORequestParam.SetName(const Value: string); -begin - fName := Value; -end; - -function TRORequestParam.GetAsBoolean: boolean; -begin - if VarIsNull(fSimpleValue) then - result := false - else - result := fSimpleValue -end; - -function TRORequestParam.GetAsCurrency: currency; -begin - if VarIsNull(fSimpleValue) then - result := 0 - else - result := fSimpleValue -end; - -function TRORequestParam.GetAsDateTime: TDateTime; -begin - if VarIsNull(fSimpleValue) then - result := 0 - else - result := fSimpleValue; -end; - -function TRORequestParam.GetAsFloat: double; -begin - if VarIsNull(fSimpleValue) then - result := 0 - else - result := fSimpleValue -end; - -function TRORequestParam.GetAsInteger: integer; -begin - if VarIsNull(fSimpleValue) then - result := 0 - else - result := fSimpleValue -end; - -function TRORequestParam.GetAsString: string; -begin - if VarIsNull(fSimpleValue) then - result := '' - else - result := fSimpleValue -end; - -function TRORequestParam.GetAsVariant: variant; -begin - result := fSimpleValue -end; - -procedure TRORequestParam.SetAsBoolean(const Value: boolean); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsCurrency(const Value: currency); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsDateTime(const Value: TDateTime); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsFloat(const Value: double); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsInteger(const Value: integer); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsString(const Value: string); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.SetAsVariant(const Value: variant); -begin - fSimpleValue := Value -end; - -procedure TRORequestParam.ClearValue; -begin - if fOwnsComplexType then fComplexTypeValue.Free; - if fOwnsBinary then fBinaryValue.Free; - fComplexTypeValue := nil; - fBinaryValue := nil; - fSimpleValue := Null; - fOwnsComplexType := false; - fOwnsBinary := false; - DataType := DataType; // recreates Binary if needed -end; - -function TRORequestParam.GetAsWideString: string; -begin - result := fSimpleValue -end; - -procedure TRORequestParam.SetAsWideString(const Value: string); -begin - fSimpleValue := Value -end; - -function TRORequestParam.GetAsInt64: Int64; -begin - result := fSimpleValue -end; - -procedure TRORequestParam.SetAsInt64(const Value: Int64); -begin - fSimpleValue := Value -end; - -function TRORequestParam.GetAsBinary: Binary; -begin - result := fBinaryValue; -end; - -procedure TRORequestParam.SetAsBinary(const Value: Binary); -begin - if Value <> fBinaryValue then begin - if fOwnsBinary then FreeAndNil(fBinaryValue); - fOwnsBinary := false; - fBinaryValue := Value; - end; -end; - -function TRORequestParam.GetAsComplexType: TROComplexType; -begin - result := fComplexTypeValue; -end; - -procedure TRORequestParam.SetAsComplexType(const Value: TROComplexType); -begin - if Value <> fComplexTypeValue then begin - if fOwnsComplexType then - FreeAndNil(fComplexTypeValue); - fOwnsComplexType := false; - fComplexTypeValue := Value; - end; -end; - -function TRORequestParam.GetIsNull: boolean; -begin - result := ((fDataType = rtBinary) and (fBinaryValue = nil)) or - ((fDataType = rtUserDefined) and (fComplexTypeValue = nil)) or - (fSimpleValue = Null); - -end; - -function TRORequestParam.GetSimpleValueReference: PVariant; -begin - result := @fSimpleValue -end; - -procedure TRORequestParam.Assign(Source: TPersistent); -begin - if (Source is TRORequestParam) then begin - Name := TRORequestParam(Source).Name; - DataType := TRORequestParam(Source).DataType; - Flag := TRORequestParam(Source).Flag; - TypeName := TRORequestParam(Source).TypeName; - case DataType of - rtBinary: AsBinary := TRORequestParam(Source).AsBinary; - rtUserDefined: AsComplexType := TRORequestParam(Source).AsComplexType; - else AsVariant := AsVariant; - end; - end - else inherited; -end; - -procedure TRORequestParam.Check; -begin - case DataType of - rtInteger: AsInteger; - rtDateTime: AsDateTime; - rtDouble: AsFloat; - rtCurrency: AsCurrency; - rtWidestring: AsWideString; - rtString: AsString; - rtInt64: AsInt64; - rtBoolean: AsBoolean; - rtVariant: AsVariant; - rtBinary: AsBinary; - rtUserDefined: AsComplexType; - else Assert(False, 'unsupported data type encountered in TRORequestParam '+Name); - end; -end; - -procedure TRORequestParam.CopyRODLParam(aSourceParam: TRODLOperationParam; aPersistValues: boolean; aOldParams: TRORequestParamCollection); -var oldparam : TRORequestParam; -begin - Name := aSourceParam.Name; - Flag := aSourceParam.Flag; - DataType := StrToDataType(aSourceParam.DataType); - - fSimpleValue := Null; - if DataType = rtUserDefined then - TypeName := aSourceParam.DataType - else - TypeName := ''; - - if aPersistValues and Assigned(aOldParams) then begin - oldparam := aOldParams.FindParam(Name); - if Assigned(oldparam) then begin - case DataType of - rtUserDefined: AsComplexType := oldparam.AsComplexType; - rtBinary: AsBinary := oldParam.AsBinary; - else AsVariant := oldparam.AsVariant; - end; - end; - end; -end; - -{ TRORequestParamCollection } - -constructor TRORequestParamCollection.Create(aDynamicRequest : TRODynamicRequest); -begin - inherited Create(TRORequestParam); - - fRequest := aDynamicRequest; -end; - -destructor TRORequestParamCollection.Destroy; -begin - inherited; -end; - -function TRORequestParamCollection.Add: TRORequestParam; -begin - result := TRORequestParam(inherited Add); -end; - -function TRORequestParamCollection.Add(const aName: string; aDataType: TRODataType; aParamFlag: TRODLParamFlag; const aTypeName: string=''): TRORequestParam; -begin - result := Add(); - with result do begin - Name := aName; - DataType := aDataType; - Flag :=aParamFlag; - if DataType = rtUserDefined then - TypeName := aTypeName; - end; -end; - -function TRORequestParamCollection.Insert(aIndex: integer): TRORequestParam; -begin - result := TRORequestParam(inherited Insert(aIndex)); -end; - -function TRORequestParamCollection.GetItems(aIndex: integer): TRORequestParam; -begin - result := TRORequestParam(inherited Items[aIndex]); -end; - -function TRORequestParamCollection.IndexOf(aItem: TRORequestParam): integer; -var i: integer; -begin - result := - 1; - for i := 0 to (Count - 1) do - if (aItem = Items[i]) then begin - result := i; - Exit; - end; -end; - -procedure TRORequestParamCollection.SetItems(aIndex: integer; aNewItem: TRORequestParam); -begin - inherited Items[aIndex].Assign(aNewItem); -end; - -procedure TRORequestParamCollection.Refresh; -var - svc : TRODLService; - oper : TRODLOperation; -begin - svc := TRODLService(fRequest.RODLLibrary.GetService(fRequest.RemoteService.ServiceName)); - oper := TRODLOperation(svc.Default.GetOperation(fRequest.MethodName, TRUE)); - - CopyRODLOperation(oper); -end; - -procedure TRORequestParamCollection.CopyRODLOperation(anOperation: TRODLOperation); -var i : integer; - param : TRORequestParam; -begin - Clear; - - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST} - DebugServer.EnterMethod('TRORequestParamCollection.CopyRODLOperation'); - try - {$ENDIF} - - for i := 0 to (anOperation.Count-1) do begin - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST} - DebugServer.Write('Adding Parameter %s',[anOperation.Items[i].Name]); - {$ENDIF} - param := Add; - param.Name := anOperation.Items[i].Name; - param.DataType := StrToDataType(anOperation.Items[i].DataType); - param.Flag := anOperation.Items[i].Flag; - - if (param.DataType=rtUserDefined) - then param.TypeName := anOperation.Items[i].DataType - else param.TypeName := ''; - end; - - if (anOperation.Result<>NIL) then begin - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST} - DebugServer.Write('Adding Result'); - {$ENDIF} - - param := Insert(0); - - param.Name := anOperation.Result.Name; - param.DataType := StrToDataType(anOperation.Result.DataType); - param.Flag := anOperation.Result.Flag; - - if (param.DataType=rtUserDefined) - then param.TypeName := anOperation.Result.DataType - else param.TypeName := ''; - end; - - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST} - finally - DebugServer.ExitMethod('TRORequestParamCollection.CopyRODLOperation'); - end; - {$ENDIF} - -end; - -function TRORequestParamCollection.FindParam(const aParamName: string): TRORequestParam; -var i: Integer; -begin - result := NIL; - for i := 0 to (Count - 1) do - if SameText(Items[i].Name, aParamName) then begin - result := Items[i]; - Exit; - end; -end; - -function TRORequestParamCollection.ParamByName(const aParamName: string): TRORequestParam; -begin - result := FindParam(aParamName); - if not assigned(result) then raise Exception.CreateFmt(err_CannotFindParameter, [aParamName]); -end; - -procedure TRORequestParamCollection.ClearValues; -var - i: Integer; -begin - for i := 0 to (Count - 1) do - Items[i].ClearValue; -end; - -procedure TRORequestParamCollection.ClearInputValues; -var - i: Integer; -begin - for i := 0 to (Count - 1) do - if (Items[i].Flag in [fIn, fInOut]) then // do not remove fInOut - Items[i].ClearValue; -end; - -procedure TRORequestParamCollection.ClearOutputValues; -var - i: Integer; -begin - for i := 0 to (Count - 1) do - if (Items[i].Flag in [fOut, fResult]) then // do not add fInOut - Items[i].ClearValue; -end; - -procedure TRORequestParamCollection.Clone(Source: TRORequestParamCollection); -var i: integer; - v: Variant; -begin - ClearValues; - Clear; - - Assign(Source); - - for i := 0 to (Source.Count - 1) do begin - case Source[i].DataType of - rtUserDefined : Items[i].AsComplexType := CloneObject(Source.Items[i].AsComplexType) as TROComplexType; - rtBinary : Items[i].AsBinary := CloneBinary(Source.Items[i].AsBinary); - else begin - v := Source.Items[i].AsVariant; - Items[i].AsVariant := v; - end; - end; - end; -end; - -function TRORequestParamCollection.GetResultParam: TRORequestParam; -var - i: Integer; -begin - for i := 0 to (Count - 1) do begin - if (Items[i].Flag in [fResult]) then begin - result := Items[i]; - exit; - end; - end; - result := nil; -end; - -function TRORequestParamCollection.GetHasResultParam: boolean; -begin - result := GetResultParam() <> nil; -end; - -{ TRODynamicRequest } - -constructor TRODynamicRequest.Create(aOwner: TComponent); -begin - inherited; - fParams := TRORequestParamCollection.Create(Self); -end; - -destructor TRODynamicRequest.Destroy; -begin - fParams.Free; - inherited; -end; - -procedure TRODynamicRequest.DoExecute(aParams: TRORequestParamCollection=nil); -var - // Temporary buffers - vint: integer; - vdatetime: TDateTime; - vdouble: double; - vcurrency: currency; - vwidestring: widestring; - vstring: string; - vint64: int64; - vboolean: boolean; - vcls : TROComplexTypeClass; - vobj : TROComplexType; - vbinary : Binary; - vvariant: Variant; - - lParamName : string; - lComplexTypeClass : TClass; - lMessage: IROMessage; - - procedure WriteParam(aParam: TRORequestParam); - begin - if not Assigned(aParam) then exit; // allow passing of nil for ease of use - lParamName := aParam.Name; - - case aParam.DataType of - rtInteger: begin - vint := aParam.AsInteger; - lMessage.Write(lParamName, TypeInfo(integer), vint, []); - end; - rtDateTime: begin - vdatetime := aParam.AsDateTime; - lMessage.Write(lParamName, TypeInfo(TDateTime), vdatetime, []); - end; - rtDouble: begin - vdouble := aParam.AsFloat; - lMessage.Write(lParamName, TypeInfo(TDateTime), vdouble, []); - end; - rtCurrency: begin - vcurrency := aParam.AsCurrency; - lMessage.Write(lParamName, TypeInfo(currency), vcurrency, []); - end; - rtWidestring: begin - vwidestring := aParam.AsWideString; - lMessage.Write(lParamName, TypeInfo(widestring), vwidestring, []); - end; - rtString: begin - vstring := aParam.AsString; - lMessage.Write(lParamName, TypeInfo(string), vstring, []); - end; - rtInt64: begin - vint64 := aParam.AsInt64; - lMessage.Write(lParamName, TypeInfo(int64), vint64, []); - end; - rtBoolean: begin - vboolean := aParam.AsBoolean; - lMessage.Write(lParamName, TypeInfo(boolean), vboolean, []); - end; - rtVariant: begin - vvariant := aParam.AsVariant; - lMessage.Write(aParam.Name, TypeInfo(variant), vvariant, []); - end; - rtBinary: begin - vbinary := aParam.AsBinary; - if Assigned(vbinary) then begin - lMessage.Write(lParamName, vbinary.ClassInfo, vbinary, []); - end - else begin - lMessage.Write(lParamName, TypeInfo(binary), vbinary, []); - end; - end; - rtUserDefined : begin - vobj := aParam.AsComplexType; - if assigned(vobj) then - lMessage.Write(lParamName, vobj.ClassInfo, vobj, []) - else begin - lComplexTypeClass := FindROClass(aParam.TypeName); - if not assigned(lComplexTypeClass) then - raise Exception.CreateFmt('Unknown class %s', [aParam.TypeName]); - lMessage.Write(lParamName, lComplexTypeClass.ClassInfo, vobj, []); - end; - end; - else - NotSupported; - end; { case } - end; - - procedure ReadParam(aParam: TRORequestParam); - begin - if not Assigned(aParam) then exit; // allow passing of nil for ease of use - lParamName := aParam.Name; - - {$IFDEF DEBUG_REMOBJECTS_DYNAMICREQUEST} - DebugServer.Write('Reading Parameter %s.',[lParamName]); - {$ENDIF} - - case aParam.DataType of - rtInteger: begin - lMessage.Read(lParamName, TypeInfo(integer), vint, []); - aParam.AsInteger := vint; - end; - rtDateTime: begin - lMessage.Read(lParamName, TypeInfo(TDateTime), vdatetime, []); - aParam.AsDateTime := vdatetime; - end; - rtDouble: begin - lMessage.Read(lParamName, TypeInfo(TDateTime), vdouble, []); - aParam.AsFloat := vdouble; - end; - rtCurrency: begin - lMessage.Read(lParamName, TypeInfo(currency), vcurrency, []); - aParam.AsCurrency := vcurrency; - end; - rtWidestring: begin - lMessage.Read(lParamName, TypeInfo(widestring), vwidestring, []); - aParam.AsWideString := vwidestring; - end; - rtString: begin - lMessage.Read(lParamName, TypeInfo(string), vstring, []); - aParam.AsString := vstring; - end; - rtInt64: begin - lMessage.Read(lParamName, TypeInfo(int64), vint64, []); - aParam.AsInt64 := vint64; - end; - rtBoolean: begin - lMessage.Read(lParamName, TypeInfo(boolean), vboolean, []); - aParam.AsBoolean := vboolean; - end; - rtBinary: begin - vbinary := aParam.AsBinary; - if Assigned(vbinary) then begin - lMessage.Read(lParamName, vbinary.ClassInfo, vbinary, []); - end - else begin - lMessage.Read(lParamName, TypeInfo(binary), vbinary, []); - end; - aParam.AsBinary := vbinary; - end; - rtUserDefined : begin - { ToDo -omh: I'm not particulaty happy with this approach yet (both here AND in the general - streaming code. We should add a better hook to create the proper class for reading - complex/array types. See also commenst in uROStreamSerializer. } - if Assigned(aParam.AsComplexType) then begin - vobj := aParam.AsComplexType; - lMessage.Read(lParamName, vobj.ClassInfo, vobj, []); - end - else begin - vobj := nil; - vcls := FindROClass(aParam.TypeName); - if Assigned(vcls) then begin - lMessage.Read(lParamName, vcls.ClassInfo, vobj, []); - end - else begin - if Assigned(OnFindCustomTypeImplementation) then - OnFindCustomTypeImplementation(self, aParam.TypeName, aParam, vobj); - - if not Assigned(vobj) then - raise EROUnknownType.CreateFmt(err_UnknownClass, [aParam.TypeName]); - - lMessage.Read(lParamName, vobj.ClassInfo, vobj, []); - end; - - end; - aParam.AsComplexType := vobj; - end; - else - NotSupported; - end; { case } - end; - -var - lChannel: IROTransportChannel; - i: integer; - -begin - CheckProperties; - - if not assigned(aParams) then aParams := Params; // use own params, if none are passed in. - - try - lMessage := RemoteService.Message as IROMessage; - lChannel := RemoteService.Channel as IROTransportChannel; - - lMessage.InitializeRequestMessage(lChannel, '', fRemoteService.ServiceName, MethodName); - for i := 0 to (aParams.Count-1) do - if (aParams[i].Flag in [fIn, fInOut]) then - WriteParam(aParams[i]); - lMessage.Finalize; - - (RemoteService.Channel as IROTransportChannel).Dispatch(lMessage); - - ReadParam(aParams.ResultParam); // important: Result must be read before any of the other out or var parameters - for i := 0 to (aParams.Count - 1) do - if (aParams[i].Flag in [fOut, fInOut]) then - ReadParam(aParams[i]); - - finally - lMessage.FreeStream; - end; -end; - -procedure TRODynamicRequest.Execute(aParams: TRORequestParamCollection=nil); -var - lIgnoreException : boolean; -begin - if Assigned(fOnBeforeExecute) then - fOnBeforeExecute(Self); - try - try - DoExecute(aParams); - except - on E:Exception do begin - lIgnoreException := FALSE; - if Assigned(fOnExecuteError) then - fOnExecuteError(Self, E, lIgnoreException); - if not lIgnoreException then raise; - end; - end; - finally - if Assigned(fOnAfterExecute) then - fOnAfterExecute(Self); - end; -end; - -function TRODynamicRequest.GetParams: TRORequestParamCollection; -begin - result := fParams -end; - -function TRODynamicRequest.GetRODLLibrary: TRODLLibrary; -begin - result := RemoteService.GetRODLLibrary(); -end; - -function TRODynamicRequest.FindParam(const aParamName: string): TRORequestParam; -begin - result := fParams.FindParam(aParamName); -end; - -function TRODynamicRequest.ParamByName(const aParamName: string): TRORequestParam; -begin - result := fParams.ParamByName(aParamName); -end; - -procedure TRODynamicRequest.RefreshParams(aPersistValues: boolean); -var - lLibrary: TRODLLibrary; - lService: TRODLService; - lOperation: TRODLOperation; -begin - CheckProperties; - - lLibrary := RemoteService.GetRODLLibrary(); - lService := lLibrary.FindService(RemoteService.ServiceName); - if not Assigned(lService) then RaiseError('Undefined service "' + RemoteService.ServiceName + '"'); - - repeat - lOperation := lService.Default.FindOperation(MethodName); - if not Assigned(lOperation) then begin - if lService.Ancestor <> '' then begin - lService := lLibrary.FindService(lService.Ancestor); - end - else - lService := nil; - end; - until Assigned(lOperation) or not Assigned(lService); - - if not Assigned(lOperation) then RaiseError('Method "' + MethodName + '" not found in service ' + RemoteService.ServiceName + ' or its anchestors'); - RefreshParams(lOperation, aPersistValues); -end; - -procedure TRODynamicRequest.RefreshParams(aOperation: TRODLOperation; aPersistValues: boolean); -var - i: integer; - lOldParams: TRORequestParamCollection; - lNewParam: TRORequestParam; -begin - lOldParams := nil; - try - - if aPersistValues then begin - lOldParams := TRORequestParamCollection.Create(nil); - for i := 0 to (Params.Count - 1) do begin - with lOldParams.Add do begin - Assign(Params[i]); - end; - end; - end; - - Params.Clear(); - - if Assigned(aOperation.Result) then begin - lNewParam := Params.Add(); - lNewParam.CopyRODLParam(aOperation.Result, true, lOldParams); - end; - - for i := 0 to (aOperation.Count - 1) do begin - lNewParam := Params.Add(); - lNewParam.CopyRODLParam(aOperation.Items[i], true, lOldParams); - end; - finally - FreeAndNil(lOldParams); - end; -end; - -procedure TRODynamicRequest.SetMethodName(const Value: string); -var - lOldValue: string; -begin - if Value <> fMethodName then begin - lOldValue := fMethodName; - fMethodName := Value; - MethodNameChanged(); - if Assigned(fOnChangeMethodName) then fOnChangeMethodName(Self, lOldValue, fMethodName); - end; -end; - -procedure TRODynamicRequest.SetParams( - const Value: TRORequestParamCollection); -begin - fParams.Assign(Value); -end; - -procedure TRODynamicRequest.SetRemoteService(const Value: TRORemoteService); -begin - if Value <> fRemoteService then begin - fRemoteService := Value; - if assigned(fRemoteService) then fRemoteService.FreeNotification(self); - end; -end; - -procedure TRODynamicRequest.ListServiceOperations( - const aServiceName: string; aList: TStrings); -var service : TRODLService; - i: Integer; -begin - service := TRODLService(RODLLibrary.FindService(aServiceName)); - Check(service=NIL, err_CannotFindService, [aServiceName]); - - while service<>NIL do begin - for i := 0 to (service.Default.Count - 1) do begin - aList.Add(service.Default.Items[i].Name) - end; - - if service.Ancestor<>'' - then service := RODLLibrary.FindService(service.Ancestor) - else Break; - end; -end; - -procedure TRODynamicRequest.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - if Operation = opRemove then begin - if AComponent = RemoteService then RemoteService := nil; - end; -end; - -procedure TRODynamicRequest.CreateInputComplexTypes(SkipIfAssigned : boolean); -var - i: Integer; - cls: TROComplexTypeClass; - vobj: TROComplexType; -begin - for i := 0 to (fParams.Count - 1) do - if (fParams[i].Flag=fIn) then begin - case fParams[i].DataType of - rtUserDefined: begin - if Assigned(fParams[i].AsComplexType) then begin - if SkipIfAssigned then - Continue - else - fParams[i].ClearValue; - end; - - cls := FindROClass(fParams[i].TypeName); - if assigned(cls) then - vObj := cls.Create; - if not assigned(vObj) and Assigned(OnFindCustomTypeImplementation) then - OnFindCustomTypeImplementation(self, fParams[i].TypeName, fParams[i], vobj); - Assert(Assigned(vobj), Format(err_UnknownComplexType, [fParams[i].TypeName])); - fParams[i].AsComplexType := vobj; - end; - rtBinary: begin - if Assigned(fParams[i].AsBinary) then begin - if SkipIfAssigned then - Continue - else - fParams[i].ClearValue; - end; - - fParams[i].AsBinary := Binary.Create; - end; - end; - end; -end; - -function TRODynamicRequest.GetIsFunction: boolean; -begin - result := fParams.ResultParam<>NIL -end; - -procedure TRORequestParam.DefineProperties(Filer: TFiler); -{$IFNDEF DESIGNTIME} -var - cls: TROComplexTypeClass; -{$ENDIF DESIGNTIME} -begin - inherited; - - {$IFNDEF DESIGNTIME} - if Assigned(Collection) and (Collection.Owner <> nil) and - (Collection.Owner is TComponent) and (csDesigning in TComponent(Collection.Owner).ComponentState) then - exit; - - if (DataType = rtUserDefined) and not Assigned(fComplexTypeValue) and - (Flag in [fIn, fInOut]) then - begin - cls := FindROClass(TypeName); - if assigned(cls) then - fComplexTypeValue := cls.Create; - if not assigned(fComplexTypeValue) and Assigned(TRORequestParamCollection(Collection).fRequest.OnFindCustomTypeImplementation) then - TRORequestParamCollection(Collection).fRequest.OnFindCustomTypeImplementation(TRORequestParamCollection(Collection).fRequest, TypeName, self, fComplexTypeValue); - Assert(Assigned(fComplexTypeValue), Format(err_UnknownComplexType, [TypeName])); - end; - - Filer.DefineProperty('SimpleValue', ReadSimpleValue, WriteSimpleValue, - not (fDataType in [rtBinary, rtUserDefined])); - Filer.DefineProperty('ComplexTypeValue', ReadComplexTypeValue, WriteComplexTypeValue, - (fDataType = rtUserDefined) and Assigned(fComplexTypeValue)); - Filer.DefineBinaryProperty('BinaryValue', ReadBinaryValue, WriteBinaryValue, - (fDataType = rtBinary) and Assigned(fBinaryValue)); - {$ENDIF DESIGNTIME} -end; - -procedure TRORequestParam.ReadBinaryValue(Stream: TStream); -begin - if not Assigned(fBinaryValue) then - begin - fBinaryValue := Binary.Create; - end; - - fBinaryValue.LoadFromStream(Stream); -end; - -procedure TRORequestParam.WriteBinaryValue(Stream: TStream); -begin - fBinaryValue.SaveToStream(Stream); -end; - -type - TReader2 = class(TReader) - private - protected - public - procedure ReadProperty2(Instance: TPersistent); - end; - -procedure TReader2.ReadProperty2(Instance: TPersistent); -begin - ReadProperty(Instance); -end; - -procedure TRORequestParam.ReadComplexTypeValue(Reader: TReader); -var - cls: TROComplexTypeClass; -begin - if not Assigned(fComplexTypeValue) then - begin - cls := FindROClass(TypeName); - if assigned(cls) then - fComplexTypeValue := cls.Create; - if not assigned(fComplexTypeValue) and Assigned(TRORequestParamCollection(Collection).fRequest.OnFindCustomTypeImplementation) then - TRORequestParamCollection(Collection).fRequest.OnFindCustomTypeImplementation(TRORequestParamCollection(Collection).fRequest, TypeName, self, fComplexTypeValue); - Assert(Assigned(fComplexTypeValue), Format(err_UnknownComplexType, [TypeName])); - end; - - Reader.ReadListBegin; - while not Reader.EndOfList do TReader2(Reader).ReadProperty(fComplexTypeValue); - Reader.ReadListEnd; -end; - -type - TWriter2 = class(TWriter) - private - protected - public - procedure WriteProperties2(Instance: TPersistent); - end; - -procedure TWriter2.WriteProperties2(Instance: TPersistent); -begin - WriteProperties(Instance); -end; - -procedure TRORequestParam.WriteComplexTypeValue(Writer: TWriter); -begin - Assert(Assigned(fComplexTypeValue)); - - Writer.WriteListBegin; - TWriter2(Writer).WriteProperties2(fComplexTypeValue); - Writer.WriteListEnd; -end; - -procedure TRORequestParam.ReadSimpleValue(Reader: TReader); -begin - {$IFDEF FPC} - FPC_ReadVariant(Reader); - {$ELSE} - fSimpleValue := Reader.ReadVariant; - {$ENDIF} -end; - -procedure TRORequestParam.WriteSimpleValue(Writer: TWriter); -begin - {$IFDEF FPC} - FPC_WriteVariant(Writer); - {$ELSE} - Writer.WriteVariant(fSimpleValue); - {$ENDIF} -end; - -{$IFDEF FPC} -procedure TRORequestParam.FPC_ReadVariant(Reader: TReader); -begin - VarClear(fSimpleValue); - case Reader.NextValue of - vaNil, vaNull: - if Reader.ReadValue <> vaNil then - fSimpleValue := Variants.Null; - vaInt8: fSimpleValue := Shortint(Reader.ReadInteger); - vaInt16: fSimpleValue := Smallint(Reader.ReadInteger); - vaInt32: fSimpleValue := Reader.ReadInteger; - vaExtended: fSimpleValue := Reader.ReadFloat; - vaSingle: fSimpleValue := Reader.ReadSingle; - vaCurrency: fSimpleValue := Reader.ReadCurrency; - vaDate: fSimpleValue := Reader.ReadDate; - vaString, vaLString: fSimpleValue := Reader.ReadString; - vaWString, - vaUTF8String: fSimpleValue := Reader.ReadWideString; - vaFalse, vaTrue: fSimpleValue := (Reader.ReadValue = vaTrue); - vaInt64: fSimpleValue := Reader.ReadInt64; - else - raise Exception.Create('Error reading ...'); - end; -end; - -procedure TRORequestParam.FPC_WriteVariant(Writer: TWriter); -var - CustomType: TCustomVariantType; - OuterStream, InnerStream: TMemoryStream; - OuterWriter: TWriter; - StreamSize: Integer; - LInt64: Int64; -begin - if VarIsArray(fSimpleValue) then - raise Exception.Create('Error writing ...'); - case VarType(fSimpleValue) and varTypeMask of - {varEmpty: - Writer.WriteValue(vaNil); - varNull: - Writer.WriteValue(vaNull);} - varOleStr: - Writer.WriteWideString(fSimpleValue); - varString: - Writer.WriteString(fSimpleValue); - varByte, varShortInt, varWord, varSmallInt, varInteger: - Writer.WriteInteger(TVarData(fSimpleValue).vInteger); - varSingle: - Writer.WriteSingle(TVarData(fSimpleValue).vSingle); - varDouble: - Writer.WriteFloat(TVarData(fSimpleValue).vDouble); - varCurrency: - Writer.WriteCurrency(fSimpleValue); - varDate: - Writer.WriteDate(fSimpleValue); - varBoolean: - begin - if fSimpleValue then - Writer.WriteBoolean(True) - else - Writer.WriteBoolean(False); -{ varLongWord, varInt64: - begin - LInt64 := fSimpleValue; - WriteInteger(LInt64); - end; } - end; - else - raise Exception.Create('Error writing ...'); - end; -end; - -{$ENDIF} -procedure TRODynamicRequest.MethodNameChanged; -begin -end; - -procedure TRODynamicRequest.CheckProperties; -begin - Check(RemoteService = nil, Name + '.RemoteService must be assigned.'); - RemoteService.CheckProperties; - Check(MethodName = '', Name + '.MethodName must be set.'); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEncryption.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEncryption.pas deleted file mode 100644 index 684fca2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEncryption.pas +++ /dev/null @@ -1,564 +0,0 @@ -unit uROEncryption; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -// todo : add hash checksum to encrypted stream to ensure integrity - -interface - -uses - Windows, SysUtils, Classes, - uROCipher, uROCiphers, uROCipher1; - -type - TROEncryptionEvent = procedure(Sender: TObject; - OriginalStream: TStream; var ProcessedStream: TStream) of object; - - // keep related encryption types together so the class arrays below will work - // be sure to add new types to both the appropriate class array and - // the set assignment (in Initialization) - // - // if you add a new cipher family (like DECCiphers), be sure to add - // a "if iEncMethod in MyCiphers" block to both the Extract and Enclose methods - // where you handle default keys and instantiating the Cipher variable - // - TROEncryptionMethod = (tetNone, //no encryption - tetDES, tetBlowfish, tetTwoFish, tetRijndael // DEC encryption} - ); - - TROCryptoKey = type string; - -const - TDECEncryptionClasses: array[tetDES..tetRijndael] of TROCipherClass = - (TROCipher_3TDES, TROCipher_Blowfish, TROCipher_Twofish, TROCipher_Rijndael); - -const - ROStreamIdentifier: string = 'rorocks'; - // the following are binary values - 1, 2, 4, etc. - ROStreamCompressed = $00000001; - ROStreamEncrypted = $00000002; - - ValidStreams = $00000003; // sum of all stream types - for detecting invalid values - - // key is Ripe256 hash of 'RemObjects Rules!' - // 256 bit key is enough for any of the included ciphers - // if a DEC-based cipher is added which needs more than a 256-bit key, replace this. - - DefaultDECCipherKey = '12E4F3024E6F3D720E05984053ED365D7994B471691D8520979AD8D4DB81DF78'; - -var - DECCiphers : set of TROEncryptionMethod; - LastCompressTime, - LastEncryptTime : Double; - HPCFreq : Int64; - -type - TROEncryption = class(TPersistent) - private - { Private declarations } - FEncryptionSendMethod: TROEncryptionMethod; - FEncryptionSendKey: TROCryptoKey; - FEncryptionRecvKey: TROCryptoKey; - FUseCompression: Boolean; - FOnBeforeEncryption: TROEncryptionEvent; { Defined in Classes unit. } - FOnAfterDecryption: TROEncryptionEvent; - - timebefore, timeafter: Int64; - - procedure Enclose(const iSourceStream, iDestStream: TStream; - iEncMethod: TROEncryptionMethod; isCompressed: Boolean; - iKey: string = ''); - function Extract(const iSourceStream, iDestStream: TStream; - iKey: string = ''): Int64; - protected - { Protected declarations } - function GetEncryptionSendMethod: TROEncryptionMethod; virtual; - procedure SetEncryptionSendMethod(NewValue: TROEncryptionMethod); virtual; - function GetEncryptionSendKey: TROCryptoKey; virtual; - procedure SetEncryptionSendKey(NewValue: TROCryptoKey); virtual; - function GetEncryptionRecvKey: TROCryptoKey; virtual; - procedure SetEncryptionRecvKey(NewValue: TROCryptoKey); virtual; - function GetUseCompression: Boolean; virtual; - procedure SetUseCompression(NewValue: Boolean); virtual; - { Event triggers: } - procedure TriggerBeforeEncryptionEvent(iOriginalStream: TStream; var iProcessedStream: TStream); virtual; - procedure TriggerAfterDecryptionEvent(iOriginalStream: TStream; var iProcessedStream: TStream); virtual; - procedure AssignTo(Dest: TPersistent); override; - public - { Public declarations } - constructor Create;//(aOwner: TComponent); override; - destructor Destroy; override; - procedure Encrypt(iPlaintext, iCiphertext: TStream); virtual; - procedure Decrypt(iCiphertext, iPlaintext: TStream); virtual; - published - { Published properties and events } - property EncryptionMethod: TROEncryptionMethod read GetEncryptionSendMethod write SetEncryptionSendMethod default tetNone; { Published } - property EncryptionSendKey: TROCryptoKey read GetEncryptionSendKey write SetEncryptionSendKey; { Published } - property EncryptionRecvKey: TROCryptoKey read GetEncryptionRecvKey write SetEncryptionRecvKey; { Published } - property UseCompression: Boolean read GetUseCompression write SetUseCompression default False; { Published } - property OnBeforeEncryption: TROEncryptionEvent read FOnBeforeEncryption write FOnBeforeEncryption; - property OnAfterDecryption: TROEncryptionEvent read FOnAfterDecryption write FOnAfterDecryption; - end; { TROEncryption } - -implementation - -uses - uROZLib; - -function TROEncryption.GetEncryptionSendMethod: TROEncryptionMethod; -{ Returns the value of data member FEncryptionSendMethod. } -begin - { ToDo -cCDK: Add query/calculation code here and/or modify result below. } - GetEncryptionSendMethod := FEncryptionSendMethod; -end; { GetEncryptionSendMethod } - -procedure TROEncryption.SetEncryptionSendMethod(NewValue: TROEncryptionMethod); -{ Sets data member FEncryptionSendMethod to newValue. } -begin - if FEncryptionSendMethod <> NewValue then - begin - FEncryptionSendMethod := NewValue; - { ToDo -cCDK: Add display update code here if needed. } - end; -end; { SetEncryptionSendMethod } - -function TROEncryption.GetEncryptionSendKey: TROCryptoKey; -{ Returns the value of data member FEncryptionSendKey. } -begin - { ToDo -cCDK: Add query/calculation code here and/or modify result below. } - GetEncryptionSendKey := FEncryptionSendKey; -end; { GetEncryptionSendKey } - -procedure TROEncryption.SetEncryptionSendKey(NewValue: TROCryptoKey); -{ Sets data member FEncryptionSendKey to newValue. } -begin - if FEncryptionSendKey <> NewValue then - begin - FEncryptionSendKey := NewValue; - { ToDo -cCDK: Add display update code here if needed. } - end; -end; { SetEncryptionSendKey } - -function TROEncryption.GetEncryptionRecvKey: TROCryptoKey; -{ Returns the value of data member FEncryptionRecvKey. } -begin - { ToDo -cCDK: Add query/calculation code here and/or modify result below. } - GetEncryptionRecvKey := FEncryptionRecvKey; -end; { GetEncryptionRecvKey } - -procedure TROEncryption.SetEncryptionRecvKey(NewValue: TROCryptoKey); -{ Sets data member FEncryptionRecvKey to newValue. } -begin - if FEncryptionRecvKey <> NewValue then - begin - FEncryptionRecvKey := NewValue; - { ToDo -cCDK: Add display update code here if needed. } - end; -end; { SetEncryptionRecvKey } - -function TROEncryption.GetUseCompression: Boolean; -{ Returns the value of data member FUseCompression. } -begin - { ToDo -cCDK: Add query/calculation code here and/or modify result below. } - GetUseCompression := FUseCompression; -end; { GetUseCompression } - -procedure TROEncryption.SetUseCompression(NewValue: Boolean); -{ Sets data member FUseCompression to newValue. } -begin - if FUseCompression <> NewValue then - begin - FUseCompression := NewValue; - { ToDo -cCDK: Add display update code here if needed. } - end; -end; { SetUseCompression } - -procedure TROEncryption.Encrypt(iPlaintext, iCiphertext: TStream); { public } -var - NewStream : TStream; -begin - NewStream := nil; - TriggerBeforeEncryptionEvent(iPlaintext, NewStream); - - if NewStream <> nil then - begin - NewStream.Seek(0,soFromBeginning); - Enclose(NewStream, iCiphertext, FEncryptionSendMethod, FUseCompression, - FEncryptionSendKey); - NewStream.Free; - end - else - begin - iPlaintext.seek(0, soFromBeginning); - Enclose(iPlaintext, iCiphertext, FEncryptionSendMethod, FUseCompression, - FEncryptionSendKey); - end; -end; { Encrypt } - -procedure TROEncryption.Decrypt(iCiphertext, iPlaintext: TStream); { public } -var - NewStream : TStream; - OutStream : TMemoryStream; -begin - OutStream := TMemoryStream.Create; - try - Extract(iCiphertext, OutStream, FEncryptionRecvKey); - NewStream := nil; - TriggerAfterDecryptionEvent(OutStream, NewStream); - if NewStream <> nil then - begin - NewStream.Seek(0,soFromBeginning); - iPlaintext.CopyFrom(NewStream, NewStream.Size); - NewStream.Free; - end - else - OutStream.Seek(0,soFromBeginning); - iPlaintext.CopyFrom(OutStream, OutStream.Size); - finally // wrap up - OutStream.Free; - end; // try/finally -end; { Decrypt } - -{ Event triggers: } - -procedure TROEncryption.TriggerBeforeEncryptionEvent(iOriginalStream: TStream; var iProcessedStream: TStream); -{ Triggers the OnBeforeEncryption event. This is a virtual method (descendants of this component can override it). } -{ ToDo -cCDK: Call as needed to trigger event. } -begin - if Assigned(FOnBeforeEncryption) then - FOnBeforeEncryption(Self, iOriginalStream, iProcessedStream); -end; { TriggerBeforeEncryptionEvent } - -procedure TROEncryption.TriggerAfterDecryptionEvent(iOriginalStream: TStream; var iProcessedStream: TStream); -{ Triggers the OnAfterDecryption event. This is a virtual method (descendants of this component can override it). } -{ ToDo -cCDK: Call as needed to trigger event. } -begin - if Assigned(FOnAfterDecryption) then - FOnAfterDecryption(Self, iOriginalStream, iProcessedStream); -end; { TriggerAfterDecryptionEvent } - -procedure TROEncryption.AssignTo(Dest: TPersistent); -var - DestEncr: TROEncryption; -begin - if Dest is TROEncryption then begin - DestEncr := TROEncryption(Dest); - DestEncr.EncryptionMethod := EncryptionMethod; - DestEncr.EncryptionSendKey := EncryptionSendKey; - DestEncr.EncryptionRecvKey := EncryptionRecvKey; - DestEncr.UseCompression := UseCompression; - DestEncr.OnBeforeEncryption := OnBeforeEncryption; - DestEncr.OnAfterDecryption := OnAfterDecryption; - end else begin - inherited; - end; -end; - -destructor TROEncryption.Destroy; -begin - { ToDo -cCDK: Free allocated memory and created objects here. } - inherited Destroy; -end; { Destroy } - -constructor TROEncryption.Create;//(aOwner: TComponent); -{ Creates an object of type TROEncryption, and initializes properties. } -begin - inherited Create;//(aOwner); - { Initialize properties with default values: } - FEncryptionSendMethod := tetNone; - FUseCompression := False; - { ToDo -cCDK: Add your initialization code here. } -end; { Create } - -procedure TROEncryption.Enclose(const iSourceStream, iDestStream: TStream; - iEncMethod: TROEncryptionMethod; isCompressed: Boolean; iKey: string = ''); -var - Size : Integer; - nextStream : TStream; - Cipher : TROBaseCipher; - CipherKey : string; - - FreeNext : Boolean; - - StreamType : Integer; -begin - // don't do anything if streamsize is 0 - if iSourceStream.Size = 0 then - Exit; - - if (isCompressed) or (iEncMethod <> tetNone) then begin - iDestStream.Write(ROStreamIdentifier[1], Length(ROStreamIdentifier)); { brazil } - - if isCompressed then - StreamType := ROStreamCompressed - else - StreamType := 0; - - if iEncMethod <> tetNone then - begin - StreamType := StreamType or ROStreamEncrypted; - end; - - iDestStream.Write(StreamType, SizeOf(StreamType)); - - if iEncMethod <> tetNone then - begin - StreamType := Integer(iEncMethod); - iDestStream.Write(StreamType, SizeOf(StreamType)); - end; - - FreeNext := False; - Cipher := nil; - nextStream := nil; - - LastCompressTime := 0; - LastEncryptTime := 0; - - try - if isCompressed then - begin - // only create NextStream if we need the intermediate result before encryption - if iEncMethod <> tetNone then - begin - nextStream := TMemoryStream.Create; - nextStream.Size := iSourceStream.Size; - FreeNext := True; - end - else - nextStream := iDestStream; - - Size := iSourceStream.Size; - nextStream.Write(Size, 4); - - with TCompressionStream.Create(clMax, nextStream) do - try - //iStream.Seek(0,soFromBeginning); - QueryPerformanceCounter(timebefore); - CopyFrom(iSourceStream, iSourceStream.Size); - QueryPerformanceCounter(timeafter); - LastCompressTime := (timeafter - timebefore) / HPCFreq; - finally - Free(); - end; - nextStream.seek(0, soFromBeginning); - end - else - begin - if iEncMethod <> tetNone then - nextStream := iSourceStream; - end; - - if iEncMethod <> tetNone then - begin - // get key value - // - add new sections if new encryption types are added - // - new section should include assign default key if - // fEncryptionRecvKey = '' - // - otherwise convert fEncryptionRecvKey to key value and - // raise exception if invalid value - - if iEncMethod in DECCiphers then - begin - if iKey = '' then - begin - CipherKey := DefaultDECCipherKey; - end - else - begin - CipherKey := iKey; - end; - - Cipher := TroDECCipher.Create(TDECEncryptionClasses[iEncMethod], CipherKey); - end; - - // do decryption - - if Cipher = nil then - raise Exception.Create('OK, who forgot to create the cipher?'); - - try - QueryPerformanceCounter(timebefore); - Cipher.EncryptStream(nextStream, iDestStream); - QueryPerformanceCounter(timeafter); - LastEncryptTime := (timeafter - timebefore) / HPCFreq; - finally // wrap up - Cipher.Free; - end; // try/finally - end; - - finally - if FreeNext then - nextStream.Free; - end; - end - else - begin // nothing happened - copy src to dest - iDestStream.CopyFrom(iSourceStream, iSourceStream.Size - iSourceStream.Position); - end; -end; - -function TROEncryption.Extract(const iSourceStream, iDestStream: TStream; - iKey: string = ''): Int64; -var - isCompressed : Boolean; - StreamIdentifier : string[6]; - StreamType : Integer; - EncMethodRead : Integer; - EncMethod : TROEncryptionMethod; - OrigPos : Integer; - - Len : Integer; - nextStream : TStream; - DecompressionStream: TDecompressionStream; - Cipher : TROBaseCipher; - CipherKey : string; - - FreeNext : Boolean; -begin - Result := 0; - - SetLength(StreamIdentifier, Length(ROStreamIdentifier)); - OrigPos := iSourceStream.Position; - iSourceStream.read(StreamIdentifier[1], Length(ROStreamIdentifier)); - - if StreamIdentifier = ROStreamIdentifier then - begin - iSourceStream.read(StreamType, 4); - - if StreamType or ValidStreams <> ValidStreams then - //if StreamType <> CONST_StreamType then - raise Exception.Create('Invalid response type: Newer Brazil DataSnap Server?'); - - EncMethod := tetNone; - - if StreamType and ROStreamEncrypted <> 0 then - begin - iSourceStream.read(EncMethodRead, SizeOf(EncMethodRead)); - - try - EncMethod := TROEncryptionMethod(EncMethodRead); - except - on e: Exception do - raise Exception.CreateFmt('Invalid encryption method (%d): Newer Brazil DataSnap Server?', [EncMethodRead]); - end; // try/finally - end; - - FreeNext := False; - nextStream := nil; - Cipher := nil; - - // don't do anything on empty stream - if iSourceStream.Size = iSourceStream.Position then - Exit; - - LastCompressTime := 0; - LastEncryptTime := 0; - - isCompressed := (StreamType and ROStreamCompressed) <> 0; - - try - if EncMethod <> tetNone then - begin - // only create NextStream if we need the intermediate result before decompression - if isCompressed then - begin - nextStream := TMemoryStream.Create; - nextStream.Size := iSourceStream.Size; - FreeNext := True; - end - else - nextStream := iDestStream; - - // get key value - // - add new sections if new encryption types are added - // - new section should include assign default key if - // fEncryptionRecvKey = '' - // - otherwise convert fEncryptionRecvKey to key value and - // raise exception if invalid value - - if EncMethod in DECCiphers then - begin - if iKey = '' then - begin - CipherKey := DefaultDECCipherKey; - end - else - begin - CipherKey := iKey; - end; - - Cipher := TroDECCipher.Create(TDECEncryptionClasses[EncMethod], CipherKey); - end; - - // do decryption - - if Cipher = nil then - raise Exception.Create('OK, who forgot to create the cipher?'); - - try - QueryPerformanceCounter(timebefore); - Cipher.DecryptStream(iSourceStream, nextStream); - QueryPerformanceCounter(timeafter); - LastEncryptTime := (timeafter - timebefore) / HPCFreq; - finally // wrap up - Cipher.Free; - end; // try/finally - nextStream.seek(0, soFromBeginning); - end - else - begin - if isCompressed then - nextStream := iSourceStream - else - begin // nothing happened - copy src to dest - iDestStream.CopyFrom(iSourceStream, iSourceStream.Size - iSourceStream.Position); - end; - end; - - if isCompressed then - begin - nextStream.read(Len, 4); - - DecompressionStream := TDecompressionStream.Create(nextStream); - try - QueryPerformanceCounter(timebefore); - iDestStream.CopyFrom(DecompressionStream, Len); - QueryPerformanceCounter(timeafter); - LastCompressTime := (timeafter - timebefore) / HPCFreq; - iDestStream.seek(0, soFromBeginning); - finally - DecompressionStream.Free(); - end; { with } - - Result := iDestStream.Size - nextStream.Size; - end; - finally - if FreeNext then - nextStream.Free; - end; - end - else - begin - iSourceStream.seek(OrigPos, soFromBeginning); - iDestStream.CopyFrom(iSourceStream, iSourceStream.Size - OrigPos); - end; -end; - -initialization - DECCiphers := [tetDES..tetRijndael]; - QueryPerformanceFrequency(HPCFreq); -finalization -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEventRepository.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEventRepository.pas deleted file mode 100644 index cdb6609..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROEventRepository.pas +++ /dev/null @@ -1,1622 +0,0 @@ -unit uROEventRepository; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, SysUtils, SyncObjs, Contnrs, - uROSessions, uROClientIntf, uROClient, uROTypes, uROClasses, uROServerIntf; - -type - IROEventsInvoker = interface; - TROEventReceiver = class; - TROSessionReference = class; - TROEventRepository = class; - - TROInvokerInvokeMethod = procedure(__EventReceiver : TROEventReceiver; const aMessage : IROMEssage; const aTarget : IInterface) of object; - - { IROEventRepository } - IROEventRepository = interface - ['{35D49EF1-F62C-4985-B092-8B09D235D81B}'] - procedure AddSession(aSessionID : TGUID); - procedure RemoveSession(aSessionID : TGUID); - - procedure StoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; - const ExcludeSessionList: Boolean; - const SessionList: String); - function GetEventData(SessionID : TGUID; var TargetStream : Binary) : integer; - end; - - { IROEventsInvoker } - IROEventsInvoker = interface - ['{A7FF5762-8208-4A91-B6C2-5D4ECB014EE9}'] - procedure Execute(const aTarget : TObject; EventData: TStream); - end; - - TROSessionEvent = procedure(Sender : TROEventRepository ; const SessionID : TGUID) of object; - - { TROEventRepository } - TROEventRepository = class(TROComponent, IROEventRepository) - private - fSessionManager: TROCustomSessionManager; - fMessage: TROMessage; - fOnBeforeAddSession: TROSessionEvent; - fOnAfterRemoveSession: TROSessionEvent; - fOnAfterAddSession: TROSessionEvent; - fOnBeforeRemoveSession: TROSessionEvent; - procedure SetMessage(const Value: TROMessage); - - protected - procedure SetSessionManager(const Value: TROCustomSessionManager); virtual; - - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - - { Virtuals } - procedure DoStoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; - const ExcludeSessionList: Boolean; - const SessionList: String); virtual; abstract; - function DoGetEventData(SessionID : TGUID; var TargetStream : Binary) : integer; virtual; abstract; - procedure DoAddSession(aSessionID : TGUID); overload; virtual; abstract; - procedure DoAddSession(aSessionID : TGUID; aActiveEventServer: IROActiveEventServer); overload; virtual; - procedure DoRemoveSession(aSessionID : TGUID); virtual; abstract; - - function QueryInterface(const IID: TGUID; out Obj): HResult; override; - - public - { IROEventRepository } - procedure StoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; - const ExcludeSessionList: Boolean; - const SessionList: String); - function GetEventData(SessionID : TGUID; var TargetStream : Binary) : integer; - - procedure AddSession(aSessionID : TGUID); overload; - procedure AddSession(aSessionID: TGUID; aActiveEventServer: IROActiveEventServer); overload; - procedure RemoveSession(aSessionID : TGUID); - procedure CheckProperties; virtual; - -// procedure DeleteEventData(anEvent: TROEventData); virtual; - - published - property Message : TROMessage read fMessage write SetMessage; - property SessionManager : TROCustomSessionManager read fSessionManager write SetSessionManager; - - property OnBeforeAddSession : TROSessionEvent read fOnBeforeAddSession write fOnBeforeAddSession; - property OnAfterAddSession : TROSessionEvent read fOnAfterAddSession write fOnAfterAddSession; - property OnAfterRemoveSession : TROSessionEvent read fOnAfterRemoveSession write fOnAfterRemoveSession; - property OnBeforeRemoveSession : TROSessionEvent read fOnBeforeRemoveSession write fOnBeforeRemoveSession; - end; - - TROSessionRefToEventDataLink = class; - - IROActiveEventServerList = interface - ['{C6ACE445-267E-4217-9A9C-1D357A7CB3BF}'] - function GetNext: IROActiveEventServerList; - procedure SetNext(aData: IROActiveEventServerList); - function GetServer: IROActiveEventServer; - - property Server: IROActiveEventServer read GetServer; - property Next: IROActiveEventServerList read GetNext write SetNext; - procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); - end; - TIROActiveEventServerList = class(TInterfacedObject, IROActiveEventServerList) - private - fNext: IROActiveEventServerList; - fServer: IROActiveEventServer; - public - constructor Create(aNext: IROActiveEventServerList; aItem: IROActiveEventServer); - class function AddListener(aList: IROActiveEventServerList; aItem: IROActiveEventServer): IROActiveEventServerList; - class function RemoveListener(aList: IROActiveEventServerList; aItem: IROActiveEventServer): IROActiveEventServerList; - - function GetNext: IROActiveEventServerList; - function GetServer: IROActiveEventServer; - procedure SetNext(aData: IROActiveEventServerList); - procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); - end; - - { TROSessionReference } - TROSessionReference = class - private - fTail: TROSessionRefToEventDataLink; - fHead: TROSessionRefToEventDataLink; - fSessionID: TGUID; - ActiveEventReference: IROActiveEventServerList; - - function GetHead: TROSessionRefToEventDataLink; - function GetTail: TROSessionRefToEventDataLink; - - public - constructor Create(aSessionID : TGUID); - - property SessionID : TGUID read fSessionID; - property Head : TROSessionRefToEventDataLink read GetHead write fHead; - property Tail : TROSessionRefToEventDataLink read GetTail write fTail; - end; - - { TROSessionRefToEventDataLink } - TROSessionRefToEventDataLink = class - private - fNext: TROSessionRefToEventDataLink; - fEventData: TROEventData; - fSessionReference: TROSessionReference; - - public - constructor Create(anEventDataItem : TROEventData; aSessionReference : TROSessionReference); - destructor Destroy; override; - - property EventData : TROEventData read fEventData; - property SessionReference : TROSessionReference read fSessionReference; - property Next: TROSessionRefToEventDataLink read fNext write fNext; - end; - - { TROInMemoryEventRepository } - TROInMemoryEventRepository = class(TROEventRepository, IROSessionsChangesListener) - private - fSessionIDs: TStringList; -// fEvents : TObjectList; - fCritical : TCriticalSection; - FDestroyed: Boolean; - - function GetSessionReferenceCount: integer; - function GetSessionReferences(Index: integer): TROSessionReference; - - procedure UnRegisterSessionsChangesListener; - procedure RegisterSessionsChangesListener; - protected - procedure SetSessionManager(const Value: TROCustomSessionManager); override; - - function FindSession(aSessionID: TGUID): TROSessionReference; - - { Overrides } - procedure DoStoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; - const ExcludeSessionList: Boolean; - const SessionList: String); override; - function DoGetEventData(SessionID : TGUID; var TargetStream : Binary) : integer; override; - procedure DoAddSession(aSessionID: TGUID); overload; override; - procedure DoAddSession(aSessionID : TGUID; aActiveEventServer: IROActiveEventServer); overload; override; - procedure DoRemoveSession(aSessionID: TGUID); override; - procedure RemoveSessionActiveListener(aSessionID: TGUID); - - procedure Loaded; override; - - { IROSessionsChangesListener } - procedure SessionsChangedNotification(const aSessionID : TGUID; aSessionAction: TROSessionsActions; Sender: TObject); - - public -// procedure DeleteEventData(anEvent: TROEventData); override; - procedure BeforeDestruction; override; - - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - property SessionReferences[Index : integer] : TROSessionReference read GetSessionReferences; - property SessionReferenceCount : integer read GetSessionReferenceCount; - - published - end; - - TROOnEventExceptionEvent = procedure (Sender: TObject; anException: Exception) of object; - IROEventReceiverInvokers = interface - ['{C8EA6D75-562E-4FE5-B4EF-47ACD4D2ADE8}'] - function Invoke_GetEventsData(out EventsData: Binary): Integer; - procedure Invoke_RegisterEventClient(const EventTypes: String); - procedure Invoke_UnregisterEventClient(const EventTypes: String); - end; - { TROEventReceiver } - TROEventReceiver = class(TROChannelAwareComponent, IROObjectRetainer, IROEventReceiver, IROEventReceiverInvokers) - private - fTimer : TROThreadTimer; - fActive: boolean; - fServiceName: string; - fHandlers : TStringList; - fOnActivate: TNotifyEvent; - fOnDeactivate: TNotifyEvent; - fOnPollException: TROOnEventExceptionEvent; - fRetainedObjects : TList; - fInterval: Integer; - fEventAwareChannel: IROActiveEventChannel; - fSynchronizeInvoke: Boolean; - - procedure SetInterval(const Value: integer); - procedure SetActive(const Value: boolean); - procedure SetServiceName(const Value: string); - function GetClientID: TGUID; - function GetSynchronizeInvoke: Boolean; - - protected - function GetObject: TObject; - procedure FireEvents(EventsDataStream: TStream); virtual; - - // Proxy methods - function Invoke_GetEventsData(out EventsData: Binary): Integer; - procedure Invoke_RegisterEventClient(const EventTypes: String); - procedure Invoke_UnregisterEventClient(const EventTypes: String); - - procedure OnTimerTick(Dummy: Cardinal); - - procedure Dispatch(aStream: TStream; aCaller: TThread); reintroduce; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure Activate; - procedure Deactivate; - - procedure RegisterEventHandlers(const EventIDs : array of string; const EventHandlers : array of TObject); overload; - procedure RegisterEventHandler(const EventID : string; const EventHandler : TObject); - procedure UnregisterEventHandlersByObject(const EventHandler : array of TObject); - procedure UnregisterEventHandlers(const EventIDs : array of string); overload; - procedure UnregisterEventHandler(const EventHandler : TObject); overload; - procedure UnregisterEventHandler(const EventIDs : string); overload; - function EventHandlersIsRegistered(const EventIDs: array of string; const EventHandlers: array of TObject): boolean; deprecated; - function AreEventHandlersRegistered(const aEventIDs: array of string; const aEventHandlers: array of TObject): boolean; - function IsEventHandlerRegistered(const aEventID: string; const aEventHandler: TObject): boolean; - procedure CheckProperties; - { IROObjectRetainer } - procedure RetainObject(const anObject : TObject); - procedure ReleaseObject(const anObject : TObject); - function IsRetained(const anObject : TObject) : boolean; - - property ClientID : TGUID read GetClientID; - - published - property Active : boolean read fActive write SetActive default false; - property Interval : integer read fInterval write SetInterval default 30000; - property Message; - property Channel; - - property OnPollException: TROOnEventExceptionEvent read fOnPollException write fOnPollException; - property OnActivate : TNotifyEvent read fOnActivate write fOnActivate; - property OnDeactivate : TNotifyEvent read fOnDeactivate write fOnDeactivate; - property ServiceName : string read fServiceName write SetServiceName; - property SynchronizeInvoke: Boolean read GetSynchronizeInvoke write fSynchronizeInvoke default true; - end; - - { TROEventProxy } - TROEventProxy = class(TInterfacedObject) - private - fMessage : IROMessage; - - function GetMessage: IROMessage; - - protected - property __Message : IROMessage read GetMessage; - - public - constructor Create(const aMessage : IROMessage; CloneMessage : boolean); - destructor Destroy; override; - end; - - { TROEventWriter } - TROEventWriter = class(TROEventProxy, IROEventWriter) - private - fRepository : IROEventRepository; - fExcludeSender: boolean; - fExcludeSessionList: boolean; - fSessionList: TStringList; - - function GetRepository: IROEventRepository; - - protected - property Repository : IROEventRepository read GetRepository; - - { IROEventWriter } - function GetSessionList: TStrings; - function GetExcludeSender: boolean; - function GetExcludeSessionList: boolean; - procedure SetExcludeSender(const Value: boolean); - procedure SetExcludeSessionList(const Value: boolean); - - public - constructor Create(const aMessage : IROMessage; - const aRepository : IROEventRepository); reintroduce; - destructor Destroy; override; - - property ExcludeSender : boolean read GetExcludeSender write SetExcludeSender; - property ExcludeSessionList : boolean read GetExcludeSessionList write SetExcludeSessionList; - property SessionList : TStrings read GetSessionList; - end; - - TROEventWriterClass = class of TROEventWriter; - - { TROEventInvoker } - {$M+} - TROEventInvoker = class(TROEventProxy, IROEventsInvoker) - private - fEventReceiver : TROEventReceiver; - - protected - { IROEventsInvoker } - procedure Execute(const aTarget : TObject; EventData: TStream); - - property __EventReceiver : TROEventReceiver read fEventReceiver; - - public - constructor Create(anEventReceiver : TROEventReceiver; - const aMessage : IROMessage; CloneMessage : boolean); reintroduce; - destructor Destroy; override; - end; - {$M-} - - TROEventInvokerClass = class of TROEventInvoker; - -procedure RegisterEventWriterClass(const anEventIID : TGUID; anEventWriteClass : TROEventWriterClass); -procedure UnregisterEventWriterClass(const anEventIID : TGUID); -function FindEventWriterClass(const anEventIID : TGUID) : TROEventWriterClass; - -procedure RegisterEventInvokerClass(const anEventID : string; anEventWriteClass : TROEventInvokerClass); -procedure UnregisterEventInvokerClass(const anEventID : string); -function FindEventInvokerClass(const anEventID : string) : TROEventInvokerClass; - -implementation - -uses - uRORes; - -var - _EventInvokers, - _EventWriters : TStringList; - -procedure RegisterEventWriterClass(const anEventIID : TGUID; anEventWriteClass : TROEventWriterClass); -var id : string; -begin - id := GUIDToString(anEventIID); - _EventWriters.AddObject(id, TObject(anEventWriteClass)); -end; - -procedure UnregisterEventWriterClass(const anEventIID : TGUID); -var idx : integer; -begin - idx := _EventWriters.IndexOf(GUIDToString(anEventIID)); - if (idx>=0) - then _EventWriters.Delete(idx); -end; - -function FindEventWriterClass(const anEventIID : TGUID) : TROEventWriterClass; -var idx : integer; - id : string; -begin - result := NIL; - id := GUIDToString(anEventIID); - idx := _EventWriters.IndexOf(id); - if (idx>=0) - then result := TROEventWriterClass(_EventWriters.Objects[idx]); -end; - -procedure RegisterEventInvokerClass(const anEventID : string; anEventWriteClass : TROEventInvokerClass); -begin - _EventInvokers.AddObject(anEventID, TObject(anEventWriteClass)); -end; - -procedure UnregisterEventInvokerClass(const anEventID : string); -var idx : integer; -begin - idx := _EventInvokers.IndexOf(anEventID); - if (idx>=0) - then _EventInvokers.Delete(idx); -end; - -function FindEventInvokerClass(const anEventID : string) : TROEventInvokerClass; -var idx : integer; -begin - result := NIL; - idx := _EventInvokers.IndexOf(anEventID); - if (idx>=0) - then result := TROEventInvokerClass(_EventInvokers.Objects[idx]); -end; - -{ TROEventRepository } - -procedure TROEventRepository.AddSession(aSessionID: TGUID); -begin - CheckProperties; - if Assigned(fOnBeforeAddSession) then - fOnBeforeAddSession(Self, aSessionID); - - DoAddSession(aSessionID); - - if Assigned(fOnAfterAddSession) then - fOnAfterAddSession(Self, aSessionID); -end; - -procedure TROEventRepository.AddSession(aSessionID: TGUID; aActiveEventServer: IROActiveEventServer); -begin - CheckProperties; - if Assigned(fOnBeforeAddSession) then - fOnBeforeAddSession(Self, aSessionID); - - DoAddSession(aSessionID, aActiveEventServer); - - if Assigned(fOnAfterAddSession) then - fOnAfterAddSession(Self, aSessionID); -end; - -procedure TROEventRepository.RemoveSession(aSessionID: TGUID); -begin - CheckProperties; - if Assigned(fOnBeforeRemoveSession) - then fOnBeforeRemoveSession(Self, aSessionID); - - DoRemoveSession(aSessionID); - - if Assigned(fOnAfterRemoveSession) - then fOnAfterRemoveSession(Self, aSessionID); -end; - -function TROEventRepository.GetEventData(SessionID: TGUID; - var TargetStream: Binary): integer; -begin - CheckProperties; - result := DoGetEventData(SessionID, TargetStream); -end; - -procedure TROEventRepository.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation<>opRemove) then Exit; - - if (AComponent=fSessionManager) then fSessionManager := NIL - else if (AComponent=fMessage) then fMessage := NIL; -end; - -function TROEventRepository.QueryInterface(const IID: TGUID; out Obj): HResult; -var eventwriterclass : TROEventWriterClass; - eventwriter : TROEventWriter; - id : string; -begin - result := inherited QueryInterface(IID, Obj); - - if (result<>S_OK) then begin - id := GUIDToString(IID); - if (id='') then Exit; - - eventwriterclass := FindEventWriterClass(IID); - if (eventwriterclass=NIL) then Exit; - CheckProperties; - eventwriter := eventwriterclass.Create(fMessage, Self); - if eventwriter.GetInterface(IID, Obj) - then result := S_OK - else eventwriter.Free; - end; -end; - -procedure TROEventRepository.SetMessage(const Value: TROMessage); -begin - fMessage := Value; - if (fMessage<>NIL) then fMessage.FreeNotification(Self); -end; - -procedure TROEventRepository.SetSessionManager( - const Value: TROCustomSessionManager); -begin - if (fSessionManager=Value) then Exit; - - fSessionManager := Value; - if (fSessionManager<>NIL) - then fSessionManager.FreeNotification(Self); -end; - -procedure TROEventRepository.StoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; const SessionList: String); -begin - CheckProperties; - DoStoreEventData(SourceSessionID, Data, ExcludeSender, ExcludeSessionList, SessionList); -end; - -procedure TROEventRepository.DoAddSession(aSessionID: TGUID; - aActiveEventServer: IROActiveEventServer); -begin - DoAddSession(aSessionID); -end; - -(*procedure TROEventRepository.DeleteEventData(anEvent: TROEventData); -begin - /// -end;*) - -procedure TROEventRepository.CheckProperties; -begin - // Check(SessionManager = nil, Name + '.SessionManager must be assigned.'); - Check(Message = nil, Name + '.Message must be assigned.'); - Message.CheckProperties; -end; - -{ TROInMemoryEventRepository } - -constructor TROInMemoryEventRepository.Create(aOwner: TComponent); -begin - inherited; - - fCritical := TCriticalSection.Create; -// fEvents := TObjectList.Create(False); // cleaned up one by one - fSessionIDs := TStringList.Create; - fSessionIDs.Duplicates := dupIgnore; - fSessionIDs.Sorted := TRUE; -end; - -destructor TROInMemoryEventRepository.Destroy; -var - i: Integer; - llink: TROSessionReference; - lItem, lnext: TROSessionRefToEventDataLink; -begin - FDestroyed:=True; - fCritical.Enter; - try - for i := fSessionIDs.Count -1 downto 0 do begin - llink := TROSessionReference(fSessionIDs.Objects[i]); - if llink = nil then continue; - lItem := llink.Head; - llink.Free; - while lItem <> nil do begin - if lItem.EventData <> nil then begin - if lItem.EventData.RemoveRef <= 0 then -// fEvents.Remove(lItem.EventData); - lItem.EventData.Free - end; - lnext := lItem.Next; - lItem.Free; - lItem := lNext; - end; - end; - finally - fCritical.Leave; - end; - FreeAndNIL(fSessionIDs); -// FreeAndNIL(fEvents); - FreeAndNIL(fCritical); - - inherited; -end; - -function TROInMemoryEventRepository.DoGetEventData(SessionID: TGUID; - var TargetStream: Binary): integer; -var sessionreference : TROSessionReference; - prevref, - currref : TROSessionRefToEventDataLink; - chunksize : integer; -begin - result := 0; - if FDestroyed then Exit; - fCritical.Enter; - try - sessionreference := FindSession(SessionID); - if (sessionreference=NIL) then Exit; - - TargetStream.Write(result, SizeOf(result)); - - currref := sessionreference.Head; - if (currref<>NIL) then begin - repeat - currref.EventData.Data.Position := 0; - chunksize := currref.EventData.Data.Size; - - TargetStream.Write(chunksize, SizeOf(chunksize)); - TargetStream.CopyFrom(currref.EventData.Data, 0); - - Inc(result); - - prevref := currref; - currref := currref.Next; - - if (prevref.EventData.RemoveRef=0)then begin -// fEvents.Remove(prevref.EventData); - prevref.EventData.Free; - end; - - prevref.Free; - - until (currref=NIL); - - sessionreference.Head := NIL; - sessionreference.Tail := NIL; - end; - - // Updates the event count - TargetStream.Position := 0; - TargetStream.Write(result, SizeOf(result)); - TargetStream.Position := 0; - finally - fCritical.Leave; - end; -end; - -procedure TROInMemoryEventRepository.DoStoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; const SessionList: String); -var newlink : TROSessionRefToEventDataLink; - newevent : TROEventData; - sessionref : TROSessionReference; - i : integer; - filteredsessionslist : TStringList; - isfiltered : boolean; - currsessionid : string; -begin - if FDestroyed then Exit; - filteredsessionslist := NIL; - isfiltered := SessionList<>''; - if isfiltered then begin - filteredsessionslist := TStringList.Create; - filteredsessionslist.Sorted := TRUE; - filteredsessionslist.Duplicates := dupIgnore; - filteredsessionslist.CommaText := SessionList; - end; - - fCritical.Enter; - try - newevent := TROEventData.Create(Data); - try - for i := 0 to (SessionReferenceCount-1) do begin - sessionref := SessionReferences[i]; - currsessionid := GUIDToString(sessionref.SessionID); - - // Filters the sessions the message will go to - if isfiltered then begin - if ExcludeSessionList then begin - if (filteredsessionslist.IndexOf(currsessionid)>=0) - then Continue; - end - else begin - if not (filteredsessionslist.IndexOf(currsessionid)>=0) - then Continue; - end; - end; - - if IsEqualGUID(sessionref.SessionID, SourceSessionID) and ExcludeSender - then Continue; - if sessionref.ActiveEventReference <> nil then begin - newevent.AddRef; // we don't want the event to be freed before we're done with it. - sessionref.ActiveEventReference.DispatchEvent(newevent, sessionref.SessionID, Self); - end - else begin - newlink := TROSessionRefToEventDataLink.Create(newevent, sessionref); - - if (sessionref.Head=NIL) - then sessionref.Head := newlink; - - if (sessionref.Tail<>NIL) - then sessionref.Tail.Next := newlink; - - sessionref.Tail := newlink; - end; - end; - finally - if newevent.RemoveRef < 1 then - newevent.Free; - end; - finally - fCritical.Leave; - FreeAndNIL(filteredsessionslist); - end; -end; - -procedure TROInMemoryEventRepository.DoRemoveSession(aSessionID: TGUID); -var - idx : integer; - sessionreference : TROSessionReference; - prevref, - currref : TROSessionRefToEventDataLink; -begin - if FDestroyed then Exit; - fCritical.Enter; - try - idx := fSessionIDs.IndexOf(GUIDToString(aSessionID)); - if idx>=0 then begin - sessionreference := TROSessionReference(fSessionIDs.Objects[idx]); - currref := sessionreference.Head; - if (currref<>NIL) then begin - repeat - prevref := currref; - currref := currref.Next; - - if (prevref.EventData.RemoveRef=0) - then - prevref.EventData.Free; - - prevref.Free; - - until (currref=NIL); - sessionreference.Head := NIL; - sessionreference.Tail := NIL; - end; - fSessionIDs.Objects[idx].Free; - fSessionIDs.Delete(idx); - end; - finally - fCritical.Leave; - end; -end; - -procedure TROInMemoryEventRepository.DoAddSession(aSessionID: TGUID); -begin - DoAddSession(aSessionID, nil); -end; - -function TROInMemoryEventRepository.GetSessionReferenceCount: integer; -begin - result := fSessionIDs.Count; -end; - -function TROInMemoryEventRepository.GetSessionReferences( - Index: integer): TROSessionReference; -begin - result := TROSessionReference(fSessionIDs.Objects[Index]); -end; - -function TROInMemoryEventRepository.FindSession( - aSessionID: TGUID): TROSessionReference; -var idx : integer; -begin - result := NIL; - - idx := fSessionIDs.IndexOf(GUIDToString(aSessionID)); - if (idx>=0) - then result := TROSessionReference(fSessionIDs.Objects[idx]); -end; - -procedure TROInMemoryEventRepository.UnRegisterSessionsChangesListener; -var - Ref: IROSessionsChangesNotifier; - SelfRef: IROSessionsChangesListener; -begin - if GetInterface(IROSessionsChangesListener, SelfRef) then begin - if Assigned(fSessionManager) and - fSessionManager.GetInterface(IROSessionsChangesNotifier, ref) then begin - ref.UnRegisterSessionsChangesListener(SelfRef); - end; - end; -end; - -procedure TROInMemoryEventRepository.RegisterSessionsChangesListener; -var - Ref: IROSessionsChangesNotifier; - SelfRef: IROSessionsChangesListener; -begin - if GetInterface(IROSessionsChangesListener, SelfRef) then begin - if Assigned(fSessionManager) and - fSessionManager.GetInterface(IROSessionsChangesNotifier, ref) then begin - ref.RegisterSessionsChangesListener(SelfRef); - end; - end; -end; - -procedure TROInMemoryEventRepository.SetSessionManager( - const Value: TROCustomSessionManager); -begin - if (csDesigning in ComponentState) or (csLoading in ComponentState) then begin - inherited; - Exit; - end; - - UnRegisterSessionsChangesListener; - inherited; - RegisterSessionsChangesListener; -end; - -procedure TROInMemoryEventRepository.Loaded; -begin - inherited; - RegisterSessionsChangesListener; -end; - -procedure TROInMemoryEventRepository.SessionsChangedNotification( - const aSessionID: TGUID; aSessionAction: TROSessionsActions; Sender: TObject); -var - idx: Integer; - lRef: IROActiveEventServer; - sessionreference: TROSessionReference; -begin - if FDestroyed then Exit; - if aSessionAction in [saDelete, saTmpSessionDelete] then - RemoveSession(aSessionID); - if aSessionAction = saRemoveActiveListener then begin - fCritical.Enter; - try - idx := fSessionIDs.IndexOf(GUIDToString(aSessionID)); - if idx>=0 then begin - sessionreference := TROSessionReference(fSessionIDs.Objects[idx]); - if Supports(Sender, IROActiveEventServer, lref) then begin - sessionreference.ActiveEventReference := TIROActiveEventServerList.RemoveListener(sessionreference.ActiveEventReference, lRef); - end else - sessionreference.ActiveEventReference := nil; - end; - finally - fCritical.Leave; - end; - end; -end; - -procedure TROInMemoryEventRepository.BeforeDestruction; -begin - UnRegisterSessionsChangesListener; - inherited; -end; - -procedure TROInMemoryEventRepository.DoAddSession(aSessionID: TGUID; - aActiveEventServer: IROActiveEventServer); -var newsession : TROSessionReference; - idx: Integer; -begin - if FDestroyed then Exit; - fCritical.Enter; - try - idx := fSessionIDs.IndexOf(GUIDToString(aSessionID)); - if idx < 0 then begin - newsession := TROSessionReference.Create(aSessionID); - if aActiveEventServer <> nil then begin - newsession.ActiveEventReference := TIROActiveEventServerList.AddListener(newsession.ActiveEventReference, aActiveEventServer); - aActiveEventServer.EventsRegistered(self, aSessionID); - end; - fSessionIDs.AddObject(GUIDToString(aSessionID), newsession); - end - else begin - newsession := TROSessionReference(fSessionIDs.Objects[idx]); - if aActiveEventServer <> nil then begin - newsession.ActiveEventReference := TIROActiveEventServerList.AddListener(newsession.ActiveEventReference, aActiveEventServer); - aActiveEventServer.EventsRegistered(self, aSessionID); - end; - end; - finally - fCritical.Leave; - end; -end; - -procedure TROInMemoryEventRepository.RemoveSessionActiveListener( - aSessionID: TGUID); -var - idx : integer; - sessionreference : TROSessionReference; -begin - if FDestroyed then Exit; - fCritical.Enter; - try - idx := fSessionIDs.IndexOf(GUIDToString(aSessionID)); - if idx>=0 then begin - sessionreference := TROSessionReference(fSessionIDs.Objects[idx]); - sessionreference.ActiveEventReference := nil; - end; - finally - fCritical.Leave; - end; -end; - -(* -procedure TROInMemoryEventRepository.DeleteEventData( - anEvent: TROEventData); -begin - fCritical.Enter; - try - fEvents.Remove(anEvent); - finally - fCritical.Leave; - end; -end; -*) - -{ TROSessionReference } - -constructor TROSessionReference.Create(aSessionID: TGUID); -begin - inherited Create; - - fSessionID := aSessionID; -end; - -function TROSessionReference.GetHead: TROSessionRefToEventDataLink; -begin - Result := fHead; -end; - -function TROSessionReference.GetTail: TROSessionRefToEventDataLink; -begin - Result := fTail; -end; - -{ TROSessionRefToEventDataLink } - -constructor TROSessionRefToEventDataLink.Create( - anEventDataItem: TROEventData; aSessionReference: TROSessionReference); -begin - inherited Create; - anEventDataItem.AddRef; - - fEventData := anEventDataItem; - fSessionReference := aSessionReference; -end; - -destructor TROSessionRefToEventDataLink.Destroy; -begin - inherited; -end; - -{ TROEventReceiver } - -constructor TROEventReceiver.Create(aOwner: TComponent); -begin - inherited; - - fHandlers := TStringList.Create; - fInterval := 30000; - - fSynchronizeInvoke := true; -end; - -destructor TROEventReceiver.Destroy; -begin - FreeAndNIL(fHandlers); - FreeAndNIL(fRetainedObjects); - - inherited; -end; - -procedure TROEventReceiver.Activate; -begin - Active := TRUE; -end; - -procedure TROEventReceiver.Deactivate; -begin - Active := FALSE; -end; - -procedure TROEventReceiver.SetActive(const Value: boolean); -begin - if Value <> fActive then begin - if Value and not (csDesigning in ComponentState) then - CheckProperties; - - fActive := Value; - - if (Channel = nil) or not Supports(Channel, IROActiveEventChannel, fEventAwareChannel) then - fEventAwareChannel := nil; - - if Value then - begin - if fEventAwareChannel <> nil then - fEventAwareChannel.RegisterEventReceiver(self) - else - if FTimer = nil then - fTimer := TROThreadTimer.Create(OnTimerTick, fInterval, false); - end else begin - if fEventAwareChannel <> nil then - fEventAwareChannel.UnregisterEventReceiver(self) - else - if fTimer <> nil then - begin - fTimer.AsyncFree; - fTimer := nil; - end; - end; - - if Value then begin - if Assigned(fOnActivate) then fOnActivate(Self); - end - else begin - if Assigned(fOnDeactivate) then fOnDeactivate(Self); - end; - end; - -end; - -procedure TROEventReceiver.SetInterval(const Value: integer); -begin - fInterval := Value; - if fTimer <> nil then - fTimer.Timeout := Value; -end; - -procedure TROEventReceiver.SetServiceName(const Value: string); -begin - fServiceName := Trim(Value); -end; - -procedure TROEventReceiver.Invoke_RegisterEventClient(const EventTypes: String); -var - __message : IROMessage; - __channel : IROTransportChannel; - ClientId: string; -begin - CheckProperties; - __message := (Message as IROMessage); - __channel := (Channel as IROTransportChannel); - - try - __message.InitializeRequestMessage(__channel, 'RemObjects', ServiceName, 'RegisterEventClient'); - __channel.BeforeDispatch(__message); // sets the client id for some channels - ClientId := GuidToString(__message.ClientID); - __message.Write('ClientID', TypeInfo(String), ClientId, []); - __message.Write('EventTypes', TypeInfo(String), EventTypes, []); - __message.Finalize; - - __channel.Dispatch(__message); - - finally - __Message.FreeStream; - end -end; - -procedure TROEventReceiver.Invoke_UnregisterEventClient(const EventTypes: String); -var - __message : IROMessage; - __channel : IROTransportChannel; - ClientId: string; -begin - CheckProperties; - __message := (Message as IROMessage); - __channel := (Channel as IROTransportChannel); - - - try - __message.InitializeRequestMessage(__channel, 'RemObjects', ServiceName, 'UnregisterEventClient'); - __channel.BeforeDispatch(__message); - ClientId := GuidToString(__message.ClientID); - __message.Write('ClientID', TypeInfo(String), ClientID, []); - __message.Write('EventTypes', TypeInfo(String), EventTypes, []); - __message.Finalize; - - __channel.Dispatch(__message); - - finally - __Message.FreeStream; - end -end; - -function TROEventReceiver.Invoke_GetEventsData(out EventsData: Binary): Integer; -var - __message : IROMessage; - __channel : IROTransportChannel; - ClientId: string; -begin - CheckProperties; - __message := (Message as IROMessage); - __channel := (Channel as IROTransportChannel); - - try - __message.InitializeRequestMessage(__channel, 'RemObjects', ServiceName, 'GetEventsData'); - __channel.BeforeDispatch(__message); - ClientId := GuidToString(__message.ClientID); - __message.Write('ClientID', TypeInfo(String), ClientID, []); - __message.Finalize; - - __channel.Dispatch(__message); - - __message.Read('Result', TypeInfo(Integer), result, []); - __message.Read('EventsData', TypeInfo(Binary), EventsData, []); - finally - __message.FreeStream; - end -end; - -procedure TROEventReceiver.FireEvents(EventsDataStream : TStream); -var - tempstream : TStream; - chunksize, idx, cnt : integer; - messageclone : IROMessage; - eventInvokerclass : TROEventInvokerClass; - eventInvoker : TROEventInvoker; -begin - CheckProperties; - tempstream := NIL; - eventInvoker := NIL; - - messageclone := (Message as IROMessageCloneable).Clone; - - EventsDataStream.Position := 0; - - if fEventAwareChannel <> nil then begin - // event aware channels send one event at a time. - messageclone.ReadFromStream(EventsDataStream); - - eventInvokerclass := FindEventInvokerClass(messageclone.InterfaceName); - eventInvoker := eventInvokerclass.Create(Self, messageclone, FALSE); - - try - for idx := 0 to fHandlers.Count -1 do begin - if SameText(fHandlers[idx], messageclone.InterfaceName) then - eventInvoker.Execute(fHandlers.Objects[idx], EventsDataStream); - end; - finally - FreeAndNIL(eventInvoker); - end; - - end - else begin - EventsDataStream.Read(cnt, SizeOf(integer)); - - while (EventsDataStream.Position0) and (eventsdata<>NIL) then begin - Dispatch(eventsdata, fTimer); - end; - except - on e: Exception do - begin - if @fOnPollException <> nil then - fOnPollException(self, e); - end; - end; - - finally - if (eventsdata<>NIL) - then eventsdata.Free; - end; -end; - -procedure TROEventReceiver.RegisterEventHandlers( - const EventIDs: array of string; - const EventHandlers: array of TObject); -var clientid, eventID, eventtypes : string; - i : integer; -begin - // Adds a reference to the event handler object - clientid := GUIDTOString(Self.ClientID); - eventtypes := ''; - - for i := 0 to Length(EventIDs)-1 do begin - eventID := EventIDs[i]; - eventtypes := eventtypes+eventID+','; - end; - Delete(eventtypes, Length(eventtypes), 1); - - // Sends the remote request - if fEventAwareChannel = nil then - Invoke_RegisterEventClient(eventtypes); - -//Moved here to avoid invalid list in case registration is incorrect. -//(for example if connection to server temporary broken) - for i := 0 to Length(EventIDs)-1 do begin - // Adds a reference to the local event handler object - eventID := EventIDs[i]; - fHandlers.AddObject(eventID, EventHandlers[i]); - end; -end; - -{$WARN SYMBOL_DEPRECATED OFF} // delphi warns on the implementation of this method because it's defined as deprecated. -function TROEventReceiver.EventHandlersIsRegistered(const EventIDs: array of string; const EventHandlers: array of TObject): boolean; -begin - result := AreEventHandlersRegistered(EventIDs, EventHandlers); -end; -{$WARN SYMBOL_DEPRECATED ON} -function TROEventReceiver.AreEventHandlersRegistered(const aEventIDs: array of string; const aEventHandlers: array of TObject): boolean; - - var - i : integer; - -begin - Result := True; - for i := 0 to Length(aEventIDs) - 1 do begin - if not IsEventHandlerRegistered(aEventIDs[i], aEventHandlers[i]) then begin - Result := False; - break; - end; - end; -end; - -function TROEventReceiver.IsEventHandlerRegistered(const aEventID: string; const aEventHandler: TObject): boolean; -var - j : integer; -begin - Result := False; - for j := 0 to fHandlers.Count - 1 do - if (fHandlers.Objects[j] = aEventHandler) and (fHandlers[j] = aEventID) then begin - Result := True; - break; - end; -end; - -procedure TROEventReceiver.UnregisterEventHandlers(const EventIDs: array of string); -var clientid, eventID, eventtypes : string; - i, idx : integer; -begin - clientid := GUIDTOString(Self.ClientID); - eventtypes := ''; - - for i := 0 to Length(EventIDs)-1 do begin - eventID := EventIDs[i]; - - // Removes the reference to the local event handler object - idx := fHandlers.IndexOf(eventID); - if (idx>=0) - then fHandlers.Delete(idx); - - eventtypes := eventtypes+eventID+','; - - end; - - Delete(eventtypes, Length(eventtypes), 1); - - // Sends the remote request - if fEventAwareChannel = nil then - Invoke_UnregisterEventClient(eventtypes); -end; - -function TROEventReceiver.GetClientID: TGUID; -begin - CheckProperties; - result := Message.ClientID; -end; - -function TROEventReceiver.IsRetained(const anObject: TObject): boolean; -begin - result := (fRetainedObjects<>NIL) and (fRetainedObjects.IndexOf(anObject)>=0) -end; - -procedure TROEventReceiver.ReleaseObject(const anObject: TObject); -var idx : integer; -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then Exit; - - idx := fRetainedObjects.IndexOf(anObject); - if (idx>=0) then fRetainedObjects.Delete(idx); -end; - -procedure TROEventReceiver.RetainObject(const anObject: TObject); -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then - fRetainedObjects := TList.Create; - - fRetainedObjects.Add(anObject); -end; - - -type - TMyThread = class(TThread) end; // in d6 a thread is private - TSyncClass = class - private - fData: TStream; - fCaller: TROEventReceiver; - public - property Caller: TROEventReceiver read fCaller write fCaller; - property Data: TStream read fData write fData; - procedure DoDispatch; - end; - - -procedure TSyncClass.DoDispatch; -begin - fCaller.FireEvents(Data); -end; - - -procedure TROEventReceiver.Dispatch(aStream: TStream; aCaller: TThread); -var - lSync: TSyncClass; -begin - if fSynchronizeInvoke and Assigned(aCaller) then - begin - lSync := TSyncClass.Create; - try - lSync.Caller := Self; - lSync.Data := aStream; - TMyThread(aCaller).Synchronize(lSync.DoDispatch); - finally - lSync.Free; - end; - end else - FireEvents(aStream); -end; - -function TROEventReceiver.GetSynchronizeInvoke: Boolean; -begin - Result := fSynchronizeInvoke; -end; - -procedure TROEventReceiver.RegisterEventHandler(const EventID: string; - const EventHandler: TObject); -begin - RegisterEventHandlers([EventID], [EventHandler]); -end; - -procedure TROEventReceiver.UnregisterEventHandlersByObject( - const EventHandler: array of TObject); -var clientid, eventID, eventtypes : string; - i, idx : integer; -begin - clientid := GUIDTOString(Self.ClientID); - eventtypes := ''; - - for i := 0 to Length(EventHandler)-1 do begin - - // Removes the reference to the local event handler object - idx := fHandlers.IndexOfObject(EventHandler[i]); - if (idx>=0) - then begin - eventID := fHandlers[i]; - fHandlers.Delete(idx) - end else continue; - - eventtypes := eventtypes+eventID+','; - - end; - - Delete(eventtypes, Length(eventtypes), 1); - - // Sends the remote request -// if fEventAwareChannel = nil then - Invoke_UnregisterEventClient(eventtypes); -end; - -procedure TROEventReceiver.UnregisterEventHandler( - const EventHandler: TObject); -begin - UnregisterEventHandlersByObject([EventHandler]); -end; - -procedure TROEventReceiver.UnregisterEventHandler(const EventIDs: string); -begin - UnregisterEventHandlers([EventIDs]); -end; - -procedure TROEventReceiver.CheckProperties; -begin - Check(Channel = nil, Name + '.Channel must be assigned.'); - Channel.CheckProperties; - Check(Message = nil, Name + '.Message must be assigned.'); - Message.CheckProperties; - Check(ServiceName = '', Name + '.ServiceName must be set.'); -end; - -function TROEventReceiver.GetObject: TObject; -begin - result := Self; -end; - -{ TROEventWriter } - -constructor TROEventWriter.Create(const aMessage : IROMessage; - const aRepository : IROEventRepository); -begin - inherited Create(aMessage, TRUE); - - fSessionList := TStringList.Create; - fSessionList.Sorted := TRUE; - fSessionList.Duplicates := dupIgnore; - - fExcludeSender := TRUE; - fExcludeSessionList := FALSE; // By default only includes those in the session list - - fRepository := aRepository; -end; - -destructor TROEventWriter.Destroy; -begin - fRepository := NIL; - FreeAndNIL(fSessionList); - inherited; -end; - -{function TROEventWriter.GetMessage: IROMessage; -begin - result := fMessage; -end;} - -function TROEventWriter.GetExcludeSender: boolean; -begin - result := fExcludeSender -end; - -function TROEventWriter.GetExcludeSessionList: boolean; -begin - result := fExcludeSessionList; -end; - -function TROEventWriter.GetRepository: IROEventRepository; -begin - result := fRepository -end; - -function TROEventWriter.GetSessionList: TStrings; -begin - result := fSessionList; -end; - -procedure TROEventWriter.SetExcludeSender(const Value: boolean); -begin - fExcludeSender := Value -end; - -procedure TROEventWriter.SetExcludeSessionList(const Value: boolean); -begin - fExcludeSessionList := Value -end; - -{ TROEventProxy } - -constructor TROEventProxy.Create(const aMessage: IROMessage; CloneMessage: boolean); -begin - inherited Create; - - if CloneMessage then begin - if (aMessage=NIL) then raise EROException.Create(err_MessageNotAssigned); - fMessage := (aMessage as IROMessageCloneable).Clone - end - else fMessage := aMessage; -end; - -destructor TROEventProxy.Destroy; -begin - fMessage := NIL; - inherited; -end; - -function TROEventProxy.GetMessage: IROMessage; -begin - result := fMessage -end; - -{ TROEventInvoker } -constructor TROEventInvoker.Create(anEventReceiver: TROEventReceiver; - const aMessage: IROMessage; CloneMessage: boolean); -begin - inherited Create(aMessage, CloneMessage); - - fEventReceiver := anEventReceiver; -end; - -destructor TROEventInvoker.Destroy; -begin - inherited; -end; - -procedure TROEventInvoker.Execute(const aTarget : TObject; EventData: TStream); -var mtd : TROInvokerInvokeMethod; - intf : IInterface; -begin - __Message.ReadFromStream(EventData); - - mtd := nil; - @mtd := MethodAddress('Invoke_'+__Message.MessageName); - if (@mtd <> nil) then begin - aTarget.GetInterface(IInterface, intf); - mtd(__EventReceiver, __Message, intf); - end; -end; - - -{ TSyncClass } - -{ TIROActiveEventServerList } - -class function TIROActiveEventServerList.AddListener( - aList: IROActiveEventServerList; - aItem: IROActiveEventServer): IROActiveEventServerList; -begin - result := aList; - while aList <> nil do begin - if aList.Server = aItem then exit; - aList := aList.Next; - end; - Result := TIROActiveEventServerList.Create(Result, aItem); -end; - -constructor TIROActiveEventServerList.Create( - aNext: IROActiveEventServerList; aItem: IROActiveEventServer); -begin - inherited Create; - fNext := aNext; - fServer := aItem; -end; - -procedure TIROActiveEventServerList.DispatchEvent( - anEventDataItem: TROEventData; aSessionReference: TGUID; - aSender: TObject); -var - lItem: IROActiveEventServerList; -begin - lItem := Self; - while lItem <> nil do begin - lItem.Server.DispatchEvent(anEventDataItem, aSessionReference, aSender); - lItem := lItem.Next; - if lItem <> nil then - anEventDataItem.AddRef; - end; -end; - -function TIROActiveEventServerList.GetNext: IROActiveEventServerList; -begin - result := fNext; -end; - -function TIROActiveEventServerList.GetServer: IROActiveEventServer; -begin - result := fServer; -end; - -class function TIROActiveEventServerList.RemoveListener( - aList: IROActiveEventServerList; aItem: IROActiveEventServer): IROActiveEventServerList; -var - lPrev: IROActiveEventServerList; -begin - lPrev := nil; - result := aList; - while aList <> nil do begin - if aList.Server = aItem then begin - if lPrev = nil then begin - result := aList.Next; - exit; - end else begin - lPrev.Next := aList.Next; - end; - end; - aList := aList.Next; - end; -end; - -procedure TIROActiveEventServerList.SetNext( - aData: IROActiveEventServerList); -begin - fNext := aData; -end; - -initialization - _EventInvokers := TStringList.Create; - _EventInvokers.Sorted := TRUE; - _EventInvokers.Duplicates := dupIgnore; - - _EventWriters := TStringList.Create; - _EventWriters.Sorted := TRUE; - _EventWriters.Duplicates := dupIgnore; - -finalization - FreeAndNIL(_EventInvokers); - FreeAndNIL(_EventWriters); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPDispatch.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPDispatch.pas deleted file mode 100644 index cfe6135..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPDispatch.pas +++ /dev/null @@ -1,149 +0,0 @@ -unit uROHTTPDispatch; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROServer, uROClient, uROClientIntf; - -type - { TROHTTPDispatcher } - TROHTTPDispatcher = class(TROMessageDispatcher) - private - fPathInfo: string; - - procedure SetPathInfo(const Value: string); - - function CleanPathInfo(const iPath:string):string; - - protected - procedure SetMessage(const Value: TROMessage); override; - - public - procedure Assign(Source: TPersistent); override; - function CanHandleMessage(const aTransport: IROTransport; aRequeststream : TStream): boolean; override; - - published - property PathInfo : string read fPathInfo write SetPathInfo; - end; - - { TROHTTPDispatchers } - TROHTTPMessageDispatchers = class(TROMessageDispatchers) - private - protected - function GetSupportsMultipleDispatchers: boolean; override; - function GetDispatcherClass : TROMessageDispatcherClass; override; - - public - function GetDispatcherByPath(Path: string): TROHTTPDispatcher; - end; - -implementation - -uses SysUtils; - -{ TROHTTPMessageDispatchers } - -function TROHTTPMessageDispatchers.GetDispatcherByPath( - Path: string): TROHTTPDispatcher; -var - i: Integer; -begin - for i := Count -1 downto 0 do - begin - result := Items[i] as TROHTTPDispatcher; - if CompareText(result.PathInfo, Path) = 0 then - exit; - if (Result.PathInfo <> '') and (Result.PathInfo[1] <> '/') and (CompareText('/'+result.PathInfo, Path) = 0) then - exit; - end; - result := nil; -end; - -function TROHTTPMessageDispatchers.GetDispatcherClass: TROMessageDispatcherClass; -begin - result := TROHTTPDispatcher; -end; - -function TROHTTPMessageDispatchers.GetSupportsMultipleDispatchers: boolean; -begin - result := TRUE; -end; - -{ TROHTTPDispatcher } - -procedure TROHTTPDispatcher.Assign(Source: TPersistent); -begin - inherited Assign(Source); - - if Source is TROHTTPDispatcher - then PathInfo := TROHTTPDispatcher(Source).PathInfo; -end; - -function TROHTTPDispatcher.CanHandleMessage(const aTransport: IROTransport; - aRequeststream: TStream): boolean; -var http : IROHTTPTransport; -begin - result := FALSE; - if not Enabled or not Supports(aTransport, IROHTTPTransport, http) - then Exit; - - //1.0.4: comparison made caseinsensitive; PreparedPathInfo will alraedy be lowercase. mh. - //if (CompareText(http.PathInfo, PathInfo)=0) then result := TRUE; - result := (CleanPathInfo(http.PathInfo) = CleanPathInfo(PathInfo)); -end; - -procedure TROHTTPDispatcher.SetMessage(const Value: TROMessage); -var s : string; -begin - inherited; - - if (PathInfo='') and (Value<>NIL) then begin - s := StringReplace(Value.ClassName, 'Message', '', []); - s := StringReplace(s, 'TRO', '', []); - - PathInfo := s; - end; -end; - -function ExcludeTrailingForwardSlash(const S: string): string; -var lLength: Integer; -begin - result := S; - lLength := Length(result); - if (result <> '') and (result[lLength] = '/') then SetLength(result,lLength-1); -end; - -procedure TROHTTPDispatcher.SetPathInfo(const Value: string); -begin - if Value <> fPathInfo then - fPathInfo := Value; -end; - -function TROHTTPDispatcher.CleanPathInfo(const iPath:string):string; -begin - result := iPath; - - if (Length(result)>0) and (result[1]<>'/') then result :='/'+result; - - // 1.0.4: make sure the path NEVER has a trailing slash - StringReplace(result,'\','/',[rfReplaceAll]); - result := ExcludeTrailingForwardSlash(result); - - result := LowerCase(result) -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPTools.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPTools.pas deleted file mode 100644 index ea7f94d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHTTPTools.pas +++ /dev/null @@ -1,108 +0,0 @@ -unit uROHTTPTools; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF DOTNET} - Borland.Delphi.Classes, - {$ELSE} - Classes, - {$ENDIF} - uROClientIntf; - -const - id_ContentLength = 'Content-Length'; - id_ContentType = 'Content-Type'; - id_Host = 'Host'; - id_UserAgent = 'User-Agent'; - - HTTP_SESSION_ID_HEADER = 'RemObjects-SessionID'; - - HTTP_OK = 200; - HTTP_FAILED = 500; - -function FindHeaderIndex(someHeaders : TStrings; const aName : string) : integer; -function GetHeaderValue(someHeaders : TStrings; const aName : string) : string; overload; -function GetHeaderValue(const iHeaders:string; const iName:string):string; overload; -procedure SetHeaderValue(someHeaders : TStrings; const aName, aValue : string); - -procedure SetHTTPInfo(const aTransport : IROTransport; aDataFormat : TDataFormat); - -implementation - -uses {$IFDEF DOTNET} - Borland.Delphi.SysUtils, - {$ELSE} - SysUtils, - {$ENDIF} - uRORes; - -function FindHeaderIndex(someHeaders : TStrings; const aName : string) : integer; -var i : integer; -begin - result := -1; - with someHeaders do - for i := 0 to (Count-1) do - if (Pos(aName+': ', Strings[i])=1) then begin - result := i; - Exit; - end; -end; - -function GetHeaderValue(const iHeaders:string; const iName:string):string; -var p:integer; -begin - result := ''; - p := Pos(UpperCase(iName)+':',UpperCase(iHeaders)); - if p > 0 then Begin - result := iHeaders; - Delete(result,1,p+Length(iName)+1); - result := Copy(result,1,Pos(#13,result)-1); - end -end; - -function GetHeaderValue(someHeaders : TStrings; const aName : string) : string; -var idx : integer; -begin - idx := FindHeaderIndex(someHeaders, aName); - with someHeaders do - if (idx>=0) then result := Trim(Copy(Strings[idx], Pos(':', Strings[idx])+1, Length(Strings[idx]))) - else result := ''; -end; - -procedure SetHeaderValue(someHeaders : TStrings; const aName, aValue : string); -var idx : integer; -begin - idx := FindHeaderIndex(someHeaders, aName); - with someHeaders do - if (idx>=0) then someHeaders[idx] := aName+': '+aValue - else someHeaders.Add(aName+': '+aValue); -end; - -procedure SetHTTPInfo(const aTransport : IROTransport; aDataFormat : TDataFormat); -var http : IROHTTPTransport; -begin - {$IFDEF DOTNET} - {$ELSE} - if Supports(aTransport, IROHTTPTransport, http) then begin - http.ContentType := aDataFormat; - http.UserAgent := str_ProductName; - end; - {$ENDIF DOTNET} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.lrs b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.lrs deleted file mode 100644 index fd78e63..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.lrs +++ /dev/null @@ -1,1221 +0,0 @@ -LazarusResources.Add('RemObjectsHtmlServerDocumentation','XSL',[ - ''#13#10''#13#10#9''#13#10 - +#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9#9'<xsl:value-of ' - +'select="@Name"/> documentation'#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9 - +#9'
'#13#10#9#9#9#9#9''#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9'
'#13#10#9#9#9#9'
'#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9'
Table Of Contents
'#13#10#9#9#9#9#9'

This document is split in' - +'to the following sections:

'#13#10#9#9#9#9#9''#13#10#13#10 - +#9#9#9#9'

'#13#10#9#9#9#9'Library Description: '#13#10#9#9#9#9'

'#13#10#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#13#10#9#9#9#9#9'<' - +'a>'#13#10#9#9#9#9#9#9'.EventSinks'#13#10#9#9#9#9#9''#13#10#9#9#9 - +#9#9''#13#10#13#10#9#9#9#9#9'<' - +'a>'#13#10#9#9#9#9#9#9'.Structs'#13#10#9#9#9#9#9''#13#10#9#9#9#9#9 - +''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9 - +'.Enums'#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9'.Arrays'#13#10#9#9 - +#9#9#9''#13#10#9#9#9#9#9''#13 - +#10#9#9#9#9#9''#13#10#9#9#9#9 - +#9''#13#10#9#9#9#9#9#9'.Exceptions'#13#10#9#9#9#9#9''#13#10#9#9 - +#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10 - +#9#9#9#9#9#9'.Uses'#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9'
'#13#10#9#9#9#9'
'#13#10#9#9#9#9#9'RemObjects Software, LLC. remobjects.com.'#13#10#9#9#9#9'
'#13#10#9#9#9''#13#10#9#9''#13#10#9'
'#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9'<' - +'xsl:attribute name="name">.Services<' - +'/xsl:attribute>'#13#10#9#9''#13#10#9#9'
Services
' - +#13#10#9#9'
'#13#10#9#9#9'

The following table lists t' - +'he Services defined in "":

'#13#10 - +#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9'' - +#13#10#9#9#9'
'#13#10#9#9#9#9'Service '#13#10#9#9#9'
'#13#10#9#9#9'
' - +#13#10#9#9#9#9'

The following table lists the Operations defined in "":

'#13#10#9#9#9#9'
'#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9#9'<' - +'xsl:attribute name="href">#'#13#10#9#9#9#9#9#9#9#9''#13#10#9#9 - +#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9 - +#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9'
'#13 - ,#10#9#9#9#9#9''#13#10#9#9#9#9#9 - +#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9 - +#9''#13#10#9#9''#13#10#9''#13#10#13#10#9 - +''#13#10#9#9'' - +#13#10#9#9#9'.Services'#13#10#9#9''#13#10#9#9'
Eve' - +'nt Sinks
'#13#10#9#9'
'#13#10#9#9#9'

The followi' - +'ng table lists the Event Sinks defined in "":

'#13#10#9#9#9'
'#13#10#9#9#9#9#9#9 - +#9#9''#13#10#9#9#9#9#9#9#9#9#9'#.' - +#13#10#9#9#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9 - +#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9 - +#9#9#9''#13#10#9#9#9#9#9#9#9'
'#13#10#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9 - +#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9'
'#13#10#9#9#9#9#9#9#9'' - +#13#10#9#9#9#9#9#9#9#9'#'#13#10#9#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9'
'#13#10#9#9#9''#13#10#9#9'
'#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10 - +#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9'
Event Sink <' - +'xsl:value-of select="../../@Name"/>
'#13#10#9#9#9'
'#13#10#9#9#9#9'

The following table lists the Events defined in "":

'#13#10#9#9#9#9'' - +#13#10#9#9#9#9#9''#13#10#9#9#9 - +#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9 - +'
'#13#10#9#9#9#9 - +#9#9#9#9''#13#10#9#9#9#9#9#9#9#9#9'#.'#13#10#9#9#9#9#9#9#9#9#9''#13#10#9#9#9#9 - +#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9 - +#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9'
'#13#10#9#9#9#9'' - +#13#10#9#9#9'
'#13#10#9#9'
'#13#10#9''#13 - +#10#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9'.'#13#10#9#9#9''#13#10#9#9#9'

' - +#13#10#9#9#9#9'Method <' - +'xsl:value-of select="@Name"/>'#13#10#9#9#9'

'#13#10#9#9#9'

'#13#10 - +#9#9#9#9''#13#10#9#9#9'

'#13#10#9#9 - +#9''#13#10#9#9''#13 - +#10#9'
'#13#10#9'' - +#13#10#9#9''#13#10#9#9#9'' - +#13#10#9#9#9#9'.'#13#10#9#9#9'' - +#13#10#9#9#9'

'#13#10#9#9#9#9'Event '#13#10#9#9#9'

'#13#10 - +#9#9#9'

'#13#10#9#9#9#9''#13#10#9#9 - +#9'

'#13#10#9#9#9''#13#10#9#9'<' - +'/xsl:for-each>'#13#10#9'
'#13#10#9#13#10#9''#13#10#9#9'

Chrome Syntax:

'#13#10#9#9''#13#10 - +#9#9#9''#13#10#9#9#9'<' - ,'b>method '#13#10#9#9#9'.('#13#10#9#9#9#9''#13#10#9#9#9 - +#9#9''#13#10#9#9#9#9''#13#10#9#9#9')'#13#10#9#9#9#9''#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9''#13#10#9#9#9';'#13#10' ' - +' '#13#10#9#9'

C# Syntax:

'#13#10#9#9''#13#10#9#9#9 - +''#13#10' '#13#10' '#9' '#9#9#9' public '#13#10' ' - +' '#13#10' '#13#10' ' - +' public void'#13#10' '#13#10 - +' '#13#10#9#9#9'.('#13#10#9#9#9#9'' - +#13#10#9#9#9#9#9''#13#10 - +#9#9#9#9''#13#10#9#9#9');'#13#10#9#9''#13#10#9#9#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13 - +#10#9#9#9'None.'#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9#9'

'#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9'

'#13#10' Dear Re' - +'mObjects Team: Please add a Parameter documentation to your rodl-file!'#13 - +#10'
'#13#10#9#9#9'
'#13#10#9#9''#13#10#9'
'#13#10#9'' - +#13#10#9#9''#13#10#9#9#9'None.'#13#10#9#9#9''#13#10#9#9#9 - +#9''#13#10#9#9#9#9#9''#13#10' Dear RemObjects Team: Please add ' - +'a Parameter documentation to your rodl-file!'#13#10' '#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9'' - +#13#10#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9'' - +#13#10#9#9#9#9': '#13#10#9#9#9''#13#10#9#9#9': '#13#10#9#9#9''#13#10#9 - +#9#9'; '#13#10#9#9#9#9#9''#13#10#9#9 - +#9#9''#13#10#9#9#9#9': '#13#10#9#9#9'; '#13#10#9#9#9#9#9''#13#10#9#9#9#9'' - +#13#10#9#9#9#9': '#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9 - +#9''#13#10#9#9#9#9''#13#10#9#9#9#9''#13#10#9 - +#9#9#9#9''#13#10#9#9#9#9 - +''#9#9#9#9#13#10#9#9#9#9' '#13#10#9 - +#9#9#9''#13#10#9#9#9''#13#10#9#9#9 - +', '#13#10#9#9#9#9#9''#13#10#9 - +#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9' '#13#10#9#9#9#9' '#13#10#9#9#9 - +', ' - +#13#10#9#9#9#9#9''#13#10#9#9#9#9 - +''#13#10#9#9#9#9''#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9''#13#10#9#9#9#9' '#13 - +#10#9#9#9#9''#13#10#9#9#9''#13#10#9 - +#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9''#13#10#9 - +#9#9''#13#10#9#9#9#9'const '#13#10#9#9#9 - +''#13#10#9#9#9''#13#10#9#9#9#9'<' - +'b>var '#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9 - +''#13#10#9''#13#10#9#13#10#9''#13#10#9#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9 - +'Int32'#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9'String'#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9 - +''#13#10#9#9''#13#10#9''#13#10#9 - +#13#10#9''#13#10#9#9''#13#10#9#9''#13#10#9#9#9'' - +#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9'ref '#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9'out' - +' '#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9'.Structs' - +#13#10#9#9''#13#10#9#9'
Structs
'#13#10#9#9'
'#13#10#9#9#9'

The following table lists the Structs defined' - +' in "":

'#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9 - +#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9 - +#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13 - +#10#9#9#9'
'#13#10#9#9#9#9#9 - +#9#9''#13#10#9#9#9#9#9#9#9#9'#'#13#10#9#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10 - +#9#9#9#9#9#9'
'#13#10#9#9'
'#13#10#9'
'#13#10#9''#13#10#9#9''#13#10#9'
'#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9'' - +#13#10#9#9'
'#13#10#9#9#9' Stru' - +'ct
'#13#10#9#9'

'#13#10#9#9#9'' - +#13#10#9#9'

'#13#10#9#9'

Members

'#13#10#9#9''#13#10#9#9#9'

'#13#10#9#9#9#9''#13#10#9#9#9'

'#13#10#9#9#9'

Datatype: '#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9'

'#13#10 - +#9#9'
'#13#10#9'
'#13#10#9''#13#10#9#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9 - +#9#9#9#9'#'#13#10#9#9#9#9#9''#13#10#9#9#9 - +#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9 - +''#13#10#9#9#9''#13#10#9#9 - +''#13#10#9''#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9'.Enums'#13 - +#10#9#9''#13#10#9#9'
Enums
'#13#10#9#9'
'#13#10#9#9#9'

The following table lists the Enums defined in "":

'#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9''#13#10#9#9'
'#13#10#9#9#9' Enumerations
'#13#10#9 - +#9'

'#13#10#9#9#9''#13#10#9#9'

' - +#13#10#9#9'
'#13#10#9#9#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9#9#9'#'#13#10#9#9#9#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9 - +'
'#13#10#9#9#9''#13#10#9#9#9#9 - +''#13#10#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9#9''#13#10#9#9#9#9 - +''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9'' - +#13#10#9#9#9#9#9''#13#10#9 - +#9#9#9''#13#10#9#9#9''#13#10#9#9'
Enumerated Type ValueD' - +'EC ValueHEX Value
'#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9'0x'#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9'
'#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9'How to convert Dec 2 Hex?'#13#10#9#9''#13#10#9''#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9'.Arrays' - +#13#10#9#9''#13#10#9#9'
Arrays
'#13#10#9#9'
'#13#10#13#10#9#9#9'

The following table lists the Arrays def' - +'ined in "":

'#13#10#9#9#9''#13#10#9#9#9#9''#13#10#9 - +#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9 - +#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9'' - +#13#10#9#9#9'
'#13#10#9#9#9#9 - +#9#9#9''#13#10#9#9#9#9#9#9#9#9'#'#13#10#9#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9''#13 - +#10#9#9#9#9#9#9'
'#13#10#9#9'
'#13#10#9'
'#13#10#9''#13#10#9#9''#13#10#9''#13#10#9''#13#10#9#9''#13#10#9#9#9''#13#10#9#9''#13 - +#10#9#9'
'#13#10#9#9#9' Array'#13#10#9#9'

'#13#10#9#9#9''#13 - +#10#9#9'

'#13#10#9#9'

Element Type:'#13#10#9#9''#13#10#9#9#9#9''#13#10#9#9#9''#13#10#9#9'

'#13 - +#10#9''#13#10#13#10#9''#13#10#9#9''#13#10#9#9#9'.Exceptions'#13#10 - +#9#9''#13#10#9#9'
Exceptions
'#13#10#9#9'
'#13#10#9#9#9'

The following table lists the Exceptions defined' - +' in "":

'#13#10#9#9#9''#13#10#9#9#9#9''#13 - +#10#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9 - +#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9'
'#13#10#9 - +#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9#9'' - +#13#10#9#9#9#9#9#9'
'#13#10#9#9'
'#13#10#9'
'#13#10#9 - +''#13#10#9#9''#13#10#9'' - +#13#10#9''#13#10#9#9''#13#10#9 - +#9#9''#13#10#9#9''#13#10#9#9'
'#13#10#9#9#9'Exception Struct
'#13#10#9#9'

'#13#10#9#9#9''#13#10#9#9'

'#13#10#9#9'

Members

' - +#13#10#9#9''#13#10#9#9#9'

'#13#10 - +#9#9#9#9''#13#10#9#9#9'

'#13#10#9#9#9'

D' - +'atatype: '#13#10#9#9#9#9#9''#13#10#9#9#9#9''#13#10#9#9#9'

'#13#10#9#9'
'#13#10#9''#13#10#13#10#13#10#9''#13 - +#10#9#9''#13#10#9#9#9'.Uses'#13#10#9#9''#13#10#9#9'
'#13#10#9#9#9'Used RODL Files'#13#10#9#9'
'#13#10#9#9'
'#13#10#9#9#9'

The following table lists the external RODL file' - +'s used by library "":

'#13#10#9#9 - +#9''#13#10#9#9#9#9''#13 - +#10#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9#9#9''#13#10#9#9#9#9#9''#13#10#9#9#9#9'<' - +'/xsl:for-each>'#13#10#9#9#9'
'#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9 - +''#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9'
'#13#10#9#9#9#9#9#9#9''#13#10#9#9#9#9#9#9'
'#13#10#9#9'
'#13#10#9''#13#10''#13#10 -]); -LazarusResources.Add('RemObjectsHtmlServerInfo','HTML',[ - ''#13#10'' - +#13#10#9''#13#10#9#9'%NAME% - RemObjects SDK for .NET %RO%</tit' - +'le>'#13#10#9#9'<meta name="GENERATOR" content="RemObjects SDK for .NET {1}"' - +'>'#13#10#9#9'<style>'#13#10#9#9#9'body'#13#10#9#9#9'{'#13#10#9#9#9#9'backgr' - +'ound-color: #f7f7f7;'#13#10#9#9#9#9'margin: 0;'#13#10#9#9#9#9'padding: 0;' - +#13#10#9#9#9#9'font-family: Verdana, Tahoma, Arial, Helvetica, sans serif;' - +#13#10#9#9#9#9'font-size: 10pt;'#13#10#9#9#9'}'#13#10#9#9#9'.header'#13#10#9 - +#9#9'{'#13#10#9#9#9#9'padding: 5px;'#13#10#9#9#9#9'background-color: #c0c0c0' - +';'#13#10#9#9#9#9'border-bottom: 5px solid #808080;'#13#10#9#9#9#9'font-size' - +': 1.5em;'#13#10#9#9#9'}'#13#10#9#9#9'.body'#13#10#9#9#9'{'#13#10#9#9#9#9'pa' - +'dding: 5px;'#13#10#9#9#9'}'#13#10#9#9#9'.footer'#13#10#9#9#9'{'#13#10#9#9#9 - +#9'padding: 5px;'#13#10#9#9#9#9'border-top: 1px solid #808080;'#13#10#9#9#9#9 - +'font-size: 0.8em;'#13#10#9#9#9'}'#13#10#9#9#9'.h2'#13#10#9#9#9'{'#13#10#9#9 - +#9#9'font-weight: bold;'#13#10#9#9#9'}'#13#10#9#9'</style'#13#10#9'</head>' - +#13#10#9'<body>'#13#10#9'<div class="header">'#13#10#9#9'<img src="%BASEPATH' - +'%favicon.ico" style="padding-right: 5px;"/>%NAME%'#13#10#9'</div>'#13#10#9 - +'<div class="body">'#13#10#9#9'%DOC%'#13#10#9#9'<p><a href="%BASEPATH%doc">V' - +'iew full documentation</a> | <a href="%BASEPATH%rodl">View RODL</a></p>'#13 - +#10' <p class="h2">Available Dispatchers:</p>'#13#10#9#9'<ul>'#13#10#9#9#9 - +'%DISPATCHERS%'#13#10#9#9'</ul>'#13#10#9'</div>'#13#10#9'<div class="footer"' - +'>'#13#10#9#9'RemObjects SDK for Delphi'#13#10#9#9'RemObjects Software, LLC.' - +' <a href="http://www.remobjects.com">remobjects.com</a>.'#13#10#9'</div>'#13 - +#10#13#10#13#10#9'</body>'#13#10'</html>'#13#10 -]); -LazarusResources.Add('RemObjectsHtmlIcon','ICO',[ - #0#0#1#0#6#0'00'#0#0#1#0#8#0#168#14#0#0'f'#0#0#0' '#0#0#1#0#8#0#168#8#0#0#14 - +#15#0#0#16#16#0#0#1#0#8#0'h'#5#0#0#182#23#0#0'00'#0#0#1#0' '#0#168'%'#0#0#30 - +#29#0#0' '#0#0#1#0' '#0#168#16#0#0#198'B'#0#0#16#16#0#0#1#0' '#0'h'#4#0#0'n' - +'S'#0#0'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0#8#0#0#0#0#0#0#9#0#0#0#0#0#0#0#0#0#0#0 - +#1#0#0#0#1#0#0#0#0#0#0#5#5#5#0#6#6#15#0#9#9#9#0#14#14#14#0#12#12#22#0#7#7#26 - +#0#8#8#27#0#17#17#17#0#21#21#21#0#25#25#25#0#29#29#29#0#5#5'"'#0#17#17'%'#0 - +#26#27'%'#0#28#29''''#0#20#21')'#0#24#26'.'#0#11#11'1'#0#11#11';'#0#19#22'?' - +#0#25#28'<'#0#31' +'#0'!!!'#0'$$$'#0')))'#0'---'#0'%''2'#0'(*6'#0'!$:'#0'/1=' - +#0'111'#0'555'#0'999'#0'==='#0#6#6'I'#0#9#9'L'#0#22#26'C'#0#20#25'M'#0#5#5'R' - +#0#12#13'R'#0#9#9'V'#0#3#3'Z'#0#9#10'X'#0#10#12'['#0#11#14'^'#0#13#17'X'#0#24 - +#30'T'#0#20#25'Y'#0#22#29'^'#0#28' @'#0'.4M'#0'9<I'#0'.7\'#0'4:T'#0'6<U'#0#3 - +#3'c'#0#5#5'o'#0#14#20'f'#0#18#24'b'#0#19#28'i'#0#16#25'o'#0#5#5'z'#0#1#1'~' - +#0#5#7'~'#0#12#21''#0#15#26'|'#0#18#29'u'#0#25'#f'#0#21' n'#0#27'&k'#0#28'(' - +'n'#0#23'#s'#0#30'+s'#0#20'!z'#0#25'''y'#0#27'+~'#0')4f'#0'#0m'#0',8j'#0'2<a' - +#0'$2p'#0'"3~'#0'3?p'#0'6@d'#0'8Ae'#0'<Eh'#0':Ft'#0'@@@'#0'EEE'#0'@DO'#0'III' - +#0'MMM'#0'GJV'#0'AG^'#0'KNY'#0'QQQ'#0'TTT'#0'RU_'#0'YYY'#0']]]'#0'EKa'#0'@Ik' - +#0'[^g'#0'RXk'#0'EQ{'#0'S\x'#0'^aj'#0']bt'#0'W`{'#0']e'#0'aaa'#0'eee'#0'bem' - +#0'iii'#0'mmm'#0'ppp'#0'ttt'#0'yyy'#0''#0#6#14#136#0#9#18#133#0#14#29#141 - +#0#16#30#130#0#0#0#144#0#1#2#148#0#0#0#154#0#0#1#156#0#6#19#156#0#9#25#157#0 - +#23'('#134#0#18'"'#136#0#21','#152#0' 4'#140#0',?'#136#0' :'#157#0'#<'#158#0 - +#0#3#161#0#0#5#165#0#1#10#163#0#1#12#167#0#0#7#169#0#1#14#171#0#0#9#173#0#4 - +#18#166#0#6#24#167#0#0#11#177#0#0#13#181#0#2#19#180#0#7#30#178#0#4#26#181#0#0 - +#16#185#0#2#22#185#0#0#18#190#0#4#28#185#0#11'!'#171#0#20'1'#173#0#26'7'#169 - +#0#11''''#182#0#12''''#182#0#16','#178#0#23'7'#181#0#17'2'#188#0#18'4'#191#0 - +'">'#171#0'.A'#137#0'-C'#149#0'.J'#175#0'5N'#165#0'>V'#168#0'&E'#185#0'2Q' - +#188#0'MY'#128#0'GV'#136#0'S_'#132#0'^g'#129#0']h'#138#0'AY'#170#0'E]'#171#0 - +'@]'#191#0'H`'#172#0'Vj'#167#0'Nh'#185#0'Sm'#186#0#0#20#194#0#0#22#198#0#2#27 - +#195#0#0#24#202#0#2#29#200#0#0#26#206#0#0#28#210#0#0#30#215#0#9'&'#193#0#6'$' - +#200#0#14'3'#203#0#24';'#194#0#23'='#207#0#2'#'#212#0#10'/'#208#0#0' '#219#0 - +#0'"'#223#0#6','#216#0#0''''#231#0#0')'#235#0#3'-'#232#0#0'+'#239#0#3'2'#239 - +#0#16'='#231#0#0'-'#244#0#0'/'#248#0#10'9'#243#0#13'<'#243#0#0'1'#252#0#1'4' - +#254#0#4'6'#255#0#7'9'#255#0#10'<'#255#0#13'?'#255#0#16'?'#243#0#23'@'#219#0 - +' B'#196#0'(J'#198#0'%J'#209#0'%M'#221#0'0T'#211#0#22'B'#231#0#22'E'#243#0#16 - +'B'#255#0#19'E'#255#0#22'G'#255#0#25'J'#255#0#28'M'#255#0#31'P'#255#0'.X'#233 - +#0'#T'#255#0',\'#255#0'=i'#244#0'3b'#255#0'8g'#255#0'<k'#255#0'B`'#192#0'Mm' - +#205#0'Dj'#224#0'Lr'#225#0'Ks'#235#0'Co'#245#0'It'#245#0'Bq'#255#0#129#129 - +#129#0#134#134#134#0#137#137#137#0#143#143#143#0#147#147#147#0#154#154#154#0 - +#162#162#162#0#170#170#170#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0's\'#8#8#4 - +#4#4#4'Yo'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0'w!'#10#10#8#10#8#8#8#4#4#4#0#4#0#0#24't'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0's'#10#24#10#10#10#10#10#8#8#8#8#4#4#4#4#4#0#4#0#0'o'#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'w'#25#24#24#24#24#10#24#10#10 - +#10#10#8#8#8#4#4#0#4#4#0#0#0#0#0't'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +'!'#25#25#24#24#24#24#10#10#15#20'.---)$'#18#5#4#0#4#4#0#0#0#0#24#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#25#25#25#25#25#24#24#24#24#24#15':'#143#141#138 - +#137#137'}'#137'}?$'#6#0#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'w '#25 - +#25#25#25#24#24#24#10#24'%'#146#143#141#138#137#137'}'#137#137'}'#137'8'#6#4 - +#0#0#0#0#0'o'#0#0#0#0#0#0#0#0#0#0#0#0#0'w '#25' '#25' '#25#25#25#24#24#24#24 - +'0'#146#146#143#138#138#137#137'}}'#137'}'#137'}*'#2#4#0#0#0#0'o'#0#0#0#0#0#0 - +#0#0#0#0#0#0'! '#25#25#25#25#25#24#24#24'='#151#146#146#143#141#138#137 - +#137#137'}'#137'}'#137#137'?'#6#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'!!! '#25' ' - +' '#25#25#25#25#24#24'/'#153#153#146#146#143#138#138#137'}'#137'}'#137'}}' - +#137'|'#12#1#0#0#0#0#0#0#0#0#0#0#0#0#0'\!!!! '#25' '#25#25#25#25#24#24'1' - +#153#144'y:'#139#141#138#138'}'#137'}'#137'}}'#137'|'#12#4#0#0#0#24#0#0#0#0#0 - +#0#0#250'Y!Y!!! '#25' '#25#25#25#25#24#24#24#24#10#24':'#143#141#138#138 - +'}'#137'}'#137'}}'#137'|'#6#0#0#0#0't'#0#0#0#0#0#0'YYY!!!!!! '#25' '#25#25 - +#25#24#24#24#24#10#15#139#143#141#138#138'}'#137'}'#137'}}'#137'?'#2#4#0#0#0 - +#0#0#0#0#0'tYY!YY!!!! '#25' '#25' '#25#25#25#24#24#24#24#21#143#146#143#141 - +#138#138'}'#137'}'#137'}'#137'}*'#0#4#0#0'o'#0#0#0#0'\YYYY!YY!!! '#25#25 - +' '#25#25#25#24#24#21#148#153#146#146#143#141#138#138'}'#137'}'#137'}'#137'}' - +#6#0#0#0#0#0#0#0#253'\Y\YYY!!T'#161#194#162'R '#25#25#25#25#25#29#152#184 - +#153#153#146#146#143#141#138#138'}'#137'}}'#137'}8'#4#1#4#0't'#0#0'o\\YYYYY' - +#165#215#214#214#214#209#156' '#25' '#25#25#25#27#189#185#184#153#153#146 - +#146#143#141#138#138'}'#137'}'#137'}'#137#6#3#0#4#24#0#0'`\\\Y\YZ'#218#216 - ,#215#214#214#209#209'R '#25' '#25#25#25#152#189#185#153#153#153#146#146#143 - +#141#138#138#137'}}'#137'}'''#4#0#0#0#0#0'`\\\\YYW'#227#216#216#214#214#214 - +#209#162' '#25' '#31#25'H'#185#185#185#184#153#153#146#146#143#141#138'?)' - +'9'#137'}?'#4#4#4#0#0#250'```\\\YW'#227#227#217#216#214#214#214#194'! '#25 - +' '#25#25#25'F'#149#184#184#153#128#146#146#143#138#16#8#8#137'}'#137#2#4#4#4 - +'ot````\\\f'#230#227#227#217#216#215#214#157'!! '#25' '#25#26#25'J'#189 - +#145'2'#24'A'#146#146'x'#10#10#9'>'#137'}'#18#4#0#4'Ycc````\\\'#222#229#227 - +#227#217#216#210'7!!! '#25' '#25#25#130#189'z'#24#24#24';&'#15#10#10#9')|' - +#137#18#2#8#4#4'ccc````\\]'#222#229#227#227#218'S!Y!!! '#26' '#25#155#190 - +#152#25#24#24#23#15#10#15#10#10#9#9#13#8#8#8#4#3'cccc````\\\fWWYYY!!!!! N' - +#132#158#197#199#190#190#27#24#24#24#23#23#11#10#11#9#9#9#9#8#8#4#4'ccccc```' - +'`\\\[YYYYYY!!!! '#201#203#202#159#193#199'F'#25#25#24#24#24#23#23#23#10#23#9 - +#9#9#9#8#8#4'occccc````\\\[YYY!Y!Y!!'#133#209#203#160' '#25' '#25#25#25#25#24 - +#24#24#23#23#23#9#23#9#10#9#8#8#8'ooccccc````\\[\YYYYY!!!S'#209#209'N '#25 - +' '#25#25#25#25#24#24#24#23#23#23#11#10#11#9#9#8#8'wooocccc````\\[[YYY!YY!!' - +#162#214#198'3 '#25' '#25#25#25#27'EC<'#23#10#23#11#10#10#10#9'`'#252'oococ' - +'ccc````\\\[YYYY!Y!7'#209#209#202'3 '#25' '#25#25#158#189#187#184#153#22#23 - +#23#10#10#10#9'o'#0'ooococccc````\\[\YVZYY!T'#214#214#209'M '#26' F'#191 - +#190#189#189#185'B'#23#23#23#10#23#9#0#0'oooooccccc````\\^'#221#227#226#166 - +'YT'#210#214#214#203'5 '#25#130#199#191#190#189#189#129#23#23#23#23#9#23#0 - +#0'wosoooccm'#178#174'b```\'#168#230#230#230#227#225#218#216#214#135'4!! ' - +'I'#202#191#190#190#189'{'#24#24#23#23#23' '#0#0#255'sooooom'#236#238#238#179 - +'````'#171#232#230#230#230#227#227#216#196'!Y!!! '#192#199#199#190#189#27 - +#24#24#23#23#23'w'#0#0#0'osoook'#245#239#239#238#238'h```'#224#232#232#232 - +#230#229#227#227#217'Y!X!!! '#30'L'#130'L'#31#27#25#24#24#24#23#0#0#0#0#252 - +'osoo'#181#247#247#239#239#238#240'cb'#173#233#235#232#232#230#230#230#227 - +#227#219#164#136'7!!! '#25#25#25#25#25#25#24#24'p'#0#0#0#0#0'sssoq'#243 - +#247#247#239#239#238#238#238#235#235#235#232#232#232#232#230#229#227#227#217 - +#216#195'X!!! '#25#31#25#25#25#24#0#0#0#0#0#0#254'soso'#175#246#247#247 - +#239#239#238#238#235#235#235#235#235#232#232#230#230#230#227#227#217#207'X!!' - +'!! '#31#25#31#25#25'w'#0#0#0#0#0#0#0'tsspp'#175#246#247#247#239#239#238 - +#238#238#235#235#235#232#232#232#232#230#229#227#227#165'YXY!!! '#26#31#25 - +'!'#0#0#0#0#0#0#0#0#0'sspso'#176#246#247#247#239#239#238#238#235#235#235#235 - +#235#232#232#230#230#230#218'YX!47!!! '#26#31#0#0#0#0#0#0#0#0#0#0#0'ssosp' - +#175#244#247#247#239#239#238#238#238#235#235#235#232#232#232#232#230#230#170 - +'Z'#165#218#215#136'!!! '#0#0#0#0#0#0#0#0#0#0#0#0#254'sspror'#183#247#247 - +#239#239#238#238#235#235#235#235#235#232#232#230#230#227#226#227#217#216#136 - +'!!!! w'#0#0#0#0#0#0#0#0#0#0#0#0#0#254'ssprqom'#241#247#239#239#238#238#238 - +#235#235#235#232#232#232#232#230#230#227#220'VYY!!!!w'#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0'ssosopol'#182#242#239#238#238#235#235#235#235#235#232#232#223#167 - +'^YY!YY!!'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'tspsoooocg'#174#178#180#178 - +#178#169#169'i_\\\YYYY!`'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#254'sosp' - +'oooocccb`````\\[\YYY'#250#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#252'psopoooccccc```\\\[\t'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#255'tpoooodcccc````o'#253#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#252'wooocccv'#250#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#255#255#224#7#255#255#0#0#255#254#0#0''#255#0#0#255#248#0#0#31#255#0#0 - +#255#224#0#0#7#255#0#0#255#192#0#0#3#255#0#0#255#128#0#0#1#255#0#0#254#0#0#0 - +#0''#0#0#252#0#0#0#0'?'#0#0#252#0#0#0#0'?'#0#0#248#0#0#0#0#31#0#0#240#0#0#0 - +#0#15#0#0#224#0#0#0#0#7#0#0#224#0#0#0#0#7#0#0#192#0#0#0#0#3#0#0#192#0#0#0#0#3 - +#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1 - +#0#0#192#0#0#0#0#3#0#0#192#0#0#0#0#3#0#0#224#0#0#0#0#7#0#0#224#0#0#0#0#7#0#0 - +#240#0#0#0#0#15#0#0#248#0#0#0#0#31#0#0#252#0#0#0#0'?'#0#0#252#0#0#0#0'?'#0#0 - +#254#0#0#0#0''#0#0#255#128#0#0#1#255#0#0#255#192#0#0#3#255#0#0#255#224#0#0#7 - +#255#0#0#255#248#0#0#31#255#0#0#255#254#0#0''#255#0#0#255#255#224#7#255#255 - +#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0#8#0#0#0#0#0#0#4#0#0#0#0#0#0#0#0#0#0#0#1#0 - +#0#0#1#0#0#0#0#0#0#6#6#6#0#5#5#15#0#9#9#9#0#13#13#13#0#16#16#16#0#22#22#22#0 - +#26#26#26#0#29#29#29#0#4#4'!'#0#22#22' '#0#29#30'('#0#24#26'/'#0#7#7'7'#0#5#5 - +'>'#0#16#16'7'#0#27#29'2'#0#31' +'#0'!!!'#0'%%%'#0'***'#0'...'#0'&(3'#0'(*5' - +#0'111'#0'555'#0'999'#0'==='#0#13#14'H'#0#23#27'E'#0#21#26'N'#0#24#29'I'#0#16 - +#21']'#0#21#27'['#0#21#27'\'#0#29'!A'#0#28'$]'#0'&)@'#0'!&H'#0'#)K'#0'17O'#0 - ,'9<H'#0'<?K'#0'+3Y'#0'39R'#0#4#4'e'#0#5#6'o'#0#8#9'j'#0#14#20'f'#0#1#1'u'#0#9 - +#15'u'#0#4#4'x'#0#18#31'y'#0#21' n'#0#30',s'#0#26'(z'#0'#/l'#0')5h'#0'2;a'#0 - +'4>c'#0'$2p'#0'(7v'#0'.={'#0'>D['#0':Fu'#0'=Iw'#0'@@@'#0'DDD'#0'III'#0'NNN'#0 - +'BEQ'#0'HKW'#0'QQQ'#0'UUU'#0'YYY'#0']]]'#0'CLm'#0'[^g'#0'```'#0'fff'#0'iii'#0 - +'lll'#0'agx'#0'ppp'#0'uuu'#0'~~~'#0#1#1#135#0#1#1#136#0#12#24#131#0#0#0#144#0 - +#0#0#154#0#0#2#159#0#11#29#151#0#8#25#156#0#23'*'#138#0#24'*'#137#0#15' '#145 - +#0#29'6'#155#0#31'9'#158#0#0#5#165#0#0#9#171#0#4#17#164#0#6#24#166#0#10#31 - +#167#0#0#12#177#0#0#15#184#0#2#19#180#0#7#30#177#0#2#22#186#0#0#18#190#0#19 - +'/'#170#0#11'$'#177#0#12''''#182#0#17'1'#187#0'#?'#171#0'7J'#141#0'*@'#148#0 - +'-C'#149#0'4J'#153#0'-F'#163#0'8Q'#167#0'<T'#168#0'$C'#184#0'/M'#188#0'HZ' - +#149#0'Uf'#156#0'`h'#130#0'Vj'#167#0#0#21#196#0#0#24#202#0#0#27#208#0#0#30 - +#215#0#5' '#193#0#14'3'#203#0#21'8'#194#0#24';'#195#0#21';'#206#0#0'"'#221#0 - +#6'/'#222#0#0'('#233#0#3'/'#234#0#18'>'#231#0#0'+'#240#0#0'.'#246#0#3'2'#240 - +#0#10':'#242#0#15'>'#243#0#0'2'#252#0#3'6'#254#0#7':'#255#0#12'>'#255#0'"J' - +#221#0'8_'#223#0'<b'#223#0#20'B'#243#0#24'G'#243#0#16'B'#255#0#21'G'#255#0#26 - +'K'#255#0#30'O'#255#0' J'#232#0'(S'#233#0'#T'#255#0'''X'#255#0',\'#255#0':c' - +#234#0'>g'#234#0'<h'#244#0'1a'#255#0'5e'#255#0':i'#255#0'?n'#255#0'Jg'#194#0 - +'In'#225#0'Lr'#225#0'Ep'#245#0'It'#245#0'Cr'#255#0#138#138#138#0#142#142#142 - +#0#144#144#144#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'H'#19#5#5#4#4#19'H'#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0'J'#8#8#8#5#5#5#5#4#4#4#0#0'C'#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0'Q'#19#19#19#8#8#8#8#5#5#5#4#4#4#0#0#0'H'#0#0#0#0#0#0#0#0#0#0#0#0#0#27#20 - +#20#19#19#19#8' dd[ZW-'#13#4#4#0#0#5#0#0#0#0#0#0#0#0#0#0#0#24#24#20#20#20#19 - +#19#19#29'dd[[ZZZV'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#27#24#24#24#24#20#20#19#19 - +'!ihdc[ZZZZ3'#2#0#0#0#0#0#0#0#0#0#0'C'#27#27#24#24#24#20#20#20#19'#jihd[[ZZZ' - +'ZY'#9#0#0#5#0#0#0#0#0'S'#27#27#27#27#24#24#24#24#20#20#19'#!'#16'0d[[ZZZZY' - +#2#0#0'H'#0#0#0#0'CC'#27#27#27#27#24#24#24#20#20#20#19#19#19#11'hh[[ZZZZ3'#4 - +#0#0#0#0#0'SDCC'#27#27#24#27#24#24#24#24#20#20#19#19'Xihhc[ZZZZ'#14#0#0'C'#0 - +#0'DDCC'#27';'#135#144'q:'#24#24#20#20#20'5'#128'iihd[[ZZZW'#4#0#0#0#0'DDDDF' - +#146#149#148#148#138#24#24#24#24#20'$'#129#128#128'ihhc[ZZZ'#13#4#4#0'UHHDD@' - +#156#150#149#148#148'9'#26#24#24#20#23'`'#129#128'iihd['#28'3Z-'#4#0'CNHHHDA' - +#156#156#150#149#148','#26#24#24#24#24#20#22#129'f!eh2'#10#15'ZV'#4#4#8'JHHH' - +'HD'#151#157#156#150#135#27#27#27#24#24#24#20'%'#130'4'#19#17#30#16#8#10'/.' - +#5#4#4'JJJHHHGvwuC'#27#27#26#27#24'<^p'#131'g'#19#19#19#8#8#8#5#5#5#5#4'JJJJ' - +'HHDDDCCB'#27#27#27'('#142#139'^p&'#20#19#19#11#8#8#8#8#5#5#5'NNJJHHHHDDCCC' - +#27#27'='#142'n'#24#21#21#20#20#19#18#18#8#8#8#8#5#5'QNJJJJHHHDDCCB'#27#27 - +#133#139'='#24#24#20#20'&\]#'#11#6#8#6#19#178'NNNJJJHHHDDF?C'#27'b'#148#139 - +#24#24#24#24#132#129#129'i'#17#8#8#8'H'#0'NNNNJJHHHHL'#160#156'zu'#149#148'b' - +#27#24#26#21#137#131#130#129'#'#19#8#8#0#0'QNNNM'#167#170'|HHx'#159#158#156 - +#156#150'>'#27#27#26#24#24'p'#137#131'k'#19#19#18#8#0#0#178'QQN'#174#171#170 - +#166'IHx'#162#162#158#156#156'r*'#27#27#27#24#24'67'#23#20#19#19'J'#0#0#0'QN' - +'Q'#173#177#170#170#153#153#164#163#162#159#158#157#156#150#136#27#26#27#24 - +#24#24#23#20#20#19#0#0#0#0#180'QNR'#176#177#171#170#169#169#164#162#162#159 - +#158#156#156#141#27#27#27#27#24#24#24#24#20'J'#0#0#0#0#0'SQQ~'#176#177#170 - +#170#169#169#164#163#162#159#158#157'uB*)'#27#27#24#24#24#27#0#0#0#0#0#0#0'Q' - +'NQR'#174#177#171#170#169#169#164#162#162#159#158#155'u'#146#145':'#26#27#24 - +#24#0#0#0#0#0#0#0#0#0'QQNN'#176#170#170#169#169#164#163#162#158#158#157#154 - +'t'#27#27#27#27#0#0#0#0#0#0#0#0#0#0#0'SQQNN}'#172#166#169#169#164#163#161'{s' - +'CCC'#27'C'#0#0#0#0#0#0#0#0#0#0#0#0#0#180'QQNNNJJJHHHDDDCCS'#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#178'QQNNNJJJHHHDU'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#178'QNJJJNU'#0#0#0#0#0#0#0#0#0#0#0#0#255#240#15#255#255#128#1#255#254#0#0'' - +#252#0#0'?'#248#0#0#31#240#0#0#15#224#0#0#7#192#0#0#3#192#0#0#3#128#0#0#1#128 - +#0#0#1#128#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#128#0#0#1#128#0#0#1#128#0#0#1#192#0#0#3#192#0#0#3#224#0#0#7#240#0#0#15 - +#248#0#0#31#252#0#0'?'#254#0#0''#255#128#1#255#255#240#15#255'('#0#0#0#16#0 - +#0#0' '#0#0#0#1#0#8#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#0#0#0 - +#4#4#4#0#3#3#13#0#9#9#9#0#14#14#14#0#7#7#26#0#18#18#18#0#24#24#24#0#29#29#29 - ,#0#27#28'&'#0#14#14'5'#0#18#19':'#0#23#26'9'#0#28#31'?'#0'"""'#0''''''''#0',' - +',,'#0'%&1'#0')+7'#0'111'#0'666'#0';;;'#0'???'#0#7#7'J'#0#26#30'I'#0#8#9'W'#0 - +'&*B'#0'7:G'#0'<?K'#0'!(V'#0'$.^'#0'09_'#0#2#2'c'#0#11#15'`'#0#10#14'h'#0#18 - +#27'h'#0#1#1'~'#0#23'"f'#0#30'(b'#0#31',s'#0'5>c'#0'$3q'#0'!2}'#0'>D['#0'=Jw' - +#0'AAA'#0'DDD'#0'III'#0'OOO'#0'ADP'#0'SSS'#0'TTT'#0'YYY'#0'^^^'#0'CJ`'#0'OUi' - +#0'\_h'#0'CP{'#0'_ew'#0'bbb'#0'hhh'#0'fiq'#0'sss'#0#4#4#130#0#7#16#140#0#11 - +#23#141#0#14#30#142#0#0#0#154#0#0#1#156#0#25'+'#138#0#0#6#167#0#10#28#162#0#4 - +#21#172#0#7#28#172#0#0#12#179#0#0#19#191#0#8'"'#184#0' ='#170#0';Q'#156#0'<Z' - +#190#0'@X'#170#0'G_'#172#0'H`'#171#0'Pe'#165#0'Ul'#177#0#0#25#204#0#0#31#216 - +#0#19'5'#192#0#18';'#219#0#3','#229#0#15';'#231#0#4'3'#240#0#1'3'#252#0#8';' - +#255#0#30'C'#208#0')J'#199#0'?c'#212#0#24'C'#231#0#24'D'#231#0#21'C'#243#0#18 - +'C'#255#0#27'L'#255#0'$T'#255#0'-]'#255#0'6f'#255#0'Pp'#207#0'Ms'#226#0'@n' - +#255#0#133#133#133#0#150#150#150#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0';'#7 - +#6#4#4'2'#0#0#0#0#0#0#0#0';'#15#15#12'!'#25#23#5#0'-'#0#0#0#0#0'-'#19#16#15 - +#24'JFCC '#2#6#0#0#0';'#21#19#19#16#17'A@FCC$'#2'-'#0#0'--'#21#21#19#16#15#24 - +'JFCC '#0#0'l/1X\)'#19#16'GKJFCC'#5'22/9d]W'#19#19#29'IHJ"?'#23#4'420_^('#21 - +#21#30'L%'#13#9#11#10#4'4422/--'#31'Y'''#26#15#15#7#7#6';;422/+'#21'[*'#19'&' - +'U#'#7#7'm;8R79ebZ'#31#19'EVB'#15';'#0'<Tk`OfecM'#21#21#30#18#15#0#0'l=jkhgf' - +'ea'#28#27#19#19'2'#0#0#0'>=ikhgfeaM'#21'-'#0#0#0#0#0'l<:SRRN6-;'#0#0#0#0#0#0 - +#0#0'm;442l'#0#0#0#0#0#248#31#0#0#224#7#0#0#192#3#0#0#128#1#0#0#128#1#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#1#0#0#128#1#0#0#192#3#0#0 - +#224#7#0#0#248#31#0#0'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0' '#0#0#0#0#0#128'%'#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#25#25#25'/'#23#23#23'o'#22#22#22#159#20#20#20#191#18#18#18 - +#255#16#16#16#255#15#15#15#255#13#13#13#255#11#11#11#255#10#10#10#255#8#8#8 - +#191#7#7#7#159#5#5#5'o'#4#4#4'/'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0' '#31#30#30#30#143#28 - +#28#28#223#26#26#26#255#25#25#25#255#23#23#23#255#21#21#21#255#20#20#20#255 - +#18#18#18#255#16#16#16#255#15#15#15#255#13#13#13#255#11#11#11#255#10#10#10 - +#255#8#8#8#255#6#6#6#255#5#5#5#255#3#3#3#223#2#2#2#143#1#1#1#31#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$$$/###'#175'!!!'#255#31#31#31#255 - +#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25#255#23#23#23#255#21#21#21 - +#255#20#20#20#255#18#18#18#255#16#16#16#255#15#15#15#255#13#13#13#255#11#11 - +#11#255#10#10#10#255#8#8#8#255#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0 - +#159#0#0#0#31#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'***'#15'((('#143'&&&'#255'$$$'#255'###' - +#255'!!!'#255#31#31#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25 - +#255#23#23#23#255#21#21#21#255#20#20#20#255#18#18#18#255#16#16#16#255#15#15 - +#15#255#13#13#13#255#11#11#11#255#10#10#10#255#8#8#8#255#6#6#6#255#5#5#5#255 - +#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#143#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'---?+++'#239')))'#255'(((' - +#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31#31#255#30#30#30#255#26#27'%' - ,#255#19#22'?'#255#13#17'X'#255#11#14'^'#255#10#12'['#255#9#10'X'#255#9#9'V' - +#255#9#9'L'#255#11#11'1'#255#12#12#22#255#11#11#11#255#10#10#10#255#8#8#8#255 - +#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#223#0#0#0'?'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'000o...'#255'---'#255'+' - +'++'#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31#31#255 - +#28#29''''#255#14#20'f'#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0 - +#1#156#255#0#0#154#255#0#0#154#255#0#0#154#255#2#2''#255#6#6'I'#255#8#8#27 - +#255#8#8#8#255#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#255#0 - +#0#0'_'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'333'#159'222'#255'000'#255 - +'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!' - +#255#31#31#31#255#22#26'C'#255#0#11#177#255#0#9#173#255#0#7#169#255#0#5#165 - +#255#0#3#161#255#0#1#156#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255 - +#0#0#154#255#3#3'c'#255#7#7#26#255#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1#255#0 - +#0#0#255#0#0#0#255#0#0#0#159#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'777'#159'555'#255'3' - +'33'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&' - +#255'$$$'#255'###'#255'!!!'#255#20#25'Y'#255#0#13#181#255#0#11#177#255#0#9 - +#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0#154#255#0#0#154 - +#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#3#3'Z'#255#6#6#15#255#5 - +#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#159#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0':::o8' - +'88'#255'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++' - +#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255#16#25'o'#255#0#16#185#255#0 - +#13#181#255#0#11#177#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1 - +#156#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154 - +#255#1#1'~'#255#5#5'"'#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#255 - +#0#0#0'_'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0'===?;;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000' - +#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$'#255#24#30'T' - +#255#0#18#190#255#0#16#185#255#0#13#181#255#0#11#177#255#0#9#173#255#0#7#169 - +#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0#154#255#0#0#154#255#0#0#154#255 - +#0#0#154#255#0#0#154#255#0#0#154#255#0#0#144#255#5#5'"'#255#5#5#5#255#3#3#3 - +#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0'?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0'AAA'#15'???'#239'==='#255';;;'#255':::'#255'888'#255 - +'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))' - +#255'((('#255'&&&'#255'$$$'#255#22#29'^'#255#0#18#190#255#4#18#166#255#9#18 - +#133#255#14#20'f'#255#1#10#163#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1 - +#156#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154 - +#255#0#0#144#255#5#5'"'#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#223 - +#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'BBB'#159'@@@'#255 - +'???'#255'==='#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222' - +#255'000'#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$'#255 - +'###'#255'!!!'#255#31#31#31#255#30#30#30#255#14#20'f'#255#0#9#173#255#0#7#169 - +#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0#154#255#0#0#154#255#0#0#154#255 - +#0#0#154#255#0#0#154#255#0#0#154#255#0#0#144#255#5#5'"'#255#5#5#5#255#3#3#3 - +#255#1#1#1#255#0#0#0#255#0#0#0#143#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'E' - +'EE/DDD'#255'BBB'#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888'#255 - +'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))' - +#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31#31#255#28#29''''#255 - +#1#12#167#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0 - +#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#1#1'~' - +#255#6#6#15#255#5#5#5#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0#31#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0'GGG'#191'EEE'#255'DDD'#255'BBB'#255'@@@'#255'???'#255'=' - +'=='#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000' - +#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255 - +'!!!'#255#25#28'<'#255#1#14#171#255#0#11#177#255#0#9#173#255#0#7#169#255#0#5 - +#165#255#0#3#161#255#0#1#156#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154 - +#255#0#0#154#255#0#0#154#255#3#3'Z'#255#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1 - +#255#0#0#0#159#0#0#0#0#0#0#0#0#0#0#0#0'JJJ'#31'III'#255'GGG'#255'EEE'#255'DD' - +'D'#255'BBB'#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888'#255'777' - +#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255 - +'((('#255'&&&'#255'$$$'#255#28' @'#255#2#19#180#255#0#16#185#255#0#13#181#255 - ,#0#11#177#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0 - +#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#7#7#26 - +#255#6#6#6#255#5#5#5#255#3#3#3#255#1#1#1#255#1#1#1#31#0#0#0#0#0#0#0#0'LLL' - +#143'JJJ'#255'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@'#255'???'#255 - +'2<a'#255#23'7'#181#255#14'3'#203#255#17'2'#188#255'"3~'#255'555'#255'333' - +#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'((('#255'!$:'#255 - +#2#23#187#255#0#20#194#255#0#18#190#255#0#16#185#255#0#13#181#255#0#11#177 - +#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0#154#255 - +#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#3#3'c'#255#8#8#8#255#6#6#6 - +#255#5#5#5#255#3#3#3#255#2#2#2#143#0#0#0#0#0#0#0#0'NNN'#223'LLL'#255'JJJ'#255 - +'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255',?'#136#255#7'9'#255#255#4'6' - +#255#255#1'4'#254#255#0'1'#252#255#0'/'#248#255#20'1'#173#255'555'#255'333' - +#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'%''2'#255#0#24#202 - +#255#0#22#198#255#0#20#194#255#0#18#190#255#0#16#185#255#0#13#181#255#0#11 - +#177#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0#154 - +#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#8#8#27#255#8#8#8#255#6#6 - +#6#255#5#5#5#255#3#3#3#223#0#0#0#0'QQQ/OOO'#255'NNN'#255'LLL'#255'JJJ'#255'I' - +'II'#255'GGG'#255'EEE'#255'@DO'#255#16'?'#243#255#10'<'#255#255#7'9'#255#255 - +#4'6'#255#255#1'4'#254#255#0'1'#252#255#0'/'#248#255'"3~'#255'555'#255'333' - +#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255#5#28#185#255#0#24 - +#202#255#0#22#198#255#0#20#194#255#0#18#190#255#0#16#185#255#0#13#181#255#0 - +#11#177#255#0#9#173#255#0#7#169#255#0#5#165#255#0#3#161#255#0#1#156#255#0#0 - +#154#255#0#0#154#255#0#0#154#255#0#0#154#255#5#5'R'#255#10#10#10#255#8#8#8 - +#255#6#6#6#255#5#5#5#255#4#4#4'/RRRoQQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ' - +#255'III'#255'GGG'#255'9Et'#255#16'B'#255#255#13'?'#255#255#10'<'#255#255#7 - +'9'#255#255#4'6'#255#255#1'4'#254#255#0'1'#252#255#17'2'#188#255'777'#255'55' - +'5'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255#23'#s'#255#2#27 - +#195#255#0#24#202#255#0#22#198#255#0#20#194#255#0#18#190#255#0#16#185#255#0 - +#13#181#255#0#11#177#255#0#9#173#255#0#7#169#255#0#5#165#255#5#7'~'#255#10#10 - +'X'#255#5#5'o'#255#0#0#154#255#0#0#154#255#2#2''#255#11#11#11#255#10#10#10 - +#255#8#8#8#255#6#6#6#255#5#5#5'oTTT'#175'SSS'#255'QQQ'#255'OOO'#255'NNN'#255 - +'LLL'#255'JJJ'#255'III'#255';Gu'#255#19'E'#255#255#16'B'#255#255#13'?'#255 - +#255#10'<'#255#255#7'9'#255#255#4'6'#255#255#1'4'#254#255#14'3'#203#255'888' - +#255'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255 - +')))'#255#25'#f'#255#4#26#181#255#0#22#198#255#0#20#194#255#0#18#190#255#6#19 - +#156#255#0#13#181#255#0#11#177#255#0#9#173#255#0#7#169#255#20#21')'#255#21#21 - +#21#255#20#20#20#255#0#0#154#255#0#0#154#255#0#0#154#255#12#12#22#255#11#11 - +#11#255#10#10#10#255#8#8#8#255#7#7#7#159'VVV'#207'TTT'#255'SSS'#255'QQQ'#255 - +'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'@Ik'#255#22'G'#255#255#19'E'#255#255#16 - +'B'#255#255#13'?'#255#255#10'<'#255#255#7'9'#255#255#4'6'#255#255#26'7'#169 - +#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255 - +'---'#255'+++'#255')))'#255#20'!z'#255#0#24#202#255#6#24#167#255#28' @'#255 - +'!!!'#255#12#21''#255#0#13#181#255#0#11#177#255#6#14#136#255#25#25#25#255#23 - +#23#23#255#21#21#21#255#5#5'z'#255#0#0#154#255#0#0#154#255#11#11'1'#255#13#13 - +#13#255#11#11#11#255#10#10#10#255#8#8#8#191'XXX'#255'VVV'#255'TTT'#255'SSS' - +#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'%J'#209#255#22'G'#255#255 - +#19'E'#255#255#16'B'#255#255#13'?'#255#255#10'<'#255#255#10'9'#243#255'6<U' - +#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000'#255 - +'...'#255'---'#255'+++'#255#18'"'#136#255#0#26#206#255#14#29#141#255'$$$'#255 - +'###'#255'!!!'#255#18#24'b'#255#20#25'M'#255#24#26'.'#255#26#26#26#255#25#25 - +#25#255#23#23#23#255#12#13'R'#255#1#2#148#255#0#0#154#255#11#11';'#255#15#15 - +#15#255#13#13#13#255#11#11#11#255#10#10#10#255'YYY'#255'XXX'#255'VVV'#255'TT' - +'T'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'GJV'#255'%J'#209#255#22 - +'G'#255#255#19'E'#255#255#16'B'#255#255#16'?'#243#255'3?p'#255'???'#255'===' - +#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000'#255 - +'...'#255'---'#255#11'!'#171#255#0#28#210#255#4#28#185#255'&&&'#255'$$$'#255 - +'###'#255'!!!'#255#31#31#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25 - +#25#255#23#23#23#255#21#21#21#255#17#17'%'#255#18#18#18#255#16#16#16#255#15 - +#15#15#255#13#13#13#255#11#11#11#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT' - +#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'@Ik'#255';Gu'#255 - +'9Et'#255'DDD'#255'BBB'#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888' - +#255'777'#255'555'#255'#0m'#255#21','#152#255#11''''#182#255#2'#'#212#255#0 - +' '#219#255#0#30#215#255#0#28#210#255'%''2'#255'&&&'#255'$$$'#255'###'#255'!' - +'!!'#255#31#31#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25#255#23 - ,#23#23#255#21#21#21#255#20#20#20#255#18#18#18#255#16#16#16#255#15#15#15#255 - +#13#13#13#255']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255 - +'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'III'#255'GGG'#255'EEE'#255'DDD' - +#255'BBB'#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888'#255'777'#255 - +#6','#216#255#0')'#235#255#0''''#231#255#12''''#182#255#6'$'#200#255#0' '#219 - +#255#27'&k'#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31 - +#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25#255#23#23#23#255#21 - +#21#21#255#20#20#20#255#18#18#18#255#16#16#16#255#15#15#15#255'^^^'#255']]]' - +#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255 - +'NNN'#255'LLL'#255'JJJ'#255'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@' - +#255'???'#255'==='#255';;;'#255':::'#255' 4'#140#255#0'-'#244#255#0'+'#239 - +#255#16','#178#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'(((' - +#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31#31#255#30#30#30#255#28#28#28 - +#255#26#26#26#255#25#25#25#255#23#23#23#255#21#21#21#255#20#20#20#255#18#18 - +#18#255#16#16#16#255'```'#255'^^^'#255']]]'#255'[[['#255'YYY'#255'XXX'#255'V' - +'VV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'III' - +#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@'#255'???'#255'==='#255';;;'#255 - +',8j'#255#0'/'#248#255#0'-'#244#255'$2p'#255'333'#255'222'#255'000'#255'...' - +#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!'#255 - +#31#31#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25#255#23#23#23 - +#255#21#21#21#255#20#20#20#255#18#18#18#255'bbb'#207'```'#255'^^^'#255']]]' - +#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255 - +'NNN'#255'LLL'#255'JJJ'#255'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@' - +#255'???'#255'==='#255';;;'#255#18'4'#191#255#0'/'#248#255#10'/'#208#255'.4M' - +#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'%''2'#255 - +#21' n'#255#18#29'u'#255#19#28'i'#255#31' +'#255#31#31#31#255#30#30#30#255#28 - +#28#28#255#26#26#26#255#25#25#25#255#23#23#23#255#21#21#21#255#20#20#20#191 - +'ccc'#175'bbb'#255'```'#255'^^^'#255']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV' - +#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'III'#255 - +'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@'#255'???'#255'==='#255'4:T'#255#0'1' - +#252#255#0'/'#248#255#3'-'#232#255'.4M'#255'333'#255'222'#255'000'#255'...' - +#255'---'#255'+++'#255#7#30#178#255#0#26#206#255#0#24#202#255#0#22#198#255#2 - +#21#184#255#31' +'#255#31#31#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25 - +#25#25#255#23#23#23#255#22#22#22#175'eeeoccc'#255'bbb'#255'```'#255'^^^'#255 - +']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO' - +#255'NNN'#255'LLL'#255'JJJ'#255'III'#255'GGG'#255'<Eh'#255'ADO'#255'BBB'#255 - +'@@@'#255'???'#255'2<a'#255#1'4'#254#255#0'1'#252#255#0'/'#248#255')4f'#255 - +'555'#255'333'#255'222'#255'000'#255'...'#255#28'(n'#255#0#30#215#255#0#28 - +#210#255#0#26#206#255#0#24#202#255#0#22#198#255#15#26'|'#255'!!!'#255#31#31 - +#31#255#30#30#30#255#28#28#28#255#26#26#26#255#25#25#25#255#23#23#23'offf/ee' - +'e'#255'ccc'#255'bbb'#255'```'#255'^^^'#255']]]'#255'[[['#255'YYY'#255'XXX' - +#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'EKa'#255 - +'(J'#198#255#22'G'#255#255#22'E'#243#255'-C'#149#255'BBB'#255'6@d'#255#10'9' - +#243#255#4'6'#255#255#1'4'#254#255#3'2'#239#255'.7\'#255'777'#255'555'#255'3' - +'33'#255'222'#255'000'#255#23'('#134#255#0' '#219#255#0#30#215#255#0#28#210 - +#255#0#26#206#255#0#24#202#255#9#25#157#255'###'#255'!!!'#255#31#31#31#255#30 - +#30#30#255#28#28#28#255#26#26#26#255#25#25#25'/'#0#0#0#0'ggg'#223'eee'#255'c' - +'cc'#255'bbb'#255'```'#255'^^^'#255']]]'#255'[[['#255'S\x'#255'F^'#171#255'M' - +'Y'#128#255'RU_'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'5N'#165#255#28'M' - +#255#255#25'J'#255#255#22'G'#255#255#19'E'#255#255#22'B'#231#255#16'?'#243 - +#255#10'<'#255#255#7'9'#255#255' :'#158#255'8;H'#255':::'#255'888'#255'777' - +#255'555'#255'333'#255'222'#255#30'+s'#255#0'"'#223#255#0' '#219#255#0#30#215 - +#255#0#28#210#255#0#26#206#255#16#30#130#255'$$$'#255'###'#255'!!!'#255#31#31 - +#31#255#30#30#30#255#28#28#28#223#0#0#0#0#0#0#0#0'hhh'#143'ggg'#255'eee'#255 - +'ccc'#255'bbb'#255'```'#255'^^^'#255'W`{'#255'=i'#244#255'8g'#255#255'5d'#255 - +#255'@]'#191#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'2Q'#188#255#31'P'#255 - +#255#28'M'#255#255#25'J'#255#255#22'G'#255#255#19'E'#255#255#16'B'#255#255#13 - +'?'#255#255#23'='#207#255'???'#255'==='#255';;;'#255':::'#255'888'#255'777' - +#255'555'#255'333'#255'222'#255#9'&'#193#255#0'"'#223#255#0' '#219#255#0#30 - +#215#255#2#29#200#255'%''2'#255'&&&'#255'$$$'#255'###'#255'!!!'#255#31#31#31 - +#255#30#30#30#143#0#0#0#0#0#0#0#0'iii'#31'hhh'#255'ggg'#255'eee'#255'ccc'#255 - +'bbb'#255'^aj'#255'Co'#245#255'>m'#255#255';j'#255#255'8g'#255#255'5d'#255 - +#255'RXk'#255'TTT'#255'SSS'#255'QQQ'#255'0T'#211#255'"S'#255#255#31'P'#255 - +#255#28'M'#255#255#25'J'#255#255#22'G'#255#255#19'E'#255#255#16'B'#255#255#13 - ,'?'#255#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888'#255'777'#255'5' - +'55'#255'333'#255'/1='#255#27'+~'#255#23'('#134#255#25'''y'#255'(*6'#255')))' - +#255'((('#255'&&&'#255'$$$'#255'###'#255'!!!'#255' '#31#0#0#0#0#0#0#0#0#0#0 - +#0#0'jjj'#191'hhh'#255'ggg'#255'eee'#255'ccc'#255'Vj'#167#255'Ds'#255#255'Ap' - +#255#255'>m'#255#255';j'#255#255'8g'#255#255'B`'#192#255'VVV'#255'RU_'#255'G' - +'V'#136#255'.X'#233#255'%V'#255#255'"S'#255#255#31'P'#255#255#28'M'#255#255 - +#25'J'#255#255#22'G'#255#255#19'E'#255#255#16'B'#255#255#23'@'#219#255'">' - +#171#255'#<'#158#255'6<U'#255';;;'#255':::'#255'888'#255'777'#255'555'#255'3' - +'33'#255'222'#255'000'#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&' - +#255'$$$'#255'###'#175#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk?jjj'#255'hhh'#255 - +'ggg'#255'eee'#255'bem'#255'Lr'#225#255'Ds'#255#255'Ap'#255#255'>m'#255#255 - +';j'#255#255'8g'#255#255'5d'#255#255'2a'#255#255'/_'#255#255',\'#255#255')Y' - +#255#255'%V'#255#255'"S'#255#255#31'P'#255#255#28'M'#255#255#25'J'#255#255#22 - +'G'#255#255#19'E'#255#255#16'B'#255#255#13'?'#255#255#10'<'#255#255#24';'#194 - +#255'==='#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255 - +'000'#255'...'#255'---'#255'+++'#255')))'#255'((('#255'&&&'#255'$$$/'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#159'jjj'#255'hhh'#255'ggg'#255'eee'#255 - +'^g'#129#255'It'#245#255'Ds'#255#255'Ap'#255#255'>m'#255#255';j'#255#255'8g' - +#255#255'5d'#255#255'2a'#255#255'/_'#255#255',\'#255#255')Y'#255#255'%V'#255 - +#255'"S'#255#255#31'P'#255#255#28'M'#255#255#25'J'#255#255#22'G'#255#255#19 - +'E'#255#255#16'B'#255#255#13'?'#255#255#16'='#231#255'???'#255'==='#255';;;' - +#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255'000'#255'...'#255 - +'---'#255'+++'#255')))'#255'((('#159#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0'kkk'#15'kkk'#239'jjj'#255'hhh'#255'ggg'#255'eee'#255'^g'#129#255'Gv' - +#255#255'Ds'#255#255'Ap'#255#255'>m'#255#255';j'#255#255'8g'#255#255'5d'#255 - +#255'2a'#255#255'/_'#255#255',\'#255#255')Y'#255#255'%V'#255#255'"S'#255#255 - +#31'P'#255#255#28'M'#255#255#25'J'#255#255#22'G'#255#255#19'E'#255#255#16'B' - +#255#255'.A'#137#255'@@@'#255'???'#255'==='#255';;;'#255':::'#255'888'#255'7' - +'77'#255'555'#255'333'#255'222'#255'000'#255'...'#255'---'#255'+++'#239'***' - +#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk?kkk'#255'jjj' - +#255'hhh'#255'ggg'#255'eee'#255']h'#138#255'It'#245#255'Ds'#255#255'Ap'#255 - +#255'>m'#255#255';j'#255#255'8g'#255#255'5d'#255#255'2a'#255#255'/_'#255#255 - +',\'#255#255')Y'#255#255'%V'#255#255'"S'#255#255#31'P'#255#255#28'M'#255#255 - +#25'J'#255#255#22'G'#255#255#22'E'#243#255'DDD'#255'BBB'#255'@@@'#255';>K' - +#255'6<U'#255';;;'#255':::'#255'888'#255'777'#255'555'#255'333'#255'222'#255 - +'000'#255'...'#255'---?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0'kkkkkk'#255'jjj'#255'hhh'#255'ggg'#255'eee'#255'^g'#129 - +#255'Ks'#235#255'Ds'#255#255'Ap'#255#255'>m'#255#255';j'#255#255'8g'#255#255 - +'5d'#255#255'2a'#255#255'/_'#255#255',\'#255#255')Y'#255#255'%V'#255#255'"S' - +#255#255#31'P'#255#255#28'M'#255#255#25'J'#255#255#22'G'#255#255'&E'#185#255 - +'ADO'#255'.A'#137#255#13'<'#243#255#7'9'#255#255'!:'#157#255';;;'#255':::' - +#255'888'#255'777'#255'555'#255'333'#255'222'#255'000o'#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#159 - +'kkk'#255'jjj'#255'hhh'#255'ggg'#255'eee'#255'bem'#255'Sm'#186#255'Ds'#255 - +#255'Ap'#255#255'>m'#255#255';j'#255#255'8g'#255#255'5d'#255#255'2a'#255#255 - +'/_'#255#255',\'#255#255')Y'#255#255'%V'#255#255'"S'#255#255#31'P'#255#255#28 - +'M'#255#255#25'J'#255#255#22'G'#255#255#22'E'#243#255#16'B'#255#255#13'?'#255 - +#255#10'<'#255#255'#<'#159#255'==='#255';;;'#255':::'#255'888'#255'777'#255 - +'555'#255'333'#159#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#159'kkk'#255'jjj'#255'hh' - +'h'#255'ggg'#255'eee'#255'ccc'#255']e'#255'Mm'#205#255'Ap'#255#255'>m'#255 - +#255';j'#255#255'8g'#255#255'5d'#255#255'2a'#255#255'/_'#255#255',\'#255#255 - +')Y'#255#255'%V'#255#255'"S'#255#255#31'P'#255#255#28'M'#255#255#25'J'#255 - +#255#22'G'#255#255#19'E'#255#255' B'#196#255'8Ae'#255'@@@'#255'???'#255'===' - +#255';;;'#255':::'#255'888'#255'777'#159#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0'kkkkkk'#255'jjj'#255'hhh'#255'ggg'#255'eee'#255'ccc'#255'bbb'#255 - +']bt'#255'Nh'#185#255'Dj'#224#255';j'#255#255'8g'#255#255'5d'#255#255'2a'#255 - +#255'/_'#255#255',\'#255#255')Y'#255#255'%V'#255#255'"S'#255#255#31'P'#255 - +#255'%M'#221#255'.J'#175#255'AG^'#255'EEE'#255'DDD'#255'BBB'#255'@@@'#255'??' - +'?'#255'==='#255';;;'#255':::o'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0'kkkOkkk'#239'jjj'#255'hhh'#255'ggg'#255'eee'#255'ccc'#255'bbb' - +#255'```'#255'^^^'#255'[^g'#255'S_'#132#255'H`'#172#255'F^'#171#255'D\'#171 - ,#255'AY'#170#255'?W'#169#255'=U'#168#255'EQ{'#255'KNY'#255'LLL'#255'JJJ'#255 - +'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB'#255'@@@'#255'???'#239'===?'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#15 - +'kkk'#159'jjj'#255'hhh'#255'ggg'#255'eee'#255'ccc'#255'bbb'#255'```'#255'^^^' - +#255']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255 - +'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'III'#255'GGG'#255'EEE'#255'DDD'#255'BBB' - +#159'AAA'#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk?jjj'#191'hhh'#255'ggg'#255'eee'#255 - +'ccc'#255'bbb'#255'```'#255'^^^'#255']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV' - +#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'NNN'#255'LLL'#255'JJJ'#255'III'#255 - +'GGG'#191'EEE?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'iii' - +#31'hhh'#143'ggg'#239'eee'#255'ccc'#255'bbb'#255'```'#255'^^^'#255']]]'#255 - +'[[['#255'YYY'#255'XXX'#255'VVV'#255'TTT'#255'SSS'#255'QQQ'#255'OOO'#255'NNN' - +#223'LLL'#143'JJJ'#31#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'fff/eeeccc'#175'bbb'#207'```'#255 - +'^^^'#255']]]'#255'[[['#255'YYY'#255'XXX'#255'VVV'#207'TTT'#175'RRRQQQ/'#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#128#1#255 - +#255#0#0#255#252#0#0'?'#255#0#0#255#240#0#0#15#255#0#0#255#192#0#0#3#255#0#0 - +#255#128#0#0#1#255#0#0#255#0#0#0#0#255#0#0#254#0#0#0#0''#0#0#252#0#0#0#0'?' - +#0#0#248#0#0#0#0#31#0#0#240#0#0#0#0#15#0#0#224#0#0#0#0#7#0#0#224#0#0#0#0#7#0 - +#0#192#0#0#0#0#3#0#0#192#0#0#0#0#3#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0 - +#128#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#128#0#0#0#0#1#0#0#192#0#0 - +#0#0#3#0#0#192#0#0#0#0#3#0#0#224#0#0#0#0#7#0#0#224#0#0#0#0#7#0#0#240#0#0#0#0 - +#15#0#0#248#0#0#0#0#31#0#0#252#0#0#0#0'?'#0#0#254#0#0#0#0''#0#0#255#0#0#0#0 - +#255#0#0#255#128#0#0#1#255#0#0#255#192#0#0#3#255#0#0#255#240#0#0#15#255#0#0 - +#255#252#0#0'?'#255#0#0#255#255#128#1#255#255#0#0'('#0#0#0' '#0#0#0'@'#0#0#0 - +#1#0' '#0#0#0#0#0#128#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#28#28#28#31 - +#26#26#26'o'#23#23#23#191#21#21#21#239#18#18#18#255#16#16#16#255#13#13#13#255 - +#11#11#11#255#8#8#8#223#6#6#6#175#4#4#4'o'#3#3#3#31#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$$$?!!!'#191#31#31#31#255#28#28#28 - +#255#26#26#26#255#23#23#23#255#21#21#21#255#18#18#18#255#16#16#16#255#13#13 - +#13#255#11#11#11#255#8#8#8#255#6#6#6#255#3#3#3#255#1#1#1#191#0#0#0'?'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#15')))'#175'&&&'#255'$$$'#255'!!!'#255#31 - +#31#31#255#28#28#28#255#26#26#26#255#23#23#23#255#21#21#21#255#18#18#18#255 - +#16#16#16#255#13#13#13#255#11#11#11#255#8#8#8#255#6#6#6#255#3#3#3#255#1#1#1 - +#255#0#0#0#175#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'000?...'#239'+++'#255')))'#255'&&&'#255'$' - +'$$'#255'!!!'#255#31#31#31#255#16#21']'#255#0#9#171#255#0#5#165#255#0#2#159 - +#255#0#0#154#255#1#1#136#255#4#4'e'#255#7#7'7'#255#8#8#8#255#6#6#6#255#3#3#3 - +#255#1#1#1#255#0#0#0#239#0#0#0'/'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'555_333'#255'000'#255'...'#255'+++'#255')))'#255 - +'&&&'#255'$$$'#255'!!!'#255#23#27'E'#255#0#12#177#255#0#9#171#255#0#5#165#255 - +#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154#255#1#1#135#255#5#5'>'#255#6#6#6 - +#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0'_'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0':::?888'#255'555'#255'333'#255'000'#255'...'#255'+++' - +#255')))'#255'&&&'#255'$$$'#255#21#27'\'#255#0#15#184#255#0#12#177#255#0#9 - +#171#255#0#5#165#255#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154 - +#255#1#1'u'#255#5#5#15#255#3#3#3#255#1#1#1#255#0#0#0#255#0#0#0'/'#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'???'#31'<<<'#239':::'#255'888'#255'555'#255'333' - +#255'000'#255'...'#255'+++'#255')))'#255'&&&'#255#29'!A'#255#2#19#180#255#0 - +#15#184#255#0#12#177#255#0#9#171#255#0#5#165#255#0#2#159#255#0#0#154#255#0#0 - ,#154#255#0#0#154#255#0#0#154#255#0#0#144#255#4#4'!'#255#3#3#3#255#1#1#1#255#0 - +#0#0#239#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'AAA'#191'???'#255'<<<'#255 - +':::'#255'888'#255'555'#255'333'#255'000'#255'...'#255'+++'#255')))'#255'&&&' - +#255#29'!A'#255#21#27'\'#255#27#29'2'#255#14#20'f'#255#0#9#171#255#0#5#165 - +#255#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#154#255#0#0#144#255 - +#5#5#15#255#3#3#3#255#1#1#1#255#0#0#0#175#0#0#0#0#0#0#0#0#0#0#0#0'FFF?DDD' - +#255'AAA'#255'???'#255'<<<'#255':::'#255'888'#255'555'#255'333'#255'000'#255 - +'...'#255'+++'#255')))'#255'&&&'#255'$$$'#255'!!!'#255#29#30'('#255#0#12#177 - +#255#0#9#171#255#0#5#165#255#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154#255 - +#0#0#154#255#1#1'u'#255#6#6#6#255#3#3#3#255#1#1#1#255#0#0#0'?'#0#0#0#0#0#0#0 - +#0'III'#191'FFF'#255'DDD'#255'AAA'#255'???'#255'<<<'#255':::'#255'888'#255'5' - +'55'#255'333'#255'000'#255'...'#255'+++'#255')))'#255'&&&'#255'$$$'#255#12#24 - +#131#255#0#15#184#255#0#12#177#255#0#9#171#255#0#5#165#255#0#2#159#255#0#0 - +#154#255#0#0#154#255#0#0#154#255#0#0#154#255#5#5'>'#255#6#6#6#255#3#3#3#255#1 - +#1#1#191#0#0#0#0'NNN'#31'KKK'#255'III'#255'FFF'#255'DDD'#255'AAA'#255'4>c' - +#255#21'8'#194#255#3'2'#240#255#17'1'#187#255'+3Y'#255'333'#255'000'#255'...' - +#255'+++'#255')))'#255#21' n'#255#0#21#196#255#0#18#190#255#0#15#184#255#0#12 - +#177#255#0#9#171#255#0#5#165#255#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154 - +#255#1#1#135#255#8#8#8#255#6#6#6#255#3#3#3#255#3#3#3#31'PPPoNNN'#255'KKK'#255 - +'III'#255'FFF'#255'ADP'#255#15'>'#243#255#7':'#255#255#3'6'#254#255#0'2'#252 - +#255#6'/'#222#255'555'#255'333'#255'000'#255'...'#255'+++'#255#28'$]'#255#0 - +#24#202#255#0#21#196#255#0#18#190#255#0#15#184#255#0#12#177#255#0#9#171#255#0 - +#5#165#255#0#2#159#255#0#0#154#255#0#0#154#255#0#0#154#255#7#7'7'#255#8#8#8 - +#255#6#6#6#255#4#4#4'oSSS'#191'QQQ'#255'NNN'#255'KKK'#255'III'#255':Fu'#255 - +#16'B'#255#255#12'>'#255#255#7':'#255#255#3'6'#254#255#0'2'#252#255')5h'#255 - +'555'#255'333'#255'000'#255'...'#255'(*5'#255#15' '#145#255#0#24#202#255#0#21 - +#196#255#0#18#190#255#0#15#184#255#0#12#177#255#0#9#171#255#0#5#165#255#13#14 - +'H'#255#4#4'x'#255#0#0#154#255#4#4'e'#255#11#11#11#255#8#8#8#255#6#6#6#191'V' - +'VV'#239'SSS'#255'QQQ'#255'NNN'#255'KKK'#255'=Iw'#255#21'G'#255#255#16'B'#255 - +#255#12'>'#255#255#7':'#255#255#3'6'#254#255'39R'#255'888'#255'555'#255'333' - +#255'000'#255'...'#255'+++'#255'&(3'#255#0#24#202#255#6#24#166#255#21#27'[' - +#255#4#17#164#255#0#12#177#255#9#15'u'#255#23#23#23#255#16#16'7'#255#0#0#154 - +#255#1#1#136#255#13#13#13#255#11#11#11#255#8#8#8#239'XXX'#255'VVV'#255'SSS' - +#255'QQQ'#255'NNN'#255'KKK'#255'"J'#221#255#21'G'#255#255#16'B'#255#255#12'>' - +#255#255#24';'#195#255'<<<'#255':::'#255'888'#255'555'#255'333'#255'000'#255 - +'...'#255'&)@'#255#0#27#208#255#18#31'y'#255'$$$'#255#31' +'#255#21#26'N'#255 - +#24#26'/'#255#26#26#26#255#22#22' '#255#8#9'j'#255#5#6'o'#255#16#16#16#255#13 - +#13#13#255#11#11#11#255'[[['#255'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255 - +'HKW'#255'4J'#153#255'-F'#163#255'-C'#150#255'AAA'#255'???'#255'<<<'#255':::' - +#255'888'#255'555'#255'#/l'#255#23'*'#138#255#11'%'#177#255#0#30#215#255#10 - +#31#167#255'&&&'#255'$$$'#255'!!!'#255#31#31#31#255#28#28#28#255#26#26#26#255 - +#23#23#23#255#21#21#21#255#18#18#18#255#16#16#16#255#13#13#13#255']]]'#255'[' - +'[['#255'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255'KKK'#255'III'#255'FFF' - +#255'DDD'#255'AAA'#255'???'#255'<<<'#255':::'#255'17O'#255#0'+'#240#255#0'(' - +#233#255#24'*'#137#255#11'$'#177#255'#)K'#255')))'#255'&&&'#255'$$$'#255'!!!' - +#255#31#31#31#255#28#28#28#255#26#26#26#255#23#23#23#255#21#21#21#255#18#18 - +#18#255#16#16#16#255'```'#255']]]'#255'[[['#255'XXX'#255'VVV'#255'SSS'#255'Q' - +'QQ'#255'NNN'#255'KKK'#255'III'#255'FFF'#255'DDD'#255'AAA'#255'???'#255'<<<' - +#255'(7v'#255#0'.'#246#255#19'/'#170#255'333'#255'000'#255'...'#255'+++'#255 - +')))'#255'&&&'#255'$$$'#255'!!!'#255#31#31#31#255#28#28#28#255#26#26#26#255 - +#23#23#23#255#21#21#21#255#18#18#18#255'bbb'#239'```'#255']]]'#255'[[['#255 - +'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255'KKK'#255'III'#255'FFF'#255'DDD' - +#255'AAA'#255'???'#255'<<<'#255#14'3'#203#255#3'/'#234#255'$2p'#255'333'#255 - +'000'#255'...'#255'+++'#255'!&H'#255#11#29#151#255#8#25#156#255#24#29'I'#255 - +#31#31#31#255#28#28#28#255#26#26#26#255#23#23#23#255#21#21#21#239'ddd'#191'b' - +'bb'#255'```'#255']]]'#255'[[['#255'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN' - +#255'KKK'#255'III'#255'CFR'#255'>D['#255'AAA'#255'???'#255#31'9'#158#255#0'2' - +#252#255#3'/'#234#255'555'#255'333'#255'000'#255'...'#255#5' '#193#255#0#27 - +#208#255#0#24#202#255#2#22#186#255#31' +'#255#31#31#31#255#28#28#28#255#26#26 - +#26#255#23#23#23#191'fffoeee'#255'bbb'#255'```'#255']]]'#255'[[['#255'XXX' - +#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255'CLm'#255' J'#232#255#21'G'#255#255 - +'$C'#184#255'*@'#148#255#7':'#255#255#3'6'#254#255#29'6'#155#255'888'#255'55' - +'5'#255'333'#255'000'#255#0'"'#221#255#0#30#215#255#0#27#208#255#0#24#202#255 - +#29'!B'#255'!!!'#255#31#31#31#255#28#28#28#255#26#26#26'ohhh'#31'ggg'#255'ee' - ,'e'#255'bbb'#255'```'#255'[^g'#255'<h'#244#255'5e'#255#255'HZ'#149#255'SSS' - +#255'QQQ'#255'8Q'#167#255#30'O'#255#255#26'K'#255#255#21'G'#255#255#16'B'#255 - +#255#12'>'#255#255'.={'#255'<<<'#255':::'#255'888'#255'555'#255'333'#255#12 - +''''#182#255#0'"'#221#255#0#30#215#255#7#30#177#255'&&&'#255'$$$'#255'!!!' - +#255#31#31#31#255#28#28#28#31#0#0#0#0'iii'#191'ggg'#255'eee'#255'bbb'#255'In' - +#225#255'?n'#255#255':i'#255#255':c'#234#255'VVV'#255'SSS'#255'<T'#168#255'#' - +'T'#255#255#30'O'#255#255#26'K'#255#255#21'G'#255#255#16'B'#255#255'#?'#171 - +#255'<?K'#255'<<<'#255':::'#255'888'#255'555'#255'333'#255#30',s'#255#26'(z' - +#255'(*6'#255')))'#255'&&&'#255'$$$'#255'!!!'#191#0#0#0#0#0#0#0#0'kkk?iii' - +#255'ggg'#255'eee'#255'Lr'#225#255'Cr'#255#255'?n'#255#255':i'#255#255'<b' - +#223#255'8_'#223#255',\'#255#255'''X'#255#255'#T'#255#255#30'O'#255#255#26'K' - +#255#255#21'G'#255#255#16'B'#255#255#12'>'#255#255#21';'#206#255'<<<'#255'::' - +':'#255'888'#255'555'#255'333'#255'000'#255'...'#255'+++'#255')))'#255'&&&' - +#255'$$$?'#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#191'iii'#255'ggg'#255'agx'#255'It' - +#245#255'Cr'#255#255'?n'#255#255':i'#255#255'5e'#255#255'1a'#255#255',\'#255 - +#255'''X'#255#255'#T'#255#255#30'O'#255#255#26'K'#255#255#21'G'#255#255#16'B' - +#255#255#18'>'#231#255'???'#255'<<<'#255':::'#255'888'#255'555'#255'333'#255 - +'000'#255'...'#255'+++'#255')))'#191#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#31 - +'kkk'#239'iii'#255'ggg'#255'`h'#130#255'It'#245#255'Cr'#255#255'?n'#255#255 - +':i'#255#255'5e'#255#255'1a'#255#255',\'#255#255'''X'#255#255'#T'#255#255#30 - +'O'#255#255#26'K'#255#255#21'G'#255#255'.C'#149#255'AAA'#255'<?K'#255'9<H' - +#255':::'#255'888'#255'555'#255'333'#255'000'#255'...'#239'+++'#31#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk?kkk'#255'iii'#255'ggg'#255'agx'#255'Lr' - +#225#255'Cr'#255#255'?n'#255#255':i'#255#255'5e'#255#255'1a'#255#255',\'#255 - +#255'''X'#255#255'#T'#255#255#30'O'#255#255#26'K'#255#255#24'G'#243#255'.C' - +#149#255#15'>'#243#255#10':'#242#255'2;a'#255':::'#255'888'#255'555'#255'333' - +#255'000?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'kkk_kkk' - +#255'iii'#255'ggg'#255'eee'#255'Vj'#167#255'Ep'#245#255'?n'#255#255':i'#255 - +#255'5e'#255#255'1a'#255#255',\'#255#255'''X'#255#255'#T'#255#255#30'O'#255 - +#255#26'K'#255#255#21'G'#255#255#20'B'#243#255'*@'#148#255'???'#255'<<<'#255 - +':::'#255'888'#255'555_'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0'kkk?kkk'#239'iii'#255'ggg'#255'eee'#255'bbb'#255'Uf'#156 - +#255'Jg'#194#255'>g'#234#255'5e'#255#255'1a'#255#255',\'#255#255'''X'#255#255 - +'(S'#233#255'/M'#188#255'7J'#141#255'FFF'#255'DDD'#255'AAA'#255'???'#255'<<<' - +#239':::?'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0'kkk'#31'kkk'#191'iii'#255'ggg'#255'eee'#255'bbb'#255 - +'```'#255']]]'#255'[[['#255'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255'KKK' - +#255'III'#255'FFF'#255'DDD'#255'AAA'#191'???'#31#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0'kkk?iii'#191'ggg'#255'eee'#255'bbb'#255'```'#255']]]'#255'[[['#255 - +'XXX'#255'VVV'#255'SSS'#255'QQQ'#255'NNN'#255'KKK'#255'III'#191'FFF?'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'hhh'#31'fffoddd' - +#191'bbb'#239'```'#255']]]'#255'[[['#255'XXX'#255'VVV'#239'SSS'#191'PPPoNNN' - +#31#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#255#192#3#255#255#0#0#255#252#0#0'?'#248#0#0#31#240#0#0#15#224#0#0#7 - +#192#0#0#3#192#0#0#3#128#0#0#1#128#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#1#128#0 - +#0#1#192#0#0#3#192#0#0#3#224#0#0#7#240#0#0#15#248#0#0#31#252#0#0'?'#255#0#0 - +#255#255#192#3#255'('#0#0#0#16#0#0#0' '#0#0#0#1#0' '#0#0#0#0#0'@'#4#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'###_'#29#29#29#175 - +#24#24#24#255#19#19#19#255#14#14#14#255#9#9#9#255#5#5#5#175#1#1#1'_'#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'222'#31',,,'#191''''''''#255'"""' - +#255#23#26'9'#255#11#15'`'#255#8#9'W'#255#7#7'J'#255#7#7#26#255#4#4#4#255#0#0 - +#0#191#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0':::'#31'666'#239'111'#255',,,'#255 - +''''''''#255#26#30'I'#255#0#12#179#255#0#6#167#255#0#1#156#255#0#0#154#255#2 - +#2'c'#255#3#3#13#255#0#0#0#239#0#0#0#15#0#0#0#0#0#0#0#0'???'#207';;;'#255'66' - +'6'#255'111'#255',,,'#255'%&1'#255#11#23#141#255#7#16#140#255#0#6#167#255#0#1 - +#156#255#0#0#154#255#1#1'~'#255#3#3#13#255#0#0#0#191#0#0#0#0'HHH_DDD'#255'??' - +'?'#255';;;'#255'666'#255'111'#255',,,'#255''''''''#255#26#30'I'#255#0#12#179 - +#255#0#6#167#255#0#1#156#255#0#0#154#255#2#2'c'#255#4#4#4#255#1#1#1'_NNN'#175 - +'III'#255'ADP'#255#18';'#219#255#1'3'#252#255'$3q'#255'111'#255',,,'#255#10 - +#28#162#255#0#19#191#255#0#12#179#255#0#6#167#255#0#1#156#255#0#0#154#255#7#7 - +#26#255#5#5#5#175'TTT'#255'OOO'#255'=Jw'#255#18'C'#255#255#8';'#255#255#19'5' - ,#192#255'666'#255'111'#255'!(V'#255#7#28#172#255#4#21#172#255#0#12#179#255#10 - +#14'h'#255#4#4#130#255#7#7'J'#255#9#9#9#255'YYY'#255'TTT'#255'OOO'#255')J' - +#199#255#30'C'#208#255'5>c'#255';;;'#255'666'#255'$._'#255#8'"'#184#255#23'"' - +'f'#255#28#31'?'#255#27#28'&'#255#18#19':'#255#14#14'5'#255#14#14#14#255'^^^' - +#255'YYY'#255'TTT'#255'OOO'#255'III'#255'DDD'#255'???'#255'09_'#255#3','#229 - +#255#31',s'#255'&*B'#255''''''''#255'"""'#255#29#29#29#255#24#24#24#255#19#19 - +#19#255'ccc'#255'^^^'#255'YYY'#255'TTT'#255'OOO'#255'III'#255'>D['#255'???' - +#255#4'3'#240#255'!2}'#255'111'#255#30'(b'#255#0#25#204#255#18#27'h'#255#29 - +#29#29#255#24#24#24#255'ggg'#175'ccc'#255'\_h'#255'H`'#171#255'OUi'#255'CP{' - +#255#27'L'#255#255#24'D'#231#255#15';'#231#255'09_'#255'666'#255#25'+'#138 - +#255#0#31#216#255#14#30#142#255'"""'#255#29#29#29#175'jjj_hhh'#255'Ul'#177 - +#255'@n'#255#255'?c'#212#255'<Z'#190#255'$T'#255#255#27'L'#255#255#21'C'#243 - +#255'!='#170#255';;;'#255'666'#255'%.]'#255')+7'#255''''''''#255'###_'#0#0#0 - +#0'jjj'#207'fiq'#255'Ms'#226#255'@n'#255#255'6f'#255#255'-]'#255#255'$T'#255 - +#255#27'L'#255#255#24'C'#231#255'<?K'#255'7:G'#255'666'#255'111'#255',,,'#207 - +#0#0#0#0#0#0#0#0'kkk'#31'jjj'#239'fiq'#255'Pp'#207#255'@n'#255#255'6f'#255 - +#255'-]'#255#255'$T'#255#255#27'L'#255#255#24'C'#231#255' ='#171#255';;;'#255 - +'666'#239'222'#31#0#0#0#0#0#0#0#0#0#0#0#0'kkk'#31'jjj'#207'hhh'#255'_ew'#255 - +'Pe'#165#255'G_'#172#255'@X'#170#255';Q'#156#255'CJ`'#255'DDD'#255'???'#207 - +':::'#31#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'jjj_ggg'#175'ccc' - +#255'^^^'#255'YYY'#255'TTT'#255'NNN'#175'HHH_'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#240#15#0#0#192#3#0#0#128#1#0#0#128#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 - +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#1#0#0#128#1#0#0#192#3#0#0#240#15#0#0 -]); -LazarusResources.Add('RemObjectsHtmlServerDocumentationCss','CSS',[ - 'body, table, tr, td'#13#10'{'#13#10' backgrou' - +'nd-color: #f7f7f7;'#13#10' margin: 0;'#13#10 - +' padding: 0;'#13#10' ' - +' font-family: Verdana, Tahoma, Arial, Helvetica, sans serif;'#13#10 - +' font-size: 10pt;'#13#10'}'#13#10' ' - +' .header'#13#10' {'#13#10' ' - +' padding: 5px;'#13#10' bac' - +'kground-color: #c0c0c0;'#13#10' border-botto' - +'m: 5px solid #808080;'#13#10' font-size: 1.5' - +'em;'#13#10' }'#13#10' .body' - +#13#10' {'#13#10' padd' - +'ing: 5px;'#13#10' }'#13#10' .' - +'footer'#13#10' {'#13#10' ' - +' padding: 5px;'#13#10' border-top: 1px so' - +'lid #808080;'#13#10' font-size: 0.8em;'#13#10 - +' }'#13#10' .section'#13#10' ' - +' {'#13#10' margin-left: 25p' - +'x;'#13#10' padding-left: 3px;'#13#10' ' - +' padding-top: 3px;'#13#10' paddi' - +'ng-bottom: 3px;'#13#10' border-left: 1px solid #' - +'b0b0b0;'#13#10' border-bottom: 1px solid #b0b0b0' - +';'#13#10' }'#13#10' .h1'#13#10 - +' {'#13#10' font-size:' - +' 13pt;'#13#10' border-left: 1px solid #b0b0b0;' - +#13#10' border-bottom: 1px solid #b0b0b0;'#13#10 - +' }'#13#10' .h2'#13#10' ' - +' {'#13#10' font-size: 13pt;' - +#13#10' border-left: 1px solid #b0b0b0;'#13#10' ' - +' border-bottom: 1px solid #b0b0b0;'#13#10' ' - +' }'#13#10'p { margin-bottom: 0.75em; margin-top: 0; }'#13#10 - +'.h1, .h2, .h3, .h4, h4'#13#10'{'#13#10' margin-top: 1em;'#13#10' margin-b' - +'ottom: 0;'#13#10' padding-bottom: 0;'#13#10' padding-left: 3px;'#13#10' ' - +'font-weight: bold;'#13#10'}'#13#10'a { text-decoration: none }'#13#10'h2 { ' - +'font-size: 12pt; }'#13#10'h3 { font-size: 11pt; }'#13#10'h4 { font-size: 10' - +'pt; font-weight: normal; text-decoration: underline;}'#13#10'ul, ol { margi' - +'n-top: 0; margin-bottom: 0.75em; }'#13#10'pre { margin: 0 }'#13#10'pre, cod' - +'e'#13#10'{'#13#10' font: 100% Monospace, Courier New, Courier;'#13#10 - +' color: #000066;'#13#10'}'#13#10'.spaced'#13#10'{'#13#10' letter-spac' - +'ing: 1px;'#13#10' color: #000060;'#13#10'}'#13#10'table { padding: 0; }'#13 - +#10'tr { margin: 0; padding: 0; }'#13#10'td { margin: 0; }'#13#10'table, td ' - +'{ border: 1px dashed #c0c0c0; }'#13#10 -]); diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.pas deleted file mode 100644 index 0c82f8e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.pas +++ /dev/null @@ -1,174 +0,0 @@ -unit uROHtmlServerInfo; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface -uses - uRODL, uRODLToXML, uROServer, uROClasses, SysUtils, Classes; - - -function GetResourceAsString(aName: string): string; -function GetRodlServerInfo(const RootUrl: string; aRodl: TRODLLibrary; aDispatchers: TROMessageDispatchers): string; -function GetRodlStyleSheet: string; -function GetRodlWithStyleSheet(aRodl: TRODLLibrary; aStyleSheetUrl: string): String; -procedure GetRodlFavIcon(dest: TStream); -function GetRodlCss: string; -function GetVersion: string; - -implementation -uses - uROHTTPDispatch - {$IFDEF MSWINDOWS},Windows, ShellAPI {$ENDIF} - {$IFDEF LINUX},Types, Libc {$ENDIF}; - -{$R uROHtmlServerInfo.res} - -type - TVersion = record - Major : word; - Minor : word; - Release : word; - Build : word; - end; - - -function GetResourceAsString(aName: string): string; -var - lRes: TResourceStream; -begin - lRes := TResourceStream.Create(HInstance, aName, RT_RCDATA); - try - SetLength(Result, lRes.Size); - lRes.Read(Result[1], Length(Result)); - finally - lRes.Free; - end; -end; - -function GetRodlCss: string; -begin - result := GetResourceAsString('RemObjectsHtmlServerDocumentationCss'); -end; - -function GetRodlWithStyleSheet( - aRodl: TRODLLibrary; aStyleSheetUrl: string): String; -var - lRodlToXml: TRODLToXML; -begin - lRodlToXml := TRODLToXML.Create(nil,''); - try - lRodlToXml.StyleSheet := aStyleSheetUrl; - lRodlToXml.Convert(aRodl); - Result := lRodlToXml.Buffer.Text; - finally - lRodlToXml.Free; - end; -end; - -function GetRodlServerInfo(const RootUrl: string; aRodl: TRODLLibrary; aDispatchers: TROMessageDispatchers): string; -var - lUrl, lPath, s: string; - i: Integer; -begin - s := ''; - lUrl := RootUrl; - if lUrl = '' then lUrl := '/' else - if lUrl[Length(lUrl)] <> '/' then lUrl := lUrl + '/'; - - - Result := GetResourceAsString('RemObjectsHtmlServerInfo'); - Result := StringReplace(Result, '%BASEPATH%', lUrl, [rfReplaceall]); - Result := StringReplace(Result, '%NAME%', aRodl.Name, [rfReplaceall]); - Result := StringReplace(Result, '%DOC%', aRodl.Documentation, [rfReplaceall]); - - for i := 0 to aDispatchers.Count -1 do - begin - lPath := TROHTTPDispatcher(aDispatchers[i]).PathInfo; - if lPath = '' then continue; - if lPath[1] = '/' then Delete(lPath, 1, 1); - s := s + '<li><a href="' + lUrl + lPath + '">' + - lPath + '</a> <i>(' + aDispatchers[i].Message.ClassName + - ')</i></li>'; - end; - - Result := StringReplace(Result, '%DISPATCHERS%', s, [rfReplaceall]); - Result := StringReplace(Result, '%RO%', GetVersion(), [rfReplaceall]); - -end; - -function GetRodlStyleSheet: string; -begin - Result := GetResourceAsString('RemObjectsHtmlServerDocumentation'); -end; - -procedure GetRodlFavIcon(dest: TStream); -var - fs: TResourceStream; -begin - fs := TResourceStream.Create(HInstance, 'RemObjectsHtmlIcon', RT_RCDATA); - try - dest.CopyFrom(fs, fs.Size); - finally - fs.Free; - end; -end; - -{$IFNDEF LINUX} -function GetFileVer(iFileName: string):TVersion; -var whocares:dword; - Size:dword; - Data:pointer; - FixedData:pVSFixedFileInfo; -begin - Size := GetFileVersionInfoSize(pChar(iFileName), whocares); - if Size > 0 then begin - GetMem(Data,Size); - try - if GetFileVersionInfo(pChar(iFileName),0,Size,Data) then begin - Size := sizeof(TVSFixedFileInfo); - if VerQueryValue(Data,'\',pointer(FixedData),Size) then begin - result.Major := HiWord(FixedData^.dwFileVersionMS); - result.Minor := LoWord(FixedData^.dwFileVersionMS); - result.Release := HiWord(FixedData^.dwFileVersionLS); - result.Build := LoWord(FixedData^.dwFileVersionLS); - end; - end; - finally - FreeMem(Data); - end; - end; -end; -{$ENDIF LINUX} - -function GetVersion:string; -{$IFNDEF LINUX} -var - Version:TVersion; -{$ENDIF LINUX} -begin -{$IFNDEF LINUX} - {$IFDEF FPC} - Version := GetFileVer(ParamStr(0)); - {$ELSE} - Version := GetFileVer(GetModuleName(hInstance)); - {$ENDIF} - result := 'v' + IntToStr(Version.Major)+'.'+IntToStr(Version.Minor)+'.'+ - IntToStr(Version.Release)+'.'+IntToStr(Version.Build); -{$ELSE} - Result:=''; -{$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.rc b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.rc deleted file mode 100644 index a7b245f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.rc +++ /dev/null @@ -1,4 +0,0 @@ -RemObjectsHtmlServerDocumentation RCDATA DISCARDABLE "uROHtmlServerInfoRes.xsl" -RemObjectsHtmlServerInfo RCDATA DISCARDABLE "uROHtmlServerInfoRes.html" -RemObjectsHtmlIcon RCDATA DISCARDABLE "uROHtmlServerInfoRes.ico" -RemObjectsHtmlServerDocumentationCss RCDATA DISCARDABLE "uROHtmlServerInfoRes.css" diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.res deleted file mode 100644 index baa2e22..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfo.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.css b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.css deleted file mode 100644 index dcd3e5c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.css +++ /dev/null @@ -1,75 +0,0 @@ -body, table, tr, td -{ - background-color: #f7f7f7; - margin: 0; - padding: 0; - font-family: Verdana, Tahoma, Arial, Helvetica, sans serif; - font-size: 10pt; -} - .header - { - padding: 5px; - background-color: #c0c0c0; - border-bottom: 5px solid #808080; - font-size: 1.5em; - } - .body - { - padding: 5px; - } - .footer - { - padding: 5px; - border-top: 1px solid #808080; - font-size: 0.8em; - } - .section - { - margin-left: 25px; - padding-left: 3px; - padding-top: 3px; - padding-bottom: 3px; - border-left: 1px solid #b0b0b0; - border-bottom: 1px solid #b0b0b0; - } - .h1 - { - font-size: 13pt; - border-left: 1px solid #b0b0b0; - border-bottom: 1px solid #b0b0b0; - } - .h2 - { - font-size: 13pt; - border-left: 1px solid #b0b0b0; - border-bottom: 1px solid #b0b0b0; - } -p { margin-bottom: 0.75em; margin-top: 0; } -.h1, .h2, .h3, .h4, h4 -{ - margin-top: 1em; - margin-bottom: 0; - padding-bottom: 0; - padding-left: 3px; - font-weight: bold; -} -a { text-decoration: none } -h2 { font-size: 12pt; } -h3 { font-size: 11pt; } -h4 { font-size: 10pt; font-weight: normal; text-decoration: underline;} -ul, ol { margin-top: 0; margin-bottom: 0.75em; } -pre { margin: 0 } -pre, code -{ - font: 100% Monospace, Courier New, Courier; - color: #000066; -} -.spaced -{ - letter-spacing: 1px; - color: #000060; -} -table { padding: 0; } -tr { margin: 0; padding: 0; } -td { margin: 0; } -table, td { border: 1px dashed #c0c0c0; } diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.html b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.html deleted file mode 100644 index de02e04..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> - <head> - <title>%NAME% - RemObjects SDK for .NET %RO% - - - -
- %NAME% -
-
- %DOC% -

View full documentation | View RODL

-

Available Dispatchers:

-
    - %DISPATCHERS% -
-
- - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.ico deleted file mode 100644 index 282d455..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.xsl b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.xsl deleted file mode 100644 index 62b9564..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROHtmlServerInfoRes.xsl +++ /dev/null @@ -1,753 +0,0 @@ - - - - - - - - - - <xsl:value-of select="@Name"/> documentation - - - -
- - -
-
- - - -
Table Of Contents
-

This document is split into the following sections:

- - -

- Library Description: -

- - - - - .EventSinks - - - - - .Structs - - - - - .Enums - - - - - .Arrays - - - - - .Exceptions - - - - - .Uses - - -
- - - -
- - - - .Services - -
Services
-
-

The following table lists the Services defined in "":

- - - - - - - -
- - # - - - - -
- -
-
- - - - - -
- Service -
-
-

The following table lists the Operations defined in "":

- - - - - - - -
- - #. - - - - -
- -
-
-
- - - - .Services - -
Event Sinks
-
-

The following table lists the Event Sinks defined in "":

- - - - - - - -
- - # - - - - -
- -
-
- - - - - -
Event Sink
-
-

The following table lists the Events defined in "":

- - - - - - - -
- - #. - - - - -
- -
-
-
- - - - - - . - -

- Method -

-

- -

- -
-
- - - - . - -

- Event -

-

- -

- -
-
- - -

Chrome Syntax:

- - - method - .( - - - - ) - - - - ; - -

C# Syntax:

- - - - public - - - public void - - - .( - - - - ); - - - -
- - - None. - - -

- -

- Dear RemObjects Team: Please add a Parameter documentation to your rodl-file! -
-
-
-
- - - None. - - - - Dear RemObjects Team: Please add a Parameter documentation to your rodl-file! - - - - - - - - - - - - - - - - - - - - - - : - - : - - ; - - - : - ; - - - : - - - - - - - - - - - - - - - - , - - - - - - - - , - - - - - - - - - - - - - - - const - - - var - - - - - - - - - - Int32 - - - String - - - - - - - - - - - - - - - ref - - - out - - - - - - - - .Structs - -
Structs
-
-

The following table lists the Structs defined in "":

- - - - - - - -
- - # - - - - -
-
-
- - - - - - - -
- Struct
-

- -

-

Members

- -

- -

-

Datatype: - - -

-
-
- - - - - - # - - - - - - - - - - - - .Enums - -
Enums
-
-

The following table lists the Enums defined in "":

- - - - - - - -
- - # - - - - -
-
-
- - - - - - - -
- Enumerations
-

- -

- - - - - - - - - - - - - -
Enumerated Type ValueDEC ValueHEX Value
- - - - - 0x - - -
-
- - - How to convert Dec 2 Hex? - - - - - - .Arrays - -
Arrays
-
- -

The following table lists the Arrays defined in "":

- - - - - - - -
- - # - - - - -
-
-
- - - - - - - -
- Array
-

- -

-

Element Type: - - - -

-
- - - - .Exceptions - -
Exceptions
-
-

The following table lists the Exceptions defined in "":

- - - - - - - -
- - - -
-
-
- - - - - - - -
- Exception Struct
-

- -

-

Members

- -

- -

-

Datatype: - - -

-
-
- - - - - .Uses - -
- Used RODL Files -
-
-

The following table lists the external RODL files used by library "":

- - - - - - - - - - -
- - - -
- -
-
-
-
diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIdeOnly.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIdeOnly.pas deleted file mode 100644 index e97bb0f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIdeOnly.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit uROIdeOnly; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -implementation -{$IFNDEF FPC} -{$IFDEF WINDOWS} -uses Forms, Dialogs; - -initialization - if (not Assigned(Application)) or - (not Assigned(Application.MainForm)) or - (Application.MainForm.ClassName <> 'TAppBuilder') then begin - ShowMessage('The RemObjects SDK Packages may only be used at designtime.'); - Application.Terminate; - end; -{$ENDIF WINDOWS} -{$ENDIF FPC} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmail.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmail.pas deleted file mode 100644 index 363f415..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmail.pas +++ /dev/null @@ -1,78 +0,0 @@ -unit uROIndyEmail; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, IdSMTP; - -procedure SendMessage(aSmtpClient:TIdSmtp; aMessage:TStream; const aType,aMessageID:string; const aFrom,aTo:string); - -const - MESSAGE_FILE_EXTENSION = '.dat'; - -implementation - -uses - {$IFDEF RemObjects_INDY10} IdAttachmentFile, {$ENDIF} - SysUtils, IdMessage, uROClasses; - -procedure SendMessage(aSmtpClient:TIdSmtp; aMessage:TStream; const aType,aMessageID:string; const aFrom,aTo:string); -var - lMessage:TIdMessage; - lTempFile:string; -begin - lMessage := TIdMessage.Create(nil); - try - lMessage.From.Address := aFrom; - lMessage.Recipients.Add.Address := aTo; - lMessage.Subject := aType+' '+aMessageID; - lMessage.Body.Text := 'RemObjects SDK Email Channel. http://www.remobjects.com'; - lMessage.Headers.Add('X-Mailer: RemObjects SDK Email Channel'); - - { This is SO lame. unfortunately Indy doesnt allow to send a stream without - major work & rewriting stuff. which we _will_ do later. } - lTempFile := GetTempPath+aMessageID+MESSAGE_FILE_EXTENSION; - try - with TFileStream.Create(lTempFile,fmCreate) do try - aMessage.Seek(0,soFromBeginning); - CopyFrom(aMessage,aMessage.Size); - finally - Free(); - end; - {$IFDEF RemObjects_INDY10} - TIdAttachmentFile.Create(lMessage.MessageParts, lTempFile); - {$ELSE} - TIdAttachment.Create(lMessage.MessageParts, lTempFile); - {$ENDIF} - - aSmtpClient.Connect(); - try - aSmtpClient.Send(lMessage); - finally - aSmtpClient.Disconnect(); - end; - - finally - DeleteFile(lTempFile); - end; - - finally - lMessage.Free(); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailChannel.pas deleted file mode 100644 index 54cffb1..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailChannel.pas +++ /dev/null @@ -1,319 +0,0 @@ -unit uROIndyEmailChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, - IdBaseComponent, - {$IFDEF RemObjects_INDY10} IdAttachment, {$ENDIF} - uROClient, uROClientIntf, uROAsync, IdSMTP, IdPOP3; - -type - TROCustomEmailChannel = class(TROTransportChannel, IROTransport, IROAsyncTransportChannel) - private - fClientEmail: string; - fServerEmail: string; - fSmtpClient: TIdSMTP; - fPop3Client: TIdPOP3; - fDeleteOldResponses: boolean; - procedure SetSmtpClient(const Value: TIdSMTP); - function GetSmtpServerAddress: string; - procedure SetSmtpServerAddress(const Value: string); - procedure SetPopClient(const Value: TIdPOP3); - function GetPop3ServerAddress: string; - procedure SetPop3ServerAddress(const Value: string); - function GetPop3Password: string; - function GetPop3username: string; - procedure SetPop3password(const Value: string); - procedure SetPop3Username(const Value: string); - protected - { IROTransport } - function GetTransportObject: TObject; override; - - { IROAsyncTransport } - function CheckStatus(const iMessageID:string):Boolean; - function InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string; - procedure RetrieveResponse(const aMessageID:string; aResponse:TStream); - - procedure IntDispatch(aRequest, aResponse : TStream); override; - - public - constructor Create(aOwner:TComponent); override; - destructor Destroy; override; - - public { for publishing in descendand classes } - property Pop3ServerAddress:string read GetPop3ServerAddress write SetPop3ServerAddress; - property SmtpServerAddress:string read GetSmtpServerAddress write SetSmtpServerAddress; - property ServerEmail:string read fServerEmail write fServerEmail; - property ClientEmail:string read fClientEmail write fClientEmail; - property SmtpClient:TIdSMTP read fSmtpClient write SetSmtpClient; - property Pop3Client:TIdPOP3 read fPop3Client write SetPopClient; - property Pop3Username: string read GetPop3username write SetPop3Username; - property Pop3Password: string read GetPop3Password write SetPop3password; - property DeleteOldResponses:boolean read fDeleteOldResponses write fDeleteOldResponses default false; - procedure CheckProperties; override; - end; - - TROEmailChannel = class(TROCustomEmailChannel) - published - property Pop3ServerAddress; - property SmtpServerAddress; - property ServerEmail; - property ClientEmail; - property SmtpClient; - property Pop3Client; - property Pop3Username; - property Pop3Password; - property DeleteOldResponses; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - -implementation - -uses - {$IFDEF DELPHI5}Windows,{$ENDIF} - SysUtils, IdMessage, uROClasses, {$IFDEF RemObjects_INDY9}IdMessageCoder,{$ENDIF} - uROIndyEmail; - -{ TROCustomEmailChannel } - -constructor TROCustomEmailChannel.Create(aOwner: TComponent); -begin - inherited; - fSmtpClient := TIdSMTP.Create(self); - fSmtpClient.Name := 'InternalSmtpClient'; - fPop3Client := TIdPOP3.Create(self); - fPop3Client.Name := 'InternalPop3Client'; - {$IFDEF VER140UP} - fSmtpClient.SetSubComponent(true); - fPop3Client.SetSubComponent(true); - {$ENDIF VER140UP} -end; - -destructor TROCustomEmailChannel.Destroy; -begin - FreeAndNil(fSmtpClient); - FreeAndNil(fPop3Client); - inherited; -end; - - -function TROCustomEmailChannel.GetTransportObject: TObject; -begin - result := self; -end; - -procedure TROCustomEmailChannel.SetSmtpClient(const Value: TIdSMTP); -begin - fSmtpClient.Assign(Value); -end; - -function TROCustomEmailChannel.GetSmtpServerAddress: string; -begin - result := fSmtpClient.Host; -end; - -procedure TROCustomEmailChannel.SetSmtpServerAddress(const Value: string); -begin - fSmtpClient.Host := Value; -end; - -procedure TROCustomEmailChannel.SetPopClient(const Value: TIdPOP3); -begin - fPop3Client.Assign(Value); -end; - -function TROCustomEmailChannel.GetPop3Password: string; -begin - result := fPop3Client.Password; -end; - -function TROCustomEmailChannel.GetPop3ServerAddress: string; -begin - result := fPop3Client.Host; -end; - -function TROCustomEmailChannel.GetPop3username: string; -begin - {$IFDEF RemObjects_INDY8} - result := fPop3Client.UserId; - {$ELSE} - result := fPop3Client.Username; - {$ENDIF RemObjects_INDY8} -end; - -procedure TROCustomEmailChannel.SetPop3password(const Value: string); -begin - fPop3Client.Password := Value; -end; - -procedure TROCustomEmailChannel.SetPop3ServerAddress(const Value: string); -begin - fPop3Client.Host := Value; -end; - -procedure TROCustomEmailChannel.SetPop3Username(const Value: string); -begin - {$IFDEF RemObjects_INDY8} - fPop3Client.UserId := Value; - {$ELSE} - fPop3Client.Username := Value; - {$ENDIF RemObjects_INDY8} -end; - -procedure TROCustomEmailChannel.IntDispatch(aRequest, aResponse: TStream); -var - lMessageID:string; -begin - lMessageID := InvokeRequest(aRequest); - while not CheckStatus(lMessageID) do Sleep(1000); //ToDo: this is a lame workaround to get synchronous requests running now. - RetrieveResponse(lMessageID,aResponse); -end; - -function TROCustomEmailChannel.InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string; -begin - CheckProperties; - try - result := NewGuidAsString(); - uROIndyEmail.SendMessage(fSmtpClient,aRequest,REQUEST_MESSAGE_PREFIX,result,ClientEmail,ServerEmail); - finally - aRequest.Free(); - end; -end; - -function TROCustomEmailChannel.CheckStatus(const iMessageID:string):Boolean; -var - i:integer; - lMessage:TIdMessage; -begin - CheckProperties; - result := false; - fPop3Client.Connect(); - try - for i := 1 to fPop3Client.CheckMessages do begin - lMessage := TIdMessage.Create(fPop3Client); - try - if fPop3Client.RetrieveHeader(i,lMessage) and - (lMessage.Subject = RESPONSE_MESSAGE_PREFIX+' '+iMessageID) then begin - result := true; - exit; - end; - finally - FreeAndNil(lMessage); - end; - end; - finally - fPop3Client.Disconnect(); - end; -end; - -procedure TROCustomEmailChannel.RetrieveResponse(const aMessageID:string; aResponse:TStream); -var - i,j:integer; - lMessage:TIdMessage; - lAttachment:TIdAttachment; - lTempFile:string; - lFileStream:TFileStream; - lSuccess:boolean; -begin - lSuccess := false; - CheckProperties; - fPop3Client.Connect(); - try - for i := 1 to fPop3Client.CheckMessages do begin - lMessage := TIdMessage.Create(fPop3Client); - try - if fPop3Client.RetrieveHeader(i,lMessage) then begin - if (lMessage.Subject = RESPONSE_MESSAGE_PREFIX+' '+aMessageID) then begin - - fPop3Client.Retrieve(i,lMessage); - for j := 0 to lMessage.MessageParts.Count-1 do begin - - if (lMessage.MessageParts[j] is TIdAttachment) then begin - - lAttachment := TIdAttachment(lMessage.MessageParts[j]); - if lAttachment.Filename = aMessageID+MESSAGE_FILE_EXTENSION then begin - lTempFile := GetTempPath+lAttachment.Filename; - lAttachment.SaveToFile(lTempFile); - try - lFileStream := TFileStream.Create(lTempFile,fmOpenRead); - try - aResponse.CopyFrom(lFileStream,lFileStream.Size); - finally - lFileStream.Free(); - end; - finally - DeleteFile(lTempFile); - end; - lSuccess := true; - - fPop3Client.Delete(i); - if not DeleteOldResponses then exit; - end; - if not lSuccess then RaiseError('Invalid Response email found for this communication: No response message attachment.'); - end; - end; - - end - else if DeleteOldResponses and (Pos(RESPONSE_MESSAGE_PREFIX+' ', lMessage.Subject) = 1) then begin - fPop3Client.Delete(i); - end; - - end; - finally - FreeAndNil(lMessage); - end; - end; - finally - fPop3Client.Disconnect(); - end; - - if not lSuccess then - raise EROAsyncNoAnswerYet.Create('No Response email found for this communication, yet.'); -end; - -procedure TROCustomEmailChannel.CheckProperties; -begin - inherited; - Check(Pop3ServerAddress = '', Name + '.Pop3ServerAddress must be set.'); - Check(SmtpServerAddress = '', Name + '.SmtpServerAddress must be set.'); - Check(ServerEmail = '', Name + '.ServerEmail must be set.'); - Check(ClientEmail = '', Name + '.ClientEmail must be set.'); - Check(Pop3Username = '', Name + '.Pop3Username must be set.'); - Check(Pop3Password = '', Name + '.Pop3Password must be set.'); -end; - -initialization - RegisterTransportChannelClass(TROEmailChannel); - -finalization - UnRegisterTransportChannelClass(TROEmailChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailServer.pas deleted file mode 100644 index c910724..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyEmailServer.pas +++ /dev/null @@ -1,385 +0,0 @@ -unit uROIndyEmailServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, - IdBaseComponent, IdSMTP, IdPOP3, - {$IFDEF RemObjects_INDY10} IdAttachment, {$ENDIF} - uROClientIntf, uROServer, uROThread, SyncObjs, SysUtils; - -type - TROEmailServerThread = class; - - TROExceptionEvent = procedure (aSender:TObject; aExceptionClass:TClass; const aExceptionMessage:string) of object; - - TROCustomEmailServer = class(TROServer, IROTransport) - private - fServerEmail: string; - fSmtpClient: TIdSMTP; - fPop3Client: TIdPOP3; - fPop3CheckInterval: integer; - fWorkThread: TROEmailServerThread; - fOnException: TROExceptionEvent; - procedure SetSmtpClient(const Value: TIdSMTP); - function GetSmtpServerAddress: string; - procedure SetSmtpServerAddress(const Value: string); - procedure SetPopClient(const Value: TIdPOP3); - function GetPop3ServerAddress: string; - procedure SetPop3ServerAddress(const Value: string); - procedure SetPop3CheckInterval(const Value: integer); - - procedure TriggerOnException(aExceptionClass:TClass; const aExceptionMessage:string); - function GetPop3Password: string; - function GetPop3username: string; - procedure SetPop3password(const Value: string); - procedure SetPop3Username(const Value: string); - - public - constructor Create(aOwner:TComponent); override; - destructor Destroy; override; - - protected - function GetTransportObject: TObject; - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - public { for publishing in descendand classes } - property Pop3ServerAddress:string read GetPop3ServerAddress write SetPop3ServerAddress; - property SmtpServerAddress:string read GetSmtpServerAddress write SetSmtpServerAddress; - property ServerEmail:string read fServerEmail write fServerEmail; - property SmtpClient:TIdSMTP read fSmtpClient write SetSmtpClient; - property Pop3Client:TIdPOP3 read fPop3Client write SetPopClient; - property Pop3Username: string read GetPop3username write SetPop3Username; - property Pop3Password: string read GetPop3Password write SetPop3password; - property Pop3CheckInterval:integer read fPop3CheckInterval write SetPop3CheckInterval default 60; - property OnException:TROExceptionEvent read fOnException write fOnException; - procedure CheckProperties; override; - end; - - TROEmailServer = class(TROCustomEmailServer) - property Pop3ServerAddress; - property SmtpServerAddress; - property ServerEmail; - property SmtpClient; - property Pop3Client; - property Pop3Username; - property Pop3Password; - property Pop3CheckInterval; - property OnException; - end; - - TROEmailServerThread = class(TROServerCheckMessageThread) - private - fSync_ExceptionClass:TClass; - fSync_aExceptionMessage:string; - procedure Sync_TriggerOnException(aExceptionClass:TClass; const aExceptionMessage:string); - procedure Synced_TriggerOnException; - protected - procedure CheckForMessages; override; - procedure ProcessMessage(aRequest:TStream; const aMessageID,aFrom:string); - public - constructor Create(aOwner:TROCustomEmailServer); reintroduce; - end; - - TROEmailServerProcessMessageThread = class(TROThread) - private - fOwner:TROCustomEmailServer; - fRequest:TStream; - fMessageID:string; - fFrom:string; - protected - procedure Execute; override; - public - constructor Create(aOwner:TROCustomEmailServer; aRequest:TStream; const aMessageID,aFrom:string); reintroduce; - destructor Destroy; override; - end; - -implementation - -uses - IdMessage, - uROAsync, uROClasses, uROIndyEmail, uROServerIntf; - -{ TROCustomEmailServer } - -procedure TROCustomEmailServer.CheckProperties; -begin - inherited; - if not (csDesigning in ComponentState) then begin - Check(Pop3ServerAddress = '', Name + '.Pop3ServerAddress must be set.'); - Check(SmtpServerAddress = '', Name + '.SmtpServerAddress must be set.'); - Check(ServerEmail = '', Name + '.ServerEmail must be set.'); - Check(Pop3Username = '', Name + '.Pop3Username must be set.'); - Check(Pop3Password = '', Name + '.Pop3Password must be set.'); - end; -end; - -constructor TROCustomEmailServer.Create(aOwner: TComponent); -begin - inherited; - fSmtpClient := TIdSMTP.Create(self); - fSmtpClient.Name := 'InternalSmtpClient'; - fPop3Client := TIdPOP3.Create(self); - fPop3Client.Name := 'InternalPop3Client'; - Pop3CheckInterval := 60; - {$IFDEF VER140UP} - fSmtpClient.SetSubComponent(true); - fPop3Client.SetSubComponent(true); - {$ENDIF VER140UP} - fWorkThread := TROEmailServerThread.Create(self); -end; - -destructor TROCustomEmailServer.Destroy; -begin - fWorkThread.Free; - FreeAndNil(fSmtpClient); - FreeAndNil(fPop3Client); - inherited; -end; - -function TROCustomEmailServer.GetPop3Password: string; -begin - result := fPop3Client.Password; -end; - -function TROCustomEmailServer.GetPop3ServerAddress: string; -begin - result := fPop3Client.Host; -end; - -function TROCustomEmailServer.GetPop3username: string; -begin - {$IFDEF RemObjects_INDY8} - result := fPop3Client.UserId; - {$ELSE} - result := fPop3Client.Username; - {$ENDIF RemObjects_INDY8} -end; - -function TROCustomEmailServer.GetSmtpServerAddress: string; -begin - result := fSmtpClient.Host; -end; - -function TROCustomEmailServer.GetTransportObject: TObject; -begin - result := self; -end; - -function TROCustomEmailServer.IntGetActive: boolean; -begin - result := fWorkThread.Active; -end; - -procedure TROCustomEmailServer.IntSetActive(const Value: boolean); -begin - CheckProperties; - fWorkThread.Active := Value; -end; - -procedure TROCustomEmailServer.SetPop3CheckInterval(const Value: integer); -begin - fPop3CheckInterval := Value; -end; - -procedure TROCustomEmailServer.SetPop3password(const Value: string); -begin - fPop3Client.Password := Value; -end; - -procedure TROCustomEmailServer.SetPop3ServerAddress(const Value: string); -begin - fPop3Client.Host := Value; -end; - -procedure TROCustomEmailServer.SetPop3Username(const Value: string); -begin - {$IFDEF RemObjects_INDY8} - fPop3Client.UserId := Value; - {$ELSE} - fPop3Client.Username := Value; - {$ENDIF RemObjects_INDY8} -end; - -procedure TROCustomEmailServer.SetPopClient(const Value: TIdPOP3); -begin - fPop3Client.Assign(Value); -end; - -procedure TROCustomEmailServer.SetSmtpClient(const Value: TIdSMTP); -begin - fSmtpClient.Assign(Value); -end; - -procedure TROCustomEmailServer.SetSmtpServerAddress(const Value: string); -begin - fSmtpClient.Host := Value; -end; - -procedure TROCustomEmailServer.TriggerOnException(aExceptionClass: TClass; const aExceptionMessage: string); -begin - if Assigned(OnException) then - OnException(self, aExceptionClass, aExceptionMessage); -end; - -{ TROEmailServerThread } - -constructor TROEmailServerThread.Create(aOwner:TROCustomEmailServer); -begin - inherited Create('RemObjects Email Server Worker Thread',aOwner,aOwner.Pop3CheckInterval); -end; - -procedure TROEmailServerThread.CheckForMessages; -var - i,j:integer; - lMessage:TIdMessage; - lAttachment:TIdAttachment; - lTempFile:string; - lFileStream:TFileStream; - lRequest:TMemoryStream; - lMessageID:string; - lOwner:TROCustomEmailServer; -begin - if Terminated then Exit; - try - - lOwner := Owner as TROCustomEmailServer; - - lOwner.Pop3Client.Connect(); - try - for i := 1 to lOwner.Pop3Client.CheckMessages do begin - lMessage := TIdMessage.Create(lOwner.Pop3Client); - try - if lOwner.Pop3Client.RetrieveHeader(i,lMessage) then begin - if Pos(REQUEST_MESSAGE_PREFIX+' ',lMessage.Subject) = 1 then begin - - lMessageID := lMessage.Subject; - Delete(lMessageID,1,Length(REQUEST_MESSAGE_PREFIX)+1); - - lOwner.Pop3Client.Retrieve(i,lMessage); - for j := 0 to lMessage.MessageParts.Count-1 do begin - - if (lMessage.MessageParts[j] is TIdAttachment) then begin - - lAttachment := TIdAttachment(lMessage.MessageParts[j]); - if lAttachment.Filename = lMessageID+MESSAGE_FILE_EXTENSION then begin - - lRequest := TMemoryStream.Create(); - try - - lTempFile := GetTempPath+lAttachment.Filename; - lAttachment.SaveToFile(lTempFile); - try - lFileStream := TFileStream.Create(lTempFile,fmOpenRead); - try - lRequest.CopyFrom(lFileStream,lFileStream.Size); - finally - lFileStream.Free(); - end; - finally - DeleteFile(lTempFile); - end; - ProcessMessage(lRequest,lMessageID,lMessage.From.Address); - - finally - //lRequest will be freed by worker thread. - end; - - lOwner.Pop3Client.Delete(i); - end; - end; - end; - - end; - - end; - finally - FreeAndNil(lMessage); - end; - end; - finally - lOwner.Pop3Client.Disconnect(); - end; - - except - on E:Exception do begin - Sync_TriggerOnException(E.ClassType, E.Message); - end; - end; -end; - -procedure TROEmailServerThread.ProcessMessage(aRequest: TStream; const aMessageID, aFrom: string); -begin - TROEmailServerProcessMessageThread.Create(Owner as TROCustomEmailServer, aRequest, aMessageID, aFrom); -end; - -procedure TROEmailServerThread.Sync_TriggerOnException(aExceptionClass:TClass; const aExceptionMessage:string); -begin - if Terminated then exit; - fSync_ExceptionClass := aExceptionClass; - fSync_aExceptionMessage := aExceptionMessage; - Synchronize(Synced_TriggerOnException); -end; - -procedure TROEmailServerThread.Synced_TriggerOnException; -begin - (Owner as TROCustomEmailServer).TriggerOnException(fSync_ExceptionClass,fSync_aExceptionMessage); -end; - -{ TROEmailServerProcessMessageThread } - -constructor TROEmailServerProcessMessageThread.Create(aOwner: TROCustomEmailServer; aRequest: TStream; const aMessageID, aFrom: string); -begin - inherited Create(true,'TROEmailServer Message Processing Thread'); - fOwner := aOwner; - fRequest := aRequest; - fMessageID := aMessageID; - fFrom := aFrom; - FreeOnTerminate := true; - Resume(); -end; - -destructor TROEmailServerProcessMessageThread.Destroy; -begin - FreeAndNil(fRequest); - inherited; -end; - -procedure TROEmailServerProcessMessageThread.Execute; -var - lResponse:TStream; - lResponseOptions:TROResponseOptions; -begin - inherited; - - lResponse := TMemoryStream.Create(); - try - fOwner.DispatchMessage(fOwner, fRequest, lResponse, lResponseOptions); - if not (roNoResponse in lResponseOptions) then begin - uROIndyEmail.SendMessage(fOwner.SmtpClient, lResponse, RESPONSE_MESSAGE_PREFIX, fMessageID, fOwner.ServerEmail, fFrom); - end; - finally - lResponse.Free(); - end; -end; - -initialization - RegisterServerClass(TROEmailServer); -finalization - UnregisterServerClass(TROEmailServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPChannel.pas deleted file mode 100644 index 6e45e45..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPChannel.pas +++ /dev/null @@ -1,221 +0,0 @@ -unit uROIndyHTTPChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROClientIntf, uROIndyTCPChannel, IdTCPCLient, IdHTTP; - -type - { TROIndyHTTPChannel } - TROIndyHTTPChannel = class(TROCustomIndyTCPChannel, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fTargetURL: string; - - function GetIndyClient: TIdHTTP; - - protected - procedure IntDispatch(aRequest, aResponse : TStream); override; - function CreateIndyClient : TIdTCPClientBaseClass; override; - - { IROTCPTransport } - function GetClientAddress : string; - - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - function GetContentType : string; - procedure SetContentType(const aValue : string); - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - - procedure SetTargetURL(const Value: string); - function GetTargetURL: string; - - function GetPathInfo : string; - function GetLocation : string; - function GetQueryString: String; - procedure IntSetServerLocator(aServerLocator: TROServerLocator); override; - public - procedure SetPathInfo(const aValue: String); - procedure CheckProperties; override; - published - property IndyClient : TIdHTTP read GetIndyClient; - - property TargetURL : string read GetTargetURL write SetTargetURL; - property KeepAlive; - end; - -implementation - -uses - SysUtils, IdException, uROClient, - uRORes, uROHTTPTools, uROClasses; - -{ TROIndyHTTPChannel } -function TROIndyHTTPChannel.CreateIndyClient: TIdTCPClientBaseClass; -begin - result := TIdHTTP.Create(Self); - TIdHTTP(result).Request.UserAgent := str_ProductName; - TIdIndy10HackClient(result).Port := 80; - TIdIndy10HackClient(result).Host := '127.0.0.1'; - TargetURL := ''; -end; - -function TROIndyHTTPChannel.GetTargetURL: string; -begin - result := fTargetURL; -end; - -procedure TROIndyHTTPChannel.SetTargetURL(const Value: string); -begin - fTargetURL := Trim(Value) -end; - -function TROIndyHTTPChannel.GetIndyClient: TIdHTTP; -begin - result := TIdHTTP(inherited IndyClient); -end; - -procedure TROIndyHTTPChannel.IntDispatch(aRequest, aResponse : TStream); -{$IFNDEF RemObjects_INDY8} -var - lErrorResponse:string; -{$ENDIF} -begin - CheckProperties; - {$IFDEF DESIGNTIME} - {$IFDEF MSWINDOWS} - NoIndyAtDesigntime(); - {$ENDIF MSWINDOWS} - {$ENDIF DESIGNTIME} - - - try - {$IFNDEF RemObjects_INDY8} - if KeepAlive then - IndyClient.HTTPOptions := IndyClient.HTTPOptions + [hoKeepOrigProtocol] - else - IndyClient.HTTPOptions := IndyClient.HTTPOptions - []; - {$ENDIF} - IndyClient.Post(TargetURL, aRequest, aResponse); - except - {$IFDEF RemObjects_INDY8} - raise - {$ELSE} - on E:EIdHTTPProtocolException do begin - {$IFDEF RemObjects_INDY9} - if E.ReplyErrorCode <> 500 then raise - {$ELSE} - if E.ErrorCode <> 500 then raise - {$ENDIF} - - else begin - // Indy raises exceptions when HTTP headers contain HTTP/1.0 500 Internal Server Error - // We want to continue processing instead - aResponse.Size := 0; // Just in case - lErrorResponse := E.ErrorMessage; - aResponse.Write(lErrorResponse[1],Length(E.ErrorMessage)); - aResponse.Seek(0,soFromBeginning); - end; - end - {$ENDIF} - end; -end; - -function TROIndyHTTPChannel.GetHeaders(const aName: string): string; -begin - {$IFDEF RemObjects_INDY8} - result := GetHeaderValue(IndyClient.Request.ExtraHeaders, aName); - {$ELSE} - result := GetHeaderValue(IndyClient.Request.RawHeaders, aName); - {$ENDIF} -end; - -procedure TROIndyHTTPChannel.SetHeaders(const aName, aValue: string); -begin - {$IFDEF RemObjects_INDY8} - SetHeaderValue(IndyClient.Request.ExtraHeaders, aName, aValue); - {$ELSE} - SetHeaderValue(IndyClient.Request.CustomHeaders, aName, aValue); - {$ENDIF} -end; - -function TROIndyHTTPChannel.GetContentType: string; -begin - result := IndyClient.Request.ContentType; -end; - -procedure TROIndyHTTPChannel.SetContentType(const aValue: string); -begin - IndyClient.Request.ContentType := aValue; -end; - -function TROIndyHTTPChannel.GetUserAgent: string; -begin - result := IndyClient.Request.UserAgent; -end; - -procedure TROIndyHTTPChannel.SetUserAgent(const aValue: string); -begin - IndyClient.Request.UserAgent := aValue; -end; - -function TROIndyHTTPChannel.GetClientAddress: string; -begin - result := ''; -end; - -function TROIndyHTTPChannel.GetPathInfo: string; -begin - result := ''; -end; - -function TROIndyHTTPChannel.GetLocation: string; -begin - result := '' -end; - -function TROIndyHTTPChannel.GetQueryString: String; -begin - result := ''; -end; - -procedure TROIndyHTTPChannel.SetPathInfo(const aValue: String); -begin - // do nothing; server side only -end; - -procedure TROIndyHTTPChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - TargetURL := aServerLocator.Host; -end; - -procedure TROIndyHTTPChannel.CheckProperties; -begin - inherited; - Check(TargetURL = '', Name + '.TargetURL must be set.'); -end; - -initialization - RegisterTransportChannelClass(TROIndyHTTPChannel); - -finalization - UnRegisterTransportChannelClass(TROIndyHTTPChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPServer.pas deleted file mode 100644 index 739bf9f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyHTTPServer.pas +++ /dev/null @@ -1,442 +0,0 @@ -unit uROIndyHTTPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -{TODO: Do like in the webmodule. Save a pointer to the user's OnCOmmandGet and fire it } - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFNDEF RemObjects_INDY8}IdCustomHTTPServer,{$ENDIF} - {$IFDEF RemObjects_INDY10}IdContext, IdSocketHandle,{$ELSE}IdThreadMgr,{$ENDIF} - Classes, uROServer, uROIndyTCPServer, IdTCPServer, - IdHTTPServer, uROClientIntf; - -type - { TIndyHTTPTransport } - TIndyHTTPTransport = class(TInterfacedObject, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fRequestInfo: TIdHTTPRequestInfo; - fResponseInfo : TIdHTTPResponseInfo; - fOverriddenPathInfo : string; - protected - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - function GetContentType : string; - procedure SetContentType(const aValue : string); - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - function GetTargetURL : string; - procedure SetTargetURL(const aValue : string); - - function GetPathInfo : string; - procedure SetPathInfo(const aValue: String); - function GetQueryString : string; - - function GetLocation : string; - - { IROTransport } - function GetTransportObject : TObject; - function GetClientAddress : string; - - public - constructor Create(aRequestInfo: TIdHTTPRequestInfo; aResponseInfo : TIdHTTPResponseInfo); - - property RequestInfo: TIdHTTPRequestInfo read fRequestInfo; - property ResponseInfo : TIdHTTPResponseInfo read fResponseInfo; - end; - - { TROIdHTTPServer } - TROIdHTTPServer = class(TIdHTTPServer) - private - function GetActive: boolean; - - public - procedure IndySetActive(Value : boolean); - - published - property Active : boolean read GetActive; - end; - - { TROIndyHTTPServer } - TROIndyHTTPServer = class(TROCustomIndyTCPServer) - private - fServeRodl, fServeInfoPage: Boolean; - fSendExceptionsAs500: boolean; - function GetIndyServer: TROIdHTTPServer; - - protected - procedure InternalServerCommandGet(AThread: TIdThreadClass; - RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo); virtual; - - - function CreateIndyServer : TComponent; override; - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - function GetDispatchersClass : TROMessageDispatchersClass; override; - - function GetKeepAlive: boolean; override; - procedure SetKeepAlive(const Value: boolean); override; - - function GetDisableNagle: boolean; override; - procedure SetDisableNagle(const Value: boolean); override; - - public - constructor Create(aComponent: TComponent); override; - - published - property IndyServer : TROIdHTTPServer read GetIndyServer; - property Port:Integer read GetPort write SetPort; - property KeepAlive : boolean read GetKeepAlive write SetKeepAlive default false; - property ServeInfoPage : Boolean read fServeInfoPage write fServeInfoPage default true; - property ServeRodl : Boolean read fServeRodl write fServeRodl default true; - property SendExceptionsAs500: boolean read fSendExceptionsAs500 write fSendExceptionsAs500 default true; - property OnGetRODLReader; - end; - -implementation - -uses SysUtils, IdGlobal, uRORes, uROHTTPTools, uROHTTPDispatch, uROServerIntf, - uROClient, uROHtmlServerInfo, uRODL; - -{ TROIndyHTTPServer } -constructor TROIndyHTTPServer.Create(aComponent: TComponent); -begin - inherited; - fServeRodl := true; - fServeInfoPage := true; - fSendExceptionsAs500 := true; -end; - -function TROIndyHTTPServer.CreateIndyServer: TComponent; -begin - result := TROIdHTTPServer.Create(Self);//TIdHTTPServer.Create(Self); - TROIdHTTPServer(result).OnCommandGet := InternalServerCommandGet; - TROIdHTTPServer(result).DefaultPort := 8099; -end; - -function TROIndyHTTPServer.IntGetActive: boolean; -begin - result := GetIndyServer.Active -end; - -procedure TROIndyHTTPServer.IntSetActive(const Value: boolean); -begin - {$IFDEF RemObjects_INDY10B} - if (Value) and (IndyServer.Bindings.Count = 0) then begin - with IndyServer.Bindings.Add do begin - Ip := ''; - Port := Self.Port; - IPVersion := Id_IPv4; - end; - end; - {$ENDIF} - GetIndyServer.IndySetActive(Value); - if not Value - then IndyServer.Bindings.Clear; -end; - -function TROIndyHTTPServer.GetIndyServer: TROIdHTTPServer; -begin - //result := TROIdHTTPServer(inherited IndyServer); - result := TObject(inherited IndyServer) as TROIdHTTPServer; -end; - -procedure TROIndyHTTPServer.InternalServerCommandGet(AThread: TIdThreadClass; - RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo); -var req, resp : TStringStream; - transport : IROHTTPTransport; - ok : boolean; - disp : TROHTTPDispatcher; - root, sub, reqdata : string; - lIgnore: TROResponseOptions; - format: TDataFormat; - info: IRONamedModuleInfo; - lRodl: TRODLLibrary; -begin - req := NIL; - transport := TIndyHTTPTransport.Create(RequestInfo, ResponseInfo); - - resp := TStringStream.Create(''); - - try - {$IFDEF RemObjects_INDY8} - req := TStringStream.Create(RequestInfo.UnparsedParams); - {$ELSE} - { This was introduced to support URLs with parameters for partial WSDLs. - When a browser sends a URL such as "http://localhost:8099/SOAP?Service=TestService", Indy - puts the value "Service=TestService" in the UnparsedParams. This is not what we want as we - expect UnparsedParams as the data of the HTTP request. } - if (RequestInfo.QueryParams=RequestInfo.UnparsedParams) - then reqdata := '' - else reqdata := RequestInfo.UnparsedParams; - - req := TStringStream.Create(reqdata); - {$ENDIF} - - root := transport.PathInfo; - if (root <> '') and (root[1] = '/') then delete(root, 1,1); - if pos('/', root) > 0 then - begin - sub := copy(root, pos('/', root)+1, maxint); - root := '/' + copy(root, 1, pos('/', root) - 1); - end else - begin - root := '/' + root; - sub := ''; - end; - - disp := TROHTTPMessageDispatchers(Dispatchers).GetDispatcherByPath(root) as TROHTTPDispatcher; - - if disp <> nil then - begin - if (req.Size = 0) then begin - ok := fServeRodl; - if ok then - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - else - resp.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - end else if (sub = '') then - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - else if (CompareText(sub, 'rodl') = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then transport.PathInfo := disp.PathInfo else transport.PathInfo := '/'+disp.PathInfo; - GetRodl(resp, transport, format, GetRODLReader); - ResponseInfo.ContentType := format; - ok := true; - end else if Supports(disp.Message, IRONamedModuleInfo, info) and (CompareText(info.ModuleInfoName, sub) = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then transport.PathInfo := disp.PathInfo else transport.PathInfo := '/'+disp.PathInfo; - info.GetModuleInfo(resp, transport, format); - ResponseInfo.ContentType := format; - ok := true; - end else - begin - ok := IntDispatchMessage(disp, transport, req, resp, lIgnore) - end; - end else if (CompareText(root, '/rodl') = 0) and (sub = '') and fServeRodl then - begin - GetRodl(resp, transport, format, GetRODLReader); - ok := true; - end else if fServeInfoPage and (CompareText(root, '/doc') = 0) then - begin - if sub = 'css' then - begin - resp.Writestring(GetRodlCss); - ResponseInfo.ContentType := 'text/css'; - ok := true; - end else - if sub = 'xslt' then - begin - resp.WriteString(GetRodlStyleSheet); - ResponseInfo.ContentType := 'text/xml'; - ok := true; - end else if sub = '' then - begin - lRodl := GetRodlLibrary(GetRODLReader); - try - ResponseInfo.ContentType := 'text/xml'; - resp.WriteString(GetRodlWithStyleSheet(lRodl, '/doc/xslt')); - finally - lRodl.Free; - end; - ok := true; - end else - begin - resp.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - ok := false; - end; - end else if fServeInfoPage and (CompareStr(root, '/favicon.ico') = 0) then - begin - GetRodlFavIcon(resp); - ResponseInfo.ContentType := 'image/x-icon'; - ok := true; - end else if fServeInfoPage and (root = '/') then - begin - lrodl := GetRodlLibrary(GetRODLReader); - try - resp.WriteString(GetRodlServerInfo('/', lRodl, Dispatchers)); - finally - lRodl.Free; - end; - ok := true; - end else - begin - resp.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - ok := false; - end; - - if ok or not fSendExceptionsAs500 then - ResponseInfo.ResponseNo := HTTP_OK - else - ResponseInfo.ResponseNo := HTTP_FAILED; - - ResponseInfo.ContentText := resp.DataString; - finally - req.Free; - resp.Free; - end; -end; - - -function TROIndyHTTPServer.GetDispatchersClass : TROMessageDispatchersClass; -begin - result := TROHTTPMessageDispatchers -end; - -function TROIndyHTTPServer.GetKeepAlive: Boolean; -begin - {$IFDEF RemObjects_INDY8} - Result := false; - {$ELSE} - Result := IndyServer.KeepAlive; - {$ENDIF} -end; - -procedure TROIndyHTTPServer.SetKeepAlive(const Value: Boolean); -begin - {$IFDEF RemObjects_INDY8} - // keepalive not supported on Indy 8 - {$ELSE} - IndyServer.KeepAlive := Value; - {$ENDIF} -end; - -function TROIndyHTTPServer.GetDisableNagle: boolean; -begin - result := FALSE; -end; - -procedure TROIndyHTTPServer.SetDisableNagle(const Value: boolean); -begin - // Not supported in the HTTP channels -end; - -{ TIndyHTTPTransport } - -constructor TIndyHTTPTransport.Create( - aRequestInfo: TIdHTTPRequestInfo; aResponseInfo: TIdHTTPResponseInfo); -begin - inherited Create; - fRequestInfo := aRequestInfo; - fResponseInfo := aResponseInfo; -end; - -function TIndyHTTPTransport.GetClientAddress: string; -begin - result := fRequestInfo.RemoteIP; -end; - -function TIndyHTTPTransport.GetContentType: string; -begin - result := fResponseInfo.ContentType; -end; - -function TIndyHTTPTransport.GetHeaders(const aName: string): string; -begin - {$IFDEF RemObjects_INDY8} - result := GetHeaderValue(fRequestInfo.Headers, aName); - {$ELSE} - result := GetHeaderValue(fRequestInfo.RawHeaders, aName); - {$ENDIF} -end; - -function TIndyHTTPTransport.GetPathInfo: string; -begin - if fOverriddenPathInfo <> '' then - result := fOverriddenPathInfo - else - result := RequestInfo.Document -end; - -function TIndyHTTPTransport.GetLocation: string; -begin - result := 'http://'+fRequestInfo.Host -end; - -function TIndyHTTPTransport.GetTargetURL: string; -begin - result := '' -end; - -function TIndyHTTPTransport.GetTransportObject: TObject; -begin - result := Self; -end; - -function TIndyHTTPTransport.GetUserAgent: string; -begin - result := str_ProductName -end; - -procedure TIndyHTTPTransport.SetContentType(const aValue: string); -begin - fResponseInfo.ContentType := aValue -end; - -procedure TIndyHTTPTransport.SetHeaders(const aName, - aValue: string); -begin - {$IFDEF RemObjects_INDY8} - SetHeaderValue(fResponseInfo.Headers, aName, aValue); - {$ELSE} - SetHeaderValue(fResponseInfo.RawHeaders, aName, aValue); - {$ENDIF} -end; - -procedure TIndyHTTPTransport.SetTargetURL(const aValue: string); -begin - -end; - -procedure TIndyHTTPTransport.SetUserAgent(const aValue: string); -begin - fResponseInfo.ServerSoftware := str_ProductName -end; - -function TIndyHTTPTransport.GetQueryString: string; -begin - {$IFDEF RemObjects_INDY8} - result := ''; - {$ELSE} - result := fRequestInfo.QueryParams; - {$ENDIF} -end; - -procedure TIndyHTTPTransport.SetPathInfo(const aValue: String); -begin - fOverriddenPathInfo := aValue; -end; - -{ TROIdHTTPServer } - -function TROIdHTTPServer.GetActive: boolean; -begin - result := inherited Active -end; - -procedure TROIdHTTPServer.IndySetActive(Value: boolean); -begin - inherited Active := Value -end; - -initialization - RegisterServerClass(TROIndyHTTPServer); -finalization - UnregisterServerClass(TROIndyHTTPServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndySuperHttpChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndySuperHttpChannel.pas deleted file mode 100644 index 502fd6f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndySuperHttpChannel.pas +++ /dev/null @@ -1,136 +0,0 @@ -unit uROIndySuperHttpChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, SysUtils, uROClient, uROClientIntf, uROAsync, uROClasses, SyncObjs, - {$IFDEF RemObjects_UseEncryption} uRoEncryption, {$ENDIF}uROThreadPool, - uROIndyTCPChannel, IdTCPCLient, IdHTTP, uROBaseSuperHttpChannel; - -type - TROIndySuperHttpChannel = class(TROBaseSuperHttpChannel) - private - fClientWait, - fClientRequest: TIdHTTP; - fTargetUrl: String; - protected - procedure CancelRequest(aWaitingThread: Boolean); override; - procedure DispatchHttpRequest(aWaitingThread: Boolean; - aRequest: TDynByteArray; out aResponse: TDynByteArray); override; - public - constructor Create(aOwner: TCOmponent); override; - destructor Destroy; override; - {$IFDEF FPC} - property SessionId; - {$ENDIF} - published - {$IFNDEF FPC} - property SessionId; - {$ENDIF} - property Active; - property MaxPackageSize; - property TargetUrl: String read fTargetUrl write fTargetUrl; - property ClientWait: TIdHTTP read fClientWait; - property ClientRequest: TIdHTTP read fClientRequest; - property RequestTimeout; - property ConnectTimeout; - property HttpRequestTimeout; - end; - -implementation -uses - uRORes; - -{ TROIndySuperHttpChannel } - -procedure TROIndySuperHttpChannel.CancelRequest(aWaitingThread: Boolean); -var - lSock: TIdHTTP; -begin - try - if aWaitingThread then lSock := fClientWait else lSock := fClientRequest; - {$IFDEF RemOBjects_INDY8} - lSock.Binding.CloseSocket(); - {$ELSE} - {$IFDEF RemObjects_INDY10} - if assigned(lSock.Socket) and (lSock.Socket.Connected) then - lSock.Socket.Close; - {$ELSE} - lSock.DisconnectSocket; - {$ENDIF} - {$ENDIF} - except - // indy will release an exception when closing - end; -end; - -constructor TROIndySuperHttpChannel.Create(aOwner: TCOmponent); -begin - inherited Create(aOwner); - fClientWait := TIdHTTP.Create(nil); - fClientWait.Request.UserAgent := str_ProductName; - - fClientRequest := TIdHTTP.Create(nil); - fClientRequest.Request.UserAgent := str_ProductName; - - {$IFDEF DELPHI6UP} - fClientWait.SetSubComponent(TRUE); - {$ENDIF} - {$IFDEF DELPHI6UP} - fClientRequest.SetSubComponent(TRUE); - {$ENDIF} -end; - -destructor TROIndySuperHttpChannel.Destroy; -begin - Active := false; - fClientWait.Free; - fClientRequest.Free; - inherited Destroy; -end; - -procedure TROIndySuperHttpChannel.DispatchHttpRequest( - aWaitingThread: Boolean; aRequest: TDynByteArray; - out aResponse: TDynByteArray); -var - lClient: TIdHTTP; - lRequest, lResponse: TMemoryStream; -begin - if aWaitingThread then lClient := fClientWait else lClient := fClientRequest; - lRequest:= TMemoryStream.Create; - lResponse := TMemoryStream.Create; - try - lRequest.Write(aRequest[0], Length(aRequest)); - lRequest.Position := 0; - {$IFNDEF REMOBJECTS_INDY8} - lClient.ReadTimeout := HttpRequestTimeout; - {$ENDIF} - {$IFDEF RemObjects_INDY10} - lClient.ConnectTimeout := ConnectTimeout; - {$ENDIF} - lClient.Post(fTargetUrl, lRequest, lResponse); - SetLength(aResponse, lResponse.Size); - lResponse.Position := 0; - lResponse.Read(aResponse[0], Length(aResponse)); - finally - lRequest.Free; - lResponse.Free; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPChannel.pas deleted file mode 100644 index b71145f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPChannel.pas +++ /dev/null @@ -1,254 +0,0 @@ -unit uROIndyTCPChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROClient, IdBaseComponent, uROClientIntf, IdTCPClient; - -type - {$IFDEF RemObjects_INDY10} - TIdTCPClientBaseClass = TIdTCPClientCustom; - TIdIndy10HackClient = class(TIdTCPClientCustom) - public - property Port; - property Host; - end; - {$ELSE} - TIdTCPClientBaseClass = TIdTcpClient; - TIdIndy10HackClient = TIdTcpClient; - {$ENDIF} - - { TROCustomIndyTCPChannel } - TROCustomIndyTCPChannel = class(TROTransportChannel, IROTransport, IROTCPTransport) - private - fIndyClient : TIdTCPClientBaseClass; - fKeepAlive: boolean; - fDisableNagle: boolean; - - function GetHost: string; - function GetPort: integer; - procedure SetHost(const Value: string); - procedure SetPort(const Value: integer); - - protected - procedure IntDispatch(aRequest, aResponse : TStream); override; - procedure IntSetServerLocator(aServerLocator : TROServerLocator); override; - - function CreateIndyClient: TIdTCPClientBaseClass; virtual; - - {$IFDEF DESIGNTIME} - {$IFDEF MSWINDOWS} - procedure NoIndyAtDesigntime; - {$ENDIF MSWINDOWS} - {$ENDIF DESIGNTIME} - { IROTransport } - function GetTransportObject : TObject; override; - - { IROTCPTransport } - function GetClientAddress : string; - - public - constructor Create(aOwner : TComponent); override; - - property Port : integer read GetPort write SetPort; - property Host : string read GetHost write SetHost; - property DisableNagle : boolean read fDisableNagle write fDisableNagle default FALSE; - property IndyClient : TIdTCPClientBaseClass read fIndyClient; - property KeepAlive : boolean read fKeepAlive write fKeepAlive default false; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - - { TROIndyTCPChannel } - TROIndyTCPChannel = class(TROCustomIndyTCPChannel, IROTransport, IROTCPTransport) - private - protected - - published - property Port; - property Host; - property DisableNagle; - property IndyClient; - property KeepAlive; - end; - -implementation - -uses - {$IFDEF RemObjects_INDY10}IdStreamVCL, {$ENDIF} - SysUtils, uRORes, uROClasses, idstackconsts; - -{ TROCustomIndyTCPChannel } - -constructor TROCustomIndyTCPChannel.Create(aOwner: TComponent); -begin - inherited; - fIndyClient := CreateIndyClient; - fIndyClient.Name := 'InternalIndyClient'; - {$IFDEF DELPHI6UP} - fIndyClient.SetSubComponent(TRUE); - {$ENDIF} -end; - -function TROCustomIndyTCPChannel.CreateIndyClient: TIdTCPClientBaseClass; -begin - result := TIdTCPClient.Create(Self); - TIdTCPClient(result).Port := 8090; - TIdTCPClient(result).Host := '127.0.0.1'; -end; - -function TROCustomIndyTCPChannel.GetClientAddress: string; -begin -{$IFDEF REMOBJECTS_INDY8} - if IndyClient.Binding <> nil then - Result := IndyClient.Binding.PeerIP - else - Result := ''; -{$ELSE} - if (IndyClient.Socket <> nil) and (IndyClient.Socket.Binding <> nil) then - Result := IndyClient.Socket.Binding.PeerIP - else - Result := ''; -{$ENDIF} -end; - -function TROCustomIndyTCPChannel.GetTransportObject: TObject; -begin - result := Self; -end; - -procedure TROCustomIndyTCPChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - Host := aServerLocator.Host; - Port := aServerLocator.Port; -end; - -procedure TROCustomIndyTCPChannel.IntDispatch(aRequest, aResponse: TStream); -{$IFDEF RemObjects_INDY10A} -var - lStream: TIdStreamVCL; -{$ENDIF} -begin - {$IFDEF DESIGNTIME} - {$IFDEF MSWINDOWS} - NoIndyAtDesigntime(); - {$ENDIF MSWINDOWS} - {$ENDIF DESIGNTIME} - - try - if not IndyClient.Connected then begin - IndyClient.Connect; - if DisableNagle then begin - {$IFDEF RemObjects_INDY8} - IndyClient.Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(@Id_SO_True), SizeOf(Id_SO_True)); - {$ELSE} - {$IFDEF RemObjects_INDY9} - IndyClient.Socket.Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(@Id_SO_True), SizeOf(Id_SO_True)); - {$ELSE} - IndyClient.Socket.Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, Id_SO_True); - {$ENDIF} - {$ENDIF} - end; - end; - - {$IFDEF RemObjects_INDY10A} - lStream := TIdStreamVCL.Create(aRequest, false); - lStream.Position := 0; - try - IndyClient.IOHandler.Write(lStream, lStream.Size, TRUE); - finally - FreeAndNil(lStream); - end; - lStream := TIdStreamVCL.Create(aResponse, false); - try - IndyClient.IOHandler.ReadStream(lStream); - finally - FreeAndNil(lStream); - end; - {$ELSE} - aRequest.Position := 0; - {$IFDEF RemObjects_INDY10B} - IndyClient.IOHandler.Write(aRequest, aRequest.Size, TRUE); - IndyClient.IOHandler.ReadStream(aResponse); - {$ELSE} - IndyClient.WriteStream(aRequest, TRUE, TRUE); - IndyClient.ReadStream(aResponse); - {$ENDIF} - {$ENDIF} - finally - if not KeepAlive - then IndyClient.Disconnect; - end; -end; - -{$IFDEF DESIGNTIME} -{$IFDEF MSWINDOWS} -procedure TROCustomIndyTCPChannel.NoIndyAtDesigntime; -begin - {$IFNDEF RemObjects_INDY_DESIGNTIME_FIX} - if csDesigning in ComponentState then - raise EROIDEProblem.Create('We''re sorry, but the '+ClassName+' cannot be used inside the Delphi IDE at designtime.'#13#13+ - 'This is due to a Indy issue and outside of our control.'#13#13+ - 'Please use TROWinInetHttpChannel instead.'#13#13#13+ - 'If your version if Indy is patched to fix this problem, please set the'#13+ - '"RemObjects_INDY_DESIGNTIME_FIX" define in RemObjects.inc and rebuild the package.'); - {$ENDIF RemObjects_INDY_DESIGNTIME_FIX} -end; -{$ENDIF MSWINDOWS} -{$ENDIF DESIGNTIME} - -function TROCustomIndyTCPChannel.GetHost: string; -begin - result := TIdIndy10HackClient(IndyClient).Host; -end; - -function TROCustomIndyTCPChannel.GetPort: integer; -begin - result := TIdIndy10HackClient(IndyClient).Port; -end; - -procedure TROCustomIndyTCPChannel.SetHost(const Value: string); -begin - TIdIndy10HackClient(IndyClient).Host := Value; -end; - -procedure TROCustomIndyTCPChannel.SetPort(const Value: integer); -begin - TIdIndy10HackClient(IndyClient).Port := Value; -end; - -initialization - RegisterTransportChannelClass(TROIndyTCPChannel); - -finalization - UnRegisterTransportChannelClass(TROIndyTCPChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPServer.pas deleted file mode 100644 index fa2f5f6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyTCPServer.pas +++ /dev/null @@ -1,300 +0,0 @@ -unit uROIndyTCPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -{TODO: Do like in the webmodule. Save a pointer to the user's OnExecute and fire it } - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF RemObjects_INDY10}IdContext, {$ELSE} IdThreadMgr,{$ENDIF} - Classes, uROServer, uROClientIntf, IdTCPServer, IdComponent, IdSocketHandle, IdIntercept; - -type - {$IFDEF RemObjects_INDY10} - TIdThreadClass = TIdContext; - {$ELSE} - TIdThreadClass = TIdPeerThread; - {$ENDIF} - - { TIndyTCPConnectionTransport } - TIndyTCPConnectionTransport = class(TInterfacedObject, IROTransport, IROTCPTransport) - private - fThread: TIdThreadClass; - - protected - { IROTransport } - function GetTransportObject : TObject; - function GetClientAddress : string; - - public - constructor Create(aThread: TIdThreadClass); - - property Thread : TIdThreadClass read fThread; - end; - - { TROTIdTCPServer } - TROTIdTCPServer = class(TIdTCPServer) - private - function GetActive: boolean; - - public - procedure IndySetActive(Value : boolean); - - published - property Active : boolean read GetActive; - end; - - { TROIndyTCPServer } - TROCustomIndyTCPServer = class(TROServer, IROTransport) - private - fIndyServer : TComponent; - fKeepAlive: boolean; - fDisableNagle: boolean; - - - protected - function GetIndyServer : TROTIdTCPServer; - function GetPort: Integer; - procedure SetPort(const Value: Integer); - - function GetKeepAlive: boolean; virtual; - procedure SetKeepAlive(const Value: boolean); virtual; - - function GetDisableNagle: boolean; virtual; - procedure SetDisableNagle(const Value: boolean); virtual; - - function CreateIndyServer : TComponent; virtual; - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - procedure InternalOnExecute(AThread: TIdThreadClass); - - { IROTransport } - function GetTransportObject : TObject; - - public - constructor Create(aComponent : TComponent); override; - - property IndyServer: TROTIdTCPServer read GetIndyServer; - property Port:Integer read GetPort write SetPort; - property DisableNagle : boolean read GetDisableNagle write SetDisableNagle default FALSE; - property KeepAlive : boolean read GetKeepAlive write SetKeepAlive default false; - end; - - { TROIndyTCPServer } - TROIndyTCPServer = class(TROCustomIndyTCPServer, IROTransport) - published - property IndyServer; - property Port; - property DisableNagle; - property KeepAlive; - end; - -implementation - -uses SysUtils, uRORes, - {$IFNDEF RemObjects_INDY8}IdIoHandlerSocket,{$ENDIF} - {$IFDEF RemObjects_INDY10}IdStreamVCL,{$ENDIF} - IdTCPConnection, idstackconsts; - -{ TROCustomIndyTCPServer } - -constructor TROCustomIndyTCPServer.Create(aComponent: TComponent); -begin - inherited; - - fIndyServer := CreateIndyServer; - fIndyServer.Name := 'InternalIndyServer'; - {$IFDEF DELPHI6UP} - fIndyServer.SetSubComponent(True); - {$ENDIF} -end; - -function TROCustomIndyTCPServer.CreateIndyServer: TComponent; -begin - result := TROTIdTCPServer.Create(Self); - TROTIdTCPServer(result).OnExecute := InternalOnExecute; - TROTIdTCPServer(result).DefaultPort := 8090; -end; - -function TROCustomIndyTCPServer.GetIndyServer: TROTIdTCPServer; -begin - result := TROTIdTCPServer(fIndyServer) -end; - -procedure TROCustomIndyTCPServer.IntSetActive(const Value: boolean); -begin - IndyServer.IndySetActive(Value); - if not Value - then IndyServer.Bindings.Clear; -end; - -function TROCustomIndyTCPServer.IntGetActive : boolean; -begin - result := IndyServer.Active -end; - -procedure TROCustomIndyTCPServer.InternalOnExecute(AThread: TIdThreadClass); -var - req, resp : TMemoryStream; - tcptransport : IROTCPTransport; - {$IFDEF RemObjects_INDY10A} - lStream: TIdStreamVCL; - {$ENDIF} -begin - req := TMemoryStream.Create; - resp := TMemoryStream.Create; - - tcptransport := TIndyTCPConnectionTransport.Create(aThread); - - try - with AThread do begin - while AThread.Connection.Connected do - begin - if DisableNagle then begin - {$IFDEF RemObjects_INDY8} - Connection.Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(@Id_SO_True), SizeOf(Id_SO_True)); - {$ELSE} - {$IFDEF RemObjects_INDY9} - (Connection.IoHandler as TIdIoHandlerSocket).Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(@Id_SO_True), SizeOf(Id_SO_True)); - {$ELSE} - (Connection.IoHandler as TIdIoHandlerSocket).Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, Id_SO_True); - {$ENDIF} - {$ENDIF} - end; - - {$IFDEF RemObjects_INDY10A} - lStream := TIdStreamVCL.Create(req, false); - try - Connection.IOHandler.ReadStream(lStream); - finally - FreeAndNil(lStream); - end; - req.Position := 0; - DispatchMessage(tcptransport, req, resp); - lStream := TIdStreamVCL.Create(resp, false); - try - Connection.IOHandler.Write(lStream, lStream.Size, TRUE); - finally - FreeAndNil(lStream); - end; - - {$ELSE} - {$IFDEF RemObjects_INDY10B} - Connection.IOHandler.ReadStream(req); - req.Position := 0; - DispatchMessage(tcptransport, req, resp); - Connection.IOHandler.Write(resp, resp.Size, TRUE); - {$ELSE} - Connection.ReadStream(req); - req.Position := 0; - DispatchMessage(tcptransport, req, resp); - Connection.WriteStream(resp, TRUE, TRUE); - {$ENDIF} - {$ENDIF} - - if not KeepAlive - then Connection.Disconnect - else - begin - resp.Position := 0; - req.Position := 0; - resp.Size := 0; - req.Size := 0; - end; - end; - end; - finally - req.Free; - resp.Free; - end; -end; - -function TROCustomIndyTCPServer.GetTransportObject: TObject; -begin - result := Self; -end; - -function TROCustomIndyTCPServer.GetPort: Integer; -begin - Result := IndyServer.DefaultPort; -end; - -procedure TROCustomIndyTCPServer.SetPort(const Value:Integer); -begin - IndyServer.DefaultPort := Value; -end; - -function TROCustomIndyTCPServer.GetKeepAlive: boolean; -begin - result := fKeepAlive -end; - -procedure TROCustomIndyTCPServer.SetKeepAlive(const Value: boolean); -begin - fKeepAlive := Value -end; - -function TROCustomIndyTCPServer.GetDisableNagle: boolean; -begin - result := fDisableNagle -end; - -procedure TROCustomIndyTCPServer.SetDisableNagle(const Value: boolean); -begin - fDisableNagle := Value -end; - -{ TROTIdTCPServer } - -function TROTIdTCPServer.GetActive: boolean; -begin - result := inherited Active; -end; - -procedure TROTIdTCPServer.IndySetActive(Value: boolean); -begin - inherited Active := Value -end; - -{ TIndyTCPConnectionTransport } - -constructor TIndyTCPConnectionTransport.Create(aThread: TIdThreadClass); -begin - inherited Create; - fThread := aThread; -end; - -function TIndyTCPConnectionTransport.GetClientAddress: string; -begin - {$IFDEF RemObjects_INDY8} - result := fThread.Connection.Binding.PeerIP - {$ELSE} - result := fThread.Connection.Socket.Binding.PeerIP - {$ENDIF} -end; - -function TIndyTCPConnectionTransport.GetTransportObject: TObject; -begin - result := Self; -end; - -initialization - RegisterServerClass(TROIndyTCPServer); -finalization - UnregisterServerClass(TROIndyTCPServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPChannel.pas deleted file mode 100644 index 86d0712..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPChannel.pas +++ /dev/null @@ -1,656 +0,0 @@ -unit uROIndyUDPChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Nico Schoemaker (nico.schoemaker@teamro.remobjects.com } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses classes, SysUtils,SyncObjs, - IdUDPClient, - uROClient, uROClientIntf, uROAsyncResponseStorage, uROAsync, uROThread, - uROClasses; - -type - - TROIndyUDPChannel = class; - - TROUDPResponseThread = class(TROThread) - private - FChannel: TROIndyUDPChannel; - FCriticalSection: TCriticalSection; - FReqUID: String; - protected - FRetrys: Integer; - FRespReceived: Boolean; - procedure DoTimeOut; - procedure DoEnd; - procedure Execute;override; - public - property RequestUID: String read FReqUID; - property ReceivedResponse: Boolean read FRespReceived; - property Channel: TROIndyUDPChannel read FChannel; - property CriticalSection: TCriticalSection read FCriticalSection; - - constructor Create(const aName: string; aChannel: TROIndyUDPChannel; aRequestUID: String); - end; - - TROUDPResponseThreadClass = class of TROUDPResponseThread; - - TROAsyncTimeOutEvent = procedure (aRequistUID: String) of object; - - TROIndyUDPChannel = class(TROTransportChannel, IROTransport, IROTCPTransport, - IROAsyncTransportChannel, IROAsyncResponseStorage) - private - fIndyClient: TIdUDPClient; - FRespStorage: TROSimpleAsyncResponseStorage; - FReqStorage: TROSimpleAsyncResponseStorage; - FRespBuffer: TStringList; - FRetrys: Integer; - FAsyncTimeOut: Integer; - FOnAsyncResponseTimeOut: TROAsyncTimeOutEvent; - FRunningThread: TROUDPResponseThread; - function GetHost: string; - function GetPort: integer; - procedure SetHost(const Value: string); - procedure SetPort(const Value: integer); - protected - FCriticalSection: TCriticalSection; - FIDSize: Integer; - - { IROTransport } - function GetTransportObject : TObject; override; - - { IROTCPTransport } - function GetClientAddress : string; - - { IROAsyncTransportChannel } - function InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string;virtual; - procedure RetrieveResponse(const iMessageID:string; aResponse:TStream); - - procedure DoEndOfThread(Sender: TROUDPResponseThread);virtual; - procedure DoOnTerminateThread(Sender: TObject);virtual; - procedure DoAsyncThreadTimeOut(ReqUID: String);virtual; - - procedure IntDispatch(aRequest, aResponse : TStream); override; - procedure IntSetServerLocator(aServerLocator: TROServerLocator); override; - procedure SendReq(aRequest: TStream;UID: String;AddToStorage: Boolean=true);virtual; - function GetResponseThreadClass: TROUDPResponseThreadClass;virtual; - - // Setters - procedure SetRetrys(const Value: Integer); - procedure SetAsyncTimeOut(const Value: Integer); - procedure SetOnAsyncResponseTimeOut(const Value: TROAsyncTimeOutEvent); - - // Helpers - procedure CleanUpStorages;virtual; - function GetNewMesgID: String;virtual; - function StripID(var aResponse: String): String; - procedure CopyStream(aSource,aTarget: TStream); - function CreateUDPClient : TIdUDPClient; virtual; - procedure AddRequestToStorage(aRequest: TStream;aRequestID: String); - public - property ResponseStorage: TROSimpleAsyncResponseStorage read FRespStorage {$IFNDEF FPC} implements IROAsyncResponseStorage {$ENDIF}; - {$IFDEF FPC} // implements does not work in FPC - procedure AddResp(aResp: TROResponseItem); - procedure RemoveResp(aResp: TROResponseItem); - procedure RemoveRespByUID(aUID: String); - procedure DeleteResp(Index: Integer); - function GetResp(Index: Integer): TROResponseItem; - function GetRespByUID(aUID: String): TROResponseItem; deprecated; - function GetResponseByUID(aUID: String): TROResponseItem; - function IndexOfResp(aResp: TROResponseItem): Integer; - function CountOfResp: Integer; - procedure ClearStorage; - - property ResponseItem[Index: Integer]: TROResponseItem read GetResp; - {$ENDIF} - - property RequestStorage: TROSimpleAsyncResponseStorage read FReqStorage; - function ReceiveResp(aTimeOut: Integer): Boolean;virtual; - function CheckStatus(const iMessageID:string):boolean; - - constructor Create(AOwner: TComponent);override; - Destructor Destroy;override; - published - property AsyncTimeOut: Integer read FAsyncTimeOut write SetAsyncTimeOut default 1000; - property OnAsyncResponseTimeOut: TROAsyncTimeOutEvent read FOnAsyncResponseTimeOut write SetOnAsyncResponseTimeOut; - property Retrys: Integer read FRetrys write SetRetrys; - property IndyClient : TIdUDPClient read fIndyClient; - property Port : integer read GetPort write SetPort; - property Host : string read GetHost write SetHost; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - -implementation - -uses IdUDPBase,IdGlobal; - -const C_CLRBUFFER_TO = 50; // TimeOut reading the buffer for ClearRecvBuffer - C_READTIMEOUT = 'Time out reading server response %s.'; - C_NORESPONSE = 'Response %s is not available yet.'; - C_EADDREQUEST = 'Parameters of AddRequestToStorage not Assigned'; - -function Strm_StreamToStr(aStream: TStream): String; -var OldPos: Integer; -begin - result := ''; - if not(Assigned(aStream)) then - Exit; - - OldPos := aStream.Position; - aStream.Position := 0; - - SetLength(result, aStream.Size); - if (aStream.Size>0) - then aStream.Read(result[1], aStream.Size); - - aStream.Position := OldPos; -end; - -//------------------------------------------------------------------------------ - { TROIndyUDPChannel } -//------------------------------------------------------------------------------ - -constructor TROIndyUDPChannel.Create(AOwner: TComponent); -begin - inherited; - FCriticalSection := TCriticalSection.Create(); - FIndyClient := CreateUDPClient; - FRespBuffer := TStringList.Create; - FRespStorage := TROSimpleAsyncResponseStorage.Create(Self); - FReqStorage := TROSimpleAsyncResponseStorage.Create(Self); - - FRetrys := 5; - FAsyncTimeOut := 1000; - - // In case the result of GetNewMesgID change's in the future - FIDSize := Length(GetNewMesgID); - - {$IFDEF DELPHI6UP} - fIndyClient.SetSubComponent(TRUE); - {$ENDIF} -end; - -destructor TROIndyUDPChannel.Destroy; -begin - FreeAndNil(FCriticalSection); - FreeAndNil(FRespBuffer); - - FreeAndNil(FRespStorage); - FreeAndNil(FReqStorage); - - inherited; -end; - -procedure TROIndyUDPChannel.CopyStream(aSource, aTarget: TStream); -var lMs: TMemoryStream; - lPos: Integer; -begin - if (not(Assigned(aSource))) or (not(Assigned(aTarget))) then - Exit; - - lPos := aSource.Position; - - try - if aTarget is TMemoryStream then - begin - TMemoryStream(aTarget).LoadFromStream(aSource); - end else - begin - lMs := TMemoryStream.Create; - try - lMs.LoadFromStream(aSource); - lMs.Position := 0; - lMs.SaveToStream(aTarget); - finally - lMs.Free; - end; - end; - finally - aSource.Position := lPos; - end; -end; - -function TROIndyUDPChannel.CreateUDPClient: TIdUDPClient; -begin - result := TIdUDPClient.Create(Self); - result.Port := 8090; - result.Name := 'InternalIndyClient'; -end; - - -function TROIndyUDPChannel.GetClientAddress: string; -begin - result := fIndyClient.Host; -end; - -function TROIndyUDPChannel.GetTransportObject: TObject; -begin - result := Self; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPChannel.IntDispatch - Author: Nico - Date: 22-apr-2003 - Arguments: aRequest, aResponse: TStream - Result: None - Called by the framework to send and receive a request/response - - Send's the request and add's it to the Request storage - - Recieive's the response and add's it to the Response storage - - Passes the response to aResponse - ------------------------------------------------------------------------------} -procedure TROIndyUDPChannel.IntDispatch(aRequest, aResponse: TStream); -var lResp: TStream; - lRetry: Integer; - lUID: String; -begin - lRetry := 0; - - try - lUID := GetNewMesgID; - lResp := nil; - SendReq(aRequest,lUID); - repeat - if ReceiveResp(IndyClient.ReceiveTimeout) then - begin - if FRespStorage.GetRespByUID(lUID) <> nil then - lResp := FRespStorage.GetRespByUID(lUID).Response; - end; - inc(lRetry); - until (lRetry > Retrys) or (lResp <> nil); - - if lRetry > Retrys then - raise Exception.Create(Format(C_READTIMEOUT,[lUID])); - - CopyStream(lResp,aResponse); - aResponse.Position := 0; - FRespStorage.RemoveRespByUID(lUID); - - finally - FReqStorage.RemoveRespByUID(lUID); - CleanUpStorages; - end; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPChannel.AddRequestToStorage - Author: Nico - Date: 22-apr-2003 - Arguments: aRequest: TStream;aRequesID: String - Result: None - Adds a request item to the RequestStorage ------------------------------------------------------------------------------} -procedure TROIndyUDPChannel.AddRequestToStorage(aRequest: TStream;aRequestID: String); -var lMs: TMemoryStream; - lReqItm: TROResponseItem; -begin - if (not(Assigned(aRequest))) or (aRequestID = '') then - raise Exception.Create(C_EADDREQUEST); - - FCriticalSection.Enter; - try - lMS := TMemoryStream.Create; - CopyStream(aRequest,lMs); - lReqItm := TROResponseItem.Create(lMS,aRequestID); - FReqStorage.AddResp(lReqItm); - finally - FCriticalSection.Leave; - end; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPChannel.ReceiveResp - Author: Nico - Date: 22-apr-2003 - Arguments: None - Result: Boolean - Recieves a single response and saves it in the ResponseStorage. ------------------------------------------------------------------------------} -function TROIndyUDPChannel.ReceiveResp(aTimeOut: Integer): Boolean; -var lBuf: String; - lID: String; - lResItm: TROResponseItem; - lResp: TStringStream; - lIP: String; -{$IFDEF RemObjects_INDY10} - lPort: TIDPort; -{$ELSE} - lPort: Integer; -{$ENDIF} -begin - FCriticalSection.Enter; - try - result := False; - lBuf := IndyClient.ReceiveString(lIP,lPort,aTimeOut); - if lBuf <> '' then - begin - lID := StripID(lBuf); - lResp := TStringStream.Create(lBuf); - lResItm := TROResponseItem.Create(lResp,lID); - lResItm.IP := lIP; - lResItm.Port := lPort; - FRespStorage.AddResp(lResItm); - result := True; - end; - finally - FCriticalSection.Leave; - end; -end; - -procedure TROIndyUDPChannel.SendReq(aRequest: TStream;UID: String;AddToStorage: Boolean=true); -var lReq: String; -begin - lReq := Strm_StreamToStr(aRequest); - // Sends the Message identifier in front of the actual message - IndyClient.Send(UID+lReq); - if AddToStorage then - AddRequestToStorage(aRequest,UID); -end; - -procedure TROIndyUDPChannel.SetRetrys(const Value: Integer); -begin - FRetrys := Value; -end; - -function TROIndyUDPChannel.GetNewMesgID: String; -begin - result := NewGuidAsString; -end; - -function TROIndyUDPChannel.GetResponseThreadClass: TROUDPResponseThreadClass; -begin - result := TROUDPResponseThread; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPChannel.StripIdentifier - Author: Nico - Date: 18-apr-2003 - Arguments: var aResponse: String - Result: String - Strips the leading Identifier from the given response string and returns it. ------------------------------------------------------------------------------} -function TROIndyUDPChannel.StripID(var aResponse: String): String; -begin - if Length(aResponse) < FIDSize then - raise EROException.Create('Invalid UDP Packet received.'); - result := Copy(aResponse,1,FIDSize); - Delete(aResponse,1,FIDSize); -end; - - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPChannel.CleanUpStorages - Author: Nico - Date: 22-apr-2003 - Arguments: None - Result: None - Cleans up the Request and Response storages. - Any response without a request will be removed. ------------------------------------------------------------------------------} -procedure TROIndyUDPChannel.CleanUpStorages; -var i: Integer; - lRespUID: String; - lReqItm: TROResponseItem; -begin - FCriticalSection.Enter; - try - // Remove respones that don't have a request present in the request-storage - for i := FRespStorage.CountOfResp-1 downto 0 do - begin - lRespUID := FRespStorage.ResponseItem[i].UID; - lReqItm := FReqStorage.GetRespByUID(lRespUID); - if lReqItm = nil then - FRespStorage.DeleteResp(i); - end; - finally - FCriticalSection.Leave; - end; -end; - -function TROIndyUDPChannel.CheckStatus(const iMessageID: string): boolean; -begin - result := FRespStorage.GetRespByUID(iMessageID) <> nil; -end; - -function TROIndyUDPChannel.InvokeRequest(aRequest: TStream; iGetResponse: boolean): string; -var lRT: TROUDPResponseThread; - lName: String; -begin - try - FCriticalSection.Enter; - try - result := ''; - if FRunningThread <> nil then - raise EROChannelBusy.Create('Channel is busy.'); - - if not(Assigned(aRequest)) then - Exit; - - result := GetNewMesgID; - - if iGetResponse then - begin - SendReq(aRequest,result); - lName := GetResponseThreadClass.ClassName+' for reading of response %s'; - lRT := GetResponseThreadClass.Create(Format(lName,[result]),Self,result); - lRT.OnTerminate := DoOnTerminateThread; - FRunningThread := lRT; - lRT.Resume; - end else - SendReq(aRequest,result,False); - - finally - FCriticalSection.Leave; - end; - finally - aRequest.Free(); - end; -end; - -procedure TROIndyUDPChannel.RetrieveResponse(const iMessageID: string;aResponse: TStream); -var lResItm: TROResponseItem; -begin - FCriticalSection.Enter; - try - if not(Assigned(aResponse)) then - Exit; - - if CheckStatus(iMessageID) then begin - lResItm := FRespStorage.GetRespByUID(iMessageID); - CopyStream(lResItm.Response,aResponse); - // Remove the response and request from the storage's - //FReqStorage.RemoveRespByUID(lResItm.UID); - FRespStorage.RemoveResp(lResItm); - end - else begin - raise EROAsyncNoAnswerYet.Create(Format(C_NORESPONSE,[iMessageID])); - end; - finally - FCriticalSection.Leave; - end; -end; - -procedure TROIndyUDPChannel.DoEndOfThread(Sender: TROUDPResponseThread); -begin - CleanUpStorages; -end; - -procedure TROIndyUDPChannel.DoOnTerminateThread(Sender: TObject); -begin - // Runs in the Main thread - FRunningThread := nil; -end; - -procedure TROIndyUDPChannel.DoAsyncThreadTimeOut(ReqUID: String); -begin - if Assigned(FOnAsyncResponseTimeOut) then - FOnAsyncResponseTimeOut(ReqUID); -end; - -procedure TROIndyUDPChannel.SetOnAsyncResponseTimeOut(const Value: TROAsyncTimeOutEvent); -begin - FOnAsyncResponseTimeOut := Value; -end; - -procedure TROIndyUDPChannel.SetAsyncTimeOut(const Value: Integer); -begin - FAsyncTimeOut := Value; - if FAsyncTimeOut < 0 then - FAsyncTimeOut := 0; -end; - -{ TROUDPResponseThread } -constructor TROUDPResponseThread.Create(const aName: string; aChannel: TROIndyUDPChannel; aRequestUID: String); -begin - inherited Create(True,aName); - FreeOnTerminate := true; - FRespReceived := False; - FChannel := aChannel; - FReqUID := aRequestUID; - FRetrys := aChannel.Retrys; - FCriticalSection := FChannel.FCriticalSection; -end; - -procedure TROUDPResponseThread.Execute; -begin - inherited; - - repeat - FChannel.ReceiveResp(FChannel.AsyncTimeOut); - Dec(FRetrys); - until (FRetrys < 1) or (FChannel.CheckStatus(FReqUID)); - - FRespReceived := FRetrys > 0; - - if not FRespReceived - then Synchronize(DoTimeOut) - else Synchronize(DoEnd); - -end; - -procedure TROUDPResponseThread.DoTimeOut; -begin - FChannel.DoAsyncThreadTimeOut(FReqUID); -end; - -procedure TROUDPResponseThread.DoEnd; -begin - FChannel.DoEndOfThread(Self); -end; - - -function TROIndyUDPChannel.GetHost: string; -begin - result := IndyClient.Host -end; - -function TROIndyUDPChannel.GetPort: integer; -begin - result := IndyClient.Port -end; - -procedure TROIndyUDPChannel.SetHost(const Value: string); -begin - IndyClient.Host := Value -end; - -procedure TROIndyUDPChannel.SetPort(const Value: integer); -begin - IndyClient.Port := Value -end; - -procedure TROIndyUDPChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - Host := aServerLocator.Host; - Port := aServerLocator.Port; -end; - -{$IFDEF FPC} -procedure TROIndyUDPChannel.AddResp(aResp: TROResponseItem); -begin - FRespStorage.AddResp(aResp); -end; - -procedure TROIndyUDPChannel.RemoveResp(aResp: TROResponseItem); -begin - FRespStorage.RemoveResp(aResp); -end; - -procedure TROIndyUDPChannel.RemoveRespByUID(aUID: String); -begin - FRespStorage.RemoveRespByUID(aUID); -end; - -procedure TROIndyUDPChannel.DeleteResp(Index: Integer); -begin - FRespStorage.DeleteResp(Index); -end; - -function TROIndyUDPChannel.GetResp(Index: Integer): TROResponseItem; -begin - Result:=FRespStorage.ResponseItem[Index]; -end; - -function TROIndyUDPChannel.GetRespByUID(aUID: String): TROResponseItem; -begin - Result:=FRespStorage.GetRespByUID(aUID); -end; - -function TROIndyUDPChannel.GetResponseByUID(aUID: String): TROResponseItem; -begin - Result:=FRespStorage.GetRespByUID(aUID); -end; - -function TROIndyUDPChannel.IndexOfResp(aResp: TROResponseItem): Integer; -begin - Result:=FRespStorage.IndexOfResp(aResp); -end; - -function TROIndyUDPChannel.CountOfResp: Integer; -begin - Result:=FRespStorage.CountOfResp; -end; - -procedure TROIndyUDPChannel.ClearStorage; -begin - FRespStorage.ClearStorage; -end; -{$ENDIF FPC} - -initialization - RegisterTransportChannelClass(TROIndyUDPChannel); - -finalization - UnRegisterTransportChannelClass(TROIndyUDPChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPServer.pas deleted file mode 100644 index 230e504..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIndyUDPServer.pas +++ /dev/null @@ -1,321 +0,0 @@ -unit uROIndyUDPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Nico Schoemaker (nico.schoemaker@teamro.remobjects.com } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes,SysUtils, - IdUDPServer, IdSocketHandle, IdGlobal, - uROServer, uROClasses, uROClientIntf; - - -type - - - TROIndyUDPServer = class; - - TROIndyUDPTransport = class(TInterfacedObject, IROTransport, IROTCPTransport) - private - FBinding: TIdSocketHandle; - FServer: TROIndyUDPServer; - protected - function GetTransportObject : TObject; - function GetClientAddress : string; - public - property Binding: TIdSocketHandle read FBinding; - property Server: TROIndyUDPServer read FServer; - - constructor Create(aServer: TROIndyUDPServer;aBinding: TIdSocketHandle); - end; - - TROIndyUDPTransportclass = class of TROIndyUDPTransport; - - TXPIdUDPServer = class(TIdUDPServer) - private - function GetActive: boolean; reintroduce; - public - procedure IndySetActive(Value : boolean); - published - property Active : boolean read GetActive; - end; - - TROIndyUDPServer = class(TROServer, IROTransport) - private - FUDPSvr: TIdUDPServer; - FIDSize: Integer; - - function GetIndyUDPServer: TXPIdUDPServer; - function GetPort: integer; - procedure SetPort(const Value: integer); - protected - function GetMessageID(aStream: TStream): String; - function FormatDispStream(aStream: TStream): TMemoryStream; - - { TROServer } - procedure IntSetActive(const Value: boolean);override; - function IntGetActive : boolean;override; - - { IROTransport } - function GetTransportObject : TObject; - - {$IFDEF RemObjects_INDY10} - procedure InternalUDPRead(Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle); virtual; - {$ELSE} - procedure InternalUDPRead(Sender: TObject;AData: TStream;ABinding: TIdSocketHandle); virtual; - {$ENDIF} - function CreateUDPServer: TXPIdUDPServer;virtual; - - function GetTransportClass: TROIndyUDPTransportClass;virtual; - public - constructor Create(AOwner: TComponent);override; - destructor Destroy;override; - published - property IndyUDPServer: TXPIdUDPServer read GetIndyUDPServer; - property Port : integer read GetPort write SetPort; - end; - -implementation - -{ TROIndyUDPServer } - -constructor TROIndyUDPServer.Create(AOwner: TComponent); -begin - inherited; - FUDPSvr := CreateUDPServer; - {$IFDEF DELPHI6UP} - FUDPSvr.SetSubComponent(TRUE); - {$ENDIF} -end; - -function TROIndyUDPServer.CreateUDPServer: TXPIdUDPServer; -begin - result := TXPIdUDPServer.Create(Self); - result.OnUDPRead := InternalUDPRead; - result.Name := 'InternalIndyServer'; - result.DefaultPort := 8090; - // In case the result of NewGuidAsString change's in the future - FIDSize := Length(NewGuidAsString); -end; - -destructor TROIndyUDPServer.Destroy; -begin - inherited; -end; - -function TROIndyUDPServer.GetIndyUDPServer: TXPIdUDPServer; -begin - result := TXPIdUDPServer(FUDPSvr); -end; -function TROIndyUDPServer.GetPort: integer; -begin - Result := IndyUDPServer.DefaultPort; -end; - -procedure TROIndyUDPServer.SetPort(const Value: integer); -begin - IndyUDPServer.DefaultPort := Value; -end; - -function TROIndyUDPServer.GetTransportClass: TROIndyUDPTransportClass; -begin - result := TROIndyUDPTransport; -end; - -function TROIndyUDPServer.GetTransportObject: TObject; -begin - result := Self; -end; - -{$IFDEF RemObjects_INDY10} -procedure TROIndyUDPServer.InternalUDPRead(Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle); -{$ELSE} -procedure TROIndyUDPServer.InternalUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); -{$ENDIF} -var lResp: TStringStream; - lReq: TMemoryStream; - lRespS: String; - lTransport: IROTCPTransport; - lMesgID: String; - lStream: TStream; -begin - lResp := TStringStream.Create(''); - lReq := nil; - try - {$IFDEF RemObjects_INDY10} - lStream := TMemoryStream.Create(); - WriteTIdBytesToStream(lStream, AData); - lStream.Position := 0; - try - {$ELSE} - lStream := AData; - {$ENDIF} - - lMesgID := GetMessageID(lStream); - lReq := FormatDispStream(lStream); - - if Assigned(lReq) then // lReq becomes nil if not a valid (RO) AData Stream - begin - lTransport := GetTransportClass.Create(Self,ABinding); - DispatchMessage(lTransport, lReq, lResp); - lRespS := lMesgID+lResp.DataString; - {$IFDEF RemObjects_INDY10} - ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ToBytes(lRespS)); - {$ELSE} - ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, lRespS[1], Length(lRespS)); - {$ENDIF} - end; - - {$IFDEF RemObjects_INDY10} - finally - FreeAndNil(lStream); - end; - {$ENDIF} - - finally - if Assigned(lReq) then - lReq.Free; - lResp.Free; - end; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPServer.GetMessageID - Author: Nico - Date: 19-apr-2003 - Arguments: aStream: TStream - Result: String - Extracts the included ID from the stream. - Returns a empty string if the method is not able to extract the ID. ------------------------------------------------------------------------------} -function TROIndyUDPServer.GetMessageID(aStream: TStream): String; -var lPos: Integer; -begin - result := ''; - if not(Assigned(aStream)) then - exit; - if aStream.Size < FIDSize then - Exit; - - lPos := aStream.Position; - try - aStream.Position := 0; - SetLength(result,FIDSize); - aStream.ReadBuffer(result[1],FIDSize); - finally - aStream.Position := lPos; - end; -end; - -{----------------------------------------------------------------------------- - Procedure: TROIndyUDPServer.FormatDispStream - Author: Nico - Date: 19-apr-2003 - Arguments: aStream: TStream - Result: TStream - Constructs the given aStream back to a dispatchable RO stream. - This involves the removing of included ID, that is assumed to be present - in the given stream.If the method is not able to counstruct a dispatchable - stream the result will be nil. ------------------------------------------------------------------------------} -function TROIndyUDPServer.FormatDispStream(aStream: TStream): TMemoryStream; -var lBuf: String; - lPos: Integer; -begin - result := nil; - if not(Assigned(aStream)) then - Exit; - if aStream.Size < FIDSize then - Exit; - - lPos := aStream.Position; - // Initializa the result stream - result := TMemoryStream.Create; - try - try - TMemoryStream(result).SetSize(aStream.Size-FIDSize); - - SetLength(lBuf,aStream.Size-FIDSize); - // Set the given stream pos on 1 byte after the prefixed ID - aStream.Position := FIDSize; - // Copy the contens without ID to the local buffer. - aStream.Read(lBuf[1],aStream.Size-FIDSize); - // Copy the contents of the buffer into the result stream - result.Position := 0; - result.Write(lBuf[1],aStream.Size-FIDSize); - result.Position := 0; - except - // Dont return the result stream - result.Free; - result := nil; - raise; - end; - finally - aStream.Position := lPos; - end; -end; - -//------------------------------------------------------------------------------ - { TXPIdUDPServer } -//------------------------------------------------------------------------------ - -function TXPIdUDPServer.GetActive: boolean; -begin - result := Inherited Active; -end; - -procedure TXPIdUDPServer.IndySetActive(Value: boolean); -begin - inherited Active := Value; -end; - -function TROIndyUDPServer.IntGetActive: boolean; -begin - result := FUDPSvr.Active; -end; - -procedure TROIndyUDPServer.IntSetActive(const Value: boolean); -begin - IndyUDPServer.IndySetActive(Value); -end; - -//------------------------------------------------------------------------------ - { TROIndyUDPTransport } -//------------------------------------------------------------------------------ - -constructor TROIndyUDPTransport.Create(aServer: TROIndyUDPServer;aBinding: TIdSocketHandle); -begin - FBinding := aBinding; - FServer := aServer; -end; - -function TROIndyUDPTransport.GetClientAddress: string; -begin - result := FBinding.PeerIP; -end; - - -function TROIndyUDPTransport.GetTransportObject: TObject; -begin - result := Self; -end; - -initialization - RegisterServerClass(TROIndyUDPServer); -finalization - UnregisterServerClass(TROIndyUDPServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIpSuperHttpServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIpSuperHttpServer.pas deleted file mode 100644 index fbb52e6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROIpSuperHttpServer.pas +++ /dev/null @@ -1,188 +0,0 @@ -unit uROIpSuperHttpServer; - -interface - -{$I RemObjects.inc} - -uses - SysUtils, Classes, uIPAsyncSocket, uIPAsyncHttpServer, uROServer, - uROBaseSuperHttpServer, uIPHttpHeaders; - -const - DefaultServerName = 'RemObjects SDK Super IpHttp Server for Delphi'; - -type - TROIpSuperHttpServer = class(TROBaseSuperHttpServer) - private - fSocket: TIPAsyncHttpServer; - fOnManualBindSocket: TNotifyEvent; - fOnUnknownRequest: TIPAsyncHttpRequestHandler; - fServerName: string; - function GetBindV4: Boolean; - function GetBindV6: Boolean; - function GetPort: Integer; - procedure SetBindV4(const Value: Boolean); - procedure SetPort(const Value: Integer); - procedure SetBindV6(const Value: Boolean); - protected - procedure CloseConnection(aConnection: IUnknown); override; - function HandleUnknownRequest(aTarget: IUnknown; arequest: TIPHttpRequestHeaders; aData: TDynamicByteArray): Boolean; override; - procedure SendResponse(aTarget: IUnknown; aHeaders: TIPHttpResponseHeaders; aData: TDynamicByteArray; UserData: IInterface);override; - procedure SetDefaultHeaders(aTarget: IUnknown; aHeaders: TIPHttpResponseHeaders); override; - procedure DoActivate; override; - procedure DoDeactivate; override; - procedure IntRequest(Sender: TObject; aContext: IIPAsyncContext); - procedure IntBeforeCleanupContext(Sender: TObject; aContext: IIPAsyncContext); - procedure IntResponseSent(Sender: TObject; aContext: IIPAsyncContext); - procedure IntResponseFailed(Sender: TObject; aContext: IIPAsyncContext); - public - published - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - - property Port: Integer read GetPort write SetPort default 80; - property BindV6: Boolean read GetBindV6 write SetBindV6 default false; - property BindV4: Boolean read GetBindV4 write SetBindV4 default true; - property ServerName: string read fServerName write FserverName; - - property OnManualBindSocket: TNotifyEvent read fOnManualBindSocket write fOnManualBindSocket; - property OnUnknownRequest: TIPAsyncHttpRequestHandler read fOnUnknownRequest write fOnUnknownRequest; - end; - -implementation - -{ TROIpSuperHttpServer } - -procedure TROIpSuperHttpServer.CloseConnection(aConnection: IUnknown); -begin - IIPAsyncContext(aConnection).GetSelf.Disconnect; -end; - -constructor TROIpSuperHttpServer.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - fSocket := TIPAsyncHttpServer.Create; - fServerName := DefaultServerName; - fSocket.OnRequest := IntRequest; - fSocket.OnBeforeCleanupContext := IntBeforeCleanupContext; - fSocket.OnResponseSent := IntResponseSent; - fSocket.OnResponseFailed := IntResponseFailed; -end; - -destructor TROIpSuperHttpServer.Destroy; -begin - FreeAndNil(fSocket); - inherited Destroy; -end; - -procedure TROIpSuperHttpServer.DoActivate; -begin - inherited DoActivate; - fSocket.OnManualBind := fOnManualBindSocket; - fSocket.MaxPostData := MaxPackageSize + 1024; - fSocket.Active := true; -end; - -procedure TROIpSuperHttpServer.DoDeactivate; -begin - if FSocket <> nil then fSocket.Active := false; - inherited DoDeactivate; -end; - -function TROIpSuperHttpServer.GetBindV4: Boolean; -begin - result := fsocket.BindV4; -end; - -function TROIpSuperHttpServer.GetBindV6: Boolean; -begin - result := fsocket.BindV6; -end; - -function TROIpSuperHttpServer.GetPort: Integer; -begin - result := fSocket.Port; -end; - -function TROIpSuperHttpServer.HandleUnknownRequest(aTarget: IUnknown; - arequest: TIPHttpRequestHeaders; aData: TDynamicByteArray): Boolean; -begin - if assigned(fOnUnknownRequest) then begin - fOnUnknownRequest(self, IIPAsyncContext(aTarget)); - result := true; - end else - result := false; -end; - -procedure TROIpSuperHttpServer.IntRequest(Sender: TObject; - aContext: IIPAsyncContext); -begin - HandleRequest(acontext, aContext.Request, aContext.RequestData); -end; - - -procedure TROIpSuperHttpServer.IntResponseFailed(Sender: TObject; - aContext: IIPAsyncContext); -begin - ResponseFailed(IUnknown(aContext.UserData)); -end; - -procedure TROIpSuperHttpServer.IntResponseSent(Sender: TObject; - aContext: IIPAsyncContext); -begin - ResponseSucessful(IUnknown(aContext.UserData)); -end; - -procedure TROIpSuperHttpServer.SendResponse(aTarget: IUnknown; - aHeaders: TIPHttpResponseHeaders; aData: TDynamicByteArray; - UserData: IInterface); -var - p: Pointer; - lTarget: IIPAsyncContext; -begin - lTarget := IIPAsyncContext(aTarget); - if aHeaders = nil then begin - SetDefaultHeaders(aTarget, lTarget.Response); - lTarget.Response.Headers.Values['Content-Type'] := 'application/octet-stream'; - end else - lTarget.Response.Assign(aHeaders); - lTarget.ResponseData := aDAta; - p := nil; - IUnknown(P) := UserData; - lTarget.UserData := p; - lTarget.SendResponse; -end; - -procedure TROIpSuperHttpServer.IntBeforeCleanupContext(Sender: TObject; - aContext: IIPAsyncContext); -var - p: Pointer; -begin - p := aContext.UserData; - aContext.UserData := nil; - IUnknown(P) := nil; -end; - - -procedure TROIpSuperHttpServer.SetBindV4(const Value: Boolean); -begin - fSocket.BindV4 := VAlue; -end; - -procedure TROIpSuperHttpServer.SetDefaultHeaders(aTarget: IUnknown; - aHeaders: TIPHttpResponseHeaders); -begin - aHeaders.Headers.Values['Server'] := fServerName; -end; - -procedure TROIpSuperHttpServer.SetPort(const Value: Integer); -begin - fSocket.Port := Value; -end; - -procedure TROIpSuperHttpServer.SetBindV6(const Value: Boolean); -begin - fSocket.BindV6 := Value; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalChannel.pas deleted file mode 100644 index 62ff159..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalChannel.pas +++ /dev/null @@ -1,94 +0,0 @@ -unit uROLocalChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROClient, uROClientIntf, uROLocalServer; - -type - TROLocalChannel = class(TROTransportChannel) - private - fServerChannel: TROLocalServer; - protected - function GetTransportObject: TObject; override; - procedure IntDispatch(aRequest: TStream; aResponse: TStream); override; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - public - procedure CheckProperties; override; - constructor Create(aOwner : TComponent); override; - published - property ServerLocators; - property DispatchOptions; - property ServerChannel: TROLocalServer read fServerChannel write fServerChannel; - property OnLoginNeeded; - property OnSendStream; - property OnReceiveStream; - end; - -implementation -uses - uROClasses; -{ TROLocalChannel } - -procedure TROLocalChannel.CheckProperties; -begin - inherited; - Check(ServerChannel = nil, Name + '.ServerChannel must be assigned.'); - ServerChannel.CheckProperties; -end; - -constructor TROLocalChannel.Create(aOwner: TComponent); -begin - inherited; - ThreadSafe := true; -end; - -function TROLocalChannel.GetTransportObject: TObject; -begin - Result := self; -end; - -procedure TROLocalChannel.IntDispatch(aRequest, aResponse: TStream); -begin - CheckProperties; - - {$IFDEF DESIGNTIME} - {$IFDEF MSWINDOWS} - if csDesigning in ComponentState then - raise EROIDEProblem.Create('We''re sorry, but the '+ClassName+' cannot be used inside the Delphi IDE at designtime.'); - {$ENDIF MSWINDOWS} - {$ENDIF DESIGNTIME} - - fServerChannel.SendRequest(aRequest, aResponse); -end; - -procedure TROLocalChannel.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - if (Operation=opRemove) and - (AComponent=fServerChannel) then fServerChannel := NIL; -end; - -initialization - RegisterTransportChannelClass(TROLocalChannel); - -finalization - UnRegisterTransportChannelClass(TROLocalChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalServer.pas deleted file mode 100644 index eed3b97..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROLocalServer.pas +++ /dev/null @@ -1,65 +0,0 @@ -unit uROLocalServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROServer, uROClientIntf, uROClasses; - -type - TROLocalServer = class(TROServer, IROTransport) - protected - procedure IntSetActive(const Value: Boolean); override; - function IntGetActive: Boolean; override; - function GetTransportObject: TObject; - public - procedure SendRequest(aRequeststream, aResponsestream: TStream); - published - property Active default True; - end; - -implementation - - -{ TROLocalServer } - -function TROLocalServer.GetTransportObject: TObject; -begin - result := self; -end; - -function TROLocalServer.IntGetActive: Boolean; -begin - result := true; -end; - -procedure TROLocalServer.IntSetActive(const Value: Boolean); -begin - // do nothing -end; - -procedure TROLocalServer.SendRequest(aRequeststream, - aResponsestream: TStream); -begin - DispatchMessage(self, aRequeststream, aResponsestream); -end; - -initialization - RegisterServerClass(TROLocalServer); -finalization - UnregisterServerClass(TROLocalServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXML2_TLB.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXML2_TLB.pas deleted file mode 100644 index dd8b5e7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXML2_TLB.pas +++ /dev/null @@ -1,3051 +0,0 @@ -unit uROMSXML2_TLB; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up } -{ platform: Win32 } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{ NOTE: THIS UNIT WAS MANUALLY MODIFIED FROM THE IMPORTED VERSION, - FOR DELPHI 5 COMPATIBILITY AND TO NOT PULL IN MAJOR PARTS OF - THE VCL VIA OleServer (PULLS IN Controls/Forms) AND Graphics - - ALSO, ALL dispinterface VERSIONS WERE REMOVED, FOR C++BUILDER - COMPATIBILITY IN BDS 2006 AND ABOVE} - -{$I RemObjects.inc} - -// ************************************************************************ // -// WARNING -// The types declared in this file were generated from data read from a -// Type Library. If this type library is explicitly or indirectly (via -// another type library referring to this type library) re-imported, or the -// 'Refresh' command of the Type Library Editor activated while editing the -// Type Library, the contents of this file will be regenerated and all -// manual modifications will be lost. -// ************************************************************************ // - -// PASTLWTR : 1.2 -// File generated on 8/18/2003 10:12:51 PM from Type Library described below. - -// ************************************************************************ // -// Type Lib: C:\WINDOWS\system32\msxml4.dll (1) -// LIBID: {F5078F18-C551-11D3-89B9-0000F81FE221} -// LCID: 0 -// Helpfile: -// HelpString: Microsoft XML, v4.0 -// DepndLst: -// (1) v2.0 stdole, (C:\WINDOWS\system32\stdole2.tlb) -// Errors: -// Hint: Parameter 'type' of IXMLDOMNode.nodeType changed to 'type_' -// Hint: Member 'implementation' of 'IXMLDOMDocument' changed to 'implementation_' -// Hint: Parameter 'type' of IXMLDOMDocument.createNode changed to 'type_' -// Hint: Parameter 'var' of IXMLDOMSchemaCollection.add changed to 'var_' -// Hint: Symbol 'type' renamed to 'type_' -// Hint: Parameter 'type' of ISchemaElement.type changed to 'type_' -// Hint: Symbol 'type' renamed to 'type_' -// Hint: Parameter 'type' of ISchemaAttribute.type changed to 'type_' -// Hint: Symbol 'type' renamed to 'type_' -// Hint: Symbol 'type' renamed to 'type_' -// ************************************************************************ // -{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. - -{$IFDEF DELPHI6UP} -{$WARN SYMBOL_PLATFORM OFF} -{$WRITEABLECONST ON} -{$IFDEF DELPHI7UP} -{$VARPROPSETTER ON} -{$ENDIF} -{$ENDIF} - -interface - -uses Windows, ActiveX, Classes; - - -// *********************************************************************// -// GUIDS declared in the TypeLibrary. Following prefixes are used: -// Type Libraries : LIBID_xxxx -// CoClasses : CLASS_xxxx -// DISPInterfaces : DIID_xxxx -// Non-DISP interfaces: IID_xxxx -// *********************************************************************// -const - // TypeLibrary Major and minor versions - MSXML2MajorVersion = 4; - MSXML2MinorVersion = 0; - - LIBID_MSXML2: TGUID = '{F5078F18-C551-11D3-89B9-0000F81FE221}'; - - IID_IXMLDOMImplementation: TGUID = '{2933BF8F-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMNode: TGUID = '{2933BF80-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMNodeList: TGUID = '{2933BF82-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMNamedNodeMap: TGUID = '{2933BF83-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMDocument: TGUID = '{2933BF81-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMDocumentType: TGUID = '{2933BF8B-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMElement: TGUID = '{2933BF86-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMAttribute: TGUID = '{2933BF85-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMDocumentFragment: TGUID = '{3EFAA413-272F-11D2-836F-0000F87A7782}'; - IID_IXMLDOMCharacterData: TGUID = '{2933BF84-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMText: TGUID = '{2933BF87-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMComment: TGUID = '{2933BF88-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMCDATASection: TGUID = '{2933BF8A-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMProcessingInstruction: TGUID = '{2933BF89-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMEntityReference: TGUID = '{2933BF8E-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMParseError: TGUID = '{3EFAA426-272F-11D2-836F-0000F87A7782}'; - IID_IXMLDOMDocument2: TGUID = '{2933BF95-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMSchemaCollection: TGUID = '{373984C8-B845-449B-91E7-45AC83036ADE}'; - IID_IXMLDOMNotation: TGUID = '{2933BF8C-7B36-11D2-B20E-00C04F983E60}'; - IID_IXMLDOMEntity: TGUID = '{2933BF8D-7B36-11D2-B20E-00C04F983E60}'; - IID_IXTLRuntime: TGUID = '{3EFAA425-272F-11D2-836F-0000F87A7782}'; - IID_IXSLTemplate: TGUID = '{2933BF93-7B36-11D2-B20E-00C04F983E60}'; - IID_IXSLProcessor: TGUID = '{2933BF92-7B36-11D2-B20E-00C04F983E60}'; - IID_ISAXXMLReader: TGUID = '{A4F96ED0-F829-476E-81C0-CDC7BD2A0802}'; - IID_ISAXEntityResolver: TGUID = '{99BCA7BD-E8C4-4D5F-A0CF-6D907901FF07}'; - IID_ISAXContentHandler: TGUID = '{1545CDFA-9E4E-4497-A8A4-2BF7D0112C44}'; - IID_ISAXLocator: TGUID = '{9B7E472A-0DE4-4640-BFF3-84D38A051C31}'; - IID_ISAXAttributes: TGUID = '{F078ABE1-45D2-4832-91EA-4466CE2F25C9}'; - IID_ISAXDTDHandler: TGUID = '{E15C1BAF-AFB3-4D60-8C36-19A8C45DEFED}'; - IID_ISAXErrorHandler: TGUID = '{A60511C4-CCF5-479E-98A3-DC8DC545B7D0}'; - IID_ISAXXMLFilter: TGUID = '{70409222-CA09-4475-ACB8-40312FE8D145}'; - IID_ISAXLexicalHandler: TGUID = '{7F85D5F5-47A8-4497-BDA5-84BA04819EA6}'; - IID_ISAXDeclHandler: TGUID = '{862629AC-771A-47B2-8337-4E6843C1BE90}'; - IID_IVBSAXXMLReader: TGUID = '{8C033CAA-6CD6-4F73-B728-4531AF74945F}'; - IID_IVBSAXEntityResolver: TGUID = '{0C05D096-F45B-4ACA-AD1A-AA0BC25518DC}'; - IID_IVBSAXContentHandler: TGUID = '{2ED7290A-4DD5-4B46-BB26-4E4155E77FAA}'; - IID_IVBSAXLocator: TGUID = '{796E7AC5-5AA2-4EFF-ACAD-3FAAF01A3288}'; - IID_IVBSAXAttributes: TGUID = '{10DC0586-132B-4CAC-8BB3-DB00AC8B7EE0}'; - IID_IVBSAXDTDHandler: TGUID = '{24FB3297-302D-4620-BA39-3A732D850558}'; - IID_IVBSAXErrorHandler: TGUID = '{D963D3FE-173C-4862-9095-B92F66995F52}'; - IID_IVBSAXXMLFilter: TGUID = '{1299EB1B-5B88-433E-82DE-82CA75AD4E04}'; - IID_IVBSAXLexicalHandler: TGUID = '{032AAC35-8C0E-4D9D-979F-E3B702935576}'; - IID_IVBSAXDeclHandler: TGUID = '{E8917260-7579-4BE1-B5DD-7AFBFA6F077B}'; - IID_IMXWriter: TGUID = '{4D7FF4BA-1565-4EA8-94E1-6E724A46F98D}'; - IID_IMXAttributes: TGUID = '{F10D27CC-3EC0-415C-8ED8-77AB1C5E7262}'; - IID_IMXReaderControl: TGUID = '{808F4E35-8D5A-4FBE-8466-33A41279ED30}'; - IID_IMXSchemaDeclHandler: TGUID = '{FA4BB38C-FAF9-4CCA-9302-D1DD0FE520DB}'; - IID_ISchemaItem: TGUID = '{50EA08B3-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaParticle: TGUID = '{50EA08B5-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaElement: TGUID = '{50EA08B7-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchema: TGUID = '{50EA08B4-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaItemCollection: TGUID = '{50EA08B2-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaStringCollection: TGUID = '{50EA08B1-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaType: TGUID = '{50EA08B8-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaComplexType: TGUID = '{50EA08B9-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaAny: TGUID = '{50EA08BC-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaModelGroup: TGUID = '{50EA08BB-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_IXMLDOMSchemaCollection2: TGUID = '{50EA08B0-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaAttribute: TGUID = '{50EA08B6-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaAttributeGroup: TGUID = '{50EA08BA-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaIdentityConstraint: TGUID = '{50EA08BD-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_ISchemaNotation: TGUID = '{50EA08BE-DD1B-4664-9A50-C2F40F4BD79A}'; - IID_IXMLElementCollection: TGUID = '{65725580-9B5D-11D0-9BFE-00C04FC99C8E}'; - IID_IXMLDocument: TGUID = '{F52E2B61-18A1-11D1-B105-00805F49916B}'; - IID_IXMLElement: TGUID = '{3F7F31AC-E15F-11D0-9C25-00C04FC99C8E}'; - IID_IXMLDocument2: TGUID = '{2B8DE2FE-8D2D-11D1-B2FC-00C04FD915A9}'; - IID_IXMLElement2: TGUID = '{2B8DE2FF-8D2D-11D1-B2FC-00C04FD915A9}'; - IID_IXMLAttribute: TGUID = '{D4D4A0FC-3B73-11D1-B2B4-00C04FB92596}'; - IID_IXMLError: TGUID = '{948C5AD3-C58D-11D0-9C0B-00C04FC99C8E}'; - IID_IXMLDOMSelection: TGUID = '{AA634FC7-5888-44A7-A257-3A47150D3A0E}'; - DIID_XMLDOMDocumentEvents: TGUID = '{3EFAA427-272F-11D2-836F-0000F87A7782}'; - IID_IDSOControl: TGUID = '{310AFA62-0575-11D2-9CA9-0060B0EC3D39}'; - IID_IXMLHTTPRequest: TGUID = '{ED8C108D-4349-11D2-91A4-00C04F7969E8}'; - IID_IServerXMLHTTPRequest: TGUID = '{2E9196BF-13BA-4DD4-91CA-6C571F281495}'; - IID_IServerXMLHTTPRequest2: TGUID = '{2E01311B-C322-4B0A-BD77-B90CFDC8DCE7}'; - IID_IMXNamespacePrefixes: TGUID = '{C90352F4-643C-4FBC-BB23-E996EB2D51FD}'; - IID_IVBMXNamespaceManager: TGUID = '{C90352F5-643C-4FBC-BB23-E996EB2D51FD}'; - IID_IMXNamespaceManager: TGUID = '{C90352F6-643C-4FBC-BB23-E996EB2D51FD}'; - CLASS_DOMDocument: TGUID = '{F6D90F11-9C73-11D3-B32E-00C04F990BB4}'; - CLASS_DOMDocument26: TGUID = '{F5078F1B-C551-11D3-89B9-0000F81FE221}'; - CLASS_DOMDocument30: TGUID = '{F5078F32-C551-11D3-89B9-0000F81FE221}'; - CLASS_DOMDocument40: TGUID = '{88D969C0-F192-11D4-A65F-0040963251E5}'; - CLASS_FreeThreadedDOMDocument: TGUID = '{F6D90F12-9C73-11D3-B32E-00C04F990BB4}'; - CLASS_FreeThreadedDOMDocument26: TGUID = '{F5078F1C-C551-11D3-89B9-0000F81FE221}'; - CLASS_FreeThreadedDOMDocument30: TGUID = '{F5078F33-C551-11D3-89B9-0000F81FE221}'; - CLASS_FreeThreadedDOMDocument40: TGUID = '{88D969C1-F192-11D4-A65F-0040963251E5}'; - CLASS_XMLSchemaCache: TGUID = '{373984C9-B845-449B-91E7-45AC83036ADE}'; - CLASS_XMLSchemaCache26: TGUID = '{F5078F1D-C551-11D3-89B9-0000F81FE221}'; - CLASS_XMLSchemaCache30: TGUID = '{F5078F34-C551-11D3-89B9-0000F81FE221}'; - CLASS_XMLSchemaCache40: TGUID = '{88D969C2-F192-11D4-A65F-0040963251E5}'; - CLASS_XSLTemplate: TGUID = '{2933BF94-7B36-11D2-B20E-00C04F983E60}'; - CLASS_XSLTemplate26: TGUID = '{F5078F21-C551-11D3-89B9-0000F81FE221}'; - CLASS_XSLTemplate30: TGUID = '{F5078F36-C551-11D3-89B9-0000F81FE221}'; - CLASS_XSLTemplate40: TGUID = '{88D969C3-F192-11D4-A65F-0040963251E5}'; - CLASS_DSOControl: TGUID = '{F6D90F14-9C73-11D3-B32E-00C04F990BB4}'; - CLASS_DSOControl26: TGUID = '{F5078F1F-C551-11D3-89B9-0000F81FE221}'; - CLASS_DSOControl30: TGUID = '{F5078F39-C551-11D3-89B9-0000F81FE221}'; - CLASS_DSOControl40: TGUID = '{88D969C4-F192-11D4-A65F-0040963251E5}'; - CLASS_XMLHTTP: TGUID = '{F6D90F16-9C73-11D3-B32E-00C04F990BB4}'; - CLASS_XMLHTTP26: TGUID = '{F5078F1E-C551-11D3-89B9-0000F81FE221}'; - CLASS_XMLHTTP30: TGUID = '{F5078F35-C551-11D3-89B9-0000F81FE221}'; - CLASS_XMLHTTP40: TGUID = '{88D969C5-F192-11D4-A65F-0040963251E5}'; - CLASS_ServerXMLHTTP: TGUID = '{AFBA6B42-5692-48EA-8141-DC517DCF0EF1}'; - CLASS_ServerXMLHTTP30: TGUID = '{AFB40FFD-B609-40A3-9828-F88BBE11E4E3}'; - CLASS_ServerXMLHTTP40: TGUID = '{88D969C6-F192-11D4-A65F-0040963251E5}'; - CLASS_SAXXMLReader: TGUID = '{079AA557-4A18-424A-8EEE-E39F0A8D41B9}'; - CLASS_SAXXMLReader30: TGUID = '{3124C396-FB13-4836-A6AD-1317F1713688}'; - CLASS_SAXXMLReader40: TGUID = '{7C6E29BC-8B8B-4C3D-859E-AF6CD158BE0F}'; - CLASS_MXXMLWriter: TGUID = '{FC220AD8-A72A-4EE8-926E-0B7AD152A020}'; - CLASS_MXXMLWriter30: TGUID = '{3D813DFE-6C91-4A4E-8F41-04346A841D9C}'; - CLASS_MXXMLWriter40: TGUID = '{88D969C8-F192-11D4-A65F-0040963251E5}'; - CLASS_MXHTMLWriter: TGUID = '{A4C23EC3-6B70-4466-9127-550077239978}'; - CLASS_MXHTMLWriter30: TGUID = '{853D1540-C1A7-4AA9-A226-4D3BD301146D}'; - CLASS_MXHTMLWriter40: TGUID = '{88D969C9-F192-11D4-A65F-0040963251E5}'; - CLASS_SAXAttributes: TGUID = '{4DD441AD-526D-4A77-9F1B-9841ED802FB0}'; - CLASS_SAXAttributes30: TGUID = '{3E784A01-F3AE-4DC0-9354-9526B9370EBA}'; - CLASS_SAXAttributes40: TGUID = '{88D969CA-F192-11D4-A65F-0040963251E5}'; - CLASS_MXNamespaceManager: TGUID = '{88D969D5-F192-11D4-A65F-0040963251E5}'; - CLASS_MXNamespaceManager40: TGUID = '{88D969D6-F192-11D4-A65F-0040963251E5}'; - CLASS_XMLDocument: TGUID = '{CFC399AF-D876-11D0-9C10-00C04FC99C8E}'; - -// *********************************************************************// -// Declaration of Enumerations defined in Type Library -// *********************************************************************// -// Constants for enum tagDOMNodeType -type - tagDOMNodeType = TOleEnum; -const - NODE_INVALID = $00000000; - NODE_ELEMENT = $00000001; - NODE_ATTRIBUTE = $00000002; - NODE_TEXT = $00000003; - NODE_CDATA_SECTION = $00000004; - NODE_ENTITY_REFERENCE = $00000005; - NODE_ENTITY = $00000006; - NODE_PROCESSING_INSTRUCTION = $00000007; - NODE_COMMENT = $00000008; - NODE_DOCUMENT = $00000009; - NODE_DOCUMENT_TYPE = $0000000A; - NODE_DOCUMENT_FRAGMENT = $0000000B; - NODE_NOTATION = $0000000C; - -// Constants for enum _SOMITEMTYPE -type - _SOMITEMTYPE = TOleEnum; -const - SOMITEM_SCHEMA = $00001000; - SOMITEM_ATTRIBUTE = $00001001; - SOMITEM_ATTRIBUTEGROUP = $00001002; - SOMITEM_NOTATION = $00001003; - SOMITEM_IDENTITYCONSTRAINT = $00001100; - SOMITEM_KEY = $00001101; - SOMITEM_KEYREF = $00001102; - SOMITEM_UNIQUE = $00001103; - SOMITEM_ANYTYPE = $00002000; - SOMITEM_DATATYPE = $00002100; - SOMITEM_DATATYPE_ANYTYPE = $00002101; - SOMITEM_DATATYPE_ANYURI = $00002102; - SOMITEM_DATATYPE_BASE64BINARY = $00002103; - SOMITEM_DATATYPE_BOOLEAN = $00002104; - SOMITEM_DATATYPE_BYTE = $00002105; - SOMITEM_DATATYPE_DATE = $00002106; - SOMITEM_DATATYPE_DATETIME = $00002107; - SOMITEM_DATATYPE_DAY = $00002108; - SOMITEM_DATATYPE_DECIMAL = $00002109; - SOMITEM_DATATYPE_DOUBLE = $0000210A; - SOMITEM_DATATYPE_DURATION = $0000210B; - SOMITEM_DATATYPE_ENTITIES = $0000210C; - SOMITEM_DATATYPE_ENTITY = $0000210D; - SOMITEM_DATATYPE_FLOAT = $0000210E; - SOMITEM_DATATYPE_HEXBINARY = $0000210F; - SOMITEM_DATATYPE_ID = $00002110; - SOMITEM_DATATYPE_IDREF = $00002111; - SOMITEM_DATATYPE_IDREFS = $00002112; - SOMITEM_DATATYPE_INT = $00002113; - SOMITEM_DATATYPE_INTEGER = $00002114; - SOMITEM_DATATYPE_LANGUAGE = $00002115; - SOMITEM_DATATYPE_LONG = $00002116; - SOMITEM_DATATYPE_MONTH = $00002117; - SOMITEM_DATATYPE_MONTHDAY = $00002118; - SOMITEM_DATATYPE_NAME = $00002119; - SOMITEM_DATATYPE_NCNAME = $0000211A; - SOMITEM_DATATYPE_NEGATIVEINTEGER = $0000211B; - SOMITEM_DATATYPE_NMTOKEN = $0000211C; - SOMITEM_DATATYPE_NMTOKENS = $0000211D; - SOMITEM_DATATYPE_NONNEGATIVEINTEGER = $0000211E; - SOMITEM_DATATYPE_NONPOSITIVEINTEGER = $0000211F; - SOMITEM_DATATYPE_NORMALIZEDSTRING = $00002120; - SOMITEM_DATATYPE_NOTATION = $00002121; - SOMITEM_DATATYPE_POSITIVEINTEGER = $00002122; - SOMITEM_DATATYPE_QNAME = $00002123; - SOMITEM_DATATYPE_SHORT = $00002124; - SOMITEM_DATATYPE_STRING = $00002125; - SOMITEM_DATATYPE_TIME = $00002126; - SOMITEM_DATATYPE_TOKEN = $00002127; - SOMITEM_DATATYPE_UNSIGNEDBYTE = $00002128; - SOMITEM_DATATYPE_UNSIGNEDINT = $00002129; - SOMITEM_DATATYPE_UNSIGNEDLONG = $0000212A; - SOMITEM_DATATYPE_UNSIGNEDSHORT = $0000212B; - SOMITEM_DATATYPE_YEAR = $0000212C; - SOMITEM_DATATYPE_YEARMONTH = $0000212D; - SOMITEM_DATATYPE_ANYSIMPLETYPE = $000021FF; - SOMITEM_SIMPLETYPE = $00002200; - SOMITEM_COMPLEXTYPE = $00002400; - SOMITEM_PARTICLE = $00004000; - SOMITEM_ANY = $00004001; - SOMITEM_ANYATTRIBUTE = $00004002; - SOMITEM_ELEMENT = $00004003; - SOMITEM_GROUP = $00004100; - SOMITEM_ALL = $00004101; - SOMITEM_CHOICE = $00004102; - SOMITEM_SEQUENCE = $00004103; - SOMITEM_EMPTYPARTICLE = $00004104; - SOMITEM_NULL = $00000800; - SOMITEM_NULL_TYPE = $00002800; - SOMITEM_NULL_ANY = $00004801; - SOMITEM_NULL_ANYATTRIBUTE = $00004802; - SOMITEM_NULL_ELEMENT = $00004803; - -// Constants for enum _SCHEMADERIVATIONMETHOD -type - _SCHEMADERIVATIONMETHOD = TOleEnum; -const - SCHEMADERIVATIONMETHOD_EMPTY = $00000000; - SCHEMADERIVATIONMETHOD_SUBSTITUTION = $00000001; - SCHEMADERIVATIONMETHOD_EXTENSION = $00000002; - SCHEMADERIVATIONMETHOD_RESTRICTION = $00000004; - SCHEMADERIVATIONMETHOD_LIST = $00000008; - SCHEMADERIVATIONMETHOD_UNION = $00000010; - SCHEMADERIVATIONMETHOD_ALL = $000000FF; - SCHEMADERIVATIONMETHOD_NONE = $00000100; - -// Constants for enum _SCHEMATYPEVARIETY -type - _SCHEMATYPEVARIETY = TOleEnum; -const - SCHEMATYPEVARIETY_NONE = $FFFFFFFF; - SCHEMATYPEVARIETY_ATOMIC = $00000000; - SCHEMATYPEVARIETY_LIST = $00000001; - SCHEMATYPEVARIETY_UNION = $00000002; - -// Constants for enum _SCHEMAWHITESPACE -type - _SCHEMAWHITESPACE = TOleEnum; -const - SCHEMAWHITESPACE_NONE = $FFFFFFFF; - SCHEMAWHITESPACE_PRESERVE = $00000000; - SCHEMAWHITESPACE_REPLACE = $00000001; - SCHEMAWHITESPACE_COLLAPSE = $00000002; - -// Constants for enum _SCHEMAPROCESSCONTENTS -type - _SCHEMAPROCESSCONTENTS = TOleEnum; -const - SCHEMAPROCESSCONTENTS_NONE = $00000000; - SCHEMAPROCESSCONTENTS_SKIP = $00000001; - SCHEMAPROCESSCONTENTS_LAX = $00000002; - SCHEMAPROCESSCONTENTS_STRICT = $00000003; - -// Constants for enum _SCHEMACONTENTTYPE -type - _SCHEMACONTENTTYPE = TOleEnum; -const - SCHEMACONTENTTYPE_EMPTY = $00000000; - SCHEMACONTENTTYPE_TEXTONLY = $00000001; - SCHEMACONTENTTYPE_ELEMENTONLY = $00000002; - SCHEMACONTENTTYPE_MIXED = $00000003; - -// Constants for enum _SCHEMAUSE -type - _SCHEMAUSE = TOleEnum; -const - SCHEMAUSE_OPTIONAL = $00000000; - SCHEMAUSE_PROHIBITED = $00000001; - SCHEMAUSE_REQUIRED = $00000002; - -// Constants for enum tagXMLEMEM_TYPE -type - tagXMLEMEM_TYPE = TOleEnum; -const - XMLELEMTYPE_ELEMENT = $00000000; - XMLELEMTYPE_TEXT = $00000001; - XMLELEMTYPE_COMMENT = $00000002; - XMLELEMTYPE_DOCUMENT = $00000003; - XMLELEMTYPE_DTD = $00000004; - XMLELEMTYPE_PI = $00000005; - XMLELEMTYPE_OTHER = $00000006; - -// Constants for enum _SERVERXMLHTTP_OPTION -type - _SERVERXMLHTTP_OPTION = TOleEnum; -const - SXH_OPTION_URL = $FFFFFFFF; - SXH_OPTION_URL_CODEPAGE = $00000000; - SXH_OPTION_ESCAPE_PERCENT_IN_URL = $00000001; - SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = $00000002; - SXH_OPTION_SELECT_CLIENT_SSL_CERT = $00000003; - -// Constants for enum _SXH_SERVER_CERT_OPTION -type - _SXH_SERVER_CERT_OPTION = TOleEnum; -const - SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = $00000100; - SXH_SERVER_CERT_IGNORE_WRONG_USAGE = $00000200; - SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID = $00001000; - SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = $00002000; - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = $00003300; - -// Constants for enum _SXH_PROXY_SETTING -type - _SXH_PROXY_SETTING = TOleEnum; -const - SXH_PROXY_SET_DEFAULT = $00000000; - SXH_PROXY_SET_PRECONFIG = $00000000; - SXH_PROXY_SET_DIRECT = $00000001; - SXH_PROXY_SET_PROXY = $00000002; - -type - -// *********************************************************************// -// Forward declaration of types defined in TypeLibrary -// *********************************************************************// - IXMLDOMImplementation = interface; - IXMLDOMNode = interface; - IXMLDOMNodeList = interface; - IXMLDOMNamedNodeMap = interface; - IXMLDOMDocument = interface; - IXMLDOMDocumentType = interface; - IXMLDOMElement = interface; - IXMLDOMAttribute = interface; - IXMLDOMDocumentFragment = interface; - IXMLDOMCharacterData = interface; - IXMLDOMText = interface; - IXMLDOMComment = interface; - IXMLDOMCDATASection = interface; - IXMLDOMProcessingInstruction = interface; - IXMLDOMEntityReference = interface; - IXMLDOMParseError = interface; - IXMLDOMDocument2 = interface; - IXMLDOMSchemaCollection = interface; - IXMLDOMNotation = interface; - IXMLDOMEntity = interface; - IXTLRuntime = interface; - IXSLTemplate = interface; - IXSLProcessor = interface; - ISAXXMLReader = interface; - ISAXEntityResolver = interface; - ISAXContentHandler = interface; - ISAXLocator = interface; - ISAXAttributes = interface; - ISAXDTDHandler = interface; - ISAXErrorHandler = interface; - ISAXXMLFilter = interface; - ISAXLexicalHandler = interface; - ISAXDeclHandler = interface; - IVBSAXXMLReader = interface; - IVBSAXEntityResolver = interface; - IVBSAXContentHandler = interface; - IVBSAXLocator = interface; - IVBSAXAttributes = interface; - IVBSAXDTDHandler = interface; - IVBSAXErrorHandler = interface; - IVBSAXXMLFilter = interface; - IVBSAXLexicalHandler = interface; - IVBSAXDeclHandler = interface; - IMXWriter = interface; - IMXAttributes = interface; - IMXReaderControl = interface; - IMXSchemaDeclHandler = interface; - ISchemaItem = interface; - ISchemaParticle = interface; - ISchemaElement = interface; - ISchema = interface; - ISchemaItemCollection = interface; - ISchemaStringCollection = interface; - ISchemaType = interface; - ISchemaComplexType = interface; - ISchemaAny = interface; - ISchemaModelGroup = interface; - IXMLDOMSchemaCollection2 = interface; - ISchemaAttribute = interface; - ISchemaAttributeGroup = interface; - ISchemaIdentityConstraint = interface; - ISchemaNotation = interface; - IXMLElementCollection = interface; - IXMLDocument = interface; - IXMLElement = interface; - IXMLDocument2 = interface; - IXMLElement2 = interface; - IXMLAttribute = interface; - IXMLError = interface; - IXMLDOMSelection = interface; - IDSOControl = interface; - IXMLHTTPRequest = interface; - IServerXMLHTTPRequest = interface; - IServerXMLHTTPRequest2 = interface; - IMXNamespacePrefixes = interface; - IVBMXNamespaceManager = interface; - IMXNamespaceManager = interface; - -// *********************************************************************// -// Declaration of CoClasses defined in Type Library -// (NOTE: Here we map each CoClass to its Default Interface) -// *********************************************************************// - DOMDocument = IXMLDOMDocument2; - DOMDocument26 = IXMLDOMDocument2; - DOMDocument30 = IXMLDOMDocument2; - DOMDocument40 = IXMLDOMDocument2; - FreeThreadedDOMDocument = IXMLDOMDocument2; - FreeThreadedDOMDocument26 = IXMLDOMDocument2; - FreeThreadedDOMDocument30 = IXMLDOMDocument2; - FreeThreadedDOMDocument40 = IXMLDOMDocument2; - XMLSchemaCache = IXMLDOMSchemaCollection; - XMLSchemaCache26 = IXMLDOMSchemaCollection; - XMLSchemaCache30 = IXMLDOMSchemaCollection; - XMLSchemaCache40 = IXMLDOMSchemaCollection2; - XSLTemplate = IXSLTemplate; - XSLTemplate26 = IXSLTemplate; - XSLTemplate30 = IXSLTemplate; - XSLTemplate40 = IXSLTemplate; - DSOControl = IDSOControl; - DSOControl26 = IDSOControl; - DSOControl30 = IDSOControl; - DSOControl40 = IDSOControl; - XMLHTTP = IXMLHTTPRequest; - XMLHTTP26 = IXMLHTTPRequest; - XMLHTTP30 = IXMLHTTPRequest; - XMLHTTP40 = IXMLHTTPRequest; - ServerXMLHTTP = IServerXMLHTTPRequest2; - ServerXMLHTTP30 = IServerXMLHTTPRequest2; - ServerXMLHTTP40 = IServerXMLHTTPRequest2; - SAXXMLReader = IVBSAXXMLReader; - SAXXMLReader30 = IVBSAXXMLReader; - SAXXMLReader40 = IVBSAXXMLReader; - MXXMLWriter = IMXWriter; - MXXMLWriter30 = IMXWriter; - MXXMLWriter40 = IMXWriter; - MXHTMLWriter = IMXWriter; - MXHTMLWriter30 = IMXWriter; - MXHTMLWriter40 = IMXWriter; - SAXAttributes = IMXAttributes; - SAXAttributes30 = IMXAttributes; - SAXAttributes40 = IMXAttributes; - MXNamespaceManager = IVBMXNamespaceManager; - MXNamespaceManager40 = IVBMXNamespaceManager; - XMLDocument = IXMLDocument2; - - -// *********************************************************************// -// Declaration of structures, unions and aliases. -// *********************************************************************// - PWord1 = ^Word; {*} - PUserType1 = ^_xml_error; {*} - - DOMNodeType = tagDOMNodeType; - SOMITEMTYPE = _SOMITEMTYPE; - SCHEMADERIVATIONMETHOD = _SCHEMADERIVATIONMETHOD; - SCHEMATYPEVARIETY = _SCHEMATYPEVARIETY; - SCHEMAWHITESPACE = _SCHEMAWHITESPACE; - SCHEMAPROCESSCONTENTS = _SCHEMAPROCESSCONTENTS; - SCHEMACONTENTTYPE = _SCHEMACONTENTTYPE; - SCHEMAUSE = _SCHEMAUSE; - - _xml_error = packed record - _nLine: SYSUINT; - _pchBuf: WideString; - _cchBuf: SYSUINT; - _ich: SYSUINT; - _pszFound: WideString; - _pszExpected: WideString; - _reserved1: LongWord; - _reserved2: LongWord; - end; - - XMLELEM_TYPE = tagXMLEMEM_TYPE; - SERVERXMLHTTP_OPTION = _SERVERXMLHTTP_OPTION; - SXH_SERVER_CERT_OPTION = _SXH_SERVER_CERT_OPTION; - SXH_PROXY_SETTING = _SXH_PROXY_SETTING; - -// *********************************************************************// -// Interface: IXMLDOMImplementation -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8F-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMImplementation = interface(IDispatch) - ['{2933BF8F-7B36-11D2-B20E-00C04F983E60}'] - function hasFeature(const feature: WideString; const version: WideString): WordBool; safecall; - end; - -// *********************************************************************// -// Interface: IXMLDOMNode -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF80-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMNode = interface(IDispatch) - ['{2933BF80-7B36-11D2-B20E-00C04F983E60}'] - function Get_nodeName: WideString; safecall; - function Get_nodeValue: OleVariant; safecall; - procedure Set_nodeValue(value: OleVariant); safecall; - function Get_nodeType: DOMNodeType; safecall; - function Get_parentNode: IXMLDOMNode; safecall; - function Get_childNodes: IXMLDOMNodeList; safecall; - function Get_firstChild: IXMLDOMNode; safecall; - function Get_lastChild: IXMLDOMNode; safecall; - function Get_previousSibling: IXMLDOMNode; safecall; - function Get_nextSibling: IXMLDOMNode; safecall; - function Get_attributes: IXMLDOMNamedNodeMap; safecall; - function insertBefore(const newChild: IXMLDOMNode; refChild: OleVariant): IXMLDOMNode; safecall; - function replaceChild(const newChild: IXMLDOMNode; const oldChild: IXMLDOMNode): IXMLDOMNode; safecall; - function removeChild(const childNode: IXMLDOMNode): IXMLDOMNode; safecall; - function appendChild(const newChild: IXMLDOMNode): IXMLDOMNode; safecall; - function hasChildNodes: WordBool; safecall; - function Get_ownerDocument: IXMLDOMDocument; safecall; - function cloneNode(deep: WordBool): IXMLDOMNode; safecall; - function Get_nodeTypeString: WideString; safecall; - function Get_text: WideString; safecall; - procedure Set_text(const text: WideString); safecall; - function Get_specified: WordBool; safecall; - function Get_definition: IXMLDOMNode; safecall; - function Get_nodeTypedValue: OleVariant; safecall; - procedure Set_nodeTypedValue(typedValue: OleVariant); safecall; - function Get_dataType: OleVariant; safecall; - procedure Set_dataType(const dataTypeName: WideString); safecall; - function Get_xml: WideString; safecall; - function transformNode(const stylesheet: IXMLDOMNode): WideString; safecall; - function selectNodes(const queryString: WideString): IXMLDOMNodeList; safecall; - function selectSingleNode(const queryString: WideString): IXMLDOMNode; safecall; - function Get_parsed: WordBool; safecall; - function Get_namespaceURI: WideString; safecall; - function Get_prefix: WideString; safecall; - function Get_baseName: WideString; safecall; - procedure transformNodeToObject(const stylesheet: IXMLDOMNode; outputObject: OleVariant); safecall; - property nodeName: WideString read Get_nodeName; - property nodeValue: OleVariant read Get_nodeValue write Set_nodeValue; - property nodeType: DOMNodeType read Get_nodeType; - property parentNode: IXMLDOMNode read Get_parentNode; - property childNodes: IXMLDOMNodeList read Get_childNodes; - property firstChild: IXMLDOMNode read Get_firstChild; - property lastChild: IXMLDOMNode read Get_lastChild; - property previousSibling: IXMLDOMNode read Get_previousSibling; - property nextSibling: IXMLDOMNode read Get_nextSibling; - property attributes: IXMLDOMNamedNodeMap read Get_attributes; - property ownerDocument: IXMLDOMDocument read Get_ownerDocument; - property nodeTypeString: WideString read Get_nodeTypeString; - property text: WideString read Get_text write Set_text; - property specified: WordBool read Get_specified; - property definition: IXMLDOMNode read Get_definition; - property nodeTypedValue: OleVariant read Get_nodeTypedValue write Set_nodeTypedValue; - property xml: WideString read Get_xml; - property parsed: WordBool read Get_parsed; - property namespaceURI: WideString read Get_namespaceURI; - property prefix: WideString read Get_prefix; - property baseName: WideString read Get_baseName; - end; - -// *********************************************************************// -// Interface: IXMLDOMNodeList -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF82-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMNodeList = interface(IDispatch) - ['{2933BF82-7B36-11D2-B20E-00C04F983E60}'] - function Get_item(index: Integer): IXMLDOMNode; safecall; - function Get_length: Integer; safecall; - function nextNode: IXMLDOMNode; safecall; - procedure reset; safecall; - function Get__newEnum: IUnknown; safecall; - property item[index: Integer]: IXMLDOMNode read Get_item; default; - property length: Integer read Get_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: IXMLDOMNamedNodeMap -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF83-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMNamedNodeMap = interface(IDispatch) - ['{2933BF83-7B36-11D2-B20E-00C04F983E60}'] - function getNamedItem(const name: WideString): IXMLDOMNode; safecall; - function setNamedItem(const newItem: IXMLDOMNode): IXMLDOMNode; safecall; - function removeNamedItem(const name: WideString): IXMLDOMNode; safecall; - function Get_item(index: Integer): IXMLDOMNode; safecall; - function Get_length: Integer; safecall; - function getQualifiedItem(const baseName: WideString; const namespaceURI: WideString): IXMLDOMNode; safecall; - function removeQualifiedItem(const baseName: WideString; const namespaceURI: WideString): IXMLDOMNode; safecall; - function nextNode: IXMLDOMNode; safecall; - procedure reset; safecall; - function Get__newEnum: IUnknown; safecall; - property item[index: Integer]: IXMLDOMNode read Get_item; default; - property length: Integer read Get_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: IXMLDOMDocument -// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF81-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMDocument = interface(IXMLDOMNode) - ['{2933BF81-7B36-11D2-B20E-00C04F983E60}'] - function Get_doctype: IXMLDOMDocumentType; safecall; - function Get_implementation_: IXMLDOMImplementation; safecall; - function Get_documentElement: IXMLDOMElement; safecall; - procedure _Set_documentElement(const DOMElement: IXMLDOMElement); safecall; - function createElement(const tagName: WideString): IXMLDOMElement; safecall; - function createDocumentFragment: IXMLDOMDocumentFragment; safecall; - function createTextNode(const data: WideString): IXMLDOMText; safecall; - function createComment(const data: WideString): IXMLDOMComment; safecall; - function createCDATASection(const data: WideString): IXMLDOMCDATASection; safecall; - function createProcessingInstruction(const target: WideString; const data: WideString): IXMLDOMProcessingInstruction; safecall; - function createAttribute(const name: WideString): IXMLDOMAttribute; safecall; - function createEntityReference(const name: WideString): IXMLDOMEntityReference; safecall; - function getElementsByTagName(const tagName: WideString): IXMLDOMNodeList; safecall; - function createNode(type_: OleVariant; const name: WideString; const namespaceURI: WideString): IXMLDOMNode; safecall; - function nodeFromID(const idString: WideString): IXMLDOMNode; safecall; - function load(xmlSource: OleVariant): WordBool; safecall; - function Get_readyState: Integer; safecall; - function Get_parseError: IXMLDOMParseError; safecall; - function Get_url: WideString; safecall; - function Get_async: WordBool; safecall; - procedure Set_async(isAsync: WordBool); safecall; - procedure abort; safecall; - function loadXML(const bstrXML: WideString): WordBool; safecall; - procedure save(destination: OleVariant); safecall; - function Get_validateOnParse: WordBool; safecall; - procedure Set_validateOnParse(isValidating: WordBool); safecall; - function Get_resolveExternals: WordBool; safecall; - procedure Set_resolveExternals(isResolving: WordBool); safecall; - function Get_preserveWhiteSpace: WordBool; safecall; - procedure Set_preserveWhiteSpace(isPreserving: WordBool); safecall; - procedure Set_onreadystatechange(Param1: OleVariant); safecall; - procedure Set_ondataavailable(Param1: OleVariant); safecall; - procedure Set_ontransformnode(Param1: OleVariant); safecall; - property doctype: IXMLDOMDocumentType read Get_doctype; - property implementation_: IXMLDOMImplementation read Get_implementation_; - property documentElement: IXMLDOMElement read Get_documentElement write _Set_documentElement; - property readyState: Integer read Get_readyState; - property parseError: IXMLDOMParseError read Get_parseError; - property url: WideString read Get_url; - property async: WordBool read Get_async write Set_async; - property validateOnParse: WordBool read Get_validateOnParse write Set_validateOnParse; - property resolveExternals: WordBool read Get_resolveExternals write Set_resolveExternals; - property preserveWhiteSpace: WordBool read Get_preserveWhiteSpace write Set_preserveWhiteSpace; - property onreadystatechange: OleVariant write Set_onreadystatechange; - property ondataavailable: OleVariant write Set_ondataavailable; - property ontransformnode: OleVariant write Set_ontransformnode; - end; - -// *********************************************************************// -// Interface: IXMLDOMDocumentType -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8B-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMDocumentType = interface(IXMLDOMNode) - ['{2933BF8B-7B36-11D2-B20E-00C04F983E60}'] - function Get_name: WideString; safecall; - function Get_entities: IXMLDOMNamedNodeMap; safecall; - function Get_notations: IXMLDOMNamedNodeMap; safecall; - property name: WideString read Get_name; - property entities: IXMLDOMNamedNodeMap read Get_entities; - property notations: IXMLDOMNamedNodeMap read Get_notations; - end; - -// *********************************************************************// -// Interface: IXMLDOMElement -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF86-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMElement = interface(IXMLDOMNode) - ['{2933BF86-7B36-11D2-B20E-00C04F983E60}'] - function Get_tagName: WideString; safecall; - function getAttribute(const name: WideString): OleVariant; safecall; - procedure setAttribute(const name: WideString; value: OleVariant); safecall; - procedure removeAttribute(const name: WideString); safecall; - function getAttributeNode(const name: WideString): IXMLDOMAttribute; safecall; - function setAttributeNode(const DOMAttribute: IXMLDOMAttribute): IXMLDOMAttribute; safecall; - function removeAttributeNode(const DOMAttribute: IXMLDOMAttribute): IXMLDOMAttribute; safecall; - function getElementsByTagName(const tagName: WideString): IXMLDOMNodeList; safecall; - procedure normalize; safecall; - property tagName: WideString read Get_tagName; - end; - -// *********************************************************************// -// Interface: IXMLDOMAttribute -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF85-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMAttribute = interface(IXMLDOMNode) - ['{2933BF85-7B36-11D2-B20E-00C04F983E60}'] - function Get_name: WideString; safecall; - function Get_value: OleVariant; safecall; - procedure Set_value(attributeValue: OleVariant); safecall; - property name: WideString read Get_name; - property value: OleVariant read Get_value write Set_value; - end; - -// *********************************************************************// -// Interface: IXMLDOMDocumentFragment -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {3EFAA413-272F-11D2-836F-0000F87A7782} -// *********************************************************************// - IXMLDOMDocumentFragment = interface(IXMLDOMNode) - ['{3EFAA413-272F-11D2-836F-0000F87A7782}'] - end; - -// *********************************************************************// -// Interface: IXMLDOMCharacterData -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF84-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMCharacterData = interface(IXMLDOMNode) - ['{2933BF84-7B36-11D2-B20E-00C04F983E60}'] - function Get_data: WideString; safecall; - procedure Set_data(const data: WideString); safecall; - function Get_length: Integer; safecall; - function substringData(offset: Integer; count: Integer): WideString; safecall; - procedure appendData(const data: WideString); safecall; - procedure insertData(offset: Integer; const data: WideString); safecall; - procedure deleteData(offset: Integer; count: Integer); safecall; - procedure replaceData(offset: Integer; count: Integer; const data: WideString); safecall; - property data: WideString read Get_data write Set_data; - property length: Integer read Get_length; - end; - -// *********************************************************************// -// Interface: IXMLDOMText -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF87-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMText = interface(IXMLDOMCharacterData) - ['{2933BF87-7B36-11D2-B20E-00C04F983E60}'] - procedure GhostMethod_IXMLDOMText_0_1; safecall; - procedure GhostMethod_IXMLDOMText_4_2; safecall; - procedure GhostMethod_IXMLDOMText_8_3; safecall; - procedure GhostMethod_IXMLDOMText_12_4; safecall; - procedure GhostMethod_IXMLDOMText_16_5; safecall; - procedure GhostMethod_IXMLDOMText_20_6; safecall; - procedure GhostMethod_IXMLDOMText_24_7; safecall; - procedure GhostMethod_IXMLDOMText_28_8; safecall; - procedure GhostMethod_IXMLDOMText_32_9; safecall; - procedure GhostMethod_IXMLDOMText_36_10; safecall; - procedure GhostMethod_IXMLDOMText_40_11; safecall; - procedure GhostMethod_IXMLDOMText_44_12; safecall; - procedure GhostMethod_IXMLDOMText_48_13; safecall; - procedure GhostMethod_IXMLDOMText_52_14; safecall; - procedure GhostMethod_IXMLDOMText_56_15; safecall; - procedure GhostMethod_IXMLDOMText_60_16; safecall; - procedure GhostMethod_IXMLDOMText_64_17; safecall; - procedure GhostMethod_IXMLDOMText_68_18; safecall; - procedure GhostMethod_IXMLDOMText_72_19; safecall; - procedure GhostMethod_IXMLDOMText_76_20; safecall; - procedure GhostMethod_IXMLDOMText_80_21; safecall; - procedure GhostMethod_IXMLDOMText_84_22; safecall; - procedure GhostMethod_IXMLDOMText_88_23; safecall; - procedure GhostMethod_IXMLDOMText_92_24; safecall; - procedure GhostMethod_IXMLDOMText_96_25; safecall; - procedure GhostMethod_IXMLDOMText_100_26; safecall; - procedure GhostMethod_IXMLDOMText_104_27; safecall; - procedure GhostMethod_IXMLDOMText_108_28; safecall; - procedure GhostMethod_IXMLDOMText_112_29; safecall; - procedure GhostMethod_IXMLDOMText_116_30; safecall; - procedure GhostMethod_IXMLDOMText_120_31; safecall; - procedure GhostMethod_IXMLDOMText_124_32; safecall; - procedure GhostMethod_IXMLDOMText_128_33; safecall; - procedure GhostMethod_IXMLDOMText_132_34; safecall; - procedure GhostMethod_IXMLDOMText_136_35; safecall; - procedure GhostMethod_IXMLDOMText_140_36; safecall; - procedure GhostMethod_IXMLDOMText_144_37; safecall; - procedure GhostMethod_IXMLDOMText_148_38; safecall; - procedure GhostMethod_IXMLDOMText_152_39; safecall; - procedure GhostMethod_IXMLDOMText_156_40; safecall; - procedure GhostMethod_IXMLDOMText_160_41; safecall; - procedure GhostMethod_IXMLDOMText_164_42; safecall; - procedure GhostMethod_IXMLDOMText_168_43; safecall; - procedure GhostMethod_IXMLDOMText_172_44; safecall; - procedure GhostMethod_IXMLDOMText_176_45; safecall; - procedure GhostMethod_IXMLDOMText_180_46; safecall; - procedure GhostMethod_IXMLDOMText_184_47; safecall; - procedure GhostMethod_IXMLDOMText_188_48; safecall; - procedure GhostMethod_IXMLDOMText_192_49; safecall; - procedure GhostMethod_IXMLDOMText_196_50; safecall; - procedure GhostMethod_IXMLDOMText_200_51; safecall; - function splitText(offset: Integer): IXMLDOMText; safecall; - end; - -// *********************************************************************// -// Interface: IXMLDOMComment -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF88-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMComment = interface(IXMLDOMCharacterData) - ['{2933BF88-7B36-11D2-B20E-00C04F983E60}'] - end; - -// *********************************************************************// -// Interface: IXMLDOMCDATASection -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8A-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMCDATASection = interface(IXMLDOMText) - ['{2933BF8A-7B36-11D2-B20E-00C04F983E60}'] - end; - -// *********************************************************************// -// Interface: IXMLDOMProcessingInstruction -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF89-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMProcessingInstruction = interface(IXMLDOMNode) - ['{2933BF89-7B36-11D2-B20E-00C04F983E60}'] - function Get_target: WideString; safecall; - function Get_data: WideString; safecall; - procedure Set_data(const value: WideString); safecall; - property target: WideString read Get_target; - property data: WideString read Get_data write Set_data; - end; - -// *********************************************************************// -// Interface: IXMLDOMEntityReference -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8E-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMEntityReference = interface(IXMLDOMNode) - ['{2933BF8E-7B36-11D2-B20E-00C04F983E60}'] - end; - -// *********************************************************************// -// Interface: IXMLDOMParseError -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {3EFAA426-272F-11D2-836F-0000F87A7782} -// *********************************************************************// - IXMLDOMParseError = interface(IDispatch) - ['{3EFAA426-272F-11D2-836F-0000F87A7782}'] - function Get_errorCode: Integer; safecall; - function Get_url: WideString; safecall; - function Get_reason: WideString; safecall; - function Get_srcText: WideString; safecall; - function Get_line: Integer; safecall; - function Get_linepos: Integer; safecall; - function Get_filepos: Integer; safecall; - property errorCode: Integer read Get_errorCode; - property url: WideString read Get_url; - property reason: WideString read Get_reason; - property srcText: WideString read Get_srcText; - property line: Integer read Get_line; - property linepos: Integer read Get_linepos; - property filepos: Integer read Get_filepos; - end; - -// *********************************************************************// -// Interface: IXMLDOMDocument2 -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF95-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMDocument2 = interface(IXMLDOMDocument) - ['{2933BF95-7B36-11D2-B20E-00C04F983E60}'] - function Get_namespaces: IXMLDOMSchemaCollection; safecall; - function Get_schemas: OleVariant; safecall; - procedure _Set_schemas(otherCollection: OleVariant); safecall; - function validate: IXMLDOMParseError; safecall; - procedure setProperty(const name: WideString; value: OleVariant); safecall; - function getProperty(const name: WideString): OleVariant; safecall; - property namespaces: IXMLDOMSchemaCollection read Get_namespaces; - property schemas: OleVariant read Get_schemas write _Set_schemas; - end; - -// *********************************************************************// -// Interface: IXMLDOMSchemaCollection -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {373984C8-B845-449B-91E7-45AC83036ADE} -// *********************************************************************// - IXMLDOMSchemaCollection = interface(IDispatch) - ['{373984C8-B845-449B-91E7-45AC83036ADE}'] - procedure add(const namespaceURI: WideString; var_: OleVariant); safecall; - function get(const namespaceURI: WideString): IXMLDOMNode; safecall; - procedure remove(const namespaceURI: WideString); safecall; - function Get_length: Integer; safecall; - function Get_namespaceURI(index: Integer): WideString; safecall; - procedure addCollection(const otherCollection: IXMLDOMSchemaCollection); safecall; - function Get__newEnum: IUnknown; safecall; - property length: Integer read Get_length; - property namespaceURI[index: Integer]: WideString read Get_namespaceURI; default; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: IXMLDOMNotation -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8C-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMNotation = interface(IXMLDOMNode) - ['{2933BF8C-7B36-11D2-B20E-00C04F983E60}'] - function Get_publicId: OleVariant; safecall; - function Get_systemId: OleVariant; safecall; - property publicId: OleVariant read Get_publicId; - property systemId: OleVariant read Get_systemId; - end; - -// *********************************************************************// -// Interface: IXMLDOMEntity -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF8D-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXMLDOMEntity = interface(IXMLDOMNode) - ['{2933BF8D-7B36-11D2-B20E-00C04F983E60}'] - function Get_publicId: OleVariant; safecall; - function Get_systemId: OleVariant; safecall; - function Get_notationName: WideString; safecall; - property publicId: OleVariant read Get_publicId; - property systemId: OleVariant read Get_systemId; - property notationName: WideString read Get_notationName; - end; - -// *********************************************************************// -// Interface: IXTLRuntime -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {3EFAA425-272F-11D2-836F-0000F87A7782} -// *********************************************************************// - IXTLRuntime = interface(IXMLDOMNode) - ['{3EFAA425-272F-11D2-836F-0000F87A7782}'] - function uniqueID(const pNode: IXMLDOMNode): Integer; safecall; - function depth(const pNode: IXMLDOMNode): Integer; safecall; - function childNumber(const pNode: IXMLDOMNode): Integer; safecall; - function ancestorChildNumber(const bstrNodeName: WideString; const pNode: IXMLDOMNode): Integer; safecall; - function absoluteChildNumber(const pNode: IXMLDOMNode): Integer; safecall; - function formatIndex(lIndex: Integer; const bstrFormat: WideString): WideString; safecall; - function formatNumber(dblNumber: Double; const bstrFormat: WideString): WideString; safecall; - function formatDate(varDate: OleVariant; const bstrFormat: WideString; varDestLocale: OleVariant): WideString; safecall; - function formatTime(varTime: OleVariant; const bstrFormat: WideString; varDestLocale: OleVariant): WideString; safecall; - end; - -// *********************************************************************// -// Interface: IXSLTemplate -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF93-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXSLTemplate = interface(IDispatch) - ['{2933BF93-7B36-11D2-B20E-00C04F983E60}'] - procedure _Set_stylesheet(const stylesheet: IXMLDOMNode); safecall; - function Get_stylesheet: IXMLDOMNode; safecall; - function createProcessor: IXSLProcessor; safecall; - property stylesheet: IXMLDOMNode read Get_stylesheet write _Set_stylesheet; - end; - -// *********************************************************************// -// Interface: IXSLProcessor -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2933BF92-7B36-11D2-B20E-00C04F983E60} -// *********************************************************************// - IXSLProcessor = interface(IDispatch) - ['{2933BF92-7B36-11D2-B20E-00C04F983E60}'] - procedure Set_input(pVar: OleVariant); safecall; - function Get_input: OleVariant; safecall; - function Get_ownerTemplate: IXSLTemplate; safecall; - procedure setStartMode(const mode: WideString; const namespaceURI: WideString); safecall; - function Get_startMode: WideString; safecall; - function Get_startModeURI: WideString; safecall; - procedure Set_output(pOutput: OleVariant); safecall; - function Get_output: OleVariant; safecall; - function transform: WordBool; safecall; - procedure reset; safecall; - function Get_readyState: Integer; safecall; - procedure addParameter(const baseName: WideString; parameter: OleVariant; - const namespaceURI: WideString); safecall; - procedure addObject(const obj: IDispatch; const namespaceURI: WideString); safecall; - function Get_stylesheet: IXMLDOMNode; safecall; - property input: OleVariant read Get_input write Set_input; - property ownerTemplate: IXSLTemplate read Get_ownerTemplate; - property startMode: WideString read Get_startMode; - property startModeURI: WideString read Get_startModeURI; - property output: OleVariant read Get_output write Set_output; - property readyState: Integer read Get_readyState; - property stylesheet: IXMLDOMNode read Get_stylesheet; - end; - -// *********************************************************************// -// Interface: ISAXXMLReader -// Flags: (16) Hidden -// GUID: {A4F96ED0-F829-476E-81C0-CDC7BD2A0802} -// *********************************************************************// - ISAXXMLReader = interface(IUnknown) - ['{A4F96ED0-F829-476E-81C0-CDC7BD2A0802}'] - function getFeature(var pwchName: Word; out pvfValue: WordBool): HResult; stdcall; - function putFeature(var pwchName: Word; vfValue: WordBool): HResult; stdcall; - function getProperty(var pwchName: Word; out pvarValue: OleVariant): HResult; stdcall; - function putProperty(var pwchName: Word; varValue: OleVariant): HResult; stdcall; - function getEntityResolver(out ppResolver: ISAXEntityResolver): HResult; stdcall; - function putEntityResolver(const pResolver: ISAXEntityResolver): HResult; stdcall; - function getContentHandler(out ppHandler: ISAXContentHandler): HResult; stdcall; - function putContentHandler(const pHandler: ISAXContentHandler): HResult; stdcall; - function getDTDHandler(out ppHandler: ISAXDTDHandler): HResult; stdcall; - function putDTDHandler(const pHandler: ISAXDTDHandler): HResult; stdcall; - function getErrorHandler(out ppHandler: ISAXErrorHandler): HResult; stdcall; - function putErrorHandler(const pHandler: ISAXErrorHandler): HResult; stdcall; - function getBaseURL(out ppwchBaseUrl: PWord1): HResult; stdcall; - function putBaseURL(var pwchBaseUrl: Word): HResult; stdcall; - function getSecureBaseURL(out ppwchSecureBaseUrl: PWord1): HResult; stdcall; - function putSecureBaseURL(var pwchSecureBaseUrl: Word): HResult; stdcall; - function parse(varInput: OleVariant): HResult; stdcall; - function parseURL(var pwchUrl: Word): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXEntityResolver -// Flags: (16) Hidden -// GUID: {99BCA7BD-E8C4-4D5F-A0CF-6D907901FF07} -// *********************************************************************// - ISAXEntityResolver = interface(IUnknown) - ['{99BCA7BD-E8C4-4D5F-A0CF-6D907901FF07}'] - function resolveEntity(var pwchPublicId: Word; var pwchSystemId: Word; out pvarInput: OleVariant): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXContentHandler -// Flags: (16) Hidden -// GUID: {1545CDFA-9E4E-4497-A8A4-2BF7D0112C44} -// *********************************************************************// - ISAXContentHandler = interface(IUnknown) - ['{1545CDFA-9E4E-4497-A8A4-2BF7D0112C44}'] - function putDocumentLocator(const pLocator: ISAXLocator): HResult; stdcall; - function startDocument: HResult; stdcall; - function endDocument: HResult; stdcall; - function startPrefixMapping(var pwchPrefix: Word; cchPrefix: SYSINT; var pwchUri: Word; - cchUri: SYSINT): HResult; stdcall; - function endPrefixMapping(var pwchPrefix: Word; cchPrefix: SYSINT): HResult; stdcall; - function startElement(var pwchNamespaceUri: Word; cchNamespaceUri: SYSINT; - var pwchLocalName: Word; cchLocalName: SYSINT; var pwchQName: Word; - cchQName: SYSINT; const pAttributes: ISAXAttributes): HResult; stdcall; - function endElement(var pwchNamespaceUri: Word; cchNamespaceUri: SYSINT; - var pwchLocalName: Word; cchLocalName: SYSINT; var pwchQName: Word; - cchQName: SYSINT): HResult; stdcall; - function characters(var pwchChars: Word; cchChars: SYSINT): HResult; stdcall; - function ignorableWhitespace(var pwchChars: Word; cchChars: SYSINT): HResult; stdcall; - function processingInstruction(var pwchTarget: Word; cchTarget: SYSINT; var pwchData: Word; - cchData: SYSINT): HResult; stdcall; - function skippedEntity(var pwchName: Word; cchName: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXLocator -// Flags: (16) Hidden -// GUID: {9B7E472A-0DE4-4640-BFF3-84D38A051C31} -// *********************************************************************// - ISAXLocator = interface(IUnknown) - ['{9B7E472A-0DE4-4640-BFF3-84D38A051C31}'] - function getColumnNumber(out pnColumn: SYSINT): HResult; stdcall; - function getLineNumber(out pnLine: SYSINT): HResult; stdcall; - function getPublicId(out ppwchPublicId: PWord1): HResult; stdcall; - function getSystemId(out ppwchSystemId: PWord1): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXAttributes -// Flags: (16) Hidden -// GUID: {F078ABE1-45D2-4832-91EA-4466CE2F25C9} -// *********************************************************************// - ISAXAttributes = interface(IUnknown) - ['{F078ABE1-45D2-4832-91EA-4466CE2F25C9}'] - function getLength(out pnLength: SYSINT): HResult; stdcall; - function getURI(nIndex: SYSINT; out ppwchUri: PWord1; out pcchUri: SYSINT): HResult; stdcall; - function getLocalName(nIndex: SYSINT; out ppwchLocalName: PWord1; out pcchLocalName: SYSINT): HResult; stdcall; - function getQName(nIndex: SYSINT; out ppwchQName: PWord1; out pcchQName: SYSINT): HResult; stdcall; - function getName(nIndex: SYSINT; out ppwchUri: PWord1; out pcchUri: SYSINT; - out ppwchLocalName: PWord1; out pcchLocalName: SYSINT; out ppwchQName: PWord1; - out pcchQName: SYSINT): HResult; stdcall; - function getIndexFromName(var pwchUri: Word; cchUri: SYSINT; var pwchLocalName: Word; - cchLocalName: SYSINT; out pnIndex: SYSINT): HResult; stdcall; - function getIndexFromQName(var pwchQName: Word; cchQName: SYSINT; out pnIndex: SYSINT): HResult; stdcall; - function getType(nIndex: SYSINT; out ppwchType: PWord1; out pcchType: SYSINT): HResult; stdcall; - function getTypeFromName(var pwchUri: Word; cchUri: SYSINT; var pwchLocalName: Word; - cchLocalName: SYSINT; out ppwchType: PWord1; out pcchType: SYSINT): HResult; stdcall; - function getTypeFromQName(var pwchQName: Word; cchQName: SYSINT; out ppwchType: PWord1; - out pcchType: SYSINT): HResult; stdcall; - function getValue(nIndex: SYSINT; out ppwchValue: PWord1; out pcchValue: SYSINT): HResult; stdcall; - function getValueFromName(var pwchUri: Word; cchUri: SYSINT; var pwchLocalName: Word; - cchLocalName: SYSINT; out ppwchValue: PWord1; out pcchValue: SYSINT): HResult; stdcall; - function getValueFromQName(var pwchQName: Word; cchQName: SYSINT; out ppwchValue: PWord1; - out pcchValue: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXDTDHandler -// Flags: (16) Hidden -// GUID: {E15C1BAF-AFB3-4D60-8C36-19A8C45DEFED} -// *********************************************************************// - ISAXDTDHandler = interface(IUnknown) - ['{E15C1BAF-AFB3-4D60-8C36-19A8C45DEFED}'] - function notationDecl(var pwchName: Word; cchName: SYSINT; var pwchPublicId: Word; - cchPublicId: SYSINT; var pwchSystemId: Word; cchSystemId: SYSINT): HResult; stdcall; - function unparsedEntityDecl(var pwchName: Word; cchName: SYSINT; var pwchPublicId: Word; - cchPublicId: SYSINT; var pwchSystemId: Word; cchSystemId: SYSINT; - var pwchNotationName: Word; cchNotationName: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXErrorHandler -// Flags: (16) Hidden -// GUID: {A60511C4-CCF5-479E-98A3-DC8DC545B7D0} -// *********************************************************************// - ISAXErrorHandler = interface(IUnknown) - ['{A60511C4-CCF5-479E-98A3-DC8DC545B7D0}'] - function error(const pLocator: ISAXLocator; var pwchErrorMessage: Word; hrErrorCode: HResult): HResult; stdcall; - function fatalError(const pLocator: ISAXLocator; var pwchErrorMessage: Word; - hrErrorCode: HResult): HResult; stdcall; - function ignorableWarning(const pLocator: ISAXLocator; var pwchErrorMessage: Word; - hrErrorCode: HResult): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXXMLFilter -// Flags: (16) Hidden -// GUID: {70409222-CA09-4475-ACB8-40312FE8D145} -// *********************************************************************// - ISAXXMLFilter = interface(ISAXXMLReader) - ['{70409222-CA09-4475-ACB8-40312FE8D145}'] - function getParent(out ppReader: ISAXXMLReader): HResult; stdcall; - function putParent(const pReader: ISAXXMLReader): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXLexicalHandler -// Flags: (16) Hidden -// GUID: {7F85D5F5-47A8-4497-BDA5-84BA04819EA6} -// *********************************************************************// - ISAXLexicalHandler = interface(IUnknown) - ['{7F85D5F5-47A8-4497-BDA5-84BA04819EA6}'] - function startDTD(var pwchName: Word; cchName: SYSINT; var pwchPublicId: Word; - cchPublicId: SYSINT; var pwchSystemId: Word; cchSystemId: SYSINT): HResult; stdcall; - function endDTD: HResult; stdcall; - function startEntity(var pwchName: Word; cchName: SYSINT): HResult; stdcall; - function endEntity(var pwchName: Word; cchName: SYSINT): HResult; stdcall; - function startCDATA: HResult; stdcall; - function endCDATA: HResult; stdcall; - function comment(var pwchChars: Word; cchChars: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: ISAXDeclHandler -// Flags: (16) Hidden -// GUID: {862629AC-771A-47B2-8337-4E6843C1BE90} -// *********************************************************************// - ISAXDeclHandler = interface(IUnknown) - ['{862629AC-771A-47B2-8337-4E6843C1BE90}'] - function elementDecl(var pwchName: Word; cchName: SYSINT; var pwchModel: Word; cchModel: SYSINT): HResult; stdcall; - function attributeDecl(var pwchElementName: Word; cchElementName: SYSINT; - var pwchAttributeName: Word; cchAttributeName: SYSINT; - var pwchType: Word; cchType: SYSINT; var pwchValueDefault: Word; - cchValueDefault: SYSINT; var pwchValue: Word; cchValue: SYSINT): HResult; stdcall; - function internalEntityDecl(var pwchName: Word; cchName: SYSINT; var pwchValue: Word; - cchValue: SYSINT): HResult; stdcall; - function externalEntityDecl(var pwchName: Word; cchName: SYSINT; var pwchPublicId: Word; - cchPublicId: SYSINT; var pwchSystemId: Word; cchSystemId: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: IVBSAXXMLReader -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {8C033CAA-6CD6-4F73-B728-4531AF74945F} -// *********************************************************************// - IVBSAXXMLReader = interface(IDispatch) - ['{8C033CAA-6CD6-4F73-B728-4531AF74945F}'] - function getFeature(const strName: WideString): WordBool; safecall; - procedure putFeature(const strName: WideString; fValue: WordBool); safecall; - function getProperty(const strName: WideString): OleVariant; safecall; - procedure putProperty(const strName: WideString; varValue: OleVariant); safecall; - function Get_entityResolver: IVBSAXEntityResolver; safecall; - procedure _Set_entityResolver(const oResolver: IVBSAXEntityResolver); safecall; - function Get_contentHandler: IVBSAXContentHandler; safecall; - procedure _Set_contentHandler(const oHandler: IVBSAXContentHandler); safecall; - function Get_dtdHandler: IVBSAXDTDHandler; safecall; - procedure _Set_dtdHandler(const oHandler: IVBSAXDTDHandler); safecall; - function Get_errorHandler: IVBSAXErrorHandler; safecall; - procedure _Set_errorHandler(const oHandler: IVBSAXErrorHandler); safecall; - function Get_baseURL: WideString; safecall; - procedure Set_baseURL(const strBaseURL: WideString); safecall; - function Get_secureBaseURL: WideString; safecall; - procedure Set_secureBaseURL(const strSecureBaseURL: WideString); safecall; - procedure parse(varInput: OleVariant); safecall; - procedure parseURL(const strURL: WideString); safecall; - property entityResolver: IVBSAXEntityResolver read Get_entityResolver write _Set_entityResolver; - property contentHandler: IVBSAXContentHandler read Get_contentHandler write _Set_contentHandler; - property dtdHandler: IVBSAXDTDHandler read Get_dtdHandler write _Set_dtdHandler; - property errorHandler: IVBSAXErrorHandler read Get_errorHandler write _Set_errorHandler; - property baseURL: WideString read Get_baseURL write Set_baseURL; - property secureBaseURL: WideString read Get_secureBaseURL write Set_secureBaseURL; - end; - -// *********************************************************************// -// Interface: IVBSAXEntityResolver -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {0C05D096-F45B-4ACA-AD1A-AA0BC25518DC} -// *********************************************************************// - IVBSAXEntityResolver = interface(IDispatch) - ['{0C05D096-F45B-4ACA-AD1A-AA0BC25518DC}'] - function resolveEntity(var strPublicId: WideString; var strSystemId: WideString): OleVariant; safecall; - end; - -// *********************************************************************// -// Interface: IVBSAXContentHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {2ED7290A-4DD5-4B46-BB26-4E4155E77FAA} -// *********************************************************************// - IVBSAXContentHandler = interface(IDispatch) - ['{2ED7290A-4DD5-4B46-BB26-4E4155E77FAA}'] - procedure _Set_documentLocator(const Param1: IVBSAXLocator); safecall; - procedure startDocument; safecall; - procedure endDocument; safecall; - procedure startPrefixMapping(var strPrefix: WideString; var strURI: WideString); safecall; - procedure endPrefixMapping(var strPrefix: WideString); safecall; - procedure startElement(var strNamespaceURI: WideString; var strLocalName: WideString; - var strQName: WideString; const oAttributes: IVBSAXAttributes); safecall; - procedure endElement(var strNamespaceURI: WideString; var strLocalName: WideString; - var strQName: WideString); safecall; - procedure characters(var strChars: WideString); safecall; - procedure ignorableWhitespace(var strChars: WideString); safecall; - procedure processingInstruction(var strTarget: WideString; var strData: WideString); safecall; - procedure skippedEntity(var strName: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IVBSAXLocator -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {796E7AC5-5AA2-4EFF-ACAD-3FAAF01A3288} -// *********************************************************************// - IVBSAXLocator = interface(IDispatch) - ['{796E7AC5-5AA2-4EFF-ACAD-3FAAF01A3288}'] - function Get_columnNumber: SYSINT; safecall; - function Get_lineNumber: SYSINT; safecall; - function Get_publicId: WideString; safecall; - function Get_systemId: WideString; safecall; - property columnNumber: SYSINT read Get_columnNumber; - property lineNumber: SYSINT read Get_lineNumber; - property publicId: WideString read Get_publicId; - property systemId: WideString read Get_systemId; - end; - -// *********************************************************************// -// Interface: IVBSAXAttributes -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {10DC0586-132B-4CAC-8BB3-DB00AC8B7EE0} -// *********************************************************************// - IVBSAXAttributes = interface(IDispatch) - ['{10DC0586-132B-4CAC-8BB3-DB00AC8B7EE0}'] - function Get_length: SYSINT; safecall; - function getURI(nIndex: SYSINT): WideString; safecall; - function getLocalName(nIndex: SYSINT): WideString; safecall; - function getQName(nIndex: SYSINT): WideString; safecall; - function getIndexFromName(const strURI: WideString; const strLocalName: WideString): SYSINT; safecall; - function getIndexFromQName(const strQName: WideString): SYSINT; safecall; - function getType(nIndex: SYSINT): WideString; safecall; - function getTypeFromName(const strURI: WideString; const strLocalName: WideString): WideString; safecall; - function getTypeFromQName(const strQName: WideString): WideString; safecall; - function getValue(nIndex: SYSINT): WideString; safecall; - function getValueFromName(const strURI: WideString; const strLocalName: WideString): WideString; safecall; - function getValueFromQName(const strQName: WideString): WideString; safecall; - property length: SYSINT read Get_length; - end; - -// *********************************************************************// -// Interface: IVBSAXDTDHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {24FB3297-302D-4620-BA39-3A732D850558} -// *********************************************************************// - IVBSAXDTDHandler = interface(IDispatch) - ['{24FB3297-302D-4620-BA39-3A732D850558}'] - procedure notationDecl(var strName: WideString; var strPublicId: WideString; - var strSystemId: WideString); safecall; - procedure unparsedEntityDecl(var strName: WideString; var strPublicId: WideString; - var strSystemId: WideString; var strNotationName: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IVBSAXErrorHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {D963D3FE-173C-4862-9095-B92F66995F52} -// *********************************************************************// - IVBSAXErrorHandler = interface(IDispatch) - ['{D963D3FE-173C-4862-9095-B92F66995F52}'] - procedure error(const oLocator: IVBSAXLocator; var strErrorMessage: WideString; - nErrorCode: Integer); safecall; - procedure fatalError(const oLocator: IVBSAXLocator; var strErrorMessage: WideString; - nErrorCode: Integer); safecall; - procedure ignorableWarning(const oLocator: IVBSAXLocator; var strErrorMessage: WideString; - nErrorCode: Integer); safecall; - end; - -// *********************************************************************// -// Interface: IVBSAXXMLFilter -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {1299EB1B-5B88-433E-82DE-82CA75AD4E04} -// *********************************************************************// - IVBSAXXMLFilter = interface(IDispatch) - ['{1299EB1B-5B88-433E-82DE-82CA75AD4E04}'] - function Get_parent: IVBSAXXMLReader; safecall; - procedure _Set_parent(const oReader: IVBSAXXMLReader); safecall; - property parent: IVBSAXXMLReader read Get_parent write _Set_parent; - end; - -// *********************************************************************// -// Interface: IVBSAXLexicalHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {032AAC35-8C0E-4D9D-979F-E3B702935576} -// *********************************************************************// - IVBSAXLexicalHandler = interface(IDispatch) - ['{032AAC35-8C0E-4D9D-979F-E3B702935576}'] - procedure startDTD(var strName: WideString; var strPublicId: WideString; - var strSystemId: WideString); safecall; - procedure endDTD; safecall; - procedure startEntity(var strName: WideString); safecall; - procedure endEntity(var strName: WideString); safecall; - procedure startCDATA; safecall; - procedure endCDATA; safecall; - procedure comment(var strChars: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IVBSAXDeclHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {E8917260-7579-4BE1-B5DD-7AFBFA6F077B} -// *********************************************************************// - IVBSAXDeclHandler = interface(IDispatch) - ['{E8917260-7579-4BE1-B5DD-7AFBFA6F077B}'] - procedure elementDecl(var strName: WideString; var strModel: WideString); safecall; - procedure attributeDecl(var strElementName: WideString; var strAttributeName: WideString; - var strType: WideString; var strValueDefault: WideString; - var strValue: WideString); safecall; - procedure internalEntityDecl(var strName: WideString; var strValue: WideString); safecall; - procedure externalEntityDecl(var strName: WideString; var strPublicId: WideString; - var strSystemId: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IMXWriter -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {4D7FF4BA-1565-4EA8-94E1-6E724A46F98D} -// *********************************************************************// - IMXWriter = interface(IDispatch) - ['{4D7FF4BA-1565-4EA8-94E1-6E724A46F98D}'] - procedure Set_output(varDestination: OleVariant); safecall; - function Get_output: OleVariant; safecall; - procedure Set_encoding(const strEncoding: WideString); safecall; - function Get_encoding: WideString; safecall; - procedure Set_byteOrderMark(fWriteByteOrderMark: WordBool); safecall; - function Get_byteOrderMark: WordBool; safecall; - procedure Set_indent(fIndentMode: WordBool); safecall; - function Get_indent: WordBool; safecall; - procedure Set_standalone(fValue: WordBool); safecall; - function Get_standalone: WordBool; safecall; - procedure Set_omitXMLDeclaration(fValue: WordBool); safecall; - function Get_omitXMLDeclaration: WordBool; safecall; - procedure Set_version(const strVersion: WideString); safecall; - function Get_version: WideString; safecall; - procedure Set_disableOutputEscaping(fValue: WordBool); safecall; - function Get_disableOutputEscaping: WordBool; safecall; - procedure flush; safecall; - property output: OleVariant read Get_output write Set_output; - property encoding: WideString read Get_encoding write Set_encoding; - property byteOrderMark: WordBool read Get_byteOrderMark write Set_byteOrderMark; - property indent: WordBool read Get_indent write Set_indent; - property standalone: WordBool read Get_standalone write Set_standalone; - property omitXMLDeclaration: WordBool read Get_omitXMLDeclaration write Set_omitXMLDeclaration; - property version: WideString read Get_version write Set_version; - property disableOutputEscaping: WordBool read Get_disableOutputEscaping write Set_disableOutputEscaping; - end; - -// *********************************************************************// -// Interface: IMXAttributes -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {F10D27CC-3EC0-415C-8ED8-77AB1C5E7262} -// *********************************************************************// - IMXAttributes = interface(IDispatch) - ['{F10D27CC-3EC0-415C-8ED8-77AB1C5E7262}'] - procedure addAttribute(const strURI: WideString; const strLocalName: WideString; - const strQName: WideString; const strType: WideString; - const strValue: WideString); safecall; - procedure addAttributeFromIndex(varAtts: OleVariant; nIndex: SYSINT); safecall; - procedure clear; safecall; - procedure removeAttribute(nIndex: SYSINT); safecall; - procedure setAttribute(nIndex: SYSINT; const strURI: WideString; - const strLocalName: WideString; const strQName: WideString; - const strType: WideString; const strValue: WideString); safecall; - procedure setAttributes(varAtts: OleVariant); safecall; - procedure setLocalName(nIndex: SYSINT; const strLocalName: WideString); safecall; - procedure setQName(nIndex: SYSINT; const strQName: WideString); safecall; - procedure setType(nIndex: SYSINT; const strType: WideString); safecall; - procedure setURI(nIndex: SYSINT; const strURI: WideString); safecall; - procedure setValue(nIndex: SYSINT; const strValue: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IMXReaderControl -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {808F4E35-8D5A-4FBE-8466-33A41279ED30} -// *********************************************************************// - IMXReaderControl = interface(IDispatch) - ['{808F4E35-8D5A-4FBE-8466-33A41279ED30}'] - procedure abort; safecall; - procedure resume; safecall; - procedure suspend; safecall; - end; - -// *********************************************************************// -// Interface: IMXSchemaDeclHandler -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {FA4BB38C-FAF9-4CCA-9302-D1DD0FE520DB} -// *********************************************************************// - IMXSchemaDeclHandler = interface(IDispatch) - ['{FA4BB38C-FAF9-4CCA-9302-D1DD0FE520DB}'] - procedure schemaElementDecl(const oSchemaElement: ISchemaElement); safecall; - end; - -// *********************************************************************// -// Interface: ISchemaItem -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B3-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaItem = interface(IDispatch) - ['{50EA08B3-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_name: WideString; safecall; - function Get_namespaceURI: WideString; safecall; - function Get_schema: ISchema; safecall; - function Get_id: WideString; safecall; - function Get_itemType: SOMITEMTYPE; safecall; - function Get_unhandledAttributes: IVBSAXAttributes; safecall; - function writeAnnotation(const annotationSink: IUnknown): WordBool; safecall; - property name: WideString read Get_name; - property namespaceURI: WideString read Get_namespaceURI; - property schema: ISchema read Get_schema; - property id: WideString read Get_id; - property itemType: SOMITEMTYPE read Get_itemType; - property unhandledAttributes: IVBSAXAttributes read Get_unhandledAttributes; - end; - -// *********************************************************************// -// Interface: ISchemaParticle -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B5-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaParticle = interface(ISchemaItem) - ['{50EA08B5-DD1B-4664-9A50-C2F40F4BD79A}'] - procedure GhostMethod_ISchemaParticle_0_1; safecall; - procedure GhostMethod_ISchemaParticle_4_2; safecall; - procedure GhostMethod_ISchemaParticle_8_3; safecall; - procedure GhostMethod_ISchemaParticle_12_4; safecall; - procedure GhostMethod_ISchemaParticle_16_5; safecall; - procedure GhostMethod_ISchemaParticle_20_6; safecall; - procedure GhostMethod_ISchemaParticle_24_7; safecall; - procedure GhostMethod_ISchemaParticle_28_8; safecall; - procedure GhostMethod_ISchemaParticle_32_9; safecall; - procedure GhostMethod_ISchemaParticle_36_10; safecall; - procedure GhostMethod_ISchemaParticle_40_11; safecall; - procedure GhostMethod_ISchemaParticle_44_12; safecall; - procedure GhostMethod_ISchemaParticle_48_13; safecall; - procedure GhostMethod_ISchemaParticle_52_14; safecall; - function Get_minOccurs: OleVariant; safecall; - function Get_maxOccurs: OleVariant; safecall; - property minOccurs: OleVariant read Get_minOccurs; - property maxOccurs: OleVariant read Get_maxOccurs; - end; - -// *********************************************************************// -// Interface: ISchemaElement -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B7-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaElement = interface(ISchemaParticle) - ['{50EA08B7-DD1B-4664-9A50-C2F40F4BD79A}'] - procedure GhostMethod_ISchemaElement_0_1; safecall; - procedure GhostMethod_ISchemaElement_4_2; safecall; - procedure GhostMethod_ISchemaElement_8_3; safecall; - procedure GhostMethod_ISchemaElement_12_4; safecall; - procedure GhostMethod_ISchemaElement_16_5; safecall; - procedure GhostMethod_ISchemaElement_20_6; safecall; - procedure GhostMethod_ISchemaElement_24_7; safecall; - procedure GhostMethod_ISchemaElement_28_8; safecall; - procedure GhostMethod_ISchemaElement_32_9; safecall; - procedure GhostMethod_ISchemaElement_36_10; safecall; - procedure GhostMethod_ISchemaElement_40_11; safecall; - procedure GhostMethod_ISchemaElement_44_12; safecall; - procedure GhostMethod_ISchemaElement_48_13; safecall; - procedure GhostMethod_ISchemaElement_52_14; safecall; - procedure GhostMethod_ISchemaElement_56_15; safecall; - procedure GhostMethod_ISchemaElement_60_16; safecall; - function Get_type_: ISchemaType; safecall; - function Get_scope: ISchemaComplexType; safecall; - function Get_defaultValue: WideString; safecall; - function Get_fixedValue: WideString; safecall; - function Get_isNillable: WordBool; safecall; - function Get_identityConstraints: ISchemaItemCollection; safecall; - function Get_substitutionGroup: ISchemaElement; safecall; - function Get_substitutionGroupExclusions: SCHEMADERIVATIONMETHOD; safecall; - function Get_disallowedSubstitutions: SCHEMADERIVATIONMETHOD; safecall; - function Get_isAbstract: WordBool; safecall; - function Get_isReference: WordBool; safecall; - property type_: ISchemaType read Get_type_; - property scope: ISchemaComplexType read Get_scope; - property defaultValue: WideString read Get_defaultValue; - property fixedValue: WideString read Get_fixedValue; - property isNillable: WordBool read Get_isNillable; - property identityConstraints: ISchemaItemCollection read Get_identityConstraints; - property substitutionGroup: ISchemaElement read Get_substitutionGroup; - property substitutionGroupExclusions: SCHEMADERIVATIONMETHOD read Get_substitutionGroupExclusions; - property disallowedSubstitutions: SCHEMADERIVATIONMETHOD read Get_disallowedSubstitutions; - property isAbstract: WordBool read Get_isAbstract; - property isReference: WordBool read Get_isReference; - end; - -// *********************************************************************// -// Interface: ISchema -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B4-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchema = interface(ISchemaItem) - ['{50EA08B4-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_targetNamespace: WideString; safecall; - function Get_version: WideString; safecall; - function Get_types: ISchemaItemCollection; safecall; - function Get_elements: ISchemaItemCollection; safecall; - function Get_attributes: ISchemaItemCollection; safecall; - function Get_attributeGroups: ISchemaItemCollection; safecall; - function Get_modelGroups: ISchemaItemCollection; safecall; - function Get_notations: ISchemaItemCollection; safecall; - function Get_schemaLocations: ISchemaStringCollection; safecall; - property targetNamespace: WideString read Get_targetNamespace; - property version: WideString read Get_version; - property types: ISchemaItemCollection read Get_types; - property elements: ISchemaItemCollection read Get_elements; - property attributes: ISchemaItemCollection read Get_attributes; - property attributeGroups: ISchemaItemCollection read Get_attributeGroups; - property modelGroups: ISchemaItemCollection read Get_modelGroups; - property notations: ISchemaItemCollection read Get_notations; - property schemaLocations: ISchemaStringCollection read Get_schemaLocations; - end; - -// *********************************************************************// -// Interface: ISchemaItemCollection -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B2-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaItemCollection = interface(IDispatch) - ['{50EA08B2-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_item(index: Integer): ISchemaItem; safecall; - function itemByName(const name: WideString): ISchemaItem; safecall; - function itemByQName(const name: WideString; const namespaceURI: WideString): ISchemaItem; safecall; - function Get_length: Integer; safecall; - function Get__newEnum: IUnknown; safecall; - property item[index: Integer]: ISchemaItem read Get_item; default; - property length: Integer read Get_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: ISchemaStringCollection -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B1-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaStringCollection = interface(IDispatch) - ['{50EA08B1-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_item(index: Integer): WideString; safecall; - function Get_length: Integer; safecall; - function Get__newEnum: IUnknown; safecall; - property item[index: Integer]: WideString read Get_item; default; - property length: Integer read Get_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: ISchemaType -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B8-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaType = interface(ISchemaItem) - ['{50EA08B8-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_baseTypes: ISchemaItemCollection; safecall; - function Get_final: SCHEMADERIVATIONMETHOD; safecall; - function Get_variety: SCHEMATYPEVARIETY; safecall; - function Get_derivedBy: SCHEMADERIVATIONMETHOD; safecall; - function isValid(const data: WideString): WordBool; safecall; - function Get_minExclusive: WideString; safecall; - function Get_minInclusive: WideString; safecall; - function Get_maxExclusive: WideString; safecall; - function Get_maxInclusive: WideString; safecall; - function Get_totalDigits: OleVariant; safecall; - function Get_fractionDigits: OleVariant; safecall; - function Get_length: OleVariant; safecall; - function Get_minLength: OleVariant; safecall; - function Get_maxLength: OleVariant; safecall; - function Get_enumeration: ISchemaStringCollection; safecall; - function Get_whitespace: SCHEMAWHITESPACE; safecall; - function Get_patterns: ISchemaStringCollection; safecall; - property baseTypes: ISchemaItemCollection read Get_baseTypes; - property final: SCHEMADERIVATIONMETHOD read Get_final; - property variety: SCHEMATYPEVARIETY read Get_variety; - property derivedBy: SCHEMADERIVATIONMETHOD read Get_derivedBy; - property minExclusive: WideString read Get_minExclusive; - property minInclusive: WideString read Get_minInclusive; - property maxExclusive: WideString read Get_maxExclusive; - property maxInclusive: WideString read Get_maxInclusive; - property totalDigits: OleVariant read Get_totalDigits; - property fractionDigits: OleVariant read Get_fractionDigits; - property length: OleVariant read Get_length; - property minLength: OleVariant read Get_minLength; - property maxLength: OleVariant read Get_maxLength; - property enumeration: ISchemaStringCollection read Get_enumeration; - property whitespace: SCHEMAWHITESPACE read Get_whitespace; - property patterns: ISchemaStringCollection read Get_patterns; - end; - -// *********************************************************************// -// Interface: ISchemaComplexType -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B9-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaComplexType = interface(ISchemaType) - ['{50EA08B9-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_isAbstract: WordBool; safecall; - function Get_anyAttribute: ISchemaAny; safecall; - function Get_attributes: ISchemaItemCollection; safecall; - function Get_contentType: SCHEMACONTENTTYPE; safecall; - function Get_contentModel: ISchemaModelGroup; safecall; - function Get_prohibitedSubstitutions: SCHEMADERIVATIONMETHOD; safecall; - property isAbstract: WordBool read Get_isAbstract; - property anyAttribute: ISchemaAny read Get_anyAttribute; - property attributes: ISchemaItemCollection read Get_attributes; - property contentType: SCHEMACONTENTTYPE read Get_contentType; - property contentModel: ISchemaModelGroup read Get_contentModel; - property prohibitedSubstitutions: SCHEMADERIVATIONMETHOD read Get_prohibitedSubstitutions; - end; - -// *********************************************************************// -// Interface: ISchemaAny -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08BC-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaAny = interface(ISchemaParticle) - ['{50EA08BC-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_namespaces: ISchemaStringCollection; safecall; - function Get_processContents: SCHEMAPROCESSCONTENTS; safecall; - property namespaces: ISchemaStringCollection read Get_namespaces; - property processContents: SCHEMAPROCESSCONTENTS read Get_processContents; - end; - -// *********************************************************************// -// Interface: ISchemaModelGroup -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08BB-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaModelGroup = interface(ISchemaParticle) - ['{50EA08BB-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_particles: ISchemaItemCollection; safecall; - property particles: ISchemaItemCollection read Get_particles; - end; - -// *********************************************************************// -// Interface: IXMLDOMSchemaCollection2 -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B0-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - IXMLDOMSchemaCollection2 = interface(IXMLDOMSchemaCollection) - ['{50EA08B0-DD1B-4664-9A50-C2F40F4BD79A}'] - procedure validate; safecall; - procedure Set_validateOnLoad(validateOnLoad: WordBool); safecall; - function Get_validateOnLoad: WordBool; safecall; - function getSchema(const namespaceURI: WideString): ISchema; safecall; - function getDeclaration(const node: IXMLDOMNode): ISchemaItem; safecall; - property validateOnLoad: WordBool read Get_validateOnLoad write Set_validateOnLoad; - end; - -// *********************************************************************// -// Interface: ISchemaAttribute -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08B6-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaAttribute = interface(ISchemaItem) - ['{50EA08B6-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_type_: ISchemaType; safecall; - function Get_scope: ISchemaComplexType; safecall; - function Get_defaultValue: WideString; safecall; - function Get_fixedValue: WideString; safecall; - function Get_use: SCHEMAUSE; safecall; - function Get_isReference: WordBool; safecall; - property type_: ISchemaType read Get_type_; - property scope: ISchemaComplexType read Get_scope; - property defaultValue: WideString read Get_defaultValue; - property fixedValue: WideString read Get_fixedValue; - property use: SCHEMAUSE read Get_use; - property isReference: WordBool read Get_isReference; - end; - -// *********************************************************************// -// Interface: ISchemaAttributeGroup -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08BA-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaAttributeGroup = interface(ISchemaItem) - ['{50EA08BA-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_anyAttribute: ISchemaAny; safecall; - function Get_attributes: ISchemaItemCollection; safecall; - property anyAttribute: ISchemaAny read Get_anyAttribute; - property attributes: ISchemaItemCollection read Get_attributes; - end; - -// *********************************************************************// -// Interface: ISchemaIdentityConstraint -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08BD-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaIdentityConstraint = interface(ISchemaItem) - ['{50EA08BD-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_selector: WideString; safecall; - function Get_fields: ISchemaStringCollection; safecall; - function Get_referencedKey: ISchemaIdentityConstraint; safecall; - property selector: WideString read Get_selector; - property fields: ISchemaStringCollection read Get_fields; - property referencedKey: ISchemaIdentityConstraint read Get_referencedKey; - end; - -// *********************************************************************// -// Interface: ISchemaNotation -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {50EA08BE-DD1B-4664-9A50-C2F40F4BD79A} -// *********************************************************************// - ISchemaNotation = interface(ISchemaItem) - ['{50EA08BE-DD1B-4664-9A50-C2F40F4BD79A}'] - function Get_systemIdentifier: WideString; safecall; - function Get_publicIdentifier: WideString; safecall; - property systemIdentifier: WideString read Get_systemIdentifier; - property publicIdentifier: WideString read Get_publicIdentifier; - end; - -// *********************************************************************// -// Interface: IXMLElementCollection -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {65725580-9B5D-11D0-9BFE-00C04FC99C8E} -// *********************************************************************// - IXMLElementCollection = interface(IDispatch) - ['{65725580-9B5D-11D0-9BFE-00C04FC99C8E}'] - procedure Set_length(p: Integer); safecall; - function Get_length: Integer; safecall; - function Get__newEnum: IUnknown; safecall; - function item(var1: OleVariant; var2: OleVariant): IDispatch; safecall; - property length: Integer read Get_length write Set_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: IXMLDocument -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {F52E2B61-18A1-11D1-B105-00805F49916B} -// *********************************************************************// - IXMLDocument = interface(IDispatch) - ['{F52E2B61-18A1-11D1-B105-00805F49916B}'] - function Get_root: IXMLElement; safecall; - function Get_fileSize: WideString; safecall; - function Get_fileModifiedDate: WideString; safecall; - function Get_fileUpdatedDate: WideString; safecall; - function Get_url: WideString; safecall; - procedure Set_url(const p: WideString); safecall; - function Get_mimeType: WideString; safecall; - function Get_readyState: Integer; safecall; - function Get_charset: WideString; safecall; - procedure Set_charset(const p: WideString); safecall; - function Get_version: WideString; safecall; - function Get_doctype: WideString; safecall; - function Get_dtdURL: WideString; safecall; - function createElement(vType: OleVariant; var1: OleVariant): IXMLElement; safecall; - property root: IXMLElement read Get_root; - property fileSize: WideString read Get_fileSize; - property fileModifiedDate: WideString read Get_fileModifiedDate; - property fileUpdatedDate: WideString read Get_fileUpdatedDate; - property url: WideString read Get_url write Set_url; - property mimeType: WideString read Get_mimeType; - property readyState: Integer read Get_readyState; - property charset: WideString read Get_charset write Set_charset; - property version: WideString read Get_version; - property doctype: WideString read Get_doctype; - property dtdURL: WideString read Get_dtdURL; - end; - -// *********************************************************************// -// Interface: IXMLElement -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {3F7F31AC-E15F-11D0-9C25-00C04FC99C8E} -// *********************************************************************// - IXMLElement = interface(IDispatch) - ['{3F7F31AC-E15F-11D0-9C25-00C04FC99C8E}'] - function Get_tagName: WideString; safecall; - procedure Set_tagName(const p: WideString); safecall; - function Get_parent: IXMLElement; safecall; - procedure setAttribute(const strPropertyName: WideString; PropertyValue: OleVariant); safecall; - function getAttribute(const strPropertyName: WideString): OleVariant; safecall; - procedure removeAttribute(const strPropertyName: WideString); safecall; - function Get_children: IXMLElementCollection; safecall; - function Get_type_: Integer; safecall; - function Get_text: WideString; safecall; - procedure Set_text(const p: WideString); safecall; - procedure addChild(const pChildElem: IXMLElement; lIndex: Integer; lReserved: Integer); safecall; - procedure removeChild(const pChildElem: IXMLElement); safecall; - property tagName: WideString read Get_tagName write Set_tagName; - property parent: IXMLElement read Get_parent; - property children: IXMLElementCollection read Get_children; - property type_: Integer read Get_type_; - property text: WideString read Get_text write Set_text; - end; - -// *********************************************************************// -// Interface: IXMLDocument2 -// Flags: (4112) Hidden Dispatchable -// GUID: {2B8DE2FE-8D2D-11D1-B2FC-00C04FD915A9} -// *********************************************************************// - IXMLDocument2 = interface(IDispatch) - ['{2B8DE2FE-8D2D-11D1-B2FC-00C04FD915A9}'] - function Get_root(out p: IXMLElement2): HResult; stdcall; - function Get_fileSize(out p: WideString): HResult; stdcall; - function Get_fileModifiedDate(out p: WideString): HResult; stdcall; - function Get_fileUpdatedDate(out p: WideString): HResult; stdcall; - function Get_url(out p: WideString): HResult; stdcall; - function Set_url(const p: WideString): HResult; stdcall; - function Get_mimeType(out p: WideString): HResult; stdcall; - function Get_readyState(out pl: Integer): HResult; stdcall; - function Get_charset(out p: WideString): HResult; stdcall; - function Set_charset(const p: WideString): HResult; stdcall; - function Get_version(out p: WideString): HResult; stdcall; - function Get_doctype(out p: WideString): HResult; stdcall; - function Get_dtdURL(out p: WideString): HResult; stdcall; - function createElement(vType: OleVariant; var1: OleVariant; out ppElem: IXMLElement2): HResult; stdcall; - function Get_async(out pf: WordBool): HResult; stdcall; - function Set_async(pf: WordBool): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: IXMLElement2 -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {2B8DE2FF-8D2D-11D1-B2FC-00C04FD915A9} -// *********************************************************************// - IXMLElement2 = interface(IDispatch) - ['{2B8DE2FF-8D2D-11D1-B2FC-00C04FD915A9}'] - function Get_tagName: WideString; safecall; - procedure Set_tagName(const p: WideString); safecall; - function Get_parent: IXMLElement2; safecall; - procedure setAttribute(const strPropertyName: WideString; PropertyValue: OleVariant); safecall; - function getAttribute(const strPropertyName: WideString): OleVariant; safecall; - procedure removeAttribute(const strPropertyName: WideString); safecall; - function Get_children: IXMLElementCollection; safecall; - function Get_type_: Integer; safecall; - function Get_text: WideString; safecall; - procedure Set_text(const p: WideString); safecall; - procedure addChild(const pChildElem: IXMLElement2; lIndex: Integer; lReserved: Integer); safecall; - procedure removeChild(const pChildElem: IXMLElement2); safecall; - function Get_attributes: IXMLElementCollection; safecall; - property tagName: WideString read Get_tagName write Set_tagName; - property parent: IXMLElement2 read Get_parent; - property children: IXMLElementCollection read Get_children; - property type_: Integer read Get_type_; - property text: WideString read Get_text write Set_text; - property attributes: IXMLElementCollection read Get_attributes; - end; - -// *********************************************************************// -// Interface: IXMLAttribute -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {D4D4A0FC-3B73-11D1-B2B4-00C04FB92596} -// *********************************************************************// - IXMLAttribute = interface(IDispatch) - ['{D4D4A0FC-3B73-11D1-B2B4-00C04FB92596}'] - function Get_name: WideString; safecall; - function Get_value: WideString; safecall; - property name: WideString read Get_name; - property value: WideString read Get_value; - end; - -// *********************************************************************// -// Interface: IXMLError -// Flags: (16) Hidden -// GUID: {948C5AD3-C58D-11D0-9C0B-00C04FC99C8E} -// *********************************************************************// - IXMLError = interface(IUnknown) - ['{948C5AD3-C58D-11D0-9C0B-00C04FC99C8E}'] - function GetErrorInfo(var pErrorReturn: _xml_error): HResult; stdcall; - end; - -// *********************************************************************// -// Interface: IXMLDOMSelection -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {AA634FC7-5888-44A7-A257-3A47150D3A0E} -// *********************************************************************// - IXMLDOMSelection = interface(IXMLDOMNodeList) - ['{AA634FC7-5888-44A7-A257-3A47150D3A0E}'] - function Get_expr: WideString; safecall; - procedure Set_expr(const expression: WideString); safecall; - function Get_context: IXMLDOMNode; safecall; - procedure _Set_context(const ppNode: IXMLDOMNode); safecall; - function peekNode: IXMLDOMNode; safecall; - function matches(const pNode: IXMLDOMNode): IXMLDOMNode; safecall; - function removeNext: IXMLDOMNode; safecall; - procedure removeAll; safecall; - function clone: IXMLDOMSelection; safecall; - function getProperty(const name: WideString): OleVariant; safecall; - procedure setProperty(const name: WideString; value: OleVariant); safecall; - property expr: WideString read Get_expr write Set_expr; - property context: IXMLDOMNode read Get_context write _Set_context; - end; - -// *********************************************************************// -// Interface: IDSOControl -// Flags: (4560) Hidden Dual NonExtensible OleAutomation Dispatchable -// GUID: {310AFA62-0575-11D2-9CA9-0060B0EC3D39} -// *********************************************************************// - IDSOControl = interface(IDispatch) - ['{310AFA62-0575-11D2-9CA9-0060B0EC3D39}'] - function Get_XMLDocument: IXMLDOMDocument; safecall; - procedure Set_XMLDocument(const ppDoc: IXMLDOMDocument); safecall; - function Get_JavaDSOCompatible: Integer; safecall; - procedure Set_JavaDSOCompatible(fJavaDSOCompatible: Integer); safecall; - function Get_readyState: Integer; safecall; - property XMLDocument: IXMLDOMDocument read Get_XMLDocument write Set_XMLDocument; - property JavaDSOCompatible: Integer read Get_JavaDSOCompatible write Set_JavaDSOCompatible; - property readyState: Integer read Get_readyState; - end; - -// *********************************************************************// -// Interface: IXMLHTTPRequest -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {ED8C108D-4349-11D2-91A4-00C04F7969E8} -// *********************************************************************// - IXMLHTTPRequest = interface(IDispatch) - ['{ED8C108D-4349-11D2-91A4-00C04F7969E8}'] - procedure open(const bstrMethod: WideString; const bstrUrl: WideString; varAsync: OleVariant; - bstrUser: OleVariant; bstrPassword: OleVariant); safecall; - procedure setRequestHeader(const bstrHeader: WideString; const bstrValue: WideString); safecall; - function getResponseHeader(const bstrHeader: WideString): WideString; safecall; - function getAllResponseHeaders: WideString; safecall; - procedure send(varBody: OleVariant); safecall; - procedure abort; safecall; - function Get_status: Integer; safecall; - function Get_statusText: WideString; safecall; - function Get_responseXML: IDispatch; safecall; - function Get_responseText: WideString; safecall; - function Get_responseBody: OleVariant; safecall; - function Get_responseStream: OleVariant; safecall; - function Get_readyState: Integer; safecall; - procedure Set_onreadystatechange(const Param1: IDispatch); safecall; - property status: Integer read Get_status; - property statusText: WideString read Get_statusText; - property responseXML: IDispatch read Get_responseXML; - property responseText: WideString read Get_responseText; - property responseBody: OleVariant read Get_responseBody; - property responseStream: OleVariant read Get_responseStream; - property readyState: Integer read Get_readyState; - property onreadystatechange: IDispatch write Set_onreadystatechange; - end; - -// *********************************************************************// -// Interface: IServerXMLHTTPRequest -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {2E9196BF-13BA-4DD4-91CA-6C571F281495} -// *********************************************************************// - IServerXMLHTTPRequest = interface(IXMLHTTPRequest) - ['{2E9196BF-13BA-4DD4-91CA-6C571F281495}'] - procedure setTimeouts(resolveTimeout: Integer; connectTimeout: Integer; sendTimeout: Integer; - receiveTimeout: Integer); safecall; - function waitForResponse(timeoutInSeconds: OleVariant): WordBool; safecall; - function getOption(option: SERVERXMLHTTP_OPTION): OleVariant; safecall; - procedure setOption(option: SERVERXMLHTTP_OPTION; value: OleVariant); safecall; - end; - -// *********************************************************************// -// Interface: IServerXMLHTTPRequest2 -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {2E01311B-C322-4B0A-BD77-B90CFDC8DCE7} -// *********************************************************************// - IServerXMLHTTPRequest2 = interface(IServerXMLHTTPRequest) - ['{2E01311B-C322-4B0A-BD77-B90CFDC8DCE7}'] - procedure setProxy(proxySetting: SXH_PROXY_SETTING; varProxyServer: OleVariant; - varBypassList: OleVariant); safecall; - procedure setProxyCredentials(const bstrUserName: WideString; const bstrPassword: WideString); safecall; - end; - -// *********************************************************************// -// Interface: IMXNamespacePrefixes -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {C90352F4-643C-4FBC-BB23-E996EB2D51FD} -// *********************************************************************// - IMXNamespacePrefixes = interface(IDispatch) - ['{C90352F4-643C-4FBC-BB23-E996EB2D51FD}'] - function Get_item(index: Integer): WideString; safecall; - function Get_length: Integer; safecall; - function Get__newEnum: IUnknown; safecall; - property item[index: Integer]: WideString read Get_item; default; - property length: Integer read Get_length; - property _newEnum: IUnknown read Get__newEnum; - end; - -// *********************************************************************// -// Interface: IVBMXNamespaceManager -// Flags: (4544) Dual NonExtensible OleAutomation Dispatchable -// GUID: {C90352F5-643C-4FBC-BB23-E996EB2D51FD} -// *********************************************************************// - IVBMXNamespaceManager = interface(IDispatch) - ['{C90352F5-643C-4FBC-BB23-E996EB2D51FD}'] - procedure Set_allowOverride(fOverride: WordBool); safecall; - function Get_allowOverride: WordBool; safecall; - procedure reset; safecall; - procedure pushContext; safecall; - procedure pushNodeContext(const contextNode: IXMLDOMNode; fDeep: WordBool); safecall; - procedure popContext; safecall; - procedure declarePrefix(const prefix: WideString; const namespaceURI: WideString); safecall; - function getDeclaredPrefixes: IMXNamespacePrefixes; safecall; - function getPrefixes(const namespaceURI: WideString): IMXNamespacePrefixes; safecall; - function getURI(const prefix: WideString): OleVariant; safecall; - function getURIFromNode(const strPrefix: WideString; const contextNode: IXMLDOMNode): OleVariant; safecall; - property allowOverride: WordBool read Get_allowOverride write Set_allowOverride; - end; - -// *********************************************************************// -// Interface: IMXNamespaceManager -// Flags: (16) Hidden -// GUID: {C90352F6-643C-4FBC-BB23-E996EB2D51FD} -// *********************************************************************// - IMXNamespaceManager = interface(IUnknown) - ['{C90352F6-643C-4FBC-BB23-E996EB2D51FD}'] - function putAllowOverride(fOverride: WordBool): HResult; stdcall; - function getAllowOverride(out fOverride: WordBool): HResult; stdcall; - function reset: HResult; stdcall; - function pushContext: HResult; stdcall; - function pushNodeContext(const contextNode: IXMLDOMNode; fDeep: WordBool): HResult; stdcall; - function popContext: HResult; stdcall; - function declarePrefix(var prefix: Word; var namespaceURI: Word): HResult; stdcall; - function getDeclaredPrefix(nIndex: Integer; var pwchPrefix: Word; var pcchPrefix: SYSINT): HResult; stdcall; - function getPrefix(var pwszNamespaceURI: Word; nIndex: Integer; var pwchPrefix: Word; - var pcchPrefix: SYSINT): HResult; stdcall; - function getURI(var pwchPrefix: Word; const pContextNode: IXMLDOMNode; var pwchUri: Word; - var pcchUri: SYSINT): HResult; stdcall; - end; - -// *********************************************************************// -// The Class CoDOMDocument provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass DOMDocument. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDOMDocument = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoDOMDocument26 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass DOMDocument26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDOMDocument26 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoDOMDocument30 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass DOMDocument30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDOMDocument30 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoDOMDocument40 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass DOMDocument40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDOMDocument40 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoFreeThreadedDOMDocument provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass FreeThreadedDOMDocument. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoFreeThreadedDOMDocument = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoFreeThreadedDOMDocument26 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass FreeThreadedDOMDocument26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoFreeThreadedDOMDocument26 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoFreeThreadedDOMDocument30 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass FreeThreadedDOMDocument30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoFreeThreadedDOMDocument30 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoFreeThreadedDOMDocument40 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMDocument2 exposed by -// the CoClass FreeThreadedDOMDocument40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoFreeThreadedDOMDocument40 = class - class function Create: IXMLDOMDocument2; - class function CreateRemote(const MachineName: string): IXMLDOMDocument2; - end; - -// *********************************************************************// -// The Class CoXMLSchemaCache provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMSchemaCollection exposed by -// the CoClass XMLSchemaCache. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLSchemaCache = class - class function Create: IXMLDOMSchemaCollection; - class function CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; - end; - -// *********************************************************************// -// The Class CoXMLSchemaCache26 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMSchemaCollection exposed by -// the CoClass XMLSchemaCache26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLSchemaCache26 = class - class function Create: IXMLDOMSchemaCollection; - class function CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; - end; - -// *********************************************************************// -// The Class CoXMLSchemaCache30 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMSchemaCollection exposed by -// the CoClass XMLSchemaCache30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLSchemaCache30 = class - class function Create: IXMLDOMSchemaCollection; - class function CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; - end; - -// *********************************************************************// -// The Class CoXMLSchemaCache40 provides a Create and CreateRemote method to -// create instances of the default interface IXMLDOMSchemaCollection2 exposed by -// the CoClass XMLSchemaCache40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLSchemaCache40 = class - class function Create: IXMLDOMSchemaCollection2; - class function CreateRemote(const MachineName: string): IXMLDOMSchemaCollection2; - end; - -// *********************************************************************// -// The Class CoXSLTemplate provides a Create and CreateRemote method to -// create instances of the default interface IXSLTemplate exposed by -// the CoClass XSLTemplate. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXSLTemplate = class - class function Create: IXSLTemplate; - class function CreateRemote(const MachineName: string): IXSLTemplate; - end; - -// *********************************************************************// -// The Class CoXSLTemplate26 provides a Create and CreateRemote method to -// create instances of the default interface IXSLTemplate exposed by -// the CoClass XSLTemplate26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXSLTemplate26 = class - class function Create: IXSLTemplate; - class function CreateRemote(const MachineName: string): IXSLTemplate; - end; - -// *********************************************************************// -// The Class CoXSLTemplate30 provides a Create and CreateRemote method to -// create instances of the default interface IXSLTemplate exposed by -// the CoClass XSLTemplate30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXSLTemplate30 = class - class function Create: IXSLTemplate; - class function CreateRemote(const MachineName: string): IXSLTemplate; - end; - -// *********************************************************************// -// The Class CoXSLTemplate40 provides a Create and CreateRemote method to -// create instances of the default interface IXSLTemplate exposed by -// the CoClass XSLTemplate40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXSLTemplate40 = class - class function Create: IXSLTemplate; - class function CreateRemote(const MachineName: string): IXSLTemplate; - end; - -// *********************************************************************// -// The Class CoDSOControl provides a Create and CreateRemote method to -// create instances of the default interface IDSOControl exposed by -// the CoClass DSOControl. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDSOControl = class - class function Create: IDSOControl; - class function CreateRemote(const MachineName: string): IDSOControl; - end; - -// *********************************************************************// -// The Class CoDSOControl26 provides a Create and CreateRemote method to -// create instances of the default interface IDSOControl exposed by -// the CoClass DSOControl26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDSOControl26 = class - class function Create: IDSOControl; - class function CreateRemote(const MachineName: string): IDSOControl; - end; - -// *********************************************************************// -// The Class CoDSOControl30 provides a Create and CreateRemote method to -// create instances of the default interface IDSOControl exposed by -// the CoClass DSOControl30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDSOControl30 = class - class function Create: IDSOControl; - class function CreateRemote(const MachineName: string): IDSOControl; - end; - -// *********************************************************************// -// The Class CoDSOControl40 provides a Create and CreateRemote method to -// create instances of the default interface IDSOControl exposed by -// the CoClass DSOControl40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoDSOControl40 = class - class function Create: IDSOControl; - class function CreateRemote(const MachineName: string): IDSOControl; - end; - -// *********************************************************************// -// The Class CoXMLHTTP provides a Create and CreateRemote method to -// create instances of the default interface IXMLHTTPRequest exposed by -// the CoClass XMLHTTP. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLHTTP = class - class function Create: IXMLHTTPRequest; - class function CreateRemote(const MachineName: string): IXMLHTTPRequest; - end; - -// *********************************************************************// -// The Class CoXMLHTTP26 provides a Create and CreateRemote method to -// create instances of the default interface IXMLHTTPRequest exposed by -// the CoClass XMLHTTP26. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLHTTP26 = class - class function Create: IXMLHTTPRequest; - class function CreateRemote(const MachineName: string): IXMLHTTPRequest; - end; - -// *********************************************************************// -// The Class CoXMLHTTP30 provides a Create and CreateRemote method to -// create instances of the default interface IXMLHTTPRequest exposed by -// the CoClass XMLHTTP30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLHTTP30 = class - class function Create: IXMLHTTPRequest; - class function CreateRemote(const MachineName: string): IXMLHTTPRequest; - end; - -// *********************************************************************// -// The Class CoXMLHTTP40 provides a Create and CreateRemote method to -// create instances of the default interface IXMLHTTPRequest exposed by -// the CoClass XMLHTTP40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLHTTP40 = class - class function Create: IXMLHTTPRequest; - class function CreateRemote(const MachineName: string): IXMLHTTPRequest; - end; - -// *********************************************************************// -// The Class CoServerXMLHTTP provides a Create and CreateRemote method to -// create instances of the default interface IServerXMLHTTPRequest2 exposed by -// the CoClass ServerXMLHTTP. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoServerXMLHTTP = class - class function Create: IServerXMLHTTPRequest2; - class function CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; - end; - -// *********************************************************************// -// The Class CoServerXMLHTTP30 provides a Create and CreateRemote method to -// create instances of the default interface IServerXMLHTTPRequest2 exposed by -// the CoClass ServerXMLHTTP30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoServerXMLHTTP30 = class - class function Create: IServerXMLHTTPRequest2; - class function CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; - end; - -// *********************************************************************// -// The Class CoServerXMLHTTP40 provides a Create and CreateRemote method to -// create instances of the default interface IServerXMLHTTPRequest2 exposed by -// the CoClass ServerXMLHTTP40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoServerXMLHTTP40 = class - class function Create: IServerXMLHTTPRequest2; - class function CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; - end; - -// *********************************************************************// -// The Class CoSAXXMLReader provides a Create and CreateRemote method to -// create instances of the default interface IVBSAXXMLReader exposed by -// the CoClass SAXXMLReader. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXXMLReader = class - class function Create: IVBSAXXMLReader; - class function CreateRemote(const MachineName: string): IVBSAXXMLReader; - end; - -// *********************************************************************// -// The Class CoSAXXMLReader30 provides a Create and CreateRemote method to -// create instances of the default interface IVBSAXXMLReader exposed by -// the CoClass SAXXMLReader30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXXMLReader30 = class - class function Create: IVBSAXXMLReader; - class function CreateRemote(const MachineName: string): IVBSAXXMLReader; - end; - -// *********************************************************************// -// The Class CoSAXXMLReader40 provides a Create and CreateRemote method to -// create instances of the default interface IVBSAXXMLReader exposed by -// the CoClass SAXXMLReader40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXXMLReader40 = class - class function Create: IVBSAXXMLReader; - class function CreateRemote(const MachineName: string): IVBSAXXMLReader; - end; - -// *********************************************************************// -// The Class CoMXXMLWriter provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXXMLWriter. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXXMLWriter = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoMXXMLWriter30 provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXXMLWriter30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXXMLWriter30 = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoMXXMLWriter40 provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXXMLWriter40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXXMLWriter40 = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoMXHTMLWriter provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXHTMLWriter. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXHTMLWriter = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoMXHTMLWriter30 provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXHTMLWriter30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXHTMLWriter30 = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoMXHTMLWriter40 provides a Create and CreateRemote method to -// create instances of the default interface IMXWriter exposed by -// the CoClass MXHTMLWriter40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXHTMLWriter40 = class - class function Create: IMXWriter; - class function CreateRemote(const MachineName: string): IMXWriter; - end; - -// *********************************************************************// -// The Class CoSAXAttributes provides a Create and CreateRemote method to -// create instances of the default interface IMXAttributes exposed by -// the CoClass SAXAttributes. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXAttributes = class - class function Create: IMXAttributes; - class function CreateRemote(const MachineName: string): IMXAttributes; - end; - -// *********************************************************************// -// The Class CoSAXAttributes30 provides a Create and CreateRemote method to -// create instances of the default interface IMXAttributes exposed by -// the CoClass SAXAttributes30. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXAttributes30 = class - class function Create: IMXAttributes; - class function CreateRemote(const MachineName: string): IMXAttributes; - end; - -// *********************************************************************// -// The Class CoSAXAttributes40 provides a Create and CreateRemote method to -// create instances of the default interface IMXAttributes exposed by -// the CoClass SAXAttributes40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSAXAttributes40 = class - class function Create: IMXAttributes; - class function CreateRemote(const MachineName: string): IMXAttributes; - end; - -// *********************************************************************// -// The Class CoMXNamespaceManager provides a Create and CreateRemote method to -// create instances of the default interface IVBMXNamespaceManager exposed by -// the CoClass MXNamespaceManager. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXNamespaceManager = class - class function Create: IVBMXNamespaceManager; - class function CreateRemote(const MachineName: string): IVBMXNamespaceManager; - end; - -// *********************************************************************// -// The Class CoMXNamespaceManager40 provides a Create and CreateRemote method to -// create instances of the default interface IVBMXNamespaceManager exposed by -// the CoClass MXNamespaceManager40. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoMXNamespaceManager40 = class - class function Create: IVBMXNamespaceManager; - class function CreateRemote(const MachineName: string): IVBMXNamespaceManager; - end; - -// *********************************************************************// -// The Class CoXMLDocument provides a Create and CreateRemote method to -// create instances of the default interface IXMLDocument2 exposed by -// the CoClass XMLDocument. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoXMLDocument = class - class function Create: IXMLDocument2; - class function CreateRemote(const MachineName: string): IXMLDocument2; - end; - -implementation - -uses ComObj; - -class function CoDOMDocument.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_DOMDocument) as IXMLDOMDocument2; -end; - -class function CoDOMDocument.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DOMDocument) as IXMLDOMDocument2; -end; - -class function CoDOMDocument26.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_DOMDocument26) as IXMLDOMDocument2; -end; - -class function CoDOMDocument26.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DOMDocument26) as IXMLDOMDocument2; -end; - -class function CoDOMDocument30.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_DOMDocument30) as IXMLDOMDocument2; -end; - -class function CoDOMDocument30.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DOMDocument30) as IXMLDOMDocument2; -end; - -class function CoDOMDocument40.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_DOMDocument40) as IXMLDOMDocument2; -end; - -class function CoDOMDocument40.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DOMDocument40) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_FreeThreadedDOMDocument) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_FreeThreadedDOMDocument) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument26.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_FreeThreadedDOMDocument26) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument26.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_FreeThreadedDOMDocument26) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument30.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_FreeThreadedDOMDocument30) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument30.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_FreeThreadedDOMDocument30) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument40.Create: IXMLDOMDocument2; -begin - Result := CreateComObject(CLASS_FreeThreadedDOMDocument40) as IXMLDOMDocument2; -end; - -class function CoFreeThreadedDOMDocument40.CreateRemote(const MachineName: string): IXMLDOMDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_FreeThreadedDOMDocument40) as IXMLDOMDocument2; -end; - -class function CoXMLSchemaCache.Create: IXMLDOMSchemaCollection; -begin - Result := CreateComObject(CLASS_XMLSchemaCache) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache.CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLSchemaCache) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache26.Create: IXMLDOMSchemaCollection; -begin - Result := CreateComObject(CLASS_XMLSchemaCache26) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache26.CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLSchemaCache26) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache30.Create: IXMLDOMSchemaCollection; -begin - Result := CreateComObject(CLASS_XMLSchemaCache30) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache30.CreateRemote(const MachineName: string): IXMLDOMSchemaCollection; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLSchemaCache30) as IXMLDOMSchemaCollection; -end; - -class function CoXMLSchemaCache40.Create: IXMLDOMSchemaCollection2; -begin - Result := CreateComObject(CLASS_XMLSchemaCache40) as IXMLDOMSchemaCollection2; -end; - -class function CoXMLSchemaCache40.CreateRemote(const MachineName: string): IXMLDOMSchemaCollection2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLSchemaCache40) as IXMLDOMSchemaCollection2; -end; - -class function CoXSLTemplate.Create: IXSLTemplate; -begin - Result := CreateComObject(CLASS_XSLTemplate) as IXSLTemplate; -end; - -class function CoXSLTemplate.CreateRemote(const MachineName: string): IXSLTemplate; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XSLTemplate) as IXSLTemplate; -end; - -class function CoXSLTemplate26.Create: IXSLTemplate; -begin - Result := CreateComObject(CLASS_XSLTemplate26) as IXSLTemplate; -end; - -class function CoXSLTemplate26.CreateRemote(const MachineName: string): IXSLTemplate; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XSLTemplate26) as IXSLTemplate; -end; - -class function CoXSLTemplate30.Create: IXSLTemplate; -begin - Result := CreateComObject(CLASS_XSLTemplate30) as IXSLTemplate; -end; - -class function CoXSLTemplate30.CreateRemote(const MachineName: string): IXSLTemplate; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XSLTemplate30) as IXSLTemplate; -end; - -class function CoXSLTemplate40.Create: IXSLTemplate; -begin - Result := CreateComObject(CLASS_XSLTemplate40) as IXSLTemplate; -end; - -class function CoXSLTemplate40.CreateRemote(const MachineName: string): IXSLTemplate; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XSLTemplate40) as IXSLTemplate; -end; - -class function CoDSOControl.Create: IDSOControl; -begin - Result := CreateComObject(CLASS_DSOControl) as IDSOControl; -end; - -class function CoDSOControl.CreateRemote(const MachineName: string): IDSOControl; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DSOControl) as IDSOControl; -end; - -class function CoDSOControl26.Create: IDSOControl; -begin - Result := CreateComObject(CLASS_DSOControl26) as IDSOControl; -end; - -class function CoDSOControl26.CreateRemote(const MachineName: string): IDSOControl; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DSOControl26) as IDSOControl; -end; - -class function CoDSOControl30.Create: IDSOControl; -begin - Result := CreateComObject(CLASS_DSOControl30) as IDSOControl; -end; - -class function CoDSOControl30.CreateRemote(const MachineName: string): IDSOControl; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DSOControl30) as IDSOControl; -end; - -class function CoDSOControl40.Create: IDSOControl; -begin - Result := CreateComObject(CLASS_DSOControl40) as IDSOControl; -end; - -class function CoDSOControl40.CreateRemote(const MachineName: string): IDSOControl; -begin - Result := CreateRemoteComObject(MachineName, CLASS_DSOControl40) as IDSOControl; -end; - -class function CoXMLHTTP.Create: IXMLHTTPRequest; -begin - Result := CreateComObject(CLASS_XMLHTTP) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP.CreateRemote(const MachineName: string): IXMLHTTPRequest; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLHTTP) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP26.Create: IXMLHTTPRequest; -begin - Result := CreateComObject(CLASS_XMLHTTP26) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP26.CreateRemote(const MachineName: string): IXMLHTTPRequest; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLHTTP26) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP30.Create: IXMLHTTPRequest; -begin - Result := CreateComObject(CLASS_XMLHTTP30) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP30.CreateRemote(const MachineName: string): IXMLHTTPRequest; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLHTTP30) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP40.Create: IXMLHTTPRequest; -begin - Result := CreateComObject(CLASS_XMLHTTP40) as IXMLHTTPRequest; -end; - -class function CoXMLHTTP40.CreateRemote(const MachineName: string): IXMLHTTPRequest; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLHTTP40) as IXMLHTTPRequest; -end; - -class function CoServerXMLHTTP.Create: IServerXMLHTTPRequest2; -begin - Result := CreateComObject(CLASS_ServerXMLHTTP) as IServerXMLHTTPRequest2; -end; - -class function CoServerXMLHTTP.CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ServerXMLHTTP) as IServerXMLHTTPRequest2; -end; - -class function CoServerXMLHTTP30.Create: IServerXMLHTTPRequest2; -begin - Result := CreateComObject(CLASS_ServerXMLHTTP30) as IServerXMLHTTPRequest2; -end; - -class function CoServerXMLHTTP30.CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ServerXMLHTTP30) as IServerXMLHTTPRequest2; -end; - -class function CoServerXMLHTTP40.Create: IServerXMLHTTPRequest2; -begin - Result := CreateComObject(CLASS_ServerXMLHTTP40) as IServerXMLHTTPRequest2; -end; - -class function CoServerXMLHTTP40.CreateRemote(const MachineName: string): IServerXMLHTTPRequest2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ServerXMLHTTP40) as IServerXMLHTTPRequest2; -end; - -class function CoSAXXMLReader.Create: IVBSAXXMLReader; -begin - Result := CreateComObject(CLASS_SAXXMLReader) as IVBSAXXMLReader; -end; - -class function CoSAXXMLReader.CreateRemote(const MachineName: string): IVBSAXXMLReader; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXXMLReader) as IVBSAXXMLReader; -end; - -class function CoSAXXMLReader30.Create: IVBSAXXMLReader; -begin - Result := CreateComObject(CLASS_SAXXMLReader30) as IVBSAXXMLReader; -end; - -class function CoSAXXMLReader30.CreateRemote(const MachineName: string): IVBSAXXMLReader; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXXMLReader30) as IVBSAXXMLReader; -end; - -class function CoSAXXMLReader40.Create: IVBSAXXMLReader; -begin - Result := CreateComObject(CLASS_SAXXMLReader40) as IVBSAXXMLReader; -end; - -class function CoSAXXMLReader40.CreateRemote(const MachineName: string): IVBSAXXMLReader; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXXMLReader40) as IVBSAXXMLReader; -end; - -class function CoMXXMLWriter.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXXMLWriter) as IMXWriter; -end; - -class function CoMXXMLWriter.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXXMLWriter) as IMXWriter; -end; - -class function CoMXXMLWriter30.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXXMLWriter30) as IMXWriter; -end; - -class function CoMXXMLWriter30.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXXMLWriter30) as IMXWriter; -end; - -class function CoMXXMLWriter40.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXXMLWriter40) as IMXWriter; -end; - -class function CoMXXMLWriter40.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXXMLWriter40) as IMXWriter; -end; - -class function CoMXHTMLWriter.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXHTMLWriter) as IMXWriter; -end; - -class function CoMXHTMLWriter.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXHTMLWriter) as IMXWriter; -end; - -class function CoMXHTMLWriter30.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXHTMLWriter30) as IMXWriter; -end; - -class function CoMXHTMLWriter30.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXHTMLWriter30) as IMXWriter; -end; - -class function CoMXHTMLWriter40.Create: IMXWriter; -begin - Result := CreateComObject(CLASS_MXHTMLWriter40) as IMXWriter; -end; - -class function CoMXHTMLWriter40.CreateRemote(const MachineName: string): IMXWriter; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXHTMLWriter40) as IMXWriter; -end; - -class function CoSAXAttributes.Create: IMXAttributes; -begin - Result := CreateComObject(CLASS_SAXAttributes) as IMXAttributes; -end; - -class function CoSAXAttributes.CreateRemote(const MachineName: string): IMXAttributes; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXAttributes) as IMXAttributes; -end; - -class function CoSAXAttributes30.Create: IMXAttributes; -begin - Result := CreateComObject(CLASS_SAXAttributes30) as IMXAttributes; -end; - -class function CoSAXAttributes30.CreateRemote(const MachineName: string): IMXAttributes; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXAttributes30) as IMXAttributes; -end; - -class function CoSAXAttributes40.Create: IMXAttributes; -begin - Result := CreateComObject(CLASS_SAXAttributes40) as IMXAttributes; -end; - -class function CoSAXAttributes40.CreateRemote(const MachineName: string): IMXAttributes; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SAXAttributes40) as IMXAttributes; -end; - -class function CoMXNamespaceManager.Create: IVBMXNamespaceManager; -begin - Result := CreateComObject(CLASS_MXNamespaceManager) as IVBMXNamespaceManager; -end; - -class function CoMXNamespaceManager.CreateRemote(const MachineName: string): IVBMXNamespaceManager; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXNamespaceManager) as IVBMXNamespaceManager; -end; - -class function CoMXNamespaceManager40.Create: IVBMXNamespaceManager; -begin - Result := CreateComObject(CLASS_MXNamespaceManager40) as IVBMXNamespaceManager; -end; - -class function CoMXNamespaceManager40.CreateRemote(const MachineName: string): IVBMXNamespaceManager; -begin - Result := CreateRemoteComObject(MachineName, CLASS_MXNamespaceManager40) as IVBMXNamespaceManager; -end; - -class function CoXMLDocument.Create: IXMLDocument2; -begin - Result := CreateComObject(CLASS_XMLDocument) as IXMLDocument2; -end; - -class function CoXMLDocument.CreateRemote(const MachineName: string): IXMLDocument2; -begin - Result := CreateRemoteComObject(MachineName, CLASS_XMLDocument) as IXMLDocument2; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXMLImpl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXMLImpl.pas deleted file mode 100644 index 78a32fb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMSXMLImpl.pas +++ /dev/null @@ -1,561 +0,0 @@ -unit uROMSXMLImpl; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - - -{$I RemObjects.inc} - -interface - -uses Classes, ActiveX, uROMSXML2_TLB, uROXMLIntf; - -type TMSXMLVersion = (msxml26, msxml30, msxml40); - TMSXMLVersions = set of TMSXMLVersion; - -const MSXMLFileNames : array[TMSXMLVersion] of string = ('msxml2.dll', 'msxml3.dll', 'msxml4.dll'); - -type { TROMSXMLNode } - TROMSXMLNode = class(TInterfacedObject, IXMLNode) - private - fNode : IXMLDOMNode; - fDoc : IXMLDocument; - - protected - function GetName : widestring; - function GetLocalName : widestring; - function GetRef : pointer; - - function GetParent : IXMLNode; - - function GetValue : Variant; - procedure SetValue(const Value : Variant); - - function GetXML : widestring; - - function GetAttributes(Index : integer) : IXMLNode; - function GetAttributeCount : integer; - - function GetChildren(Index : integer) : IXMLNode; - function GetChildrenCount : integer; - - function Add(const aNodeName : widestring; aNameSpaceURI: widestring = '') : IXMLNode; - function AddAttribute(const anAttributeName : widestring; const anAttributeValue : Variant) : IXMLNode; - function AddXml(const Xml: widestring): IXMLNode; - - procedure Delete(Index : integer); - procedure Remove(const aNode : IXMLNode); - - function GetNodeByName(const aNodeName : widestring) : IXMLNode; // Returns NIL if none is found or exception. Up to you. - function GetNodeValue(const aNodeName : widestring; const Default : Variant) : Variant; - - function GetAttributeByName(const anAttributeName : widestring) : IXMLNode; - function GetAttributeValue(const anAttributeName : widestring; DefaultValue : Variant) : Variant; - - function GetNodesByName(const aNodeName : widestring) : IXMLNodeList; // Returns NIL if none are found or exception. Up to you. - - function GetNodeByAttribute(const anAttributeName, anAttributeValue : widestring) : IXMLNode; - - function GetFirstChild: IXMLNode; - function GetNextSibling: IXMLNode; - function GetNamespaceURI: WideString; - function GetDocument: IXMLDocument; - - - public - constructor Create(const aNode : IXMLDOMNode; aDoc: IXMLDocument); - destructor Destroy; override; - end; - - { TROMSXMLNodeList } - TROMSXMLNodeList = class(TInterfacedObject, IXMLNodeLIst) - private - fNodeList : IXMLDOMNodeList; - fDoc: IXMLDocument; - protected - function GetNodes(Index : integer) : IXMLNode; - function GetCount : integer; - - public - constructor Create(const aNodeList : IXMLDOMNodeList; aDoc: IXMLDocument); - destructor Destroy; override; - end; - - { TROMSXMLDocument } - TROMSXMLDocument = class(TInterfacedObject, IXMLDocument) - private - fDocument : IXMLDOMDocument2; - - protected - function GetDocumentNode : IXMLNode; - - function GetEncoding : TXMLEncoding; - - procedure New(aDocumentName : widestring = ''; anEncoding : TXMLEncoding = xeUTF8); - - procedure SaveToStream(aStream : TStream); - procedure SaveToFile(const aFileName : string); - procedure LoadFromStream(aStream : TStream); - procedure LoadFromFile(const aFileName : string); - - function GetXML:widestring; - procedure SetXML(const Value : widestring); - - function Transform(const aXSL: string): string; - - public - constructor Create; - destructor Destroy; override; - - end; - -var InstalledMSXMLVersions : TMSXMLVersions; - -implementation - -uses uRORes, uROClasses, SysUtils, ComObj, TYpInfo, Windows; - -{ TROMSXMLNode } - -constructor TROMSXMLNode.Create(const aNode : IXMLDOMNode; aDoc: IXMLDocument); -begin - if not Assigned(aNode) - then RaiseError(err_DOMElementIsNIL, []); - - inherited Create; - - fNode := aNode; - fDoc := aDoc; -end; - -destructor TROMSXMLNode.Destroy; -begin - //fNode := NIL; - inherited; -end; - -function TROMSXMLNode.Add(const aNodeName: widestring; aNameSpaceURI: widestring = ''): IXMLNode; -var node : IXMLDOMNode; -begin - if (aNameSpaceURI = '') and (GetNamespaceURI <> '') then aNameSpaceURI := GetNamespaceURI; - if aNameSpaceURI = '' then - begin - node := fNode.attributes.getNamedItem('xmlns'); - if node <> nil then - node := fNode.ownerDocument.createNode(NODE_ELEMENT, aNodeName, node.text) - else - node := fNode.ownerDocument.createElement(aNodeName); - end - else - node := fNode.ownerDocument.createNode(NODE_ELEMENT, aNodeName, aNameSpaceURI); - fNode.appendChild(node); - - result := TROMSXMLNode.Create(node, fDoc); -end; - -procedure TROMSXMLNode.Delete(Index: integer); -begin - fNode.removeChild(fNode.childNodes.item[Index]) -end; - -function TROMSXMLNode.GetAttributes(Index : integer): IXMLNode; -begin - result := TROMSXMLNode.Create(fNode.attributes.item[Index], fDoc); -end; - -function TROMSXMLNode.GetChildren(Index : integer): IXMLNode; -begin - result := TROMSXMLNode.Create(fNode.childNodes.item[Index], fDoc) -end; - -function TROMSXMLNode.GetName: widestring; -begin - result := fNode.nodeName -end; - -function TROMSXMLNode.GetXML: widestring; -begin - result := fNode.XML; -end; - -procedure TROMSXMLNode.Remove(const aNode: IXMLNode); -begin - fNode.removeChild(IXMLDOMNode(aNode.Ref)) -end; - -function TROMSXMLNode.GetValue: Variant; -begin - result := fNode.text -end; - -procedure TROMSXMLNode.SetValue(const Value: Variant); -begin - fNode.text := Value -end; - -function TROMSXMLNode.GetNodeByName(const aNodeName: widestring): IXMLNode; -var //list : IXMLDOMNodeList; - node : IXMLDOMNode; -begin - result := NIL; - - node := fNode.selectSingleNode(aNodeName); - - if (node<>NIL) - then result := TROMSXMLNode.Create(node, fDoc); -end; - -function TROMSXMLNode.GetNodeByAttribute(const anAttributeName, - anAttributeValue: widestring): IXMLNode; -var i : integer; -begin - result := NIL; - if fNode.attributes = nil then exit; - for i := 0 to (fNode.attributes.length-1) do - with fNode.attributes.item[i] do - if (nodeName=anAttributeName) and (nodeValue=anAttributeValue) then begin - result := TROMSXMLNode.Create(fNode.attributes.item[i], fDoc); - Exit; - end; -end; - -function TROMSXMLNode.GetNodesByName(const aNodeName: widestring): IXMLNodeList; -var list : IXMLDOMNodeList; -begin - result := NIL; - - list := fNode.selectNodes(aNodeName); - - if (list<>NIL) or (list.length>0) - then result := TROMSXMLNodeList.Create(list, fDoc); -end; - -function TROMSXMLNode.GetAttributeByName( - const anAttributeName: widestring): IXMLNode; -var node : IXMLDOMNode; -begin - result := NIL; - if fNode.attributes = nil then exit; - node := fNode.attributes.getNamedItem(anAttributeName); - - if (node<>NIL) - then result := TROMSXMLNode.Create(node, fDoc); -end; - -function TROMSXMLNode.GetRef: pointer; -begin - result := pointer(fNode); -end; - -function TROMSXMLNode.GetLocalName: widestring; -begin - result := fNode.baseName -end; - -function TROMSXMLNode.AddAttribute(const anAttributeName : widestring; - const anAttributeValue : Variant) : IXMLNode; -var attr : IXMLDOMAttribute; -begin - attr := fNode.ownerDocument.createAttribute(anAttributeName); - attr.value := anAttributeValue; - fNode.attributes.setNamedItem(attr); - - result := TROMSXMLNode.Create(attr, fDoc); -end; - -function TROMSXMLNode.GetParent: IXMLNode; -begin - result := NIL; - if (fNode.parentNode<>NIL) - then result := TROMSXMLNode.Create(fNode.parentNode, fDoc); -end; - -function TROMSXMLNode.GetAttributeCount: integer; -begin - result := fNode.attributes.length -end; - -function TROMSXMLNode.GetChildrenCount: integer; -begin - result := fNode.childNodes.length -end; - -function TROMSXMLNode.GetAttributeValue(const anAttributeName: widestring; - DefaultValue: Variant): Variant; -var attr : IXMLNode; -begin - attr := GetAttributeByName(anAttributeName); - if (attr<>NIL) then result := attr.Value - else result := DefaultValue; -end; - -function TROMSXMLNode.GetNodeValue(const aNodeName: widestring; - const Default: Variant): Variant; -var node : IXMLNode; -begin - node := GetNodeByName(aNodeName); - if (node=NIL) then result := Default - else result := node.Value; -end; - -function TROMSXMLNode.GetFirstChild: IXMLNode; -var - aNode: IXMLDOMNode; -begin - aNode := fNode.firstChild; - if aNode <> nil then - Result := TROMSXMLNode.Create(aNode, fDoc) - else - Result := nil; -end; - -function TROMSXMLNode.GetNextSibling: IXMLNode; -var - aNode: IXMLDOMNode; -begin - aNode := fNode.nextSibling; - if aNode <> nil then - Result := TROMSXMLNode.Create(aNode, fDoc) - else - Result := nil; -end; - -function TROMSXMLNode.GetNamespaceURI: WideString; -begin - result := fNode.namespaceURI; -end; - -function TROMSXMLNode.AddXml(const Xml: widestring): IXMLNode; -var - doc: TROMSXMLDocument; -begin - doc := TROMSXMLDocument.Create; - try - doc.New(); - doc.SetXML(Xml); - if doc.fDocument.documentElement <> nil then begin - result := TROMSXMLNode.Create(fNode.appendChild(doc.fDocument.documentElement), fDoc); - end else result := nil; - finally - doc.Free; - end; -end; - -function TROMSXMLNode.GetDocument: IXMLDocument; -begin - Result := fDoc; -end; - -{ TROMSXMLNodeList } - -constructor TROMSXMLNodeList.Create(const aNodeList: IXMLDOMNodeList; aDoc: IXMLDocument); -begin - if not Assigned(aNodeList) - then RaiseError(err_DOMElementIsNIL, []); - - inherited Create; - - fNodeList := aNodeList; - fDoc := aDoc; -end; - -destructor TROMSXMLNodeList.Destroy; -begin -// fNodeList := NIL; - inherited; -end; - -function TROMSXMLNodeList.GetCount: integer; -begin - result := fNodeList.length -end; - -function TROMSXMLNodeList.GetNodes(Index: integer): IXMLNode; -begin - result := TROMSXMLNode.Create(fNodeList.item[Index], fDoc) -end; - -{ TROMSXMLDocument } - -constructor TROMSXMLDocument.Create; -begin - inherited Create; - fDocument := NIL; -end; - -destructor TROMSXMLDocument.Destroy; -begin - fDocument := NIL; - inherited; -end; - -function TROMSXMLDocument.GetDocumentNode: IXMLNode; -begin - result := TROMSXMLNode.Create(fDocument.documentElement, self) -end; - -function TROMSXMLDocument.GetEncoding: TXMLEncoding; -begin - result := xeUTF8; // TODO: Complete the UTF8/16 differentiation. -end; - -function TROMSXMLDocument.GetXml: widestring; -begin - result := fDocument.xml; -end; - -procedure TROMSXMLDocument.LoadFromFile(const aFileName: string); -begin - if not fDocument.load(aFileName) - then with fDocument.parseError do - RaiseError(err_CannotLoadXMLDocument, [Reason, Line, linePos]); -end; - -procedure TROMSXMLDocument.LoadFromStream(aStream: TStream); -var adapter : IStream; -begin - aStream.Position := 0; - adapter := TStreamAdapter.Create(aStream, soReference); - fDocument.async := FALSE; - if not fDocument.load(adapter) then - with fDocument.parseError do - RaiseError(err_CannotLoadXMLDocument, [Reason, Line, linePos]); -end; - -procedure TROMSXMLDocument.New(aDocumentName : widestring = ''; anEncoding : TXMLEncoding = xeUTF8); -var - lPi: IXMLDOMProcessingInstruction; -begin -{ !!! IMPORTANT !!! - - If you get an exception saying "CoInitialize has not been called" make sure the unit - uROCOMInit.pas is included in *and* is the FIRST UNIT of your DPR file. - - For example: - - program NewProject; - - uses - uROCOMInit, <--- HERE!!! - Forms, - [..] -} - - try - if msxml40 in InstalledMSXMLVersions - then fDocument := CoDOMDocument40.Create // See note above in case of an exception here - - else if msxml30 in InstalledMSXMLVersions - then fDocument := CoDOMDocument30.Create // See note above in case of an exception here - - else if msxml26 in InstalledMSXMLVersions - then fDocument := CoDOMDocument26.Create // See note above in case of an exception here - - else RaiseError(err_NoXMLParsersAvailable, []); - - fDocument.async := false; - - except - on E:Exception do RaiseError(err_ErrorCreatingMsXmlDoc,[E.ClassName, E.Message]); - else raise; - end; - - if (aDocumentName<>'') - then fDocument.documentElement := fDocument.createElement(aDocumentName); - if anEncoding = xeUTF8 then - lpi := fDocument.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8"') - else - lpi := fDocument.createProcessingInstruction('xml', 'version="1.0" encoding="utf-16"'); - fDocument.insertBefore(lpi, fDocument.childNodes[0]); - fDocument.preserveWhiteSpace := true; - fDocument.resolveExternals := false; - fDocument.validateOnParse := false; -end; - -procedure TROMSXMLDocument.SaveToFile(const aFileName: string); -begin - fDocument.save(aFileName); -end; - -procedure TROMSXMLDocument.SaveToStream(aStream: TStream); -var adapter : IStream; -begin - adapter := TStreamAdapter.Create(aStream, soReference); - fDocument.save(adapter); -end; - -function DetectMSXMLVersions : TMSXMLVersions; -var sysdir : array[0..199] of char; - ver : TMSXMLVersion; -begin - result := []; - - GetSystemDirectory(sysdir, SizeOf(sysdir)); - - for ver := Low(TMSXMLVersion) to High(TMSXMLVersion) do - if FileExists(sysdir+'\'+MSXMLFileNames[ver]) - then result := result+[ver]; -end; - -procedure TROMSXMLDocument.SetXML(const Value: widestring); -begin - if not fDocument.loadXML(Value) then - raise Exception.Create('Invalid input'); -end; - -const MSXMLDOM_Name = 'Msxml2.DOMDocument.3.0'; - -function TROMSXMLDocument.Transform(const aXSL: string): string; -var - XSLStylesheet: IXMLDOMDocument2; - XSLTemplate: IXSLTemplate; - XSLProcessor: IXSLProcessor; - adapter : IStream; - aStream: TStringStream; -begin - result := ''; - - XSLStylesheet := CoFreeThreadedDomDocument.Create; - XSLStylesheet.Async := FALSE; - if not XSLStylesheet.loadXML(aXSL) - then raise exception.create('Couldn''t load XSL stylesheet'); - - XSLTemplate := CoXSLTemplate.Create; - XSLTemplate._Set_stylesheet(XSLStylesheet); - - XSLProcessor := XSLTemplate.createprocessor; - XSLProcessor.input := fDocument; - - aStream := TStringStream.Create(''); - try - adapter := TStreamAdapter.Create(aStream, soReference); - XSLProcessor.output := adapter; - if XSLProcessor.Transform - then result := aStream.DataString; - finally - adapter:=nil; - aStream.Free; - end; -end; - -initialization -// Removed in favour of the unit uROCOMInit.pas which has to be added as first unit to the project's DPR -// See http://www.devexpress.com/products/vcl/ewf/faq.asp#A8 for more info - -// CoInitializeEx(nil, COINIT_MULTITHREADED or COINIT_SPEED_OVER_MEMORY); - - InstalledMSXMLVersions := DetectMSXMLVersions; - -finalization -// CoUninitialize; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerEventRepository.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerEventRepository.pas deleted file mode 100644 index 8864e6d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerEventRepository.pas +++ /dev/null @@ -1,131 +0,0 @@ -unit uROMasterServerEventRepository; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, uROEventRepository, uROClientIntf, uROClient, uROTypes, ROMasterServerLibrary_Intf; - -type - { TROMasterServerEventRepository } - TROMasterServerEventRepository = class(TROEventRepository) - private - fChannel: TROTransportChannel; - fSessionManager : IROSessionManager; - - procedure SetChannel(const Value: TROTransportChannel); - function GetSessionManager: IROSessionManager; - - protected - procedure Notification(aComponent: TComponent; Operation: TOperation); override; - - { Overrides } - procedure DoStoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; - const ExcludeSessionList: Boolean; - const SessionList: String); override; - function DoGetEventData(SessionID : TGUID; var TargetStream : Binary) : integer; override; - procedure DoAddSession(aSessionID : TGUID); override; - procedure DoRemoveSession(aSessionID : TGUID); override; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - property SessionManager : IROSessionManager read GetSessionManager; - - published - property Channel : TROTransportChannel read fChannel write SetChannel; - - end; - -implementation - -uses - SysUtils, uROClasses; - -{ TROMasterServerEventRepository } - -procedure TROMasterServerEventRepository.CheckProperties; -begin - Check(Channel = nil, Name + '.Channel must be assigned.'); - Channel.CheckProperties; - inherited; -end; - -constructor TROMasterServerEventRepository.Create(aOwner: TComponent); -begin - inherited; -end; - -destructor TROMasterServerEventRepository.Destroy; -begin - inherited; -end; - -procedure TROMasterServerEventRepository.DoAddSession(aSessionID: TGUID); -begin - SessionManager.CreateSession(GUIDToString(aSessionID), NIL); -end; - -function TROMasterServerEventRepository.DoGetEventData(SessionID: TGUID; var TargetStream: Binary): integer; -begin - result := SessionManager.GetMessages(GUIDToString(SessionID), TargetStream); - TargetStream.Position := 0; -end; - -procedure TROMasterServerEventRepository.DoRemoveSession( - aSessionID: TGUID); -begin - SessionManager.DeleteSession(GUIDToString(aSessionID)); -end; - -procedure TROMasterServerEventRepository.DoStoreEventData(SourceSessionID : TGUID; Data : Binary; - const ExcludeSender: Boolean; const ExcludeSessionList: Boolean; const SessionList: String); -begin - SessionManager.StoreMessage(GUIDToString(SourceSessionID), Data, ExcludeSender, ExcludeSessionList, SessionList) -end; - -function TROMasterServerEventRepository.GetSessionManager: IROSessionManager; -begin - CheckProperties; - if (fSessionManager=NIL) then begin - fSessionManager := CoROSessionManager.Create(Message, Channel); - end; - - result := fSessionManager; -end; - -procedure TROMasterServerEventRepository.Notification( - aComponent: TComponent; Operation: TOperation); -begin - inherited; - - if (Operation<>opRemove) then Exit; - - if (aComponent=fChannel) then fChannel := NIL; -end; - -procedure TROMasterServerEventRepository.SetChannel( - const Value: TROTransportChannel); -begin - if (fChannel=Value) then Exit; - - fChannel := Value; - if (fChannel<>NIL) then fChannel.FreeNotification(Self); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerSessionManager.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerSessionManager.pas deleted file mode 100644 index 53c9221..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROMasterServerSessionManager.pas +++ /dev/null @@ -1,166 +0,0 @@ -unit uROMasterServerSessionManager; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, uROClient, uROSessions, uROBinMessage, uROTypes, - ROMasterServerLibrary_Intf; - -type - { TROMasterServerSessionManager } - TROMasterServerSessionManager = class(TROCustomSessionManager) - private - fBINMessage : TROBinMessage; - fChannel: TROTransportChannel; - fSessionManager : IROSessionManager; - - procedure SetChannel(const Value: TROTransportChannel); - function GetSessionManager: IROSessionManager; - - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - - { Overrides } - function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; override; - procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); override; - procedure DoClearSessions(OnlyExpired : boolean); override; - function DoGetSessionCount : integer; override; - procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); override; - - property SessionManager : IROSessionManager read GetSessionManager; - property OnSessionDeleted; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; - published - property Channel : TROTransportChannel read fChannel write SetChannel; - - end; - -implementation - -uses - SysUtils, uROClasses, uRORes; - -{ TROMasterServerSessionManager } - -procedure TROMasterServerSessionManager.CheckProperties; -begin - Check(Channel = nil, Name + '.Channel must be assigned.'); - Channel.CheckProperties; -end; - -constructor TROMasterServerSessionManager.Create(aOwner: TComponent); -begin - inherited; - - fBINMessage := TROBinMessage.Create(Self); - // in order to kill checktimer set interval to 0 - Self.SessionCheckInterval := 0; -end; - -destructor TROMasterServerSessionManager.Destroy; -begin - inherited; -end; - -procedure TROMasterServerSessionManager.DoClearSessions( - OnlyExpired: boolean); -begin - // do nothing -end; - -procedure TROMasterServerSessionManager.DoDeleteSession( - const aSessionID: TGUID; IsExpired: boolean); -begin - SessionManager.DeleteSession(GUIDToString(aSessionID)); -end; - -function TROMasterServerSessionManager.DoFindSession( - const aSessionID: TGUID; aUpdateTime: Boolean): TROSession; -var - usersession : TROUserSession; -begin - result := NIL; - usersession := SessionManager.ReadSession(GUIDToString(aSessionID)); - if (usersession<>NIL) then try - //result := TROSession.Create(aSessionID); - result := DoCreateSession(aSessionID); - result.Created := usersession.Created; - result.LastAccessed := usersession.LastAccessed; - result.LoadFromStream(usersession.Data, TRUE); - finally - usersession.Free; - end; -end; - -function TROMasterServerSessionManager.DoGetSessionCount: integer; -begin - result := SessionManager.GetSessionCount; -end; - -procedure TROMasterServerSessionManager.DoReleaseSession( - aSession: TROSession; NewSession: boolean); -var data : Binary; -begin - data := Binary.Create; - try - aSession.SaveToStream(data, TRUE); - - if NewSession - then SessionManager.CreateSession(GUIDToString(aSession.SessionID), data) - else SessionManager.UpdateSession(GUIDToString(aSession.SessionID), data); - aSession.Free(); - finally - data.Free; - end; -end; - -function TROMasterServerSessionManager.GetSessionManager: IROSessionManager; -begin - CheckProperties; - - if (fSessionManager=NIL) then begin - fSessionManager := CoROSessionManager.Create(fBINMessage, fChannel); - end; - - result := fSessionManager; -end; - -procedure TROMasterServerSessionManager.Notification( - AComponent: TComponent; Operation: TOperation); -begin - inherited; - - if (Operation<>opRemove) then Exit; - - if (AComponent=fChannel) - then fChannel := NIL; -end; - -procedure TROMasterServerSessionManager.SetChannel( - const Value: TROTransportChannel); -begin - if (fChannel=Value) then Exit; - - fChannel := Value; - fSessionManager := NIL; - if (fChannel<>NIL) then fChannel.FreeNotification(Self); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeChannel.pas deleted file mode 100644 index f94da65..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeChannel.pas +++ /dev/null @@ -1,339 +0,0 @@ -unit uRONamedPipeChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Enterprise Library } -{ } -{ compiler: Delphi 5 and up } -{ platform: Win32 } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Robert Love (robert.love@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - - -{$I RemObjects.inc} - -//TODO: Make sure with testing that client behaves well when server connection broken. - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, Sysutils, uROClient, uROClientIntf, uROClasses, uROTypes, Windows; - -type - TRONamedPipeChannel = class(TROTransportChannel,IROTransport) - private - fServerName: string; - fServerID: string; - FActive: Boolean; - FActivateOnDemand: Boolean; - procedure SetServerID(const Value: string); - procedure SetServerName(const Value: string); - procedure SetActive(const Value: Boolean); - procedure SetActivateOnDemand(const Value: Boolean); - protected - hPipe : THandle; - - procedure IntDispatch(aRequest, aResponse : TStream); override; - function GetPipeName : string; virtual; - procedure SendAndRecv(aRequest, aResponse : TStream); virtual; - function DataWaiting: Boolean; virtual; - - { IROTransport } - function GetTransportObject : TObject; override; - - public - constructor Create(Owner : TComponent); override; - destructor Destroy; override; - procedure Connect; virtual; - procedure Disconnect; virtual; - procedure CheckProperties; override; - published - property ActivateOnDemand : Boolean read FActivateOnDemand write SetActivateOnDemand default true; - property Active : Boolean read FActive write SetActive default false; - property ServerID : string read fServerID write SetServerID; - property ServerName : string read fServerName write SetServerName; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; -implementation -{ TRONamedPipeChannel } - -procedure TRONamedPipeChannel.connect; -var - dwmode : DWord; -begin - hPipe := CreateFile( - pchar(GetPipeName), // pipe name - GENERIC_READ or // read and write access - GENERIC_WRITE, - 0, // no sharing - nil, // no security attributes - OPEN_EXISTING, // opens existing pipe - 0, // default attributes - 0); // no template file - - FActive := not (hPipe= INVALID_HANDLE_VALUE); - if (GetLastError = ERROR_PIPE_BUSY) then - begin - // All pipe instances are busy, so wait for 20 seconds. - if (not WaitNamedPipe(pchar(GetPipeName), 20000) ) then - begin - FActive := False; - raise EROChannelBusy.Create('Named Pipe Server is Busy'); - end; - hPipe := CreateFile( - pchar(GetPipeName), // pipe name - GENERIC_READ or // read and write access - GENERIC_WRITE, - 0, // no sharing - nil, // no security attributes - OPEN_EXISTING, // opens existing pipe - 0, // default attributes - 0); // no template file - FActive := not (hPipe= INVALID_HANDLE_VALUE); - end; - if Not FActive then RaiseLastOSError; - - dwMode := PIPE_READMODE_MESSAGE; - if not SetNamedPipeHandleState( - hPipe, // pipe handle - dwMode, // new pipe mode - nil, // don't set maximum bytes - nil) // don't set maximum time - Then - begin - Disconnect; - raise Exception.Create('Unable to change to Message Read Mode'); - end; -end; - -procedure TRONamedPipeChannel.Disconnect; -begin - CloseHandle(hPipe); - FActive := False; -end; - -constructor TRONamedPipeChannel.Create(Owner: TComponent); -begin - inherited Create(Owner); - FActivateOnDemand := true; - FActive := false; - FServerID := 'RONamedPipeServer'; - fServerName := '.'; // localhost -end; - -function TRONamedPipeChannel.GetTransportObject: TObject; -begin - result := self; -end; - -procedure TRONamedPipeChannel.IntDispatch(aRequest, aResponse: TStream); -begin - if (Not FActive) and (Not FActivateOnDemand) then - raise Exception.Create('Operation can not be performed on a closed connection.'); - if (Not Factive) then - Connect; - SendAndRecv(aRequest,aResponse); - if FActivateOnDemand then - Disconnect; -end; - -function TRONamedPipeChannel.GetPipeName: string; -begin - CheckProperties; - result := '\\' + fServerName + '\pipe\' + fServerID; -end; - -procedure TRONamedPipeChannel.SendAndRecv(aRequest, aResponse: TStream); -var - fBuf : PChar; - FSize : Integer; - fSuccess : BOOL; - FBytes : DWord; - BufSize : integer; -begin - // ViktorT changed - BufSize := 4096; - GetMem(fBuf, BufSize); - - try - try - aRequest.Position := 0; - FSize := aRequest.Size; - // Send Request size to recipient (server) - fSuccess := WriteFile(hPipe, FSize, sizeof(FSize), FBytes, nil); - - if not FSuccess then - RaiseLastOSError; - - while FSize > 0 do - begin - FBytes := aRequest.Read(fBuf^, BufSize); - dec(FSize, FBytes); - fSuccess := WriteFile(hPipe, fBuf^, FBytes, FBytes, nil); - - if not FSuccess then - RaiseLastOSError; - end; - - if not FSuccess then - RaiseLastOSError; - - fSuccess := ReadFile(hPipe, FSize, sizeof(FSize), FBytes, nil); - - if not FSuccess then - RaiseLastOSError; - - while FSize > 0 do - begin - fSuccess := ReadFile(hPipe, fBuf^, BufSize, FBytes, nil); - - if (not fSuccess) and (GetLastError <> ERROR_MORE_DATA) then - RaiseLastOSError; - - if FBytes > 0 then - aResponse.Write(fBuf^, FBytes); - - dec(FSize, FBytes); - end; - except - on e: Exception do - begin - Factive := False; - CloseHandle(hPipe); - end; - end; - finally - FreeMem(fBuf); - end; -(* - FSize := aRequest.Size; - GetMem(fBuf,FSize); - try - FillChar(fBuf^,FSize,0); - aRequest.Seek(0,soFromBeginning); - aRequest.ReadBuffer(fBuf[0],FSize); - // Send Buffer to Server - fSuccess := WriteFile( - hPipe, // pipe handle - fBuf[0], // message - FSize, // message length - FBytes, // bytes written - nil) ; // not overlapped - if not FSuccess then - begin - // ViktorT - Factive := False; - RaiseLastOSError; - end; - While Not DataWaiting do - Sleep(10); - - while DataWaiting do - begin - // Read from the pipe. - fSuccess := ReadFile( - hPipe, // pipe handle - fBuf[0], // buffer to receive reply - fSize, // size of buffer - FBytes, // number of bytes read - nil); // not overlapped - if (Not fSuccess) and (GetLastError <> ERROR_MORE_DATA) then - begin - // ViktorT - Factive := False; - RaiseLastOSError; - end; - if Fbytes > 0 then - aResponse.WriteBuffer(FBuf[0],fBytes); - end; - finally - FreeMem(fBuf); - end; // finally -*) -end; // SendAndRecv - - -function TRONamedPipeChannel.DataWaiting: Boolean; -var - fSuccess : BOOL; - BytesAvail : Integer; -begin - FSuccess := PeekNamedPipe(hPipe,nil,0,nil,@BytesAvail,nil); - if not FSuccess then - begin - // ViktorT - Factive := False; - RaiseLastOSError; - end; - result := (BytesAvail >0); -end; // DataWaiting - - -procedure TRONamedPipeChannel.SetActivateOnDemand(const Value: Boolean); -begin - FActivateOnDemand := Value; -end; - -procedure TRONamedPipeChannel.SetActive(const Value: Boolean); -begin - if FActive <> Value then - begin - if Value - then Connect - else Disconnect; - end; -end; - - -procedure TRONamedPipeChannel.SetServerID(const Value: string); -begin - fServerID := Value; -end; - -procedure TRONamedPipeChannel.SetServerName(const Value: string); -begin - fServerName := Value; -end; - - -procedure TRONamedPipeChannel.CheckProperties; -begin - Check(ServerID = '', Name+'.ServerID must be set.'); - Check(ServerName = '', Name+'.ServerName must be set.'); - inherited; -end; - -destructor TRONamedPipeChannel.Destroy; -begin - if FActive then begin - Disconnect; - end; - inherited; -end; - -initialization - RegisterTransportChannelClass(TRONamedPipeChannel); - -finalization - UnRegisterTransportChannelClass(TRONamedPipeChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeServer.pas deleted file mode 100644 index e5c3871..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRONamedPipeServer.pas +++ /dev/null @@ -1,486 +0,0 @@ -unit uRONamedPipeServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Enterprise Library } -{ } -{ compiler: Delphi 5 and up } -{ platform: Win32 } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Robert Love (robert.love@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -//TODO: Add OnFatalException Handler to send exception to main thread to be raised. - -interface - -{$WARN SYMBOL_DEPRECATED OFF} // This unit is only for Win32 - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Sysutils,Classes, Windows, Messages, uROClientIntf, uROServer, uROClasses, uROThread; - -const - PIPE_TIMEOUT = 1000; - BUFFER_SIZE = 4096; - -type - TRONamedPipeServer = class; - - TROPipeListenerThread = class(TThread) - private - { Private declarations } - fPipename : string; - FList : TThreadList; - FServer : TRONamedPipeServer; - FFatalError: TObject; - hPipe : THandle; - procedure ConnectOnTerminate(Sender : TObject); - function GetPipename: String; - procedure SetPipeName(const Value: String); - procedure RaiseException; - procedure EmulateConnect; - protected - procedure Execute; override; - property PipeName : String read GetPipename write SetPipeName; - property ConnectList : TThreadList read FList; - property Server : TRONamedPipeServer read FServer Write FServer; - property FatalError : TObject read FFatalError write FFatalError; - end; - - TROPipeConnectionThread = class(TROThread) - private - FPipeHandle: THandle; - fTransport : IROTransport; - FServer : TRONamedPipeServer; - FFatalError: TObject; - procedure Disconnect; - procedure RaiseException; - protected - procedure Execute; override; - property PipeHandle : THandle read FPipeHandle write FPipeHandle; - property Transport : IROTransport read FTransport write FTransport; - property Server : TRONamedPipeServer read FServer Write FServer; - property FatalError : TObject read FFatalError write FFatalError; - public - constructor Create(aCreateSuspended:Boolean); - end; - - TRONamedPipeServer = class(TROServer, IROTransport) - private - fServerID: string; - fTransport : IROTransport; - FActive : Boolean; - FListener : TROPipeListenerThread; - FAllowEveryone : Boolean; - protected - { Internals } - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - procedure ActivateServer; virtual; - property Listener: TROPipeListenerThread read FListener; - - { IROTransport } - function GetTransportObject : TObject; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - published - property ServerID : string read fServerID write fServerID; - property AllowEveryone : Boolean read FAllowEveryone write FAllowEveryone default false; - end; - -implementation - -procedure TROPipeListenerThread.ConnectOnTerminate(Sender: TObject); -var - LL : TList; - id : Integer; -begin - if Terminated then Exit; - LL := FList.LockList; - try - id := LL.IndexOf(sender); - if id >= 0 then - LL.Delete(id); - finally - FList.UnlockList; - end; -end; - -procedure TROPipeListenerThread.EmulateConnect; -var - i: cardinal; -begin - if hPipe <> INVALID_HANDLE_VALUE then - CallNamedPipe(pchar(fPipeName), nil, 0, nil, 0, i, 10); -end; - -{$IFDEF FPC} -const - PIPE_UNLIMITED_INSTANCES = 255; -{$ENDIF} - -procedure TROPipeListenerThread.Execute; -var - fconnected : bool; - PC : TROPipeConnectionThread; - LL : TList; - I : Integer; - lSecurityDescriptor : _SECURITY_DESCRIPTOR; - lSecurityAttribute : SECURITY_ATTRIBUTES; -begin - hPipe := INVALID_HANDLE_VALUE; - try - if FServer.AllowEveryone then begin - FillChar(lSecurityAttribute, sizeof(lSecurityAttribute), 0); - InitializeSecurityDescriptor(@lSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION); - SetSecurityDescriptorDacl(@lSecurityDescriptor, true, nil, False); - lSecurityAttribute.nLength := sizeof(lSecurityAttribute); - lSecurityAttribute.bInheritHandle := True; - lSecurityAttribute.lpSecurityDescriptor := @lSecurityDescriptor; - end; - FList := TThreadList.Create; - try - While not Terminated do - begin - if FServer.AllowEveryone then begin - hPipe := CreateNamedPipe( - pchar(fPipeName), // pipe name - PIPE_ACCESS_DUPLEX, // read/write access - PIPE_TYPE_MESSAGE or // message type pipe - PIPE_READMODE_BYTE or // byte-read mode - PIPE_WAIT, // blocking mode - PIPE_UNLIMITED_INSTANCES, // max. instances - BUFFER_SIZE, // output buffer size - BUFFER_SIZE, // input buffer size - PIPE_TIMEOUT, // client time-out - @lSecurityAttribute); - end else begin - hPipe := CreateNamedPipe( - pchar(fPipeName), // pipe name - PIPE_ACCESS_DUPLEX, // read/write access - PIPE_TYPE_MESSAGE or // message type pipe - PIPE_READMODE_BYTE or // byte-read mode - PIPE_WAIT, // blocking mode - PIPE_UNLIMITED_INSTANCES, // max. instances - BUFFER_SIZE, // output buffer size - BUFFER_SIZE, // input buffer size - PIPE_TIMEOUT, // client time-out - nil); // no security attribute - end; - - if (hPipe = INVALID_HANDLE_VALUE) then - RaiseLastOSError; - - // Wait for the client to connect; if it succeeds, - // the function returns a nonzero value. If the function returns - // false, GetLastError should returns ERROR_PIPE_CONNECTED. - fConnected := ConnectNamedPipe(hPipe, nil); - if not fConnected then - fConnected := (GetLastError = ERROR_PIPE_CONNECTED); - - if fConnected and not Terminated then - begin - PC := TROPipeConnectionThread.create(true); - PC.PipeHandle := hPipe; - PC.Server := FServer; - PC.FreeOnTerminate := True; - PC.Resume; - end - else - begin - // The client could not connect, so close the pipe. - CloseHandle(hPipe); - hPipe := INVALID_HANDLE_VALUE; - end; - end; - finally - LL := FList.LockList; - try - // Terminate all client connections because if here then this thread is terminating - for I := 0 to LL.Count -1 do - TROPipeConnectionThread(LL.Items[I]).Terminate; - finally - FList.UnlockList; - end; - FList.Free; - end; - except - on e : TObject do - begin - FatalError := E; - // Make sure exception is raised in main thread. - Synchronize(RaiseException); - end; - end; // except -end; - -function TROPipeListenerThread.GetPipename: String; -begin - result := string(fPipeName); -end; - -procedure TROPipeListenerThread.RaiseException; -begin - raise FatalError; -end; - -procedure TROPipeListenerThread.SetPipeName(const Value: String); -begin - fPipeName := Value; -end; - -{ TROPipeConnectionThread } - -constructor TROPipeConnectionThread.Create(aCreateSuspended:Boolean); -begin - inherited Create(aCreateSuspended,'TROPipeConnectionThread'); -end; -{ -function TROPipeConnectionThread.DataWaiting: Boolean; -var - fSuccess : BOOL; - BytesAvail : Integer; -begin - FSuccess := PeekNamedPipe(FPipeHandle,nil,0,nil,@BytesAvail,nil); - if not FSuccess then - RaiseLastWin32Error; - result := (BytesAvail >0); -end; -} -procedure TROPipeConnectionThread.Disconnect; -begin -// Flush the pipe to allow the client to read the pipe's contents -// before disconnecting. Then disconnect the pipe, and close the -// handle to this pipe instance. - FlushFileBuffers(FPipeHandle); - DisconnectNamedPipe(FPipeHandle); - CloseHandle(FPipeHandle); -end; - -procedure TROPipeConnectionThread.Execute; -var - ReadStream, - WriteStream : TMemoryStream; - fBytesRead,fBytesWritten : DWORD; - fSuccess : BOOL; - fDataSize: integer; - fBuf: PChar; -begin - GetMem(fBuf, BUFFER_SIZE); - readStream := TMemoryStream.Create; - writeStream := nil; - try - try - While Not Terminated do - begin - // Read incomming Data - fSuccess := ReadFile(fPipeHandle, fDataSize, sizeof(fDataSize), fBytesRead, nil); - - if Not fSuccess then - if GetLastError = ERROR_BROKEN_PIPE then - // The pipe has been ended - break - else - RaiseLastOSError; - - while fDataSize > 0 do - begin - fSuccess := ReadFile(fPipeHandle, fBuf^, BUFFER_SIZE, fBytesRead, nil); - - if (not fSuccess) and (GetLastError <> ERROR_MORE_DATA) then - RaiseLastOSError; - - if fBytesRead > 0 then - ReadStream.Write(fBuf^, fBytesRead); - - dec(fDataSize, fBytesRead); - end; - - if not FSuccess then - RaiseLastOSError; - - if ReadStream.Size > 0 then - begin - writeStream := TMemoryStream.Create; - ReadStream.Position := 0; - FServer.DispatchMessage(fServer.FTransport, ReadStream, writeStream); - ReadStream.Position := 0; - ReadStream.SetSize(0); - writeStream.Position := 0; - fDataSize := writeStream.Size; - fSuccess := WriteFile(fPipeHandle, fDataSize, sizeof(fDataSize), fBytesWritten, nil); - - if not fSuccess then - RaiseLastOSError; - - while fDataSize > 0 do - begin - fBytesRead := writeStream.Read(fBuf^, BUFFER_SIZE); - dec(fDataSize, fBytesRead); - fSuccess := WriteFile(fPipeHandle, fBuf^, fBytesRead, fBytesWritten, nil); - - if not FSuccess then - RaiseLastOSError; - end; - end; - end; - except - on e: Exception do - begin - // Only expected message is a broken pipe and it should be ignored. - if not ((e is EWin32Error) - and ((EWin32Error(E).ErrorCode = ERROR_BROKEN_PIPE) - {or (EWin32Error(E).ErrorCode = ERROR_NO_DATA)})) then - begin - FatalError := E; - // Make sure exception is raised in main thread. - Synchronize(RaiseException); - end; - end; - end; - finally - FreeMem(fBuf); - ReadStream.Free; - WriteStream.Free; - Disconnect; - if FServer.FListener <> nil then fServer.FListener.ConnectOnTerminate(self); - end; -(* - // Read incomming Data - // Empty incomming buffer into Stream - FSuccess := True; - while DataWaiting do - begin - fSuccess := ReadFile(fPipeHandle,ReadBuf,BUFFER_SIZE,fBytesRead,nil); - if (Not fSuccess) and (GetLastError <> ERROR_MORE_DATA) then - Break; - if (FBytesRead > 0) then - ReadStream.WriteBuffer(ReadBuf[0],fBytesRead); - if fSuccess then break; - end; - if Not FSuccess then - RaiseLastWIn32Error; - fIncommingData := (FSuccess and (ReadStream.Size > 0)); - if FIncommingData then - begin - // Transport Data - WriteStream.Clear; - FServer.DispatchMessage(fServer.FTransport, Readstream, Writestream); - ReadStream.Clear; - // Write Contents from RO back out Pipe - fBytesRead := 1; //just to start loop - While FBytesRead > 0 do - begin - fBytesRead := WriteStream.Read(WriteBuf,BUFFER_SIZE); - if FBytesRead > 0 then - begin - fSuccess := WriteFile(FPipeHandle,WriteBuf,fBytesRead,fBytesWritten,nil); - if (not FSuccess) then - RaiseLastWin32Error; - end; - end; // while FBytesRead > 0 - end; // if FIncommingData - end; // while not terminated - - finally - Disconnect; - ReadStream.Free; - WriteStream.Free; - end; -except - on e: Exception do - begin - // Only expected message is a broken pipe and it should be ignored. - if not ((e is EWin32Error) and (EWin32Error(E).ErrorCode = ERROR_BROKEN_PIPE)) then - begin - FatalError := E; - // Make sure exception is raised in main thread. - Synchronize(RaiseException); - end; - end; -end; //except -*) -end; - - -procedure TROPipeConnectionThread.RaiseException; -begin - raise FatalError; -end; - -{ TRONamedPipeServer } - -procedure TRONamedPipeServer.ActivateServer; -begin -if FActive then - begin - CheckProperties; - FListener := TROPipeListenerThread.create(true); - FListener.PipeName := '\\.\pipe\'+ ServerID; - FListener.FreeOnTerminate := True; - FListener.Server := Self; - FListener.Resume; - end - else begin - FListener.Terminate; - FListener.EmulateConnect; - end; -end; - -procedure TRONamedPipeServer.CheckProperties; -begin - Check(ServerID = '', Name+'.ServerID must be set.'); - inherited; -end; - -constructor TRONamedPipeServer.Create(aOwner: TComponent); -begin - inherited; - Supports(Self, IROTransport, fTransport); - if Assigned(Owner) then - fServerID := Owner.Name + '_RONamedPipeServer' - else - fServerID := 'RONamedPipeServer' -end; - -destructor TRONamedPipeServer.Destroy; -begin - Active := False; - inherited; -end; - -function TRONamedPipeServer.GetTransportObject: TObject; -begin - result := Self; -end; - -function TRONamedPipeServer.IntGetActive: boolean; -begin - result := Factive; -end; - -procedure TRONamedPipeServer.IntSetActive(const Value: boolean); -begin - if Value <> FActive then - begin - FActive := Value; - if not (csDesigning in ComponentState) then - ActivateServer; - end; -end; - -initialization - RegisterServerClass(TRONamedPipeServer); -finalization - UnregisterServerClass(TRONamedPipeServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROOpenXMLImpl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROOpenXMLImpl.pas deleted file mode 100644 index 00d89b2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROOpenXMLImpl.pas +++ /dev/null @@ -1,597 +0,0 @@ -unit uROOpenXMLImpl; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, uROXDOM_2_3, Variants, uROXMLIntf; - -type - TROOpenXMLDocument = class; - { TROOpenXMLNode } - TROOpenXMLNode = class(TInterfacedObject, IXMLNode) - private - fNode : TDOMNode; - fDoc: TROOpenXMLDocument; - //function GetNodesByAttribute(const anAttributeName, anAttributeValue: widestring): IXMLNodeList; - - protected - function GetName : widestring; - function GetLocalName : widestring; - function GetRef : pointer; - function GetParent : IXMLNode; - - function GetValue : Variant; - procedure SetValue(const Value : Variant); - - function GetasString: widestring; - procedure SetasString(const Value: widestring); - - function GetXML : widestring; - - function GetAttributes(Index : integer) : IXMLNode; - function GetAttributeCount : integer; - - function GetChildren(Index : integer) : IXMLNode; - function GetChildrenCount : integer; - - function Add(const aNodeName : widestring; aNameSpaceURI: widestring = '') : IXMLNode; - function AddAttribute(const anAttributeName : widestring; const anAttributeValue : Variant) : IXMLNode; overload; - function AddAttribute(const anAttributeName : widestring; const anAttributeString: widestring) : IXMLNode; overload; - function AddXml(const Xml: WideString): IXMLNode; - - procedure Delete(Index : integer); - procedure Remove(const aNode : IXMLNode); - - function GetAttributeByName(const anAttributeName : widestring) : IXMLNode; - function GetAttributeValue(const anAttributeName : widestring; DefaultValue : Variant) : Variant; - function GetAttributeAsString(const anAttributeName : widestring; DefaultValue : widestring) : widestring; - - function GetNodeByName(const aNodeName : widestring) : IXMLNode; - function GetNodeValue(const aNodeName : widestring; const Default : Variant) : Variant; - - function GetNodesByName(const aNodeName : widestring) : IXMLNodeList; - - function GetNodeByAttribute(const anAttributeName, anAttributeValue : widestring) : IXMLNode; - - function GetFirstChild: IXMLNode; - function GetNextSibling: IXMLNode; - function GetNamespaceURI: WideString; - function GetDocument: IXMLDocument; - - public - constructor Create(const aNode : TDOMNode; aDoc: TROOpenXMLDocument); - destructor Destroy; override; - end; - - { TROOpenXMLNodeList } - TROOpenXMLNodeList = class(TInterfacedObject, IXMLNodeLIst) - private - fNodeList : TdomNodeList; - fDoc: TROOpenXMLDocument; - - protected - function GetNodes(Index : integer) : IXMLNode; - function GetCount : integer; - - public - constructor Create(const aNodeList : TdomNodeList; aDoc: TROOpenXMLDocument); - end; - - { TROOpenXMLDocument } - TROOpenXMLDocument = class(TInterfacedObject, IXMLDocument) - private - fDocument : TDOMDocument; - fDOMImpl : TDomImplementation; - - protected - function GetDocumentNode : IXMLNode; - - function GetEncoding : TXMLEncoding; - - procedure New(aDocumentName : widestring = ''; anEncoding : TXMLEncoding = xeUTF8); - - procedure SaveToStream(aStream : TStream); - procedure SaveToFile(const aFileName : string); - procedure LoadFromStream(aStream : TStream); - procedure LoadFromFile(const aFileName : string); - function GetXml:widestring; - procedure SetXML(const Value : widestring); - - function Transform(const XSL : string) : string; - public - constructor Create; - destructor Destroy; override; - - end; - -{ Misc. for OpenXML } -function DOMNodeToString(aDOMNode : TdomNode; aDOMImplementation : TDomImplementation = NIL) : string; -function DOMNodeToWidestring(aDOMNode : TdomNode; aDOMImplementation : TDomImplementation = NIL) : widestring; - -implementation - -uses uRORes, uROClasses, SysUtils; - -function DOMNodeToString(aDOMNode : TdomNode; aDOMImplementation : TDomImplementation = NIL) : string; -var domimpl : TDOMImplementation; - parser : TDomToXmlParser; -begin - if (aDOMImplementation=NIL) - then domimpl := TDomImplementation.Create(NIL) - else domimpl := aDOMImplementation; - - parser := TDomToXmlParser.Create(NIL); - - try - parser.DOMImpl := domimpl; - parser.writeToString(aDOMNode, XMLEncodingStr[xeUTF8], result); - finally - parser.Free; - if (aDOMImplementation=NIL) then domimpl.Free; - end; -end; - -function DOMNodeToWidestring(aDOMNode : TdomNode; aDOMImplementation : TDomImplementation = NIL) : widestring; -var domimpl : TDOMImplementation; - parser : TDomToXmlParser; -begin - if (aDOMImplementation=NIL) - then domimpl := TDomImplementation.Create(NIL) - else domimpl := aDOMImplementation; - - parser := TDomToXmlParser.Create(NIL); - - try - parser.DOMImpl := domimpl; - parser.writeToWideString(aDOMNode, result); - finally - parser.Free; - if (aDOMImplementation=NIL) then domimpl.Free; - end; -end; - -{ TROOpenXMLNode } - -constructor TROOpenXMLNode.Create(const aNode : TDOMNode; aDoc: TROOpenXMLDocument); -begin - if not Assigned(aNode) - then RaiseError(err_DOMElementIsNIL, []); - - inherited Create; - - fDoc := adoc; - fNode := aNode; -end; - -destructor TROOpenXMLNode.Destroy; -begin - inherited; -end; - -function TROOpenXMLNode.Add(const aNodeName: widestring; aNameSpaceURI: widestring = ''): IXMLNode; -var node : TDOMNode; -begin - if aNameSpaceURI = '' then - node := fNode.ownerDocument.createElement(aNodeName) - else - node := fNode.ownerDocument.createElementNS(aNameSpaceURI, aNodeName); - fNode.appendChild(node); - - result := TROOpenXMLNode.Create(node, fDoc); -end; - -procedure TROOpenXMLNode.Delete(Index: integer); -begin - fNode.removeChild(fNode.childNodes.item(Index)); -end; - -function TROOpenXMLNode.GetAttributes(Index : integer): IXMLNode; -begin - result := TROOpenXMLNode.Create(fNode.attributes.item(Index), fDoc); -end; - -function TROOpenXMLNode.GetChildren(Index : integer): IXMLNode; -begin - result := TROOpenXMLNode.Create(fNode.childNodes.item(Index), fDoc); -end; - -function TROOpenXMLNode.GetName: widestring; -begin - result := fNode.nodeName; -end; - -function TROOpenXMLNode.GetValue: Variant; -begin - result := fNode.textContent; -end; - -function TROOpenXMLNode.GetXML: widestring; -begin - DOMNodeToWidestring(fNode, fdoc.fDOMImpl); -end; - -procedure TROOpenXMLNode.Remove(const aNode: IXMLNode); -begin - fNode.removeChild(TdomNode(aNode.Ref)); -end; - -procedure TROOpenXMLNode.SetValue(const Value: Variant); -var textnode : TdomNode; -begin - if (fNode.childNodes.length=1) and (fNode.childNodes.item(0).nodeName='#text') - then fNode.removeChild(fNode.childNodes.item(0)); - - textnode := fNode.ownerDocument.createTextNode(Value); - fNode.appendChild(textnode) -end; - -function TROOpenXMLNode.GetasString: widestring; -begin - Result:=fNode.textContent; -end; - -procedure TROOpenXMLNode.SetasString(const Value: widestring); -var textnode : TdomNode; -begin - if (fNode.childNodes.length=1) and (fNode.childNodes.item(0).nodeName='#text') - then fNode.removeChild(fNode.childNodes.item(0)); - - textnode := fNode.ownerDocument.createTextNode(Value); - fNode.appendChild(textnode) -end; - - -function TROOpenXMLNode.GetNodeByName(const aNodeName: widestring): IXMLNode; -var i : integer; - nme : string; -begin - result := NIL; - - with fNode.childNodes do - for i := 0 to (length-1) do begin - nme := item(i).nodeName; - if (nme=aNodeName) then begin - result := TROOpenXMLNode.Create(item(i), fDoc); - Exit; - end; - end; -end; - -{function TROOpenXMLNode.GetNodesByAttribute(const anAttributeName, anAttributeValue: widestring): IXMLNodeList; -//var node : TdomNodeList; -begin - RaiseError(err_NotImplemented, []); -end;} - -function TROOpenXMLNode.GetNodesByName(const aNodeName: widestring): IXMLNodeList; -var //i : integer; - list : TdomNodeList; -begin - result := NIL; - - list := (fNode as TdomElement).getElementsByTagName(aNodeName); - if (list<>NIL) - then result := TROOpenXMLNodeList.Create(list, fDoc) -end; - -function TROOpenXMLNode.GetAttributeCount: integer; -begin - result := fNode.attributes.length -end; - -function TROOpenXMLNode.GetChildrenCount: integer; -begin - result := fNode.childNodes.length -end; - -function TROOpenXMLNode.GetRef: pointer; -begin - result := fNode; -end; - -function TROOpenXMLNode.GetLocalName: widestring; -begin - result := fNode.nodeName -end; - -function TROOpenXMLNode.AddAttribute(const anAttributeName : widestring; - const anAttributeValue : Variant) : IXMLNode; -var attr : TdomNode; -begin - attr := fNode.ownerDocument.createAttribute(anAttributeName); - attr.nodeValue := anAttributeValue; - fNode.attributes.setNamedItem(attr); - - result := TROOpenXMLNode.Create(attr, fDoc); -end; - -function TROOpenXMLNode.AddAttribute(const anAttributeName: widestring; - const anAttributeString: widestring): IXMLNode; -var attr : TdomNode; -begin - attr := fNode.ownerDocument.createAttribute(anAttributeName); - attr.nodeValue := anAttributeString; - fNode.attributes.setNamedItem(attr); - - result := TROOpenXMLNode.Create(attr, fDoc); -end; - -function TROOpenXMLNode.GetParent: IXMLNode; -begin - result := TROOpenXMLNode.Create(fNode.ParentNode, fdoc) -end; - -function TROOpenXMLNode.GetAttributeByName( - const anAttributeName: widestring): IXMLNode; -var node : TDomNode; -begin - result := NIL; - if fNode.attributes = nil then exit; - node := fNode.attributes.getNamedItem(anAttributeName); - - if (node<>NIL) - then result := TROOpenXMLNode.Create(node, fDoc); -end; - -function TROOpenXMLNode.GetNodeByAttribute(const anAttributeName, - anAttributeValue: widestring): IXMLNode; -var i : integer; -begin - result := NIL; - if fNode.attributes = nil then exit; - - for i := 0 to (fNode.attributes.length-1) do - with fNode.attributes.item(i) do - if (nodeName=anAttributeName) and (nodeValue=anAttributeValue) then begin - result := TROOpenXMLNode.Create(fNode.attributes.item(i), fDoc); - Exit; - end; -end; - -function TROOpenXMLNode.GetAttributeValue( - const anAttributeName: widestring; DefaultValue: Variant): Variant; -var attr : IXMLNode; -begin - attr := GetAttributeByName(anAttributeName); - if (attr<>NIL) then - result := attr.Value - else - result := DefaultValue; -end; - -function TROOpenXMLNode.GetAttributeAsString(const anAttributeName: widestring; - DefaultValue: widestring): widestring; -var attr : IXMLNode; -begin - attr := GetAttributeByName(anAttributeName); - if (attr<>NIL) then - result := attr.Value - else - result := DefaultValue; -end; - - - -function TROOpenXMLNode.GetNodeValue(const aNodeName: widestring; - const Default: Variant): Variant; -var node : IXMLNode; -begin - node := GetNodeByName(aNodeName); - if (node=NIL) then result := Default - else result := node.Value -end; - -function TROOpenXMLNode.GetFirstChild: IXMLNode; -var node : TDomNode; -begin - result := NIL; - node := fNode.firstChild; - - if (node<>NIL) - then result := TROOpenXMLNode.Create(node, fDoc); -end; - -function TROOpenXMLNode.GetNextSibling: IXMLNode; -var node : TDomNode; -begin - result := NIL; - node := fNode.nextSibling; - - if (node<>NIL) - then result := TROOpenXMLNode.Create(node, fDoc); -end; - -function TROOpenXMLNode.GetNamespaceURI: WideString; -begin - Result := fNode.namespaceURI; -end; - -function TROOpenXMLNode.AddXml(const Xml: WideString): IXMLNode; -begin -end; - -function TROOpenXMLNode.GetDocument: IXMLDocument; -begin - result := fDoc; -end; - -{ TROOpenXMLNodeList } - -constructor TROOpenXMLNodeList.Create(const aNodeList: TdomNodeList; aDoc: TROOpenXMLDocument); -begin - if not Assigned(aNodeList) - then RaiseError(err_DOMElementIsNIL, []); - - inherited Create; - - fDoc := aDoc; - fNodeList := aNodeList; -end; - -function TROOpenXMLNodeList.GetCount: integer; -begin - result := fNodeList.length -end; - -function TROOpenXMLNodeList.GetNodes(Index: integer): IXMLNode; -begin - result := TROOpenXMLNode.Create(fNodeList.item(Index), fDoc); -end; - -{ TROOpenXMLDocument } - -constructor TROOpenXMLDocument.Create; -begin - fDOMImpl := TDomImplementation.Create(NIL); - fDocument := fDOMImpl.createDocument('XMLDOC', NIL); -end; - -destructor TROOpenXMLDocument.Destroy; -begin - fDOMImpl.freeDocument(fDocument); - fDOMImpl.Free; - - inherited; -end; - -function TROOpenXMLDocument.GetDocumentNode: IXMLNode; -begin - result := TROOpenXMLNode.Create(fDocument.documentElement, self) -end; - -function TROOpenXMLDocument.GetEncoding: TXMLEncoding; -begin - result := xeUTF8 - { ToDo: for now, obtain the real encoding later ;-) } -end; - -function TROOpenXMLDocument.GetXml: widestring; -var - parser : TDomToXmlParser; -begin - parser := TDomToXmlParser.Create(NIL); - - try - parser.DOMImpl := fDOMImpl; - parser.writeToWideString(fDocument.documentElement, result); - finally - parser.Free; - end; -end; - -procedure TROOpenXMLDocument.LoadFromFile(const aFileName: string); -var //domimpl : TDOMImplementation; - parser : TXmlToDomParser; -begin - New(''); - parser := TXmlToDomParser.Create(NIL); - try - parser.DOMImpl := fDOMImpl; - - fDocument := parser.fileToDom(aFileName); - finally - parser.Free; - end; -end; - -procedure TROOpenXMLDocument.LoadFromStream(aStream: TStream); -var //domimpl : TDOMImplementation; - folddoc : TdomDocument; - parser : TXmlToDomParser; -begin - New(''); - parser := TXmlToDomParser.Create(NIL); - try - parser.DOMImpl := fDOMImpl; - - fOldDoc := fdocument; - fDocument := parser.streamToDom(aStream); - fOldDoc.domImplementation.freeDocument(fOldDoc); - finally - parser.Free; - end; -end; - -procedure TROOpenXMLDocument.New(aDocumentName : widestring = ''; anEncoding : TXMLEncoding = xeUTF8); -var docel : TdomNode; -begin - fDocument.clear; - - if (aDocumentName<>'') then begin - docel := fDocument.createElement(aDocumentName); - fDocument.appendChild(docel) - end; -end; - -procedure TROOpenXMLDocument.SaveToFile(const aFileName: string); -var //domimpl : TDOMImplementation; - parser : TDomToXmlParser; - fstream : TFileStream; -begin - fstream := NIL; - parser := TDomToXmlParser.Create(NIL); - - try - fstream := TFileStream.Create(aFileName, fmCreate); - parser.DOMImpl := fDOMImpl; - - parser.writeToStream(fDocument.documentElement, 'UTF-8', fstream); - finally - parser.Free; - fstream.Free; - end; -end; - -procedure TROOpenXMLDocument.SaveToStream(aStream: TStream); -var //domimpl : TDOMImplementation; - parser : TDomToXmlParser; - //fstream : TFileStream; -begin - //fstream := NIL; - parser := TDomToXmlParser.Create(NIL); - - try - parser.DOMImpl := fDOMImpl; - parser.writeToStream(fDocument.documentElement, 'UTF-8', aStream); - finally - parser.Free; - end; -end; - -procedure TROOpenXMLDocument.SetXML(const Value: widestring); -var - ss: TXmlToDomParser; - fOldDoc: TdomDocument; -begin - New(''); - ss := TXmlToDomParser.Create(NIL); - try - ss.DOMImpl := fDOMImpl; - - fOldDoc := fdocument; - fDocument := ss.wideStringToDom(value); - fOldDoc.Free; - finally - ss.Free; - end; -end; - -function TROOpenXMLDocument.Transform(const XSL: string): string; -begin - RaiseError(err_NotImplemented, []); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.pas deleted file mode 100644 index cf5f17f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.pas +++ /dev/null @@ -1,87 +0,0 @@ -unit uROPleaseWaitForm_Kylix; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Libc, SysUtils, Classes, QForms, QGraphics, - QControls, QExtCtrls, QStdCtrls; - -type - TPleaseWaitForm = class(TForm) - lbl_Caption: TLabel; - img_Logo: TImage; - procedure FormShow(Sender: TObject); - procedure FormHide(Sender: TObject); - private - fWindowList:pointer; - public - constructor Create(iOwner: TComponent; const iCaption:string=''; const iHeader:string=''; iBitmap:TBitmap=nil; iFreeBitmap:boolean=false); reintroduce; - procedure Show(const iCaption:string=''); reintroduce; - procedure Hide; reintroduce; - end; - -var - PleaseWaitForm: TPleaseWaitForm; - -implementation - -{$R *.xfm} - -{ TPleaseWaitForm } - -constructor TPleaseWaitForm.Create(iOwner: TComponent; const iCaption:string=''; const iHeader:string=''; iBitmap:TBitmap=nil; iFreeBitmap:boolean=false); -begin - inherited Create(iOwner); - if iHeader <> '' then Caption := iHeader; - lbl_Caption.Caption := iCaption; - - if Assigned(iBitmap) then begin - img_Logo.Picture.Assign(iBitmap); - if iFreeBitmap then iBitmap.Free(); - end; - - img_Logo.Top := (ClientHeight-img_Logo.Height) div 2; - img_Logo.Left := img_Logo.Top; - lbl_Caption.Left := img_Logo.Width+ (img_Logo.Left*2); - ClientWidth := lbl_Caption.Left+lbl_Caption.Width+img_Logo.Left; -end; - -procedure TPleaseWaitForm.Show(const iCaption:string=''); -begin - if iCaption <> '' then begin - lbl_Caption.Caption := iCaption; - ClientWidth := lbl_Caption.Left+lbl_Caption.Width+8; - end; - inherited Show(); - Application.ProcessMessages(); -end; - -procedure TPleaseWaitForm.Hide; -begin - inherited Hide(); - Application.ProcessMessages(); -end; - -procedure TPleaseWaitForm.FormShow(Sender: TObject); -begin -end; - -procedure TPleaseWaitForm.FormHide(Sender: TObject); -begin -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.xfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.xfm deleted file mode 100644 index 994bc1d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPleaseWaitForm_Kylix.xfm +++ /dev/null @@ -1,40 +0,0 @@ -object PleaseWaitForm: TPleaseWaitForm - Left = 336 - Top = 344 - Width = 542 - Height = 41 - HorzScrollBar.Range = 124 - VertScrollBar.Range = 32 - BorderIcons = [] - Caption = 'RemObjects SDK' - Color = clButton - Font.Color = clText - Font.Height = 11 - Font.Name = 'Tahoma' - Font.Pitch = fpVariable - Font.Style = [] - FormStyle = fsStayOnTop - ParentFont = False - Position = poScreenCenter - OnHide = FormHide - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 18 - TextWidth = 5 - object img_Logo: TImage - Left = 2 - Top = 0 - Width = 32 - Height = 32 - AutoSize = True - Center = True - Transparent = True - end - object lbl_Caption: TLabel - Left = 64 - Top = 14 - Width = 60 - Height = 18 - Caption = 'Please wait...' - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPostMessage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPostMessage.pas deleted file mode 100644 index c7097e9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPostMessage.pas +++ /dev/null @@ -1,1019 +0,0 @@ -unit uROPostMessage; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - Classes, SysUtils, TypInfo, - uROSerializer, uROClient, uROClientIntf, uROTypes, FMTBcd; - -type - TROPostMessageSerializer = class; - - TROPostMessageBinaryType = (btInlineHex, btInlineBase64); - - TROPostMessage = class(TROMessage) - private - fBinaryType: TROPostMessageBinaryType; - fMultiLine: Boolean; - procedure SetBinaryType(const Value: TROPostMessageBinaryType); - protected - { Internals } - function ReadException: Exception; override; - function CreateSerializer: TROSerializer; override; - - { IROMessage } - procedure Initialize(const aTransport: IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); override; - procedure WriteToStream(aStream: TStream); override; - procedure ReadFromStream(aStream: TStream); override; - procedure WriteException(aStream: TStream; anException: Exception); override; - - function GetSerializer: TROPostMessageSerializer; - property Serializer: TROPostMessageSerializer read GetSerializer; - procedure InitObject; override; - public - procedure Assign(aSource: TPersistent); override; - function IsValidMessage(aData: PChar; aLength: Integer): boolean; override; - published - property BinaryType: TROPostMessageBinaryType read fBinaryType write SetBinaryType default btInlineHex; - property MultiLine: Boolean read fMultiLine write fMultiLine default True; - end; - - TROPostMessageSerializer = class(TROSerializer) - private - fPrefixStack: TStringList; - fPrefix: String; - fMessage: TStringList; - fBinaryType: TROPostMessageBinaryType; - procedure PushPrefix(aNewPrefix:string; aArrayElementId: integer = -1); - procedure PopPrefix; - function AssemblePrefix(const aName: string; aArrayElementId: integer): string; - protected - procedure BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; - var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); override; - procedure EndWriteObject(const aName: string; aClass : TClass; anObject: TObject; const LevelRef : IUnknown); override; - procedure CustomWriteObject(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); override; - procedure CustomReadObject(const aName: string; aClass: TClass;var Ref; ArrayElementId: integer);override; - procedure BeginReadObject(const aName : string; aClass : TClass; var anObject : TObject; var LevelRef : IUnknown; - var IsValidType : boolean; ArrayElementId : integer = -1); override; - procedure EndReadObject(const aName : string; aClass : TClass; var anObject : TObject; const LevelRef : IUnknown); override; - public - { Writers } - procedure WriteInteger(const aName: string; anOrdType: TOrdType; const Ref; ArrayElementId: integer = -1); override; - procedure WriteInt64(const aName: string; const Ref; ArrayElementId: integer = -1); override; - procedure WriteEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId: integer = -1); override; - procedure WriteUTF8String(const aName: string; const Ref; ArrayElementId: integer = -1); override; - procedure WriteWideString(const aName: string; const Ref; ArrayElementId: integer = -1); override; - procedure WriteDateTime(const aName: string; const Ref; ArrayElementId: integer = -1); override; - procedure WriteDouble(const aName: string; aFloatType: TFloatType; const Ref; ArrayElementId: integer = -1); override; - procedure WriteXml(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteDecimal(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteGuid(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteVariant(const aName: String; const Ref;ArrayElementId: Integer = -1); override; - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1);override; - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteException(const aName : string; const Ref; ArrayElementId : integer = -1); override; - { Readers } - procedure ReadInteger(const aName: string; anOrdType: TOrdType; var Ref; ArrayElementId: integer = -1); override; - procedure ReadInt64(const aName: string; var Ref; ArrayElementId: integer = -1); override; - procedure ReadEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId: integer = -1); override; - procedure ReadUTF8String(const aName: string; var Ref; ArrayElementId: integer = -1; iMaxLength: integer = -1); override; - procedure ReadWideString(const aName: string; var Ref; ArrayElementId: integer = -1; iMaxLength: integer = -1); override; - procedure ReadDateTime(const aName: string; var Ref; ArrayElementId: integer = -1); override; - procedure ReadDouble(const aName: string; aFloatType: TFloatType; var Ref; ArrayElementId: integer = -1); override; - procedure ReadXml(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadDecimal(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadGuid(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadVariant(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1);override; - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - procedure ReadException(const aName : string; var Ref; ArrayElementId : integer = -1); override; - property BinaryType: TROPostMessageBinaryType read fBinaryType write fBinaryType; - public - constructor Create(); - destructor Destroy; override; - - procedure Clear(); - procedure LoadFromStream(aStream: TStream; aMultiLine: Boolean = True); - procedure SaveToStream(aStream: TStream; aMultiLine: Boolean = True); - - procedure WriteItem(const aName: string; aString: string; aArrayElementId: integer = -1); - function ReadItem(const aName: string; aArrayElementId: integer = -1): string; - - property Message: TStringList read fMessage write fMessage; - property Prefix: string read fPrefix write fPrefix; - end; - -{$IFDEF DELPHI7UP} -const PostLocale = 1033; -var PostFormatSettings : TFormatSettings; -{$ENDIF DELPHI7} - -implementation - -uses - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE}eDebugServer,{$ENDIF} - uRORes, uROClasses, uROCompression, uROBinaryHelpers, uROXmlIntf; - -const - PostDateTimeFormat = 'yyyy"-"mm"-"dd" "hh":"nn":"ss'; - PostDateTimeLength = 19; - -function PostStrToFloat(const aString: string): Extended; -{$IFNDEF DELPHI7UP} -var e: integer; -{$ENDIF} -begin - {$IFDEF DELPHI7UP} - Result := StrToFloat(aString,PostFormatSettings);// then - {$ELSE} - Val(aString, Result, e); - {$ENDIF} -end; - -{ HTTPEncode/HTTPDecode reproduced from HTTPApp.pas} - -function HTTPEncode(const AStr: String): String; -// The NoConversion set contains characters as specificed in RFC 1738 and -// should not be modified unless the standard changes. -const - NoConversion = ['A'..'Z','a'..'z','*','@','.','_','-', - '0'..'9','$','!','''','(',')']; -var - Sp, Rp: PChar; -begin - SetLength(Result, Length(AStr) * 3); - Sp := PChar(AStr); - Rp := PChar(Result); - while Sp^ <> #0 do begin - if Sp^ in NoConversion then - Rp^ := Sp^ - else - if Sp^ = ' ' then begin - Rp^ := '+' - end - else begin - FormatBuf(Rp^, 3, '%%%.2x', 6, [Ord(Sp^)]); - Inc(Rp,2); - end; - Inc(Rp); - Inc(Sp); - end; - SetLength(Result, Rp - PChar(Result)); -end; - -function HTTPDecode(const AStr: String): String; -var - Sp, Rp, Cp: PChar; - S: String; -begin - SetLength(Result, Length(AStr)); - Sp := PChar(AStr); - Rp := PChar(Result); - Cp := Sp; - try - while Sp^ <> #0 do begin - case Sp^ of - '+': Rp^ := ' '; - '%': begin - // Look for an escaped % (%%) or % encoded character - Inc(Sp); - if Sp^ = '%' then begin - Rp^ := '%' - end - else begin - Cp := Sp; - Inc(Sp); - if (Cp^ <> #0) and (Sp^ <> #0) then begin - S := '$' + Cp^ + Sp^; - Rp^ := Chr(StrToInt(S)); - end - else - raise Exception.CreateFmt('Error decoding character (%%XX) at position %d', [Cp - PChar(AStr)]); - end; - end; - else - Rp^ := Sp^; - end; - Inc(Rp); - Inc(Sp); - end; - except - on E:EConvertError do - raise EConvertError.CreateFmt('Invalid URL encoded character (%s) at position %d', ['%' + Cp^ + Sp^, Cp - PChar(AStr)]) - end; - SetLength(Result, Rp - PChar(Result)); -end; - -{ TROPostMessage } - -procedure TROPostMessage.Assign(aSource: TPersistent); -begin - inherited; - if Assigned(aSource) then begin - BinaryType := TROPostMessage(aSource).BinaryType; - MultiLine := TROPostMessage(aSource).MultiLine; - end; -end; - -procedure TROPostMessage.InitObject; -begin - inherited; - fMultiLine := True; -end; - -function TROPostMessage.CreateSerializer: TROSerializer; -begin - result := TROPostMessageSerializer.Create(); - TROPostMessageSerializer(result).BinaryType := BinaryType; -end; - -function TROPostMessage.GetSerializer: TROPostMessageSerializer; -begin - result := (inherited Serializer as TROPostMessageSerializer); -end; - -function GuidToStr(aGuid: TGUID): String; -begin - result := GUIDToString(aGuid); - result := copy(result, 2, length(result) - 2); -end; - -procedure TROPostMessage.Initialize(const aTransport: IROTransport; - const anInterfaceName, aMessageName: string; aType: TMessageType); -begin - inherited; - Serializer.Clear(); - Serializer.WriteItem('__MessageType','Message'); - Serializer.WriteItem('__InterfaceName',anInterfaceName); - Serializer.WriteItem('__MessageName',aMessageName); - Serializer.WriteItem('__ClientID', GuidToStr(Self.GetClientID())); -end; - -function TROPostMessage.IsValidMessage(aData: PChar; - aLength: Integer): boolean; -var - str: string; -begin - SetString(str, aData, aLength); - Result := Pos('__MessageType=', str) > 0; -end; - -function TROPostMessage.ReadException: Exception; -var - lExceptionName, lMessage: string; -begin - lExceptionName := Serializer.ReadItem('__ExceptionClass'); - lMessage := Serializer.ReadItem('__ExceptionMessage'); - - result := CreateException(lExceptionName, lMessage); - - if result.InheritsFrom(EROException) - then Serializer.Read('__Exception', result.ClassInfo, result); // Reads the other fields which have been properly serialized -end; - -procedure TROPostMessage.ReadFromStream(aStream: TStream); -var - lMessageType: string; - lClientID: string; -begin - inherited; - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE} - DebugServer.EnterMethod('TROPostMessage.ReadFromStream(stream=%x; position:$%x)', [integer(pointer(aStream)), aStream.Position]); - try - DebugServer.WriteHexDump('Incoming PostMessage stream:', aStream); - {$ENDIF DEBUG_REMOBJECTS_POSTMESSAGE} - - Serializer.LoadFromStream(aStream, fMultiLine); - - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE} - DebugServer.Write('Incoming PostMessage', Serializer.Message); - {$ENDIF DEBUG_REMOBJECTS_POSTMESSAGE} - - lClientID := Serializer.ReadItem('__ClientID'); - if lClientID <> '' then - SetClientID(StringToGUID(Format('{%s}', [lClientID]))); - - lMessageType := Serializer.ReadItem('__MessageType'); - if SameText(lMessageType,'Message') then begin - - InterfaceName := Serializer.ReadItem('__InterfaceName'); - MessageName := Serializer.ReadItem('__MessageName'); - - end - else if SameText(lMessageType, 'Exception') then begin - ProcessException(); - end - else begin - raise EROException.CreateFmt(err_UnknownMessageType,[lMessageType]); - end; - - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE} - finally - DebugServer.ExitMethod('TROPostMessage.ReadFromStream(stream=%x; position:$%x)', [integer(pointer(aStream)), aStream.Position]); - end; - {$ENDIF DEBUG_REMOBJECTS_POSTMESSAGE} -end; - -procedure TROPostMessage.SetBinaryType( - const Value: TROPostMessageBinaryType); -begin - if fBinaryType <> Value then begin - fBinaryType := Value; - Serializer.BinaryType := Value; - end; -end; - -procedure TROPostMessage.WriteException(aStream: TStream; anException: Exception); -begin - Serializer.Clear(); - Serializer.WriteItem('__MessageType','Exception'); - Serializer.WriteItem('__ExceptionClass', anException.ClassName); - Serializer.WriteItem('__ExceptionMessage', anException.Message); - - if (anException is EROException) then begin - Serializer.Write('__Exception', anException.ClassInfo, anException); - end; - - WriteToStream(aStream); - inherited; -end; - -procedure TROPostMessage.WriteToStream(aStream: TStream); -begin - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE} - DebugServer.Write('Outgoing PostMessage', Serializer.Message); - {$ENDIF DEBUG_REMOBJECTS_POSTMESSAGE} - - Serializer.SaveToStream(aStream, MultiLine); - aStream.Seek(0, soFromBeginning); - - inherited; - {$IFDEF DEBUG_REMOBJECTS_POSTMESSAGE} - DebugServer.WriteHexDump('Outgoing PostMessage stream:', aStream); - {$ENDIF DEBUG_REMOBJECTS_POSTMESSAGE} -end; - -{ TROPostMessageSerializer } - -constructor TROPostMessageSerializer.Create; -begin - fMessage := TStringList.Create(); - fPrefixStack := TStringList.Create(); -end; - -destructor TROPostMessageSerializer.Destroy; -begin - FreeAndNil(fMessage); - FreeAndNil(fPrefixStack); - inherited; -end; - -procedure TROPostMessageSerializer.BeginReadObject(const aName: string; - aClass: TClass; var anObject: TObject; var LevelRef: IInterface; - var IsValidType: boolean; ArrayElementId: integer); -var - lCount: Integer; - lIsAssigned: Boolean; - lActualClass: TROComplexTypeClass; - lClassname: string; -begin - inherited; - lClassname := ReadItem(aName, ArrayElementID); - - lIsAssigned := lClassname <> ''; - - PushPrefix(aName, ArrayElementId); - - { ToDo -omh: MUCH this should be moved into common code in TROSerializer so ALL messages benbefit from it? } - - if aClass.InheritsFrom(TROArray) then begin - if lIsAssigned then begin - anObject := aClass.Create(); - ReadInteger('Count', otULong, lCount); - TROArray(anObject).Resize(lCount); - end; - IsValidType := true; - end - else if aClass.InheritsFrom(Binary) then begin - if not Assigned(anObject) then begin - if lIsAssigned then - anObject := Binary.Create; - end - else begin - if lIsAssigned then begin - (anObject as Binary).Size := 0; - end - else begin - anObject := nil; - end; - end; - IsValidType := true; - end - else if Assigned(anObject) and aClass.InheritsFrom(EROException) then begin - IsValidType := TRUE; - end - else begin - if lIsAssigned then begin - - if IsValidType then begin - lActualClass := FindROClass(lClassname); - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[lClassname,aClass.ClassName]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[lClassname,aClass.ClassName]); - anObject := lActualClass.Create; - - end - else begin - RaiseError(str_InvalidClassTypeInStream,[lClassname]); - end; - end; - end; - -end; - -procedure TROPostMessageSerializer.EndReadObject(const aName: string; aClass: TClass; var anObject: TObject; const LevelRef: IInterface); -begin - inherited; - PopPrefix(); -end; - -procedure TROPostMessageSerializer.BeginWriteObject(const aName: string; - aClass: TClass; anObject: TObject; var LevelRef: IInterface; - var IsValidType: boolean; out IsAssigned: Boolean; - ArrayElementId: integer); -var - lCount: Integer; -begin - inherited; - IsAssigned := Assigned(anObject); - - if aClass.InheritsFrom(Binary) then - IsValidType := true; - - - if IsValidType and IsAssigned then - WriteItem(aName, anObject.ClassName, ArrayElementId) - else - WriteItem(aName, '', ArrayElementId); - - PushPrefix(aName, ArrayElementId); - - if IsAssigned and (anObject is TROArray) then begin - lCount := TROArray(anObject).Count; - WriteInteger('Count', otULong, lCount); - end; -end; - -procedure TROPostMessageSerializer.EndWriteObject(const aName: string; aClass: TClass; anObject: TObject; const LevelRef: IInterface); -begin - inherited; - PopPrefix(); -end; - -procedure TROPostMessageSerializer.ReadDateTime(const aName: string; var Ref; ArrayElementId: integer); -var - year, month, day, hour, min, sec : word; - S: string; -begin - s := HTTPDecode(ReadItem(aName, ArrayElementId)); - if s = '' then begin - TDateTime(Ref) := 0; - end - else begin - if Length(s) <> 19 then - RaiseError('Invaild DateTime value %s in PostMessage ("%s")',[s]); - - year := StrToInt(Copy(s,1,4)); - month := StrToInt(Copy(s,6,2)); - day := StrToInt(Copy(s,9,2)); - hour := StrToInt(Copy(s,12,2)); - min := StrToInt(Copy(s,15,2)); - sec := StrToInt(Copy(s,18,2)); - TDateTime(Ref) := EncodeDate(year, month, day)+EncodeTime(hour, min, sec, 0); - end; -end; - -procedure TROPostMessageSerializer.WriteDateTime(const aName: string; const Ref; - ArrayElementId: integer); -begin - WriteItem(aName,FormatDateTime(PostDateTimeFormat,TDateTime(Ref)), ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadDouble(const aName: string; aFloatType: TFloatType; var Ref; ArrayElementId: integer); -var - text: string; -begin - text := ReadItem(aName, ArrayElementId); - case aFloatType of - ftSingle : single(Ref) := PostStrToFloat(text); - ftDouble : double(Ref) := PostStrToFloat(text); - ftExtended : extended(Ref) := PostStrToFloat(text); - ftComp : comp(Ref) := PostStrToFloat(text); - ftCurr : currency(Ref) := PostStrToFloat(text); - end -end; - -procedure TROPostMessageSerializer.WriteDouble(const aName: string; aFloatType: TFloatType; const Ref; ArrayElementId: integer); -var - src: pointer; - text: string; -begin - src := @Ref; - case aFloatType of - ftSingle : begin - text := FloatToStr(single(src^){$IFDEF DELPHI7UP}, PostFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - end; - ftDouble : begin - text := FloatToStr(double(src^){$IFDEF DELPHI7UP}, PostFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - end; - ftExtended : begin - text := FloatToStr(extended(src^){$IFDEF DELPHI7UP}, PostFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - end; - ftComp : begin - text := FloatToStr(comp(src^){$IFDEF DELPHI7UP}, PostFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - end; - ftCurr : begin - text := FloatToStr(currency(src^){$IFDEF DELPHI7UP}, PostFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - end; - end; - ReplaceChar(text,[','],'.'); { compensate for locales that use "," as decimal. } - WriteItem(aName,text,ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId: integer); -var - value: Integer; - text: string; -begin - text := ReadItem(aName, ArrayElementId); - value := GetEnumValue(anEnumTypeInfo, text); - byte(Ref) := value; -end; - -procedure TROPostMessageSerializer.WriteEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId: integer); -begin - WriteItem(aName,GetEnumName(anEnumTypeInfo, Ord(byte(Ref))), ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadInt64(const aName: string; var Ref; ArrayElementId: integer); -var - s: string; -begin - s := ReadItem(aName, ArrayElementId); - Int64(Ref) := StrToInt(s); -end; - -procedure TROPostMessageSerializer.ReadInteger(const aName: string; anOrdType: TOrdType; var Ref; ArrayElementId: integer); -var - s: string; -begin - s := ReadItem(aName, ArrayElementId); - case anOrdType of - otSByte:smallint(ref) := StrToInt(s); - otUByte:byte(ref) := StrToInt(s); - otSWord:shortint(ref) := StrToInt(s); - otUWord:word(ref) := StrToInt(s); - otSLong:longint(ref) := StrToInt(s); - otULong:cardinal(ref) := StrToInt(s); - end; -end; - -procedure TROPostMessageSerializer.ReadUTF8String(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -begin - string(ref) := HTTPDecode(ReadItem(aName, ArrayElementId)); -end; - -procedure TROPostMessageSerializer.ReadWideString(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -begin - WideString(ref) := UTF8Decode(HTTPDecode(ReadItem(aName, ArrayElementId))); -end; - -procedure TROPostMessageSerializer.WriteInt64(const aName: string; const Ref; - ArrayElementId: integer); -begin - WriteItem(aName,IntToStr(Int64(ref)), ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteInteger(const aName: string; anOrdType: TOrdType; const Ref; ArrayElementId: integer); -var - s: string; -begin - case anOrdType of - otSByte:s := IntToStr(smallint(ref)); - otUByte:s := IntToStr(byte(ref)); - otSWord:s := IntToStr(shortint(ref)); - otUWord:s := IntToStr(word(ref)); - otSLong:s := IntToStr(longint(ref)); - otULong:s := IntToStr(cardinal(ref)); - end; - WriteItem(aName,s, ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteUTF8String(const aName: string; const Ref; ArrayElementId: integer); -begin - WriteItem(aName,HTTPEncode(string(ref)), ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteWideString(const aName: string; const Ref; - ArrayElementId: integer); -begin - WriteItem(aName, HTTPEncode(UTF8Encode(WideString(Ref))), ArrayElementID); -end; - -procedure TROPostMessageSerializer.Clear; -begin - fMessage.Clear(); - fPrefixStack.Clear(); - fPrefix := ''; -end; - -procedure TROPostMessageSerializer.LoadFromStream(aStream: TStream; aMultiLine: Boolean = True); -var - s: string; -begin - if aMultiLine then - fMessage.LoadFromStream(aStream) - else begin - SetLength(s,aStream.Size); - aStream.ReadBuffer(Pointer(s)^, Length(s)); - fMessage.Delimiter := '&'; - fMessage.DelimitedText := s; - end; - if (fMessage.Count > 0) and (copy(fMessage[0], 1, 7) = 'rorocks') then - RaiseInvalidStreamError(err_InvalidHeaderEncrypted, [], aStream); - - fPrefixStack.Clear(); - fPrefix := ''; -end; - -procedure TROPostMessageSerializer.SaveToStream(aStream: TStream; aMultiLine: Boolean = True); -var - s: string; -begin - if not aMultiLine then begin - fMessage.Delimiter := '&'; - s := fMessage.DelimitedText; - aStream.WriteBuffer(Pointer(s)^, Length(s)); - end - else begin - fMessage.SaveToStream(aStream); - end; -end; - -procedure TROPostMessageSerializer.PopPrefix; -begin - if fPrefixStack.Count = 0 then - raise EROException.Create('Umatched call to PopPrefix'); - - Prefix := fPrefixStack[fPrefixStack.Count-1]; - fPrefixStack.Delete(fPrefixStack.Count-1); -end; - -procedure TROPostMessageSerializer.PushPrefix(aNewPrefix: string; aArrayElementId: integer = -1); -begin - fPrefixStack.Add(Prefix); - Prefix := AssemblePrefix(aNewPrefix,aArrayElementId); -end; - -procedure TROPostMessageSerializer.CustomReadObject(const aName: string; aClass: TClass; var Ref; ArrayElementId: integer); -var - obj: TObject absolute Ref; -begin - inherited; - if Assigned(obj) and (obj is Binary) then begin - ReadBinary('Value', Binary(obj), ArrayElementID); - end; -end; - -procedure TROPostMessageSerializer.CustomWriteObject(const aName: string; aClass: TClass; const Ref; ArrayElementId: integer); -var - obj: TObject absolute Ref; -begin - inherited; - if Assigned(obj) and (obj is Binary) then begin - WriteBinary('Value', Binary(obj), ArrayElementID); - end; -end; - -procedure TROPostMessageSerializer.ReadVariant(const aName: String; var Ref; ArrayElementId: Integer); -var - lBinary: Binary; -begin - lBinary := Binary.Create(); - try - ReadBinary(aName, lBinary, ArrayElementID); - variant(Ref) := VariantFromBinary(lBinary); - finally - lBinary.Free(); - end; -end; - -procedure TROPostMessageSerializer.WriteVariant(const aName: String; const Ref; ArrayElementId: Integer); -var - lBinary: Binary; -begin - lBinary := BinaryFromVariant(Variant(Ref)); - try - WriteBinary(aName, lBinary, ArrayElementID); - finally - lBinary.Free(); - end; -end; - -function TROPostMessageSerializer.AssemblePrefix(const aName: string; aArrayElementId: integer):string; -begin - if Prefix <> '' then begin - if aArrayElementID <> -1 then begin - result := Prefix+'['+IntToStr(aArrayElementID)+']'; - end - else begin - result := Prefix+'.'+aName; - end; - end - else begin - result := aName; - end; -end; - -procedure TROPostMessageSerializer.WriteItem(const aName: string; aString: string; aArrayElementId: integer = -1); -begin - Message.Add(AssemblePrefix(aName, aArrayElementID)+'='+aString) -end; - -function TROPostMessageSerializer.ReadItem(const aName: string; aArrayElementId: integer = -1):string; -begin - result := Message.Values[AssemblePrefix(aName, aArrayElementId)]; -end; - -procedure TROPostMessageSerializer.ReadXml(const aName: String; - var Ref; ArrayElementId: Integer); -var - s: WideString; - res: IXMLDocument; -begin - ReadWideString(aName, s, ArrayElementID); - if s = '' then - IXmlNode(Ref) := nil - else begin - res := NewROXmlDocument; - Res.New; - Res.XML := s; - IXmlNode(Ref) := res.DocumentNode; - end; -end; - -procedure TROPostMessageSerializer.WriteXml(const aName: String; - const Ref; ArrayElementId: Integer); -var - s: WideString; -begin - if IXMLNode(Ref) = nil then - S := '' - else - s := IXMLNode(Ref).XML; - WriteWideString(aName, s, ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadDecimal(const aName: String; - var Ref; ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if DecimalSeparator <> '.' then s := StringReplace(s, '.', DecimalSeparator, []); - Variant(Ref) := BCDToVariant(StrToBcd(s)); -end; - -procedure TROPostMessageSerializer.ReadGuid(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if Copy(s,1,1) <> '{' then s := '{'+s+'}'; - string(Ref) := s; -end; - -procedure TROPostMessageSerializer.WriteDecimal(const aName: String; - const Ref; ArrayElementId: Integer); -var - s: string; -begin - s := BcdToStr(VariantToBCD(variant(Ref))); - if DecimalSeparator <> '.' then s := StringReplace(s, DecimalSeparator, '.', []); // delphi has no way to format a bcd with a specific format - WriteUTF8String(aName, s, ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteGuid(const aName: String; - const Ref; ArrayElementId: Integer); -var - s: string; -begin - s := GuidToString(StringToGUID(string(Ref))); - s := copy(s,2,length(s) -2); // remove curlies - WriteUTF8String(aName, s, ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteBinary(const aName: string; - const Ref; ArrayElementId: integer); -var - obj : Binary absolute Ref; - ss: TStringStream; - s: string; -begin - if Assigned(obj) then begin - WriteItem(aName, obj.ClassName, ArrayElementId); - - PushPrefix(aName, ArrayElementId); - try - case BinaryType of - btInlineHex:begin - s := obj.ToHexString; - end; - btInlineBase64:begin - ss := TStringStream.Create(''); - try - obj.Position := 0; - EncodeStream(obj, ss); - s := ss.DataString; - finally - ss.Free; - end; - end; - end; - WriteItem('Value', s, ArrayElementID); - finally - PopPrefix(); - end; - end - else - WriteItem(aName, '', ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadBinary(const aName: string; var Ref; - ArrayElementId: integer); -var - obj : Binary absolute Ref; - ss: TStringStream; - s: string; -begin - if ReadItem(aName, ArrayElementID) <> '' then begin - if not Assigned(obj) then Obj := Binary.Create; - obj.Size := 0; - PushPrefix(aName, ArrayElementId); - s := ReadItem('Value', ArrayElementID); - PopPrefix; - case BinaryType of - btInlineHex: Obj.LoadFromString(StringFromHexString(s)); - btInlineBase64:begin - ss := TStringStream.Create(s); - try - DecodeStream(ss, Obj); - Obj.Position := 0; - finally - ss.Free; - end; - end; - end; - end - else - obj:=nil; -end; - -function TROPostMessageSerializer.ReadArray(const aName: string; - aClass: TClass; var Ref; ArrayElementId: integer): Boolean; -var - obj : TROArray absolute Ref; - lCount: Integer; -begin - Result:= ReadItem(aName, ArrayElementID) <> ''; - if Result then begin - PushPrefix(aName, ArrayElementId); - obj := TROArray(aClass.Create()); - ReadInteger('Count', otULong, lCount); - obj.Resize(lCount); - obj.ReadComplex(Self); - PopPrefix(); - end; -end; - -function TROPostMessageSerializer.ReadStruct(const aName: string; - aClass: TClass; var Ref; ArrayElementId: integer): Boolean; -var - obj : TROComplexType absolute Ref; - lActualClass: TROComplexTypeClass; - lClassname: string; -begin - inherited; - lClassname := ReadItem(aName, ArrayElementID); - Result:=lClassname <> ''; - if Result then begin - lActualClass := FindROClass(lClassname); - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[lClassname,aClass.ClassName]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[lClassname,aClass.ClassName]); - obj := lActualClass.Create; - PushPrefix(aName, ArrayElementId); - Obj.ReadComplex(Self); - PopPrefix; - end; -end; - -procedure TROPostMessageSerializer.WriteArray(const aName: string; - const Ref; ArrayElementId: integer); -var - obj : TROArray absolute Ref; - lCount: Integer; -begin - if Assigned(obj) then begin - WriteItem(aName, obj.ClassName, ArrayElementId); - PushPrefix(aName, ArrayElementId); - lCount := obj.Count; - WriteInteger('Count', otULong, lCount); - obj.WriteComplex(Self); - PopPrefix(); - end - else - WriteItem(aName, '', ArrayElementId); -end; - -procedure TROPostMessageSerializer.WriteStruct(const aName: string; - const Ref; ArrayElementId: integer); -var - obj : TROComplexType absolute Ref; -begin - if Assigned(obj) then begin - WriteItem(aName, obj.ClassName, ArrayElementId); - PushPrefix(aName, ArrayElementId); - obj.WriteComplex(Self); - PopPrefix(); - end - else - WriteItem(aName, '', ArrayElementId); -end; - -procedure TROPostMessageSerializer.ReadException(const aName: string; - var Ref; ArrayElementId: integer); -var - obj: EROException absolute Ref; - lIsAssigned: Boolean; - lClassname: string; -begin - lClassname := ReadItem(aName, ArrayElementID); - lIsAssigned := lClassname <> ''; - PushPrefix(aName, ArrayElementId); - try - if lIsAssigned and Assigned(obj) then obj.ReadException(Self); - finally - PopPrefix; - end; -end; - -procedure TROPostMessageSerializer.WriteException(const aName: string; - const Ref; ArrayElementId: integer); -var - obj: EROException absolute Ref; -begin - if Assigned(obj) then - WriteItem(aName, obj.ClassName, ArrayElementId) - else - WriteItem(aName, '', ArrayElementId); - PushPrefix(aName, ArrayElementId); - try - if Assigned(obj) then obj.WriteException(Self); - finally - PopPrefix; - end; -end; - -initialization - RegisterMessageClass(TROPostMessage); - {$IFDEF DELPHI7UP} - GetLocaleFormatSettings(PostLocale,PostFormatSettings); - {$ENDIF} - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.pas deleted file mode 100644 index f37e05d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.pas +++ /dev/null @@ -1,168 +0,0 @@ -unit uROPoweredByRemObjectsButton; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF FPC}LResources,{$ENDIF} - {$IFDEF LINUX} - SysUtils, Classes {$IFDEF FPC}, Controls, Graphics {$ELSE}, QControls, QGraphics{$ENDIF}; - {$ELSE} - //ToDo: sort those out! - Windows, SysUtils, Messages, Classes, Controls, Graphics, Forms, Dialogs, - Menus, StdCtrls, ExtCtrls; - {$ENDIF} - -{$IFNDEF FPC} - {$R uROPoweredByRemObjectsButton.res} -{$ENDIF} - -type - TROPoweredByType = (atServer, atClient); - - TROPoweredByRemObjectsButton = class(TGraphicControl) - private - fBitmap: TBitmap; - fApplicationType: TROPoweredByType; - function GetHeight: byte; - function GetWidth: byte; - procedure SetHeight(const Value: byte); - procedure SetWidth(const Value: byte); - procedure SetApplicationType(const Value: TROPoweredByType); - procedure UpdateBitmap; - protected - {$IFDEF MSWINDOWS} - procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND; - {$ENDIF} - property Bitmap: TBitmap read fBitmap; - procedure GetBitmap; virtual; - public - { Public declarations } - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Paint; override; - procedure Click; override; - procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; - published - { Published properties and events } - property Height: byte read GetHeight Write SetHeight; - property Width: byte read GetWidth Write SetWidth; - property Anchors; - property ApplicationType: TROPoweredByType read fApplicationType write SetApplicationType default atServer; - end; { TRoPoweredByRemObjectsButton } - -implementation - -{$IFDEF MSWINDOWS} -uses ShellAPI; -{$ENDIF MSWINDOWS} - -const - STR_POWERED_BY_REMOBJECTS_CLIENT = 'POWERED_BY_REMOBJECTS_CLIENT'; - STR_POWERED_BY_REMOBJECTS_SERVER = 'POWERED_BY_REMOBJECTS_SERVER'; - -constructor TRoPoweredByRemObjectsButton.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - fBitmap := TBitmap.Create(); - UpdateBitmap(); - SetBounds(Left, Top, -1, -1); { width/height get ignored anyway } - {$IFDEF MSWINDOWS} - Cursor := crHandPoint; - {$ENDIF MSWINDOWS} -end; { Create } - -destructor TRoPoweredByRemObjectsButton.Destroy; -begin - FreeAndNil(fBitmap); - inherited Destroy; -end; { Destroy } - -procedure TRoPoweredByRemObjectsButton.Paint; -begin - //inherited; - Canvas.Draw(0,0,fBitmap); -end; - -procedure TRoPoweredByRemObjectsButton.Click; -begin - {$IFDEF MSWINDOWS} - ShellExecute(0,'open','http://www.remobjects.com',nil,nil,SW_SHOWNORMAL); - {$ENDIF MSWINDOWS} -end; - - -procedure TRoPoweredByRemObjectsButton.SetBounds(ALeft, ATop, AWidth, - AHeight: Integer); -begin - inherited SetBounds(ALeft,ATop,fBitmap.Width,fBitmap.Height); - -end; - -procedure TROPoweredByRemObjectsButton.SetApplicationType(const Value: TROPoweredByType); -begin - if (fApplicationType <> Value) then begin - fApplicationType := Value; - UpdateBitmap; - end; -end; - -procedure TROPoweredByRemObjectsButton.UpdateBitmap; -begin - GetBitmap(); - Invalidate; -end; - -procedure TROPoweredByRemObjectsButton.GetBitmap; -begin - case fApplicationType of - atServer: Bitmap.LoadFromResourceName(hInstance,STR_POWERED_BY_REMOBJECTS_SERVER); - atClient: Bitmap.LoadFromResourceName(hInstance,STR_POWERED_BY_REMOBJECTS_CLIENT); - end; { case } -end; - -function TROPoweredByRemObjectsButton.GetHeight: byte; -begin - result := inherited Height; -end; - -function TROPoweredByRemObjectsButton.GetWidth: byte; -begin - result := inherited Width; -end; - -procedure TROPoweredByRemObjectsButton.SetHeight(const Value: byte); -begin - { no-op, width is fixed } -end; - -procedure TROPoweredByRemObjectsButton.SetWidth(const Value: byte); -begin - { no-op, width is fixed } -end; - -{$IFDEF MSWINDOWS} -procedure TROPoweredByRemObjectsButton.WMEraseBkgnd(var Msg: TWMEraseBkgnd); -begin - Msg.Result := 0; -end; -{$ENDIF} - -{$IFDEF FPC} -initialization - {$I uROPoweredByRemObjectsButton.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.res deleted file mode 100644 index 787836a..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROPoweredByRemObjectsButton.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteDataModule.pas deleted file mode 100644 index 1d6b4f7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteDataModule.pas +++ /dev/null @@ -1,371 +0,0 @@ -unit uRORemoteDataModule; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, - {$IFDEF MSWINDOWS}Windows,{$ENDIF} - {$IFDEF DELPHI5}Forms,{$ENDIF} -// {$IFDEF FPC}Forms,{$ENDIF} - uROServerIntf, uROClientIntf, uROSessions, uROClasses, uROTypes, uROEventRepository, uROClient; - -type { Events } - TActivateEvent = procedure(const aClientID : TGUID; aSession : TROSession; const aMessage : IROMessage) of object; - TDeactivateEvent = procedure(const aClientID : TGUID; aSession : TROSession) of object; - TGetDispatchInfoEvent = procedure(const aTransport : IROTransport; const aMessage : IROMessage) of object; - - TRegisterEventClientEvent = procedure(const aClientID : TGUID; const EventTypes : string) of object; - - { TRORemoteDataModule } - TRORemoteDataModule = class(TDataModule, IROObjectActivation, IRODispatchNotifier, IROServerEventsBroker, IInterface, IROObjectRetainer) - private - fRefCount : integer; - fClientID: TGUID; - fOnActivate: TActivateEvent; - fOnDeactivate: TDeactivateEvent; - fSessionManager : TROCustomSessionManager; - fSession: TROSession; - fNewSession, - fRequiresSession, - fDestroySession : boolean; - fOnGetDispatchInfo: TGetDispatchInfoEvent; - fEventRepository: TROEventRepository; - fOnBeforeUnregisterEventClient: TRegisterEventClientEvent; - fOnBeforeRegisterEventClient: TRegisterEventClientEvent; - fTransport: IROTransport; - - fRetainedObjects : TList; - - procedure SetSessionManager(const Value: TROCustomSessionManager); - procedure SetEventRepository(const Value: TROEventRepository); - function GetSession: TROSession; - function GetEventRepository: TROEventRepository; - - protected - { IInterface } - function QueryInterface(const IID: TGUID; out Obj): HResult; reintroduce; virtual; stdcall; - function _AddRef: Integer; virtual; stdcall; - function _Release: Integer; virtual; stdcall; - - { IRODispatchNotifier } - procedure GetDispatchInfo(const aTransport : IROTransport; const aMessage : IROMessage); virtual; - - { IROObjectActivation } - procedure _OnActivate(aClientID: TGUID; const aMessage : IROMessage); - procedure _OnDeactivate(aClientID: TGUID); - procedure IROObjectActivation.OnActivate = _OnActivate; - procedure IROObjectActivation.OnDeactivate = _OnDeactivate; - - { IROServerEventsBroker } - procedure RegisterEventClient(const ClientID, EventTypes : string); - procedure UnregisterEventClient(const ClientID, EventTypes : string); - function GetEventsData(const ClientID : string; out EventsData : Binary) : integer; - - { IROObjectRetainer } - procedure RetainObject(const anObject : TObject); - function IsRetained(const anObject : TObject) : boolean; - procedure ReleaseObject(const anObject: TObject); - - { Internal } - procedure DoOnActivate(aClientID: TGUID; const aMessage : IROMessage); virtual; - procedure DoOnDeactivate(aClientID: TGUID); virtual; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - function CustomRequireSession(const aMessage : IROMessage) : boolean; virtual; - - {$IFDEF DELPHI7UP} - procedure Synchronize(aMethod: TThreadMethod); - {$ENDIF DELPHI7UP} - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - procedure DestroySession; - - property RefCount : integer read fRefCount; - property ClientID : TGUID read fClientID write fClientID; - property Transport: IROTransport read fTransport; - property Session : TROSession read GetSession; - property NewSession : boolean read fNewSession; - - published - property RequiresSession : boolean read fRequiresSession write fRequiresSession default FALSE; - property SessionManager : TROCustomSessionManager read fSessionManager write SetSessionManager; - property EventRepository : TROEventRepository read GetEventRepository write SetEventRepository; - - property OnActivate : TActivateEvent read fOnActivate write fOnActivate; - property OnDeactivate : TDeactivateEvent read fOnDeactivate write fOnDeactivate; - - property OnBeforeRegisterEventClient : TRegisterEventClientEvent read fOnBeforeRegisterEventClient write fOnBeforeRegisterEventClient; - property OnBeforeUnregisterEventClient : TRegisterEventClientEvent read fOnBeforeUnregisterEventClient write fOnBeforeUnregisterEventClient; - - property OnGetDispatchInfo : TGetDispatchInfoEvent read fOnGetDispatchInfo write fOnGetDispatchInfo; - end; - - TRORemoteDataModuleClass = class of TRORemoteDataModule; - -implementation - -uses - SysUtils, - {$IFDEF DELPHI5}ComObj,{$ENDIF DELPHI5} - uRORes; - -constructor TRORemoteDataModule.Create(aOwner: TComponent); -begin - inherited Create(aOwner); -end; - -destructor TRORemoteDataModule.Destroy; -begin - FreeAndNIL(fRetainedObjects); - inherited; -end; - -function TRORemoteDataModule._AddRef: Integer; -begin - if (csDesigning in ComponentState) then - result := -1 - else - result := InterlockedIncrement(fRefCount); -end; - -function TRORemoteDataModule._Release: Integer; -begin - if (csDesigning in ComponentState) then begin - result := -1 - end - else begin - result := InterlockedDecrement(fRefCount); - if (result=0) - then Destroy; - end; -end; - -function TRORemoteDataModule.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - result := inherited QueryInterface(IID, Obj); -end; - -procedure TRORemoteDataModule._OnActivate(aClientID: TGUID; const aMessage : IROMessage); -begin - fClientID := aClientID; - - DoOnActivate(aClientID, aMessage); // Loads the session if a session manager is assigned - - if Assigned(fOnActivate) - then fOnActivate(aClientID, fSession, aMessage); -end; - -procedure TRORemoteDataModule._OnDeactivate(aClientID: TGUID); -begin - if Assigned(fOnDeactivate) - then fOnDeactivate(aClientID, fSession); - - DoOnDeactivate(aClientID); // Releases the session -end; - -procedure TRORemoteDataModule.DoOnActivate(aClientID: TGUID; const aMessage : IROMessage); -begin - if (csDesigning in ComponentState) then Exit; - - fSession := NIL; - if not CustomRequireSession(aMessage) then Exit; - - if Assigned(fSessionManager) then begin - fNewSession := FALSE; - fDestroySession := FALSE; // Resets the flags - - fSession := fSessionManager.FindSession(aClientID); - - if (fSession=NIL) then begin - - if RequiresSession - then RaiseError(err_SessionNotFound, [GUIDToString(aClientID)], EROSessionNotFound) - else begin - fSession := fSessionManager.CreateSession(aClientID); - fNewSession := TRUE; - end; - end; - end - else begin - if RequiresSession then - RaiseError('SessionManager required, but not assigned'); - end; -end; - -procedure TRORemoteDataModule.DoOnDeactivate(aClientID: TGUID); -var - lSessionID: TGUID; -begin - if (csDesigning in ComponentState) then Exit; - - if Assigned(fSessionManager) and (fSession<>NIL) then begin - - if fDestroySession then begin - if NewSession then begin - fSessionManager.DeleteTemporarySession(fSession) - end - else begin - lSessionID := fSession.SessionID; - fSessionManager.ReleaseSession(fSession, false); - fSessionManager.DeleteSession(lSessionID, false) - end; - end - else begin - fSessionManager.ReleaseSession(fSession, NewSession); - end; - - end; -end; - -procedure TRORemoteDataModule.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation=opRemove) then begin - if (AComponent=fSessionManager) then fSessionManager := NIL - else if (AComponent=fEventRepository) then fEventRepository := NIL; - end; -end; - -procedure TRORemoteDataModule.DestroySession; -begin - fDestroySession := TRUE; -end; - -procedure TRORemoteDataModule.GetDispatchInfo(const aTransport: IROTransport; const aMessage: IROMessage); -begin - if Assigned(fOnGetDispatchInfo) then - fOnGetDispatchInfo(aTransport, aMessage); - fTransport := aTransport; -end; - -function TRORemoteDataModule.CustomRequireSession(const aMessage: IROMessage): boolean; -begin - result := not Assigned(aMessage) or not SameText(aMessage.MessageName, 'GetDescriptor'); -end; - -procedure TRORemoteDataModule.SetSessionManager( - const Value: TROCustomSessionManager); -begin - fSessionManager := Value; - if (fSessionManager<>NIL) then fSessionManager.FreeNotification(Self); -end; - -{$IFDEF DELPHI7UP} -procedure TRORemoteDataModule.Synchronize(aMethod: TThreadMethod); -begin - TThread.Synchronize(nil, aMethod); -end; -{$ENDIF DELPHI7UP} - -function TRORemoteDataModule.GetEventsData(const ClientID: string; out EventsData: Binary): integer; -begin - result := 0; - if (fEventRepository=NIL) then Exit; - - EventsData := Binary.Create; - result := EventRepository.GetEventData(Session.SessionID, EventsData); -end; - -procedure TRORemoteDataModule.RegisterEventClient(const ClientID, EventTypes: string); -var - lActive: IROActiveEventServer; -begin - if Assigned(fOnBeforeRegisterEventClient) then - fOnBeforeRegisterEventClient(StringToGUID(ClientID), EventTypes); - - if assigned(fEventRepository) then begin - if Supports(Transport, IROActiveEventServer, lActive) then - fEventRepository.AddSession(StringToGUID(ClientID), lActive) - else - fEventRepository.AddSession(StringToGUID(ClientID)); - end; -end; - -procedure TRORemoteDataModule.UnregisterEventClient(const ClientID, EventTypes: string); -begin - if Assigned(fOnBeforeUnregisterEventClient) then - fOnBeforeUnregisterEventClient(StringToGUID(ClientID), EventTypes); - - if assigned(fEventRepository) then - fEventRepository.RemoveSession(StringToGUID(ClientID)); -end; - -procedure TRORemoteDataModule.SetEventRepository(const Value: TROEventRepository); -begin - if (fEventRepository=Value) then Exit; - - fEventRepository := Value; - if (fEventRepository<>NIL) then - fEventRepository.FreeNotification(Self); -end; - -function TRORemoteDataModule.GetSession: TROSession; -var errmsg : string; -begin - if not (csDesigning in ComponentState) then begin - if (fSession=NIL) then begin - errmsg := 'The session has not been initialized.'; - if SessionManager=NIL then errmsg := errmsg+' '+Name+'''s SessionManager property is set to NIL.'; - raise EROException.Create(errmsg); - end; - end; - - result := fSession; -end; - -function TRORemoteDataModule.GetEventRepository: TROEventRepository; -var errmsg : string; -begin - if not (csDesigning in ComponentState) then begin - if (fEventRepository=NIL) then begin - errmsg := errmsg+' '+Name+'''s EventRepository property is not assigned'; - raise EROException.Create(errmsg); - end; - end; - - result := fEventRepository; -end; - -function TRORemoteDataModule.IsRetained(const anObject: TObject): boolean; -begin - result := (fRetainedObjects<>NIL) and (fRetainedObjects.IndexOf(anObject)>=0) -end; - -procedure TRORemoteDataModule.RetainObject(const anObject: TObject); -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then - fRetainedObjects := TList.Create; - - fRetainedObjects.Add(anObject); -end; - -procedure TRORemoteDataModule.ReleaseObject(const anObject: TObject); -var idx : integer; -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then Exit; - - idx := fRetainedObjects.IndexOf(anObject); - if (idx>=0) then fRetainedObjects.Delete(idx); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteService.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteService.pas deleted file mode 100644 index 9a6233b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORemoteService.pas +++ /dev/null @@ -1,241 +0,0 @@ -unit uRORemoteService; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, SysUtils, - uROTypes, uROClasses, uROClient, uROClientIntf, uRODL; - -type - { TRORemoteService } - TRORemoteService = class(TROComponent) - private - fMessage: TROMessage; - fChannel: TROTransportChannel; - fRodlLibrary: TRODLLibrary; - fCacheRODL: boolean; - fServiceName: string; - - procedure SetServiceName(const Value: string); - procedure SetCacheRODL(const Value: boolean); - procedure SetChannel(const Value: TROTransportChannel); - procedure SetMessage(const Value: TROMessage); - - {$IFDEF DESIGNTIME} - procedure FixUpTargetURL; - {$ENDIF} - - protected - // Internals - procedure Notification(aComponent: TComponent; Operation: TOperation); override; - function QueryInterface(const IID: TGUID; out Obj): HResult; override; - - public - destructor Destroy; override; - - function GetRODLLibrary : TRODLLibrary; virtual; - function GetServiceNames(aIncludeAbstractServices:boolean=false): IROStrings; - function GetServiceMethods: IROStrings; virtual; - - procedure CheckCanConnect(CheckServiceName: boolean = true); - procedure CheckProperties; - - published - property Message : TROMessage read fMessage write SetMessage; - property Channel : TROTransportChannel read fChannel write SetChannel; - property ServiceName : string read fServiceName write SetServiceName; - - property CacheRODL: boolean read fCacheRODL write SetCacheRODL default false; - end; - -implementation - -uses TypInfo, uRORes; - -{ TRORemoteService } -destructor TRORemoteService.Destroy; -begin - FreeAndNil(fRodlLibrary); - inherited; -end; - -procedure TRORemoteService.CheckCanConnect(CheckServiceName : boolean = TRUE); -begin - Check(Channel=NIL, Name+'.Channel must be assigned.'); - Channel.CheckProperties; - Check(Message=NIL, Name+'.Message must be assigned.'); - Message.CheckProperties; - if CheckServiceName then Check(ServiceName='', Name+'.ServiceName must be specified.'); -end; - -procedure TRORemoteService.CheckProperties; -begin - CheckCanConnect(true); -end; - -procedure TRORemoteService.Notification(aComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation=opRemove) then begin - if (aComponent=fChannel) then fChannel := NIL - else if (aComponent=fMessage) then fMessage := NIL - end; -end; - -{$IFDEF DESIGNTIME} -procedure TRORemoteService.FixUpTargetURL; -var http : IROHTTPTransport; - protocol : string; -begin - if (fChannel<>NIL) and (fMessage<>NIL) then begin - if Supports(fChannel, IROHTTPTransport, http) then - if (http.TargetURL='') then begin - protocol := UpperCase(StringReplace(Copy(fMessage.ClassName, 4, MaxInt), 'Message', '', [rfIgnoreCase])); - http.TargetURL := 'http://localhost:8099/'+protocol; - end; - end; -end; -{$ENDIF} - -procedure TRORemoteService.SetChannel(const Value: TROTransportChannel); -begin - fChannel := Value; - if (fChannel<>NIL) then begin - fChannel.FreeNotification(Self); - {$IFDEF DESIGNTIME} - if (csDesigning in ComponentState) then FixUpTargetURL; - {$ENDIF} - end; -end; - -procedure TRORemoteService.SetMessage(const Value: TROMessage); -begin - fMessage := Value; - if (fMessage<>NIL) then begin - fMessage.FreeNotification(Self); - {$IFDEF DESIGNTIME} - if (csDesigning in ComponentState) then FixUpTargetURL; - {$ENDIF} - end; -end; - -{$IFDEF DELPHI5} -const S_OK = 0; -{$ENDIF} - -function TRORemoteService.QueryInterface(const IID: TGUID; out Obj): HResult; -var //ref : IInterface; - proxyclass : TROProxyClass; - proxy : TROProxy; -begin - result := inherited QueryInterface(IID, Obj); - - if (result <> S_OK) then begin - proxyclass := FindProxyClass(IID, TRUE); - - if (proxyclass=NIL) then Exit - else begin - proxy := proxyclass.Create(fMessage, fChannel); - proxy.GetInterface(IID, Obj); - result := S_OK; - end; - end; -end; - -procedure TRORemoteService.SetCacheRODL(const Value: boolean); -begin - fCacheRODL := Value; - if not fCacheRODL then - FreeAndNil(fRodlLibrary) -end; - -function TRORemoteService.GetRODLLibrary: TRODLLibrary; -var - lMetadataReader:IROMetadataReader; -begin - if fCacheRODL and assigned(fRodlLibrary) then begin - result := fRodlLibrary; - exit; - end; - - FreeAndNil(fRodlLibrary); - CheckCanConnect(False); -// if not Assigned(Channel) then raise EROUserError.Create(err_CannotReadRODLWithoutChannel); - - if Supports(Channel,IROMetadataReader,lMetadataReader) then begin - lMetadataReader.RetrieveRODL(fRodlLibrary); - result := fRodlLibrary; - end - else begin - raise Exception.Create(err_ChannelDoesntSupportIROMetadataReader); - end; -end; - -function TRORemoteService.GetServiceNames(aIncludeAbstractServices:boolean=false): IROStrings; -var - lib : TRODLLibrary; - i : integer; -begin - CheckCanConnect(FALSE); - - result := NIL; - lib := GetRODLLibrary; - if Assigned(lib) then begin - result := NewROStrings; - - for i := 0 to (lib.ServiceCount-1) do - if not lib.Services[i].IsFromUsedRodl then - if aIncludeAbstractServices or (not lib.Services[i].Abstract) then - result.Add(lib.Services[i].Info.Name); - end; -end; - -procedure TRORemoteService.SetServiceName(const Value: string); -begin - fServiceName := Trim(Value); -end; - -function TRORemoteService.GetServiceMethods:IROStrings; -var - lLibrary: TRODLLibrary; - lService: TRODLService; - i:integer; -begin - lLibrary := GetRODLLibrary(); - if not Assigned (lLibrary) then RaiseError('Library could not retrieved from server'); - result := NewROStrings; - - lService := lLibrary.FindService(ServiceName); - if not Assigned (lService) then RaiseError('Service "%s" not found in library'); - - while Assigned(lService) do begin - for i := 0 to lService.Default.Count-1 do begin - result.Add(lService.Default.Items[i].Info.Name); - end; { for } - if (lService.Ancestor <> '') then begin - lService := lLibrary.FindService(lService.Ancestor); - end - else begin - lService := nil; - end; - end; - (result.Strings as TStringList).Sort(); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORes.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORes.pas deleted file mode 100644 index 93288b8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRORes.pas +++ /dev/null @@ -1,201 +0,0 @@ -unit uRORes; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF DOTNET} - Borland.Delphi.SysUtils; - {$ELSE} - Classes, SysUtils; - {$ENDIF DOTNET} - -{$IFDEF DOTNET} -type TSessionID = string; -{$ELSE} -type TSessionID = TGUID; -{$ENDIF DOTNET} - -const - str_Author = 'RemObjects Software'; - str_ProductName = 'RemObjects SDK'; - - res_RODLFile = 'RODLFILE'; - - CRLF = #13#10; - - HTTPModuleInfoCommand = '/Info'; - -resourcestring - // RODL - err_InvalidIndex = 'Invalid index %d'; // Raised by the RODL classes to indicate an invalid entity index - err_InvalidType = 'Invalid type "%s. Expected "%s""'; // Raised by TRODLComplexEntity.Add when trying to add an invalid class to the internal list - err_InvalidLibrary = 'Invalid library'; // Raised by TRODLConverter.Convert when the library is NIL - err_InvalidStream = 'Invalid stream'; // Raised by TRODLReader.Read when a NIL stream is passed - err_InvalidTargetEntity = 'Invalid TargetEntity "%s"'; // Raised by TRODLConverter.Convert when a call to ValidateTargetEntity fails - err_InvalidParamFlag = 'Invalid Parameter Flag "%s"'; // Raised by XMLFlagNameToFlag (unit uRODLToXML) when the specified string is not in XMLFlagNames - - err_InvalidStringLength = 'Stream read error: Invalid string length "%d"'; // - err_InvalidBinaryLength = 'Stream read error: Invalid binary length "%d"'; // - str_InvalidClassTypeInStream = 'Stream read error: Invalid class type encountered: "%s"'; - err_ObjectExpectedInStream = 'Stream read error: Object expected, but nil found.'; - err_UnexpectedEndOfStream = 'Unexpected end of stream.'; - - err_MessageClassMustImplementAssign = 'Please implement Assign() for your custom message class.'; - - err_InvalidInfo = 'Invalid or incomplete info.'; // Raised by TRODLEntity.Validate when the internal Info property is not valid - err_RodlDuplicateName = 'Duplicate name.'; // Raised by TRODLComplexEntity.Validate when two items have the same name - err_RodlNoDataTypeSpecified = 'No data type specified.'; // Raised by TRODLComplexEntity.Validate when two items have the same name - err_RodlNoEnumValues = 'Enum does not contain any values.'; - err_RodlNoStructElementsDefined = 'Struct does not contain any elements.'; - err_RodlNoOperationsDefined = 'Service interface does not contain any elements.'; - err_RodlUsedFileDoesNotExist = 'The referenced RODL file "%s" could not be found.'; - err_RodlInvalidDataType = 'Invalid or undefined data type "%s".'; - err_RodlStructCannotBeNested = 'Structs cannot recursively contain themselves.'; - err_RodlInvalidAncestorType = 'Invalid or undefined ancestor type "%s".'; - - err_UnspecifiedRODLLocation = 'Unspecified RODL location'; - - str_ExceptionOnServer = 'An exception of type %s was raised on the server: %s'; - str_ExceptionReraisedFromServer = 'An exception was raised on the server: %s'; - - err_AssignError = 'Cannot assign a "%s" to a "%s".'; - - // Message handling - err_InvalidRequestStream = 'Invalid request stream (%d bytes)'; - err_NILMessage = 'Message is NIL'; // Raised server side when a message passed to ProcessMessage is NIL - err_UnspecifiedInterface = 'The message does not have an interface name'; // Raised server side when a message passed to ProcessMessage does not have a valid InterfaceName - err_UnspecifiedMessage = 'The message does not have a name'; // Raised server side when a message passed to ProcessMessage does not have a valid MessageName - err_UnknownMethod = 'Unknown method %s for interface %s'; // Raised server side when a server interface does not have a method matching the message name - err_ClassFactoryDidNotReturnInstance = 'Class factory did not return an instance of "%s"'; // Raised server side when a class factory returns a NIL reference. It should never happen - err_ParameterNotFound = 'Parameter "%s" was not found'; - - // Misc - err_NotImplemented = 'Not implemented'; // Not implemented error. Should never be happen - err_TypeNotSupported = 'Type "%s" not supported'; // Raised by message classes when the typeinfo of the parameter being read/written is not supported - err_ClassFactoryNotFound = 'Class factory for interface %s not found'; - err_UnspecifiedTargetURL = 'Unspecified TargetURL'; - err_IROMessageNotSupported = 'Class "%s" does not support IROMessage'; - err_ClassAlreadyRegistered = 'Class "%s" is already registered'; - err_UnknownClass = 'Unknown class "%s"'; - err_UnknownProxyInterface = 'Unknown proxy interface "%s"'; - err_UnknownTransportChannelClass = 'Unknown transport channel class "%s"'; - err_UnknownMessageClass = 'Unknown message class "%s"'; - - err_DispatcherAlreadyAssigned = 'Dispatcher for %s already assigned'; - err_CannotFindMessageDispatcher = 'Cannot find message dispatcher. Maybe there is no message component configured for the requested path?'; - err_ServerOnlySupportsOneDispatcher = '%s servers only support one dispatcher'; - err_UnhandledException = 'Unhandled exception'; - - err_CannotReadRODLWithoutChannel = 'Cannot read RODL information without a channel'; - err_CannotReadRODLWithoutRemoteService = 'Cannot read RODL information without a remote service'; - - err_CannotAssignClass = 'Cannot Assign a "%s" to a "%s".'; - - err_ChannelBusy = 'Channel is busy. Try again later.'; - - err_DesignTimeProperty = '%s is a designtime-only property'; - - // SOAP - err_ExpectedParameterNotFound = 'Expected parameter "%s" was not found.'; // Raised by TROSOAPMessage when an expected parameter was not found - err_AmbigousResponse = 'Ambigous response. Expected one "%s" but %d were received'; // Raised by TROSOAPMessage when two parameters in a a SOAP Envelope have the same name - err_InvalidEnvelope = 'Invalid SOAP Envelope. %s'; // Invalid SOAP envelope. The message is completed with additional information - err_InvalidData = 'Cannot convert data for parameter "%s"'#13'Exception was "%s"'#13'Data was "%s".'; // Error converting the text of the parameter to a Delphi type - - inf_InvalidEnvelopeNode = 'SOAP Envelope node missing or not root.'; // The SOAP envelope does not match the SOAP specs by not providing an Envelope node - inf_AbsentBody = 'SOAP envelope does not contain a Body.'; // The SOAP envelope does not contain a body - inf_AbsentMessage = 'SOAP Body does not contain a message nor a fault'; // The body does not contain any sub node - - err_ArrayIndexOutOfBounds = 'Array index out of bounds (%d).'; - - // BIN - err_InvalidHeader = 'Invalid binary header. Either incompatible or not a binary message.'; - err_InvalidHeaderEncrypted = 'Invalid binary header. It seems that encryption is active on the other side of the communication, but not locally?'; - err_UnknownClassInStream = 'Unknown class "%s" found in stream.'; - err_UnexpectedClassInStream = 'Unexpected class found in stream; class "%s" does not descend from "%s".'; - err_InvalidDateTimeReadFromStream = 'Invalid DateTime read from Stream.'; - - // WinMessageChannel - err_CannotFindServer = 'Cannot find server "%s"'; - err_MessagePropertyMustBeSet = 'Message property must be assigned for the server to be active'; - err_WinMessageFailed = 'Communication with the WinMessage Server failed or timed out (Error Code %d)'; - - // WInINet channel - err_UnexpectedWinINetProblem = 'Unexpected error in WinInet HTTP Channel (%d)'; - err_CommunicationWithServerTimedOut = 'Communication with the server timed out (after %sms)'; - - // BPDX Channels - err_CannotConnectToServer = 'Cannot connect to server "%s"'; - err_ConnectionError = 'Connection error'; - - // Standard Class Factories - err_PoolSizeMustBe1orHigher = 'Pool Size must be 1 or higher'; - err_NoFreeObjectsInPool = 'There are no free objects in the pool for %s, all %d instances are in use. Please try again later.'; - - // Misc - msg_NoMultipleDispatchers = 'Multiple message dispatchers not supported'; - err_InvalidStorage = 'Invalid storage'; - err_ErrorConvertingFloat = 'Error converting float "%s" at byte %d'; - - err_SessionNotFound = 'Session %s could not be found'; - - err_ChannelDoesntSupportIROMetadataReader = 'Channel does not support IROMetadataReader'; - - // Sessions - err_TooManySessions = 'Too many sessions. Try again in %d minute(s)'; - - // XML - err_DOMElementIsNIL = 'DOMElement is NIL'; - err_IndexOutOfBounds = 'Index out of bounds'; - err_CannotLoadXMLDocument = 'Cannot load XML document.'#13'Reason: %s'#13'Line: %d'#13'Position: %d'; - err_ErrorCreatingMsXmlDoc = 'Error creating MSXML Document class'#13#13'%s: %s'; - err_NoXMLParsersAvailable = 'MSXML is not installed'; - - // Variant conversion - err_IDispatchMarshalingNotSupported = 'Marshaling of IDispatch (%d) type variants is not supported.'; - err_UnsupportedVariantType = 'Unsupported variant type "%d"'; - err_InvalidBinaryFormat = 'Invalid binary format for a variant'; - err_VariantIsNotArray = 'Variant must be Array, but is %d'; - err_InvalidVarArrayDimCount = 'Variant Array DimCount must be 1 but is %d'; - - // uRODL and similar collections (see uRODynamicRequest) - err_CannotFindParameter = 'Cannot find parameter %s'; - err_CannotFindService = 'Cannot find service %s'; - err_RODLResourceNotLoaded = 'RODL resource has not been loaded'; - - err_MayNotAddResult = 'Cannot add Result parameter to collection. Use AddResult instead'; - - // - err_OperationNameNeedsServiceName = 'Cannot set the OperationName without a ServiceName'; - err_ServiceNameIsNotSet = 'ServiceName is not set'; - - err_EventReceivedNotConnectedToMessage = 'The event receiver must be connected to a message component first'; - err_MessageNotAssigned = 'Message is NIL'; - - err_UnknownMessageType = 'Unknown message type "%s"'; - - err_MasterServerNeedsChannel = 'No Channel assigned to %s.'; - - err_StreamIsReadOnly = 'Stream is read-only.'; - - {$IFDEF DOTNET} - err_NotImplementedForDotNetYet = 'This function is not yet implemented for .NET yet.'; - {$ENDIF DOTNET} - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSCHelpers.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSCHelpers.pas deleted file mode 100644 index f4ef295..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSCHelpers.pas +++ /dev/null @@ -1,861 +0,0 @@ -unit uROSCHelpers; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface -uses - SysUtils, Classes, uROClasses, uROClient, uROClientIntf, - {$IFDEF RemObjects_INDY10}IdIOHandler, IdGlobal,{$ENDIF} - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - IdTCPConnection, uROServer {$IFDEF WIN32}, Windows {$ENDIF}, SyncObjs; - -type - EROTimeout = class(EROException); - TROAckState = (rNone, rAck, rNoAck); - IROPackageAck = interface - ['{89ABD257-42CB-4B4B-9BA6-3E5CED10605B}'] - function GetEvent: TROEvent; - function GetAckNo: Integer; - function GetNoAckError: Integer; - procedure SetNoAckError(I: Integer); - function GetAckState: TROAckState; - procedure SetAckState(I: TROAckState); - - property Event: TROEvent read GetEvent; - property AckNo: Integer read GetAckNo; - property NoAckError: Integer read GetNoAckError write SetNoAckError; - property AckState: TROAckState read GetAckState write SetAckState; - - procedure RemoveFromList; - end; - TROSuperChannelWorker = class - private - fMaxPackageSize: Integer; - fIsServer: Boolean; - fConnection: TIdTCPConnection; - fWriteLock, - fInternalWriteLock: TCriticalSection; - fClientID: TGUID; - fLastId: Integer; - fConnected: Boolean; - fLastData: TDateTime; - -// fAckWaitTimeout: Integer; - fOtherSideMaxPackageLen: Integer; - fWaitingAckList: TInterfaceList; - fRemoteSupportsOptions, fRemoteSkipAck, fSkipAck: Boolean; - fPingFrequency, - fPingTimeout: Integer; - procedure SetSkipAck(const Value: Boolean); - protected - property PingFrequency: Integer read fPingFrequency write fPingFrequency; - property PingTimeout: Integer read fPingTimeout write fPingTimeout; - property LastData: TDateTime read FLastData; - property IsServer: Boolean read fIsServer write fIsServer; - procedure Idle; virtual; - procedure Connected; virtual; - procedure SupportsOptions; - procedure ProcessOption(Data: TStream); - procedure Disconnected(var RestartLoop: Boolean); virtual; - procedure IncomingData(Id: Integer; aData: TStream); virtual; abstract; - function IntSendData(Id: Integer; aData: TStream): IROPackageAck; - procedure SetAckDetails(Id: Integer; Oke: Boolean; ErrorNo: Integer); virtual; - procedure SendOptions(aData: UTF8String); - public - constructor Create(aConnection: TIdTCPConnection); - destructor Destroy; override; - - property ClientID: TGuid read fClientID write fClientID; - property Connection: TIdTCPConnection read fConnection; - - // to be called from a thread; will stay checking until disconnected - procedure DoExecute; - - procedure Disconnect; - - // Thread safe method - procedure SendError(Id: Integer; Error: Byte); - procedure BeginWriteLock; - function SendPackage(aData: TStream; Id: Integer = 0): IROPackageAck; - procedure EndWriteLock; - class procedure WaitForAck(pkg: IROPackageAck; Timeout: Integer = 60000); - function GenerateId: Integer; - - // properties - property MaxPackageSize: Integer read fMaxPackageSize write fMaxPackageSize; - property IsConnected: Boolean read fConnected write fConnected; - property SkipAck: Boolean read fSkipAck write SetSkipAck; - end; - -const - ScCmdNoAck_MsgTooLarge = 0; - ScCmdNoAck_Timeout = 1; - scCmdNoAck_UnknownCommand = 2; - ScCmdNoAck_QueueFull = 3; - ScCmdNoAck_SupportsOptions = 255; - - -implementation -const - ScWelcome = 'ROSC10'; - - ScCmdHello = 0; - { - Client: - 'ROSC10' - [MyGuid] or [NullGuid] - MaxPackageLength: Int32; - Server: - 'ROSC10' - [YourGuid] or [NewGuid] - MaxPackageLength: Int32; - } - ScCmdPackage = 1; - { - Request or Event Id: Int32; (Event < 0; Request/Response > 0) - Length: Int32; - Data: [...] - } - ScCmdAck = 2; - { - Id: Integer; - } - ScCmdNoAck = 3; - { - Id: Integer; - Error: - 0 = Message too large - 1 = Timeout - } - - ScCmdPing = 4; - { Should be sent every 60 seconds by the client - RandomNumber: Integer; - } - ScCmdPong = 5; - { Reply to ping - OriginalRandomNumber: Integer; - } - ScCmdOptions = 6; - { - Length: Longint - Data: array of 0..Length -1 of byte - UTF8 encoded, seperated by #13 - } - - - -type - TROPackageAck = class(TInterfacedObject, IROPackageAck) - private - fEvent: TROEvent; - fAckNo, - FAckNoError: Integer; - FAckState: TROAckState; - FOwner: TROSuperChannelWorker; - public - function GetEvent: TROEvent; - function GetAckNo: Integer; - function GetNoAckError: Integer; - procedure SetNoAckError(I: Integer); - function GetAckState: TROAckState; - procedure SetAckState(I: TROAckState); - - constructor Create(aOwner: TROSuperChannelWorker; aId: Integer); - destructor Destroy; override; - - procedure RemoveFromList; - end; - -{ TROSuperChannelWorker } - -constructor TROSuperChannelWorker.Create(aConnection: TIdTCPConnection); -begin - inherited Create; - fPingFrequency := 60; - fPingTimeout := 90; - fConnection := aConnection; - fWriteLock := TCriticalSection.Create; - fInternalWriteLock := TCriticalSection.Create; - fMaxPackageSize := 1024 * 1024; // 1mb - fWaitingAckList:= TInterfaceList.Create; - -end; - -destructor TROSuperChannelWorker.Destroy; -var - i: Integer; -begin - fWaitingAckList.Lock; - try - for i := fWaitingAckList.Count -1 downto 0 do - IROPackageAck(fWaitingAckList[i]).RemoveFromList; - finally - fWaitingAckList.Unlock; - end; - fWaitingAckList.Free; - fInternalWriteLock.Free; - fWriteLock.Free; - inherited Destroy; -end; - -procedure TROSuperChannelWorker.Disconnect; -begin - {$IFDEF RemOBjects_INDY8} - fConnection.Binding.CloseSocket(); - {$ELSE} - {$IFDEF RemObjects_INDY10} - if assigned(fConnection.Socket) and (fConnection.Socket.Connected) then - fConnection.Socket.Close; - {$ELSE} - fConnection.DisconnectSocket; - {$ENDIF} - {$ENDIF} -end; - -{$IFDEF RemObjects_INDY10} -type - TIndy10IOHandlerHack = class(TIdIOHandler) - public - function ReadFromStack(ARaiseExceptionIfDisconnected: Boolean = True; - ATimeout: Integer = IdTimeoutDefault; - ARaiseExceptionOnTimeout: Boolean = True): Integer; - end; - -function TIndy10IOHandlerHack.ReadFromStack(ARaiseExceptionIfDisconnected: Boolean = True; - ATimeout: Integer = IdTimeoutDefault; - ARaiseExceptionOnTimeout: Boolean = True): Integer; -begin - Result := ReadFromSource(ARaiseExceptionIfDisconnected, ATimeout, ARaiseExceptionOnTimeout) -end; - -procedure Indy10ReadBuffer(aConnection: TIdTCPConnection; var Data; Len: Longint); -var - LBytes: TidBytes; -begin - aConnection.IOHandler.ReadBytes(LBytes, Len, False); - if Length(lBytes) <> len then raise exception.Create('Not enough data available'); - Move(lBytes[0], Data, Len); -end; -procedure Indy10WriteBuffer(aConnection: TIdTCPConnection; const Data; Len: Longint); -var - lBytes: TidBytes; -begin - SetLength(lBytes, Len); - move(Data, lBytes[0], Len); - aConnection.IOHandler.Write(lBytes); -end; - -{$IFDEF RemObjects_INDY10A} -procedure Indy10AReadStream(aConnection: TIdTcpConnection; aStream: TStream; len: Longint); -var - Buffer: array[0..2048-1] of byte; - cl: Integer; -begin - while len > 0 do - begin - if len > sizeof(Buffer) then cl := sizeof(Buffer) else cl := len; - Indy10ReadBuffer(aConnection, Buffer, cl); - aStream.Write(Buffer, cl); - len := len - cl; - end; -end; -{$ENDIF} -{$ENDIF} - -procedure TROSuperChannelWorker.Connected; -var - b: array[0..6] of byte; -begin - fConnected := True; - b[0] := ScCmdNoAck; - b[1] := 0; - b[2] := 0; - b[3] := 0; - b[4] := 0; - b[5] := ScCmdNoAck_SupportsOptions; - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, b, sizeof(b)); - {$ELSE} - fConnection.WriteBuffer(b, sizeof(b)); - {$ENDIF} -end; - - -procedure TROSuperChannelWorker.Disconnected(var RestartLoop: Boolean); -begin - fConnected := False; -end; - -procedure TROSuperChannelWorker.DoExecute; -var - fLastPackage: DateTime; - lServerExpectAck: Integer; - lTmpId, - lTmpLen: Integer; - cmd: Byte; - Bl: array[0..5] of Byte; - lData: TMemoryStream; - lRetry: Boolean; -begin - {$IFDEF RemObjects_INDY10} - fConnection.Socket.UseNagle := False; - {$ELSE} - lTmpId := 1; // Indy 8 and 9 have the UseNagle property too, but it doesn't do anything. - fConnection.{$IFDEF RemObjects_INDY9}Socket.{$ENDIF}Binding.SetSockOpt(6, 1, @lTmpId, 4); - {$ENDIF} - repeat - fRemoteSkipAck := false; - fRemoteSupportsOptions := false; - lServerExpectAck := 0; - try - if IsServer then - begin - - if fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadString(6) <> ScWelcome then - begin - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write('ROSC: Invalid connection string'); - fConnection.Disconnect; - exit; - end; - {$IFDEF RemObjects_INDY10} - Indy10ReadBuffer(fConnection, fClientID, Sizeof(fClientID)); - {$ELSE} - fConnection.ReadBuffer(fClientID, Sizeof(fClientID)); - {$ENDIF} - if IsEqualGUID(fClientID, EmptyGUID) then - fClientID := NewGuid; - fOtherSideMaxPackageLen := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(ScWelcome); - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, fClientID, sizeof(FClientID)); - {$ELSE} - fConnection.WriteBuffer(fClientID, sizeof(fClientID)); - {$ENDIF} - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.Write{$ELSE}WriteInteger{$ENDIF}(fMaxPackageSize, false); - end else begin - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(ScWelcome); - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, fClientID, sizeof(FClientID)); - {$ELSE} - fConnection.WriteBuffer(fClientID, sizeof(fClientID)); - {$ENDIF} - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.Write{$ELSE}WriteInteger{$ENDIF}(fMaxPackageSize, false); - - if fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadString(6) <> ScWelcome then - begin - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write('ROSC: Invalid connection string'); - fConnection.Disconnect; - exit; - end; - {$IFDEF RemObjects_INDY10} - Indy10ReadBuffer(fConnection, fClientID, Sizeof(fClientID)); - {$ELSE} - fConnection.ReadBuffer(fClientID, Sizeof(fClientID)); - {$ENDIF} - fOtherSideMaxPackageLen := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - end; - fLastPackage := Now; - Connected; - - while fConnection.Connected do - begin - if fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF} - {$IFDEF RemObjects_INDY8}CurrentReadBufferSize{$ELSE}InputBuffer.Size{$ENDIF} = 0 then // check for data - {$IFDEF RemObjects_INDY10}TIndy10IOHandlerHack(fConnection.IOHandler).ReadFromStack{$ELSE}fConnection.ReadFromStack{$ENDIF}(false, (fPingFrequency * 10 div 25) * 1000, {$IFDEF RemObjects_INDY8}true{$ELSE}false{$ENDIF}); - if fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF} - {$IFDEF RemObjects_INDY8}CurrentReadBufferSize{$ELSE}InputBuffer.Size{$ENDIF} > 0 then begin // we got data - fLastPackage := Now; - {$IFDEF RemObjects_INDY8} - fConnection.ReadBuffer(cmd, 1); - {$ELSE} - cmd := ord(fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadChar); - {$ENDIF} - case cmd of - ScCmdPong: - begin - if fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false) = lServerExpectAck then - begin - lServerExpectAck := 0; - end; - end; - ScCmdPing: - begin - Bl[0] := ScCmdPong; - lTmpId := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - Move(ltmpId, bl[1], 4); - fInternalWriteLock.Acquire; - try - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Bl, 5); - {$ELSE} - fConnection.WriteBuffer(Bl, 5); - {$ENDIF} - finally - fInternalWriteLock.Release; - end; - end; - ScCmdAck: - begin - lTmpId := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - SetAckDetails(lTmpId, true, 0); - end; - ScCmdNoAck: - begin - lTmpId := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - {$IFDEF RemObjects_INDY8} - fConnection.ReadBuffer(cmd, 1); - {$ELSE} - cmd := byte(fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadChar); - {$ENDIF} - if cmd = ScCmdNoAck_SupportsOptions then - SupportsOptions - else - SetAckDetails(lTmpId, false, cmd); - end; - ScCmdOptions: - begin - lTmpLen := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - if lTmpLen > fMaxPackageSize then - begin - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)+#0#0#0#0+chr(ScCmdNoAck_MsgTooLarge)); - finally - fInternalWriteLock.Release; - end; - fConnection.Disconnect; - exit; - end else begin - lData := TMemoryStream.Create; - try - {$IFDEF RemObjects_INDY10A} - Indy10AReadStream(fConnection, lData, lTmpLen); - {$ELSE} - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadStream(lData, lTmpLen, False); - {$ENDIF} - ProcessOption(lData); - finally - lData.Free; // only free when we failed to send the data to the queue - end; - fLastPackage := Now; // for packages that might take longer. - end; - end; - ScCmdPackage: - begin - fLastData := Now; - lTmpId := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - lTmpLen := fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}{$IFDEF FPC}ReadLongInt{$ELSE}ReadInteger{$ENDIF}(false); - if lTmpLen < 0 then - begin - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)+#0#0#0#0+chr(scCmdNoAck_UnknownCommand)); - finally - fInternalWriteLock.Release; - end; - fConnection.Disconnect; - exit; - end; - if lTmpLen > fMaxPackageSize then - begin - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)+#0#0#0#0+chr(ScCmdNoAck_MsgTooLarge)); - finally - fInternalWriteLock.Release; - end; - fConnection.Disconnect; - exit; - end else begin - lData := TMemoryStream.Create; - try - {$IFDEF RemObjects_INDY10A} - Indy10AReadStream(fConnection, lData, lTmpLen); - {$ELSE} - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}ReadStream(lData, lTmpLen, False); - {$ENDIF} - lData.Seek(0, soFromBeginning); - Self.IncomingData(lTmpId, lData); - except - lData.Free; // only free when we failed to send the data to the queue - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)); - {$IFDEF RemObjects_INDY10} - fConnection.IOHandler.Write(lTmpId, false); - {$ELSE} - fConnection.WriteInteger(lTmpId, false); - {$ENDIF} - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck_QueueFull)); - finally - fInternalWriteLock.Release; - end; - end; - if not fRemoteSkipAck then begin - fInternalWriteLock.Acquire; - try - bl[0] := ScCmdAck; - Move(lTmpId, bl[1], 4); - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Bl, 5); - {$ELSE} - fConnection.WriteBuffer(Bl, 5); - {$ENDIF} - finally - fInternalWriteLock.Release; - end; - end; - fLastPackage := Now; // for packages that might take longer. - end; - end; - end; - end else begin - Idle; - if IsServer then - begin - if ((Now - fLastPackage) > (PingTimeout * (1.0 / (24 * 60 * 60)))) and (fConnection.Connected) then - begin - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)+#0#0#0#0+chr(ScCmdNoAck_Timeout)); - fConnection.Disconnect; - finally - fInternalWriteLock.Release; - end; - exit; - end; - end else - begin - if (lServerExpectAck <> 0) and (fConnection.Connected) then - begin - if (Now - fLastPackage) > (PingTimeout * (1.0 / (24 * 60 * 60))) then - begin - fInternalWriteLock.Acquire; - try - fConnection.{$IFDEF RemObjects_INDY10}IOHandler.{$ENDIF}Write(Chr(ScCmdNoAck)+#0#0#0#0+chr(ScCmdNoAck_Timeout)); - fConnection.Disconnect; - finally - fInternalWriteLock.Release; - end; - exit; - end; - end else begin - if (Now - fLastPackage) > (PingFrequency * (1.0 / (24 * 60 * 60))) then begin - lServerExpectAck := GetTickCount; - if lServerExpectAck = 0 then lServerExpectAck := 1; - bl[0] := ScCmdPing; - Move(lServerExpectAck, bl[1], 4); - fInternalWriteLock.Acquire; - try - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Bl, 5); - {$ELSE} - fConnection.WriteBuffer(bl, 5); - {$ENDIF} - finally - fInternalWriteLock.Release; - end; - end; - end; - end; - end; - end; - except - end; - lRetry := false; - try - Disconnect; - except - end; - Disconnected(lRetry); - until not lRetry; -end; - -function TROSuperChannelWorker.GenerateId: Integer; -begin - fWriteLock.Acquire; - try - if IsServer then - begin - fLastId := fLastId - 1; - if fLastId > -1 then fLastId := -1; - end - else - begin - fLastId := fLastId + 1; - if fLastId < 1 then fLastId := 1; - end; - Result := fLastId; - finally - fWriteLock.Release; - end; -end; - -procedure TROSuperChannelWorker.Idle; -begin - -end; - -function TROSuperChannelWorker.IntSendData(Id: Integer; aData: TStream): IROPackageAck; -var - Buffer: array[0.. 2047] of byte; - Len: Integer; -begin - fLastData := Now; - Result := TROPackageAck.Create(Self, Id); - fWaitingAckList.Add(Result); - Buffer[0] := ScCmdPackage; - Move(Id, Buffer[1], 4); - Len := aData.Size; - Move(Len, Buffer[5], 4); - - aData.Seek(0, soFromBeginning); - - fInternalWriteLock.Acquire; - try - Len := aData.Read(Buffer[9], sizeof(Buffer) - 9); - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Buffer, Len + 9); - {$ELSE} - fConnection.WriteBuffer(Buffer, Len + 9); - {$ENDIF} - if Len > 0 then begin - repeat - Len := aData.Read(Buffer[0], Sizeof(Buffer)); - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Buffer, Len); - {$ELSE} - fConnection.WriteBuffer(Buffer[0], Len); - {$ENDIF} - until Len = 0; - end; - finally - fInternalWriteLock.Release; - end; -end; - -procedure TROSuperChannelWorker.ProcessOption(Data: TStream); -var - lCmd, lData: UTF8String; - lPos: Integer; -begin - SetLength(lData, Data.Size); - Data.Position := 0; - Data.Read(lData[1], Length(lData)); - lPos := Pos(#13, lData); - if lPos = 0 then begin - lCmd := lData; - lData := ''; - end else begin - lCmd := copy(lData, 1, lPos-1); - Delete(lData, 1, lPos); - end; - if lCmd = 'SKIPACK' then begin - fRemoteSkipAck := lData <> 'OFF'; - end; -end; - -procedure TROSuperChannelWorker.SendError(Id: Integer; Error: Byte); -var - Buffer: array[0..5] of Byte; -begin - buffer[0] := ScCmdNoAck; - Move(ID, Buffer[1], 4); - Buffer[5] := Error; - fInternalWriteLock.Acquire; - try - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Buffer, 6); - {$ELSE} - fConnection.WriteBuffer(Buffer, 6); - {$ENDIF} - finally - fInternalWriteLock.Release; - end; -end; - -procedure TROSuperChannelWorker.SendOptions(aData: UTF8String); -var - Buffer: array of byte; - Len: Integer; -begin - fWriteLock.Acquire; - try - fLastData := Now; - SetLength(Buffer, Length(aData)+5); - Buffer[0] := ScCmdOptions; - Len := Length(aData); - Move(Len, Buffer[1], 4); - Move(aData[1], Buffer[5], Length(aDAta)); - - fInternalWriteLock.Acquire; - try - {$IFDEF RemObjects_INDY10} - Indy10WriteBuffer(fConnection, Buffer[0], Length(Buffer)); - {$ELSE} - fConnection.WriteBuffer(Buffer[0], Length(Buffer)); - {$ENDIF} - finally - fInternalWriteLock.Release; - end; - - finally - fWriteLock.Release; - end; -end; - -function TROSuperChannelWorker.SendPackage(aData: TStream; Id: Integer = 0): IROPackageAck; -begin - fWriteLock.Acquire; - try - if Id = 0 then - begin - id := GenerateId; - end; - Result := IntSendData(Id, aData); - finally - fWriteLock.Release; - end; -end; - -procedure TROSuperChannelWorker.SetAckDetails(Id: Integer; Oke: Boolean; - ErrorNo: Integer); -var - i: Integer; - rp: IROPackageAck; -begin - fWaitingAckList.Lock; - try - for i := fWaitingAckList.Count -1 downto 0 do - begin - if IROPackageAck(fWaitingAckList[i]).AckNo = Id then - begin - rp := IROPackageAck(fWaitingAckList[i]); - rp.RemoveFromList; - - rp.NoAckError := ErrorNo; - if Oke then - rp.AckState := rAck - else - rp.AckState := rNoAck; - rp.Event.SetEvent; - exit; - end; - end; - finally - fWaitingAckList.Unlock; - end; -end; - -procedure TROSuperChannelWorker.SetSkipAck(const Value: Boolean); -begin - fSkipAck := Value; -end; - -procedure TROSuperChannelWorker.SupportsOptions; -begin - if fSkipAck then SendOptions('SKIPACK'#13'ON'); - fRemoteSupportsOptions := true; -end; - -class procedure TROSuperChannelWorker.WaitForAck(pkg: IROPackageAck; Timeout: Integer = 60000); -begin - try - if pkg.Event = nil then exit; // skipack - - if pkg.Event.WaitFor(Timeout) <> wrSignaled then - raise EROTimeout.Create('Timeout'); - if pkg.AckState <> rAck then - begin - case pkg.NoAckError of - ScCmdNoAck_MsgTooLarge: raise eROMessageTooLarge.Create('Message too large'); - else - raise EROException.Create('Unknown error'); - end; - end; - finally - pkg.RemoveFromList; - end; -end; - -procedure TROSuperChannelWorker.BeginWriteLock; -begin - fWriteLock.Acquire; -end; - -procedure TROSuperChannelWorker.EndWriteLock; -begin - fWriteLock.Release; -end; - -{ TROPackageAck } - -constructor TROPackageAck.Create(aOwner: TROSuperChannelWorker; aId: Integer); -begin - inherited Create; - if not (aOwner.fSkipAck and aOwner.fRemoteSupportsOptions) then - fEvent := TROEvent.Create(nil, true, false, ''); - fAckNo := aId; - FOwner := aOwner; -// if FOwner <> nil then FOwner.fWaitingAckList.Add(Self as IROPackageAck); -end; - -destructor TROPackageAck.Destroy; -begin - fEvent.Free; - inherited; -end; - -function TROPackageAck.GetAckNo: Integer; -begin - result := fAckNo; -end; - -function TROPackageAck.GetAckState: TROAckState; -begin - Result := FAckState; -end; - -function TROPackageAck.GetEvent: TROEvent; -begin - Result := fEvent; -end; - -function TROPackageAck.GetNoAckError: Integer; -begin - Result := FAckNoError; -end; - -procedure TROPackageAck.RemoveFromList; -begin - if FOwner <> nil then - begin - FOwner.fWaitingAckList.Remove(self as IROPackageAck); - FOwner := nil; - end; -end; - -procedure TROPackageAck.SetAckState(I: TROAckState); -begin - FAckState := I; -end; - -procedure TROPackageAck.SetNoAckError(I: Integer); -begin - FAckNoError := i; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSOAPMessage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSOAPMessage.pas deleted file mode 100644 index 55ceeb3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSOAPMessage.pas +++ /dev/null @@ -1,915 +0,0 @@ -unit uROSOAPMessage; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, Variants, uROClient, uROClientIntf, uROTypes, TypInfo, SysUtils, uROXMLIntf, - uROSerializer, uROXMLSerializer; - -type TAttribute = record - Name, Value : string; - end; - -const - EncodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/'; - EnvelopeStyle = 'http://schemas.xmlsoap.org/soap/envelope/'; - TempURI = 'http://tempuri.org/'; - - Namespace_Env = 'env'; - - id_FaultCode = 'faultcode'; - id_FaultString = 'faultstring'; - id_FaultActor = 'faultactor'; - id_FaultDetail = 'detail'; - - id_ClientID = 'ROClientID'; - - HeaderNameSpace = 'HNS'; - - EnvelopeAttributes : array[0..4] of TAttribute = ( - (Name: 'xmlns:SOAP-ENV'; Value: 'http://schemas.xmlsoap.org/soap/envelope/'), - (Name: 'xmlns:xsd'; Value: 'http://www.w3.org/2001/XMLSchema'), - (Name: 'xmlns:xsi'; Value: 'http://www.w3.org/2001/XMLSchema-instance'), - (Name: 'xmlns:HNS'; Value: TempURI), - (Name: 'xmlns:SOAP-ENC'; Value: EncodingStyle)); - -type - { Misc } - TROSOAPMessage = class; - - TSOAPFaultEvent = procedure(const aFaultNode : IXMLNode; - const aFaultCode, aFaultString, aFaultActor, aFaultDetail : string) of object; - - TROEnvelopeCompleteEvent = procedure(Sender : TROSOAPMessage) of object; - TROAttributeWriteEvent = procedure(Sender : TROSOAPMessage; var AttributeName : string; var AttributeValue : variant; var CanWrite : boolean) of object; - - { TROSOAPMessage } - - IROSOAPMessage = interface(IROMessage) - ['{30F638D3-FD52-44D2-80D5-6A877F2877CE}'] - function GetEnvNode : IXMLNode; - function GetBodyNode : IXMLNode; - function GetMessageNode: IXMLNode; - function GetFaultNode : IXMLNode; - function GetHeader : IXMLNode; - function GetLibraryName: string; - - property EnvelopeNode : IXMLNode read GetEnvNode; - property BodyNode: IXMLNode read GetBodyNode; - property MessageNode: IXMLNode read GetMessageNode; - property FaultNode : IXMLNode read GetFaultNode; - property HeaderNode : IXMLNode read GetHeader; - property LibraryName: string read GetLibraryName; - end; - - TROSoapMode = (sRPCEncoding, sRPCLiteral, sDocumentLiteral, sUnknown); - { TROSOAPMessage } - TROSOAPMessage = class(TROMessage, IROModuleInfo, IROSOAPMessage, IRONamedModuleInfo) - private - fXMLMessage : IXMLDocument; - - fEnvNode, - fBodyNode, - fHeaderNode, - fMessageNode, - fFaultNode : IXMLNode; - fCustomLocation: string; - - fOnSOAPFault: TSOAPFaultEvent; - fLibraryName: string; - fOnEnvelopeComplete: TROEnvelopeCompleteEvent; - - fSoapAction, - fFaultNameSpace : string; - fOnWriteEnvelopeAttribute: TROAttributeWriteEvent; - fInputNamespace, - fOverrideInputName, - fOverrideOutputName: string; - fServerTargetNamespace, fTargetNamespace: string; - fTargetLocationWasSet: Boolean; - fOnAfterParseEnvelope: TNotifyEvent; - - function ParseEnvelope : boolean; - function GetHeader: IXMLNode; - function GetSerializationOptions: TROXMLSerializationOptions; - procedure SetSerializationOptions(const Value: TROXMLSerializationOptions); - procedure SetLibraryName(const Value: string); - function GetBodyNode: IXMLNode; - function GetEnvNode: IXMLNode; - function GetFaultNode: IXMLNode; - function GetMessageNode: IXMLNode; - function GetLibraryName: string; - function GetSoapMode: TROSoapMode; - procedure SetSoapMode(const Value: TROSoapMode); - - protected - { Internals } - procedure InitObject; override; - function CreateSerializer : TROSerializer; override; - function ReadException : Exception; override; - procedure WriteException(aStream : TStream; anException : Exception); override; - - { IROMessage } - procedure Initialize(const aTransport : IROTransport; const anInterfaceName, aMessageName : string; aType: TMessageType); overload; override; - procedure Initialize(const aTransport : IROTransport; const aLibraryName, anInterfaceName, aMessageName : string; aType: TMessageType); overload; override; - - - procedure WriteToStream(aStream : TStream); override; - procedure ReadFromStream(aStream : TStream); override; - - { IROModuleInfo } - procedure GetModuleInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); override; - - function ModuleInfoName: string; - procedure InitializeExceptionMessage(const aTransport: IROTransport; - const aLibraryName: String; const anInterfaceName: String; - const aMessageName: String); override; - - procedure SetAttributes(aTransport: IROTransport; - const aNames: array of String; const aValues: array of String); override; - procedure UnsetAttributes(aTransport: IROTransport); override; - procedure InitializeRead(const aTransport: IROTransport); override; - public - destructor Destroy; override; - - property EnvelopeNode : IXMLNode read GetEnvNode; - property BodyNode: IXMLNode read GetBodyNode; - property MessageNode: IXMLNode read GetMessageNode; - property FaultNode : IXMLNode read GetFaultNode; - property HeaderNode : IXMLNode read GetHeader; - - procedure Assign(iSource:TPersistent); override; - property LibraryName : string read GetLibraryName write SetLibraryName; - function IsValidMessage(aData: PChar; aLength: Integer): boolean; override; - published - property CustomLocation : string read fCustomLocation write fCustomLocation; - property ServerTargetNamespace : string read fServerTargetNamespace write fServerTargetNamespace; - property SerializationOptions : TROXMLSerializationOptions read GetSerializationOptions write SetSerializationOptions; - property OnSOAPFault : TSOAPFaultEvent read fOnSOAPFault write fOnSOAPFault; - property OnEnvelopeComplete : TROEnvelopeCompleteEvent read fOnEnvelopeComplete write fOnEnvelopeComplete; - property OnWriteEnvelopeAttribute : TROAttributeWriteEvent read fOnWriteEnvelopeAttribute write fOnWriteEnvelopeAttribute; - property OnAfterParseEnvelope: TNotifyEvent read fOnAfterParseEnvelope write fOnAfterParseEnvelope; - property SoapMode: TROSoapMode read GetSoapMode write SetSoapMode stored false; - end; - - -implementation - -uses {$IFDEF DELPHI5}ComObj,{$ENDIF} // for StringToGuid and vice-versa - uRORes, uRODL, uRODLToXML, uRODLToWSDL, uROHTTPTools, uROClasses; - -{ TROSOAPMessage } -procedure TROSOAPMessage.InitObject; -begin - inherited; - fServerTargetNamespace := TempURI; - fXMLMessage := NewROXmlDocument; - fXMLMessage.New(tag_Envelope); -end; - -procedure TROSOAPMessage.Initialize(const aTransport : IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); -var i : integer; - lInterfaceName, - lMessageName: String; - attrname : string; - attrvalue : variant; - canwrite : boolean; -begin - inherited; - fHeaderNode := nil; - fXMLMessage.New(ns_Envelope+':'+tag_Envelope); - if fInputNamespace <> '' then - lInterfaceName := fInputNamespace - else - if fTargetNamespace <> '' then - lInterfaceName := fTargetNamespace - else begin - if xsoDocument in SerializationOptions then - lInterfaceName := LibraryName - else - lInterfaceName := anInterfaceName; - end; - - SetHTTPInfo(aTransport, DataFormatXml); - - fEnvNode := fXMLMessage.DocumentNode; - - for i := 0 to High(EnvelopeAttributes) do - with EnvelopeAttributes[i] do begin - attrname := Name; - attrvalue := Value; - canwrite := TRUE; - - if Name = 'xmlns:HNS' then attrvalue := ServerTargetNamespace; - - if Assigned(fOnWriteEnvelopeAttribute) - then fOnWriteEnvelopeAttribute(Self, attrname, attrvalue, canwrite); - - if canwrite - then fEnvNode.AddAttribute(attrname, attrvalue); - end; - - { Sets variables for easier access in the other methods } - fHeaderNode := fEnvNode.Add(ns_Envelope+':'+tag_Header); - - fBodyNode := fEnvNode.Add(ns_Envelope+':'+tag_Body); - fBodyNode.AddAttribute('SOAP-ENV:encodingStyle', EncodingStyle); - //fBodyNode.AddAttribute('xmlns:'+ns_Custom, 'urn:'+{TempURI}lInterfacename); - if (LibraryName = '') then LibraryName := 'DefaultLibrary'; - if Pos(':', LibraryName) = 0 then LibraryName := 'urn:'+LibraryName; - fBodyNode.AddAttribute('xmlns:'+ns_Custom, LibraryName{TempURI}); - - lMessageName := Unprefix(aMessageName); // when document & literal are true - if xsoDocument in SerializationOptions then begin - if (aType = mtRequest) then begin - if fOverrideInputName = '' then - lMessageName := anInterfaceName+'___'+lMessageName - else - lMessageName := fOverrideInputName; - end else if (aType = mtResponse) then begin - if fOverrideOutputName = '' then - lMessageName := anInterfaceName+'___'+lMessageName - else - lMessageName := fOverrideOutputName; - end; - end; - - if Pos(':', lInterfaceName) = 0 then lInterfaceName := 'urn:'+lInterfaceName; - - if not (xsoSendUntyped in SerializationOptions) then begin - if copy(lMessageName,1,4)='urn:' then Delete(lMessageName, 1,4); - fMessageNode := fBodyNode.Add('NS1:'+lMessageName); - - fMessageNode.AddAttribute('xmlns:NS1', {'urn:' + } lInterfaceName); - end - else begin - fMessageNode := fBodyNode.Add(lMessageName); - - fMessageNode.AddAttribute('xmlns', lInterfacename); - end; - - (Serializer as TROXMLSerializer).SetStorageRef(pointer(fMessageNode)); -end; - -procedure TROSOAPMessage.Initialize(const aTransport: IROTransport; - const aLibraryName, anInterfaceName, aMessageName: string; aType: TMessageType); -begin - LibraryName := aLibraryName; - Initialize(aTransport, anInterfaceName, aMessageName, aType); -end; - -function TROSOAPMessage.ReadException : Exception; -var faultcode, faultstring, faultactor, faultdetail : string; - node, detailnode : IXMLNode; - exnme : string; - tmp: Exception; - //isroexception : boolean; - exclass : ExceptionClass; -begin - result := NIL; - - if Assigned(fFaultNode) then begin - node := fFaultNode.GetNodeByName(id_FaultCode); - if not Assigned(node) then node := fFaultNode.GetNodeByName(fFaultNameSpace + ':' + id_FaultCode); - - if Assigned(node) - then faultcode := node.Value - else faultcode := ''; - - exnme := faultcode; - - node := fFaultNode.GetNodeByName(id_FaultString); - if not Assigned(node) then node := FindChildNode(fFaultNode, id_FaultString, -1, true); - if Assigned(node) then faultstring := node.Value else faultstring := ''; - - node := fFaultNode.GetNodeByName(id_FaultActor); - if not Assigned(node) then node := FindChildNode(fFaultNode, id_FaultActor, -1, true); - if Assigned(node) then faultactor := node.Value else faultactor := ''; - - detailnode := fFaultNode.GetNodeByName(id_FaultDetail); - if not Assigned(detailnode) then detailnode := FindChildNode(fFaultNode, id_FaultDetail, -1, true); - if Assigned(detailnode) then faultdetail := detailnode.Value else faultdetail := ''; - - if Assigned(fOnSOAPFault) - then fOnSOAPFault(fFaultNode, faultcode, faultstring, faultactor, faultdetail); - - result := CreateException(exnme, faultstring); - if Result <> nil then - exclass := ExceptionClass(result.ClassType) - else - exclass := nil; - - if (exclass <> nil) and (exclass.InheritsFrom(EROException) and (detailnode<>NIL) and (detailnode.ChildrenCount > 0)) then begin - tmp := result; - // It must have a detail in which the fields of the exception are serialized - with TROXMLSerializer.Create(pointer(detailnode)) do try - Read(name_Exception, result.ClassInfo, tmp); - finally - Free; - end; - end; - end; -end; - -procedure TROSOAPMessage.WriteException(aStream : TStream; anException : Exception); -var - i : integer; - fault, faultcode, faultstring, detail : IXMLNode; - attrname : string; - attrvalue : variant; - canwrite : boolean; -begin - inherited; - fHeaderNode := nil; - fXMLMessage.New(ns_Envelope+':'+tag_Envelope); - - fEnvNode := fXMLMessage.DocumentNode; - - for i := 0 to High(EnvelopeAttributes) do - with EnvelopeAttributes[i] do begin - attrname := Name; - attrvalue := Value; - canwrite := TRUE; - - if Assigned(fOnWriteEnvelopeAttribute) - then fOnWriteEnvelopeAttribute(Self, attrname, attrvalue, canwrite); - - if canwrite - then fEnvNode.AddAttribute(attrname, attrvalue); - end; - - { Sets variables for easier access in the other methods } - fHeaderNode := fEnvNode.Add(ns_Envelope+':'+tag_Header); - - fBodyNode := fEnvNode.Add(ns_Envelope+':'+tag_Body); - fBodyNode.AddAttribute('SOAP-ENV:encodingStyle', EncodingStyle); - //fBodyNode.AddAttribute('xmlns:'+ns_Custom, 'urn:'+{TempURI}lInterfacename); - if (LibraryName = '') then LibraryName := 'DefaultLibrary'; - if pos(':', LibraryName) = 0 then LibraryName := 'urn:'+LibraryName; - fBodyNode.AddAttribute('xmlns:'+ns_Custom, LibraryName{TempURI}); - - fault := fBodyNode.Add(ns_Envelope+':'+tag_Fault); - - faultcode := fault.Add(id_FaultCode); - faultcode.Value := UTF8Encode(anException.ClassName); - - faultstring := fault.Add(id_FaultString); - faultstring.Value := UTF8Encode(anException.Message); - - if (anException is EROException) then begin - detail := fault.Add(id_FaultDetail); - with TROXMLSerializer.Create(pointer(detail)) do try - SerializationOptions := []; // No reference nodes. Write at the right places - Write(name_Exception, anException.ClassInfo, anException); - finally - Free; - end; - end; - - WriteToStream(aStream); - inherited; -end; - -procedure TROSOAPMessage.ReadFromStream(aStream: TStream); -var - encryptedheader: array[0..5] of char; -begin - inherited; - - aStream.Position := 0; - - try - fXMLMessage.New; - - fXMLMessage.LoadFromStream(aStream); - - if not ParseEnvelope then ProcessException; // In case there's one - except - // If something went wrong we recreate it because fXMLMessage is expected to be instantiated. - if (fXMLMessage=NIL) - then begin - fXMLMessage := NewROXmlDocument; - fXMLMessage.New; - end; - - aStream.Position := 0; - aStream.Read(encryptedheader, 6); - if (encryptedheader[0] = 'r') and (encryptedheader[1] = 'o') and - (encryptedheader[2] = 'r') and (encryptedheader[3] = 'o') and - (encryptedheader[4] = 'c') and (encryptedheader[5] = 'k') then - RaiseInvalidStreamError(err_InvalidHeaderEncrypted, [], aStream); - - raise; - end; -end; - -function TROSOAPMessage.ParseEnvelope : boolean; -var localname, - namespace : string; - i, k : integer; - item, item2 : IXMLNode; - cidnode : IXMLNode; -begin - - fBodyNode := NIL; - fHeaderNode := NIL; - fMessageNode := NIL; - fFaultNode := NIL; - fEnvNode := fXMLMessage.DocumentNode; - - { Checks the document is non empty and that the main tag is a tag_Envelope (required by SOAP spec) } - SplitNodeName(fEnvNode, namespace, localname); - if (localname<>tag_Envelope) - then RaiseError(err_InvalidEnvelope, [inf_InvalidEnvelopeNode]); - - { Loads the nodes in the Body. - I am intentionally not picky in the position of BODY and HEADER tags. Specs say HEADER should be first if present and - BODY second. I just ignore this because requirement. It seems to be a totally useless detail. } - - //SetClientID(EmptyGUID); - - for i := 0 to (fEnvNode.ChildrenCount-1) do begin - item := fEnvNode.Children[i]; - - SplitNodeName(item, namespace, localname); - // Body - if (localname=tag_Body) then begin - fBodyNode := item; - - { Loads the FAULT or BODY. - Althought the spec say you might have multiple BODY blocks I only consider one for now. - I might change this in the future if an issue arises with this decision. - If there ar multiple FAULTs or multiple BODYs the last one is the considered one } - - for k := 0 to (fBodyNode.ChildrenCount-1) do begin - item2 := fBodyNode.Children[k]; - - SplitNodeName(item2, namespace, localname); - if (localname='#text') then Continue; - - if (localname=tag_Fault) then begin - fFaultNameSpace := namespace; - fFaultNode := item2; - fMessageNode := fFaultNode; - Break; - end - else begin - fMessageNode := item2; - Break; - end; - end; - end - - // Header - else if (localname=tag_Header) then begin - fHeaderNode := item; - - for k := 0 to (fHeaderNode.ChildrenCount-1) do begin - cidnode := fHeaderNode.Children[k]; - SplitNodeName(cidnode, namespace, localname); - - if (localname = 'ROClientIDHeader') then begin - cidnode := FindChildNode(cidnode, 'ID', -1, true); - if (cidnode <> nil) and (VarToStr(cidnode.Value) <> '') then - SetClientID(StringToGuid(cidnode.Value)); - end else - if (localname=id_ClientID) then begin - if (cidnode.Value<>'') - then SetClientID(StringToGUID(cidnode.Value)); - - Break; - end; - end; - //else SetClientID(EmptyGUID); - end; - end; - - if not Assigned(fBodyNode) then RaiseError(err_InvalidEnvelope, [inf_AbsentBody]); - if not Assigned(fMessageNode) then RaiseError(err_InvalidEnvelope, [inf_AbsentMessage]); - - // Determines the interface and message name - - result := not Assigned(fFaultNode); - if result then begin - //xmlns:NS1="ITestService" -// if (fMessageNode.AttributeCount>0) then begin -// localname := ''; -// -// for i := 0 to (fMessageNode.AttributeCount-1) do -// if (Pos('urn:', fMessageNode.Attributes[i].Value)=1) then begin -// localname := fMessageNode.Attributes[i].Value; -// Break; -// end; -// -// if (localname='') -// then localname := fMessageNode.Attributes[0].Value; -// -// libraryname := Copy(localname, pos(':', localname) + 1, pos('-', localname) - 1 - pos(':', localname)); -// Delete(localname, 1, Pos('-', localname)); // urn:SOAPLibrary-SOAPService -// -// interfacename := localname; -// end; - MessageName := ''; - LibraryName := ''; - InterfaceName := ''; - - if fSoapAction <> '' then begin - localname := fSoapAction; - if localname[1] = '"' then deletE(Localname, 1,1); - if (localname <> '') and (localname[Length(LocalName)] = '"') then deletE(Localname, Length(LocalName),1); - if pos(':', localname) <> 0 then delete(localname, 1, pos(':', localname)); - if (pos('-', localname) > 0) and (pos('#', localname) > 0) then begin - LibraryName := copy(LocalName, 1, pos('-', LocalName) -1); - Delete(localname, 1, pos('-', localname)); - InterfaceName := copy(LocalName, 1, pos('#', LocalName) -1); - Delete(localname, 1, pos('#', localname)); - MessageName := localname; - end; - end else - if (xsoDocument in SerializationOptions) and (pos('___', fMessageNode.LocalName) > 0) then begin - localname := fMessageNode.LocalName; - - InterfaceName := copy(localname, 1, pos('___', localname)-1); - MessageName := copy(localname, pos('___', localname)+3, MaxInt); - LibraryName := fMessageNode.NamespaceURI; - end; - - - if (MessageName = '') or (InterfaceName = '') or (LibraryName = '') then begin - localname := ''; - - if copy(fMessageNode.NamespaceURI, 1, 4) = 'urn:' then - localname := Copy(fMessageNode.NamespaceURI, 5, Maxint) - else if copy(fBodyNode.NamespaceURI, 1, 4) = 'urn:' then - localname := Copy(fBodyNode.NamespaceURI, 5, Maxint) - else if copy(fEnvNode.NamespaceURI, 1, 4) = 'urn:' then - localname := Copy(fEnvNode.NamespaceURI, 5, Maxint) - else if copy(fMessageNode.NamespaceURI, 1, 4) = 'urn:' then - localname := Copy(fMessageNode.NamespaceURI, 5, Maxint); - - - if (localname='') and (fMessageNode.AttributeCount > 0) - then localname := fMessageNode.Attributes[0].Value; - - libraryname := Copy(localname, pos(':', localname) + 1, pos('-', localname) - 1 - pos(':', localname)); - - InterfaceName := localname; - if (Pos('-', localname)>0) then begin - Delete(localname, 1, Pos('-', localname)); // urn:SOAPLibrary-SOAPService - InterfaceName := localname; - end - else begin - if localname <> '' then - InterfaceName := localname - else - if (fMessageNode.AttributeCount>0) // Tries to extract it from the node that contains the method name - then InterfaceName := fMessageNode.Attributes[0].Value; - end; - - SplitNodeName(fMessageNode, namespace, localname); - if (xsoDocument in SerializationOptions) and (Copy(localname, 1, Length(InterfaceName)+1) = InterfaceName+'_') then begin - Delete(localname, 1, Length(InterfaceName) + 1); - if copy(localname, Length(LocalName)-1, 2) = 'In' then - Delete(localname, Length(LocalName) -1, 2); - if copy(localname, Length(LocalName)-2, 3) = 'Out' then - Delete(localname, Length(LocalName) -2, 3); - end; - MessageName := localname; - end; - - (Serializer as TROXMLSerializer).SetStorageRef(pointer(fMessageNode)); - - if assigned(fOnAfterParseEnvelope) then fOnAfterParseEnvelope(self); - end; -end; - -procedure TROSOAPMessage.WriteToStream(aStream: TStream); -begin - if xsoDocument in SerializationOptions then begin - with HeaderNode.Add('ROClientIDHeader') do begin - AddAttribute('SOAP-ENV:mustUnderstand', 0); - if (pos(':', LibraryName) <> 0) then - AddAttribute('xmlns', LibraryName) - else - AddAttribute('xmlns', 'urn:' + LibraryName); - Add('ID').Value := GUIDToString(GetClientID); - end; - end else begin - with HeaderNode.Add(HeaderNameSpace+':'+id_ClientID) do begin - AddAttribute('SOAP-ENV:mustUnderstand', 0); - Value := GUIDToString(GetClientID); - end; - end; - - if Assigned(fOnEnvelopeComplete) - then fOnEnvelopeComplete(Self); - - fXMLMessage.SaveToStream(aStream); - - inherited; -end; - -procedure TROSOAPMessage.GetModuleInfo(aStream : TStream; const aTransport : IROTransport; var aFormat : TDataFormat); -var lib : TRODLLIbrary; - wsdl : TRODLToWSDL; - http : IROHTTPTransport; - i : Integer; - httpparams : TStringList; - s, targetservice : string; -begin - lib := NIL; - targetservice := ''; - - inherited GetModuleInfo(aStream, aTransport, aFormat); // Sets ContentType for HTTP transports already - - aFormat := DataFormatXml; - - try - with TXMLToRODL.Create do try - lib := Read(aStream); - finally - Free; - end; - - httpparams := TStringList.Create; - wsdl := TRODLToWSDL.Create(NIL); - try - if Supports(aTransport, IROHTTPTransport, http) then begin - httpparams.Text := http.QueryString - end; - - if (Trim(CustomLocation)='') then begin - if (http<>NIL) - then wsdl.Location := http.Location+http.PathInfo; - end - else wsdl.Location := CustomLocation; - wsdl.ExternalTypesAsReferences := xsoExternalTypesAsReferences in SerializationOptions; - wsdl.UseDocument := xsoDocument in SerializationOptions; - wsdl.UseLiteral := xsoSendUntyped in SerializationOptions; - wsdl.ShowClientId := xsoClientIdInWsdl in SerializationOptions; - wsdl.TargetNamespace := ServerTargetNamespace; - - targetservice := httpparams.Values['Service']; - - if (lib.ServiceCount > 1) and (TargetService = '') and (xsoSplitServiceWsdls in SerializationOptions) then begin - aFormat := 'text/html'; - aStream.Position := 0; - aStream.Size := 0; - s := ''#13#10''#13#10''+lib.Name+''#13#10''#13#10''#13#10'

'; - s := s + lib.Name +'

'#13#10'

The following services are supported:

'; - aStream.Write(s[1], length(s)); - exit; - end; - http := NIL; // Clean up. Don't remove! - - wsdl.Convert(lib, targetservice); - aStream.Position := 0; - aStream.Size := 0; - wsdl.Buffer.SaveToStream(aStream); - finally - wsdl.Free; - httpparams.Free; - end; - finally - if Assigned(lib) then - lib.Free; - end; -end; - -function TROSOAPMessage.GetHeader: IXMLNode; -begin - // Services like the Amazon one just don't accept empty headers (or don't know how to handle them). - // Because of this I just create it on demand. - - if (fHeaderNode=NIL) then begin - {fHeaderNode := fXMLMessage.createElement(tag_Header); - fEnvNode.insertBefore(fHeaderNode, fBodyNode);} - fHeaderNode := fEnvNode.Add(tag_Header); - end; - - result := fHeaderNode; -end; - -function TROSOAPMessage.CreateSerializer : TROSerializer; -begin - result := TROXMLSerializer.Create(pointer(fMessageNode)); -end; - -function TROSOAPMessage.GetSerializationOptions: TROXMLSerializationOptions; -begin - result := TROXMLSerializer(Serializer).SerializationOptions -end; - -procedure TROSOAPMessage.SetSerializationOptions( - const Value: TROXMLSerializationOptions); -begin - TROXMLSerializer(Serializer).SerializationOptions := Value -end; - -procedure TROSOAPMessage.Assign(iSource: TPersistent); -var lSource:TROSOAPMessage; -begin - inherited; - if Assigned(iSource) then begin - - if not (iSource is TROSOAPMessage) then RaiseError('Cannot Assign a %s t a %s',[ClassName,iSource.ClassName]); - - lSource := (iSource as TROSOAPMessage); - self.CustomLocation := lSource.CustomLocation; - self.SerializationOptions := lSource.SerializationOptions; - self.OnSOAPFault := lSource.OnSOAPFault; - self.OnEnvelopeComplete := lSource.OnEnvelopeComplete; - self.OnWriteEnvelopeAttribute := lSource.OnWriteEnvelopeAttribute; - Self.OnAfterParseEnvelope := lSource.OnAfterParseEnvelope; - self.ServerTargetNamespace := lSource.ServerTargetNamespace; - end; -end; - -procedure TROSOAPMessage.SetLibraryName(const Value: string); -begin - fLibraryName := Value; -end; - -function TROSOAPMessage.GetBodyNode: IXMLNode; -begin - result := fBodyNode -end; - -function TROSOAPMessage.GetEnvNode: IXMLNode; -begin - result := fEnvNode -end; - -function TROSOAPMessage.GetFaultNode: IXMLNode; -begin - result := fFaultNode -end; - -function TROSOAPMessage.GetMessageNode: IXMLNode; -begin - result := fMessageNode -end; - -function TROSOAPMessage.GetLibraryName: string; -begin - result := fLibraryName -end; - -destructor TROSOAPMessage.Destroy; -begin - inherited; -end; - -function TROSOAPMessage.ModuleInfoName: string; -begin - Result := 'wsdl'; -end; - -procedure TROSOAPMessage.InitializeExceptionMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: String); -begin - inherited; - SetHTTPInfo(aTransport, DataFormatXml); -end; - - -function TROSOAPMessage.IsValidMessage(aData: PChar; - aLength: Integer): boolean; -var - str: string; -begin - SetString(str, aData, aLength); - Result := Pos(ns_Envelope+':'+tag_Envelope, str) > 0; -end; - - -function TROSOAPMessage.GetSoapMode: TROSoapMode; -begin - if xsoDocument in SerializationOptions then begin - if (xsoSendUntyped in SerializationOptions) and ([xsoWriteMultiRefArray, xsoWriteMultiRefObject, xsoEncodedXML] * SerializationOptions = []) then - result := sDocumentLiteral - else - result := sUnknown; - end else begin - if xsoSendUntyped in SerializationOptions then - result := sRPCLiteral - else - result := sRPCEncoding; - end; -end; - -procedure TROSOAPMessage.SetSoapMode(const Value: TROSoapMode); -begin - case Value of - sRPCEncoding: - begin - SerializationOptions := SerializationOptions - [xsoSendUntyped, xsoDocument]; - SerializationOptions := SerializationOptions + [xsoWriteMultiRefArray, xsoWriteMultiRefObject, xsoEncodedXML]; - end; - sRPCLiteral: - begin - SerializationOptions := SerializationOptions + [xsoSendUntyped]; - SerializationOptions := SerializationOptions - [xsoWriteMultiRefArray, xsoWriteMultiRefObject, xsoEncodedXML, xsoDocument]; - end; - sDocumentLiteral: - begin - SerializationOptions := SerializationOptions + [xsoSendUntyped, xsoDocument]; - SerializationOptions := SerializationOptions - [xsoWriteMultiRefArray, xsoWriteMultiRefObject, xsoEncodedXML]; - end; - end; -end; - -procedure TROSOAPMessage.SetAttributes(aTransport: IROTransport; - const aNames, aValues: array of String); -var - lStyle, - lUse, - lAction, - lTargetUrl: string; - aHttp: IROHTTPTransport; - - i: Integer; -begin - fTargetLocationWasSet := False; - for i := 0 to Length(aNames) -1 do begin - if aNames[i] = 'InputNamespace' then - fInputNamespace := aValues[i] - else if aNames[i] = 'Action' then - lAction := aValues[i] - else if aNames[i] = 'Location' then - lTargetUrl := aValues[i] - else if aNames[i] = 'Style' then - lStyle := aValues[i] - else if aNames[i] = 'Use' then - lUse := aValues[i] - else if aNames[i] = 'SOAPInputNameOverride' then - fOverrideInputName := aValues[i] - else if aNames[i] = 'SOAPOutputNameOverride' then - fOverrideOutputName := aValues[i] - else if aNames[i] = 'TargetNamespace' then - fTargetNamespace := aValues[i]; - end; - if (lUse = 'literal') then begin - if lStyle = 'document' then - SetSoapMode(sDocumentLiteral) - else if lStyle <> '' then - SetSoapMode(sRPCLiteral); - end else if lUse <> '' then begin - SetSoapMode(sRPCEncoding); - end; - if Supports(aTransport, IROHTTPTransport, aHttp) then begin - fTargetLocationWasSet := aHttp.TargetURL = ''; - aHttp.Headers['SOAPAction'] := '"'+lAction+'"'; - if fTargetLocationWasSet then - aHttp.TargetURL := lTargetUrl; - end; -end; - -procedure TROSOAPMessage.UnsetAttributes(aTransport: IROTransport); -var - aHttp: IROHTTPTransport; -begin - fTargetNamespace := ''; - fOverrideInputName := ''; - fOverrideOutputName := ''; - if fTargetLocationWasSet and Supports(aTransport, IROHTTPTransport, aHttp) then begin - aHttp.TargetURL := ''; - end; -end; - -procedure TROSOAPMessage.InitializeRead(const aTransport: IROTransport); -var - lHttp: IROHTTPTransport; -begin - if Supports(aTransport, IROHTTPTransport, lHttp) then begin - fSoapAction := lHttp.Headers['SOAPAction']; - lHttp := nil; - end - else - fSoapAction := ''; -end; - - -initialization - RegisterMessageClass(TROSOAPMessage); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSerializer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSerializer.pas deleted file mode 100644 index 1a0b4a7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSerializer.pas +++ /dev/null @@ -1,726 +0,0 @@ -unit uROSerializer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -{$IFDEF DOTNET} -{$MESSAGE error 'This unit will not be used in .NET, use RemObjects.SDK.Serializer instead' } -{$ENDIF} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, TypInfo, uROTypes; - -const RO_ArrayItemName = 'item'; - StreamClsName = 'Binary'; - -type TROSerializer = class; - - IROCustomStreamableType = interface - ['{BD8FB0B8-3F7E-4E6E-A9B1-80C3FF39878D}'] - procedure Write(aSerializer: TROSerializer; const aName: string); - procedure Read(aSerializer: TROSerializer; const aName: string); - end; - - IROCustomStreamableClass = interface(IROCustomStreamableType) - ['{10D1288B-D679-42E8-B4C0-5CA772647582}'] - function GetTypeName: string; - procedure SetTypeName(const aValue:string); - property TypeName:string read GetTypeName write SetTypeName; - - function CanImplementType(const aName: string):boolean; - - procedure SetNull(aIsNull: boolean); - function IsNull: boolean; - end; - - IROCustomStreamableEnum = interface - ['{5CE37B53-839A-48C4-89D7-8A0FDAFC2C4A}'] - procedure SetValue(aValue: byte); - function GetValue: byte; - property Value: byte read GetValue write SetValue; - - procedure Write(aSerializer: TROSerializer; const aName: string); - procedure Read(aSerializer: TROSerializer; const aName: string); - end; - - IROCustomStreamableStruct = interface(IROCustomStreamableClass) - ['{0DAA29FE-2E54-477C-AA4B-996FBFE1F9A6}'] - end; - - IROCustomStreamableArray = interface(IROCustomStreamableClass) - ['{8B043EB4-F628-4581-884D-C636D9DDED0E}'] - function GetCount: integer; - procedure SetCount(aElementCount: integer); - property Count: integer read GetCount write SetCount; - - end; - - IROObjectStreamExtender = interface - ['{2A73D437-FDFC-4765-BA9A-07FD5F61D991}'] - procedure Write(aSerializer: TROSerializer); - procedure Read(aSerializer: TROSerializer); - end; - - TROSerializer = class - private - procedure ReadObject(obj: TObject); - procedure WriteObject(obj: TObject); - protected - function GetRecordStrictOrder: Boolean; virtual; - function IsROCustomStreamable(aClass : TClass):Boolean; - procedure BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; - var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); virtual; - procedure EndWriteObject(const aName: string; aClass : TClass; anObject: TObject; const LevelRef : IUnknown); virtual; - procedure CustomWriteObject(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); virtual; - procedure CustomReadObject(const aName: string; aClass: TClass;var Ref; ArrayElementId: integer);virtual; - procedure BeginReadObject(const aName : string; aClass : TClass; var anObject : TObject; var LevelRef : IUnknown; - var IsValidType : boolean; ArrayElementId : integer = -1); virtual; - procedure EndReadObject(const aName : string; aClass : TClass; var anObject : TObject; const LevelRef : IUnknown); virtual; - procedure ReadROCustomStreamable(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1); - procedure WriteROCustomStreamable(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); - { Internal } - public - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteXml(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteGuid(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteDecimal(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1);virtual; abstract; - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1);virtual; abstract; - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1);virtual; abstract; - procedure WriteException(const aName : string; const Ref; ArrayElementId : integer = -1); virtual; abstract; - { Readers } - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); virtual; abstract; - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); virtual; abstract; - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadXml(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadGuid(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadDecimal(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1);virtual; abstract; - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; virtual; abstract; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; virtual; abstract; - procedure ReadException(const aName : string; var Ref; ArrayElementId : integer = -1); virtual; abstract; - public - constructor Create();//aStorageRef: pointer); virtual; - destructor Destroy; override; - - procedure Write(const aName : string; aTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); - procedure Read(const aName : string; aTypeInfo : PTypeInfo; var Ptr; ArrayElementId : integer = -1); {$IFDEF DEBUG_REMOBJECTS}virtual;{$ENDIF} - function GetArrayElementName(anItemType : PTypeInfo; anItemReference: pointer): string; virtual; - property RecordStrictOrder: Boolean read GetRecordStrictOrder; - end; - - TROSerializerClass = class of TROSerializer; - -procedure ReadObjectFromSerializer(const ASerializer: TROSerializer; anObject : TObject); -procedure WriteObjectToSerializer(const ASerializer: TROSerializer; anObject: TObject); -implementation - -uses - Variants, RTLConsts, - uRORes, SysUtils, uROClasses, uROBinaryHelpers, uROClient, - uROXMLIntf; - -function RO_GetIntfProp(Instance: TObject; const PropName: string): IInterface; -{$IFDEF FPC} -var - lPropInfo: PPropInfo; -{$ENDIF} -begin - {$IFDEF FPC} - lPropInfo := GetPropInfo(Instance, PropName); - if lPropInfo = nil then begin - Result:=nil; - exit; - end; - Result := IInterface(Pointer(GetOrdProp(Instance, lPropInfo))); - {$ELSE} - Result := GetInterfaceProp(Instance, PropName); - {$ENDIF} -end; - - -procedure RO_SetIntfProp(Instance: TObject; const PropName: string; const Value: IInterface); -{$IFDEF FPC} -var - lPropInfo: PPropInfo; -{$ENDIF} -begin - {$IFDEF FPC} - lPropInfo := GetPropInfo(Instance, PropName); - if lPropInfo = nil then Exit; - if Value <> nil then Value._AddRef; - SetOrdProp(Instance, lPropInfo, PtrInt(Value)); - {$ELSE} - SetInterfaceProp(Instance, PropName, Value); - {$ENDIF} -end; - - -{ TROSerializer } - -procedure TROSerializer.BeginReadObject(const aName: string; - aClass : TClass; var anObject: TObject; var LevelRef : IUnknown; var IsValidType : boolean; ArrayElementId : integer = -1); -begin - //IsValidType := Assigned(anObject) or (anObject is TROComplexType); - IsValidType := aClass.InheritsFrom(TROComplexType) or aClass.InheritsFrom(EROException) -end; - -procedure TROSerializer.BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); -begin - //IsValidType := Assigned(anObject) or (anObject is TROComplexType); - IsValidType := aClass.InheritsFrom(TROComplexType) or aClass.InheritsFrom(EROException) -end; - -constructor TROSerializer.Create;//(aStorageRef: pointer); -begin - inherited Create; - - {if (pointer(aStorageRef)<>NIL) and not SetStorageRef(aStorageRef) - then RaiseError(err_InvalidStorage, []);} -end; - -procedure TROSerializer.CustomReadObject(const aName: string; aClass : TClass; var Ref; - ArrayElementId: integer); -var obj : TObject absolute Ref; - i, cnt : integer; - itemref : pointer; - lCustomObject: IROCustomStreamableType; - -begin - if Assigned(Obj) then begin - - { handle reading of arrays. any other custom types (like Streams) must - be handled by the base classes. } - - if Obj.GetInterface(IROCustomStreamableType, lCustomObject) then begin - lCustomObject.Read(Self, aName); - end - else if (obj is TROArray) then with TROArray(obj) do begin - cnt := TROArray(obj).Count; - if (GetItemClass<>NIL) then begin - for i := 0 to (cnt-1) do begin - itemref := NIL; - Read(RO_ArrayItemName, GetItemType, itemref, i); - SetItemRef(i, itemref); - end; - end - else begin - for i := 0 to (cnt-1) do begin - itemref := GetItemRef(i); - Read(RO_ArrayItemName, GetItemType, itemref^, i); - end; - end; - end - - end; -end; - -procedure TROSerializer.CustomWriteObject(const aName: string; aClass : TClass; const Ref; ArrayElementId : integer = -1); -var obj : TObject absolute Ref; - i : integer; - itemref : pointer; - lCustomObject: IROCustomStreamableType; -begin - if Assigned(obj) then begin - - { handle reading of arrays. any other custom types (like Streams) must - be handled by the base classes. } - if Obj.GetInterface(IROCustomStreamableType, lCustomObject) then begin - lCustomObject.Write(Self, aName); - end - else if (obj is TROArray) then with TROArray(obj) do begin - if (GetItemClass<>NIL) then begin - for i := 0 to (Count-1) do begin - itemref := GetItemRef(i); - Write(GetArrayElementName(GetItemType, itemref), GetItemType, itemref, i); - //Write(TObject(itemref).ClassName, GetItemType, itemref, i); - end; - end - else begin - for i := 0 to (Count-1) do begin - itemref := GetItemRef(i); - Write(GetArrayElementName(GetItemType, itemref), GetItemType, itemref^, i); - //Write(RO_ArrayItemName, GetItemType, itemref^, i); - end; - end; - end; - - end; -end; - -destructor TROSerializer.Destroy; -begin - inherited; -end; - -procedure TROSerializer.EndReadObject(const aName: string; - aClass : TClass; var anObject: TObject; const LevelRef : IUnknown); -begin -end; - -procedure TROSerializer.EndWriteObject(const aName: string; - aClass : TClass; anObject: TObject; const LevelRef : IUnknown); -begin -end; - -procedure TROSerializer.ReadROCustomStreamable(const aName: string; aClass : TClass; var Ref; ArrayElementId : integer = -1); -var obj : TObject absolute Ref; - LevelRef : IUnknown; - validtype : boolean; -begin - //obj := nil; { no matter what's passed in, we wanna start fresh } - - BeginReadObject(aName, aClass, obj, levelref, validtype, ArrayElementId); - - //if not Assigned(obj) then Exit; { we got outselves a nil object } // RaiseError(err_ObjectExpectedInStream, []); - if Assigned(obj) and (not validtype) then - raise EROUnknownType.CreateFmt(err_TypeNotSupported, [obj.ClassName]); - - if Assigned(obj) then ReadObject(obj); - - CustomReadObject(aName, aClass, obj, ArrayElementId); - - EndReadObject(aName, aClass, obj, levelref); -end; - -procedure TROSerializer.Write(const aName: string; aTypeInfo: PTypeInfo; - const Ref; ArrayElementId : integer = -1); -begin - case aTypeInfo^.Kind of - {$IFDEF FPC}tkBool,{$ENDIF} - tkEnumeration : WriteEnumerated(aName, aTypeInfo, Ref, ArrayElementId); - tkInteger : WriteInteger(aName, GetTypeData(aTypeInfo)^.OrdType, Ref, ArrayElementId); - - tkFloat : if (aTypeInfo=TypeInfo(TDateTime)) - then WriteDateTime(aName, Ref, ArrayElementId) - else WriteDouble(aName, GetTypeData(aTypeInfo)^.FloatType, Ref, ArrayElementId); - - tkWString : WriteWideString(aName, Ref, ArrayElementId); - tkLString, - {$IFDEF FPC}tkAString,{$ENDIF} - tkString : if (aTypeInfo=TypeInfo(TGuidString)) then - WriteGuid(aName, Ref, ArrayElementId) - else - WriteUTF8String(aName, Ref, ArrayElementId); - tkInt64 : WriteInt64(aName, Ref, ArrayElementId); - - tkClass : if GetTypeData(aTypeInfo).ClassType.InheritsFrom(TROArray) then - WriteArray(aName, Ref, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(TROComplexType) then - WriteStruct(aName, Ref, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(Binary) then - WriteBinary(aName, Ref, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(Exception) then - WriteException(aName, Ref, ArrayElementId) - else - raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - - tkVariant : if aTypeInfo = TypeInfo(TDecimalVariant) then - WriteDecimal(aName, Ref, ArrayElementId) - else - WriteVariant(aName, Ref, ArrayElementId); - tkInterface : - begin - if aTypeInfo = TypeInfo(IXmlNode) then begin - WriteXml(aName, Ref, ArrayElementId); - end else raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - end; - - else raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - end; -end; - -procedure TROSerializer.Read(const aName: string; aTypeInfo: PTypeInfo; - var Ptr; ArrayElementId : integer = -1); -begin - case aTypeInfo^.Kind of - {$IFDEF FPC}tkBool,{$ENDIF} - tkEnumeration : ReadEnumerated(aName, aTypeInfo, byte(Ptr), ArrayElementId); - tkInteger : ReadInteger(aName, GetTypeData(aTypeInfo)^.OrdType, Ptr, ArrayElementId); - tkInt64 : ReadInt64(aName, Ptr, ArrayElementId); - - tkFloat : if (aTypeInfo=TypeInfo(TDateTime)) - then ReadDateTime(aName, Ptr, ArrayElementId) - else ReadDouble(aName, GetTypeData(aTypeInfo)^.FloatType, Ptr, ArrayElementId); - - tkWString : ReadWideString(aName, Ptr, ArrayElementId); - tkLString, - {$IFDEF FPC}tkAString,{$ENDIF} - tkString : - if aTypeInfo = TypeInfo(TGuidString) then - ReadGuid(aName, Ptr, ArrayElementId) - else - ReadUTF8String(aName, Ptr, ArrayElementId); - - tkClass : if isROCustomStreamable(GetTypeData(aTypeInfo).ClassType) then - ReadROCustomStreamable(aName, GetTypeData(aTypeInfo).ClassType, Ptr, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(TROArray) then - ReadArray(aName, GetTypeData(aTypeInfo).ClassType, Ptr, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(TROComplexType) then - ReadStruct(aName, GetTypeData(aTypeInfo).ClassType, Ptr, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(Binary) then - ReadBinary(aName, Ptr, ArrayElementId) - else if GetTypeData(aTypeInfo).ClassType.InheritsFrom(Exception) then - ReadException(aName, Ptr, ArrayElementId) - else - raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - - tkVariant : if aTypeInfo = TypeInfo(TDecimalVariant) then - ReadDecimal(aName, Ptr, ArrayElementId) - else - ReadVariant(aName, Ptr, ArrayElementId); - - tkInterface : - begin - if aTypeInfo = TypeInfo(IXmlNode) then begin - ReadXml(aName, Ptr, ArrayElementId); - end else raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - end; - else RaiseError(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(aTypeInfo^.Kind))]); - end; -end; - -procedure TROSerializer.WriteROCustomStreamable(const aName: string; aClass : TClass; const Ref; ArrayElementId : integer = -1); -var obj : TObject absolute Ref; - validtype, IsAssigned : boolean; - LevelRef : IUnknown; -begin - BeginWriteObject(aName, aClass, obj, levelref, validtype, IsAssigned, ArrayElementId); - //if (not IsAssigned) or (not Assigned(obj)) then Exit; // no more streaming to do for a nil object. - - if Assigned(obj) and (not validtype) then RaiseError(err_TypeNotSupported, [obj.ClassName]); - if Assigned(obj) then WriteObject(obj); - CustomWriteObject(aName, aClass, obj); - - EndWriteObject(aName, aClass, obj, levelref); -end; - -function TROSerializer.GetArrayElementName(anItemType: PTypeInfo; anItemReference: pointer): string; -begin - result := RO_ArrayItemName; -end; - -function TROSerializer.GetRecordStrictOrder: Boolean; -begin - Result := False; -end; - -function TROSerializer.IsROCustomStreamable(aClass : TClass): Boolean; -begin - Result:=Supports(aClass, IROCustomStreamableType); -end; - -procedure ReadObjectFromSerializer(const ASerializer: TROSerializer; anObject : TObject); -begin - ASerializer.ReadObject(anObject); -end; - -procedure WriteObjectToSerializer(const ASerializer: TROSerializer; anObject: TObject); -begin - ASerializer.WriteObject(anObject); -end; - -procedure TROSerializer.ReadObject(obj: TObject); -var - props : PPropList; - cnt, i : integer; - propInf: PPropInfo; - - // Temporary variables - node : IXMLNode; - int64val : int64; - intval : integer; - enuval : byte; - dblval : double; - currval : Currency; - extval : Extended; - singleval : Single; - compval : Comp; - varval : variant; - datetimeval : TDateTime; - //extval : extended; - strval : string; - {$IFNDEF DELPHI5}wstrval : widestring;{$ENDIF} - objval : TObject; - lObjectStreamExtender:IROObjectStreamExtender; -begin - if Assigned(obj) and (obj.ClassInfo <> nil) then begin - cnt := GetTypeData(obj.ClassInfo).PropCount; - - if (cnt>0) then begin - GetMem(props, cnt*SizeOf(PPropInfo)); - try - cnt := GetPropList(PTypeInfo(obj.ClassInfo), tkProperties, props, not GetRecordStrictOrder); - - for i := 0 to (cnt-1) do begin - with props^[i]^ do begin - - case PropType^.Kind of - {$IFDEF FPC}tkBool,{$ENDIF} - tkEnumeration : begin - ReadEnumerated(Name, PropType{$IFNDEF FPC}^{$ENDIF}, enuval); - SetOrdProp(obj, Name, enuval); - end; - - tkInteger : begin - ReadInteger(Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF}).OrdType, intval); - SetOrdProp(obj, Name, intval); - end; - - tkFloat : begin - if (PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TDateTime)) then begin - ReadDateTime(props^[i]^.Name, datetimeval);//, ArrayElementId); - SetPropValue(obj, Name, datetimeval); - end - else case GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType of - ftSingle : begin - ReadDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, singleval); - SetFloatProp(obj, Name, singleval); - end; - ftDouble : begin - ReadDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, dblval); - SetFloatProp(obj, Name, dblval); - end; - ftExtended : begin - ReadDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, extval); - SetFloatProp(obj, Name, extval); - end; - ftComp : begin - ReadDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, compval); - SetFloatProp(obj, Name, compval); - end; - ftCurr : begin - ReadDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, currval); - SetFloatProp(obj, Name, currval); - end; - end; - end; - - tkLString, - {$IFDEF FPC}tkAString,{$ENDIF} - tkString : begin - if PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TGuidString) then - ReadGuid(Name, strval) - else - ReadUTF8String(Name, strval); - SetStrProp(obj, Name, strval); - end; - - tkInt64 : begin - ReadInt64(Name, int64val); - SetInt64Prop(obj, Name, int64val); - end; - - tkWString : begin - {$IFDEF DELPHI5} - //RaiseError(err_TypeNotSupported, ['tkWString']); - ReadUTF8String(Name, strval); - SetStrProp(obj, Name, strval); - {$ELSE} - ReadWideString(Name, wstrval); - propInf := GetPropInfo(obj, Name); - if propInf = nil then - raise EPropertyError.CreateResFmt(@SUnknownProperty, [Name]); - SetWideStrProp(obj, propInf, wstrval); - {$ENDIF} - end; - - tkVariant : begin - if (PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TDecimalVariant)) then - ReadDecimal(Name, varval) - else - ReadVariant(Name, varval); - SetVariantProp(obj, Name, varval); - end; - - tkClass : begin - objval := nil; - Read(Name, PropType{$IFNDEF FPC}^{$ENDIF}, objval); - SetObjectProp(obj, Name, objval); - end; - - tkInterface: begin - if PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(IXmlNode) then begin - ReadXml(Name, node); - RO_SetIntfProp(obj, Name, node); - end else raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(props^[i].PropType^.Kind))]) - end; - else raise EROUnknownType.CreateFmt(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(props^[i].PropType^.Kind))]) - end; { case } - end; { with } - end; { for } - finally - FreeMem(props, cnt*SizeOf(PPropInfo)); - end; - end; { if Count > 0 } - if Obj.GetInterface(IROObjectStreamExtender, lObjectStreamExtender) then begin - lObjectStreamExtender.Read(Self); - end - end; { if Assigned } -end; - -procedure TROSerializer.WriteObject(obj: TObject); -var - props : PPropList; - cnt, i : integer; - - // Temporary variables - int64val : int64; - intval : integer; - enuval : byte; - dblval : double; - currval : Currency; - extval : Extended; - singleval : Single; - datetimeval : TDateTime; - compval : Comp; - strval : string; - varval : Variant; - {$IFNDEF DELPHI5}wstrval : widestring;{$ENDIF} - objval : TObject; - pdata : PTypeData; - lObjectStreamExtender:IROObjectStreamExtender; - node: IXMLNode; -begin - if (obj<>NIL) and (obj.ClassInfo<>NIL) then begin - pdata := GetTypeData(obj.ClassInfo); - if (pdata<>NIL) then begin - cnt := pdata .PropCount; - if (cnt>0) then begin - GetMem(props, cnt*SizeOf(PPropInfo)); - try - cnt := GetPropList(PTypeInfo(obj.ClassInfo), tkProperties, props, not GetRecordStrictOrder); - - for i := 0 to (cnt-1) do begin - with props^[i]^ do - - case PropType^.Kind of - {$IFDEF FPC}tkBool,{$ENDIF} - tkEnumeration : begin - enuval := GetOrdProp(obj, Name); - WriteEnumerated(props^[i]^.Name, PropType{$IFNDEF FPC}^{$ENDIF}, enuval); - end; - - tkInteger : begin - intval := GetOrdProp(obj, Name); - WriteInteger(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.OrdType, intval); - end; - - tkFloat : begin - if (PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TDateTime)) then begin - datetimeval := GetPropValue(obj, Name); - WriteDateTime(props^[i]^.Name, datetimeval); - end - else case GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType of - ftSingle : begin - singleval := GetFloatProp(obj, Name); - WriteDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, singleval); - end; - ftDouble : begin - dblval := GetFloatProp(obj, Name); - WriteDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, dblval); - end; - ftExtended : begin - extval := GetFloatProp(obj, Name); - WriteDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, extval); - end; - ftComp : begin - compval := GetFloatProp(obj, Name); - WriteDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, compval); - end; - ftCurr : begin - currval := GetFloatProp(obj, Name); - WriteDouble(props^[i]^.Name, GetTypeData(PropType{$IFNDEF FPC}^{$ENDIF})^.FloatType, currval); - end; - end; - end; - - tkLString, - {$IFDEF FPC}tkAString,{$ENDIF} - tkString : begin - strval := GetStrProp(obj, Name); - if (PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TGuidString)) then - WriteGuid(name, strval) - else - WriteUTF8String(Name, strval); - end; - - tkInt64 : begin - int64val := GetInt64Prop(obj, Name); - WriteInt64(Name, int64val); - end; - - tkWString : begin - {$IFDEF DELPHI5} - //RaiseError(err_TypeNotSupported, ['tkWString']); - strval := GetStrProp(obj, Name); - WriteUTF8String(Name, strval); - {$ELSE} - wstrval := GetWideStrProp(obj, Name); - WriteWideString(Name, wstrval); - {$ENDIF} - end; - - tkVariant : begin - varval := GetVariantProp(obj, Name); - if (PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(TDecimalVariant)) then - WriteDecimal(Name, varval) - else - WriteVariant(Name, varval); - end; - - tkClass : begin - objval := GetObjectProp(obj, Name); - Write(Name, PropType{$IFNDEF FPC}^{$ENDIF}, objval); - end; - tkInterface : begin - if PropType{$IFNDEF FPC}^{$ENDIF}=TypeInfo(IXmlNode) then begin - // if props^[i] = TypeInfo(IXmlNode) then begin - node := RO_GetIntfProp(obj, name) as IXMLNode; - WriteXml(Name, node); - end else RaiseError(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(props^[i].PropType^.Kind))]) - end; - - else RaiseError(err_TypeNotSupported, [GetEnumName(TypeInfo(TTypeKind), Ord(props^[i].PropType^.Kind))]) - end; - end; - finally - FreeMem(props, cnt*SizeOf(PPropInfo)); - end; - end; - end; - if Obj.GetInterface(IROObjectStreamExtender, lObjectStreamExtender) then begin - lObjectStreamExtender.Write(Self); - end - end; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServer.pas deleted file mode 100644 index d06e125..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServer.pas +++ /dev/null @@ -1,1219 +0,0 @@ -unit uROServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes, SysUtils, SyncObjs, - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - {$IFDEF REMOBJECTS_UseEncryption}uROEncryption, {$ENDIF} - uRORes, uROServerIntf, uROClient, uROClientIntf, uROClasses, uROTypes, - uROEventRepository; - -type - TROServer = class; - - { TMessageInvokeMethod } - TMessageInvokeMethod = procedure(const anInstance: IInterface; - const aMessage: IROMessage; - const aTransport: IROTransport; - out oResponseOptions:TROResponseOptions) of object; - - { TRORemotable } - TRORemotable = class(TInterfacedObject, IROObjectRetainer) - private - fRetainedObjects : TList; - - protected - {$IFDEF DELPHI7UP} - procedure Synchronize(aMethod: TThreadMethod); - {$ENDIF DELPHI7UP} - - { IROObjectRetainer } - procedure RetainObject(const anObject : TObject); - procedure ReleaseObject(const anObject : TObject); - function IsRetained(const anObject : TObject) : boolean; - - public - constructor Create; virtual; - destructor Destroy; override; - end; - - TRORemotableClass = class of TRORemotable; - - { TROInvoker } - {$M+} - TROInvoker = class(TInterfacedObject, IROInvoker) - private - - protected - function CustomHandleMessage(const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - out oResponseOptions: TROResponseOptions): boolean; virtual; - - procedure BeforeInvoke(aMethodPtr: TMessageInvokeMethod; - const anInstance: IInterface; - const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport); virtual; - - procedure AfterInvoke(aMethodPtr: TMessageInvokeMethod; - const anInstance: IInterface; - const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - anException: Exception); virtual; - - public - constructor Create; virtual; - destructor Destroy; override; - - function HandleMessage(const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - out oResponseOptions: TROResponseOptions): boolean; - - published - { IROServerEventsBroker invocation - Ghost methods } - procedure Invoke_RegisterEventClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UnregisterEventClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_RegisterClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_UnregisterClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - procedure Invoke_GetEventsData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); - end; - {$M-} - - TROInvokerClass = class of TROInvoker; - - { TROClassFactory } - TRORemotableCreatorFunc = procedure(out anInstance: IInterface); - - { TROMessageDispatcher } - TROMessageDispatchers = class; - TROMessageDispatcher = class(TCollectionItem) - private - fDispatchers: TROMessageDispatchers; - fMessage: TROMessage; - fEnabled: boolean; - fDummyName: string; - - fMessageIntf: pointer; - fModuleInfoIntf: pointer; - - function GetMessageIntf: IROMessage; - function GetModuleInfoIntf: IROModuleInfo; - function GetServer: TROServer; - - protected - procedure SetMessage(const Value: TROMessage); virtual; - function GetDisplayName: string; override; - - property Server:TROServer read GetServer; - - public - constructor Create(aCollection: TCollection); override; - destructor Destroy; override; - - procedure Assign(Source: TPersistent); override; - - function ProcessMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean; - function CanHandleMessage(const aTransport: IROTransport; aRequeststream: TStream): boolean; virtual; - - property MessageIntf: IROMessage read GetMessageIntf; - property ModuleIntf: IROModuleInfo read GetModuleInfoIntf; - published - property Name: string read GetDisplayName write fDummyName; - property Message: TROMessage read fMessage write SetMessage; - property Enabled: boolean read fEnabled write fEnabled; - end; - - TROMessageDispatcherClass = class of TROMessageDispatcher; - - { TROMessageDispatchers } - - TROMessageDispatchers = class(TCollection) - private - fServer: TROServer; - - function GetDispatcher(Index: integer): TROMessageDispatcher; - - protected - function GetSupportsMultipleDispatchers: boolean; virtual; - function GetDispatcherClass: TROMessageDispatcherClass; virtual; - {$IFDEF DELPHI6UP} - procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); override; - {$ENDIF DELPHI6UP} - property Server:TROServer read fServer; - - public - constructor Create(aServer: TROServer); virtual; - destructor Destroy; override; - - procedure CleanReferences(aMessage: TROMessage); - function FindDuplicate(aMessage: TROMessage): TROMessageDispatcher; - function FindDispatcher(const aTransport: IROTransport; aRequestStream: TStream): TROMessageDispatcher; - - function DispatcherByName(const aName: string): TROMessageDispatcher; - - property Dispatchers[Index: integer]: TROMessageDispatcher read GetDispatcher; default; - property SupportsMultipleDispatchers: boolean read GetSupportsMultipleDispatchers; - end; - - TROMessageDispatchersClass = class of TROMessageDispatchers; - - { TROServer } - TROGetRODLReader = procedure (Sender: TROServer; var aRODLReader: TROCustomRODLReader) of object; - - {$IFDEF REMOBJECTS_UseEncryption} - TROServer = class(TROBaseConnection) - {$ELSE} - TROServer = class(TROComponent) - {$ENDIF} - private - fDoneAfterLoad, - fLoadActive: boolean; - - fOnAfterServerDeactivate: TNotifyEvent; - fOnAfterServerActivate: TNotifyEvent; - fOnBeforeServerDeactivate: TNotifyEvent; - fOnBeforeServerActivate: TNotifyEvent; - fDispatchers: TROMessageDispatchers; - fOnReadFromStream: TStreamOperation; - fOnWriteToStream: TStreamOperation; - FOnGetRODLReader: TROGetRODLReader; - //fAsyncResponseStorage: TROAsyncResponseStorage; - - function GetActive: boolean; - procedure SetActive(const Value: boolean); - procedure SetDispatchers(const Value: TROMessageDispatchers); - //procedure SetAsyncResponseStorage(const Value:TROAsyncResponseStorage); - - private - procedure TriggerReadFromStream(iStream: TStream); - procedure TriggerWriteToStream(iStream: TStream); - - protected - { Internals } - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - - procedure IntSetActive(const Value: boolean); virtual; abstract; - function IntGetActive: boolean; virtual; abstract; - - procedure Loaded; override; - - function GetDispatchersClass: TROMessageDispatchersClass; virtual; - - function DispatchMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream): boolean; overload; - function DispatchMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean; overload; - - function IntDispatchMessage(Dispatcher: TROMessageDispatcher; const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean; - property OnGetRODLReader: TROGetRODLReader read FOnGetRODLReader write FOnGetRODLReader; - function GetRODLReader: TROCustomRODLReader; - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - procedure CheckProperties; virtual; - published - property Active: boolean read GetActive write SetActive default false; - //property AsyncResponseStorage:TROAsyncResponseStorage read fAsyncResponseStorage write SetAsyncResponseStorage; - - property Dispatchers: TROMessageDispatchers read fDispatchers write SetDispatchers; - - property OnBeforeServerActivate: TNotifyEvent read fOnBeforeServerActivate write fOnBeforeServerActivate; - property OnAfterServerActivate: TNotifyEvent read fOnAfterServerActivate write fOnAfterServerActivate; - property OnBeforeServerDeactivate: TNotifyEvent read fOnBeforeServerDeactivate write fOnBeforeServerDeactivate; - property OnAfterServerDeactivate: TNotifyEvent read fOnAfterServerDeactivate write fOnAfterServerDeactivate; - property OnWriteToStream: TStreamOperation read fOnWriteToStream write fOnWriteToStream; - property OnReadFromStream: TStreamOperation read fOnReadFromStream write fOnReadFromStream; - end; - - TROServerClass = class of TROServer; - - TROClassFactory = class(TInterfacedObject, IROClassFactory) - private - fCreatorFunc: TRORemotableCreatorFunc; - fInterfaceName: string; - fInvoker: IROInvoker; - fInvokerClass: TROInvokerClass; - - protected - { IROClassFactory } - procedure CreateInstance(const aClientID: TGUID; out anInstance: IInterface); virtual; - procedure ReleaseInstance(const aClientID: TGUID; var anInstance: IInterface); virtual; - - {procedure ActivateInstance(const aClientID:TGUID; const anInstance:IInterface); - procedure DeactivateInstance(const aClientID:TGUID; const anInstance:IInterface);} - - function GetInterfaceName: string; - function GetInvoker: IROInvoker; - - property CreatorFunc: TRORemotableCreatorFunc read fCreatorFunc; - - public - constructor Create(const anInterfaceName: string; - aCreatorFunc: TRORemotableCreatorFunc; - anInvokerClass: TROInvokerClass); - destructor Destroy; override; - end; - - EROSendNoResponse = class(EROException); - -procedure ROSendNoResponse; - -function MainProcessMessage( - const aMessage: IROMessage; - const aTransport: IROTransport; - aRequestStream, - aResponseStream: TStream; - out oResponseOptions: TROResponseOptions): boolean; - -procedure RegisterClassFactory(const aClassFactory: IROClassFactory); -procedure UnRegisterClassFactory(const aClassFactory: IROClassFactory); -function GetClassFactory(const anInterfaceName: string): IROClassFactory; -function FindClassFactory(const anInterfaceName: string): IROClassFactory; {$IFDEF VER140UP} deprecated; {$ENDIF} // Please use GetClassFactory. mh. -function TryFindClassFactory(const anInterfaceName: string): IROClassFactory; -function IsClassFactoryRegistered(const anInterfaceName: string):boolean; -function GetClassFactoryNames:IROStrings; - -procedure RegisterServerClass(aROMessageClass: TROServerClass); -procedure UnregisterServerClass(aROMessageClass: TROServerClass); -function GetServerClass(Index: integer): TROServerClass; -function GetServerClassCount: integer; - -implementation - -uses - Contnrs; - -procedure ROSendNoResponse; -begin - { - NOTE - - This exception is expected to be raised if you use the ROSendNoResponse - function in your asynchronous/broadcast channels. YOu can safely ignore - when the Delphi IDE breaks on this line, and you can add it to the ist - of "Silent" exceptions under Tools|Debugger Options|Language Exceptions. - } - raise EROSendNoResponse.Create(''); -end; - -var - _ServerClasses: TClassList; - -procedure RegisterServerClass(aROMessageClass: TROServerClass); -begin - _ServerClasses.Add(aROMessageClass); -end; - -procedure UnregisterServerClass(aROMessageClass: TROServerClass); -begin - _ServerClasses.Remove(aROMessageClass); -end; - -function GetServerClass(Index: integer): TROServerClass; -begin - result := TROServerClass(_ServerClasses[Index]); -end; - -function GetServerClassCount: integer; -begin - result := _ServerClasses.Count -end; - -type - TROClassFactoryList = class(TInterfaceList) - private - function GetItems(Index: integer): IROClassFactory; - protected - public - function Add(aClassFactory: IROClassFactory): integer; - function GetClassFactoryByInterfaceName(const anInterfaceName: string): IROClassFactory; - function FindClassFactoryByInterfaceName(const anInterfaceName: string): IROClassFactory; - function GetNames:IROStrings; - property Items[Index: integer]: IROClassFactory read GetItems; default; - end; - -var - _ClassFactoryList: TROClassFactoryList; - -function ClassFactoryList: TROClassFactoryList; -begin - if (_ClassFactoryList = nil) then _ClassFactoryList := TROClassFactoryList.Create; - result := _ClassFactoryList; -end; - -function MainProcessMessage(const aMessage: IROMessage; const aTransport: IROTransport; aRequestStream, aResponseStream: TStream; out oResponseOptions: TROResponseOptions): boolean; -var - factory: IROClassFactory; - moduleinfo: IROModuleInfo; - dataformat: TDataFormat; - http: IROHTTPTransport; -begin - oResponseOptions := []; -// result := FALSE; // reenabled because of a compiler warning - - try - if (aMessage = nil) then RaiseError(err_NILMessage, []); - - case aRequestStream.Size of - // Metadata retrieval - MetadataRequestIDLength : begin - oResponseOptions := oResponseOptions + [roDontEncrypt]; - DataFormat := 'text/xml'; - if Supports(aMessage, IROModuleInfo, moduleinfo) then - moduleinfo.GetRodlInfo(aResponseStream, aTransport, dataformat) - else - RaiseError(err_InvalidRequestStream, [aRequestStream.Size]); - if supports(aTransport, IROHttpTransport, http) then - http.ContentType := dataformat; - - result := TRUE; - end; - 0 : begin - oResponseOptions := oResponseOptions + [roDontEncrypt]; - DataFormat := 'text/xml'; - if Supports(aMessage, IROModuleInfo, moduleinfo) then - moduleinfo.GetModuleInfo(aResponseStream, aTransport, dataformat) - else - RaiseError(err_InvalidRequestStream, [aRequestStream.Size]); - if supports(aTransport, IROHttpTransport, http) then - http.ContentType := dataformat; - result := TRUE; - end; - - // Probing - ProbeRequestIDLength : begin - aResponseStream.Write(ProbeResponseID, ProbeResponseIDLength); - Result := TRUE; - end; - - // Messages - else begin - aMessage.InitializeRead(aTransport); - aMessage.ReadFromStream(aRequestStream); - - case aMessage.MessageType of - mtPoll: begin - if IsEqualGUID(aMessage.ClientID, EmptyGUID) then - raise EROServerException.Create('Poll messages may not be sent with empty Client ID.'); - - raise EROServerException.Create('.NET-style polling is not implemented in RO/Delphi, yet.'); - end; - - mtRequest, mtResponse: begin - if (aMessage.InterfaceName = '') then - RaiseError(err_UnspecifiedInterface, []) - else if (aMessage.MessageName = '') then - RaiseError(err_UnspecifiedMessage, []) - else if IsEqualGUID(aMessage.ClientID, EmptyGUID) then - aMessage.ClientID := NewGuid(); - - if IsEqualGUID(aMessage.ClientID, EmptyGUID) then - aMessage.ClientID := NewGuid(); - - factory := GetClassFactory(aMessage.InterfaceName); - result := factory.Invoker.HandleMessage(factory, aMessage, aTransport, oResponseOptions); - - aMessage.WriteToStream(aResponseStream); - end; - - else begin - raise EROServerException.CreateFmt('Unsupported messages type %d.', [integer(aMessage.MessageType)]); - end; - - end; - - end; - end; - except - on E: EROSendNoResponse do begin - result := FALSE; - oResponseOptions := oResponseOptions + [roNoResponse]; - aMessage.InitializeExceptionMessage(aTransport, '', aMessage.InterfaceName, aMessage.MessageName); - aMessage.WriteException(aResponseStream, E); - end; - on E: Exception do begin - result := FALSE; - aMessage.InitializeExceptionMessage(aTransport, '', aMessage.InterfaceName, aMessage.MessageName); - aMessage.WriteException(aResponseStream, E); - end; - end; -end; - -function GetClassFactory(const anInterfaceName: string): IROClassFactory; -begin - result := ClassFactoryList.GetClassFactoryByInterfaceName(anInterfaceName); -end; - -function FindClassFactory(const anInterfaceName: string): IROClassFactory; -begin - result := ClassFactoryList.GetClassFactoryByInterfaceName(anInterfaceName); -end; - -function TryFindClassFactory(const anInterfaceName: string): IROClassFactory; -begin - result := ClassFactoryList.FindClassFactoryByInterfaceName(anInterfaceName); -end; - -function IsClassFactoryRegistered(const anInterfaceName: string):boolean; -begin - result := assigned(_ClassFactoryList) and assigned(ClassFactoryList.FindClassFactoryByInterfaceName(anInterfaceName)); -end; - -function GetClassFactoryNames:IROStrings; -begin - result := ClassFactoryList.GetNames(); -end; - -procedure RegisterClassFactory(const aClassFactory: IROClassFactory); -begin - ClassFactoryList.Add(aClassFactory); -end; - -procedure UnRegisterClassFactory(const aClassFactory: IROClassFactory); -begin - if assigned(_ClassFactoryList) then - _ClassFactoryList.Remove(aClassFactory); -end; - -{ TROClassFactoryList } - -function TROClassFactoryList.Add(aClassFactory: IROClassFactory): integer; -begin - { ToDo: make sure no other class factopry is registered yet, that serves - the same class name - http://www.remobjects.com/bugdb?bug=E14CD985-B996-45A3-B480-7C22F09093F5 } - - result := inherited Add(aClassFactory); -end; - -function TROClassFactoryList.GetClassFactoryByInterfaceName(const anInterfaceName: string): IROClassFactory; -begin - result := FindClassFactoryByInterfaceName(anInterfaceName); - if not Assigned(result) then RaiseError(err_ClassFactoryNotFound, [anInterfaceName]); -end; - -function TROClassFactoryList.FindClassFactoryByInterfaceName(const anInterfaceName: string): IROClassFactory; -var - i:integer; -begin - result := nil; - for i := 0 to (Count - 1) do - if (CompareText(anInterfaceName, Items[i].GetInterfaceName) = 0) then begin - result := Items[i]; - Break; - end; -end; - -function TROClassFactoryList.GetItems(Index: integer): IROClassFactory; -begin - result := inherited Items[Index] as IROClassFactory -end; - -function TROClassFactoryList.GetNames: IROStrings; -var - i:integer; -begin - result := NewROStrings(); - for i := 0 to Count-1 do begin - Result.Add(Items[i].InterfaceName) - end; -end; - -{ TROInvoker } - -constructor TROInvoker.Create; -begin - inherited Create; -end; - -procedure TROInvoker.BeforeInvoke(aMethodPtr: TMessageInvokeMethod; - const anInstance: IInterface; - const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport); -var - dispnotifier: IRODispatchNotifier; - objactivation: IROObjectActivation; - streamaccess : IROStreamAccess; - currpos : integer; -begin - streamaccess := NIL; - currpos := -1; // introduced for a compiler warning... - - if Supports(aMessage, IROStreamAccess, streamaccess) - then currpos := streamaccess.Stream.Position; - - // This can be enanched by descendants - if Supports(anInstance, IROObjectActivation, objactivation) then begin - objactivation.OnActivate(aMessage.ClientID, aMessage); - if (streamaccess<>NIL) - then streamaccess.Stream.Position := currpos; - end; - - if Supports(anInstance, IRODispatchNotifier, dispnotifier) then begin - dispnotifier.GetDispatchInfo(aTransport, aMessage); - if (streamaccess<>NIL) - then streamaccess.Stream.Position := currpos; - end; -end; - -procedure TROInvoker.AfterInvoke(aMethodPtr: TMessageInvokeMethod; - const anInstance: IInterface; - const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - anException: Exception); -var - objactivation: IROObjectActivation; -begin - if Supports(anInstance, IROObjectActivation, objactivation) then begin - objactivation.OnDeactivate(aMessage.ClientID); - end; -end; - -function TROInvoker.CustomHandleMessage(const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - out oResponseOptions: TROResponseOptions): boolean; -var - mtd: TMessageInvokeMethod; - instance: IInterface; -begin - result := FALSE; - - mtd := nil; - instance := nil; - - // The message is guaranteed not to be NIL and to have a name and an InterfaceName at this point - @mtd := MethodAddress('Invoke_' + aMessage.MessageName); - if (@mtd <> nil) then try - try - aFactory.CreateInstance(aMessage.ClientID, instance); - - if (instance = nil) then RaiseError(err_ClassFactoryDidNotReturnInstance, [aMessage.InterfaceName]); - - BeforeInvoke(mtd, instance, aFactory, aMessage, aTransport); - mtd(instance, aMessage, aTransport, oResponseOptions); - AfterInvoke(mtd, instance, aFactory, aMessage, aTransport, nil); - - result := TRUE; - except - on E: Exception do begin - AfterInvoke(mtd, instance, aFactory, aMessage, aTransport, E); - raise; - end; - end; - finally - if (instance <> nil) then aFactory.ReleaseInstance(aMessage.ClientID, instance); - end - else - RaiseError(err_UnknownMethod, [aMessage.MessageName, aFactory.InterfaceName]); -end; - -destructor TROInvoker.Destroy; -begin - inherited; -end; - -function TROInvoker.HandleMessage(const aFactory: IROClassFactory; - const aMessage: IROMessage; - const aTransport: IROTransport; - out oResponseOptions: TROResponseOptions): boolean; -begin - result := CustomHandleMessage(aFactory, aMessage, aTransport, oResponseOptions); -end; - -procedure TROInvoker.Invoke_RegisterEventClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure RegisterEventClient(const ClientID: String; const EventTypes: String); } -var - ClientID: String; - EventTypes: String; -begin - try - __Message.Read('ClientID', TypeInfo(String), ClientID, []); - __Message.Read('EventTypes', TypeInfo(String), EventTypes, []); - - (__Instance as IROServerEventsBroker).RegisterEventClient(ClientID, EventTypes); - - __Message.InitializeResponseMessage(__Transport, 'ChatLibrary', 'ChatService', 'RegisterEventClientResponse'); - __Message.Finalize; - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -procedure TROInvoker.Invoke_UnregisterEventClient(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ procedure UnregisterEventClient(const ClientID: String; const EventTypes: String); } -var - ClientID: String; - EventTypes: String; -begin - try - __Message.Read('ClientID', TypeInfo(String), ClientID, []); - __Message.Read('EventTypes', TypeInfo(String), EventTypes, []); - - (__Instance as IROServerEventsBroker).UnregisterEventClient(ClientID, EventTypes); - - __Message.InitializeResponseMessage(__Transport, 'ChatLibrary', 'ChatService', 'UnregisterEventClientResponse'); - __Message.Finalize; - - __oResponseOptions := [roNoResponse]; - - finally - end; -end; - -procedure TROInvoker.Invoke_GetEventsData(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GetEventsData(const ClientID: String; out EventsData: Binary): Integer; } -var - ClientID: String; - EventsData: Binary; - lResult: Integer; -begin - EventsData := nil; - try - __Message.Read('ClientID', TypeInfo(String), ClientID, []); - - lResult := (__Instance as IROServerEventsBroker).GetEventsData(ClientID, EventsData); - - __Message.InitializeResponseMessage(__Transport, 'ChatLibrary', 'ChatService', 'GetEventsDataResponse'); - __Message.Write('Result', TypeInfo(Integer), lResult, []); - __Message.Write('EventsData', TypeInfo(Binary), EventsData, []); - __Message.Finalize; - - finally - EventsData.Free; - end; -end; - -procedure TROInvoker.Invoke_RegisterClient(const __Instance: IInterface; - const __Message: IROMessage; const __Transport: IROTransport; - out __oResponseOptions: TROResponseOptions); -begin - Invoke_RegisterEventClient(__Instance, __Message, __Transport, __oResponseOptions); -end; - -procedure TROInvoker.Invoke_UnregisterClient(const __Instance: IInterface; - const __Message: IROMessage; const __Transport: IROTransport; - out __oResponseOptions: TROResponseOptions); -begin - Invoke_UnregisterEventClient(__Instance, __Message, __Transport, __oResponseOptions); -end; - -{ TRORemotable } - -constructor TRORemotable.Create; -begin - inherited; -end; - -destructor TRORemotable.Destroy; -begin - FreeAndNIL(fRetainedObjects); - inherited; -end; - -{$IFDEF DELPHI7UP} - -procedure TRORemotable.Synchronize(aMethod: TThreadMethod); -begin - TThread.Synchronize(nil, aMethod); -end; -{$ENDIF DELPHI7UP} - -function TRORemotable.IsRetained(const anObject: TObject): boolean; -begin - result := (fRetainedObjects<>NIL) and (fRetainedObjects.IndexOf(anObject)>=0) -end; - -procedure TRORemotable.RetainObject(const anObject: TObject); -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then - fRetainedObjects := TList.Create; - - fRetainedObjects.Add(anObject); -end; - -procedure TRORemotable.ReleaseObject(const anObject: TObject); -var idx : integer; -begin - // Only creates it if necessary - if (fRetainedObjects=NIL) then Exit; - - idx := fRetainedObjects.IndexOf(anObject); - if (idx>=0) then fRetainedObjects.Delete(idx); -end; - -{ TROMessageDispatcher } - -constructor TROMessageDispatcher.Create(aCollection: TCollection); -begin - inherited Create(aCollection); - - fEnabled := TRUE; - fDispatchers := TROMessageDispatchers(aCollection); - fModuleInfoIntf := nil; - fMessageIntf := nil; -end; - -destructor TROMessageDispatcher.Destroy; -begin - fModuleInfoIntf := nil; - fMessageIntf := nil; - Message := nil; - inherited; -end; - -function TROMessageDispatcher.ProcessMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean; -var - lMessage: IROMessage; -begin - lMessage := (MessageIntf as IROMessageCloneable).Clone(); - result := MainProcessMessage(lMessage, aTransport, aRequeststream, aResponsestream, oResponseOptions); -end; - -function TROMessageDispatcher.GetDisplayName: string; -begin - if (fMessage = nil) then - result := '[Unassigned]' - else - result := fMessage.Name; -end; - -function TROMessageDispatcher.GetMessageIntf: IROMessage; -begin - result := IROMessage(fMessageIntf); -end; - -function TROMessageDispatcher.GetModuleInfoIntf: IROModuleInfo; -begin - result := IROModuleInfo(fModuleInfoIntf) -end; - -procedure TROMessageDispatcher.SetMessage(const Value: TROMessage); -var - ref: IROMessage; -begin - if (Value = fMessage) then Exit; - - if (Value <> nil) then begin - if (fDispatchers.FindDuplicate(Value) <> nil) then RaiseError(err_DispatcherAlreadyAssigned, [Value.Name]); - if not Value.GetInterface(IROMessage, ref) then RaiseError(err_IROMessageNotSupported, [Value.ClassName]); - - fMessageIntf := pointer(ref); - Value.GetInterface(IROModuleInfo, fModuleInfoIntf); - Value.FreeNotification(Server); - - end - else begin - fMessageIntf := nil; - fModuleInfoIntf := nil; - end; - - fMessage := Value; -end; - -function TROMessageDispatcher.CanHandleMessage(const aTransport: IROTransport; aRequeststream: TStream): boolean; -begin - result := fEnabled; -end; - -procedure TROMessageDispatcher.Assign(Source: TPersistent); -var - SourceDispatcher: TROMessageDispatcher; -begin - if Source is TROMessageDispatcher then begin - SourceDispatcher := TROMessageDispatcher(Source); - Name := SourceDispatcher.Name; - Message := SourceDispatcher.Message; - Enabled := SourceDispatcher.Enabled; - end - else - inherited Assign(Source); -end; - -function TROMessageDispatcher.GetServer: TROServer; -begin - result := fDispatchers.Server; -end; - -{ TROMessageDispatchers } - -procedure TROMessageDispatchers.CleanReferences(aMessage: TROMessage); -var - i: integer; -begin - for i := 0 to (Count - 1) do - if (Dispatchers[i].Message = aMessage) then begin - Dispatchers[i].Message := nil; - end; -end; - -constructor TROMessageDispatchers.Create(aServer: TROServer); -begin - inherited Create(GetDispatcherClass); - fServer := aServer; -end; - -destructor TROMessageDispatchers.Destroy; -begin - inherited; -end; - -function TROMessageDispatchers.FindDispatcher(const aTransport: IROTransport; - aRequestStream: TStream): TROMessageDispatcher; -var - i: integer; -begin - result := nil; - - for i := 0 to (Count - 1) do - if Dispatchers[i].CanHandleMessage(aTransport, aRequestStream) then begin - result := Dispatchers[i]; - Break; - end; -end; - -function TROMessageDispatchers.DispatcherByName( - const aName: string): TROMessageDispatcher; -var - i: integer; -begin - result := nil; - for i := 0 to (Count - 1) do - if (CompareText(Dispatchers[i].Name, aName) = 0) then begin - result := Dispatchers[i]; - Exit; - end; -end; - -function TROMessageDispatchers.FindDuplicate( - aMessage: TROMessage): TROMessageDispatcher; -var - i: integer; -begin - result := nil; - - for i := 0 to (Count - 1) do - if (Dispatchers[i].Message = aMessage) then begin - result := Dispatchers[i]; - Exit; - end; -end; - -function TROMessageDispatchers.GetDispatcher( - Index: integer): TROMessageDispatcher; -begin - result := TROMessageDispatcher(inherited Items[Index]); -end; - -function TROMessageDispatchers.GetDispatcherClass: TROMessageDispatcherClass; -begin - result := TROMessageDispatcher; -end; - -function TROMessageDispatchers.GetSupportsMultipleDispatchers: boolean; -begin - result := FALSE; -end; - -{$IFDEF DELPHI6UP} - -procedure TROMessageDispatchers.Notify(Item: TCollectionItem; - Action: TCollectionNotification); -begin - inherited; - if (Action = cnAdded) then begin - if not SupportsMultipleDispatchers and (Count > 1) then begin - - (*if (csDesigning in fServer.ComponentState) then begin - { TODO: This is really bad. I should probabily just make a component editor and control it in there. - The problem is that I cannot find a way to stop a TCollection.Add method gracefully. - After this method is called TCollection.InsertItem continues and invokes NotifyDesigner - passing Item. That will obviously fail since Item is being freed here... } - MessageDlg(Format(err_ServerOnlySupportsOneDispatcher+'.'+#13#10+ - 'You can ignore the error that Delphi will raise in the IDE after you close this dialog.', [fServer.ClassName]), mtError, [mbOK], 0); - end;*) - - FreeAndNIL(Item); - RaiseError(err_ServerOnlySupportsOneDispatcher, []) - end; - end; -end; -{$ENDIF DELPHI6UP} - -{ TROServer } - -constructor TROServer.Create(aOwner: TComponent); -begin - inherited; - fDispatchers := GetDispatchersClass.Create(Self); -end; - -destructor TROServer.Destroy; -begin - fDispatchers.Free; - inherited; -end; - -procedure TROServer.TriggerReadFromStream(iStream: TStream); -begin - if Assigned(OnReadFromStream) then begin - iStream.Position := 0; - OnReadFromStream(iStream); - iStream.Position := 0; - end; -end; - -procedure TROServer.TriggerWriteToStream(iStream: TStream); -begin - if Assigned(OnWriteToStream) then begin - iStream.Position := 0; - OnWriteToStream(iStream); - iStream.Position := 0; - end; -end; - -function TROServer.DispatchMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream): boolean; -var - lIgnore: TROResponseOptions; -begin - result := DispatchMessage(aTransport, aRequeststream, aResponsestream, lIgnore); -end; - -function TROServer.DispatchMessage(const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; out oResponseOptions: TROResponseOptions): boolean; -var - dispatcher: TROMessageDispatcher; - excstr: string; -begin - result := false; - try - {aRequeststream.Position := 0; - if Assigned(OnReadFromStream) then OnReadFromStream(aRequeststream); - aRequeststream.Position := 0;} - - dispatcher := Dispatchers.FindDispatcher(aTransport, aRequeststream); - - if (dispatcher = nil) then RaiseError(err_CannotFindMessageDispatcher, []); // Should never happen! If this happens there's no way to format the exception correctly - - result := IntDispatchMessage(dispatcher, aTransport, aRequeststream, aResponsestream, oResponseOptions); - - except - on E: Exception do begin - if (E.Message <> '') then - excstr := E.Message - else - excstr := err_UnhandledException; - aResponseStream.Write(excstr[1], Length(excstr)); - TriggerWriteToStream(aResponsestream); - end; - end; - - aResponsestream.Position := 0; // Just in case - {aResponsestream.Position := 0; - if Assigned(OnWriteToStream) then OnWriteToStream(aResponsestream); - aResponsestream.Position := 0;} -end; - -function TROServer.GetActive: boolean; -begin - result := IntGetActive; -end; - -procedure TROServer.Loaded; -begin - inherited; - - IntSetActive(FALSE); - Active := fLoadActive; - fDoneAfterLoad := TRUE; -end; - -procedure TROServer.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited; - - if (Operation = opRemove) then begin - if (aComponent is TROMessage) then fDispatchers.CleanReferences(TROMessage(aComponent)); - //if aComponent = AsyncResponseStorage then AsyncResponseStorage := nil; - end; -end; - -procedure TROServer.SetActive(const Value: boolean); -begin - if (csLoading in ComponentState) then begin - fDoneAfterLoad := FALSE; - fLoadActive := Value - end - - else begin - if (Value = Active) then Exit; - - case Value of - TRUE: if Assigned(fOnBeforeServerActivate) then fOnBeforeServerActivate(Self); - FALSE: if Assigned(fOnBeforeServerDeactivate) then fOnBeforeServerDeactivate(Self); - end; - - IntSetActive(Value); - - if (Value = Active) then begin - case Value of - TRUE: if Assigned(fOnAfterServerActivate) then fOnAfterServerActivate(Self); - FALSE: if Assigned(fOnAfterServerDeactivate) then fOnAfterServerDeactivate(Self); - end; - end; - end; -end; - -procedure TROServer.SetDispatchers(const Value: TROMessageDispatchers); -begin - fDispatchers := Value; -end; - -function TROServer.GetDispatchersClass: TROMessageDispatchersClass; -begin - result := TROMessageDispatchers; // Default -end; - -{procedure TROServer.SetAsyncResponseStorage(const Value:TROAsyncResponseStorage); -begin - if fAsyncResponseStorage <> Value then begin - fAsyncResponseStorage := Value; - if Assigned(fAsyncResponseStorage) then fAsyncResponseStorage.FreeNotification(self); - end; -end;} - -function TROServer.IntDispatchMessage(Dispatcher: TROMessageDispatcher; - const aTransport: IROTransport; aRequeststream, aResponsestream: TStream; - out oResponseOptions: TROResponseOptions): boolean; - {$IFDEF REMOBJECTS_UseEncryption} -var - DEncRequest, DUnEncResponse: TMemoryStream; - {$ENDIF} -begin - {$IFDEF REMOBJECTS_UseEncryption} - if Encryption.EncryptionMethod <> tetNone then begin - dEncRequest := TMemoryStream.Create; - dUnEncResponse := TMemoryStream.Create; - try - DoDecryption(aRequeststream, dEncRequest); - DEncRequest.Position := 0; - TriggerReadFromStream(dEncRequest); - result := dispatcher.ProcessMessage(aTransport, dEncRequest, dUnEncResponse, oResponseOptions); // This traps exception and cannot fail - TriggerWriteToStream(dUnEncResponse); - if roDontEncrypt in oResponseOptions then - begin - DUnEncResponse.Position := 0; - aResponsestream.CopyFrom(DUnEncResponse, DUnEncResponse.Size); - aResponsestream.Position := 0; - end else - DoEncryption(dUnEncResponse, aResponsestream); - finally - dEncRequest.Free; - dUnEncResponse.free; - end; - end - else - {$ENDIF} - begin - TriggerReadFromStream(aRequeststream); - result := dispatcher.ProcessMessage(aTransport, aRequeststream, aResponsestream, oResponseOptions); // This traps exception and cannot fail - TriggerWriteToStream(aResponsestream); - end; -end; - -procedure TROServer.CheckProperties; -begin -// nothing -end; - -function TROServer.GetRODLReader: TROCustomRODLReader; -begin - Result:=nil; - if Assigned(FOnGetRODLReader) then FOnGetRODLReader(Self,Result); -end; - -{ TROClassFactory } - -constructor TROClassFactory.Create(const anInterfaceName: string; - aCreatorFunc: TRORemotableCreatorFunc; - anInvokerClass: TROInvokerClass); -begin - inherited Create; - - fInvoker := nil; - fCreatorFunc := aCreatorFunc; - fInterfaceName := anInterfaceName; - fInvokerClass := anInvokerClass; - - RegisterClassFactory(Self); -end; - -destructor TROClassFactory.Destroy; -begin - inherited; -end; - -procedure TROClassFactory.CreateInstance(const aClientID: TGUID; out anInstance: IInterface); -begin - fCreatorFunc(anInstance); -end; - -function TROClassFactory.GetInterfaceName: string; -begin - result := fInterfaceName -end; - -function TROClassFactory.GetInvoker: IROInvoker; -begin - if (fInvoker = nil) then fInvoker := fInvokerClass.Create; // Only creates it when really needed - - result := fInvoker; -end; - -procedure TROClassFactory.ReleaseInstance(const aClientID: TGUID; var anInstance: IInterface); -begin - anInstance := nil; -end; - -function FinalizeClasses: boolean; -begin - FreeAndNil(_ClassFactoryList); - result := True; -end; - -initialization - _ServerClasses := TClassList.Create; - _ClassFactoryList := nil; - {$IFNDEF DESIGNTIME} - AddTerminateProc(FinalizeClasses); - {$ENDIF DESIGNTIME} - RegisterExceptionClass(EROSendNoResponse); -finalization - UnregisterExceptionClass(EROSendNoResponse); - FreeAndNil(_ServerClasses); - {$IFDEF DESIGNTIME} - FinalizeClasses(); - {$ENDIF DESIGNTIME} -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerIntf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerIntf.pas deleted file mode 100644 index c5d05fc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerIntf.pas +++ /dev/null @@ -1,163 +0,0 @@ -unit uROServerIntf; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF WIN32}Windows, {$ENDIF} - uRORes, uROClientIntf, uROTypes, Classes, SysUtils; - -type - {$IFDEF DELPHI5} - { IInterface } - IInterface = IUnknown; - {$ENDIF} - - IROClassFactory = interface; - - TROResponseOption = (roNoResponse, roDontEncrypt); - TROResponseOptions = set of TROResponseOption; - - { IROInvoker } - IROInvoker = interface - ['{6BF28A4D-1511-4FD0-83C0-0F0A23322ACC}'] - function HandleMessage(const aFactory : IROClassFactory; - const aMessage : IROMessage; - const aTransport : IROTransport; - out oResponseOptions: TROResponseOptions) : boolean; - end; - - { IROClassFactory } - IROClassFactory = interface - ['{87580688-9994-4EB3-BDB9-E621ED52C3E9}'] - procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface); - procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface); - - function GetInterfaceName : string; - function GetInvoker : IROInvoker; - - property InterfaceName : string read GetInterfaceName; - property Invoker : IROInvoker read GetInvoker; - end; - - IROPooledClassFactory = interface(IROClassFactory) - ['{DB0C4A2B-CA2C-4CDA-A02C-289918B29FA3}'] - procedure ClearPool; - end; - - { IRODispatchNotifier } - IRODispatchNotifier = interface - ['{C3359706-83B8-4285-866C-D4DD5960B183}'] - procedure GetDispatchInfo(const aTransport : IROTransport; const aMessage : IROMessage); - end; - - { IRODestructorController } - IRODestructorController = interface - ['{D590AF9A-1029-450B-A8B7-0EC8A93DF7DC}'] - function CanBeDestroyed : boolean; - end; - - { IRODestructorControllerEx } - IRODestructorControllerEx = interface(IRODestructorController) - ['{2897DFAE-A466-4886-ADC3-9F0D7DD393A8}'] - procedure SetCanBeDestroyed(Value : boolean); - end; - - { IROObjectActivation } - IROObjectActivation = interface - ['{071ECDF1-A4B0-4333-93B4-EE1B8609FF80}'] - procedure OnActivate(aClientID: TGUID; const aMessage : IROMessage); - procedure OnDeactivate(aClientID: TGUID); - end; - - { IROObjectTimeout } - IROObjectTimeout = interface - ['{DC7FC0CB-D3C6-4CA7-8F71-57ECE1392594}'] - procedure OnTimeout; - end; - - { IROServerEventsBroker } - IROServerEventsBroker = interface - ['{5B6A3449-3B13-4B0A-B1FF-B2FAA18D57B1}'] - procedure RegisterEventClient(const ClientID, EventTypes : string); - procedure UnregisterEventClient(const ClientID, EventTypes : string); - - function GetEventsData(const ClientID : string; out EventsData : Binary) : integer; - end; - - TROEventData = class; - - IROActiveEventServer = interface - ['{DD0B0C09-2D17-46EA-8110-E7BEE9B8AB7B}'] - procedure EventsRegistered(aSender : TObject; aClient: TGUID); - procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); // asender is TROEventRepository - end; - - { TROEventData } - TROEventData = class - private - fData: TStream; - fRefCount: integer; -// fShouldRemoveFromOwner: Boolean; - protected - public - constructor Create(anEventDataStream : TMemoryStream); - destructor Destroy; override; - - function AddRef : integer; - function RemoveRef : integer; -// property ShouldRemoveFromOwner: Boolean read fShouldRemoveFromOwner write fShouldRemoveFromOwner; - - property Data : TStream read fData; - end; - - - -implementation -uses - uROClasses; - -{ TROEventData } - -function TROEventData.AddRef : integer; -begin - result := InterlockedIncrement(fRefCount); -end; - -constructor TROEventData.Create(anEventDataStream : TMemoryStream); -begin - inherited Create; - fRefCount := 1; -// fShouldRemoveFromOwner := true; - fData := TMemoryStream.Create; - anEventDataStream.Position := 0; - fData.CopyFrom(anEventDataStream, anEventDataStream.Size); -end; - -destructor TROEventData.Destroy; -begin - FreeAndNIL(fData); - inherited; -end; - -function TROEventData.RemoveRef : integer; -begin - result := InterlockedDecrement(fRefCount); -end; - - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerMultiMessage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerMultiMessage.pas deleted file mode 100644 index cce7ebd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerMultiMessage.pas +++ /dev/null @@ -1,336 +0,0 @@ -unit uROServerMultiMessage; - -{$I RemObjects.inc} -interface -uses -{$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - SysUtils, Classes, TypInfo, - uROClientIntf, uROSerializer, uROClient; - -type - TROServerMultiMessage = class; - TROServerMultiMessageCollectionItem = class(TCollectionItem) - private - FMessage: TROMessage; - procedure SetMessage(const Value: TROMessage); - protected - function GetDisplayName: string; override; - public - procedure Assign(Source: TPersistent); override; - published - property Message: TROMessage read FMessage write SetMessage; - end; - - TROServerMultiMessageCollection = class(TCollection) - private - FOwner: TROServerMultiMessage; - function GetItems(Index: integer): TROServerMultiMessageCollectionItem; - public - constructor Create(aOwner: TROServerMultiMessage); - function FindItemByMessage(AMessage: TROMessage): TROServerMultiMessageCollectionItem; - property Items[Index: integer]: TROServerMultiMessageCollectionItem read GetItems; default; - end; - - TROServerMultiMessage = class(TROMessage) - private - FSupportedMessages: TROServerMultiMessageCollection; - FDefaultMessage: TROMessage; - procedure DetectMessageFromStream(aStream: TStream); - procedure SetSupportedMessages(const Value: TROServerMultiMessageCollection); - function InternalIsValidMessage(aData: PChar; aLength: Integer): integer; - protected - function DefaultMessage: IROMessage; - function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - { Internals } - function ReadException: Exception; override; - procedure InitObject; override; - - function CreateSerializer: TROSerializer; override; - - { IROMessage } - procedure Initialize(const aTransport: IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); override; - procedure Initialize(const aTransport: IROTransport; const aLibraryName, anInterfaceName, aMessageName: string; aType: TMessageType); override; - procedure Finalize; override; - -{$IFDEF DOTNET} -{$ELSE} - procedure Write(const aName: string; aTypeInfo: PTypeInfo; const Ptr; Attributes: TParamAttributes); override; - procedure Read(const aName: string; aTypeInfo: PTypeInfo; var Ptr; Attributes: TParamAttributes); override; -{$ENDIF} - - procedure WriteToStream(aStream: TStream); override; - procedure ReadFromStream(aStream: TStream); override; - procedure ReadFromStream(aStream: TStream; var aFreeStream: Boolean); override; - function GetMessageType: TMessageType; override; - procedure WriteException(aStream: TStream; anException: Exception); override; - procedure FreeStream; override; - public - destructor Destroy; override; - procedure Assign(iSource: TPersistent); override; - procedure CheckProperties; override; - function IsValidMessage(aData: PChar; aLength: Integer): boolean; override; - published - property SupportedMessages: TROServerMultiMessageCollection read FSupportedMessages write SetSupportedMessages; - end; - -implementation -uses - uROClasses, uRORes; - -{ TROServerMultiMessage } - -procedure TROServerMultiMessage.Assign(iSource: TPersistent); -begin - inherited; - if Assigned(iSource) then begin - if not (iSource is TROServerMultiMessage) then RaiseError('Cannot Assign a %s t a %s', [ClassName, iSource.ClassName]); - self.SupportedMessages := (iSource as TROServerMultiMessage).SupportedMessages; - end; -end; - -procedure TROServerMultiMessage.CheckProperties; -begin - Check(FDefaultMessage = nil, Name + '. Can not detect default message'); //??? - FDefaultMessage.CheckProperties; - inherited; -end; - -function TROServerMultiMessage.CreateSerializer: TROSerializer; -begin - Result := nil; -end; - -function TROServerMultiMessage.DefaultMessage: IROMessage; -begin - CheckProperties; - Result := FDefaultMessage; -end; - -destructor TROServerMultiMessage.Destroy; -begin - inherited; -end; - -procedure TROServerMultiMessage.DetectMessageFromStream(aStream: TStream); -const - BufSize = 100; -var - i: integer; - buf: Pchar; - currentBufSize: int64; -begin - FDefaultMessage := nil; - aStream.Position := 0; - - if aStream.Size > bufsize then - currentBufSize := BufSize - else - currentBufSize := aStream.Size; - - GetMem(buf, currentBufSize); - try - aStream.Read(buf^, currentBufSize); - if copy(Buf,1,6) = 'rorock' then RaiseInvalidStreamError(err_InvalidHeaderEncrypted, [], aStream); - i := InternalIsValidMessage(buf, currentBufSize); - if i <> -1 then FDefaultMessage := FSupportedMessages[i].Message; - Check(FDefaultMessage = nil, Name + '. Can not find the valid Message for stream.' + sLineBreak + string(buf)); - finally - aStream.Position := 0; - FreeMem(buf); - end; -end; - -procedure TROServerMultiMessage.Finalize; -begin - DefaultMessage.Finalize; - inherited; -end; - -procedure TROServerMultiMessage.FreeStream; -begin - DefaultMessage.FreeStream; - inherited; -end; - -function TROServerMultiMessage.GetMessageType: TMessageType; -begin - Result := DefaultMessage.MessageType; -end; - -procedure TROServerMultiMessage.Initialize(const aTransport: IROTransport; - const anInterfaceName, aMessageName: string; aType: TMessageType); -begin - inherited Initialize(aTransport, anInterfaceName, aMessageName, aType); - DefaultMessage.Initialize(aTransport, anInterfaceName, aMessageName, aType); -end; - -procedure TROServerMultiMessage.Initialize(const aTransport: IROTransport; - const aLibraryName, anInterfaceName, aMessageName: string; - aType: TMessageType); -begin - inherited Initialize(aTransport, anInterfaceName, aMessageName, aType); - DefaultMessage.Initialize(aTransport, aLibraryName, anInterfaceName, aMessageName, aType); -end; - -procedure TROServerMultiMessage.InitObject; -begin - inherited; - FSupportedMessages := TROServerMultiMessageCollection.Create(Self); -end; - -function TROServerMultiMessage.InternalIsValidMessage(aData: PChar; - aLength: Integer): integer; -begin - for Result := 0 to FSupportedMessages.Count - 1 do - with FSupportedMessages[Result] do - if (Message <> nil) and Message.IsValidMessage(aData, aLength) then Exit; - Result := -1; -end; - -function TROServerMultiMessage.IsValidMessage(aData: PChar; - aLength: Integer): boolean; -begin - Result := InternalisValidMessage(aData, aLength) <> -1; -end; - -procedure TROServerMultiMessage.Notification(AComponent: TComponent; - Operation: TOperation); -var - item: TROServerMultiMessageCollectionItem; -begin - inherited; - if (Operation = opRemove) then begin - if (AComponent is TROMessage) and (FSupportedMessages.Count > 0) then begin - Item := FSupportedMessages.FindItemByMessage(AComponent as TROMessage); - if Item <> nil then Item.Message := nil; - end; - end -end; - -function TROServerMultiMessage.QueryInterface(const IID: TGUID; - out Obj): HResult; -begin - Result := inherited QueryInterface(IID, Obj); - if Result = E_NOINTERFACE then - if FDefaultMessage <> nil then - Result := DefaultMessage.QueryInterface(IID, Obj); -end; - -procedure TROServerMultiMessage.Read(const aName: string; - aTypeInfo: PTypeInfo; var Ptr; Attributes: TParamAttributes); -begin - DefaultMessage.Read(aName, aTypeInfo, Ptr, Attributes); - if Assigned(OnReadMessageParameter) then OnReadMessageParameter(Self, aName, aTypeInfo, pointer(Ptr), Attributes); -end; - -function TROServerMultiMessage.ReadException: Exception; -begin - // not called from ROServerMultiMessage - Result := nil; -end; - -procedure TROServerMultiMessage.ReadFromStream(aStream: TStream); -begin - inherited; - DetectMessageFromStream(aStream); - DefaultMessage.ReadFromStream(aStream); - InterfaceName := DefaultMessage.InterfaceName; - MessageName := DefaultMessage.MessageName; -end; - -procedure TROServerMultiMessage.ReadFromStream(aStream: TStream; - var aFreeStream: Boolean); -begin - inherited; - DetectMessageFromStream(aStream); - DefaultMessage.ReadFromStream(aStream, aFreeStream); - InterfaceName := DefaultMessage.InterfaceName; - MessageName := DefaultMessage.MessageName; -end; - -procedure TROServerMultiMessage.SetSupportedMessages( - const Value: TROServerMultiMessageCollection); -begin - FSupportedMessages.Assign(Value); -end; - -procedure TROServerMultiMessage.Write(const aName: string; - aTypeInfo: PTypeInfo; const Ptr; Attributes: TParamAttributes); -begin - if Assigned(OnWriteMessageParameter) then OnWriteMessageParameter(Self, aName, aTypeInfo, pointer(Ptr), Attributes); - DefaultMessage.Write(aName, aTypeInfo, Ptr, Attributes); -end; - -procedure TROServerMultiMessage.WriteException(aStream: TStream; - anException: Exception); -begin - DefaultMessage.WriteException(aStream, anException); - inherited; -end; - -procedure TROServerMultiMessage.WriteToStream(aStream: TStream); -begin - DefaultMessage.WriteToStream(aStream); - inherited; -end; - -{ TROServerMultiMessageCollectionItem } - -procedure TROServerMultiMessageCollectionItem.Assign(Source: TPersistent); -begin - if Source is TROServerMultiMessageCollectionItem then begin - Message := TROServerMultiMessageCollectionItem(Source).Message; - end - else - inherited Assign(Source); -end; - -function TROServerMultiMessageCollectionItem.GetDisplayName: string; -begin - if FMessage <> nil then - Result := FMessage.Name + ' (' + FMessage.ClassName + ')' - else - Result := '[Unassigned]'; -end; - -procedure TROServerMultiMessageCollectionItem.SetMessage( - const Value: TROMessage); -begin - if (FMessage <> Value) then begin - if Value <> nil then Check(Value is TROServerMultiMessage, Value.Name + ' can not be used here.'); - FMessage := Value; - if (FMessage <> nil) then FMessage.FreeNotification(TROServerMultiMessageCollection(inherited Collection).FOwner); - end; -end; - -{ TROServerMultiMessageCollection } - -constructor TROServerMultiMessageCollection.Create( - aOwner: TROServerMultiMessage); -begin - inherited Create(TROServerMultiMessageCollectionItem); - FOwner := aOwner; -end; - -function TROServerMultiMessageCollection.FindItemByMessage( - AMessage: TROMessage): TROServerMultiMessageCollectionItem; -var - i: integer; -begin - Result := nil; - for i := 0 to Count - 1 do - if Items[i].Message = AMessage then begin - Result := Items[i]; - Break; - end; -end; - -function TROServerMultiMessageCollection.GetItems( - Index: integer): TROServerMultiMessageCollectionItem; -begin - Result := TROServerMultiMessageCollectionItem(inherited Items[Index]); -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServiceComponent.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServiceComponent.pas deleted file mode 100644 index 1c4fea4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServiceComponent.pas +++ /dev/null @@ -1,27 +0,0 @@ -unit uROServiceComponent {$IFNDEF FPC}deprecated{$ENDIF}; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - uRORemoteService; - -type - TROServiceComponent = TRORemoteService {$IFDEF DELPHI10UP}deprecated{$ENDIF}; - -implementation - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSessions.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSessions.pas deleted file mode 100644 index 635c7da..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSessions.pas +++ /dev/null @@ -1,1009 +0,0 @@ -unit uROSessions; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF VER140UP}Variants,{$ENDIF} - Classes, SysUtils, SyncObjs, uROClientIntf, - uROClient, uROClasses, uROTypes, Contnrs; - -const DEFBUFFSIZE = 4096; - -type { Misc } - TROCustomSessionManager = class; - - PVariantItem = ^TVariantItem; - TVariantItem = record - Name : string; - Value : Variant; - end; - - { TROVariantList } - TROVariantList = class(TStringList) - private - function GetValueNames(Index: integer): string; - function GetValues(const aName: string): Variant; - procedure SetValues(const aName: string; const Value: Variant); - function GetItems(Index: integer): PVariantItem; - procedure SetValueNames(Index: integer; const Value: string); - - protected - public - constructor Create; - destructor Destroy; override; - - procedure Clear; override; - procedure Add(const aName : string; const aValue : Variant); reintroduce; - - procedure Delete(const aName : string); reintroduce; overload; - procedure Delete(Index : integer); reintroduce; overload; - - property Values[const aName : string] : Variant read GetValues write SetValues; default; - property ValueNames[Index : integer] : string read GetValueNames write SetValueNames; - property Items[Index : integer] : PVariantItem read GetItems; - end; - - { ToDo -cRO3: Add an *optional* Critical Section object to the session so the user - can easily make Sessions threadsafe (for access to the SAME session by multiple - threads/client-requests) if needed. This should remain turned off by default. } - - { TROSession } - TROSession = class - private - fCreated: TDateTime; - fLastAccessed: TDateTime; - fSessionID: TGUID; - fValues : TROVariantList; - - protected - function GetCount: integer; virtual; - function GetNames(Index: integer): string; virtual; - function GetValues(const Name: string): Variant; virtual; - procedure SetNames(Index: integer; const Value: string); virtual; - procedure SetValues(const Name: string; const Value: Variant); virtual; - - public - constructor Create(const aSessionID : TGUID); virtual; - destructor Destroy; override; - - procedure LoadFromStream(aStream : TStream; OnlyValues : boolean = FALSE); virtual; - procedure SaveToStream(aStream : TStream; OnlyValues : boolean = FALSE); virtual; - - procedure SaveStruct(aStruct : TROComplexType); - - property SessionID : TGUID read fSessionID; - property Created : TDateTime read fCreated write fCreated; - property LastAccessed : TDateTime read fLastAccessed write fLastAccessed; - property Values[const Name : string] : Variant read GetValues write SetValues; default; - property Names[Index : integer] : string read GetNames write SetNames; - property Count : integer read GetCount; - end; - - TROSessionClass = class of TROSession; - - { TROSessionList } - TROSessionList = class - private - fList: TStringList; - - function GetCount: integer; - function GetSessions(Index: integer): TROSession; - - protected - public - constructor Create; - destructor Destroy; override; - - procedure Clear; - - procedure Add(aSession: TROSession); overload; - function Add(aSessionId: TGUID): TROSession; overload; - - procedure Delete(aIndex: integer); - - function GetSessionIndex(aSessionId: TGUID): integer; - function SessionById(aSessionId: TGUID): TROSession; - - property Sessions[Index: integer]: TROSession read GetSessions; - property Count: integer read GetCount; - end; - - { TROCustomSessionManager } - TROMaxSessionsReachedEvent = procedure (var aFail: Boolean) of object; - TSessionEvent = procedure(const aSession : TROSession) of object; - TROSessionExceptionEvent = procedure (aSessionID : TGUID; anException: Exception; var aRetry: Boolean) of object; - TDeleteSessionEvent = procedure(const aSessionID : TGUID; IsExpired : boolean) of object; - TROCustomSessionCreationEvent = procedure (const aSessionID : TGUID; var Session : TROSession) of object; - - TROSessionsActions = (saAdd, saDelete, saTmpSessionDelete, saRelease, saRemoveActiveListener); - - IROSessionsChangesListener = interface ['{A964942D-699F-48FD-ADA5-1E4720E0150E}'] - procedure SessionsChangedNotification(const aSessionID : TGUID; aSessionAction: TROSessionsActions; Sender: TObject); - end; - - IROSessionsChangesNotifier = interface ['{71F4384A-0F8A-4783-863B-D61A3BD85E12}'] - procedure RegisterSessionsChangesListener(aListener: IROSessionsChangesListener); - procedure UnRegisterSessionsChangesListener(aListener: IROSessionsChangesListener); - end; - - TROCustomSessionManager = class(TROComponent, IROSessionsChangesNotifier) - private - fMaxSessions: integer; - fSessionDuration: integer; - fCritical : TCriticalSection; - fClearing : boolean; - fOnSessionCreated: TSessionEvent; - fTimer : TROThreadTimer; - fSessionChangesListeners: TInterfaceList; - FOnBeforeDeleteSession: TDeleteSessionEvent; - fOnSessionDeleted: TDeleteSessionEvent; - fOnCustomCreateSession: TROCustomSessionCreationEvent; - fOnMaxSessionsReached: TROMaxSessionsReachedEvent; - fSessionCheckInterval: Integer; - fOnException: TROSessionExceptionEvent; - fInDeleteSession: Boolean; - procedure SetSessionCheckInterval(const Value: Integer); - - protected - { IROSessionsChangesNotifier } - - procedure RegisterSessionsChangesListener(aListener: IROSessionsChangesListener); virtual; - procedure UnRegisterSessionsChangesListener(aListener: IROSessionsChangesListener); virtual; - - procedure DoNotifySessionsChangesListener(const aSessionID : TGUID; aSessionAction: TROSessionsActions; Sender: TObject); virtual; - - function DoCreateSession(const aSessionID : TGUID) : TROSession; virtual; - function DoCheckSessionIsExpired(aSession : TROSession) : boolean; virtual; - - procedure DoTimerTick(CurrentTickCount : cardinal); virtual; - - function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; virtual; abstract; - procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); virtual; abstract; - procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); virtual; - procedure DoClearSessions(OnlyExpired : boolean); virtual; abstract; - function DoGetSessionCount : integer; virtual; abstract; - procedure DoGetAllSessions(Dest: TStringList); virtual; - - procedure Loaded; override; - - procedure KillTimer; - - property Clearing : boolean read fClearing; - property SessionDuration : integer read fSessionDuration write fSessionDuration default 15; - property SessionCheckInterval : Integer read fSessionCheckInterval write SetSessionCheckInterval default 15; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - // Session management routines - function CreateSession(const aSessionID : TGUID) : TROSession; - function FindSession(const aSessionID : TGUID; aUpdateTime: Boolean = True) : TROSession; - procedure DeleteSession(const aSessionID : TGUID; IsExpired : boolean); - procedure DeleteTemporarySession(var Session : TROSession); - procedure ReleaseSession(var aSession : TROSession; NewSession : boolean); - procedure ClearSessions(OnlyExpired : boolean); - function CheckSessionIsExpired(aSession : TROSession) : boolean; - function GetSessionCount : integer; - procedure GetAllSessions(Dest: TStringList); - property Critical : TCriticalSection read fCritical; - published - property OnMaxSessionsReached: TROMaxSessionsReachedEvent read fOnMaxSessionsReached write fOnMaxSessionsReached; - property MaxSessions : integer read fMaxSessions write fMaxSessions default -1; - - property OnCustomCreateSession : TROCustomSessionCreationEvent read fOnCustomCreateSession write fOnCustomCreateSession; - property OnSessionCreated : TSessionEvent read fOnSessionCreated write fOnSessionCreated; - property OnBeforeDeleteSession: TDeleteSessionEvent read FOnBeforeDeleteSession write FOnBeforeDeleteSession; - property OnSessionDeleted : TDeleteSessionEvent read fOnSessionDeleted write fOnSessionDeleted; - property OnException : TROSessionExceptionEvent read fOnException write fOnException; - end; - - { TROEventSessionManager } - TFindSessionEvent = procedure(const aSessionID : TGUID; out aSession: TROSession) of object; - TReleaseSessionEvent = procedure(var aSession : TROSession; NewSession : boolean) of object; - TClearSessionsEvent = procedure(SessionManager : TROCustomSessionManager; OnlyExpired : boolean) of object; - TGetSessionCountEvent = function(SessionManager : TROCustomSessionManager) : integer of object; - TGetAllSessionsEvent = procedure (SessionManager : TROCustomSessionManager; aDest: TStringList) of object; - - TROEventSessionManager = class(TROCustomSessionManager) - private - fOnFindSession: TFindSessionEvent; - fOnDeleteSession: TDeleteSessionEvent; - fOnReleaseSession: TReleaseSessionEvent; - fOnClearSessions: TClearSessionsEvent; - fOnGetSessionCount: TGetSessionCountEvent; - fOnGetAllSessions: TGetAllSessionsEvent; - - protected - function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; override; - procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); override; - procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); override; - procedure DoClearSessions(OnlyExpired : boolean); override; - function DoGetSessionCount : integer; override; - procedure DoGetAllSessions(Dest: TStringList); override; - - public - - published - property OnDeleteSession : TDeleteSessionEvent read fOnDeleteSession write fOnDeleteSession; - property OnFindSession : TFindSessionEvent read fOnFindSession write fOnFindSession; - property OnReleaseSession : TReleaseSessionEvent read fOnReleaseSession write fOnReleaseSession; - property OnClearSessions : TClearSessionsEvent read fOnClearSessions write fOnClearSessions; - property OnGetSessionCount : TGetSessionCountEvent read fOnGetSessionCount write fOnGetSessionCount; - property OnGetAllSessions: TGetAllSessionsEvent read fOnGetAllSessions write fOnGetAllSessions; - property SessionDuration; - property SessionCheckInterval; - end; - - { TROInMemorySessionManager } - TROInMemorySessionManager = class(TROCustomSessionManager) - private - fSessionList : TStringList; - - protected - function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; override; - procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); override; - procedure DoClearSessions(OnlyExpired : boolean); override; - procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); override; - function DoGetSessionCount : integer; override; - procedure DoGetAllSessions(Dest: TStringList); override; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - published - property SessionDuration; - property SessionCheckInterval; - end; - -implementation - -uses - uRORes, uROBinaryHelpers, - {$IFDEF DELPHI5} - Windows, ComObj; { for StringToGuid in Delphi 5 } - {$ELSE} - DateUtils; - {$ENDIF DELPHI6UP} - -{ TROVariantList } -constructor TROVariantList.Create; -begin - inherited; - - Sorted := TRUE; - Duplicates := dupError; -end; - -destructor TROVariantList.Destroy; -begin - Clear; - - inherited; -end; - -procedure TROVariantList.Add(const aName: string; const aValue: Variant); -var - item : PVariantItem; -begin - New(Item); - try - inherited AddObject(aName, TObject(item)); - - item^.Name := aName; - item^.Value := aValue; - except - Dispose(item); - raise; - end; -end; - -procedure TROVariantList.Delete(const aName: string); -var - idx : integer; -begin - idx := IndexOf(aName); - if (idx>=0) then Delete(idx); -end; - -function TROVariantList.GetItems(Index: integer): PVariantItem; -begin - result := PVariantItem(inherited Objects[Index]); -end; - -function TROVariantList.GetValueNames(Index: integer): string; -begin - result := inherited Strings[Index] -end; - -function TROVariantList.GetValues(const aName: string): Variant; -var - idx : integer; -begin - idx := IndexOf(aName); - if (idx>=0) then - result := PVariantItem(inherited Objects[idx])^.Value - else - result := Null; -end; - -procedure TROVariantList.SetValues(const aName: string; - const Value: Variant); -var - idx : integer; -begin - idx := IndexOf(aName); - if (idx>=0) then - PVariantItem(inherited Objects[idx])^.Value := Value - else - Add(aName, Value); -end; - -procedure TROVariantList.Clear; -var - i : integer; -begin - for i := 0 to (Count-1) do - Dispose(PVariantItem(inherited Objects[i])); - - inherited Clear; -end; - -procedure TROVariantList.Delete(Index: integer); -begin - Dispose(PVariantItem(Objects[Index])); - inherited Delete(Index); -end; - -procedure TROVariantList.SetValueNames(Index: integer; - const Value: string); -begin - inherited Strings[Index] := Value -end; - - -{ TROSession } - -constructor TROSession.Create(const aSessionID: TGUID); -begin - inherited Create; - - fValues := TROVariantList.Create; - fSessionID := aSessionID; - fCreated := Now; - fLastAccessed := Now; -end; - -destructor TROSession.Destroy; -begin - fValues.Free; - inherited; -end; - -function TROSession.GetCount: integer; -begin - result := fValues.Count -end; - -function TROSession.GetNames(Index: integer): string; -begin - result := fValues.ValueNames[Index] -end; - -function TROSession.GetValues(const Name: string): Variant; -begin - result := fValues.Values[Name] -end; - -procedure TROSession.SetNames(Index: integer; const Value: string); -begin - fValues.ValueNames[Index] := Value -end; - -procedure TROSession.SetValues(const Name: string; const Value: Variant); -begin - fValues[Name] := Value -end; - -procedure TROSession.LoadFromStream(aStream: TStream; OnlyValues : boolean = FALSE); -var - i : integer; - nme : string; - val : Variant; -begin - fValues.Clear; - - Check((aStream=NIL), 'Invalid stream'); - if (aStream.Size=0) then - Exit - else - aStream.Position := 0; - - if not OnlyValues then begin - fSessionID := StringToGUID(ReadVariantFromBinary(aStream)); - fCreated := ReadVariantFromBinary(aStream); - fLastAccessed := ReadVariantFromBinary(aStream); - end; - - val := ReadVariantFromBinary(aStream); - - for i := 0 to Integer(Val) -1 do begin - nme := ReadVariantFromBinary(aStream); - val := ReadVariantFromBinary(aStream); - - Values[nme] := val; - end; -end; - -procedure TROSession.SaveToStream(aStream: TStream; OnlyValues : boolean = FALSE); -var - i : integer; -begin - Check(aStream=NIL, 'Invalid stream'); - - aStream.Position := 0; - - if not OnlyValues then begin - WriteVariantToBinary(GUIDToString(fSessionID), aStream); - WriteVariantToBinary(fCreated ,aStream); - WriteVariantToBinary(fLastAccessed ,aStream); - end; - - WriteVariantToBinary(Count ,aStream); - - for i := 0 to (Count-1) do begin - WriteVariantToBinary(fValues.ValueNames[i], aStream); - WriteVariantToBinary(fValues.Items[i]^.Value, aStream); - end; -end; - -procedure TROSession.SaveStruct(aStruct: TROComplexType); -var - i : integer; -begin - if aStruct=NIL then Exit; - - for i := 0 to (aStruct.FieldCount-1) do begin - Values[aStruct.FieldName[i]] := aStruct.GetFieldValue(aStruct.FieldName[i]); - end; -end; - -{ TROCustomSessionManager } - -constructor TROCustomSessionManager.Create(aOwner: TComponent); -begin - inherited; - - fClearing := FALSE; - fMaxSessions := -1; - fCritical := TCriticalSection.Create; - fSessionChangesListeners := TInterfaceList.Create; - fSessionDuration := 15; - fSessionCheckInterval := 15; -end; - -destructor TROCustomSessionManager.Destroy; -begin - // Doesn't clear any sessions here. If the session manager is an in-memory one that is done by the - // in-memory session manager destroyer, if this is a DB or an event driver one it might be used in a cluster - // so we cannot assume other servers don't need this info. It's user's responsibility to clear the expired - // sessions. Worst case in a DB the sessions will be cleared the enxt time this server is started. - - KillTimer; - fSessionChangesListeners.Clear; - fSessionChangesListeners.Free; - fCritical.Free; - - inherited; -end; - -function TROCustomSessionManager.CheckSessionIsExpired(aSession: TROSession): boolean; -begin - result := DoCheckSessionIsExpired(aSession) -end; - -procedure TROCustomSessionManager.ClearSessions(OnlyExpired : boolean); -var - lRetry: Boolean; -begin - fCritical.Enter; - try - fClearing := TRUE; - lRetry := True; - while lRetry do begin - lRetry := False; - try - DoClearSessions(OnlyExpired); - except - on e: Exception do begin - if assigned(fOnException) then fOnException(EmptyGUID, e, lRetry); - if not lRetry then raise; - end; - end; - end; - finally - fClearing := FALSE; - fCritical.Leave; - end; -end; - -function TROCustomSessionManager.CreateSession(const aSessionID: TGUID): TROSession; -var - lRetry, lFail: Boolean; -begin - if (GetSessionCount>=MaxSessions) and (MaxSessions>0) then begin - lFail := true; - if assigned(fOnMaxSessionsReached) then fOnMaxSessionsReached(lFail); - if lFail then RaiseError(err_TooManySessions, [SessionDuration]); - end; - - Result := nil; - - lRetry := True; - while lRetry do begin - lRetry := False; - try - result := DoCreateSession(aSessionID); - except - on e: Exception do begin - if assigned(fOnException) then fOnException(aSessionID, e, lRetry); - if not lRetry then raise; - end; - end; - end; - DoNotifySessionsChangesListener(aSessionID, saAdd, nil); - - if Assigned(fOnSessionCreated) then fOnSessionCreated(result); -end; - -procedure TROCustomSessionManager.DeleteTemporarySession(var Session: TROSession); -var - id : TGUID; -begin - fInDeleteSession:=True; - try - id := Session.SessionID; - if Assigned(FOnBeforeDeleteSession) then FOnBeforeDeleteSession(id, FALSE); - - FreeAndNIL(Session); - - DoNotifySessionsChangesListener(id, saTmpSessionDelete, nil); - - if Assigned(fOnSessionDeleted) then fOnSessionDeleted(id, FALSE); - finally - fInDeleteSession:=False; - end; -end; - -procedure TROCustomSessionManager.DeleteSession(const aSessionID: TGUID; IsExpired : boolean); -var - lRetry: Boolean; -begin - fInDeleteSession:=True; - try - if Assigned(FOnBeforeDeleteSession) then FOnBeforeDeleteSession(aSessionID, IsExpired); - if not Clearing then fCritical.Enter; - try - lRetry := True; - while lRetry do begin - lRetry := False; - try - DoDeleteSession(aSessionID, IsExpired); - except - on e: Exception do begin - if assigned(fOnException) then fOnException(aSessionID, e, lRetry); - if not lRetry then raise; - end; - end; - end; - - DoNotifySessionsChangesListener(aSessionID, saDelete, nil); - if Assigned(fOnSessionDeleted) then fOnSessionDeleted(aSessionID, IsExpired); - finally - if not Clearing then fCritical.Leave; - end; - finally - fInDeleteSession:=False; - end; -end; - -function TROCustomSessionManager.DoCheckSessionIsExpired(aSession: TROSession): boolean; -var - elapsed : integer; -begin - elapsed := MinutesBetween(aSession.LastAccessed, Now); - result := (SessionDuration>0) and (elapsed>=SessionDuration); -end; - -function TROCustomSessionManager.DoCreateSession( - const aSessionID: TGUID): TROSession; -begin - result := NIL; - if Assigned(fOnCustomCreateSession) then fOnCustomCreateSession(aSessionID, result); - - if (result=NIL) then result := TROSession.Create(aSessionID); -end; - -function TROCustomSessionManager.GetSessionCount: integer; -var - lRetry: Boolean; -begin - lRetry := True; - Result := 0; - while lRetry do begin - lRetry := False; - try - fCritical.Enter; - try - result := DoGetSessionCount; - finally - fCritical.Leave; - end; - except - on e: Exception do begin - if assigned(fOnException) then fOnException(EmptyGUID, e, lRetry); - if not lRetry then raise; - end; - end; - end; -end; - -function TROCustomSessionManager.FindSession( - const aSessionID: TGUID; aUpdateTime: Boolean): TROSession; -var - lRetry: Boolean; -begin - lRetry := True; - Result := nil; - while lRetry do begin - lRetry := False; - try - fCritical.Enter; - try - result := DoFindSession(aSessionID, aUpdateTime); - finally - fCritical.Leave; - end; - except - on e: Exception do begin - if assigned(fOnException) then fOnException(aSessionID, e, lRetry); - if not lRetry then raise; - end; - end; - end; - - if not fInDeleteSession then - if (result<>NIL) and CheckSessionIsExpired(result) then begin - DeleteSession(aSessionID, TRUE); - raise EROSessionExpired.Create('Session '+GUIDToString(aSessionID)+' is expired'); - end; -end; - -procedure TROCustomSessionManager.ReleaseSession(var aSession: TROSession; NewSession : boolean); -var - id: TGUID; - lRetry: Boolean; -begin - inherited; - - if (aSession=NIL) then Exit; - - fCritical.Enter; - try - id := aSession.SessionID; - lRetry := True; - while lRetry do begin - lRetry := False; - try - DoReleaseSession(aSession, NewSession); - except - on e: Exception do begin - if assigned(fOnException) then fOnException(aSession.SessionID, e, lRetry); - if not lRetry then raise; - end; - end; - end; - aSession := nil; - finally - fCritical.Leave; - end; - DoNotifySessionsChangesListener(id, saRelease, nil); -end; - -procedure TROCustomSessionManager.DoTimerTick(CurrentTickCount: cardinal); -begin - ClearSessions(TRUE); // Clears expired sessions -end; - -procedure TROCustomSessionManager.KillTimer; -begin - if not (csDesigning in ComponentState) then begin - while Clearing do Sleep(100); // If it's clearing sessions we don't want to interfere - fTimer.Free; - fTimer := nil; - end; -end; - -procedure TROCustomSessionManager.DoReleaseSession(aSession: TROSession; NewSession : boolean); -begin - if (aSession<>NIL) then aSession.LastAccessed := Now; -end; - -procedure TROCustomSessionManager.Loaded; -begin - inherited; - SessionCheckInterval := fSessionCheckInterval; -end; - -procedure TROCustomSessionManager.RegisterSessionsChangesListener( - aListener: IROSessionsChangesListener); -begin - if fSessionChangesListeners.IndexOf(aListener) = -1 then fSessionChangesListeners.Add(aListener); -end; - -procedure TROCustomSessionManager.UnRegisterSessionsChangesListener( - aListener: IROSessionsChangesListener); -var - lIndex: Integer; -begin - lIndex := fSessionChangesListeners.IndexOf(aListener); - if lIndex <> -1 then fSessionChangesListeners.Delete(lIndex); -end; - -procedure TROCustomSessionManager.DoNotifySessionsChangesListener(const aSessionID : TGUID; aSessionAction: TROSessionsActions; Sender: TObject); -var - i: Integer; -begin - for i := 0 to fSessionChangesListeners.Count - 1 do begin - IROSessionsChangesListener(pointer(fSessionChangesListeners[i])).SessionsChangedNotification(aSessionID, aSessionAction, Sender); - end; -end; - -procedure TROCustomSessionManager.GetAllSessions(Dest: TStringList); -begin - fCritical.Enter; - try - DoGetAllSessions(Dest); - finally - fCritical.Leave; - end; -end; - -procedure TROCustomSessionManager.DoGetAllSessions(Dest: TStringList); -begin - // do nothing -end; - -procedure TROCustomSessionManager.SetSessionCheckInterval( - const Value: Integer); -begin - if not ((csDesigning in ComponentState) or (csLoading in ComponentState)) then begin - fTimer.Free; - fTimer := nil; - - if (Value>0) then fTimer := TROThreadTimer.Create(DoTimerTick, Value*60000); - end; - fSessionCheckInterval := Value; -end; - -{ TROEventSessionManager } -procedure TROEventSessionManager.DoClearSessions; -begin - if Assigned(fOnClearSessions) then fOnClearSessions(Self, OnlyExpired); -end; - -procedure TROEventSessionManager.DoDeleteSession(const aSessionID: TGUID; IsExpired : boolean); -begin - if Assigned(fOnDeleteSession) then fOnDeleteSession(aSessionID, IsExpired); -end; - -function TROEventSessionManager.DoGetSessionCount: integer; -begin - result := 0; - if Assigned(fOnGetSessionCount) then result := fOnGetSessionCount(Self); -end; - -function TROEventSessionManager.DoFindSession(const aSessionID: TGUID; aUpdateTime: Boolean): TROSession; -begin - result := nil; - if Assigned(fOnFindSession) then fOnFindSession(aSessionID, result); - if (result <> nil) and (aUpdateTime) then result.LastAccessed := Now; -end; - -procedure TROEventSessionManager.DoReleaseSession(aSession: TROSession; NewSession : boolean); -begin - inherited; - - if Assigned(fOnReleaseSession) then fOnReleaseSession(aSession, NewSession); -end; - -procedure TROEventSessionManager.DoGetAllSessions(Dest: TStringList); -begin - if assigned(fOnGetAllSessions) then fOnGetAllSessions(Self, Dest); -end; - -{ TROInMemorySessionManager } - -constructor TROInMemorySessionManager.Create(aOwner: TComponent); -begin - inherited; - - fSessionList := TStringList.Create; - fSessionList.Duplicates := dupError; - fSessionList.Sorted := TRUE; -end; - -destructor TROInMemorySessionManager.Destroy; -begin - KillTimer; - - // Clears all the sessions. This cannot be clustered so there's no point in keeping session info - ClearSessions(FALSE); - - fSessionList.Free; - - inherited; -end; - -procedure TROInMemorySessionManager.DoClearSessions(OnlyExpired: boolean); -var - i : integer; - lSessionID: TGUID; -begin - if OnlyExpired then begin - for i := (fSessionList.Count-1) downto 0 do - if CheckSessionIsExpired(TROSession(fSessionList.Objects[i])) then begin - lSessionID := TROSession(fSessionList.Objects[i]).SessionID; - DeleteSession(lSessionID, TRUE); - end; - end - else begin - for i := (fSessionList.Count-1) downto 0 do begin - lSessionID := TROSession(fSessionList.Objects[i]).SessionID; - DeleteSession(lSessionID, FALSE); - end; - end; -end; - -procedure TROInMemorySessionManager.DoDeleteSession( - const aSessionID: TGUID; IsExpired : boolean); -var idx : integer; -begin - idx := fSessionList.IndexOf(GUIDToString(aSessionID)); - - if (idx>=0) then begin - fSessionList.Objects[idx].Free; - fSessionList.Delete(idx); - end; -end; - -function TROInMemorySessionManager.DoGetSessionCount: integer; -begin - result := fSessionList.Count -end; - -function TROInMemorySessionManager.DoFindSession(const aSessionID: TGUID; aUpdateTime: Boolean): TROSession; -var idx : integer; -begin - result := nil; - idx := fSessionList.IndexOf(GUIDToString(aSessionID)); - if (idx>=0) then result := TROSession(fSessionList.Objects[idx]); - if (result <> nil) and (aUpdateTime) then result.LastAccessed := Now; -end; - -procedure TROInMemorySessionManager.DoReleaseSession(aSession: TROSession; NewSession : boolean); -var id : string; -begin - inherited; - - if NewSession then begin - id := GUIDToString(aSession.SessionID); - if fSessionList.IndexOf(id) = -1 then - fSessionList.AddObject(id, aSession) - else - aSession.Free; - end; -end; - -procedure TROInMemorySessionManager.DoGetAllSessions(Dest: TstringList); -var - i: Integer; - currSession: TROSession; -begin - for i := 0 to (fSessionList.Count-1) do begin - currSession := TROSession(fSessionList.Objects[i]); - if CheckSessionIsExpired(currSession) then Continue; - Dest.Add(GUIDToString(currSession.SessionID)); - end; -end; - -{ TROSessionList } -constructor TROSessionList.Create; -begin - inherited; - - fList := TStringList.Create; - fList.Duplicates := dupError; - fList.Sorted := true; -end; - - -destructor TROSessionList.Destroy; -begin - Clear; - FreeAndNIL(fList); - inherited; -end; - -procedure TROSessionList.Add(aSession: TROSession); -begin - fList.AddObject(GUIDToString(aSession.SessionID), aSession); -end; - -procedure TROSessionList.Clear; -var - i: integer; -begin - for i := (fList.Count-1) downto 0 do - Delete(i); -end; - -procedure TROSessionList.Delete(aIndex: integer); -begin - fList.Objects[aIndex].Free; - fList.Delete(aIndex); -end; - -function TROSessionList.GetCount: integer; -begin - result := fList.Count; -end; - -function TROSessionList.GetSessionIndex(aSessionId: TGUID): integer; -begin - result := fList.IndexOf(GUIDToString(aSessionId)) -end; - -function TROSessionList.GetSessions(Index: integer): TROSession; -begin - result := TROSession(fList.Objects[Index]); -end; - -function TROSessionList.SessionById(aSessionId: TGUID): TROSession; -var - idx: integer; -begin - idx := GetSessionIndex(aSessionId); - result := Sessions[idx]; -end; - -function TROSessionList.Add(aSessionId: TGUID): TROSession; -begin - result := TROSession.Create(aSessionId); - try - Add(result); - except - result.Free; - raise; - end; -end; - -initialization - RegisterExceptionClass(EROSessionNotFound); -finalization - UnregisterExceptionClass(EROSessionNotFound); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamSerializer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamSerializer.pas deleted file mode 100644 index fb7d435..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamSerializer.pas +++ /dev/null @@ -1,1050 +0,0 @@ -unit uROStreamSerializer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - - -{$I RemObjects.inc} - -{$IFDEF DOTNET} -{$MESSAGE error 'This unit will not be used in .NET, use RemObjects.SDK.StreamSerializer instead' } -{$ENDIF} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL}eDebugServer,{$ENDIF} - Classes, SysUtils, TypInfo, - uROTypes, uROSerializer, FMTBcd; - - -type - { TROStreamSerializer } - TROStreamSerializer = class(TROSerializer) - private - fStream : TStream; - - protected - procedure BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; - var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); override; - procedure EndWriteObject(const aName: string; aClass : TClass; anObject: TObject; const LevelRef : IUnknown); override; - procedure CustomWriteObject(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); override; - procedure CustomReadObject(const aName: string; aClass: TClass;var Ref; ArrayElementId: integer);override; - procedure BeginReadObject(const aName : string; aClass : TClass; var anObject : TObject; var LevelRef : IUnknown; - var IsValidType : boolean; ArrayElementId : integer = -1); override; - procedure EndReadObject(const aName : string; aClass : TClass; var anObject : TObject; const LevelRef : IUnknown); override; - Public - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); override; - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteXml(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteGuid(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteDecimal(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteException(const aName : string; const Ref; ArrayElementId : integer = -1); override; - - { Readers } - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - procedure Read(const aName : string; aTypeInfo : PTypeInfo; var Ptr; ArrayElementId : integer = -1); override; - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); override; - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadXml(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadDecimal(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadGuid(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1); override; - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - procedure ReadException(const aName : string; var Ref; ArrayElementId : integer = -1); override; - public - procedure SetStorageRef(aStorageRef:TStream); - constructor Create(aStorageRef:TStream); virtual; - - end; - - { binary structuire for streaming DateTime to BinMessage, starting with format version 1.0.7 } - TDateTimeStructure = packed record - Year:Word; - Month:Byte; - Day:Byte; - Hour:Byte; - Minute:Byte; - Seconds:Byte; - MiliSeconds:word; - end; - -procedure ObjectToStream(anObject : TROComplexType; aStream : TStream); -function StreamToObject(aStream : TStream) : TROComplexType; - -function StreamToVariant(Stream: TStream): {$IFDEF FPC}Variant;{$ELSE}OleVariant;{$ENDIF} -procedure VariantToStream(const Data: {$IFDEF FPC}Variant;{$ELSE}OleVariant;{$ENDIF} Stream: TStream); - -implementation - -uses - {$IFDEF DEBUG_REMOBJECTS}eDebugServer,{$ENDIF} - {$IFDEF FPC} Variants, {$ENDIF} - {$IFDEF VER140UP} {$IFNDEF FPC}Variants,{$ENDIF} DateUtils, {$ENDIF} - uRORes, uROClient, uROClientIntf, uROBinaryHelpers, uROClasses, - uROXMLIntf{$IFDEF LINUX}{$IFNDEF FPC}, ComObj{$ENDIF}{$ENDIF}; - - -function StreamToVariant(Stream: TStream): {$IFDEF FPC}Variant{$ELSE}OleVariant{$ENDIF}; -var p: Pointer; -begin - Result := VarArrayCreate([0, Stream.Size - 1], varByte); - p := VarArrayLock(Result); - try - Stream.Position := 0; //start from beginning of stream - Stream.ReadBuffer(p^, Stream.Size); - finally - VarArrayUnlock(Result); - end; -end; - -procedure VariantToStream(const Data: {$IFDEF FPC}Variant{$ELSE}OleVariant{$ENDIF}; Stream: TStream); -var p: Pointer; -begin - p := VarArrayLock(Data); - try - Stream.Write(p^, VarArrayHighBound(Data, 1) + 1); //assuming low bound = 0 - finally - VarArrayUnlock(Data); - end; -end; - -procedure ObjectToStream(anObject : TROComplexType; aStream : TStream); -var clsname : string; -begin - with TROStreamSerializer.Create(aStream) do try - clsname := anObject.ClassName; - - Write('', TypeInfo(string), clsname); - Write('', anObject.ClassInfo, anObject); - finally - Free; - end; -end; - -function StreamToObject(aStream : TStream) : TROComplexType; -var clsname : string; - cls : TROComplexTypeClass; -begin - result := nil; - with TROStreamSerializer.Create(aStream) do try - Read('', TypeInfo(string), clsname); - cls := FindROClass(clsname); - if (cls=NIL) then RaiseError(err_UnknownClass, [clsname]); - Read('', cls.ClassInfo, result); - finally - Free; - end; -end; - -{ TROStreamSerializer } - -constructor TROStreamSerializer.Create(aStorageRef: TStream); -begin - inherited Create(); - SetStorageRef(aStorageRef); -end; - -procedure TROStreamSerializer.SetStorageRef(aStorageRef: TStream); -begin - //result := TObject(aStorageRef) is TStream; - //if result then fStream := TStream(aStorageRef); - fStream := aStorageRef; -end; - -procedure TROStreamSerializer.EndReadObject(const aName: string; - aClass : TClass; var anObject: TObject; const LevelRef : IUnknown); -begin - inherited; - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.EndReadObject(name=%s, position before =$%x',[aName, fStream.Position]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} -end; - -procedure TROStreamSerializer.EndWriteObject(const aName: string; - aClass : TClass; anObject: TObject; const LevelRef : IUnknown); -begin - inherited; -end; - -procedure TROStreamSerializer.ReadDateTime(const aName: string; var Ref; ArrayElementId : integer = -1); -{var lDateTime:TDateTime absolute Ref; - lDateTimeStructure:TDateTimeStructure; - //m,d,h,n,s:Word;} -begin - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadDateTime(name=%s, position before =$%x, size=$%x',[aName, fStream.Position, SizeOf(TDateTime)]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - ReadDouble(aName,ftDouble,Ref,-1); - {fStream.Read(lDateTimeStructure, SizeOf(TDateTimeStructure)); - if not TryEncodeDateTime(lDateTimeStructure.Year, lDateTimeStructure.Month, lDateTimeStructure.Day, - lDateTimeStructure.Hour, lDateTimeStructure.Minute, lDateTimeStructure.Seconds, - lDateTimeStructure.MiliSeconds, lDateTime) then - RaiseError(err_InvalidDateTimeReadFromStream,[]);} -end; - -procedure TROStreamSerializer.ReadEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId : integer = -1); -var lInteger:Integer; -begin - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadEnumerated(name=%s, position before =$%x, size=$%x',[aName, fStream.Position, SizeOf(byte)]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - fStream.ReadBuffer(lInteger, SizeOf(integer)); - Byte(Ref) := Lo(lInteger); -end; - -procedure TROStreamSerializer.ReadDouble(const aName: string; - aFloatType: TFloatType; var Ref; ArrayElementId : integer = -1); -var sze : byte; - src : pointer; -begin - src := @Ref; - sze := 0; - case aFloatType of - ftSingle : sze := SizeOf(single); - ftDouble : sze := SizeOf(double); - ftExtended : sze := SizeOf(extended); - ftComp : sze := SizeOf(comp); - ftCurr :sze := SizeOf(currency); - end; - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadFloat(name=%s, position before =$%x, size=$%x',[aName, fStream.Position,sze]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - fStream.ReadBuffer(src^, sze); -end; - -procedure TROStreamSerializer.ReadInt64(const aName: string; var Ref; ArrayElementId : integer = -1); -begin - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadInt64(name=%s, position before =$%x, size=$%x',[aName, fStream.Position, SizeOf(Int64)]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - fStream.ReadBuffer(Ref, SizeOf(Int64)); -end; - -procedure TROStreamSerializer.ReadInteger(const aName: string; - anOrdType: TOrdType; var Ref; ArrayElementId : integer = -1); -var sze : byte; - src : pointer; -begin - src := @Ref; - sze := 0; - case anOrdType of - otSByte, - otUByte : sze := SizeOf(byte); - otSWord, - otUWord : sze := SizeOf(word); - otSLong, - otULong : sze := SizeOf(integer); - end; - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadInteger(name=%s, position before =$%x, size=$%x',[aName, fStream.Position,sze]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - fStream.ReadBuffer(src^, sze); -end; - -procedure TROStreamSerializer.ReadUTF8String(const aName: string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); -var sze : integer; -begin - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadString 1(name=%s, position before =$%x',[aName, fStream.Position]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - fStream.ReadBuffer(sze, SizeOf(sze)); - //ToDo: we need some code here to avoid hacker attachs with too long strings - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadString 2(name=%s, position before =$%x, size=$%x',[aName, fStream.Position,sze]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - if ((iMaxLength > -1) and (sze > iMaxLength)) or - (sze > fStream.Size) then - RaiseError(err_InvalidStringLength,[sze]); - - if (sze>0) then begin - SetLength(string(Ref), sze); - fStream.ReadBuffer(string(Ref)[1], sze); - end - else string(Ref) := ''; -end; - -procedure TROStreamSerializer.ReadWideString(const aName: string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); -var sze : integer; -begin - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadWideString 1(name=%s, position before =$%x',[aName, fStream.Position]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - fStream.ReadBuffer(sze, SizeOf(sze)); - - if ((iMaxLength > -1) and (sze > iMaxLength)) or - (sze*2 > fStream.Size) then - RaiseError(err_InvalidStringLength,[sze]); - - {$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - DebugServer.Write('TROStreamSerializer.ReadWideString 2(name=%s, position before =$%x, size=$%x, length=$%x',[aName, fStream.Position,sze,sze*2]); - {$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - - if (sze>0) then begin - SetLength(widestring(Ref), sze); - fStream.ReadBuffer(widestring(Ref)[1], sze*2); - end - else widestring(Ref) := ''; -end; - -procedure TROStreamSerializer.WriteDateTime(const aName: string; const Ref; ArrayElementId : integer = -1); -{var lDateTime:TDateTime absolute Ref; - lDateTimeStructure:TDateTimeStructure; - m,d,h,n,s:Word;} -begin - WriteDouble(aName,ftDouble,Ref,-1); - {DecodeDateTime(lDateTime,lDateTimeStructure.Year,m,d,h,n,s,lDateTimeStructure.MiliSeconds); - lDateTimeStructure.Month := m; - lDateTimeStructure.Day := d; - lDateTimeStructure.Hour := h; - lDateTimeStructure.Minute := n; - lDateTimeStructure.Seconds := s; - fStream.Write(lDateTimeStructure, SizeOf(TDateTimeStructure));} -end; - -procedure TROStreamSerializer.WriteEnumerated(const aName: string; anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId : integer = -1); -var lInteger:Integer; -begin - lInteger := Byte(Ref); - fStream.Write(lInteger, SizeOf(integer)); // TODO: check enums bigger than a byte! -end; - -procedure TROStreamSerializer.WriteDouble(const aName: string; - aFloatType: TFloatType; const Ref; ArrayElementId : integer = -1); -var sze : byte; - src : pointer; -begin - { ToDo: make sure a double is always marshaled in some .NET compatible format (IEEE). - Only differentiate between Double and Currency, convert all the rest to double. - Handle Currency as Int64. Also adjust WriteFloat appropriately. } - - src := @Ref; - sze := 0; - case aFloatType of - ftSingle : sze := SizeOf(single); - ftDouble : sze := SizeOf(double); - ftExtended : sze := SizeOf(extended); - ftComp : sze := SizeOf(comp); - ftCurr : sze := SizeOf(currency); - end; - - fStream.Write(src^, sze); -end; - -procedure TROStreamSerializer.WriteInt64(const aName: string; const Ref; ArrayElementId : integer = -1); -begin - fStream.Write(Ref, SizeOf(Int64)); -end; - -procedure TROStreamSerializer.WriteInteger(const aName: string; - anOrdType: TOrdType; const Ref; ArrayElementId : integer = -1); -var sze : byte; - src : pointer; -begin - { ToDo: make sure a Integer is always marshaled as Int32 } - - src := @Ref; - sze := 0; - case anOrdType of - otSByte, - otUByte : sze := SizeOf(byte); - otSWord, - otUWord : sze := SizeOf(word); - otSLong, - otULong : sze := SizeOf(integer); - end; - - fStream.Write(src^, sze); -end; - -procedure TROStreamSerializer.WriteUTF8String(const aName: string; const Ref; ArrayElementId : integer = -1); -var sze : integer; -begin - sze := Length(string(Ref)); - fStream.Write(sze, SizeOf(sze)); - if (sze>0) then fStream.Write(string(Ref)[1], sze); -end; - -procedure TROStreamSerializer.WriteWideString(const aName: string; - const Ref; ArrayElementId : integer = -1); -var sze : integer; -begin - sze := Length(widestring(Ref)); - fStream.Write(sze, SizeOf(sze)); - if (sze>0) then fStream.Write(widestring(Ref)[1], sze*2); -end; - -procedure TROStreamSerializer.BeginReadObject(const aName: string; aClass : TClass; var anObject: TObject; var LevelRef : IUnknown; var IsValidType : boolean; ArrayElementId : integer = -1); -var IsAssigned : ByteBool; - clsnme : string; - cnt : integer; - - lActualClass:TROComplexTypeClass; - struct: IROCustomStreamableClass; - -begin - //IsValidType := false; check if we need to init this!? - - inherited; - - //fStream.Read(IsAssigned, SizeOf(IsAssigned)); - - - { ToDo -omh: provide a hook here so the app can cleanly provide custom complx types to be used, instead of - relying on them being assigned by the caller (which is bad)) - - FindROClass should be ablt to provide this capability. } - - { ToDo -omh: MUCH this should be moved into common code in TROSerializer so ALL messages benbefit from it? } - - if Assigned(anObject) and (anObject.GetInterfaceEntry(IROCustomStreamableType) <> nil) then begin - if anObject.GetInterface(IROCustomStreamableArray, struct) then begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if IsAssigned then begin - ReadInteger('', otULong, cnt); - Struct.SetNull(false); - IROCustomStreamableArray(pointer(Struct)).Count := cnt; - end - else begin - struct.SetNull(true); - end; - IsValidType := True; - end - else if anObject.GetInterface(IROCustomStreamableStruct, struct) then begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if IsAssigned then begin - ReadUTF8String('', clsnme,-1,MAX_ITEM_NAME); - if not struct.CanImplementType(clsnme) then RaiseError(err_UnknownClassInStream,[clsnme,aClass.ClassName]); - Struct.SetNull(false); - Struct.TypeName := clsnme; - end - else begin - struct.SetNull(true); - end; - IsValidType := True; - end - else if anObject.GetInterface(IROCustomStreamableEnum, struct) then begin - IsValidType := True; - end; - end - else if aClass.InheritsFrom(TROArray) then begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if IsAssigned then begin - anObject := aClass.Create(); - ReadInteger('', otULong, cnt); - TROArray(anObject).Resize(cnt); - end; - IsValidType := true; - end - else if aClass.InheritsFrom(TStream) then begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if not Assigned (anObject) then begin - if IsAssigned then - anObject := TROBinaryMemoryStream.Create; - end - else begin - if IsAssigned then begin - (anObject as TStream).Seek(0, soFromBeginning); - (anObject as TStream).Size := 0; - end - else begin - anObject := nil; - end; - end; - IsValidType := TRUE; - end - else if Assigned(anObject) and aClass.InheritsFrom(EROException) then begin - // Doesn't need anything here. Just take the type as valid - IsValidType := TRUE; - end - else begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if IsAssigned then begin - {$IFDEF DEBUG_REMOBJECTS} - DebugServer.Write('fStream.Position before reading classname: $%x',[fStream.Position]); - {$ENDIF DEBUG_REMOBJECTS} - - if IsValidType then begin - ReadUTF8String('', clsnme,-1,MAX_ITEM_NAME); - - lActualClass := FindROClass(clsnme); - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[clsnme,aClass.ClassName]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[clsnme,aClass.ClassName]); - anObject := lActualClass.Create; - - end - else begin - RaiseError(str_InvalidClassTypeInStream,[clsnme]); - end; - end; - end; - - {$IFDEF DEBUG_REMOBJECTS} - DebugServer.Write('fStream.Position: %d',[fStream.Position]); - if anObject = nil then DebugServer.Write('anObject is nil') else DebugServer.Write('anObject is assigned'); - {$ENDIF DEBUG_REMOBJECTS} - -end; - -procedure TROStreamSerializer.BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; - var LevelRef : IUnknown; var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); -//var IsNIL : ByteBool; -var clsnme : string; - cnt : integer; - struct: IROCustomStreamableClass; - -begin - inherited; - - if Assigned(anObject) and (aClass.GetInterfaceEntry(IROCustomStreamableType) <> nil) then begin - if anObject.GetInterface(IROCustomStreamableClass, struct) then - IsAssigned := not struct.IsNull - else - IsAssigned := true; { non-class-based types, like enums, are always assigned } - end - else begin - IsAssigned := Assigned(anObject); - end; - - if IsAssigned then begin - if Assigned(anObject) and (anObject.GetInterfaceEntry(IROCustomStreamableType) <> nil) then begin - if anObject.GetInterface(IROCustomStreamableArray, struct) then begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - cnt := IROCustomStreamableArray(pointer(Struct)).Count; - WriteInteger('', otULong, cnt); - IsValidType := true; // Adds Custom Arrays as supported type - end - else if anObject.GetInterface(IROCustomStreamableStruct, struct) then begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - clsnme := struct.TypeName; - WriteUTF8String('', clsnme); - IsValidType := true; // Adds Custom structs as supported type - end - else if (anObject.GetInterfaceEntry(IROCustomStreamableEnum) <> nil) then begin - IsValidType := true; // Adds custom Enums as supported type. no header required. - end - end - else if aClass.InheritsFrom(TStream) then begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - clsnme := StreamClsName; - IsValidType := true; // Adds TStream as supported type - end - else if (anObject is TROArray) then begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - cnt := TROArray(anObject).Count; - WriteInteger('', otULong, cnt); - IsValidType := TRUE; // Adds Array as supported type - end - else if (anObject is EROException) then begin - // Doesn't need anything here. Just take the type as valid - IsValidType := TRUE; - end - else if IsValidType then begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - clsnme := anObject.ClassName; - WriteUTF8String('', clsnme); - end; - end - else begin - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - end; -end; - -procedure TROStreamSerializer.CustomReadObject(const aName: string; aClass : TClass; var Ref; ArrayElementId: integer); -var obj : TObject absolute Ref; - lSize:integer; -begin - inherited; - if Assigned(Obj) then begin - - if (obj is TMemoryStream) then begin - with TMemoryStream(obj) do begin // Created as TMemoryStream in BeginReadObject - ReadInteger('', otULong, lSize); - if lSize > 0 then begin - - if (lSize > fStream.Size) then - RaiseError(err_InvalidStringLength,[lSize]); - - SetSize(lSize); { don't set this until we have confirmed the stream size } - - if CopyFrom(fStream, lSize) <> lSize then - RaiseError(err_InvalidStringLength,[lSize]); - - Position := 0; - end - else begin - SetSize(0); - end; - end; - end; - - end; -end; - -procedure TROStreamSerializer.CustomWriteObject(const aName: string; aClass : TClass; const Ref; ArrayElementId : integer = -1); -var obj : TObject absolute Ref; - lSize:integer; -begin - inherited; - if Assigned(obj) then begin - - if (obj is TStream) then begin - with TStream(obj) do begin - lSize := Size; - fStream.Write(lSize, SizeOf(lSize)); - if lSize > 0 then begin - Position := 0; - fStream.CopyFrom(TStream(obj), lSize); - end; - end; - end; - - end; -end; - -{$IFDEF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} -procedure TROStreamSerializer.Read(const aName: string;aTypeInfo: PTypeInfo; var Ptr; ArrayElementId: integer); -begin - DebugServer.EnterMethod('TROStreamSerializer.Read("%s")',[aName]); - try try - DebugServer.WriteHexDump('Reading "'+aName+'" from message',fStream); - inherited; - except DebugServer.WriteException(); raise; end; - finally - DebugServer.ExitMethod('TROStreamSerializer.Read()'); - end; -end; -{$ENDIF DEBUG_REMOBJECTS_BINMESSAGE_LOWLEVEL} - -procedure TROStreamSerializer.ReadVariant(const aName: string; var Ref; ArrayElementId: integer); -var vtype, stringlen : integer; - - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortInt:shortint; - lSmallIntValue: smallint; - lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lDoubleValue:double; - lSingleValue:single; - lCurrencyValue:currency; - lString: string; -begin - fStream.ReadBuffer(vtype, SizeOf(integer)); - - { Array types } - if ((vtype and $2000)=$2000) then begin - case vtype of - $2011: Variant(Ref) := VariantBinaryFromBinary(fStream); - else Variant(Ref) := VariantArrayFromBinary(fStream, (vtype and $FFF)); - end; - Exit; // Done! - end; - - { Plain Types } - case vtype of - varEmpty:Variant(Ref) := Unassigned; - varNull:Variant(Ref) := Null; - varError:Variant(Ref) := EmptyParam; - {$IFNDEF DELPHI5} - varShortInt:begin - fStream.ReadBuffer(lShortInt, SizeOf(shortint)); - Variant(Ref) := lShortInt; - end; - varSmallInt,varWord : begin - fStream.ReadBuffer(lSmallIntValue, SizeOf(lSmallIntValue)); - Variant(Ref) := lSmallIntValue; - end; - {$ENDIF DELPHI5} - {$IFNDEF DELPHI5} - varLongWord, - {$ENDIF DELPHI5} - varInteger:begin - fStream.ReadBuffer(lIntegerValue, SizeOf(integer)); - Variant(Ref) := lIntegerValue; - end; - varSingle:begin - fStream.ReadBuffer(lSingleValue, SizeOf(single)); - Variant(Ref) := lSingleValue; - end; - varDouble:begin - fStream.ReadBuffer(lDoubleValue, SizeOf(double)); - Variant(Ref) := lDoubleValue; - end; - varCurrency:begin - fStream.ReadBuffer(lCurrencyValue, SizeOf(currency)); - Variant(Ref) := lcurrencyValue; - end; - varDate:begin - fStream.ReadBuffer(lDoubleValue, SizeOf(double)); - Variant(Ref) := TDateTime(lDoubleValue); - end; - varBoolean:begin - fStream.ReadBuffer(lByteValue, SizeOf(integer)); - Variant(Ref) := (lByteValue <> 0); - end; - varByte:begin - fStream.ReadBuffer(lByteValue, SizeOf(byte)); - Variant(Ref) := lByteValue; - end; - {$IFNDEF DELPHI5} - varInt64:begin - fStream.ReadBuffer(lInt64Value, SizeOf(Int64)); - Variant(Ref) := lInt64Value; - end; - {$ENDIF DELPHI5} - varString: begin - fStream.ReadBuffer(stringlen, SizeOf(integer)); - SetLength(lString, stringlen); - if (stringlen>0) - then fStream.ReadBuffer(lString[1], stringlen); - Variant(Ref) := lString; - end; - varOleStr: begin - fStream.ReadBuffer(stringlen, SizeOf(integer)); - SetLength(lString, stringlen); - if (stringlen>0) - then fStream.ReadBuffer(lString[1], stringlen); - Variant(Ref) := Utf8Decode(lString); - end; - else NotSupported(Format(err_UnsupportedVariantType, [VarType(vtype)])); - end; { case } -end; - -procedure TROStreamSerializer.WriteVariant(const aName: string; const Ref; - ArrayElementId: integer); -var vtype : integer; - varvalue : Variant; - - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortIntValue:shortint; - lSmallIntValue: Smallint; - lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lDoubleValue:double; - lSingleValue:single; - lCurrencyValue:currency; - lStringValue:string; -begin - varvalue := Variant(Ref); - vtype := VarType(Variant(Ref)); - - { Array types } - if ((vtype and $2000)=$2000) then begin - case vtype of - $2011: WriteVariantBinaryToBinary(varvalue, fStream); {8209; handle Array of Byte special. for now. } - else WriteVariantArrayToBinary(varvalue, fStream); - end; - Exit; // Done! - end; - - { Simple types } - case vtype of - varEmpty,varNull,varError:begin { 0, 1, A } - fStream.Write(vtype, SizeOf(integer)); - end; - {$IFNDEF DELPHI5} - varShortInt:begin { 2, 10, 12 } - lShortIntValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lShortIntValue, SizeOf(shortint)); - end; - varSmallInt,varWord : begin - lSmallIntValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lSmallIntValue, SizeOf(lSmallIntValue)); - end; - {$ENDIF DELPHI5} - {$IFNDEF DELPHI5}varLongWord,{$ENDIF DELPHI5} - varInteger:begin { 3, 13 } - lIntegerValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lIntegerValue, SizeOf(integer)); - end; - varSingle:begin { 4 } - lSingleValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lSingleValue, SizeOf(single)); - end; - varDouble, varDate:begin { 5, 7 } - lDoubleValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lDoubleValue, SizeOf(double)); - end; - varCurrency:begin { 6 } - lCurrencyValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lCurrencyValue, SizeOf(currency)); - end; - varBoolean:begin { B } - if varvalue then lByteValue := 1 else lByteValue := 0; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lByteValue, SizeOf(integer)); - end; - varByte:begin { 11 } - lByteValue := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lByteValue, SizeOf(byte)); - end; - {$IFNDEF DELPHI5} - varInt64:begin { 14 } - lInt64Value := varvalue; - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lInt64Value, SizeOf(Int64)); - end; - {$ENDIF DELPHI5} - varString:begin { 100 } - lStringValue := varvalue; - lIntegerValue := Length(lStringValue); - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lIntegerValue, SizeOf(integer)); - if (lIntegerValue>0) - then fStream.Write(lStringValue[1],lIntegerValue) - end; - varOleStr:begin { 8 } - lStringValue := Utf8Encode(varvalue); - lIntegerValue := Length(lStringValue); - fStream.Write(vtype, SizeOf(integer)); - fStream.Write(lIntegerValue, SizeOf(integer)); - if (lIntegerValue>0) - then fStream.Write(lStringValue[1],lIntegerValue) - end; - else NotSupported(Format(err_UnsupportedVariantType, [VarType(varvalue)])); - end; -end; - -procedure TROStreamSerializer.WriteXml(const aName : string; const Ref; ArrayElementId : integer = -1); -var - w: Utf8String; -begin - if IXmlNode(Ref) = nil then - W := '' - else - W := UTF8Encode(IXmlNode(Ref).XML); - WriteUTF8String(aname, w, ArrayElementId); -end; - -procedure TROStreamSerializer.ReadXml(const aName : string; var Ref; ArrayElementId : integer = -1); -var - w: Utf8String; - doc: IXMLDocument; -begin - ReadUTF8String(aName, w, ArrayElementID); - if w = '' then - IXMLNode(Ref) := nil - else begin - doc := NewROXmlDocument; - doc.New; - Doc.XML := w; - IXMLNode(Ref) := doc.DocumentNode; - end; -end; - -procedure TROStreamSerializer.WriteGuid(const aName: String; const Ref; ArrayElementId: Integer = -1); -var - g: TGuid; -begin - g := StringToGUID(TGuidString(Ref)); - fStream.Write(g, sizeof(g)); -end; - -procedure TROStreamSerializer.WriteDecimal(const aName: String; const Ref; ArrayElementId: Integer = -1); -var - dec: TDecimal; -begin - dec := VariantToDecimal(Variant(Ref)); - fStream.Write(dec, Sizeof(Dec)); -end; - -procedure TROStreamSerializer.ReadDecimal(const aName: String; var Ref; ArrayElementId: Integer = -1); -var - d: TDecimal; -begin - if fStream.Read(d, sizeof(d)) <> sizeof(d) then RaiseError(err_UnexpectedEndOfStream); - Variant(Ref) := DecimalToVariant(d); -end; - -procedure TROStreamSerializer.ReadGuid(const aName: String; var Ref; ArrayElementId: Integer = -1); -var - g: TGuid; -begin - if fStream.Read(g, sizeof(g)) <> sizeof(g) then RaiseError(err_UnexpectedEndOfStream); - string(Ref) := GUIDToString(g); -end; - -procedure TROStreamSerializer.WriteBinary(const aName: string; const Ref; - ArrayElementId: integer); -var - obj: Binary absolute Ref; - lSize: cardinal; - isAssigned: Byte; -begin - if Assigned(Obj) then IsAssigned := 1 else IsAssigned := 0; - fStream.WriteBuffer(isAssigned, SizeOf(IsAssigned)); - if isAssigned <> 0 then begin - lSize := obj.Size; - WriteInteger('',otULong, lSize); - if lSize > 0 then begin - obj.Position := 0; - fStream.CopyFrom(obj, lSize); - end; - end; -end; - -procedure TROStreamSerializer.ReadBinary(const aName: string; var Ref; - ArrayElementId: integer); -var - obj: Binary absolute Ref; - lSize: cardinal; - IsAssigned : ByteBool; -begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - if IsAssigned then begin - if not Assigned(obj) then obj := Binary.Create - else begin - obj.Seek(0, soFromBeginning); - obj.Size := 0; - end; - ReadInteger('', otULong, lSize); - if (lSize > fStream.Size) then RaiseError(err_InvalidStringLength,[lSize]); - obj.SetSize(lSize); { don't set this until we have confirmed the stream size } - if lSize > 0 then begin - if obj.CopyFrom(fStream, lSize) <> lSize then RaiseError(err_InvalidStringLength,[lSize]); - obj.Position := 0; - end; - end - else - obj:=nil; -end; - -function TROStreamSerializer.ReadArray(const aName: string; aClass: TClass; - var Ref; ArrayElementId: integer): Boolean; -var - obj: TROArray absolute Ref; - IsAssigned : ByteBool; - cnt : integer; -begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - Result:=IsAssigned; - if Result then begin - obj := TROArray(aClass.Create); - ReadInteger('', otULong, cnt); - obj.Resize(cnt); - obj.ReadComplex(self); - end - else - Obj:=nil; -end; - -function TROStreamSerializer.ReadStruct(const aName: string; - aClass: TClass; var Ref; ArrayElementId: integer): Boolean; -var - obj : TROComplexType absolute Ref; - IsAssigned : ByteBool; - clsnme : string; - lActualClass:TROComplexTypeClass; -begin - fStream.ReadBuffer(IsAssigned, SizeOf(IsAssigned)); - Result := IsAssigned; - if Result then begin - ReadUTF8String('', clsnme,-1,MAX_ITEM_NAME); - lActualClass := FindROClass(clsnme); - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[clsnme,aClass.ClassName]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[clsnme,aClass.ClassName]); - obj := lActualClass.Create; - obj.ReadComplex(self); - end - else - Obj:=nil; -end; - -procedure TROStreamSerializer.WriteArray(const aName: string; const Ref; - ArrayElementId: integer); -//var IsNIL : ByteBool; -var - obj : TROArray absolute Ref; - cnt : integer; - IsAssigned: Byte; -begin - if Assigned(Obj) then IsAssigned := 1 else IsAssigned := 0; - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - if isAssigned <> 0 then begin - cnt := obj.Count; - WriteInteger('', otULong, cnt); - obj.WriteComplex(Self); - end; -end; - -procedure TROStreamSerializer.WriteStruct(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : TROComplexType absolute Ref; - clsnme : string; - IsAssigned: byte; -begin - if Assigned(Obj) then IsAssigned := 1 else IsAssigned := 0; - fStream.Write(IsAssigned, SizeOf(IsAssigned)); - if isAssigned <> 0 then begin - clsnme := obj.ClassName; - WriteUTF8String('', clsnme); - obj.WriteComplex(Self); - end; -end; - -procedure TROStreamSerializer.ReadException(const aName: string; - var Ref; ArrayElementId: integer); -var - obj: EROException absolute Ref; -begin - if Assigned(obj) then EROException(obj).ReadException(Self); -end; - -procedure TROStreamSerializer.WriteException(const aName: string; - const Ref; ArrayElementId: integer); -var - obj: EROException absolute Ref; -begin - if Assigned(obj) then EROException(obj).WriteException(Self); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamUtils.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamUtils.pas deleted file mode 100644 index 425e6e5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROStreamUtils.pas +++ /dev/null @@ -1,382 +0,0 @@ -unit uROStreamUtils; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Provided by Nico Schoemaker (nico.schoemaker@teamro.remobjects.com) } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes, SysUtils; - -// String support routines for streams - -function Strm_HasHeader(aHeader: String; aStream: TStream): Boolean; -function Strm_PosFirst(aSubstr: string; aStream: TStream): Integer; -function Strm_PosLast(aSubstr: string; aStream: TStream): Integer; -function Strm_StrCount(aSubstr: string; aStream: TStream): Integer; -function Strm_StrRangeCount(aSubstr: string; StartPos,EndPos: Integer; aStream: TStream): Integer; -function Strm_StrAtPos(aSubstr: string; aPos: Integer; aStream: TStream): Boolean; -procedure Strm_InsertStr(aSubstr: string; aPos: Integer; aStream: TStream); -function Strm_StreamToStr(aStream: TStream): String; -function Strm_StreamRangeToStr(aStream: TStream; StartPos,EndPos: Integer): String; -function Strm_ReadPattern(aStream: TStream;aStartTag,aEndTag,aSeperator: String): TStringList; - -implementation - -uses - uROClasses; - -function Strm_HasHeader(aHeader: String;aStream: TStream): Boolean; -var Buffer: Char; - Cntr: Integer; - BufferS: String; - OldPos: Integer; -begin - result := false; - - if aHeader = '' then - Exit; - if not(Assigned(aStream)) then - Exit; - if Length(aHeader) > aStream.Size then - Exit; - - OldPos := aStream.Position; - aStream.Position := 0; - BufferS := ''; - - // Read the first x bytes from the string and compare against the headertag - for Cntr := 1 to Length(aHeader) do - begin - aStream.Read(Buffer,1); - BufferS := BufferS + Buffer; - end; - result := BufferS = aHeader; - - aStream.Position := OldPos; -end; - -function Strm_PosFirst(aSubstr: string; aStream: TStream): Integer; -var Buffer: Char; - BufS: String; - i,x: Integer; - pos: Integer; - oldpos: Integer; - lenS: Integer; -begin - result := -1; - - if aSubstr = '' then - Exit; - if not(Assigned(aStream)) then - Exit; - - lenS := Length(aSubstr); - - if lenS > aStream.Size then - Exit; - - oldpos := aStream.Position; - aStream.Position := 0; - pos := 0; - - for i := 0 to aStream.Size-1 do - begin - - // Avoid reading beyond the stream size - if (aStream.Position+lenS) > aStream.Size then - Break; - - BufS := ''; - - // Read x bytes at once into the buffer to make a compare - for x := 1 to lenS do - begin - aStream.Read(Buffer,1); - BufS := BufS + Buffer; - end; - - if UpperCase(BufS) = UpperCase(aSubstr) then - begin - result := pos; - break; - end; - - inc(pos); - aStream.Position := pos; - end; - - aStream.Position := oldpos; -end; - -function Strm_PosLast(aSubstr: string; aStream: TStream): Integer; -var lenS: Integer; - spos: Integer; -begin - result := -1; - - if aSubstr = '' then - Exit; - if not(Assigned(aStream)) then - Exit; - - lenS := Length(aSubstr); - spos := Strm_PosFirst(aSubstr,aStream); - - if spos <> -1 then - begin - result := spos + lenS-1; - end; -end; - -function Strm_StrAtPos(aSubstr: string; aPos: Integer; aStream: TStream): Boolean; -var Buffer: Char; - BufS: String; - OldPos: Integer; - i: Integer; - lenS: Integer; -begin - result := false; - - if not(Assigned(aStream)) then - Exit; - if aSubstr = '' then - Exit; - lenS := Length(aSubstr); - if (aPos < 0) or ((aPos+lenS) > (aStream.Size)) then - Exit; - if lenS > aStream.Size then - Exit; - - oldpos := aStream.Position; - aStream.Position := aPos; - - for i := 1 to lenS do - begin - aStream.Read(Buffer,1); - BufS := BufS + Buffer; - end; - - result := UpperCase(BufS) = UpperCase(aSubstr); - - aStream.Position := OldPos; -end; - -function Strm_StrCount(aSubstr: string; aStream: TStream): Integer; -var OldPos: Integer; - i: Integer; - lenS: Integer; -begin - result := 0; - - if not(Assigned(aStream)) then - Exit; - if aSubstr = '' then - Exit; - lenS := Length(aSubstr); - if lenS > aStream.Size then - Exit; - - oldpos := aStream.Position; - - for i := 0 to aStream.Size-1 do - begin - if (aStream.Position+lenS) > (aStream.Size) then - Break; - - aStream.Position := i; - if Strm_StrAtPos(aSubstr, aStream.Position, aStream) then - Inc(Result); - end; - - aStream.Position := OldPos; -end; - - -function Strm_StrRangeCount(aSubstr: string; StartPos,EndPos: Integer; aStream: TStream): Integer; -var OldPos: Integer; - i: Integer; - lenS: Integer; -begin - result := 0; - - if not(Assigned(aStream)) then - Exit; - if aSubstr = '' then - Exit; - - lenS := Length(aSubstr); - if lenS > aStream.Size then - Exit; - - if (StartPos < 0) or ((StartPos+lenS) > (aStream.Size)) then - Exit; - if (EndPos < 0) or ((EndPos+lenS) > (aStream.Size)) then - Exit; - if (EndPos < StartPos) or (EndPos = StartPos) then - Exit; - if (StartPos+(lenS-1)) >= EndPos then - Exit; - - oldpos := aStream.Position; - - for i := StartPos to EndPos do - begin - aStream.Position := i; - if Strm_StrAtPos(aSubstr,i,aStream) then - Inc(Result); - if (i+(lenS-1)) > EndPos then - Break; - end; - - aStream.Position := OldPos; -end; - -function Strm_ReadPattern(aStream: TStream;aStartTag,aEndTag,aSeperator: String): TStringList; -var Buffer: Char; - BufS: String; - OldPos: Integer; - lenST,PosST: Integer; - lenET,PosET: Integer; - lenSP: Integer; -begin - result := TStringList.Create; - - if not(Assigned(aStream)) then - Exit; - - if aStartTag = '' then - Exit; - if aEndTag = '' then - Exit; - if aSeperator = '' then - Exit; - - - oldpos := aStream.Position; - lenST := Length(aStartTag); - lenET := Length(aEndTag); - lenSP := Length(aSeperator); - - PosST := Strm_PosFirst(aStartTag,aStream); - if (PosST+lenST+lenSP+lenET) >= aStream.Size then - Exit; - - PosET := Strm_PosFirst(aEndTag,aStream); - if (PosET < PosST+lenST+lenSP) then - Exit; - - // Start 1 byte after the starttag, include start of endtag - aStream.Position := (PosST+lenST); - BufS := ''; - while aStream.Position < PosET do - begin - if Strm_StrAtPos(aSeperator,aStream.Position,aStream) then - begin - // advance position 1 byte after the seperator - aStream.Position := aStream.Position + lenSP; - if BufS <> '' then - begin - Result.Add(BufS); - BufS := ''; - end; - end; - - if Strm_StrAtPos(aEndTag,aStream.Position,aStream) then - Break; - - aStream.Read(Buffer,1); - BufS := BufS + Buffer; - end; - - - aStream.Position := OldPos; -end; - -function Strm_StreamToStr(aStream: TStream): String; -var OldPos: Integer; -begin - result := ''; - if not(Assigned(aStream)) then - Exit; - - OldPos := aStream.Position; - aStream.Position := 0; - - SetLength(result, aStream.Size); - if (aStream.Size>0) - then aStream.Read(result[1], aStream.Size); - - aStream.Position := OldPos; -end; - -function Strm_StreamRangeToStr(aStream: TStream; StartPos,EndPos: Integer): String; -var Buffer: Char; - OldPos: Integer; - i: Integer; -begin - result := ''; - - if not(Assigned(aStream)) then - Exit; - - OldPos := aStream.Position; - - if (StartPos < 0) or (StartPos >= EndPos) then - Exit; - if (StartPos >= aStream.Size-1) or (EndPos > aStream.Size-1) then - Exit; - - aStream.Position := 0; - - for i := StartPos to EndPos do - begin - aStream.Read(buffer,1); - Result := Result + Buffer; - end; - - aStream.Position := OldPos; -end; - - -procedure Strm_InsertStr(aSubstr: string; aPos: Integer; aStream: TStream); -var Buffer: Char; - BufS: String; - OldPos: Integer; - i: Integer; -begin - if not(Assigned(aStream)) then - Exit; - if aSubstr = '' then - Exit; - - if (aPos > (aStream.Size-1)) then - raise EROException.Create('Strm_InsertStr: invalid position '+IntToStr(aPos)); - - oldpos := aStream.Position; - BufS := Strm_StreamToStr(aStream); - Insert(aSubstr,BufS,aPos+1); - aStream.Position := 0; - - for i := 1 to Length(BufS) do - begin - buffer := BufS[i]; - aStream.Write(buffer,1); - end; - - aStream.Position := OldPos; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPChannel.pas deleted file mode 100644 index c85225d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPChannel.pas +++ /dev/null @@ -1,861 +0,0 @@ -unit uROSuperTCPChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface -uses - SysUtils, Classes, uROClasses, uROClient, uROClientIntf, SyncObjs, - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} uROAsync, - {$IFDEF RemObjects_UseEncryption} uRoEncryption, {$ENDIF} - IdTCPConnection, IdTCPClient, {$IFDEF WIN32}Windows, {$ENDIF}uROSCHelpers, uROThreadPool; - -type - TROCustomSuperTCPChannel = class; - TROSCClientWorker = class; - TROWaitingRequest = class - private - fEvent: TROEvent; - fFreeEvent: Boolean; - fId: Integer; - fResultData: TStream; - fResultErrorCode: Integer; - public - property Id: Integer read fId; - property Event: TROEvent read fEvent; - property Resultdata: TStream read fResultData write fResultData; - property ResultErrorCode: Integer read fResultErrorCode write fResultErrorCode; - - constructor Create(Id: Integer); overload; - constructor Create(Id: Integer; Ev: TROEvent); overload; - destructor Destroy; override; - end; - - TROPooledEvent = class(TInterfacedObject, IROThreadPoolCallback) - private - fData: TStream; - fOwner: TROCustomSuperTCPChannel; - protected - procedure Callback(Caller: TROThreadPool; Thread: TThread); - public - constructor Create(aData: TStream; aOwner: TROCustomSuperTCPChannel); - destructor Destroy; override; - end; - TROSCState = (scNotConnected, scConnecting, scConnected, scReconnecting); - TROCustomSuperTcpChannel = class(TROTransportChannel, IROTransport, - IROTCPTransport, IROActiveEventChannel, IROMultiThreadAwareChannel, - IROAsyncTransportChannel, IROActiveAsyncTransportChannel, IROTransportChannelEx) - private - fRequestTimeout: Integer; - fState: TROSCState; - fHost: string; - fPort: Integer; - fConnection: TIdTCPClient; - fActive: Boolean; - fOwnsEventThreadPool: Boolean; - fEventThreadPool: TROThreadPool; - fClient: TROSCClientWorker; - fWorkerThread: TThread; - fWaitingRequests: TThreadList; - fAutoReconnect: Boolean; - fEventReceiver: IROEventReceiver; - fConnectEvent: TROEvent; - fReconnectEvent: TROEvent; - fOnDisconnected: TNotifyEvent; - fOnConnected: TNotifyEvent; - fReconnectDelay: Integer; - fStoreActive: Boolean; - fPingSecs: Integer; - fAckWaitTimeout: Integer; - fIdleTimeoutMinutes: Integer; - fSynchronizeEvents: Boolean; - fConnectionWaitTimeout: Integer; - procedure SetHost(const Value: string); - procedure SetPort(const Value: Integer); - procedure SetActive(const Value: Boolean); - procedure SetEventThreadPool(const Value: TROThreadPool); - function GetClientID: TGUID; - procedure SetClientID(const Value: TGUID); - function GetMaxPackageSize: Longint; - procedure SetMaxPackageSize(val: longint); - function GetConnected: Boolean; - function GetSkipAck: Boolean; - procedure SetSkipAck(const Value: Boolean); - procedure SetPingSecs(const Value: Integer); - protected - procedure Loaded; override; - function GetClientAddress: String; - function GetTransportObject: TObject; override; - - procedure HasData(Id: Integer; aData: TStream); - procedure BeforeDispatch(aMessage: IROMessage); override; - procedure IntDispatch(aRequest, aResponse : TStream); override; - procedure IntSetServerLocator(aServerLocator: TROServerLocator); override; - procedure RegisterEventReceiver(aReceiver: IROEventReceiver); - procedure UnregisterEventReceiver(aReceiver: IROEventReceiver); - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - function InvokeRequest(aRequest: TStream; aGetResponse: Boolean = True; - aEvent: TROEvent = nil): String; overload; - function InvokeRequest(aRequest:TStream; iGetResponse:boolean=true):string; overload; - function CheckStatus(const iMessageID: String): Boolean; - procedure RetrieveResponse(const iMessageID: String; - aResponse: TStream); - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - procedure WaitForActive(const Timeout: Integer); - - property Host: string read fHost write SetHost; - property Port: Integer read fPort write SetPort default 8095; - property PingSecs: Integer read fPingSecs write SetPingSecs default 60; - property StoreActive: Boolean read fStoreActive write fStoreActive default True; - property Active: Boolean read fActive write SetActive stored fStoreActive default False; - property Client: TIdTCPClient read fConnection; - property RequestTimeout: Integer read fRequestTimeout write fRequestTimeout default 60000; - property EventThreadPool: TROThreadPool read fEventThreadPool write SetEventThreadPool; - property AutoReconnect: Boolean read fAutoReconnect write fAutoReconnect default False; - property ReconnectDelay: Integer read fReconnectDelay write fReconnectDelay default 500; - property ClientID: TGUID read GetClientID write SetClientID; - property OnDisconnected: TNotifyEvent read fOnDisconnected write fOnDisconnected; - property MaxPackageSize: Integer read GetMaxPackageSize write SetMaxPackageSize default 1024*1024; - property OnConnected: TNotifyEvent read fOnConnected write fOnConnected; - property AckWaitTimeout: Integer read fAckWaitTimeout write fAckWaitTimeout default 10000; - property Connected: Boolean read GetConnected; - property IdleTimeoutMinutes: Integer read fIdleTimeoutMinutes write fIdleTimeoutMinutes default 0; // minutes - property SynchronizeEvents: Boolean read fSynchronizeEvents write fSynchronizeEvents default False; - property ConnectionWaitTimeout: Integer read fConnectionWaitTimeout write fConnectionWaitTimeout default 10000; - property SkipAck: Boolean read GetSkipAck write SetSkipAck default false; - end; - - TROSuperTcpChannel = class(TROCustomSuperTcpChannel) - public - published - property Host; - property Port; - property Active; - property RequestTimeout; - property AutoReconnect; - property ReconnectDelay; - property OnDisconnected; - property OnConnected; - property StoreActive; - property MaxPackageSize; - property AckWaitTimeout; - property SynchronizeEvents; - property ConnectionWaitTimeout; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property SkipAck; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - - TROSCClientWorker = class(TROSuperChannelWorker) - private - fOwner: TROCustomSuperTCPChannel; - fSkipReconnect: Boolean; - protected - procedure Connected; override; - procedure Disconnected(var RestartLoop: Boolean); override; - procedure IncomingData(Id: Integer; aData: TStream); override; - procedure Idle; override; - procedure SetAckDetails(Id: Integer; Oke: Boolean; ErrorNo: Integer); override; - public - constructor Create(aOwner: TROCustomSuperTCPChannel; aConnection: TIdTCPConnection); - property Owner: TROCustomSuperTCPChannel read fOwner; - end; - -implementation - -type - TROClientThread = class(TThread) - private - fChannel: TROSCClientWorker; - fConnecting: Boolean; - protected - procedure Execute; override; - public - constructor Create(aChannel: TROSCClientWorker); - property Connecting: Boolean read fConnecting; - end; - -{ TROCustomSuperTCPChannel } - -procedure TROCustomSuperTcpChannel.BeforeDispatch(aMessage: IROMessage); -begin - inherited; - if not fConnection.Connected then - begin - SetActive(true); - end; - fReconnectEvent.SetEvent; - if fConnectEvent.WaitFor(fConnectionWaitTimeout) <> wrSignaled then raise EROException.Create('No connection available'); - if aMessage <> nil then - aMessage.ClientID := fClient.ClientId; -end; - -function TROCustomSuperTcpChannel.CheckStatus( - const iMessageID: String): Boolean; -var - i, id: Integer; - lList: TList; - lReq: TROWaitingRequest; -begin - Result := False; - id := StrToInt(iMessageID); - lList := fWaitingRequests.LockList; - try - for i := lList.Count -1 downto 0 do begin - lReq := TROWaitingRequest(lList[i]); - if Lreq.Id = id then - begin - Result := (lReq.Resultdata <> nil) or (lReq.ResultErrorCode <> -1); - exit; - end; - end; - finally - fWaitingRequests.UnlockList; - end; -end; - -constructor TROCustomSuperTCPChannel.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - fConnectEvent := TROEvent.create(nil, true, false, ''); - fReconnectEvent := TROEvent.Create(nil, true, false, ''); - - fPingSecs := 60; - fWaitingRequests := TThreadList.Create; - fHost := 'localhost'; - fPort := 8095; - fConnection := TIdTCPClient.Create(nil); - fClient := TROSCClientWorker.Create(Self, fConnection); - fRequestTimeout := 60000; - fAckWaitTimeout := 10000; - fReconnectDelay := 500; - fConnectionWaitTimeout := 10000; - fStoreActive := True; - ThreadSafe := True; -end; - - -destructor TROCustomSuperTCPChannel.Destroy; -begin - SetActive(False); - fClient.Free; - fConnection.Free; - fWaitingRequests.Free; - fConnectEvent.Free; - if fOwnsEventThreadPool then - begin - fEventThreadPool.Free; - end; - fEventReceiver := nil; - fReconnectEvent.Free; - inherited Destroy; -end; - -function TROCustomSuperTCPChannel.GetClientAddress: String; -begin -{$IFDEF REMOBJECTS_INDY8} - if (fConnection.Binding <> nil) and (fConnection.Binding <> nil) then - Result := fConnection.Binding.PeerIP - else - Result := ''; -{$ELSE} - if (fConnection.Socket <> nil) and (fConnection.Socket.Binding <> nil) then - Result := fConnection.Socket.Binding.PeerIP - else - Result := ''; -{$ENDIF} -end; - -function TROCustomSuperTcpChannel.GetClientID: TGUID; -begin - Result := fClient.ClientID; -end; - -function TROCustomSuperTcpChannel.GetConnected: Boolean; -begin - result := fClient.IsConnected; -end; - -function TROCustomSuperTcpChannel.GetMaxPackageSize: Longint; -begin - result := fClient.MaxPackageSize; -end; - -function TROCustomSuperTcpChannel.GetSkipAck: Boolean; -begin - result := fClient.SkipAck; -end; - -function TROCustomSuperTCPChannel.GetTransportObject: TObject; -begin - Result := self; -end; - -procedure TROCustomSuperTCPChannel.HasData(Id: Integer; aData: TStream); -var - lList: TList; - i: Integer; - lReq: TROWaitingRequest; - lEvent: TROPooledEvent; - lEventIntf: IROThreadPoolCallback; -begin - if Id < 0 then // got an event - begin - if fEventThreadPool = nil then raise EROException.Create('No thread pool assigned'); - lEvent := TROPooledEvent.Create(aData, Self); - lEventIntf := lEvent; - try - fEventThreadPool.QueueItem(lEventIntf); - except - lEvent.fData := nil; - raise; - end; - end else - begin - lList := fWaitingRequests.LockList; - try - lReq := nil; - for i := lList.Count -1 downto 0 do - begin - if TROWaitingRequest(lList[i]).Id = Id then - begin - lReq := TROWaitingRequest(lList[i]); - break; - end; - end; - if lReq = nil then - begin - // Don't want a response - aData.Free; - exit; - end; - lReq.Resultdata := aData; - lReq.Event.SetEvent; - finally - fWaitingRequests.UnlockList; - end; - end; -end; - -procedure TROCustomSuperTCPChannel.IntDispatch(aRequest, - aResponse: TStream); -var - lId: Integer; - lReq: TROWaitingRequest; -begin -// if (not fActive) then raise EROException.Create('Not connected'); - lId := fClient.GenerateId; - lReq := TROWaitingRequest.Create(lId); - fWaitingRequests.Add(lReq); - try - TROSCClientWorker.WaitForAck(fClient.SendPackage(aRequest, lId), fAckWaitTimeout); - try - lReq.Event.WaitFor(fRequestTimeout); - finally - fWaitingRequests.Remove(lReq); - end; - if lReq.Resultdata = nil then begin - case lReq.fResultErrorCode of - ScCmdNoAck_MsgTooLarge: raise EROException.Create('Message from server too large'); - ScCmdNoAck_QueueFull: raise EROException.Create('Server queue full'); - else raise EROTimeout.Create('Timeout waiting for response'); - end; - end; - lReq.Resultdata.Seek(0, soFromBeginning); - aResponse.CopyFrom(lReq.Resultdata, lReq.Resultdata.Size); - finally - lReq.Free; - end; -end; - -procedure TROCustomSuperTCPChannel.IntSetServerLocator( - aServerLocator: TROServerLocator); -begin - Host := aServerLocator.Host; - Port := aServerLocator.Port; -end; - -function TROCustomSuperTcpChannel.InvokeRequest(aRequest: TStream; - aGetResponse: Boolean; aEvent: TROEvent): String; -var - lId: Integer; - lReq: TROWaitingRequest; -begin - lId := fClient.GenerateId; - if aGetResponse then begin - if aEvent = nil then - lReq := TROWaitingRequest.Create(lId) - else - lReq := TROWaitingRequest.Create(lId, aEvent); - - fWaitingRequests.Add(lReq); - end; - fClient.SendPackage(aRequest, lId); - Result := IntToStr(lId); - aRequest.Free; // needs to be freed here -end; - -function TROCustomSuperTcpChannel.InvokeRequest(aRequest: TStream; - iGetResponse: boolean): string; -begin - Result := InvokeRequest(aRequest, iGetResponse, nil); -end; - -procedure TROCustomSuperTCPChannel.Loaded; -begin - inherited; - if fActive then - begin - fActive := false; - SetActive(true); - end; -end; - -procedure TROCustomSuperTcpChannel.Notification(AComponent: TComponent; - Operation: TOperation); -var - dummy: IROEventReceiver; -begin - if (Operation = opRemove) then - begin - if (AComponent = fEventThreadPool) then - fEventThreadPool := nil; - if Supports(aComponent, IROEventReceiver, dummy) and (dummy = fEventReceiver) then - fEventReceiver := nil; - end; - inherited; -end; - -procedure TROCustomSuperTcpChannel.RegisterEventReceiver( - aReceiver: IROEventReceiver); -begin - if assigned(fEventReceiver) then - TComponent(fEventReceiver.GetObject).RemoveFreeNotification(Self); - fEventReceiver := aReceiver; - if assigned(fEventReceiver) then - TComponent(fEventReceiver.GetObject).FreeNotification(Self); -end; - -procedure TROCustomSuperTcpChannel.RetrieveResponse( - const iMessageID: String; aResponse: TStream); -var - i, id: Integer; - lList: TList; - lReq: TROWaitingRequest; - -begin - id := STrToInt(iMessageID); - lList := fWaitingRequests.LockList; - try - lReq := nil; - for i := lList.Count -1 downto 0 do begin - lReq := TROWaitingRequest(lList[i]); - if Lreq.Id = id then - break - else lReq := nil; - end; - finally - fWaitingRequests.UnlockList; - end; - if lReq = nil then - raise EROTimeout.Create('Unknown response id '+iMessageID); - - try - if lReq.fEvent <> nil then - lReq.fEvent.WaitFor(fRequestTimeout); - if lReq.fResultData = nil then begin - case lReq.ResultErrorCode of - ScCmdNoAck_MsgTooLarge: raise EROException.Create('Message from server too large'); - ScCmdNoAck_QueueFull: raise EROException.Create('Server queue full'); - else raise EROTimeout.Create('Timeout waiting for response'); - end; - end; - lREq.Resultdata.Seek(0, soFromBeginning); - {$IFDEF RemObjects_UseEncryption} - if Encryption.EncryptionMethod <> tetNone then - DoDecryption(lReq.Resultdata, aResponse) - else - {$ENDIF} - aResponse.CopyFrom(lReq.Resultdata, lReq.Resultdata.Size); - aResponse.Seek(0, soFromBeginning); - finally - fWaitingRequests.Remove(lReq); - lReq.Free; - end; -end; - -procedure TROCustomSuperTCPChannel.SetActive(const Value: Boolean); -var - fw: TThread; -begin - if (fActive = value) then begin - if not fActive or (fState <> scNotConnected) then - Exit; - end; - fActive := value; - if ComponentState * [csLoading] = [] then - begin - if (fWorkerThread <> nil) then - begin - fw := fWorkerThread; - fWorkerThread := nil; - fClient.Disconnect; - TROClientThread(fw).Terminate; - fw.WaitFor; - FreeAndNil(fw); - fState := scNotConnected; - end; - if fEventThreadPool = nil then - begin - EventThreadPool := TROThreadPool.Create(nil); - fOwnsEventThreadPool := true; - end; - if fActive then - begin - fReconnectEvent.SetEvent; - fConnectEvent.ResetEvent; - fState := scConnecting; - fWorkerThread := TROClientThread.Create(fClient); - end; - end; -end; - -procedure TROCustomSuperTcpChannel.SetClientID(const Value: TGUID); -begin - fClient.ClientID := Value; -end; - -procedure TROCustomSuperTcpChannel.SetEventThreadPool( - const Value: TROThreadPool); -begin - if fOwnsEventThreadPool then - begin - fEventThreadPool.Free; - fOwnsEventThreadPool := false; - end; - fEventThreadPool := Value; -end; - -procedure TROCustomSuperTCPChannel.SetHost(const Value: string); -begin - if fActive and (csLoading in ComponentState) then - raise Exception.Create('Client is active'); - fHost := value; -end; - -procedure TROCustomSuperTcpChannel.SetMaxPackageSize(val: Integer); -begin - fClient.MaxPackageSize := Val; -end; - -procedure TROCustomSuperTcpChannel.SetPingSecs(const Value: Integer); -begin - if (Value < 10) or (Value > 60) then raise Exception.Create('PingSecs has to be between 10 and 60'); - fPingSecs := Value; -end; - -procedure TROCustomSuperTCPChannel.SetPort(const Value: Integer); -begin - if fActive and (csLoading in ComponentState) then - raise Exception.Create('Client is active'); - fPort := Value; -end; - -procedure TROCustomSuperTcpChannel.SetSkipAck(const Value: Boolean); -begin - fClient.SkipAck := Value; -end; - -procedure TROCustomSuperTcpChannel.UnregisterEventReceiver( - aReceiver: IROEventReceiver); -begin - if assigned(fEventReceiver) then - TComponent(fEventReceiver.GetObject).RemoveFreeNotification(Self); - fEventReceiver := nil; -end; - -type - TROSBEventTrigger = class(TInterfacedObject, IROThreadPoolCallback) - private - fEvent: TNotifyEvent; - fSender: TObject; - procedure Execute; - public - constructor Create(aSender: TObject; aEvent: TNotifyEvent); - procedure Callback(Caller: TROThreadPool; aThread: TThread); - end; - -procedure TROCustomSuperTcpChannel.WaitForActive(const Timeout: Integer); -begin - SetActive(true); - if fConnectEvent.WaitFor(Timeout) <> wrSignaled then raise EROException.Create('No connection available'); -end; - -{ TROSCClientWorker } - -procedure TROSCClientWorker.Connected; -begin - inherited; - fOwner.fState := scConnected; - fOwner.fConnectEvent.SetEvent; - if assigned(fOwner.fOnConnected) then begin - if fOwner.fSynchronizeEvents then - fOwner.fEventThreadPool.QueueItem(TROSBEventTrigger.Create(fOwner, fOwner.fOnconnected)) - else - fOwner.fOnconnected(fOwner); - end; -end; - -constructor TROSCClientWorker.Create(aOwner: TROCustomSuperTCPChannel; - aConnection: TIdTCPConnection); -begin - fOwner := aOwner; - inherited Create(aConnection); - PingFrequency := fOwner.fPingSecs; - PingTimeout := PingFrequency * 15 div 10; -end; - -procedure TROSCClientWorker.Disconnected(var RestartLoop: Boolean); -// restartloop is false by default -begin - inherited; - - try - fOwner.fConnection.Disconnect; - except - end; - if assigned(fOwner.fOnDisconnected) then begin - if fOwner.fSynchronizeEvents then - fOwner.fEventThreadPool.QueueItem(TROSBEventTrigger.Create(fOwner, fOwner.fOnDisconnected)) - else - fOwner.fOnDisconnected(fOwner); - end; - if fOwner.fActive and fOwner.fAutoReconnect and not fSkipReconnect then - fOwner.fState := scReconnecting - else begin - fOwner.fState := scNotConnected; - fOwner.fActive := false; - fOwner.fConnectEvent.ResetEvent; - exit; - end; - - fOwner.fReconnectEvent.ResetEvent; - fOwner.fConnectEvent.ResetEvent; - while fOwner.fActive and fOwner.fAutoReconnect and not fSkipReconnect do - begin - fOwner.fReconnectEvent.WaitFor(fOwner.fReconnectDelay); // don't want to create a tight loop - try - fOwner.fReconnectEvent.ResetEvent; - fOwner.fConnection.Connect; - RestartLoop := True; - Break; - except - // we failed, retry in a few - end; - end; - if RestartLoop then - fOwner.fState := scConnecting - else begin - fowner.fState := scNotConnected; - fOwner.fActive := false; - fOwner.fConnectEvent.ResetEvent; - end; -end; - -procedure TROSCClientWorker.Idle; -begin - IF fOwner.IdleTimeoutMinutes > 0 then begin - if Now > LastData + ((1.0 / 24 / 60) * fOwner.IdleTimeoutMinutes) then begin - Disconnect; - fSkipReconnect := true; - end; - end; - -end; - -procedure TROSCClientWorker.IncomingData(Id: Integer; aData: TStream); -begin - fOwner.HasData(id, aData); -end; - -procedure TROSCClientWorker.SetAckDetails(Id: Integer; Oke: Boolean; - ErrorNo: Integer); -var - lList: TList; - i: Integer; - lReq: TROWaitingRequest; -begin - if Oke then begin - inherited; - exit; - end; - lList := FOwner.fWaitingRequests.LockList; - try - lReq := nil; - for i := lList.Count -1 downto 0 do - begin - if TROWaitingRequest(lList[i]).Id = Id then - begin - lReq := TROWaitingRequest(lList[i]); - break; - end; - end; - if lReq = nil then - inherited - else begin - lReq.fResultErrorCode := ErrorNo; - lReq.Event.SetEvent; - end; - finally - fOwner.fWaitingRequests.UnlockList; - end; -end; - -{ TROClientThread } - -constructor TROClientThread.Create(aChannel: TROSCClientWorker); -begin - inherited Create(True); - fChannel := aChannel; - FreeOnTerminate := false; - Resume; -end; - -procedure TROClientThread.Execute; -var - lRet: Boolean; -begin - TIdTCPClient(fChannel.Connection).Host := fChannel.Owner.fHost; - TIdTCPClient(fChannel.Connection).Port := fChannel.Owner.fPort; - lRet := true; - fConnecting := True; - while lRet do begin - lRet := false; - try - TIdTCPClient(fChannel.Connection).Connect; - except - on e: Exception do begin - if fChannel.Owner.AutoReconnect then begin - lRet := true; - fChannel.fOwner.fReconnectEvent.WaitFor(fChannel.fOwner.fReconnectDelay); - end; - if assigned(fChannel.Owner.OnException) then fChannel.Owner.OnException(fChannel.Owner, e, lRet); - if not lRet then begin - fConnecting := False; - exit; - end; - end; - end; - end; - fChannel.DoExecute; -end; - -{ TROWaitingRequest } - -constructor TROWaitingRequest.Create(Id: Integer); -begin - inherited Create; - fId := Id; - fEvent := TROEvent.Create(nil, true, false, ''); - fFreeEvent := True; - fResultErrorCode := -1; -end; - -constructor TROWaitingRequest.Create(Id: Integer; Ev: TROEvent); -begin - inherited Create; - fId := Id; - fEvent := ev; - fResultErrorCode := -1; -end; - -destructor TROWaitingRequest.Destroy; -begin - fResultData.Free; - if fFreeEvent then - fEvent.Free; - inherited Destroy; -end; - -{ TROPooledEvent } - -procedure TROPooledEvent.Callback(Caller: TROThreadPool; Thread: TThread); -begin - if fOwner.fEventReceiver <> nil then - begin - fOwner.fEventReceiver.Dispatch(fData, Thread); - end; -end; - -constructor TROPooledEvent.Create(aData: TStream; - aOwner: TROCustomSuperTCPChannel); -begin - inherited Create; - fOwner := aOwner; - fData := aData; -end; - -destructor TROPooledEvent.Destroy; -begin - fData.Free; - inherited Destroy; -end; - -{ TROSBEventTrigger } - -procedure TROSBEventTrigger.Callback(Caller: TROThreadPool; - aThread: TThread); -begin - try - TROClientThread(aThread).Synchronize(Execute); - except - // exceptions cannot pass back to the pool - end; -end; - -constructor TROSBEventTrigger.Create(aSender: TObject; - aEvent: TNotifyEvent); -begin - inherited Create; - fSender := aSender; - fEvent := aEvent; -end; - -procedure TROSBEventTrigger.Execute; -begin - if assigned(fEvent) then - fEvent(fSender); -end; - -initialization - RegisterTransportChannelClass(TROSuperTcpChannel); - -finalization - UnRegisterTransportChannelClass(TROSuperTcpChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPServer.pas deleted file mode 100644 index 5d757e3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSuperTCPServer.pas +++ /dev/null @@ -1,548 +0,0 @@ -unit uROSuperTCPServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface -uses - SysUtils, Classes, uROClasses, uROClient, uROClientIntf, uROServerIntf, - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} uROSessions, - IdTCPConnection, IdTCPServer, uROServer{$IFDEF WIN32}, Windows{$ENDIF}, uROSCHelpers, - uROThreadPool{$IFDEF RemObjects_INDY10}, IdContext{$ENDIF}, uROEventRepository; - -type - TROSCServerWorker = class; - TROConnectionEvent = procedure (aChannel: IROTransport; const aGuid: TGuid) of object; - TROCustomSuperTcpServer = class(TROServer) - private - fIndyServer: TIdTCPServer; - fActive: Boolean; - fPort: Integer; - fAckWaitTimeout: Integer; - fMaxPackageSize: Integer; - fGuidToClientMap: TStringList; - fClients: TThreadList; - fOwnsThreadPool: Boolean; - fThreadPool: TROThreadPool; - fSkipAck: Boolean; - fEventRepository: TROEventRepository; - fBlockingEvents: Boolean; - fOnClientConnected: TROConnectionEvent; - fOnClientDisconnected: TROConnectionEvent; - procedure IntExecute(AThread: {$IFDEF RemObjects_INDY10}TIdContext{$ELSE}TIdPeerThread{$ENDIF}); - procedure SetPort(const Value: Integer); - procedure SetThreadPool(const Value: TROThreadPool); - protected - function IntGetActive: Boolean; override; - procedure IntSetActive(const Value: Boolean); override; - - procedure Loaded; override; - procedure HasData(Id: Integer; aClient: TROSCServerWorker; aData: TStream); - - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - - property Port: Integer read fPort write SetPort default 8095; - property AckWaitTimeout: Integer read fAckWaitTimeout write fAckWaitTimeout default 10000; - property MaxPackageSize: Integer read fMaxPackageSize write fMaxPackageSize default 1024*1024; - property SkipAck: Boolean read fSkipAck write fSkipAck default false; - - property Server: TIdTcpServer read fIndyServer; - property ThreadPool: TROThreadPool read fThreadPool write SetThreadPool; - property EventRepository: TROEventRepository read fEventRepository write fEventRepository; - property BlockingEvents: Boolean read fBlockingEvents write fBlockingEvents default False; - property OnClientConnected: TROConnectionEvent read fOnClientConnected write fOnClientConnected; - property OnClientDisconnected: TROConnectionEvent read fOnClientDisconnected write fOnClientDisconnected; - end; - - TROSuperTcpServer = class(TROCustomSuperTcpServer) - published - property Port; - property SkipAck; - property AckWaitTimeout; - property MaxPackageSize; - property EventRepository; - property BlockingEvents; - property OnClientConnected; - property OnClientDisconnected; - end; - - TROSCServerWorker = class(TROSuperChannelWorker, IUnknown, IROTransport, - IROTCPTransport, IROActiveEventServer) - private - fOwner: TROCustomSuperTcpServer; - fEventManager: IROSessionsChangesListener; - fRefCount: Integer; - protected - function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; - function _AddRef: Integer; stdcall; - function _Release: Integer; stdcall; - function GetClientAddress : string; - function GetTransportObject : TObject; - procedure IncomingData(Id: Integer; aData: TStream); override; - procedure Connected; override; - procedure Disconnected(var RestartLoop: Boolean); override; - procedure EventsRegistered(aSender : TObject; aClient: TGUID); - procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); - public - constructor Create(aOwner: TROCustomSuperTcpServer; aConnection: TIdTCPConnection); - destructor Destroy; override; - - property Owner: TROCustomSuperTcpServer read fOwner; - end; - TROInvokerQueueItem = class(TInterfacedObject, IROThreadPoolCallback) - private - fData: TStream; - fId: Integer; - fCaller: TROCustomSuperTcpServer; - FClient: TROSCServerWorker; - public - constructor Create(aCaller: TROCustomSuperTcpServer; aClient: TROSCServerWorker; Id: Integer; aData: TStream); - procedure Callback(Caller: TROThreadPool; Thread: TThread); - destructor Destroy; override; - end; - -implementation -uses - uROTypes; - -{ TROCustomSuperTcpServer } - -constructor TROCustomSuperTcpServer.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - fClients := TThreadList.Create; - fPort := 8095; - AckWaitTimeout := 10000; - fMaxPackageSize := 1024 * 1024; - fIndyServer := TIdTCPServer.Create(nil); - fIndyServer.OnExecute := IntExecute; - fGuidToClientMap := TStringList.Create; - fGuidToClientMap.Sorted := true; - -end; - -destructor TROCustomSuperTcpServer.Destroy; -begin - Active := False; - fGuidToClientMap.Free; - fIndyServer.Active := False; - fIndyServer.Free; - fClients.Free; - if fOwnsThreadPool then - fThreadPool.Free; - inherited Destroy; -end; - -procedure TROCustomSuperTcpServer.HasData(Id: Integer; aClient: TROSCServerWorker; aData: TStream); -var - lItem: IROThreadPoolCallback; - lOrg: TROInvokerQueueItem; -begin - lOrg := TROInvokerQueueItem.Create(Self, aClient, Id, aData); - lItem := lOrg; - try - fThreadPool.QueueItem(lItem); - except - aClient.SendError(Id, ScCmdNoAck_QueueFull); - lOrg.fData := nil; // caller will free it on exceptions - raise; - end; -end; - -type - TSendEvent = class(TInterfacedObject, IROThreadPoolCallback) - private - fStream: TROEventData; - fOwner: TROCustomSuperTcpServer; - fWorkerOverride: IROTransport; - fClientGuid: TGUID; - fSender: TROEventRepository; - protected - procedure Callback(Caller: TROThreadPool; Thread: TThread); - public - constructor Create(aOwner: TROCustomSuperTcpServer; aClientGuid: TGUID; aSender: TROEventRepository; aData: TROEventData); - property WorkerOverride: IROTransport read fWorkerOverride write fWorkerOverride; - - destructor Destroy; override; - end; - -procedure TROCustomSuperTcpServer.Notification(AComponent: TComponent; Operation: TOperation); -begin - if (Operation = opRemove) then begin - if AComponent = fThreadPool then - fThreadPool := nil; - if AComponent = fEventRepository then - fEventRepository := nil; - end; - inherited; -end; - -procedure TROCustomSuperTcpServer.DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); -var - i: Integer; - aref: IROSessionsChangesListener; - se: IROThreadPoolCallback; -begin - fClients.LockList; - try - i := fGuidToClientMap.IndexOf(GUIDToString(aSessionReference)); - if i = -1 then begin - if fEventRepository <> nil then begin - if Supports(fEventRepository, IROSessionsChangesListener, aref) then - aref.SessionsChangedNotification(aSessionReference, saRemoveActiveListener, nil); - fEventRepository.StoreEventData(EmptyGUID, Binary(anEventDataItem.Data), false, false, GUIDToString(aSessionReference)); - if anEventDataItem.RemoveRef = 0 then anEventDataItem.Free; - exit; - end; - end; - finally - fClients.UnlockList; - end; - se := TSendEvent.Create(Self, aSessionReference, TROEventRepository(aSender), anEventDataItem); - if BlockingEvents then - se.Callback(fThreadPool, nil) - else - fThreadPool.QueueItem(se); -end; - -procedure TROCustomSuperTcpServer.IntExecute(AThread: {$IFDEF RemObjects_INDY10}TIdContext{$ELSE}TIdPeerThread{$ENDIF}); -var - fChannel: TROSCServerWorker; -begin - fChannel := TROSCServerWorker.Create(Self, AThread.Connection); - fChannel.MaxPackageSize:= Self.MaxPackageSize; - fClients.Add(fChannel); - try - fChannel.DoExecute; - finally - fClients.Remove(fChannel); - fChannel.Free; - end; -end; - -function TROCustomSuperTcpServer.IntGetActive: Boolean; -begin - Result := fActive; -end; - -procedure TROCustomSuperTcpServer.IntSetActive(const Value: Boolean); -begin - fActive := Value; - if ComponentState * [csDesigning, csLoading] = [] then - begin - if fThreadPool = nil then - begin - fThreadPool := TROThreadPool.Create(nil); - fOwnsThreadPool := true; - end; - fIndyServer.Active := false; - if fActive then - begin - fIndyServer.Bindings.DefaultPort := fPort; - fIndyServer.Active := true; - end; - end; -end; - -procedure TROCustomSuperTcpServer.Loaded; -begin - inherited; - IntSetActive(fActive); -end; - -procedure TROCustomSuperTcpServer.SetPort(const Value: Integer); -begin - fPort := Value; - if fActive then - begin - IntSetActive(False); - IntSetActive(True); - end; -end; - -procedure TROCustomSuperTcpServer.SetThreadPool(const Value: TROThreadPool); -begin - if fOwnsThreadPool then - begin - fOwnsThreadPool := false; - fThreadPool.Free; - end; - fThreadPool := Value; -end; - - -{ TROSCServerWorker } - -constructor TROSCServerWorker.Create(aOwner: TROCustomSuperTcpServer; - aConnection: TIdTCPConnection); -begin - fOwner := aOwner; - inherited Create(aConnection); - IsServer := true; - SkipAck := fOwner.Skipack; -end; - -destructor TROSCServerWorker.Destroy; -begin - while fRefCount > 0 do - Sleep(500); // we might have events still waiting. - inherited Destroy; -end; - -function TROSCServerWorker.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; -begin - if GetInterface(IID, Obj) then - Result := 0 - else - Result := E_NOINTERFACE; -end; - -function TROSCServerWorker._AddRef: Integer; stdcall; -begin - result := InterlockedIncrement(fRefCount); -end; - -function TROSCServerWorker._Release: Integer; stdcall; -begin - result := InterlockedDecrement(fRefCount); -end; - -function TROSCServerWorker.GetClientAddress : string; -begin -{$IFDEF REMOBJECTS_INDY8} - if (Connection.Binding <> nil) then - Result := Connection.Binding.PeerIP - else - Result := ''; -{$ELSE} - if (Connection.Socket <> nil) and (Connection.Socket.Binding <> nil) then - Result := Connection.Socket.Binding.PeerIP - else - Result := ''; -{$ENDIF} -end; - -function TROSCServerWorker.GetTransportObject : TObject; -begin - Result := Self; -end; - -procedure TROSCServerWorker.IncomingData(Id: Integer; aData: TStream); -begin - fOwner.HasData(Id, Self, aData); -end; - -procedure TROSCServerWorker.Connected; -var - data, rs: Binary; - evd: TROEventData; - i, len: Longint; - -begin - if assigned(fOwner.fOnClientConnected) then fOwner.fOnClientConnected(Self, ClientID); - fOwner.fClients.LockList; - try - i := fOwner.fGuidToClientMap.IndexOf(GUIDToString(ClientId)); - if i = -1 then - fOwner.fGuidToClientMap.AddObject(GUIDToString(ClientId), Self) - else - fOwner.fGuidToClientMap.Objects[i] := Self; - finally - fOwner.fClients.UnlockList; - end; - if fOwner.fEventRepository <> nil then - begin - fOwner.fEventRepository.AddSession(ClientID, Self); - rs := Binary.Create; - try - fOwner.fEventRepository.GetEventData(ClientID, rs); - rs.Position := 0; - if rs.Read(len, sizeof(len)) <> sizeof(len) then exit; - while true do begin - if rs.Read(len, sizeof(len)) <> sizeof(len) then break; - data := Binary.Create; - data.CopyFrom(rs, Len); - data.Position := 0; - evd := TROEventData.Create(data); - try - DispatchEvent(evd, ClientID, fOwner.fEventRepository); - finally - data.Free; - end; - end; - finally - rs.Free; - end; - end; -end; - -procedure TROSCServerWorker.Disconnected(var RestartLoop: Boolean); -var - i: Integer; -begin - if fEventManager <> nil then - fEventManager.SessionsChangedNotification(ClientID, saRemoveActiveListener, Self); - fOwner.fClients.LockList; - try - i := fOwner.fGuidToClientMap.IndexOf(GUIDToString(ClientId)); - if i <> -1 then - begin - if fOwner.fGuidToClientMap.Objects[i] = self then - fOwner.fGuidToClientMap.Delete(i); - end; - finally - fOwner.fClients.UnlockList; - end; - if assigned(fOwner.fOnClientDisconnected) then fOwner.fOnClientDisconnected(Self, ClientID); -end; - -procedure TROSCServerWorker.EventsRegistered(aSender : TObject; aClient: TGUID); -var - lNew : IROSessionsChangesListener; -begin - Supports(aSender, IROSessionsChangesListener, lNew); - if (fEventManager <> nil) and (lNew <> fEventManager) then begin - fEventManager.SessionsChangedNotification(ClientID, saRemoveActiveListener, Self); - end; - fEventManager := lNew; -end; - -procedure TROSCServerWorker.DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); -var - se: TSendEvent; -begin - se := TSendEvent.Create(fOwner, aSessionReference, TROEventRepository(aSender), anEventDataItem); - se.WorkerOverride := self; - if fOwner.BlockingEvents then begin - try - se.Callback(fOwner.ThreadPool, nil); - except - end; - se.Free; - end else - fOwner.ThreadPool.QueueItem(se); -end; - - -procedure TSendEvent.Callback(Caller: TROThreadPool; Thread: TThread); -var - ms: TROConstantMemoryStream; - i: Integer; - wak: IROPackageAck; - ass: IROActiveEventServer; - obj: TROSCServerWorker; - aRef: IROSessionsChangesListener; -begin - obj := nil; - ms := TROConstantMemoryStream.Create(TROConstantMemoryStream(fStream.Data)); - try - try - fOwner.fClients.LockList; - try - i := fOwner.fGuidToClientMap.IndexOf(GUIDToString(fClientGuid)); - if i = -1 then exit; - if fWorkerOverride <> nil then - obj := TROSCServerWorker(fWorkerOverride.GetTransportObject) - else - obj := TROSCServerWorker(fOwner.fGuidToClientMap.Objects[i]); - wak := obj.SendPackage(ms, 0); - if not Supports(obj, IROSessionsChangesListener, ass) then ass := nil; - finally - fOwner.fClients.UnlockList; - end; - TROSCServerWorker.WaitForAck(wak, fOwner.fAckWaitTimeout); - except - if fOwner.fEventRepository <> nil then begin - if Supports(fOwner.fEventRepository, IROSessionsChangesListener, aref) then - aref.SessionsChangedNotification(fClientGuid, saRemoveActiveListener, obj); - fOwner.fEventRepository.StoreEventData(EmptyGUID, ms, false, false, GUIDToString(fClientGuid)); - exit; - end; - end; - finally - ms.Free; - end; -end; - -constructor TSendEvent.Create(aOwner: TROCustomSuperTcpServer; aClientGuid: TGUID; aSender: TROEventRepository; aData: TROEventData); -begin - inherited Create; - fStream := aData; - fSender := aSender; - fClientGuid := aClientGuid; - fOwner := aOwner; -end; - -destructor TSendEvent.Destroy; -begin - if fStream.RemoveRef = 0 then - fStream.Free; - inherited Destroy; -end; - -{ TROInvokerQueueItem } - -procedure TROInvokerQueueItem.Callback(Caller: TROThreadPool; Thread: TThread); -var - lResponse: TMemoryStream; - l: TList; -begin - lResponse := TMemoryStream.Create; - try - fCaller.DispatchMessage(FClient, fData, lResponse); - lResponse.Seek(0, soFromBeginning); - l := fCaller.fClients.LockList; - try - if l.IndexOf(FClient) = -1 then exit; - FClient.BeginWriteLock; - finally - fCaller.fClients.UnlockList; - end; - try - if lResponse.Size > FClient.MaxPackageSize then - FClient.SendError(fId, ScCmdNoAck_MsgTooLarge) - else - FClient.SendPackage(lResponse, fId).RemoveFromList; // we're not going to wait - finally - FClient.EndWriteLock; - end; - finally - lResponse.Free; - end; -end; - -constructor TROInvokerQueueItem.Create(aCaller: TROCustomSuperTcpServer; aClient: TROSCServerWorker; Id: Integer; aData: TStream); -begin - inherited Create; - fCaller := aCaller; - fId := Id; - fData := aData; - fClient := aClient; -end; - -destructor TROInvokerQueueItem.Destroy; -begin - fData.Free; - inherited Destroy; -end; - -initialization - RegisterServerClass(TROSuperTcpServer); -finalization - UnregisterServerClass(TROSuperTcpServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseHTTPChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseHTTPChannel.pas deleted file mode 100644 index 930bfdf..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseHTTPChannel.pas +++ /dev/null @@ -1,202 +0,0 @@ -unit uROSynapseHTTPChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ Provided by Carlo Kok (carlokok@teamro.com) } -{ Requires the Synapse TCP/IP Library available at http://www.ararat.cz/synapse } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {vcl:} Classes, uROClientIntf, uROClient, uROClasses, - {Synapse:} httpsend; - -type - TROSynapseHTTPChannel = class(TROTransportChannel, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fhttp: THTTPSend; - fTargetURL: string; - function GetKeepAlive: Boolean; - procedure SetKeepAlive(const Value: Boolean); - protected - procedure IntDispatch(aRequest, aResponse: TStream); override; - - { IROTCPTransport } - function GetClientAddress: string; - - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue: string); - function GetHeaders(const aName: string): string; - function GetContentType: string; - procedure SetContentType(const aValue: string); - function GetUserAgent: string; - procedure SetUserAgent(const aValue: string); - - procedure SetTargetURL(const Value: string); - function GetTargetURL: string; - - function GetQueryString : string; - function GetPathInfo: string; - function GetLocation: string; - procedure SetPathInfo(const aValue: String); - - public - property http: THTTPSend read fhttp; - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - published - property TargetURL: string read GetTargetURL write SetTargetURL; - property KeepAlive: Boolean read GetKeepAlive write SetKeepAlive; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - -implementation - -uses - {vcl:} SysUtils; - -{ TROSynapseHTTPChannel } - -function TROSynapseHTTPChannel.GetTargetURL: string; -begin - result := fTargetURL; -end; - -procedure TROSynapseHTTPChannel.SetTargetURL(const Value: string); -begin - fTargetURL := Trim(Value) -end; - -procedure TROSynapseHTTPChannel.IntDispatch(aRequest, aResponse: TStream); -begin - CheckProperties; - - fhttp.Headers.Clear; - fhttp.Document.Position := 0; - fhttp.Document.Size := 0; - fhttp.Document.CopyFrom(aRequest, 0); - if fhttp.KeepAlive then - fhttp.Headers.Add('Connection: keep-alive'); - if not fhttp.HTTPMethod('POST', TargetURL) then - raise EROException.Create('Unable to connect to remote server'); - aResponse.CopyFrom(http.Document, 0); -end; - -function TROSynapseHTTPChannel.GetHeaders(const aName: string): string; -begin - Result := fhttp.Headers.Values[aName]; -end; - -procedure TROSynapseHTTPChannel.SetHeaders(const aName, aValue: string); -begin - fhttp.Headers.Values[aName] := aValue; -end; - -function TROSynapseHTTPChannel.GetContentType: string; -begin - Result := fhttp.MimeType; -end; - -procedure TROSynapseHTTPChannel.SetContentType(const aValue: string); -begin - fhttp.MimeType := aValue; -end; - -function TROSynapseHTTPChannel.GetUserAgent: string; -begin - Result := fhttp.UserAgent; -end; - -procedure TROSynapseHTTPChannel.SetUserAgent(const aValue: string); -begin - fhttp.UserAgent := aValue; -end; - -function TROSynapseHTTPChannel.GetClientAddress: string; -begin - result := ''; -end; - -function TROSynapseHTTPChannel.GetPathInfo: string; -begin - result := ''; -end; - -function TROSynapseHTTPChannel.GetLocation: string; -begin - result := '' -end; - -function TROSynapseHTTPChannel.GetKeepAlive: Boolean; -begin - Result := fhttp.KeepAlive; -end; - -procedure TROSynapseHTTPChannel.SetKeepAlive(const Value: Boolean); -begin - fhttp.KeepAlive := Value; -end; - -constructor TROSynapseHTTPChannel.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - fhttp := THTTPSend.Create; - fhttp.Protocol := '1.1'; - fhttp.Status100 := False; -end; - -destructor TROSynapseHTTPChannel.Destroy; -begin - fhttp.Free; - inherited Destroy; -end; - -function TROSynapseHTTPChannel.GetQueryString: string; -begin - result := '' -end; - -procedure TROSynapseHTTPChannel.SetPathInfo(const aValue: String); -begin - // Do nothing; server only -end; - -procedure TROSynapseHTTPChannel.CheckProperties; -begin - Check(TargetURL = '', Name + '.TargetURL must be set.'); - inherited; -end; - -initialization - RegisterTransportChannelClass(TROSynapseHTTPChannel); - -finalization - UnRegisterTransportChannelClass(TROSynapseHTTPChannel); - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseSuperHttpChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseSuperHttpChannel.pas deleted file mode 100644 index f596ab3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROSynapseSuperHttpChannel.pas +++ /dev/null @@ -1,118 +0,0 @@ -unit uROSynapseSuperHttpChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Indy Components } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, SysUtils, uROClient, uROClientIntf, uROAsync, uROClasses, SyncObjs, - {$IFDEF RemObjects_UseEncryption} uRoEncryption, {$ENDIF}uROThreadPool, - httpsend, uROBaseSuperHttpChannel; - -type - TROSynapseSuperHttpChannel = class(TROBaseSuperHttpChannel) - private - fClientWait, - fClientRequest: THTTPSend; - fTargetUrl: String; - protected - procedure CancelRequest(aWaitingThread: Boolean); override; - procedure DispatchHttpRequest(aWaitingThread: Boolean; - aRequest: TDynByteArray; out aResponse: TDynByteArray); override; - public - constructor Create(aOwner: TCOmponent); override; - destructor Destroy; override; - - property ClientWait: THTTPSend read fClientWait; - property ClientRequest: THTTPSend read fClientRequest; - {$IFDEF FPC} - property SessionId; - {$ENDIF} - published - {$IFNDEF FPC} - property SessionId; - {$ENDIF} - property Active; - property MaxPackageSize; - property TargetUrl: String read fTargetUrl write fTargetUrl; - property RequestTimeout; - property ConnectTimeout; - property HttpRequestTimeout; - end; - -implementation -uses - uRORes; - -{ TROSynapseSuperHttpChannel } - -procedure TROSynapseSuperHttpChannel.CancelRequest(aWaitingThread: Boolean); -var - lSock: THTTPSend; -begin - try - if aWaitingThread then lSock := fClientWait else lSock := fClientRequest; - lSock.Abort; - if lSock.Sock <> nil then - lSock.Sock.CloseSocket; - except - // indy will release an exception when closing - end; -end; - -constructor TROSynapseSuperHttpChannel.Create(aOwner: TCOmponent); -begin - inherited Create(aOwner); - fClientWait := THttpSend.Create; - fClientWait.UserAgent := str_ProductName; - fClientWait.Protocol := '1.1'; - fClientWait.Status100 := False; - - fClientRequest := THTTPSend.Create; - fClientRequest.UserAgent := str_ProductName; - fClientRequest.Protocol := '1.1'; - fClientRequest.Status100 := False; -end; - -destructor TROSynapseSuperHttpChannel.Destroy; -begin - Active := false; - fClientWait.Free; - fClientRequest.Free; - inherited Destroy; -end; - -procedure TROSynapseSuperHttpChannel.DispatchHttpRequest( - aWaitingThread: Boolean; aRequest: TDynByteArray; - out aResponse: TDynByteArray); -var - lClient: THTTPSend; -begin - if aWaitingThread then lClient := fClientWait else lClient := fClientRequest; - lClient.Headers.Clear; - lClient.Document.Position := 0; - lClient.Document.Size := 0; - lClient.Document.Write(aRequest[0], Length(aRequest)); - if lClient.KeepAlive then - lClient.Headers.Add('Connection: keep-alive'); - if not lClient.HTTPMethod('POST', fTargetUrl) then - raise EROException.Create('Unable to connect to remote server'); - SetLength(aResponse, lClient.Document.Size); - lClient.Document.Position := 0; - lClient.Document.Read(aResponse[0], length(aResponse)); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThread.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThread.pas deleted file mode 100644 index 67dac9f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThread.pas +++ /dev/null @@ -1,219 +0,0 @@ -unit uROThread; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}; - -type - TROThread = class(TThread) - private - {$IFDEF MSWINDOWS} - fName:string; - fFreeWaiting: TObject; // TROEvent - fIsTerminated: Boolean; - {$ENDIF MSWINDOWS} - protected - {$IFDEF MSWINDOWS} - procedure SetName(const iName:string); - property Name:string read fName; - procedure DoTerminate; override; - {$ENDIF MSWINDOWS} - procedure Execute; override; - public - constructor Create(iCreateSuspended:Boolean; const iName:string=''); - procedure TerminateWaitFor; virtual; - {$IFDEF MSWINDOWS} - function WaitFor: DWord; reintroduce; - {$IFNDEF FPC} - procedure Free; reintroduce; // Windows limitation workaround - {$ENDIF} - {$ENDIF MSWINDOWS} - end; - - TROServerCheckMessageThread = class(TROThread) - private - fActive: boolean; - fInterval:integer; - fEvent:TObject; - procedure SetActive(const Value: boolean); - private - fOwner:TComponent; - protected - procedure Execute; override; - procedure CheckForMessages; virtual; abstract; - property Owner:TComponent read fOwner; - public - constructor Create(aName:string; aOwner:TComponent; iInterval:integer); reintroduce; - destructor Destroy; override; - procedure TerminateWaitFor; override; - property Active:boolean read fActive write SetActive; - end; - -implementation - -uses - SysUtils, uROClasses; - -{$IFDEF MSWINDOWS} -type - TThreadNameInfo = record - FType: LongWord; // must be 0x1000 - FName: PChar; // pointer to name (in user address space) - FThreadID: LongWord; // thread ID (-1 indicates caller thread) - FFlags: LongWord; // reserved for future use, must be zero - end; -{$ENDIF} - -{ TROThread } - -constructor TROThread.Create(iCreateSuspended:Boolean; const iName:string=''); -begin - {$IFDEF MSWINDOWS} - fName := iName; - {$ENDIF MSWINDOWS} - inherited Create(iCreateSuspended) -end; - -{$IFDEF MSWINDOWS} -procedure TROThread.SetName(const iName:string); -var - ThreadNameInfo: TThreadNameInfo; -begin - if iName <> '' then begin - ThreadNameInfo.FType := $1000; - ThreadNameInfo.FName := PChar(iName); - ThreadNameInfo.FThreadID := $FFFFFFFF; - ThreadNameInfo.FFlags := 0; - try - // - // This exception is EXPECTED to be raised when creating a named thread in - // the debugger. You can safely ignore it and continue running the program. - // - RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo ); - except - end; - end; -end; -{$ENDIF} - -procedure TROThread.Execute; -begin - {$IFDEF RemObjects_SetThreadName} - SetName(fName); - {$ENDIF RemObjects_SetThreadName} -end; - -procedure TROThread.TerminateWaitFor; -begin - Terminate; - WaitFor(); -end; - -{$IFDEF MSWINDOWS} - -function TROThread.WaitFor: DWord; -var - lEvent: TROEvent; -begin - result := 0; - if fIsTerminated then exit; - lEvent := TROEvent.Create(nil, false, false, ''); - try - fFreeWaiting := lEvent; - Terminate; - while Suspended do Resume; - while not Terminated do lEvent.WaitFor(500); //lEvent.WaitFor(INFINITE); - sleep(10); // make sure it's actually terminated - fFreeWaiting := nil; - finally - lEvent.Free; - end; -end; - -{$IFNDEF FPC} -procedure TROThread.Free; -begin - if self = nil then exit; - if ModuleIsLib then begin - // Windows doesn't return from EndThread until DllMain, so waitfor never returns either. - if fIsTerminated then - Destroy - else begin - FreeOnTerminate := true; - WaitFor; - end; - end else - Destroy; -end; -{$ENDIF} - -procedure TROThread.DoTerminate; -begin - inherited; - fIsTerminated := true; - if fFreeWaiting <> nil then - TROEvent(fFreeWaiting).SetEvent; -end; -{$ENDIF MSWINDOWS} - - -{ TROServerCheckMessageThread } - -constructor TROServerCheckMessageThread.Create(aName:string; aOwner:TComponent; iInterval:integer); -begin - inherited Create(true,aName); - fInterval := iInterval; - fOwner := aOwner; - fEvent := TROEvent.Create(nil,false,false,''); - Resume; -end; - -destructor TROServerCheckMessageThread.Destroy; -begin - TerminateWaitFor(); - FreeAndNil(fEvent); - inherited; -end; - -procedure TROServerCheckMessageThread.TerminateWaitFor; -begin - Resume(); - TROEvent(fEvent).SetEvent(); - inherited; -end; - -procedure TROServerCheckMessageThread.Execute; -begin - inherited; - while not Terminated do begin - if not fActive then Suspend(); - CheckForMessages(); - if Terminated then break; - TROEvent(fEvent).WaitFor(fInterval*1000); { Interval is in seocnds, we need miliseconds. } - end; -end; - -procedure TROServerCheckMessageThread.SetActive(const Value: boolean); -begin - if fActive <> Value then begin - fActive := Value; - if Active then Resume(); - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThreadPool.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThreadPool.pas deleted file mode 100644 index 344102b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROThreadPool.pas +++ /dev/null @@ -1,301 +0,0 @@ -unit uROThreadPool; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface -uses - SysUtils, Classes, SyncObjs, - uROClasses - {$IFDEF WIN32}, Windows{$ENDIF} - {$IFDEF LINUX}, Libc{$ENDIF} - {$IFDEF REMOBJECTS_TRIAL}, uROTrial {$ENDIF} - ; - -type // syncobjs - TROSemaphore = class; - TROThreadPool = class; - - IROThreadPoolCallback = interface - ['{0F3386BB-0B6E-4070-93D5-BAA5CD287608}'] - procedure Callback(Caller: TROThreadPool; aThread: TThread); - end; - - TROPooledThread = class(TThread) - private - fOwner: TROThreadPool; - public - constructor Create(aOwner: TROThreadPool); - destructor Destroy; override; - - procedure Execute; override; - - procedure Synchronize(Method: TThreadMethod); // protected - - procedure Stop; - end; - - TROThreadPool = class(TComponent) - private - fMaxThreads, - fMaxQueue, - fPoolThreads, - fWorkingCount, - fThreadCount: Integer; - fSemaphore: TROSemaphore; - fQueue: TInterfaceList; - fThreads: TThreadList; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - - function GetCurrQueueSize: Integer; - - procedure QueueItem(Callback: IROThreadPoolCallback); - published - property MaxQueue: Integer read fMaxQueue write fMaxQueue; - property PoolThreads: Integer read fPoolThreads write fPoolThreads; - property MaxThreads: Integer read FMaxThreads write fMaxThreads; - end; - - TROSemaphore = class - private -{$IFDEF LINUX} - fHandle: TSemaphore; - fFreed: Boolean; -{$ENDIF} -{$IFDEF WIN32} - fHandle: THandle; -{$ENDIF} - public - constructor Create; - destructor Destroy; override; - - procedure CloseHandle; - - procedure Release(Count: Integer); overload; - procedure Release; overload; - function WaitFor(Timeout: Cardinal): Boolean; - end; - - -implementation - -{ TROPooledThread } - -constructor TROPooledThread.Create(aOwner: TROThreadPool); -begin - inherited Create(true); - FreeOnTerminate := True; - fOwner := aOwner; - fOwner.fThreads.Add(Self); - Resume; -end; - -destructor TROPooledThread.Destroy; -begin - Stop; - fOwner.fThreads.Remove(Self); - inherited Destroy; -end; - -procedure TROPooledThread.Execute; -var - lCurrentItem: IROThreadPoolCallback; - lUnk: IUnknown; -begin - FreeOnTerminate := True; - - while not Terminated do begin - if not fOwner.fSemaphore.WaitFor(Cardinal(-1)) then exit; - fOwner.fQueue.Lock; - try - if fOwner.fQueue.Count > 0 then begin - lUnk := fOwner.fQueue[0]; - lCurrentItem := lUnk as IROThreadPoolCallback; - lUnk := nil; // delphi will keep a temp var in memory too long if we don't create it ourselves - fOwner.fQueue.Delete(0); - end - else - lCurrentItem := nil; - finally - fOwner.fQueue.Unlock; - end; - - if lCurrentItem <> nil then begin - InterlockedIncrement(fOwner.fWorkingCount); - try - lCurrentItem.Callback(fOwner, Self); - except - // we cannot let exceptions escape - end; - InterlockedDecrement(fOwner.fWorkingCount); - lCurrentItem := nil; - end; - end; -end; - -procedure TROPooledThread.Stop; -begin - Terminate; -end; - -procedure TROPooledThread.Synchronize(Method: TThreadMethod); -begin - inherited Synchronize(Method); -end; - -{ TROThreadPool } - -constructor TROThreadPool.Create(AOwner: TComponent); -begin - inherited Create(aOwner); - fSemaphore := TROSemaphore.Create; - fQueue := TInterfaceList.Create; - fThreads := TThreadList.Create; - fMaxQueue := 15; - fMaxThreads := 10; - fPoolThreads := 5; -end; - -destructor TROThreadPool.Destroy; -var - i: Integer; - lList: TList; -begin - lList := fThreads.LockList; - try - for i := lList.Count -1 downto 0 do - TROPooledThread(lList[i]).Stop; - fSemaphore.Release(lList.Count +1); - finally - fThreads.UnlockList; - end; - - while true do begin - lList := fThreads.LockList; - try - if lList.Count = 0 then break; - finally - fThreads.UnlockList; - end; - Sleep(50); - end; - - fSemaphore.Free; - fThreads.Free; - fQueue.Free; - inherited Destroy; -end; - -function TROThreadPool.GetCurrQueueSize: Integer; -begin - result := fQueue.Count; -end; - -procedure TROThreadPool.QueueItem(Callback: IROThreadPoolCallback); -var - lUsage: Integer; -begin - fQueue.Lock; - try - lUsage := fQueue.Count + fWorkingCount + 1; - if lUsage >= fMaxQueue * fMaxThreads then - raise EROException.Create('Not enough threads available for request'); - if fThreadCount > fPoolThreads then lUsage := lUsage div 2; // we only need - if (lUsage >= fThreadCount) and (fThreadCount < fMaxThreads) then begin - fThreadCount := fThreadCount + 1; - fThreads.Add(TROPooledThread.Create(self)); - end; - fQueue.Add(Callback); - fSemaphore.Release; - finally - fQueue.Unlock; - end; -end; - -{ TROSemaphore } - -procedure TROSemaphore.CloseHandle; -begin -{$IFDEF WIN32} - if fHandle <> 0 then begin - Windows.CloseHandle(fHandle); - fHandle := 0; - end; -{$ENDIF} -{$IFDEF LINUX} - if fFreed then exit; - fFreed := true; - sem_destroy(fHandle); -{$ENDIF} -end; - -constructor TROSemaphore.Create; -begin - inherited Create; -{$IFDEF LINUX} - sem_init(fHandle,{$IFDEF FPC}0{$ELSE}false{$ENDIF}, 0); -{$ENDIF} -{$IFDEF WIN32} - fHandle := CreateSemaphore(nil, 0, MaxInt -1, nil); -{$ENDIF} -end; - -destructor TROSemaphore.Destroy; -begin - CloseHandle; - inherited; -end; - -procedure TROSemaphore.Release(Count: Integer); -begin -{$IFDEF WIN32} - ReleaseSemaphore(fHandle, Count, nil); -{$ENDIF} -{$IFDEF LINUX} - while Count > 0 do begin - Count := count -1; - Release; - end; -{$ENDIF} -end; - -procedure TROSemaphore.Release; -begin -{$IFDEF WIN32} - ReleaseSemaphore(fHandle, 1, nil); -{$ENDIF} -{$IFDEF LINUX} - sem_Post(fHandle); -{$ENDIF} -end; - -function TROSemaphore.WaitFor(Timeout: Cardinal): Boolean; -{$IFDEF LINUX} -var - inttimeout: Timespec; -{$ENDIF} -begin -{$IFDEF WIN32} - result := WaitForSingleObject(fHandle, Timeout) = WAIT_OBJECT_0; -{$ENDIF} -{$IFDEF LINUX} - inttimeout.tv_sec := __time(nil) + (timeout div 1000); - inttimeout.tv_nsec := (timeout mod 1000); - result := sem_timedwait(fHandle, {$IFDEF FPC}@{$ENDIF}inttimeout) = 0; -{$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROTypes.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROTypes.pas deleted file mode 100644 index cca766a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROTypes.pas +++ /dev/null @@ -1,1002 +0,0 @@ -unit uROTypes; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, TypInfo, Contnrs, - uRODL, uROClasses, SysUtils; - -type TRODataType = (rtInteger, rtDateTime, rtDouble, rtCurrency, rtWidestring, rtString, - rtInt64, rtBoolean, rtVariant, rtBinary, rtXML, rtGuid, rtDecimal, - rtUserDefined); - - TRODataTypeMapping = record - Name: string; - NewType: TRODataType; - end; - - Utf8String = string; - Guid = type string; - TGuidString = Guid; - Decimal = type Variant; - TDecimalVariant = Decimal; -const SimpleTypes = tkProperties; - DataTypeNames : array[TRODataType] of string = ( - 'Integer', - 'DateTime', - 'Double', - 'Currency', - 'Widestring', - 'String', - 'Int64', - 'Boolean', - 'Variant', - 'Binary', - 'Xml', - 'Guid', - 'Decimal', - '???'); - DataTypeRemapping: array[0..0] of TRODataTypeMapping = - ( - (Name: 'Utf8String'; NewType: rtString) - ); - - PasFlagNames : array[TRODLParamFlag] of string = - ('const', 'out', 'var', 'result'); - - BoolStr : array[boolean] of string = ('false','true'); - -type { Forwards } - TROComplexType = class; - TROComplexTypeClass = class of TROComplexType; - - { TROComplexType } - //TROComplexType = class(TPersistent) - TROComplexType = class(TCollectionItem) - private - fFieldCount : integer; - fFieldList : PPropList; - - function GetFieldCount: integer; - function GetFieldInfo(Index: integer): PTypeInfo; - function GetFieldName(Index: integer): string; - function GetContentAsXml: String; - function GetContentAsStrings: TStrings; - function GetContentAsString: String; - - protected - procedure FreeInternalProperties; virtual; - - public - constructor Create; reintroduce; overload; virtual; - constructor Create(aCollection : TCollection); overload; override; - procedure ReadComplex(ASerializer: TObject); virtual; - procedure WriteComplex(ASerializer: TObject); virtual; - - destructor Destroy; override; - - procedure GetFieldNames(aList : TStrings); - - procedure SetFieldValue(const aFieldName : string; const aValue : Variant); - function GetFieldValue(const aFieldName : string) : Variant; - - procedure SmartAssign(Source : TPersistent; TypeKinds: TTypeKinds = SimpleTypes); - - procedure AssignTo(iDest:TPersistent); override; - procedure Assign(iSource:TPersistent); override; - - class function GetAttributeCount: Integer; virtual; - class function GetAttributeName(aIndex: Integer): string; virtual; - class function GetAttributeValue(aIndex: Integer): string; virtual; - - function Clone:TROComplexType; - - property FieldName[Index : integer] : string read GetFieldName; - property FieldInfo[Index : integer] : PTypeInfo read GetFieldInfo; - property FieldCount : integer read GetFieldCount; - property ContentAsXml : String read GetContentAsXml; - property ContentAsString : String read GetContentAsString; - end; - - { TROArray } - TROArray = class(TROComplexType) - private - function GetContentAsXml(): String; - function GetContentAsStrings(): TStrings; - - protected - function GetCount : integer; virtual; abstract; - - public - destructor Destroy; override; - class function GetItemType : PTypeInfo; virtual; {$IFNDEF DELPHI10UP}abstract;{$ENDIF} - class function GetItemClass : TClass; virtual; - class function GetItemSize : integer; virtual; {$IFNDEF DELPHI10UP}abstract;{$ENDIF} - function GetItemRef(Index : integer) : pointer; virtual; abstract; - procedure SetItemRef(Index: integer; Ref : pointer); virtual; - procedure Resize(ElementCount : integer); virtual; abstract; - procedure ReadComplex(ASerializer: TObject); override; - procedure WriteComplex(ASerializer: TObject); override; - procedure Delete(Index : integer); virtual; abstract; - procedure Clear; virtual; abstract; - function Clone: TROArray; - - function Search(const aPropertyName : string; - const aPropertyValue : Variant; - StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : TCollectionItem; - function GetIndex(const aPropertyName : string; - const aPropertyValue : Variant; - StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : integer; - - property Count : integer read GetCount; - property ContentAsXml: String read GetContentAsXml; - end; - TROArrayClass = class of TROArray; - - - Binary = uROClasses.TROBinaryMemoryStream; { Alias for the TMemoryStream type } - TROBinaryMemoryStream = Binary; - BinaryClass = class of Binary; - - {$IFDEF DELPHI10UP} - EROAbstractMethodCalled = class(EROException); - {$ENDIF} - -function StrToDataType(const aString : string) : TRODataType; - -procedure SmartAssign(aSource, aDestination : TPersistent; TypeKinds: TTypeKinds = SimpleTypes); - -function IsSimpleType(const aTypeName:string; aLibrary:TRODLLibrary):boolean; - -function IsStruct(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; -function IsArray(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; overload; -function IsArray(var aTypeName : string; aLibrary : TRODLLibrary; out oElementType:string) : boolean; overload; -function IsEnum(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; - -function IsImplementedAsClass(const aTypeName : string; aLibrary : TRODLLibrary) : boolean; -function IsUserDefinedType(var aTypeName:string; aLibrary:TRODLLibrary):boolean; - -function GetFullyQualifiedTypeName(const aTypeName:string; aLibrary:TRODLLibrary; const iDefault:string):string; - -function IsInputFlag(Flag : TRODLParamFlag) : boolean; -function IsOutputFlag(Flag : TRODLParamFlag) : boolean; - -procedure RegisterROClass(aComplexTypeClass : TROComplexTypeClass); -procedure UnregisterROClass(aComplexTypeClass : TROComplexTypeClass); -function FindROClass(const aClassName: string): TROComplexTypeClass; -function FindROArray(const anItemClassName: string): TROArrayClass; -function GetComplexTypes: TList; - -implementation - -uses - {$IFDEF REMOBJECTS_TRIAL} - Forms, Windows, Dialogs, - {$ENDIF REMOBJECTS_TRIAL} - Variants, uRORes, uROSerializer; - -var _ComplexTypes : TList; - -procedure RegisterROClass(aComplexTypeClass : TROComplexTypeClass); -var clsname: string; -begin - with _ComplexTypes do - while (IndexOf(aComplexTypeClass)=-1) do begin - clsname := aComplexTypeClass.ClassName; - - if GetClass(clsname) <> nil then - RaiseError(err_ClassAlreadyRegistered, [clsname]); - - Add(aComplexTypeClass); - end; -end; - -procedure UnregisterROClass(aComplexTypeClass : TROComplexTypeClass); -begin - _ComplexTypes.Remove(aComplexTypeClass); -end; - -function FindROClass(const aClassName: string): TROComplexTypeClass; -var i: Integer; -begin - result := NIL; - - with _ComplexTypes do - for i := 0 to (Count-1) do begin - if (CompareText(TClass(Items[i]).ClassName, aClassName)=0) then begin - result := TROComplexTypeClass(Items[I]); - Exit; - end; - end; -end; - -function FindROArray(const anItemClassName: string): TROArrayClass; -var i: Integer; - itmn, cn : string; -begin - result := NIL; - - with _ComplexTypes do - for i := 0 to (Count-1) do begin - cn := TROComplexTypeClass(Items[i]).ClassParent.ClassName; - if (cn='TROArray') then begin - itmn := TROArrayClass(Items[i]).GetItemType^.Name; - if (CompareText(itmn, anItemClassName)=0) then begin - result := TROArrayClass(Items[I]); - Exit; - end; - end; - end; -end; - -function GetComplexTypes: TList; -begin - result := _ComplexTypes; -end; - -procedure SmartAssign(aSource, aDestination : TPersistent; TypeKinds: TTypeKinds = SimpleTypes); -var props : PPropList; - cnt, i : integer; - subsource, subdest : TPersistent; -begin - cnt := GetTypeData(aSource.ClassInfo).PropCount; - if (cnt=0) then Exit; - - GetMem(props, cnt*SizeOf(PPropInfo)); - try - cnt := GetPropList(aSource.ClassInfo, TypeKinds, props); - - for i := 0 to (cnt-1) do begin - with props^[i]^ do - if (PropType^.Kind=tkClass) then begin - subdest := TPersistent(GetObjectProp(aDestination, Name)); - if (subdest=NIL) then Continue; - - subsource := TPersistent(GetObjectProp(aSource, Name)); // RO properties are necessarily TPersistents - if (subsource<>NIL) - then subdest.Assign(subsource); - end - else SetPropValue(aDestination, Name, GetPropValue(aSource, Name, FALSE)); - end; - finally - FreeMem(props, cnt*SizeOf(PPropInfo)); - end; -end; - -function StrToDataType(const aString : string) : TRODataType; -var dt : TRODataType; - i: Integer; -begin - result := rtUserDefined; - - for dt := Low(TRODataType) to High(TRODataType) do - if (CompareText(aString, DataTypeNames[dt])=0) then begin - result := dt; - Exit; - end; - for i := low(DataTypeRemapping) to High(DataTypeRemapping) do - begin - if CompareText(aString, DataTypeRemapping[i].Name) = 0 then begin - Result := DataTypeRemapping[i].NewType; - exit; - end; - end; -end; - -function IsInputFlag(Flag : TRODLParamFlag) : boolean; -begin - result := Flag in [fIn, fInOut] -end; - -function IsOutputFlag(Flag : TRODLParamFlag) : boolean; -begin - result := Flag in [fOut, fInOut, fResult] -end; - -function IsSimpleType(const aTypeName:string; aLibrary:TRODLLibrary):boolean; -{var dt : TRODataType;} -begin - result := not IsImplementedAsClass(aTypeName,aLibrary); - {for dt := Low(DataTypeNames) to High(DataTypeNames) do begin - result := (CompareText(aTypeName, DataTypeNames[dt])=0); - if result then Break; - end;} -end; - -function IsUserDefinedType(var aTypeName:string; aLibrary:TRODLLibrary):boolean; -begin - result := IsStruct(aTypeName, aLibrary) or - IsEnum(aTypeName, aLibrary) or - IsArray(aTypeName, aLibrary); -end; - -function GetFullyQualifiedTypeName(const aTypeName:string; aLibrary:TRODLLibrary; const iDefault:string):string; -var i : integer; -begin - for i := 0 to (aLibrary.Count-1) do - with aLibrary.Items[i] do - if (CompareText(aLibrary.Items[i].Info.Name, aTypeName)=0) then begin - if IsFromUsedRodl then - result := ChangeFileExt(ExtractFileName(LocatedInRodlUse.RodlFile),'')+'_Intf.'+Info.Name - else - result := iDefault+'.'+Info.Name; - exit; - end; - result := iDefault+'.'+aTypeName; -end; - -function IsStruct(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; -var i : integer; -begin - result := FALSE; - for i := 0 to (aLibrary.StructCount-1) do - if (CompareText(aLibrary.Structs[i].Info.Name, aTypeName)=0) then begin - aTypeName := aLibrary.Structs[i].Info.Name; - result := TRUE; - Exit; - end -end; - -function IsEnum(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; -var i : integer; -begin - result := FALSE; - for i := 0 to (aLibrary.EnumCount-1) do - if (CompareText(aLibrary.Enums[i].Info.Name, aTypeName)=0) then begin - aTypeName := aLibrary.Enums[i].Info.Name; - result := TRUE; - Exit; - end -end; - -function IsArray(var aTypeName : string; aLibrary : TRODLLibrary) : boolean; -var i : integer; -begin - result := FALSE; - for i := 0 to (aLibrary.ArrayCount-1) do - if (CompareText(aLibrary.Arrays[i].Info.Name, aTypeName)=0) then begin - aTypeName := aLibrary.Arrays[i].Info.Name; - result := TRUE; - Exit; - end -end; - -function IsArray(var aTypeName : string; aLibrary : TRODLLibrary; out oElementType:string) : boolean; -var i : integer; -begin - result := FALSE; - for i := 0 to (aLibrary.ArrayCount-1) do - if (CompareText(aLibrary.Arrays[i].Info.Name, aTypeName)=0) then begin - oElementType := aLibrary.Arrays[i].ElementType; - aTypeName := aLibrary.Arrays[i].Info.Name; - result := TRUE; - Exit; - end -end; - - -function IsImplementedAsClass(const aTypeName:string; aLibrary:TRODLLibrary):boolean; -var - lTypeName:string; -begin - lTypeName := aTypeName; - result := (CompareText(lTypeName, DataTypeNames[rtBinary]) = 0) or //'Binary' - IsStruct(lTypeName, aLibrary) or - IsArray(lTypeName, aLibrary); -end; - -{ TROComplexType } - -procedure TROComplexType.Assign(iSource:TPersistent); -begin - if not (iSource.InheritsFrom(ClassType)) then - inherited Assign(iSource); -end; - -procedure TROComplexType.AssignTo(iDest: TPersistent); -begin - inherited; -end; - -function TROComplexType.Clone: TROComplexType; -begin - Result := ClassType.Create() as TROComplexType; - Result.Assign(self); -end; - -constructor TROComplexType.Create; -begin - inherited Create(NIL); - fFieldCount := -1; - fFieldList := NIL; -end; - -constructor TROComplexType.Create(aCollection: TCollection); -begin - inherited Create(aCollection); - fFieldCount := -1; - fFieldList := NIL; -end; - -destructor TROComplexType.Destroy; -begin - FreeInternalProperties; - - if (fFieldCount<>-1) and (fFieldList<>NIL) - then FreeMem(fFieldList, fFieldCount*SizeOf(PPropInfo)); - - inherited; -end; - -procedure TROComplexType.FreeInternalProperties; -var props : PPropList; - cnt, i : integer; - sub : TObject; -begin - cnt := GetTypeData(ClassInfo).PropCount; - if (cnt=0) then Exit; - - GetMem(props, cnt*SizeOf(PPropInfo)); - try - cnt := GetPropList(ClassInfo, [tkClass], props); - - for i := 0 to (cnt-1) do begin - with props^[i]^ do - if (PropType^.Kind=tkClass) then begin - sub := GetObjectProp(Self, Name); - sub.Free; - end; - end; - finally - FreeMem(props, cnt*SizeOf(PPropInfo)); - end; -end; - -function TROComplexType.GetFieldCount: integer; -begin - if (fFieldCount=-1) then begin - fFieldCount := GetTypeData(ClassInfo).PropCount; - if (fFieldCount>0) then begin - GetMem(fFieldList, fFieldCount*SizeOf(PPropInfo)); - GetPropList(PTypeInfo(ClassInfo), tkProperties, fFieldList); - end; - end; - - result := fFieldCount; -end; - -function TROComplexType.GetFieldInfo(Index: integer): PTypeInfo; -begin - result := NIL; - if (Index tkClass then begin - - result.Add( - makeIndent( - Format( - 'field%d %s: %s = %s', - [ - i + 1, - fieldNames[i], - Self.GetFieldInfo(i)^.Name, - VarToStr(Self.GetFieldValue(fieldNames[i])) - ] - ) - ) - ); - - - end else begin - subItem := TROComplexType( - GetObjectProp( - Self, - fieldNames[i], - TROComplexType - ) - ); - - if not Assigned(subItem) then continue; - if (subItem is TROArray) then begin - - result.Add( - makeIndent( - Format( - 'field%d %s', - [ - i + 1, - fieldNames[i] - ] - ) - ) - ); - - result.AddStrings( - makeIndent(2, (subItem as TROArray).GetContentAsStrings()) - ); - - result.Add( - makeIndent('end') - ); - - - end else begin - - result.Add( - makeIndent( - Format( - 'field%d %s', - [ - i + 1, - fieldNames[i] - ] - ) - ) - ); - - result.AddStrings( - makeIndent(2, (subItem as TROComplexType).GetContentAsStrings()) - ); - - result.Add( - makeIndent('end') - ); - end; - end; - end; - - result.Add('end');// Structure - - finally - fieldNames.Free(); - end; -end; - -function TROComplexType.GetContentAsString: String; -var sl:TStrings; -begin - sl := Self.GetContentAsStrings(); - result := sl.Text; - sl.Free(); -end; - -function TROComplexType.GetContentAsXml: String; -var - fieldNames: TStringList; - i: integer; - typeKind: TTypeKind; - subItem: TROComplexType; -begin - fieldNames := TStringList.Create(); - - Self.GetFieldNames(fieldNames); - try - result := Format('', [Self.ClassName]); - for i := 0 to Self.FieldCount - 1 do begin - typeKind := Self.GetFieldInfo(i)^.Kind; - if typeKind <> tkClass then begin - - result := result + - Format('%s', - [fieldNames[i], Self.GetFieldInfo(i)^.Name, VarToStr(Self.GetFieldValue(fieldNames[i]))] - ); - - - end else begin - subItem := TROComplexType( - GetObjectProp( - Self, - fieldNames[i], - TROComplexType - ) - ); - - if not Assigned(subItem) then continue; - if (subItem is TROArray) then begin - - result := result + - Format('%s', - [ - fieldNames[i], - Self.GetFieldInfo(i)^.Name, - (subItem as TROArray).ContentAsXml - ] - ); - - - end else - - result := result + - Format('%s', - [ - fieldNames[i], - Self.GetFieldInfo(i)^.Name, - (subItem as TROComplexType).GetContentAsXml() - ] - ); - end; - end; - result := result + ''; - - finally - fieldNames.Free(); - end; -end; - -procedure TROComplexType.GetFieldNames(aList: TStrings); -var count: integer; - data: PTypeData; - i: integer; - info: PTypeInfo; - propList: PPropList; -begin - aList.Clear; - - info := ClassInfo; - data := GetTypeData(info); - GetMem(propList, data^.PropCount * SizeOf(PPropInfo)); - try - count := GetPropList(info, tkProperties, propList); - - for i := 0 to (count-1) do aList.Add(propList^[i]^.Name); - - finally - FreeMem(propList, data^.PropCount * SizeOf(PPropInfo)); - end; -end; - -function TROComplexType.GetFieldValue(const aFieldName: string): Variant; -begin - if (aFieldName<>'') then result := GetPropValue(Self, aFieldName) - else result := ''; -end; - -procedure TROComplexType.SetFieldValue(const aFieldName: string; - const aValue: Variant); -begin - if (aFieldName<>'') - then SetPropValue(Self, aFieldName, aValue); -end; - -procedure TROComplexType.SmartAssign(Source: TPersistent; - TypeKinds: TTypeKinds); -begin - uROTypes.SmartAssign(Source, Self, TypeKinds); -end; - - - -procedure TROComplexType.ReadComplex(ASerializer: TObject); -begin - ReadObjectFromSerializer(TROSerializer(ASerializer),Self); -end; - -procedure TROComplexType.WriteComplex(ASerializer: TObject); -begin - WriteObjectToSerializer(TROSerializer(ASerializer),Self); -end; - -class function TROComplexType.GetAttributeCount: Integer; -begin - result := 0; -end; - -class function TROComplexType.GetAttributeName(aIndex: Integer): string; -begin - result := ''; -end; - -class function TROComplexType.GetAttributeValue(aIndex: Integer): string; -begin - result := ''; -end; - -{ TROArray } -destructor TROArray.Destroy; -begin - Clear; - - inherited; -end; - -function TROArray.Clone: TROArray; -begin - Result := ClassType.Create() as TROArray; - Result.Assign(self); -end; - -class function TROArray.GetItemClass : TClass; -begin - result := nil; -end; - -{$IFDEF DELPHI10UP} -class function TROArray.GetItemType : PTypeInfo; -begin - raise EROAbstractMethodCalled.Create('Abstract method called: TROArray.GetItemType.'); -end; - -class function TROArray.GetItemSize : integer; -begin - raise EROAbstractMethodCalled.Create('Abstract method called: TROArray.GetItemSize.'); -end; -{$ENDIF DELPHI10UP} - -procedure TROArray.SetItemRef(Index: integer; Ref: pointer); -begin - { NOOP. MUST be overwritten for arrays of non-simple types } -end; - -function TROArray.GetIndex(const aPropertyName: string; - const aPropertyValue: Variant; StartFrom: integer; - Options: TROSearchOptions): integer; -var i : integer; - val : Variant; - curritem : TObject; -begin - result := -1; - - for i := StartFrom to (Count-1) do begin - curritem := GetItemRef(i); - if (curritem=NIL) then Continue; - - val := GetPropValue(curritem, aPropertyName, FALSE); - - if (soIgnoreCase in Options) then begin - if (VarToStr(val)=VarToStr(aPropertyValue)) then begin - result := i; - Exit; - end; - end - else begin - if (val=aPropertyValue) then begin - result := i; - Exit; - end; - end; - end; -end; - -function TROArray.GetContentAsXml(): String; -var - i: integer; - pPtr: Pointer; - iTypeInfo: PTypeInfo; - s: String; -begin - - iTypeInfo:= Self.GetItemType; - result := Format('', [Self.ClassName, iTypeInfo.Name]); - s := Self.ClassName; - if (s = 'StringArrayField') then begin - end; - for i:=0 to Self.Count - 1 do begin - pPtr:= Self.GetItemRef(i); - case iTypeInfo.Kind of - tkWString: - result := result + Format('%s', [i + 1, WideString(pPtr^)]); - tkInteger: - result := result + Format('%d', [i + 1, Integer(pPtr^)]); - tkLString: - result := result + Format('%s', [i + 1, String(pPtr^)]); - tkClass: begin - if TObject(pPtr) is TROArray then begin - result := result + Format('%s', [i + 1, TROArray(pPtr).ContentAsXml]); - end else begin - if (TObject(pPtr) is TROComplexType) then begin - result := result + Format('%s', [i + 1, (TObject(pPtr) as TROComplexType).ContentAsXml]); - end; - end; - end; - // other kind of tkxxx should be implemented - end; - end; - result := result + ''; -end; - -function TROArray.GetContentAsStrings(): TStrings; -var - i: integer; - pPtr: Pointer; - iTypeInfo: PTypeInfo; - - function makeIndent(value: String): String; overload; - begin - Result := StringOfChar(' ', 2) + value; - end; - - function makeIndent(indent: integer; value: String): String; overload; - begin - Result := StringOfChar(' ', 2*indent) + value; - end; - - function makeIndent(value: TStrings): TStrings; overload; - var i: Integer; - begin - for i := 0 to value.count - 1 do - value[i] := makeindent(value[i]); - result := value; - end; - - function makeIndent(indent: integer; value: TStrings): TStrings; overload; - var i: Integer; - begin - for i := 0 to value.count - 1 do - value[i] := makeindent(indent, value[i]); - result := value; - end; - -begin - result := TStringList.Create(); - iTypeInfo:= Self.GetItemType; - result.Add(Format('%s:%s', [Self.ClassName, iTypeInfo.Name])); - for i:=0 to Self.Count - 1 do begin - pPtr:= Self.GetItemRef(i); - case iTypeInfo.Kind of - tkWString: - result.Add(makeIndent(Format('item%d=%s', [i + 1, WideString(pPtr^)]))); - - tkInteger: - result.Add(makeIndent(Format('item%d=%d', [i + 1, Integer(pPtr^)]))); - - tkLString: - result.Add(makeIndent(Format('item%d=%s', [i + 1, String(pPtr^)]))); - - tkFloat: - result.Add(makeIndent(Format('item%d=%f', [i + 1, Double(pPtr^)]))); - - tkChar: - result.Add(makeIndent(Format('item%d=%s', [i + 1, String(pPtr^)]))); - - tkClass: begin - if TObject(pPtr) is TROArray then begin - result.Add(makeIndent(Format('item%d=array1', [i]))); - result.AddStrings(makeIndent(2, TROArray(pPtr).GetContentAsStrings())); - end else begin - if (TObject(pPtr) is TROComplexType) then begin - result.Add(makeIndent(Format('item%d=structure1', [i]))); - result.AddStrings(makeIndent(2,(TObject(pPtr) as TROComplexType).GetContentAsStrings())); - end; - end; - end; - // other kind of tkxxx should be implemented - end; - end; -end; - -function TROArray.Search(const aPropertyName : string; - const aPropertyValue : Variant; StartFrom : integer = 0; - Options : TROSearchOptions = [soIgnoreCase]) : TCollectionItem; -var idx : integer; -begin - idx := GetIndex(aPropertyName, aPropertyValue, StartFrom, Options); - if (idx>=0) - then result := GetItemRef(idx) - else result := NIL; -end; - - -procedure TROArray.ReadComplex(ASerializer: TObject); -var - i : integer; - itemref : pointer; -begin - inherited; - if (GetItemClass<>NIL) then begin - for i := 0 to (Count-1) do begin - itemref := NIL; - TROSerializer(ASerializer).Read(TROSerializer(ASerializer).GetArrayElementName(GetItemType, itemref), GetItemType, itemref, i); - SetItemRef(i, itemref); - end; - end - else begin - for i := 0 to (Count-1) do begin - itemref := GetItemRef(i); - TROSerializer(ASerializer).Read(TROSerializer(ASerializer).GetArrayElementName(GetItemType, itemref), GetItemType, itemref^, i); - end; - end; -end; - -procedure TROArray.WriteComplex(ASerializer: TObject); -var - i : integer; - itemref : pointer; -begin - inherited; - if (GetItemClass<>NIL) then begin - for i := 0 to (Count-1) do begin - itemref := GetItemRef(i); - TROSerializer(ASerializer).Write(TROSerializer(ASerializer).GetArrayElementName(GetItemType, itemref), GetItemType, itemref, i); - end; - end - else begin - for i := 0 to (Count-1) do begin - itemref := GetItemRef(i); - TROSerializer(ASerializer).Write(TROSerializer(ASerializer).GetArrayElementName(GetItemType, itemref), GetItemType, itemref^, i); - end; - end; -end; - -{$IFDEF RemObjects_Trial} -{$INCLUDE RemObjects_Trial.inc} -{$ENDIF RemObjects_Trial} - -initialization - {$IFDEF RemObjects_Trial} - Check(); - {$ENDIF RemObjects_Trial} - _ComplexTypes := TList.Create; - -finalization - _ComplexTypes.Free; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROUnicodeConv.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROUnicodeConv.pas deleted file mode 100644 index 7e98505..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROUnicodeConv.pas +++ /dev/null @@ -1,3665 +0,0 @@ -unit uROUnicodeConv; - -// UnicodeConv 2.0.0 -// Unicode Converter Library 2.0.0 -// Delphi 3/4/5/6 and Kylix Implementation -// -// Copyright (c) 2002 by Dieter Köhler -// ("http://www.philo.de/xml/") -// -// Definitions: -// - "Package" refers to the collection of files distributed by -// the Copyright Holder, and derivatives of that collection of -// files created through textual modification. -// - "Standard Version" refers to such a Package if it has not -// been modified, or has been modified in accordance with the -// wishes of the Copyright Holder. -// - "Copyright Holder" is whoever is name in the copyright or -// copyrights for the package. -// - "You" is you, if you're thinking about copying or distributing -// this Package. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Package"), to deal in the Package without restriction, -// including without limitation the rights to use, copy, modify, -// merge, publish, distribute, sublicense, and/or sell copies of the -// Package, and to permit persons to whom the Package is furnished -// to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Package. -// -// You may modify your copy of this Package in any way, provided -// that you insert a prominent notice in each changed file stating -// how and when you changed a file, and provided that you do at -// least one of the following: -// -// a) allow the Copyright Holder to include your modifications in -// the Standard Version of the Package. -// -// b) use the modified Package only within your corporation or -// organization. -// -// c) rename any non standard executables, units, and classes so -// the names do not conflict with standard executables, units, and -// classes, and provide a separate manual page that clearly documents -// how it differs from the standard version. -// -// d) make other distribution arrangements with the Copyright Holder. -// -// The name of the Copyright Holder may not be used to endorse or -// promote products derived from this Package without specific prior -// written permission. -// -// THE PACKAGE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// PACKAGE OR THE USE OR OTHER DEALINGS IN THE PACKAGE. - -interface -{$I RemObjects.inc} -uses - SysUtils, Classes; - -type - TdomEncodingType = (etUnknown,etUTF8,etUTF16BE,etUTF16LE,etLatin1, - etLatin2,etLatin3,etLatin4,etCyrillic,etArabic, - etGreek,etHebrew,etLatin5,etLatin6,etLatin7, - etLatin8,etLatin9,etKOI8R,etcp10000_MacRoman, - etWindows1250,etWindows1251,etWindows1252); - - EConversionStream = class(EStreamError); - - TConversionStream = class(TStream) - private - FTarget: TStream; - FConvertCount: longint; - FConvertBufP: pointer; - FConvertBufSize: longint; - protected - function convertReadBuffer(const buffer; count: longint): longint; virtual; - function convertWriteBuffer(const buffer; count: longint): longint; virtual; - procedure setConvertBufSize(newSize: longint); virtual; - public - constructor Create(target: TStream); - destructor Destroy; override; - function Read(var buffer; count: longint): longint; override; - function Write(const buffer; count: longint): longint; override; - function Seek(offset: longint; origin: word): longint; override; - procedure FreeConvertBuffer; - property Target: TStream read FTarget; - property ConvertBufP: pointer read FConvertBufP; - property ConvertCount: longint read FConvertCount; - property ConvertBufSize: longint read FConvertBufSize; - end; - - TUTF16BEToUTF8Stream = class(TConversionStream) - private - FExpandLF: boolean; - protected - function convertWriteBuffer(const buffer; count: longint): longint; override; - public - property expandLF: boolean read FExpandLF write FExpandLF; - end; - -function StrToEncoding(const S: String): TdomEncodingType; - -function SingleByteEncodingToUTF16Char(const P: Char; const Encoding: TdomEncodingType): WideChar; - -function Iso8859_1ToUTF16Char(const P: Char): WideChar; -function Iso8859_2ToUTF16Char(const P: Char): WideChar; -function Iso8859_3ToUTF16Char(const P: Char): WideChar; -function Iso8859_4ToUTF16Char(const P: Char): WideChar; -function Iso8859_5ToUTF16Char(const P: Char): WideChar; -function Iso8859_6ToUTF16Char(const P: Char): WideChar; -function Iso8859_7ToUTF16Char(const P: Char): WideChar; -function Iso8859_8ToUTF16Char(const P: Char): WideChar; -function Iso8859_9ToUTF16Char(const P: Char): WideChar; -function Iso8859_10ToUTF16Char(const P: Char): WideChar; -function Iso8859_13ToUTF16Char(const P: Char): WideChar; -function Iso8859_14ToUTF16Char(const P: Char): WideChar; -function Iso8859_15ToUTF16Char(const P: Char): WideChar; -function KOI8_RToUTF16Char(const P: Char): WideChar; -function cp10000_MacRomanToUTF16Char(const P: Char): WideChar; -function cp1250ToUTF16Char(const P: Char): WideChar; -function cp1251ToUTF16Char(const P: Char): WideChar; -function cp1252ToUTF16Char(const P: Char): WideChar; -function Iso8859_1ToUTF16Str(const S: string): wideString; -function Iso8859_2ToUTF16Str(const S: string): wideString; -function Iso8859_3ToUTF16Str(const S: string): wideString; -function Iso8859_4ToUTF16Str(const S: string): wideString; -function Iso8859_5ToUTF16Str(const S: string): wideString; -function Iso8859_6ToUTF16Str(const S: string): wideString; -function Iso8859_7ToUTF16Str(const S: string): wideString; -function Iso8859_8ToUTF16Str(const S: string): wideString; -function Iso8859_9ToUTF16Str(const S: string): wideString; -function Iso8859_10ToUTF16Str(const S: string): wideString; -function Iso8859_13ToUTF16Str(const S: string): wideString; -function Iso8859_14ToUTF16Str(const S: string): wideString; -function Iso8859_15ToUTF16Str(const S: string): wideString; -function KOI8_RToUTF16Str(const S: string): wideString; -function cp10000_MacRomanToUTF16Str(const S: string): wideString; -function cp1250ToUTF16Str(const S: string): wideString; -function cp1251ToUTF16Str(const S: string): wideString; -function cp1252ToUTF16Str(const S: string): wideString; -function UTF8ToUTF16BEStr(const S: string): wideString; -function UTF16BEToUTF8Str(const ws: wideString; - const expandLF: boolean): string; - -function UTF16To7BitASCIIChar(const P: wideChar): char; -function UTF16ToIso8859_1Char(const P: wideChar): char; -function UTF16To7BitASCIIStr(const S: wideString): string; -function UTF16ToIso8859_1Str(const S: wideString): string; - -function UTF16HighSurrogate(const value: integer): WideChar; -function UTF16LowSurrogate(const value: integer): WideChar; -function UTF16SurrogateToInt(const highSurrogate, lowSurrogate: WideChar): integer; -function IsUTF16HighSurrogate(const S: WideChar): boolean; -function IsUTF16LowSurrogate(const S: WideChar): boolean; - -type - ECSMIBException = Exception; - - TCSMIBChangingEvent = procedure (Sender: TObject; - NewEnum: integer; - var AllowChange: Boolean) of object; - - TCSMIB = class (TComponent) - protected - FEnum: integer; - FIgnoreInvalidEnum: boolean; - FOnChanging: TCSMIBChangingEvent; - FOnChange: TNotifyEvent; - procedure DoChange(Sender: TObject); virtual; - procedure DoChanging(Sender: TObject; - NewEnum: integer; - var AllowChange: Boolean); virtual; - function GetPrfMIMEName: string; virtual; - function GetAlias(i: integer): string; virtual; - function GetAliasCount: integer; virtual; - procedure SetEnum(const Value: integer); virtual; - procedure SetOnChange(const Value: TNotifyEvent); virtual; - procedure SetOnChanging(const Value: TCSMIBChangingEvent); virtual; - public - constructor Create(AOwner: TComponent); override; - function IsValidEnum(const Value: integer): boolean; virtual; - function SetToAlias(const S: string): boolean; virtual; - property Alias[i: integer]: string read GetAlias; - property AliasCount: integer read GetAliasCount; - property PreferredMIMEName: string read GetPrfMIMEName; - published - property OnChange: TNotifyEvent read FOnChange write SetOnChange; - property OnChanging: TCSMIBChangingEvent read FOnChanging write SetOnChanging; - property Enum: integer read FEnum write SetEnum; - property IgnoreInvalidEnum: boolean read FIgnoreInvalidEnum write FIgnoreInvalidEnum; - end; - - -{procedure Register;} - -implementation - -{procedure Register; -begin - RegisterComponents('XML', [TCSMIB]); -end;} - -resourcestring - SOddSizeInvalid = 'Odd size not valid for WideString'; - STargetNil = 'Must have a target stream'; - - -// +++++++++++++++++++++++++ TConversionStream +++++++++++++++++++++++++ -// - Provided by Karl Waclawek - -// This is an input/output stream for other streams. -// Purpose: transform data as they are written to or read from a target -// stream. -constructor TConversionStream.create(Target: TStream); -begin - if Target = nil then raise EConversionStream.create(STargetNil); - inherited create; - FTarget := Target; -end; - -destructor TConversionStream.destroy; -begin - FreeMem(FConvertBufP); - inherited destroy; -end; - -function TConversionStream.Seek(Offset: longint; Origin: Word): longint; -begin - Result := 0; // Seek makes no sense here -end; - -function TConversionStream.ConvertReadBuffer(const Buffer; Count: longint): longint; -// Performs the actual conversion of the data in Buffer (read buffer); -// the result of the conversion must be written to ConvertBufB } -begin - Result := 0; //do nothing, override in descendants -end; - -function TConversionStream.ConvertWriteBuffer(const Buffer; Count: longint): longint; -// Performs the actual conversion of the data in Buffer (write buffer); -// the result of the conversion must be written to ConvertBufB } -begin - Result := 0; //do nothing, override in descendants -end; - -function TConversionStream.Read(var Buffer; Count: longint): longint; -// Reads Count bytes from target stream into Buffer; -// converts those bytes and stores the result in ConvertBufP; -// ConvertCount indicates the amount of bytes converted. -begin - Result := Target.Read(Buffer, Count); - FConvertCount := ConvertReadBuffer(Buffer, Result); -end; - -function TConversionStream.Write(const Buffer; Count: longint): longint; -// Converts Count bytes from Buffer into ConvertBufP; -// ConvertCount indicates the amount of bytes converted; -// if not all converted bytes could be written to the target stream, -// then this returns the negative of the number of bytes actually written. -begin - Result := Count; - FConvertCount := ConvertWriteBuffer(Buffer, Result); - Count := Target.Write(FConvertBufP^, FConvertCount); - //if not all converted data could be written, return the negative - //count of the data actually written. This avoids having Result - //being the same as Count by coincidence - if Count <> FConvertCount then Result := -Count; -end; - -procedure TConversionStream.FreeConvertBuffer; -begin - ReallocMem(FConvertBufP, 0); - FConvertBufSize := 0; -end; - -procedure TConversionStream.SetConvertBufSize(NewSize: Integer); -begin - ReallocMem(FConvertBufP, NewSize); - FConvertBufSize := NewSize; -end; - - -// ++++++++++++++++++++++++++ TUTF16BEToUTF8Stream +++++++++++++++++++++++ -function TUTF16BEToUTF8Stream.ConvertWriteBuffer(const Buffer; - Count: Integer): longint; -// Converts an UTF-16BE stream into an UTF-8 encoded stream -// (and expands LF to CR+LF if its protected expandLF property -// is 'true'). -// - This function was provided by Ernst van der Pols - -// - expandLF parameter added by Dieter Köhler - -// - converted for stream processing by Karl Waclawek - -type - TWideCharBuf = array[0..(MaxInt shr 1) - 1] of WideChar; -var - InIndx, OutIndx: longint; - Wc: WideChar; - InBuf: TWideCharBuf absolute Buffer; - - procedure IncBufSize(BufSize: longint); - var - Delta: longint; - begin - Inc(BufSize); - Delta := BufSize shr 2; - if Delta < 8 then Delta := 8; - BufSize := ((BufSize + Delta) shr 2) shl 2; //make it multiple of 4 - setConvertBufSize(BufSize); - end; - - procedure UCS4CodeToUTF8String(Code: longint); - const - MaxCode: array[0..5] of longint = ($7F,$7FF,$FFFF,$1FFFFF,$3FFFFFF,$7FFFFFFF); - FirstByte: array[0..5] of Byte = (0,$C0,$E0,$F0,$F8,$FC); - var - Mo, Indx, StartIndx: longint; - begin - Mo := 0; // get number of bytes - while ((Code > MaxCode[Mo]) and (Mo < 5)) do Inc(Mo); - StartIndx := OutIndx; - OutIndx := StartIndx + Mo; - if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); - for Indx := OutIndx downto StartIndx + 1 do // fill bytes from rear end - begin - PChar(FConvertBufP)[Indx] := Char($80 or (Code and $3F)); - Code := Code shr 6; - end; - PChar(FConvertBufP)[StartIndx] := Char(FirstByte[Mo] or Code); // fill first byte - end; - -begin - Result := 0; - if Count = 0 then Exit; - if Odd(Count) then raise EConversionStream.create(SOddSizeInvalid); - Count := Count shr 1; //for initial size, assume all low ASCII chars - if Count > ConvertBufSize then setConvertBufSize(Count); - OutIndx := -1; // keep track of end position - InIndx := 0; - if InBuf[0] = #$feff then Inc(InIndx); // Test for BOM - - while InIndx < Count do begin - Wc := InBuf[InIndx]; - case Word(Wc) of - $0020..$007F,$0009,$000D: // plain ASCII - begin - Inc(OutIndx); - if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); - PChar(FConvertBufP)[OutIndx]:= Char(Wc); - end; - $000A: // LF --> CR+LF - if ExpandLF then - begin - Inc(OutIndx, 2); - if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); - PChar(FConvertBufP)[OutIndx - 1] := Chr(13); - PChar(FConvertBufP)[OutIndx] := Chr(10); - end - else - begin - Inc(OutIndx); - if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); - PChar(FConvertBufP)[OutIndx] := Chr(10); - end; - $D800..$DBFF: // high surrogate - begin - Inc(InIndx); - if (InIndx < (Count - 1)) and (Word(InBuf[InIndx]) >= $DC00) - and (Word(InBuf[InIndx]) <= $DFFF) then - begin - Inc(OutIndx); - UCS4CodeToUTF8String(Utf16SurrogateToInt(Wc, InBuf[InIndx])); - end - else - raise EConvertError.CreateFmt( - 'High surrogate %4.4X without low surrogate.',[Word(Wc)]); - end; - $DC00..$DFFF: // low surrogate - begin - Inc(InIndx); - if (InIndx < (Count - 1)) and (Word(InBuf[InIndx]) >= $D800) - and (Word(InBuf[InIndx]) <= $DBFF) then - begin - Inc(OutIndx); - UCS4CodeToUTF8String(Utf16SurrogateToInt(InBuf[InIndx], Wc)); - end - else - raise EConvertError.CreateFmt( - 'Low surrogate %4.4X without high surrogate.',[Word(Wc)]); - end; - $0080..$D7FF,$E000..$FFFD: - begin - Inc(OutIndx); - UCS4CodeToUTF8String(Word(Wc)); - end; - end; {case ...} - Inc(InIndx); - end; { while ...} - Result := OutIndx + 1; -end; - - -// +++++++++++++++++++ encoding detection functions +++++++++++++++++++++ - -function StrToEncoding(const S: String): TdomEncodingType; -var - csmib: TCSMIB; -begin - if (CompareText(S,'cp10000_MacRoman') = 0) - then begin result:= etcp10000_MacRoman; exit; end; - - csmib:= TCSMIB.Create(nil); - try - if csmib.SetToAlias(S) then begin - case csmib.Enum of - 4: result:= etLatin1; - 5: result:= etLatin2; - 6: result:= etLatin3; - 7: result:= etLatin4; - 8: result:= etCyrillic; - 9: result:= etArabic; - 10: result:= etGreek; - 11: result:= etHebrew; - 12: result:= etLatin5; - 13: result:= etLatin6; - 106: result:= etUTF8; - 109: result:= etLatin7; - 110: result:= etLatin8; - 111: result:= etLatin9; - 1013,1015: result:= etUTF16BE; - 1014: result:= etUTF16LE; - 2084: result:= etKOI8R; - 2250: result:= etWindows1250; - 2251: result:= etWindows1251; - 2252: result:= etWindows1252; - else - result:= etUnknown; - end; - end else result:= etUnknown; - finally - csmib.free; - end; -end; - - -// ++++++++++++++++++++++ conversion functions ++++++++++++++++++++++++ - -function SingleByteEncodingToUTF16Char(const P: Char; const Encoding: TdomEncodingType):WideChar; -begin - case Encoding of - etLatin1: result:= Iso8859_1ToUTF16Char(P); - etLatin2: result:= Iso8859_2ToUTF16Char(P); - etLatin3: result:= Iso8859_3ToUTF16Char(P); - etLatin4: result:= Iso8859_4ToUTF16Char(P); - etCyrillic: result:= Iso8859_5ToUTF16Char(P); - etArabic: result:= Iso8859_6ToUTF16Char(P); - etGreek: result:= Iso8859_7ToUTF16Char(P); - etHebrew: result:= Iso8859_8ToUTF16Char(P); - etLatin5: result:= Iso8859_9ToUTF16Char(P); - etLatin6: result:= Iso8859_10ToUTF16Char(P); - etLatin7: result:= Iso8859_13ToUTF16Char(P); - etLatin8: result:= Iso8859_14ToUTF16Char(P); - etLatin9: result:= Iso8859_15ToUTF16Char(P); - etKOI8R: result:= KOI8_RToUTF16Char(P); - etcp10000_MacRoman: result:= cp10000_MacRomanToUTF16Char(P); - etWindows1250: result:= cp1250ToUTF16Char(P); - etWindows1251: result:= cp1251ToUTF16Char(P); - etWindows1252: result:= cp1252ToUTF16Char(P); - else - raise EConvertError.Create('Invalid encoding type specified'); - end; -end; - -function Iso8859_1ToUTF16Char(const P: Char):WideChar; -begin - result:= WideChar(ord(P)); -end; - -function Iso8859_2ToUTF16Char(const P: Char):WideChar; -begin - case ord(p) of - $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK - $a2: result:= #$02d8; // BREVE - $a3: result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE - $a5: result:= #$0132; // LATIN CAPITAL LETTER L WITH CARON - $a6: result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE - $a9: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON - $aa: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA - $ab: result:= #$0164; // LATIN CAPITAL LETTER T WITH CARON - $ac: result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE - $ae: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $af: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE - $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK - $b2: result:= #$02db; // OGONEK - $b3: result:= #$0142; // LATIN SMALL LETTER L WITH STROKE - $b5: result:= #$013e; // LATIN SMALL LETTER L WITH CARON - $b6: result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE - $b7: result:= #$02c7; // CARON - $b9: result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $ba: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA - $bb: result:= #$0165; // LATIN SMALL LETTER T WITH CARON - $bc: result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE - $bd: result:= #$02dd; // DOUBLE ACUTE ACCENT - $be: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $bf: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE - $c0: result:= #$0154; // LATIN CAPITAL LETTER R WITH ACUTE - $c3: result:= #$0102; // LATIN CAPITAL LETTER A WITH BREVE - $c5: result:= #$0139; // LATIN CAPITAL LETTER L WITH ACUTE - $c6: result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE - $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON - $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK - $cc: result:= #$011a; // LATIN CAPITAL LETTER E WITH CARON - $cf: result:= #$010e; // LATIN CAPITAL LETTER D WITH CARON - $d0: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE - $d1: result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE - $d2: result:= #$0147; // LATIN CAPITAL LETTER N WITH CARON - $d5: result:= #$0150; // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - $d8: result:= #$0158; // LATIN CAPITAL LETTER R WITH CARON - $d9: result:= #$016e; // LATIN CAPITAL LETTER U WITH RING ABOVE - $db: result:= #$0170; // LATIN CAPITAL LETTER U WITH WITH DOUBLE ACUTE - $de: result:= #$0162; // LATIN CAPITAL LETTER T WITH CEDILLA - $e0: result:= #$0155; // LATIN SMALL LETTER R WITH ACUTE - $e3: result:= #$0103; // LATIN SMALL LETTER A WITH BREVE - $e5: result:= #$013a; // LATIN SMALL LETTER L WITH ACUTE - $e6: result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE - $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON - $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK - $ec: result:= #$011b; // LATIN SMALL LETTER E WITH CARON - $ef: result:= #$010f; // LATIN SMALL LETTER D WITH CARON - $f0: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE - $f1: result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE - $f2: result:= #$0148; // LATIN SMALL LETTER N WITH CARON - $f5: result:= #$0151; // LATIN SMALL LETTER O WITH DOUBLE ACUTE - $f8: result:= #$0159; // LATIN SMALL LETTER R WITH CARON - $f9: result:= #$016f; // LATIN SMALL LETTER U WITH RING ABOVE - $fb: result:= #$0171; // LATIN SMALL LETTER U WITH WITH DOUBLE ACUTE - $fe: result:= #$0163; // LATIN SMALL LETTER T WITH CEDILLA - $ff: result:= #$02d9; // DOT ABOVE - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_3ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a1: result:= #$0126; // LATIN CAPITAL LETTER H WITH STROKE - $a2: result:= #$02d8; // BREVE - $a5: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $a6: result:= #$0124; // LATIN CAPITAL LETTER H WITH CIRCUMFLEX - $a9: result:= #$0130; // LATIN CAPITAL LETTER I WITH DOT ABOVE - $aa: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA - $ab: result:= #$011e; // LATIN CAPITAL LETTER G WITH BREVE - $ac: result:= #$0134; // LATIN CAPITAL LETTER J WITH CIRCUMFLEX - $ae: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $af: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT - $b1: result:= #$0127; // LATIN SMALL LETTER H WITH STROKE - $b6: result:= #$0125; // LATIN SMALL LETTER H WITH CIRCUMFLEX - $b9: result:= #$0131; // LATIN SMALL LETTER DOTLESS I - $ba: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA - $bb: result:= #$011f; // LATIN SMALL LETTER G WITH BREVE - $bc: result:= #$0135; // LATIN SMALL LETTER J WITH CIRCUMFLEX - $be: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $bf: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT - $c3: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $c5: result:= #$010a; // LATIN CAPITAL LETTER C WITH DOT ABOVE - $c6: result:= #$0108; // LATIN CAPITAL LETTER C WITH CIRCUMFLEX - $d0: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $d5: result:= #$0120; // LATIN CAPITAL LETTER G WITH DOT ABOVE - $d8: result:= #$011c; // LATIN CAPITAL LETTER G WITH CIRCUMFLEX - $dd: result:= #$016c; // LATIN CAPITAL LETTER U WITH BREVE - $de: result:= #$015c; // LATIN CAPITAL LETTER S WITH CIRCUMFLEX - $e3: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $e5: result:= #$010b; // LATIN SMALL LETTER C WITH DOT ABOVE - $e6: result:= #$0109; // LATIN SMALL LETTER C WITH CIRCUMFLEX - $f0: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); - $f5: result:= #$0121; // LATIN SMALL LETTER G WITH DOT ABOVE - $f8: result:= #$011d; // LATIN SMALL LETTER G WITH CIRCUMFLEX - $fd: result:= #$016d; // LATIN SMALL LETTER U WITH BREVE - $fe: result:= #$015d; // LATIN SMALL LETTER S WITH CIRCUMFLEX - $ff: result:= #$02d9; // DOT ABOVE - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_4ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK - $a2: result:= #$0138; // LATIN SMALL LETTER KRA - $a3: result:= #$0156; // LATIN CAPITAL LETTER R WITH CEDILLA - $a5: result:= #$0128; // LATIN CAPITAL LETTER I WITH TILDE - $a6: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA - $a9: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON - $aa: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON - $ab: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA - $ac: result:= #$0166; // LATIN CAPITAL LETTER T WITH STROKE - $ae: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK - $b2: result:= #$02db; // OGONEK - $b3: result:= #$0157; // LATIN SMALL LETTER R WITH CEDILLA - $b5: result:= #$0129; // LATIN SMALL LETTER I WITH TILDE - $b6: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA - $b7: result:= #$02c7; // CARON - $b9: result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $ba: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON - $bb: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA - $bc: result:= #$0167; // LATIN SMALL LETTER T WITH STROKE - $bd: result:= #$014a; // LATIN CAPITAL LETTER ENG - $be: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $bf: result:= #$014b; // LATIN SMALL LETTER ENG - $c0: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON - $c7: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK - $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON - $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK - $cc: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE - $cf: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON - $d0: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE - $d1: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA - $d2: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON - $d3: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA - $d9: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK - $dd: result:= #$0168; // LATIN CAPITAL LETTER U WITH TILDE - $de: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON - $e0: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON - $e7: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK - $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON - $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK - $ec: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE - $ef: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON - $f0: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE - $f1: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA - $f2: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON - $f3: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA - $f9: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK - $fd: result:= #$0169; // LATIN SMALL LETTER U WITH TILDE - $fe: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON - $ff: result:= #$02d9; // DOT ABOVE - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_5ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $00..$a0,$ad: - result:= WideChar(ord(P)); - $f0: result:= #$2116; // NUMERO SIGN - $fd: result:= #$00a7; // SECTION SIGN - else - result:= WideChar(ord(P)+$0360); - end; -end; - -function Iso8859_6ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $00..$a0,$a4,$ad: - result:= WideChar(ord(P)); - $ac,$bb,$bf,$c1..$da,$e0..$f2: - result:= WideChar(ord(P)+$0580); - else - raise EConvertError.CreateFmt('Invalid ISO-8859-6 sequence "%s"',[P]); - end; -end; - -function Iso8859_7ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $00..$a0,$a6..$a9,$ab..$ad,$b0..$b3,$b7,$bb,$bd: - result:= WideChar(ord(P)); - $a1: result:= #$2018; // LEFT SINGLE QUOTATION MARK - $a2: result:= #$2019; // RIGHT SINGLE QUOTATION MARK - $af: result:= #$2015; // HORIZONTAL BAR - $d2,$ff: raise EConvertError.CreateFmt('Invalid ISO-8859-7 sequence "%s"',[P]); - else - result:= WideChar(ord(P)+$02d0); - end; -end; - -function Iso8859_8ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $00..$a0,$a2..$a9,$ab..$ae,$b0..$b9,$bb..$be: - result:= WideChar(ord(P)); - $aa: result:= #$00d7; // MULTIPLICATION SIGN - $af: result:= #$203e; // OVERLINE - $ba: result:= #$00f7; // DIVISION SIGN - $df: result:= #$2017; // DOUBLE LOW LINE - $e0..$fa: - result:= WideChar(ord(P)+$04e0); - else - raise EConvertError.CreateFmt('Invalid ISO-8859-8 sequence "%s"',[P]); - end; -end; - -function Iso8859_9ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $d0: result:= #$011e; // LATIN CAPITAL LETTER G WITH BREVE - $dd: result:= #$0130; // LATIN CAPITAL LETTER I WITH DOT ABOVE - $de: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA - $f0: result:= #$011f; // LATIN SMALL LETTER G WITH BREVE - $fd: result:= #$0131; // LATIN SMALL LETTER I WITH DOT ABOVE - $fe: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_10ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK - $a2: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON - $a3: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA - $a4: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON - $a5: result:= #$0128; // LATIN CAPITAL LETTER I WITH TILDE - $a6: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA - $a8: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA - $a9: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE - $aa: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON - $ab: result:= #$0166; // LATIN CAPITAL LETTER T WITH STROKE - $ac: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $ae: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON - $af: result:= #$014a; // LATIN CAPITAL LETTER ENG - $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK - $b2: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON - $b3: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA - $b4: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON - $b5: result:= #$0129; // LATIN SMALL LETTER I WITH TILDE - $b6: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA - $b8: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA - $b9: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE - $ba: result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $bb: result:= #$0167; // LATIN SMALL LETTER T WITH STROKE - $bc: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $bd: result:= #$2015; // HORIZONTAL BAR - $be: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON - $bf: result:= #$014b; // LATIN SMALL LETTER ENG - $c0: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON - $c7: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK - $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON - $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK - $cc: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE - $d1: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA - $d2: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON - $d7: result:= #$0168; // LATIN CAPITAL LETTER U WITH TILDE - $d9: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK - $e0: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON - $e7: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK - $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON - $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK - $ec: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE - $f1: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA - $f2: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON - $f7: result:= #$0169; // LATIN SMALL LETTER U WITH TILDE - $f9: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK - $ff: result:= #$0138; // LATIN SMALL LETTER KRA - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_13ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a1: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK - $a5: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK - $a8: result:= #$00d8; // LATIN CAPITAL LETTER O WITH STROKE - $aa: result:= #$0156; // LATIN CAPITAL LETTER R WITH CEDILLA - $af: result:= #$00c6; // LATIN CAPITAL LETTER AE - $b4: result:= #$201c; // LEFT DOUBLE QUOTATION MARK - $b8: result:= #$00f8; // LATIN SMALL LETTER O WITH STROKE - $ba: result:= #$0157; // LATIN SMALL LETTER R WITH CEDILLA - $bf: result:= #$00e6; // LATIN SMALL LETTER AE - $c0: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK - $c1: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK - $c2: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON - $c3: result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE - $c6: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK - $c7: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON - $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON - $ca: result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE - $cb: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE - $cc: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA - $cd: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA - $ce: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON - $cf: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA - $d0: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON - $d1: result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE - $d2: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA - $d4: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON - $d8: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK - $d9: result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE - $da: result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE - $db: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON - $dd: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE - $de: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $e0: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK - $e1: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK - $e2: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON - $e3: result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE - $e6: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK - $e7: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON - $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON - $ea: result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE - $eb: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE - $ec: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA - $ed: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA - $ee: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON - $ef: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA - $f0: result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $f1: result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE - $f2: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA - $f4: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON - $f8: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK - $f9: result:= #$0142; // LATIN SMALL LETTER L WITH STROKE - $fa: result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE - $fb: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON - $fd: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE - $fe: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $ff: result:= #$2019; // RIGHT SINGLE QUOTATION MARK - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_14ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a1: result:= #$1e02; // LATIN CAPITAL LETTER B WITH DOT ABOVE - $a2: result:= #$1e03; // LATIN SMALL LETTER B WITH DOT ABOVE - $a4: result:= #$010a; // LATIN CAPITAL LETTER C WITH DOT ABOVE - $a5: result:= #$010b; // LATIN SMALL LETTER C WITH DOT ABOVE - $a6: result:= #$1e0a; // LATIN CAPITAL LETTER D WITH DOT ABOVE - $a8: result:= #$1e80; // LATIN CAPITAL LETTER W WITH GRAVE - $aa: result:= #$1e82; // LATIN CAPITAL LETTER W WITH ACUTE - $ab: result:= #$1e0b; // LATIN SMALL LETTER D WITH DOT ABOVE - $ac: result:= #$1ef2; // LATIN CAPITAL LETTER Y WITH GRAVE - $af: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS - $b0: result:= #$1e1e; // LATIN CAPITAL LETTER F WITH DOT ABOVE - $b1: result:= #$1e1f; // LATIN SMALL LETTER F WITH DOT ABOVE - $b2: result:= #$0120; // LATIN CAPITAL LETTER G WITH DOT ABOVE - $b3: result:= #$0121; // LATIN SMALL LETTER G WITH DOT ABOVE - $b4: result:= #$1e40; // LATIN CAPITAL LETTER M WITH DOT ABOVE - $b5: result:= #$1e41; // LATIN SMALL LETTER M WITH DOT ABOVE - $b7: result:= #$1e56; // LATIN CAPITAL LETTER P WITH DOT ABOVE - $b8: result:= #$1e81; // LATIN SMALL LETTER W WITH GRAVE - $b9: result:= #$1e57; // LATIN SMALL LETTER P WITH DOT ABOVE - $ba: result:= #$1e83; // LATIN SMALL LETTER W WITH ACUTE - $bb: result:= #$1e60; // LATIN CAPITAL LETTER S WITH DOT ABOVE - $bc: result:= #$1ef3; // LATIN SMALL LETTER Y WITH GRAVE - $bd: result:= #$1e84; // LATIN CAPITAL LETTER W WITH DIAERESIS - $be: result:= #$1e85; // LATIN SMALL LETTER W WITH DIAERESIS - $bf: result:= #$1e61; // LATIN SMALL LETTER S WITH DOT ABOVE - $d0: result:= #$0174; // LATIN CAPITAL LETTER W WITH CIRCUMFLEX - $d7: result:= #$1e6a; // LATIN CAPITAL LETTER T WITH DOT ABOVE - $de: result:= #$0176; // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX - $f0: result:= #$0175; // LATIN SMALL LETTER W WITH CIRCUMFLEX - $f7: result:= #$1e6b; // LATIN SMALL LETTER T WITH DOT ABOVE - $fe: result:= #$0177; // LATIN SMALL LETTER Y WITH CIRCUMFLEX - else - result:= WideChar(ord(P)); - end; -end; - -function Iso8859_15ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $a4: result:= #$20ac; // EURO SIGN - $a6: result:= #$00a6; // LATIN CAPITAL LETTER S WITH CARON - $a8: result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $b4: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $b8: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $bc: result:= #$0152; // LATIN CAPITAL LIGATURE OE - $bd: result:= #$0153; // LATIN SMALL LIGATURE OE - $be: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS - else - result:= WideChar(ord(P)); - end; -end; - -function KOI8_RToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $80: result:= #$2500; // BOX DRAWINGS LIGHT HORIZONTAL - $81: result:= #$2502; // BOX DRAWINGS LIGHT VERTICAL - $82: result:= #$250c; // BOX DRAWINGS LIGHT DOWN AND RIGHT - $83: result:= #$2510; // BOX DRAWINGS LIGHT DOWN AND LEFT - $84: result:= #$2514; // BOX DRAWINGS LIGHT UP AND RIGHT - $85: result:= #$2518; // BOX DRAWINGS LIGHT UP AND LEFT - $86: result:= #$251c; // BOX DRAWINGS LIGHT VERTICAL AND RIGHT - $87: result:= #$2524; // BOX DRAWINGS LIGHT VERTICAL AND LEFT - $88: result:= #$252c; // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - $89: result:= #$2534; // BOX DRAWINGS LIGHT UP AND HORIZONTAL - $8a: result:= #$253c; // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - $8b: result:= #$2580; // UPPER HALF BLOCK - $8c: result:= #$2584; // LOWER HALF BLOCK - $8d: result:= #$2588; // FULL BLOCK - $8e: result:= #$258c; // LEFT HALF BLOCK - $8f: result:= #$2590; // RIGHT HALF BLOCK - $90: result:= #$2591; // LIGHT SHADE - $91: result:= #$2592; // MEDIUM SHADE - $92: result:= #$2593; // DARK SHADE - $93: result:= #$2320; // TOP HALF INTEGRAL - $94: result:= #$25a0; // BLACK SQUARE - $95: result:= #$2219; // BULLET OPERATOR - $96: result:= #$221a; // SQUARE ROOT - $97: result:= #$2248; // ALMOST EQUAL TO - $98: result:= #$2264; // LESS-THAN OR EQUAL TO - $99: result:= #$2265; // GREATER-THAN OR EQUAL TO - $9a: result:= #$00a0; // NO-BREAK SPACE - $9b: result:= #$2321; // BOTTOM HALF INTEGRAL - $9c: result:= #$00b0; // DEGREE SIGN - $9d: result:= #$00b2; // SUPERSCRIPT TWO - $9e: result:= #$00b7; // MIDDLE DOT - $9f: result:= #$00f7; // DIVISION SIGN - $a0: result:= #$2550; // BOX DRAWINGS DOUBLE HORIZONTAL - $a1: result:= #$2551; // BOX DRAWINGS DOUBLE VERTICAL - $a2: result:= #$2552; // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - $a3: result:= #$0451; // CYRILLIC SMALL LETTER IO - $a4: result:= #$2553; // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - $a5: result:= #$2554; // BOX DRAWINGS DOUBLE DOWN AND RIGHT - $a6: result:= #$2555; // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - $a7: result:= #$2556; // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - $a8: result:= #$2557; // BOX DRAWINGS DOUBLE DOWN AND LEFT - $a9: result:= #$2558; // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - $aa: result:= #$2559; // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - $ab: result:= #$255a; // BOX DRAWINGS DOUBLE UP AND RIGHT - $ac: result:= #$255b; // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - $ad: result:= #$255c; // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - $ae: result:= #$255d; // BOX DRAWINGS DOUBLE UP AND LEFT - $af: result:= #$255e; // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - $b0: result:= #$255f; // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - $b1: result:= #$2560; // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - $b2: result:= #$2561; // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - $b3: result:= #$0401; // CYRILLIC CAPITAL LETTER IO - $b4: result:= #$2562; // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - $b5: result:= #$2563; // BOX DRAWINGS DOUBLE VERTICAL AND LEFT - $b6: result:= #$2564; // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - $b7: result:= #$2565; // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - $b8: result:= #$2566; // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - $b9: result:= #$2567; // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - $ba: result:= #$2568; // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - $bb: result:= #$2569; // BOX DRAWINGS DOUBLE UP AND HORIZONTAL - $bc: result:= #$256a; // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - $bd: result:= #$256b; // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - $be: result:= #$256c; // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - $bf: result:= #$00a9; // COPYRIGHT SIGN - $c0: result:= #$044e; // CYRILLIC SMALL LETTER YU - $c1: result:= #$0430; // CYRILLIC SMALL LETTER A - $c2: result:= #$0431; // CYRILLIC SMALL LETTER BE - $c3: result:= #$0446; // CYRILLIC SMALL LETTER TSE - $c4: result:= #$0434; // CYRILLIC SMALL LETTER DE - $c5: result:= #$0435; // CYRILLIC SMALL LETTER IE - $c6: result:= #$0444; // CYRILLIC SMALL LETTER EF - $c7: result:= #$0433; // CYRILLIC SMALL LETTER GHE - $c8: result:= #$0445; // CYRILLIC SMALL LETTER HA - $c9: result:= #$0438; // CYRILLIC SMALL LETTER I - $ca: result:= #$0439; // CYRILLIC SMALL LETTER SHORT I - $cb: result:= #$043a; // CYRILLIC SMALL LETTER KA - $cc: result:= #$043b; // CYRILLIC SMALL LETTER EL - $cd: result:= #$043c; // CYRILLIC SMALL LETTER EM - $ce: result:= #$043d; // CYRILLIC SMALL LETTER EN - $cf: result:= #$043e; // CYRILLIC SMALL LETTER O - $d0: result:= #$043f; // CYRILLIC SMALL LETTER PE - $d1: result:= #$044f; // CYRILLIC SMALL LETTER YA - $d2: result:= #$0440; // CYRILLIC SMALL LETTER ER - $d3: result:= #$0441; // CYRILLIC SMALL LETTER ES - $d4: result:= #$0442; // CYRILLIC SMALL LETTER TE - $d5: result:= #$0443; // CYRILLIC SMALL LETTER U - $d6: result:= #$0436; // CYRILLIC SMALL LETTER ZHE - $d7: result:= #$0432; // CYRILLIC SMALL LETTER VE - $d8: result:= #$044c; // CYRILLIC SMALL LETTER SOFT SIGN - $d9: result:= #$044b; // CYRILLIC SMALL LETTER YERU - $da: result:= #$0437; // CYRILLIC SMALL LETTER ZE - $db: result:= #$0448; // CYRILLIC SMALL LETTER SHA - $dc: result:= #$044d; // CYRILLIC SMALL LETTER E - $dd: result:= #$0449; // CYRILLIC SMALL LETTER SHCHA - $de: result:= #$0447; // CYRILLIC SMALL LETTER CHE - $df: result:= #$044a; // CYRILLIC SMALL LETTER HARD SIGN - $e0: result:= #$042e; // CYRILLIC CAPITAL LETTER YU - $e1: result:= #$0410; // CYRILLIC CAPITAL LETTER A - $e2: result:= #$0411; // CYRILLIC CAPITAL LETTER BE - $e3: result:= #$0426; // CYRILLIC CAPITAL LETTER TSE - $e4: result:= #$0414; // CYRILLIC CAPITAL LETTER DE - $e5: result:= #$0415; // CYRILLIC CAPITAL LETTER IE - $e6: result:= #$0424; // CYRILLIC CAPITAL LETTER EF - $e7: result:= #$0413; // CYRILLIC CAPITAL LETTER GHE - $e8: result:= #$0425; // CYRILLIC CAPITAL LETTER HA - $e9: result:= #$0418; // CYRILLIC CAPITAL LETTER I - $ea: result:= #$0419; // CYRILLIC CAPITAL LETTER SHORT I - $eb: result:= #$041a; // CYRILLIC CAPITAL LETTER KA - $ec: result:= #$041b; // CYRILLIC CAPITAL LETTER EL - $ed: result:= #$041c; // CYRILLIC CAPITAL LETTER EM - $ee: result:= #$041d; // CYRILLIC CAPITAL LETTER EN - $ef: result:= #$041e; // CYRILLIC CAPITAL LETTER O - $f0: result:= #$041f; // CYRILLIC CAPITAL LETTER PE - $f1: result:= #$042f; // CYRILLIC CAPITAL LETTER YA - $f2: result:= #$0420; // CYRILLIC CAPITAL LETTER ER - $f3: result:= #$0421; // CYRILLIC CAPITAL LETTER ES - $f4: result:= #$0422; // CYRILLIC CAPITAL LETTER TE - $f5: result:= #$0423; // CYRILLIC CAPITAL LETTER U - $f6: result:= #$0416; // CYRILLIC CAPITAL LETTER ZHE - $f7: result:= #$0412; // CYRILLIC CAPITAL LETTER VE - $f8: result:= #$042c; // CYRILLIC CAPITAL LETTER SOFT SIGN - $f9: result:= #$042b; // CYRILLIC CAPITAL LETTER YERU - $fa: result:= #$0417; // CYRILLIC CAPITAL LETTER ZE - $fb: result:= #$0428; // CYRILLIC CAPITAL LETTER SHA - $fc: result:= #$042d; // CYRILLIC CAPITAL LETTER E - $fd: result:= #$0429; // CYRILLIC CAPITAL LETTER SHCHA - $fe: result:= #$0427; // CYRILLIC CAPITAL LETTER CHE - $ff: result:= #$042a; // CYRILLIC CAPITAL LETTER HARD SIGN - else - result:= WideChar(ord(P)); - end; -end; - -function cp10000_MacRomanToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $80: result:= #$00c4; // LATIN CAPITAL LETTER A WITH DIAERESIS - $81: result:= #$00c5; // LATIN CAPITAL LETTER A WITH RING ABOVE - $82: result:= #$00c7; // LATIN CAPITAL LETTER C WITH CEDILLA - $83: result:= #$00c9; // LATIN CAPITAL LETTER E WITH ACUTE - $84: result:= #$00d1; // LATIN CAPITAL LETTER N WITH TILDE - $85: result:= #$00d6; // LATIN CAPITAL LETTER O WITH DIAERESIS - $86: result:= #$00dc; // LATIN CAPITAL LETTER U WITH DIAERESIS - $87: result:= #$00e1; // LATIN SMALL LETTER A WITH ACUTE - $88: result:= #$00e0; // LATIN SMALL LETTER A WITH GRAVE - $89: result:= #$00e2; // LATIN SMALL LETTER A WITH CIRCUMFLEX - $8a: result:= #$00e4; // LATIN SMALL LETTER A WITH DIAERESIS - $8b: result:= #$00e3; // LATIN SMALL LETTER A WITH TILDE - $8c: result:= #$00e5; // LATIN SMALL LETTER A WITH RING ABOVE - $8d: result:= #$00e7; // LATIN SMALL LETTER C WITH CEDILLA - $8e: result:= #$00e9; // LATIN SMALL LETTER E WITH ACUTE - $8f: result:= #$00e8; // LATIN SMALL LETTER E WITH GRAVE - $90: result:= #$00ea; // LATIN SMALL LETTER E WITH CIRCUMFLEX - $91: result:= #$00eb; // LATIN SMALL LETTER E WITH DIAERESIS - $92: result:= #$00ed; // LATIN SMALL LETTER I WITH ACUTE - $93: result:= #$00ec; // LATIN SMALL LETTER I WITH GRAVE - $94: result:= #$00ee; // LATIN SMALL LETTER I WITH CIRCUMFLEX - $95: result:= #$00ef; // LATIN SMALL LETTER I WITH DIAERESIS - $96: result:= #$00f1; // LATIN SMALL LETTER N WITH TILDE - $97: result:= #$00f3; // LATIN SMALL LETTER O WITH ACUTE - $98: result:= #$00f2; // LATIN SMALL LETTER O WITH GRAVE - $99: result:= #$00f4; // LATIN SMALL LETTER O WITH CIRCUMFLEX - $9a: result:= #$00f6; // LATIN SMALL LETTER O WITH DIAERESIS - $9b: result:= #$00f5; // LATIN SMALL LETTER O WITH TILDE - $9c: result:= #$00fa; // LATIN SMALL LETTER U WITH ACUTE - $9d: result:= #$00f9; // LATIN SMALL LETTER U WITH GRAVE - $9e: result:= #$00fb; // LATIN SMALL LETTER U WITH CIRCUMFLEX - $9f: result:= #$00fc; // LATIN SMALL LETTER U WITH DIAERESIS - $a0: result:= #$2020; // DAGGER - $a1: result:= #$00b0; // DEGREE SIGN - $a4: result:= #$00a7; // SECTION SIGN - $a5: result:= #$2022; // BULLET - $a6: result:= #$00b6; // PILCROW SIGN - $a7: result:= #$00df; // LATIN SMALL LETTER SHARP S - $a8: result:= #$00ae; // REGISTERED SIGN - $aa: result:= #$2122; // TRADE MARK SIGN - $ab: result:= #$00b4; // ACUTE ACCENT - $ac: result:= #$00a8; // DIAERESIS - $ad: result:= #$2260; // NOT EQUAL TO - $ae: result:= #$00c6; // LATIN CAPITAL LIGATURE AE - $af: result:= #$00d8; // LATIN CAPITAL LETTER O WITH STROKE - $b0: result:= #$221e; // INFINITY - $b2: result:= #$2264; // LESS-THAN OR EQUAL TO - $b3: result:= #$2265; // GREATER-THAN OR EQUAL TO - $b4: result:= #$00a5; // YEN SIGN - $b6: result:= #$2202; // PARTIAL DIFFERENTIAL - $b7: result:= #$2211; // N-ARY SUMMATION - $b8: result:= #$220f; // N-ARY PRODUCT - $b9: result:= #$03c0; // GREEK SMALL LETTER PI - $ba: result:= #$222b; // INTEGRAL - $bb: result:= #$00aa; // FEMININE ORDINAL INDICATOR - $bc: result:= #$00ba; // MASCULINE ORDINAL INDICATOR - $bd: result:= #$2126; // OHM SIGN - $be: result:= #$00e6; // LATIN SMALL LIGATURE AE - $bf: result:= #$00f8; // LATIN SMALL LETTER O WITH STROKE - $c0: result:= #$00bf; // INVERTED QUESTION MARK - $c1: result:= #$00a1; // INVERTED EXCLAMATION MARK - $c2: result:= #$00ac; // NOT SIGN - $c3: result:= #$221a; // SQUARE ROOT - $c4: result:= #$0192; // LATIN SMALL LETTER F WITH HOOK - $c5: result:= #$2248; // ALMOST EQUAL TO - $c6: result:= #$2206; // INCREMENT - $c7: result:= #$00ab; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - $c8: result:= #$00bb; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - $c9: result:= #$2026; // HORIZONTAL ELLIPSIS - $ca: result:= #$00a0; // NO-BREAK SPACE - $cb: result:= #$00c0; // LATIN CAPITAL LETTER A WITH GRAVE - $cc: result:= #$00c3; // LATIN CAPITAL LETTER A WITH TILDE - $cd: result:= #$00d5; // LATIN CAPITAL LETTER O WITH TILDE - $ce: result:= #$0152; // LATIN CAPITAL LIGATURE OE - $cf: result:= #$0153; // LATIN SMALL LIGATURE OE - $d0: result:= #$2013; // EN DASH - $d1: result:= #$2014; // EM DASH - $d2: result:= #$201c; // LEFT DOUBLE QUOTATION MARK - $d3: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK - $d4: result:= #$2018; // LEFT SINGLE QUOTATION MARK - $d5: result:= #$2019; // RIGHT SINGLE QUOTATION MARK - $d6: result:= #$00f7; // DIVISION SIGN - $d7: result:= #$25ca; // LOZENGE - $d8: result:= #$00ff; // LATIN SMALL LETTER Y WITH DIAERESIS - $d9: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS - $da: result:= #$2044; // FRACTION SLASH - $db: result:= #$00a4; // CURRENCY SIGN - $dc: result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK - $dd: result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - $de: result:= #$fb01; // LATIN SMALL LIGATURE FI - $df: result:= #$fb02; // LATIN SMALL LIGATURE FL - $e0: result:= #$2021; // DOUBLE DAGGER - $e1: result:= #$00b7; // MIDDLE DOT - $e2: result:= #$201a; // SINGLE LOW-9 QUOTATION MARK - $e3: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK - $e4: result:= #$2030; // PER MILLE SIGN - $e5: result:= #$00c2; // LATIN CAPITAL LETTER A WITH CIRCUMFLEX - $e6: result:= #$00ca; // LATIN CAPITAL LETTER E WITH CIRCUMFLEX - $e7: result:= #$00c1; // LATIN CAPITAL LETTER A WITH ACUTE - $e8: result:= #$00cb; // LATIN CAPITAL LETTER E WITH DIAERESIS - $e9: result:= #$00c8; // LATIN CAPITAL LETTER E WITH GRAVE - $ea: result:= #$00cd; // LATIN CAPITAL LETTER I WITH ACUTE - $eb: result:= #$00ce; // LATIN CAPITAL LETTER I WITH CIRCUMFLEX - $ec: result:= #$00cf; // LATIN CAPITAL LETTER I WITH DIAERESIS - $ed: result:= #$00cc; // LATIN CAPITAL LETTER I WITH GRAVE - $ee: result:= #$00d3; // LATIN CAPITAL LETTER O WITH ACUTE - $ef: result:= #$00d4; // LATIN CAPITAL LETTER O WITH CIRCUMFLEX - $f0: raise EConvertError.CreateFmt('Invalid cp10000_MacRoman sequence "%s"',[P]); - $f1: result:= #$00d2; // LATIN CAPITAL LETTER O WITH GRAVE - $f2: result:= #$00da; // LATIN CAPITAL LETTER U WITH ACUTE - $f3: result:= #$00db; // LATIN CAPITAL LETTER U WITH CIRCUMFLEX - $f4: result:= #$00d9; // LATIN CAPITAL LETTER U WITH GRAVE - $f5: result:= #$0131; // LATIN SMALL LETTER DOTLESS I - $f6: result:= #$02c6; // MODIFIER LETTER CIRCUMFLEX ACCENT - $f7: result:= #$02dc; // SMALL TILDE - $f8: result:= #$00af; // MACRON - $f9: result:= #$02d8; // BREVE - $fa: result:= #$02d9; // DOT ABOVE - $fb: result:= #$02da; // RING ABOVE - $fc: result:= #$00b8; // CEDILLA - $fd: result:= #$02dd; // DOUBLE ACUTE ACCENT - $fe: result:= #$02db; // OGONEK - $ff: result:= #$02c7; // CARON - else - result:= WideChar(ord(P)); - end; -end; - -function cp1250ToUTF16Char(const P: Char):WideChar; -// This function was provided by Miloslav Skácel -const - sInvalidWindows1250Sequence = 'Invalid Windows-1250 sequence "%s"'; -begin - case ord(p) of - // NOT USED - $81,$83,$88,$90,$98: - raise EConvertError.CreateFmt(sInvalidWindows1250Sequence,[P]); - $80: result:= #$20ac; // EURO SIGN - $82: Result:= #$201a; // SINGLE LOW-9 QUOTATION MARK - $84: Result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK - $85: Result:= #$2026; // HORIZONTAL ELLIPSIS - $86: Result:= #$2020; // DAGGER - $87: Result:= #$2021; // DOUBLE DAGGER - $89: Result:= #$2030; // PER MILLE SIGN - $8a: Result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON - $8b: Result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK - $8c: Result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE - $8d: Result:= #$0164; // LATIN CAPITAL LETTER T WITH CARON - $8e: Result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON - $8f: Result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE - $91: Result:= #$2018; // LEFT SINGLE QUOTATION MARK - $92: Result:= #$2019; // RIGHT SINGLE QUOTATION MARK - $93: Result:= #$201c; // LEFT DOUBLE QUOTATION MARK - $94: Result:= #$201d; // RIGHT DOUBLE QUOTATION MARK - $95: Result:= #$2022; // BULLET - $96: Result:= #$2013; // EN-DASH - $97: Result:= #$2014; // EM-DASH - $99: Result:= #$2122; // TRADE MARK SIGN - $9a: Result:= #$0161; // LATIN SMALL LETTER S WITH CARON - $9b: Result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - $9c: Result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE - $9d: Result:= #$0165; // LATIN SMALL LETTER T WITH CARON - $9e: Result:= #$017e; // LATIN SMALL LETTER Z WITH CARON - $9f: Result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE - $a0: Result:= #$00a0; // NO-BREAK SPACE - $a1: Result:= #$02c7; // CARON - $a2: Result:= #$02d8; // BREVE - $a3: Result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE - $a4: Result:= #$00a4; // CURRENCY SIGN - $a5: Result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK - $a6: Result:= #$00a6; // BROKEN BAR - $a7: Result:= #$00a7; // SECTION SIGN - $a8: Result:= #$00a8; // DIAERESIS - $a9: Result:= #$00a9; // COPYRIGHT SIGN - $aa: Result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA - $ab: Result:= #$00ab; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - $ac: Result:= #$00ac; // NOT SIGN - $ad: Result:= #$00ad; // SOFT HYPHEN - $ae: Result:= #$00ae; // REGISTERED SIGN - $af: Result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE - $b0: Result:= #$00b0; // DEGREE SIGN - $b1: Result:= #$00b1; // PLUS-MINUS SIGN - $b2: Result:= #$02db; // OGONEK - $b3: Result:= #$0142; // LATIN SMALL LETTER L WITH STROKE - $b4: Result:= #$00b4; // ACUTE ACCENT - $b5: Result:= #$00b5; // MIKRO SIGN - $b6: Result:= #$00b6; // PILCROW SIGN - $b7: Result:= #$00b7; // MIDDLE DOT - $b8: Result:= #$00b8; // CEDILLA - $b9: Result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK - $ba: Result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA - $bb: Result:= #$00bb; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - $bc: Result:= #$013d; // LATIN CAPITAL LETTER L WITH CARON - $bd: Result:= #$02dd; // DOUBLE ACUTE ACCENT - $be: Result:= #$013e; // LATIN SMALL LETTER L WITH CARON - $bf: Result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE - $c0: Result:= #$0154; // LATIN CAPITAL LETTER R WITH ACUTE - $c1: Result:= #$00c1; // LATIN CAPITAL LETTER A WITH ACUTE - $c2: Result:= #$00c2; // LATIN CAPITAL LETTER A WITH CIRCUMFLEX - $c3: Result:= #$0102; // LATIN CAPITAL LETTER A WITH BREVE - $c4: Result:= #$00c4; // LATIN CAPITAL LETTER A WITH DIAERESIS - $c5: Result:= #$0139; // LATIN CAPITAL LETTER L WITH ACUTE - $c6: Result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE - $c7: Result:= #$00c7; // LATIN CAPITAL LETTER C WITH CEDILLA - $c8: Result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON - $c9: Result:= #$00c9; // LATIN CAPITAL LETTER E WITH ACUTE - $ca: Result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK - $cb: Result:= #$00cb; // LATIN CAPITAL LETTER E WITH DIAERESIS - $cc: Result:= #$011a; // LATIN CAPITAL LETTER E WITH CARON - $cd: Result:= #$00cd; // LATIN CAPITAL LETTER I WITH ACUTE - $ce: Result:= #$00ce; // LATIN CAPITAL LETTER I WITH CIRCUMFLEX - $cf: Result:= #$010e; // LATIN CAPITAL LETTER D WITH CARON - $d0: Result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE - $d1: Result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE - $d2: Result:= #$0147; // LATIN CAPITAL LETTER N WITH CARON - $d3: Result:= #$00d3; // LATIN CAPITAL LETTER O WITH ACUTE - $d4: Result:= #$00d4; // LATIN CAPITAL LETTER O WITH CIRCUMFLEX - $d5: Result:= #$0150; // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - $d6: Result:= #$00d6; // LATIN CAPITAL LETTER O WITH DIAERESIS - $d7: Result:= #$00d7; // MULTIPLICATION SIGN - $d8: Result:= #$0158; // LATIN CAPITAL LETTER R WITH CARON - $d9: Result:= #$016e; // LATIN CAPITAL LETTER U WITH RING ABOVE - $da: Result:= #$00da; // LATIN CAPITAL LETTER U WITH ACUTE - $db: Result:= #$0170; // LATIN CAPITAL LETTER U WITH WITH DOUBLE ACUTE - $dc: Result:= #$00dc; // LATIN CAPITAL LETTER U WITH DIAERESIS - $dd: Result:= #$00dd; // LATIN CAPITAL LETTER Y WITH ACUTE - $de: Result:= #$0162; // LATIN CAPITAL LETTER T WITH CEDILLA - $df: Result:= #$00df; // LATIN SMALL LETTER SHARP S - $e0: Result:= #$0155; // LATIN SMALL LETTER R WITH ACUTE - $e1: Result:= #$00e1; // LATIN SMALL LETTER A WITH ACUTE - $e2: Result:= #$00e2; // LATIN SMALL LETTER A WITH CIRCUMFLEX - $e3: Result:= #$0103; // LATIN SMALL LETTER A WITH BREVE - $e4: Result:= #$00e4; // LATIN SMALL LETTER A WITH DIAERESIS - $e5: Result:= #$013a; // LATIN SMALL LETTER L WITH ACUTE - $e6: Result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE - $e7: Result:= #$00e7; // LATIN SMALL LETTER C WITH CEDILLA - $e8: Result:= #$010d; // LATIN SMALL LETTER C WITH CARON 100D - $e9: Result:= #$00e9; // LATIN SMALL LETTER E WITH ACUTE - $ea: Result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK - $eb: Result:= #$00eb; // LATIN SMALL LETTER E WITH DIAERESIS - $ec: Result:= #$011b; // LATIN SMALL LETTER E WITH CARON - $ed: Result:= #$00ed; // LATIN SMALL LETTER I WITH ACUTE - $ee: Result:= #$00ee; // LATIN SMALL LETTER I WITH CIRCUMFLEX - $ef: Result:= #$010f; // LATIN SMALL LETTER D WITH CARON - $f0: Result:= #$0111; // LATIN SMALL LETTER D WITH STROKE - $f1: Result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE - $f2: Result:= #$0148; // LATIN SMALL LETTER N WITH CARON - $f3: Result:= #$00f3; // LATIN SMALL LETTER O WITH ACUTE - $f4: Result:= #$00f4; // LATIN SMALL LETTER O WITH CIRCUMFLEX - $f5: Result:= #$0151; // LATIN SMALL LETTER O WITH DOUBLE ACUTE - $f6: Result:= #$00f6; // LATIN SMALL LETTER O WITH DIAERESIS - $f7: Result:= #$00f7; // DIVISION SIGN - $f8: Result:= #$0159; // LATIN SMALL LETTER R WITH CARON - $f9: Result:= #$016f; // LATIN SMALL LETTER U WITH RING ABOVE - $fa: Result:= #$00fa; // LATIN SMALL LETTER U WITH ACUTE - $fb: Result:= #$0171; // LATIN SMALL LETTER U WITH WITH DOUBLE ACUTE - $fc: Result:= #$00fc; // LATIN SMALL LETTER U WITH DIAERESIS - $fd: Result:= #$00fd; // LATIN SMALL LETTER Y WITH ACUTE - $fe: Result:= #$0163; // LATIN SMALL LETTER T WITH CEDILLA - $ff: Result:= #$02d9; // DOT ABOVE - else - Result:= WideChar(ord(P)); - end; -end; - -function cp1251ToUTF16Char(const P: Char):WideChar; -begin - case ord(P) of - $80: result:= #$0402; // CYRILLIC CAPITAL LETTER DJE - $81: result:= #$0403; // CYRILLIC CAPITAL LETTER GJE - $82: result:= #$201a; // SINGLE LOW-9 QUOTATION MARK - $83: result:= #$0453; // CYRILLIC SMALL LETTER GJE - $84: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK - $85: result:= #$2026; // HORIZONTAL ELLIPSIS - $86: result:= #$2020; // DAGGER - $87: result:= #$2021; // DOUBLE DAGGER - $88: result:= #$20ac; // EURO SIGN - $89: result:= #$2030; // PER MILLE SIGN - $8a: result:= #$0409; // CYRILLIC CAPITAL LETTER LJE - $8b: result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK - $8c: result:= #$040a; // CYRILLIC CAPITAL LETTER NJE - $8d: result:= #$040c; // CYRILLIC CAPITAL LETTER KJE - $8e: result:= #$040b; // CYRILLIC CAPITAL LETTER TSHE - $8f: result:= #$040f; // CYRILLIC CAPITAL LETTER DZHE - $90: result:= #$0452; // CYRILLIC SMALL LETTER DJE - $91: result:= #$2018; // LEFT SINGLE QUOTATION MARK - $92: result:= #$2019; // RIGHT SINGLE QUOTATION MARK - $93: result:= #$201c; // LEFT DOUBLE QUOTATION MARK - $94: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK - $95: result:= #$2022; // BULLET - $96: result:= #$2013; // EN DASH - $97: result:= #$2014; // EM DASH - $98: raise EConvertError.CreateFmt('Invalid cp1251 sequence "%s"',[P]); - $99: result:= #$2122; // TRADE MARK SIGN - $9a: result:= #$0459; // CYRILLIC SMALL LETTER LJE - $9b: result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - $9c: result:= #$045a; // CYRILLIC SMALL LETTER NJE - $9d: result:= #$045c; // CYRILLIC SMALL LETTER KJE - $9e: result:= #$045b; // CYRILLIC SMALL LETTER TSHE - $9f: result:= #$045f; // CYRILLIC SMALL LETTER DZHE - $a0: result:= #$00a0; // NO-BREAK SPACE - $a1: result:= #$040e; // CYRILLIC CAPITAL LETTER SHORT U - $a2: result:= #$045e; // CYRILLIC SMALL LETTER SHORT U - $a3: result:= #$0408; // CYRILLIC CAPITAL LETTER JE - $a4: result:= #$00a4; // CURRENCY SIGN - $a5: result:= #$0490; // CYRILLIC CAPITAL LETTER GHE WITH UPTURN - $a8: result:= #$0401; // CYRILLIC CAPITAL LETTER IO - $aa: result:= #$0404; // CYRILLIC CAPITAL LETTER UKRAINIAN IE - $af: result:= #$0407; // CYRILLIC CAPITAL LETTER YI - $b2: result:= #$0406; // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - $b3: result:= #$0456; // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - $b4: result:= #$0491; // CYRILLIC SMALL LETTER GHE WITH UPTURN - $b8: result:= #$0451; // CYRILLIC SMALL LETTER IO - $b9: result:= #$2116; // NUMERO SIGN - $ba: result:= #$0454; // CYRILLIC SMALL LETTER UKRAINIAN IE - $bc: result:= #$0458; // CYRILLIC SMALL LETTER JE - $bd: result:= #$0405; // CYRILLIC CAPITAL LETTER DZE - $be: result:= #$0455; // CYRILLIC SMALL LETTER DZE - $bf: result:= #$0457; // CYRILLIC SMALL LETTER YI - $c0..$ff: - result:= WideChar(ord(P)+$350); - else - result:= WideChar(ord(P)); - end; -end; - -function cp1252ToUTF16Char(const P: Char):WideChar; -// Provided by Olaf Lösken. -// Info taken from -// ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT -const - sInvalidWindows1252Sequence = 'Invalid Windows-1252 sequence "%s"'; -begin - case ord(p) of - $80 : result:= #$20AC; //EUROSIGN - $81 : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); - $82 : result:= #$201A; //SINGLE LOW-9 QUOTATION MARK - $83 : result:= #$0192; //ATIN SMALL LETTER F WITH HOOK - $84 : result:= #$201E; //DOUBLE LOW-9 QUOTATION MARK - $85 : result:= #$2026; //HORIZONTAL ELLIPSIS - $86 : result:= #$2020; //DAGGER - $87 : result:= #$2021; //DOUBLE DAGGER - $88 : result:= #$02C6; //MODIFIER LETTER CIRCUMFLEX ACCENT - $89 : result:= #$2030; //PER MILLE SIGN - $8A : result:= #$0160; //LATIN CAPITAL LETTER S WITH CARON - $8B : result:= #$2039; //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - $8C : result:= #$0152; //LATIN CAPITAL LIGATURE OE - $8D : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); - $8E : result:= #$017D; //LATIN CAPITAL LETTER Z WITH CARON - $8F : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); - $90 : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); - $91 : result:= #$2018; //LEFT SINGLE QUOTATION MARK - $92 : result:= #$2019; //RIGHT SINGLE QUOTATION MARK - $93 : result:= #$201C; //LEFT DOUBLE QUOTATION MARK - $94 : result:= #$201D; //RIGHT DOUBLE QUOTATION MARK - $95 : result:= #$2022; //BULLET - $96 : result:= #$2013; //EN DASH - $97 : result:= #$2014; //EM DASH - $98 : result:= #$02DC; //SMALL TILDE - $99 : result:= #$2122; //TRADE MARK SIGN - $9A : result:= #$0161; //LATIN SMALL LETTER S WITH CARON - $9B : result:= #$203A; //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - $9C : result:= #$0153; //LATIN SMALL LIGATURE OE - $9D : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); - $9E : result:= #$017E; //LATIN SMALL LETTER Z WITH CARON - $9F : result:= #$0178; //LATIN CAPITAL LETTER Y WITH D - else - Result:= WideChar(ord(P)); - end; -end; - -function Iso8859_1ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-1 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_1ToUTF16Char(s[i]); -end; - -function Iso8859_2ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-2 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_2ToUTF16Char(s[i]); -end; - -function Iso8859_3ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-3 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_3ToUTF16Char(s[i]); -end; - -function Iso8859_4ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-4 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_4ToUTF16Char(s[i]); -end; - -function Iso8859_5ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-5 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_5ToUTF16Char(s[i]); -end; - -function Iso8859_6ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-6 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_6ToUTF16Char(s[i]); -end; - -function Iso8859_7ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-7 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_7ToUTF16Char(s[i]); -end; - -function Iso8859_8ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-8 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_8ToUTF16Char(s[i]); -end; - -function Iso8859_9ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-9 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_9ToUTF16Char(s[i]); -end; - -function Iso8859_10ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-10 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_10ToUTF16Char(s[i]); -end; - -function Iso8859_13ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-13 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_13ToUTF16Char(s[i]); -end; - -function Iso8859_14ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-14 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_14ToUTF16Char(s[i]); -end; - -function Iso8859_15ToUTF16Str(const s: string): wideString; -// Converts an ISO-8859-15 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=Iso8859_15ToUTF16Char(s[i]); -end; - -function KOI8_RToUTF16Str(const s: string): wideString; -// Converts an KOI8-R string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=KOI8_RToUTF16Char(s[i]); -end; - -function cp10000_MacRomanToUTF16Str(const s: string): wideString; -// Converts an cp10000_MacRoman string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=cp10000_MacRomanToUTF16Char(s[i]); -end; - -function cp1250ToUTF16Str(const s: string): wideString; -// Converts an cp1250 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=cp1250ToUTF16Char(s[i]); -end; - -function cp1251ToUTF16Str(const s: string): wideString; -// Converts an cp1251 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=cp1251ToUTF16Char(s[i]); -end; - -function cp1252ToUTF16Str(const s: string): wideString; -// Converts an cp1252 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) are done. -var - i,j: integer; -begin - j:= length(s); - setLength(Result,j); - for i:= 1 to j do - Result[i]:=cp1252ToUTF16Char(s[i]); -end; - -function UTF8ToUTF16BEStr(const s: string): wideString; -// Converts an UTF-8 string into an UTF-16 wideString. -// No special conversions (e.g. on line breaks) and -// no XML-char checking are done. -// - This function was provided by Ernst van der Pols - -// - and slightly modified by Dieter Köhler - -const - MaxCode: array[1..6] of integer = ($7F,$7FF,$FFFF,$1FFFFF,$3FFFFFF,$7FFFFFFF); -var - i, j, CharSize, mask, ucs4: integer; - c, first: char; -begin - setLength(Result,Length(s)+1); // assume no or little above-ASCII-chars - j:=0; // keep track of actual length - i:=0; - while i=$80 then // UTF-8 sequence - begin - CharSize:=1; - first:=c; mask:=$40; ucs4:=ord(c); - if (ord(c) and $C0<>$C0) then - raise EConvertError.CreateFmt('Invalid UTF-8 sequence %2.2X',[ord(c)]); - while (mask and ord(first)<>0) do - begin - // read next character of stream - if i=length(s) then - raise EConvertError.CreateFmt('Aborted UTF-8 sequence "%s"',[Copy(s,i-CharSize,CharSize)]); - Inc(i); c:=s[i]; - if (ord(c) and $C0<>$80) then - raise EConvertError.CreateFmt('Invalid UTF-8 sequence $%2.2X',[ord(c)]); - ucs4:=(ucs4 shl 6) or (ord(c) and $3F); // add bits to result - Inc(CharSize); // increase sequence length - mask:=mask shr 1; // adjust mask - end; - if (CharSize>6) then // no 0 bit in sequence header 'first' - raise EConvertError.CreateFmt('Invalid UTF-8 sequence "%s"',[Copy(s,i-CharSize,CharSize)]); - ucs4:=ucs4 and MaxCode[CharSize]; // dispose of header bits - // check for invalid sequence as suggested by RFC2279 - if ((CharSize>1) and (ucs4<=MaxCode[CharSize-1])) then - raise EConvertError.CreateFmt('Invalid UTF-8 encoding "%s"',[Copy(s,i-CharSize,CharSize)]); - // convert non-ASCII UCS-4 to UTF-16 if possible - case ucs4 of - $00000080..$0000D7FF,$0000E000..$0000FFFD: - begin - Inc(j); Result[j]:=WideChar(ord(c)); - end; - $0000D800..$0000DFFF,$0000FFFE,$0000FFFF: - raise EConvertError.CreateFmt('Invalid UCS-4 character $%8.8X',[ucs4]); - $00010000..$0010FFFF: - begin - // add high surrogate to content as if it was processed earlier - Inc(j); Result[j]:= Utf16HighSurrogate(ucs4); // assign high surrogate - Inc(j); Result[j]:= Utf16LowSurrogate(ucs4); // assign low surrogate - end; - else // out of UTF-16 range - raise EConvertError.CreateFmt('Cannot convert $%8.8X to UTF-16',[ucs4]); - end; - end - else // ASCII char - begin - Inc(j); Result[j]:=WideChar(ord(c)); - end; - end; - setLength(Result,j); // set to correct length -end; - -function UTF16BEToUTF8Str(const ws: wideString; - const expandLF: boolean): string; -var - StringStr: TStringStream; - UTF16To8: TUTF16BEToUTF8Stream; -begin - StringStr := TStringStream.create(''); - try - UTF16To8 := TUTF16BEToUTF8Stream.create(StringStr); - try - UTF16To8.ExpandLF := expandLF; - UTF16To8.WriteBuffer(pointer(ws)^, Length(ws) shl 1); - finally - UTF16To8.Free; - end; - Result := StringStr.DataString; - finally - StringStr.Free; - end; -end; - -function UTF16To7BitASCIIChar(const P: wideChar): char; -begin - case ord(p) of - $00..$7f: result:= char(ord(p)); - else - raise EConvertError.CreateFmt('Invalid 7BitASCII sequence "%s"',[P]); - end; -end; - -function UTF16ToIso8859_1Char(const P: wideChar): char; -begin - case ord(p) of - $00..$ff: result:= char(ord(p)); - else - raise EConvertError.CreateFmt('Invalid ISO-8859-1 sequence "%s"',[P]); - end; -end; - -function UTF16To7BitASCIIStr(const S: wideString): string; -var - i,j,start: integer; - encType: TdomEncodingType; -begin - j:= length(s); - start:= 1; - encType:= etUTF16BE; - if j > 0 then begin - // Byte order mark? - if s[1] = #$feff then start:= 2 - else if s[1] = #$fffe then begin start:= 2; encType:= etUTF16LE; end; - end; - setLength(Result,j-start+1); - if encType = etUTF16BE - then for i:= start to j do Result[i]:= UTF16To7BitASCIIChar(s[i]) - else for i:= start to j do Result[i]:= UTF16To7BitASCIIChar(wideChar(Swap(ord(s[i])))); -end; - -function UTF16ToIso8859_1Str(const S: wideString): string; -var - i,j,start: integer; - encType: TdomEncodingType; -begin - j:= length(s); - start:= 1; - encType:= etUTF16BE; - if j > 0 then begin - // Byte order mark? - if s[1] = #$feff then start:= 2 - else if s[1] = #$fffe then begin start:= 2; encType:= etUTF16LE; end; - end; - setLength(Result,j-start+1); - if encType = etUTF16BE - then for i:= start to j do Result[i]:= UTF16ToIso8859_1Char(s[i]) - else for i:= start to j do Result[i]:= UTF16ToIso8859_1Char(wideChar(Swap(ord(s[i])))); -end; - -function Utf16HighSurrogate(const value: integer): WideChar; -var - value2: word; -begin - value2:= ($D7C0 + ( value shr 10 )); - Result:= WideChar(value2); -end; - -function Utf16LowSurrogate(const value: integer): WideChar; -var - value2: word; -begin - value2:= ($DC00 XOR (value AND $3FF)); - Result:= WideChar(value2); -end; - -function Utf16SurrogateToInt(const highSurrogate, lowSurrogate: WideChar): integer; -begin - Result:= ( (word(highSurrogate) - $D7C0) shl 10 ) - + ( word(lowSurrogate) XOR $DC00 ); -end; - -function IsUtf16HighSurrogate(const S: WideChar): boolean; -begin - Case Word(S) of - $D800..$DBFF: result:= true; - else - result:= false; - end; -end; - -function IsUtf16LowSurrogate(const S: WideChar): boolean; -begin - Case Word(S) of - $DC00..$DFFF: result:= true; - else - result:= false; - end; -end; - - - -{ TCSMIB } - -constructor TCSMIB.Create(AOwner: TComponent); -begin - inherited; - Enum:= 3; -end; - -procedure TCSMIB.DoChange(Sender: TObject); -begin - if assigned(FOnChange) - then FOnChange(Sender); -end; - -procedure TCSMIB.DoChanging(Sender: TObject; NewEnum: integer; - var AllowChange: Boolean); -begin - if assigned(FOnChanging) - then FOnChanging(Sender,NewEnum,AllowChange); -end; - -function TCSMIB.GetAlias(i: integer): string; -begin - case FEnum of - 3: case i of - 0: result:= 'ANSI_X3.4-1968'; - 1: result:= 'iso-ir-6'; - 2: result:= 'ANSI_X3.4-1986'; - 3: result:= 'ISO_646.irv:1991'; - 4: result:= 'ASCII'; - 5: result:= 'ISO646-US'; - 6: result:= 'US-ASCII'; - 7: result:= 'us'; - 8: result:= 'IBM367'; - 9: result:= 'cp367'; - 10: result:= 'csASCII'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 4: case i of - 0: result:= 'ISO_8859-1:1987'; - 1: result:= 'iso-ir-100'; - 2: result:= 'ISO_8859-1'; - 3: result:= 'ISO-8859-1'; - 4: result:= 'latin1'; - 5: result:= 'l1'; - 6: result:= 'IBM819'; - 7: result:= 'CP819'; - 8: result:= 'csISOLatin1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 5: case i of - 0: result:= 'ISO_8859-2:1987'; - 1: result:= 'iso-ir-101'; - 2: result:= 'ISO_8859-2'; - 3: result:= 'ISO-8859-2'; - 4: result:= 'latin2'; - 5: result:= 'l2'; - 6: result:= 'csISOLatin2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 6: case i of - 0: result:= 'ISO_8859-3:1988'; - 1: result:= 'iso-ir-109'; - 2: result:= 'ISO_8859-3'; - 3: result:= 'ISO-8859-3'; - 4: result:= 'latin3'; - 5: result:= 'l3'; - 6: result:= 'csISOLatin3'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 7: case i of - 0: result:= 'ISO_8859-4:1988'; - 1: result:= 'iso-ir-110'; - 2: result:= 'ISO_8859-4'; - 3: result:= 'ISO-8859-4'; - 4: result:= 'latin4'; - 5: result:= 'l4'; - 6: result:= 'csISOLatin4'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 8: case i of - 0: result:= 'ISO_8859-5:1988'; - 1: result:= 'iso-ir-144'; - 2: result:= 'ISO_8859-5'; - 3: result:= 'ISO-8859-5'; - 4: result:= 'cyrillic'; - 5: result:= 'csISOLatinCyrillic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 9: case i of - 0: result:= 'ISO_8859-6:1987'; - 1: result:= 'iso-ir-127'; - 2: result:= 'ISO_8859-6'; - 3: result:= 'ISO-8859-6'; - 4: result:= 'ECMA-114'; - 5: result:= 'ASMO-708'; - 6: result:= 'arabic'; - 7: result:= 'csISOLatinArabic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 10: case i of - 0: result:= 'ISO_8859-7:1987'; - 1: result:= 'iso-ir-126'; - 2: result:= 'ISO_8859-7'; - 3: result:= 'ISO-8859-7'; - 4: result:= 'ELOT_928'; - 5: result:= 'ECMA-118'; - 6: result:= 'greek'; - 7: result:= 'greek8'; - 8: result:= 'csISOLatinGreek'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 11: case i of - 0: result:= 'ISO_8859-8:1988'; - 1: result:= 'iso-ir-138'; - 2: result:= 'ISO_8859-8'; - 3: result:= 'ISO-8859-8'; - 4: result:= 'hebrew'; - 5: result:= 'csISOLatinHebrew'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 12: case i of - 0: result:= 'ISO_8859-9:1989'; - 1: result:= 'iso-ir-148'; - 2: result:= 'ISO_8859-9'; - 3: result:= 'ISO-8859-9'; - 4: result:= 'latin5'; - 5: result:= 'l5'; - 6: result:= 'csISOLatin5'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 13: case i of - 0: result:= 'ISO_8859-10'; - 1: result:= 'iso-ir-157'; - 2: result:= 'l6'; - 3: result:= 'ISO-8859-10:1992'; - 4: result:= 'csISOLatin6'; - 5: result:= 'latin6'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 14: case i of - 0: result:= 'ISO_6937-2-add'; - 1: result:= 'iso-ir-142'; - 2: result:= 'csISOTextComm'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 15: case i of - 0: result:= 'JIS_X0201'; - 1: result:= 'X0201'; - 2: result:= 'csHalfWidthKatakana'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 16: case i of - 0: result:= 'JIS_Encoding'; - 1: result:= 'csJISEncoding'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 17: case i of - 0: result:= 'Shift_JIS'; - 1: result:= 'MS_Kanji'; - 2: result:= 'csShiftJIS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 18: case i of - 0: result:= 'Extended_UNIX_Code_Packed_Format_for_Japanese'; - 1: result:= 'csEUCPPkdFmtJapanese'; - 2: result:= 'EUC-JP'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 19: case i of - 0: result:= 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; - 1: result:= 'csEUCFixWidJapanese'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 20: case i of - 0: result:= 'BS_4730'; - 1: result:= 'iso-ir-4'; - 2: result:= 'ISO646-GB'; - 3: result:= 'gb'; - 4: result:= 'uk'; - 5: result:= 'csISO4UnitedKingdom'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 21: case i of - 0: result:= 'SEN_850200_C'; - 1: result:= 'iso-ir-11'; - 2: result:= 'ISO646-SE2'; - 3: result:= 'se2'; - 4: result:= 'csISO11SwedishForNames'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 22: case i of - 0: result:= 'IT'; - 1: result:= 'iso-ir-15'; - 2: result:= 'ISO646-IT'; - 3: result:= 'csISO15Italian'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 23: case i of - 0: result:= 'ES'; - 1: result:= 'iso-ir-17'; - 2: result:= 'ISO646-ES'; - 3: result:= 'csISO17Spanish'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 24: case i of - 0: result:= 'DIN_66003'; - 1: result:= 'iso-ir-21'; - 2: result:= 'de'; - 3: result:= 'ISO646-DE'; - 4: result:= 'csISO21German'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 25: case i of - 0: result:= 'NS_4551-1'; - 1: result:= 'iso-ir-60'; - 2: result:= 'ISO646-NO'; - 3: result:= 'no'; - 4: result:= 'csISO60Danish-Norwegian'; - 5: result:= 'csISO60Norwegian1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 26: case i of - 0: result:= 'NF_Z_62-010'; - 1: result:= 'iso-ir-69'; - 2: result:= 'ISO646-FR'; - 3: result:= 'fr'; - 4: result:= 'csISO69French'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 27: case i of - 0: result:= 'ISO-10646-UTF-1'; - 1: result:= 'csISO10646UTF1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 28: case i of - 0: result:= 'ISO_646.basic:1983'; - 1: result:= 'ref'; - 2: result:= 'csISO646basic1983'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 29: case i of - 0: result:= 'INVARIANT'; - 1: result:= 'csINVARIANT'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 30: case i of - 0: result:= 'ISO_646.irv:1983'; - 1: result:= 'iso-ir-2'; - 2: result:= 'irv'; - 3: result:= 'csISO2Int1RefVersion'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 31: case i of - 0: result:= 'NATS-SEFI'; - 1: result:= 'iso-ir-8-1'; - 2: result:= 'csNATSSEFI'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 32: case i of - 0: result:= 'NATS-SEFI-ADD'; - 1: result:= 'iso-ir-8-2'; - 2: result:= 'csNATSSEFIADD'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 33: case i of - 0: result:= 'NATS-DANO'; - 1: result:= 'iso-ir-9-1'; - 2: result:= 'csNATSDANO'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 34: case i of - 0: result:= 'NATS-DANO-ADD'; - 1: result:= 'iso-ir-9-2'; - 2: result:= 'csNATSDANOADD'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 35: case i of - 0: result:= 'SEN_850200_B'; - 1: result:= 'iso-ir-10'; - 2: result:= 'FI'; - 3: result:= 'ISO646-FI'; - 4: result:= 'ISO646-SE'; - 5: result:= 'se'; - 6: result:= 'csISO10Swedish'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 36: case i of - 0: result:= 'KS_C_5601-1987'; - 1: result:= 'iso-ir-149'; - 2: result:= 'KS_C_5601-1989'; - 3: result:= 'KSC_5601'; - 4: result:= 'korean'; - 5: result:= 'csKSC56011987'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 37: case i of - 0: result:= 'ISO-2022-KR'; - 1: result:= 'csISO2022KR'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 38: case i of - 0: result:= 'EUC-KR'; - 1: result:= 'csEUCKR'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 39: case i of - 0: result:= 'ISO-2022-JP'; - 1: result:= 'csISO2022JP'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 40: case i of - 0: result:= 'ISO-2022-JP-2'; - 1: result:= 'csISO2022JP2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 41: case i of - 0: result:= 'JIS_C6220-1969-jp'; - 1: result:= 'JIS_C6220-1969'; - 2: result:= 'iso-ir-13'; - 3: result:= 'katakana'; - 4: result:= 'x0201-7'; - 5: result:= 'csISO13JISC6220jp'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 42: case i of - 0: result:= 'JIS_C6220-1969-ro'; - 1: result:= 'iso-ir-14'; - 2: result:= 'jp'; - 3: result:= 'ISO646-JP'; - 4: result:= 'csISO14JISC6220ro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 43: case i of - 0: result:= 'PT'; - 1: result:= 'iso-ir-16'; - 2: result:= 'ISO646-PT'; - 3: result:= 'csISO16Portuguese'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 44: case i of - 0: result:= 'greek7-old'; - 1: result:= 'iso-ir-18'; - 2: result:= 'csISO18Greek7Old'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 45: case i of - 0: result:= 'latin-greek'; - 1: result:= 'iso-ir-19'; - 2: result:= 'csISO19LatinGreek'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 46: case i of - 0: result:= 'NF_Z_62-010_(1973)'; - 1: result:= 'iso-ir-25'; - 2: result:= 'ISO646-FR1'; - 3: result:= 'csISO25French'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 47: case i of - 0: result:= 'Latin-greek-1'; - 1: result:= 'iso-ir-27'; - 2: result:= 'csISO27LatinGreek1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 48: case i of - 0: result:= 'ISO_5427'; - 1: result:= 'iso-ir-37'; - 2: result:= 'csISO5427Cyrillic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 49: case i of - 0: result:= 'JIS_C6226-1978'; - 1: result:= 'iso-ir-42'; - 2: result:= 'csISO42JISC62261978'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 50: case i of - 0: result:= 'BS_viewdata'; - 1: result:= 'iso-ir-47'; - 2: result:= 'csISO47BSViewdata'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 51: case i of - 0: result:= 'INIS'; - 1: result:= 'iso-ir-49'; - 2: result:= 'csISO49INIS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 52: case i of - 0: result:= 'INIS-8'; - 1: result:= 'iso-ir-50'; - 2: result:= 'csISO50INIS8'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 53: case i of - 0: result:= 'INIS-cyrillic'; - 1: result:= 'iso-ir-51'; - 2: result:= 'csISO51INISCyrillic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 54: case i of - 0: result:= 'ISO_5427:1981'; - 1: result:= 'iso-ir-54'; - 2: result:= 'ISO5427Cyrillic1981'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 55: case i of - 0: result:= 'ISO_5428:1980'; - 1: result:= 'iso-ir-55'; - 2: result:= 'csISO5428Greek'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 56: case i of - 0: result:= 'GB_1988-80'; - 1: result:= 'iso-ir-57'; - 2: result:= 'cn'; - 3: result:= 'ISO646-CN'; - 4: result:= 'csISO57GB1988'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 57: case i of - 0: result:= 'GB_2312-80'; - 1: result:= 'iso-ir-58'; - 2: result:= 'chinese'; - 3: result:= 'csISO58GB231280'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 58: case i of - 0: result:= 'NS_4551-2'; - 1: result:= 'ISO646-NO2'; - 2: result:= 'iso-ir-61'; - 3: result:= 'no2'; - 4: result:= 'csISO61Norwegian2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 59: case i of - 0: result:= 'videotex-suppl'; - 1: result:= 'iso-ir-70'; - 2: result:= 'csISO70VideotexSupp1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 60: case i of - 0: result:= 'PT2'; - 1: result:= 'iso-ir-84'; - 2: result:= 'ISO646-PT2'; - 3: result:= 'csISO84Portuguese2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 61: case i of - 0: result:= 'ES2'; - 1: result:= 'iso-ir-85'; - 2: result:= 'ISO646-ES2'; - 3: result:= 'csISO85Spanish2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 62: case i of - 0: result:= 'MSZ_7795.3'; - 1: result:= 'iso-ir-86'; - 2: result:= 'ISO646-HU'; - 3: result:= 'hu'; - 4: result:= 'csISO86Hungarian'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 63: case i of - 0: result:= 'JIS_C6226-1983'; - 1: result:= 'iso-ir-87'; - 2: result:= 'x0208'; - 3: result:= 'JIS_X0208-1983'; - 4: result:= 'csISO87JISX0208'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 64: case i of - 0: result:= 'greek7'; - 1: result:= 'iso-ir-88'; - 2: result:= 'csISO88Greek7'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 65: case i of - 0: result:= 'ASMO_449'; - 1: result:= 'ISO_9036'; - 2: result:= 'arabic7'; - 3: result:= 'iso-ir-89'; - 4: result:= 'csISO89ASMO449'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 66: case i of - 0: result:= 'iso-ir-90'; - 1: result:= 'csISO90'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 67: case i of - 0: result:= 'JIS_C6229-1984-a'; - 1: result:= 'iso-ir-91'; - 2: result:= 'jp-ocr-a'; - 3: result:= 'csISO91JISC62291984a'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 68: case i of - 0: result:= 'JIS_C6229-1984-b'; - 1: result:= 'iso-ir-92'; - 2: result:= 'ISO646-JP-OCR-B'; - 3: result:= 'jp-ocr-b'; - 4: result:= 'csISO92JISC62291984b'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 69: case i of - 0: result:= 'JIS_C6229-1984-b-add'; - 1: result:= 'iso-ir-93'; - 2: result:= 'jp-ocr-b-add'; - 3: result:= 'csISO93JISC62291984badd'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 70: case i of - 0: result:= 'JIS_C6229-1984-hand'; - 1: result:= 'iso-ir-94'; - 2: result:= 'jp-ocr-hand'; - 3: result:= 'csISO94JISC62291984hand'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 71: case i of - 0: result:= 'JIS_C6229-1984-hand-add'; - 1: result:= 'iso-ir-95'; - 2: result:= 'jp-ocr-hand-add'; - 3: result:= 'csISO95JISC62291984handadd'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 72: case i of - 0: result:= 'JIS_C6229-1984-kana'; - 1: result:= 'iso-ir-96'; - 2: result:= 'jp-ocr-hand'; - 3: result:= 'csISO96JISC62291984kana'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 73: case i of - 0: result:= 'ISO_2033-1983'; - 1: result:= 'iso-ir-98'; - 2: result:= 'e13b'; - 3: result:= 'csISO2033'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 74: case i of - 0: result:= 'ANSI_X3.110-1983'; - 1: result:= 'iso-ir-99'; - 2: result:= 'CSA_T500-1983'; - 3: result:= 'NAPLPS'; - 4: result:= 'csISO99NAPLPS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 75: case i of - 0: result:= 'T.61-7bit'; - 1: result:= 'iso-ir-102'; - 2: result:= 'csISO102T617bit'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 76: case i of - 0: result:= 'T.61-8bit'; - 1: result:= 'T.61'; - 2: result:= 'iso-ir-103'; - 3: result:= 'csISO103T618bit'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 77: case i of - 0: result:= 'ECMA-cyrillic'; - 1: result:= 'iso-ir-111'; - 2: result:= 'csISO111ECMACyrillic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 78: case i of - 0: result:= 'CSA_Z243.4-1985-1'; - 1: result:= 'iso-ir-121'; - 2: result:= 'ISO646-CA'; - 3: result:= 'csa7-1'; - 4: result:= 'ca'; - 5: result:= 'csISO121Canadian1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 79: case i of - 0: result:= 'CSA_Z243.4-1985-2'; - 1: result:= 'iso-ir-122'; - 2: result:= 'ISO646-CA2'; - 3: result:= 'csa7-2'; - 4: result:= 'csISO122Canadian2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 80: case i of - 0: result:= 'CSA_Z243.4-1985-gr'; - 1: result:= 'iso-ir-123'; - 2: result:= 'csISO123CSAZ24341985gr'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 81: case i of - 0: result:= 'ISO_8859-6-E'; - 1: result:= 'csISO88596E'; - 2: result:= 'ISO-8859-6-E'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 82: case i of - 0: result:= 'ISO_8859-6-I'; - 1: result:= 'csISO88596I'; - 2: result:= 'ISO-8859-6-I'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 83: case i of - 0: result:= 'T.101-G2'; - 1: result:= 'iso-ir-128'; - 2: result:= 'csISO128T101G2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 84: case i of - 0: result:= 'ISO_8859-8-E'; - 1: result:= 'csISO88598E'; - 2: result:= 'ISO-8859-8-E'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 85: case i of - 0: result:= 'ISO_8859-8-I'; - 1: result:= 'csISO88598I'; - 2: result:= 'ISO-8859-8-I'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 86: case i of - 0: result:= 'CSN_369103'; - 1: result:= 'iso-ir-139'; - 2: result:= 'csISO139CSN369103'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 87: case i of - 0: result:= 'JUS_I.B1.002'; - 1: result:= 'iso-ir-141'; - 2: result:= 'ISO646-YU'; - 3: result:= 'js'; - 4: result:= 'yu'; - 5: result:= 'csISO141JUSIB1002'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 88: case i of - 0: result:= 'IEC_P27-1'; - 1: result:= 'iso-ir-143'; - 2: result:= 'csISO143IECP271'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 89: case i of - 0: result:= 'JUS_I.B1.003-serb'; - 1: result:= 'iso-ir-146'; - 2: result:= 'serbian'; - 3: result:= 'csISO146Serbian'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 90: case i of - 0: result:= 'JUS_I.B1.003-mac'; - 1: result:= 'macedonian'; - 2: result:= 'iso-ir-147'; - 3: result:= 'csISO147Macedonian'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 91: case i of - 0: result:= 'greek-ccitt'; - 1: result:= 'iso-ir-150'; - 2: result:= 'csISO150'; - 3: result:= 'csISO150GreekCCITT'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 92: case i of - 0: result:= 'NC_NC00-10:81'; - 1: result:= 'cuba'; - 2: result:= 'iso-ir-151'; - 3: result:= 'ISO646-CU'; - 4: result:= 'csISO151Cuba'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 93: case i of - 0: result:= 'ISO_6937-2-25'; - 1: result:= 'iso-ir-152'; - 2: result:= 'csISO6937Add'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 94: case i of - 0: result:= 'GOST_19768-74'; - 1: result:= 'ST_SEV_358-88'; - 2: result:= 'iso-ir-153'; - 3: result:= 'csISO153GOST1976874'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 95: case i of - 0: result:= 'ISO_8859-supp'; - 1: result:= 'iso-ir-154'; - 2: result:= 'latin1-2-5'; - 3: result:= 'csISO8859Supp'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 96: case i of - 0: result:= 'ISO_10367-box'; - 1: result:= 'iso-ir-155'; - 2: result:= 'csISO10367Box'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 97: case i of - 0: result:= 'latin-lap'; - 1: result:= 'lap'; - 2: result:= 'iso-ir-158'; - 3: result:= 'csISO158Lap'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 98: case i of - 0: result:= 'JIS_X0212-1990'; - 1: result:= 'x0212'; - 2: result:= 'iso-ir-159'; - 3: result:= 'csISO159JISX02121990'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 99: case i of - 0: result:= 'DS_2089'; - 1: result:= 'DS2089'; - 2: result:= 'ISO646-DK'; - 3: result:= 'dk'; - 4: result:= 'csISO646Danish'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 100: case i of - 0: result:= 'us-dk'; - 1: result:= 'csUSDK'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 101: case i of - 0: result:= 'dk-us'; - 1: result:= 'csDKUS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 102: case i of - 0: result:= 'KSC5636'; - 1: result:= 'ISO646-KR'; - 2: result:= 'csKSC5636'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 103: case i of - 0: result:= 'UNICODE-1-1-UTF-7'; - 1: result:= 'csUnicode11UTF7'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 104: case i of - 0: result:= 'ISO-2022-CN'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 105: case i of - 0: result:= 'ISO-2022-CN-EXT'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 106: case i of - 0: result:= 'UTF-8'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 109: case i of - 0: result:= 'ISO-8859-13'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 110: case i of - 0: result:= 'ISO-8859-14'; - 1: result:= 'iso-ir-199'; - 2: result:= 'ISO_8859-14:1998'; - 3: result:= 'ISO_8859-14'; - 4: result:= 'latin8'; - 5: result:= 'iso-celtic'; - 6: result:= 'l8'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 111: case i of - 0: result:= 'ISO-8859-15'; - 1: result:= 'ISO_8869-15'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 112: case i of - 0: result:= 'ISO-8859-16'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1000: case i of - 0: result:= 'ISO-10646-UCS-2'; - 1: result:= 'csUnicode'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1001: case i of - 0: result:= 'ISO-10646-UCS-4'; - 1: result:= 'csUCS4'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1002: case i of - 0: result:= 'ISO-10646-UCS-Basic'; - 1: result:= 'csUnicodeASCII'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1003: case i of - 0: result:= 'ISO-10646-Unicode-Latin1'; - 1: result:= 'csUnicodeLatin1'; - 2: result:= 'ISO-10646'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1004: case i of - 0: result:= 'ISO-10646-J-1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1005: case i of - 0: result:= 'ISO-Unicode-IBM-1261'; - 1: result:= 'csUnicodeIBM1261'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1006: case i of - 0: result:= 'ISO-Unicode-IBM-1268'; - 1: result:= 'csUnicodeIBM1268'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1007: case i of - 0: result:= 'ISO-Unicode-IBM-1276'; - 1: result:= 'csUnicodeIBM1276'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1008: case i of - 0: result:= 'ISO-Unicode-IBM-1264'; - 1: result:= 'csUnicodeIBM1264'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1009: case i of - 0: result:= 'ISO-Unicode-IBM-1265'; - 1: result:= 'csUnicodeIBM1265'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1010: case i of - 0: result:= 'UNICODE-1-1'; - 1: result:= 'csUnicode11'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1011: case i of - 0: result:= 'SCSU'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1012: case i of - 0: result:= 'UTF-7'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1013: case i of - 0: result:= 'UTF-16BE'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1014: case i of - 0: result:= 'UTF-16LE'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 1015: case i of - 0: result:= 'UTF-16'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2000: case i of - 0: result:= 'ISO-8859-1-Windows-3.0-Latin-1'; - 1: result:= 'csWindows30Latin1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2001: case i of - 0: result:= 'ISO-8859-1-Windows-3.1-Latin-1'; - 1: result:= 'csWindows31Latin1'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2002: case i of - 0: result:= 'ISO-8859-2-Windows-Latin-2'; - 1: result:= 'csWindows31Latin2'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2003: case i of - 0: result:= 'ISO-8859-9-Windows-Latin-5'; - 1: result:= 'csWindows31Latin5'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2004: case i of - 0: result:= 'hp-roman8'; - 1: result:= 'roman8'; - 2: result:= 'r8'; - 3: result:= 'csHPRoman8'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2005: case i of - 0: result:= 'Adobe-Standard-Encoding'; - 1: result:= 'csAdobeStandardEncoding'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2006: case i of - 0: result:= 'Ventura-US'; - 1: result:= 'csVenturaUS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2007: case i of - 0: result:= 'Ventura-International'; - 1: result:= 'csVenturaInternational'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2008: case i of - 0: result:= 'DEC-MCS'; - 1: result:= 'dec'; - 2: result:= 'csDECMCS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2009: case i of - 0: result:= 'IBM850'; - 1: result:= 'cp850'; - 2: result:= '850'; - 3: result:= 'csPC850Multilingual'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2010: case i of - 0: result:= 'IBM852'; - 1: result:= 'cp852'; - 2: result:= '852'; - 3: result:= 'csPCp852'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2011: case i of - 0: result:= 'IBM437'; - 1: result:= 'cp437'; - 2: result:= '437'; - 3: result:= 'csPC8CodePage437'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2012: case i of - 0: result:= 'PC8-Danish-Norwegian'; - 1: result:= 'csPC8DanishNorwegian'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2013: case i of - 0: result:= 'IBM862'; - 1: result:= 'cp862'; - 2: result:= '862'; - 3: result:= 'csPC862LatinHebrew'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2014: case i of - 0: result:= 'PC8-Turkish'; - 1: result:= 'csPC8Turkish'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2015: case i of - 0: result:= 'IBM-Symbols'; - 1: result:= 'csIBMSymbols'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2016: case i of - 0: result:= 'IBM-Thai'; - 1: result:= 'csIBMThai'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2017: case i of - 0: result:= 'HP-Legal'; - 1: result:= 'csHPLegal'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2018: case i of - 0: result:= 'HP-Pi-font'; - 1: result:= 'csHPPiFont'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2019: case i of - 0: result:= 'HP-Math8'; - 1: result:= 'csHPMath8'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2020: case i of - 0: result:= 'Adobe-Symbol-Encoding'; - 1: result:= 'csHPPSMath'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2021: case i of - 0: result:= 'HP-DeskTop'; - 1: result:= 'csHPDesktop'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2022: case i of - 0: result:= 'Ventura-Math'; - 1: result:= 'csVenturaMath'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2023: case i of - 0: result:= 'Microsoft-Publishing'; - 1: result:= 'csMicrosoftPublishing'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2024: case i of - 0: result:= 'Windows-31J'; - 1: result:= 'csWindows31J'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2025: case i of - 0: result:= 'GB2312'; - 1: result:= 'csGB2312'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2026: case i of - 0: result:= 'Big5'; - 1: result:= 'csBig5'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2027: case i of - 0: result:= 'macintosh'; - 1: result:= 'mac'; - 2: result:= 'csMacintosh'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2028: case i of - 0: result:= 'IBM037'; - 1: result:= 'cp037'; - 2: result:= 'ebcdic-cp-us'; - 3: result:= 'ebcdic-cp-ca'; - 4: result:= 'ebcdic-cp-wt'; - 5: result:= 'ebcdic-cp-nl'; - 6: result:= 'csIBM037'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2029: case i of - 0: result:= 'IBM038'; - 1: result:= 'EBCDIC-INT'; - 2: result:= 'cp038'; - 3: result:= 'csIBM038'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2030: case i of - 0: result:= 'IBM273'; - 1: result:= 'CP273'; - 2: result:= 'csIBM273'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2031: case i of - 0: result:= 'IBM274'; - 1: result:= 'EBCDIC-BE'; - 2: result:= 'CP274'; - 3: result:= 'csIBM274'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2032: case i of - 0: result:= 'IBM275'; - 1: result:= 'EBCDIC-BR'; - 2: result:= 'cp275'; - 3: result:= 'csIBM275'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2033: case i of - 0: result:= 'IBM277'; - 1: result:= 'EBCDIC-CP-DK'; - 2: result:= 'EBCDIC-CP-NO'; - 3: result:= 'csIBM277'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2034: case i of - 0: result:= 'IBM278'; - 1: result:= 'CP278'; - 2: result:= 'ebcdic-cp-fi'; - 3: result:= 'ebcdic-cp-se'; - 4: result:= 'csIBM278'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2035: case i of - 0: result:= 'IBM280'; - 1: result:= 'CP280'; - 2: result:= 'ebcdic-cp-it'; - 3: result:= 'csIBM280'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2036: case i of - 0: result:= 'IBM281'; - 1: result:= 'EBCDIC-JP-E'; - 2: result:= 'cp281'; - 3: result:= 'csIBM281'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2037: case i of - 0: result:= 'IBM284'; - 1: result:= 'CP284'; - 2: result:= 'ebcdic-cp-es'; - 3: result:= 'csIBM284'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2038: case i of - 0: result:= 'IBM285'; - 1: result:= 'CP285'; - 2: result:= 'ebcdic-cp-gb'; - 3: result:= 'csIBM285'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2039: case i of - 0: result:= 'IBM290'; - 1: result:= 'cp290'; - 2: result:= 'EBCDIC-JP-kana'; - 3: result:= 'csIBM290'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2040: case i of - 0: result:= 'IBM297'; - 1: result:= 'cp297'; - 2: result:= 'ebcdic-cp-fr'; - 3: result:= 'csIBM297'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2041: case i of - 0: result:= 'IBM420'; - 1: result:= 'cp420'; - 2: result:= 'ebcdic-cp-ar1'; - 3: result:= 'csIBM420'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2042: case i of - 0: result:= 'IBM423'; - 1: result:= 'cp423'; - 2: result:= 'ebcdic-cp-gr'; - 3: result:= 'csIBM423'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2043: case i of - 0: result:= 'IBM424'; - 1: result:= 'cp424'; - 2: result:= 'ebcdic-cp-he'; - 3: result:= 'csIBM424'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2044: case i of - 0: result:= 'IBM500'; - 1: result:= 'CP500'; - 2: result:= 'ebcdic-cp-be'; - 3: result:= 'ebcdic-cp-ch'; - 4: result:= 'csIBM500'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2045: case i of - 0: result:= 'IBM851'; - 1: result:= 'cp851'; - 2: result:= '851'; - 3: result:= 'csIBM851'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2046: case i of - 0: result:= 'IBM855'; - 1: result:= 'cp855'; - 2: result:= '855'; - 3: result:= 'csIBM855'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2047: case i of - 0: result:= 'IBM857'; - 1: result:= 'cp857'; - 2: result:= '857'; - 3: result:= 'csIBM857'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2048: case i of - 0: result:= 'IBM860'; - 1: result:= 'cp860'; - 2: result:= '860'; - 3: result:= 'csIBM860'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2049: case i of - 0: result:= 'IBM861'; - 1: result:= 'cp861'; - 2: result:= '861'; - 3: result:= 'cp-is'; - 4: result:= 'csIBM861'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2050: case i of - 0: result:= 'IBM863'; - 1: result:= 'cp863'; - 2: result:= '863'; - 3: result:= 'csIBM863'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2051: case i of - 0: result:= 'IBM864'; - 1: result:= 'cp864'; - 2: result:= 'csIBM864'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2052: case i of - 0: result:= 'IBM865'; - 1: result:= 'cp865'; - 2: result:= '865'; - 3: result:= 'csIBM865'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2053: case i of - 0: result:= 'IBM868'; - 1: result:= 'CP868'; - 2: result:= 'cp-ar'; - 3: result:= 'csIBM868'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2054: case i of - 0: result:= 'IBM869'; - 1: result:= 'cp869'; - 2: result:= '869'; - 3: result:= 'cp-gr'; - 4: result:= 'csIBM869'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2055: case i of - 0: result:= 'IBM870'; - 1: result:= 'CP870'; - 2: result:= 'ebcdic-cp-roece'; - 3: result:= 'ebcdic-cp-yu'; - 4: result:= 'csIBM870'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2056: case i of - 0: result:= 'IBM871'; - 1: result:= 'CP871'; - 2: result:= 'ebcdic-cp-is'; - 3: result:= 'csIBM871'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2057: case i of - 0: result:= 'IBM880'; - 1: result:= 'cp880'; - 2: result:= 'EBCDIC-Cyrillic'; - 3: result:= 'csIBM880'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2058: case i of - 0: result:= 'IBM891'; - 1: result:= 'cp891'; - 2: result:= 'csIBM891'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2059: case i of - 0: result:= 'IBM903'; - 1: result:= 'cp903'; - 2: result:= 'csIBM903'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2060: case i of - 0: result:= 'IBM904'; - 1: result:= 'cp904'; - 2: result:= '904'; - 3: result:= 'csIBM904'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2061: case i of - 0: result:= 'IBM905'; - 1: result:= 'CP905'; - 2: result:= 'ebcdic-cp-tr'; - 3: result:= 'csIBM905'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2062: case i of - 0: result:= 'IBM918'; - 1: result:= 'CP918'; - 2: result:= 'ebcdic-cp-ar2'; - 3: result:= 'csIBM918'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2063: case i of - 0: result:= 'IBM1026'; - 1: result:= 'CP1026'; - 2: result:= 'csIBM1026'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2064: case i of - 0: result:= 'EBCDIC-AT-DE'; - 1: result:= 'csIBMEBCDICATDE'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2065: case i of - 0: result:= 'EBCDIC-AT-DE-A'; - 1: result:= 'csIBMEBCDICATDEA'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2066: case i of - 0: result:= 'EBCDIC-CA-FR'; - 1: result:= 'csIBMEBCDICCAFR'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2067: case i of - 0: result:= 'EBCDIC-DK-NO'; - 1: result:= 'csIBMEBCDICDKNO'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2068: case i of - 0: result:= 'EBCDIC-DK-NO-A'; - 1: result:= 'csIBMEBCDICDKNOA'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2069: case i of - 0: result:= 'EBCDIC-FI-SE'; - 1: result:= 'csIBMEBCDICFISE'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2070: case i of - 0: result:= 'EBCDIC-FI-SE-A'; - 1: result:= 'csIBMEBCDICFISEA'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2071: case i of - 0: result:= 'EBCDIC-FR'; - 1: result:= 'csIBMEBCDICFR'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2072: case i of - 0: result:= 'EBCDIC-IT'; - 1: result:= 'csIBMEBCDICIT'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2073: case i of - 0: result:= 'EBCDIC-PT'; - 1: result:= 'csIBMEBCDICPT'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2074: case i of - 0: result:= 'EBCDIC-ES'; - 1: result:= 'csIBMEBCDICES'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2075: case i of - 0: result:= 'EBCDIC-ES-A'; - 1: result:= 'csIBMEBCDICESA'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2076: case i of - 0: result:= 'EBCDIC-ES-S'; - 1: result:= 'csIBMEBCDICESS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2077: case i of - 0: result:= 'EBCDIC-UK'; - 1: result:= 'csIBMEBCDICUK'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2078: case i of - 0: result:= 'EBCDIC-US'; - 1: result:= 'csIBMEBCDICUS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2079: case i of - 0: result:= 'UNKNOWN-8BIT'; - 1: result:= 'csUnkown8Bit'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2080: case i of - 0: result:= 'MNEMONIC'; - 1: result:= 'csMnemonic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2081: case i of - 0: result:= 'MNEM'; - 1: result:= 'csMnem'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2082: case i of - 0: result:= 'VISCII'; - 1: result:= 'csVISCII'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2083: case i of - 0: result:= 'VIQR'; - 1: result:= 'csVIQR'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2084: case i of - 0: result:= 'KOI8-R'; - 1: result:= 'csKOI8R'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2085: case i of - 0: result:= 'HZ-GB-2312'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2086: case i of - 0: result:= 'IBM866'; - 1: result:= 'cp866'; - 2: result:= '866'; - 3: result:= 'csIBM866'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2087: case i of - 0: result:= 'IBM775'; - 1: result:= 'cp775'; - 2: result:= 'csPC775Baltic'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2088: case i of - 0: result:= 'KOI8-U'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2089: case i of - 0: result:= 'IBM00858'; - 1: result:= 'CCSID00858'; - 2: result:= 'CP00858'; - 3: result:= 'PC-Multilingual-850+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2090: case i of - 0: result:= 'IBM00924'; - 1: result:= 'CCSID00924'; - 2: result:= 'CP00924'; - 3: result:= 'ebcdic-Latin9--euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2091: case i of - 0: result:= 'IBM01140'; - 1: result:= 'CCSID01140'; - 2: result:= 'CP01140'; - 3: result:= 'ebcdic-us-37+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2092: case i of - 0: result:= 'IBM01141'; - 1: result:= 'CCSID01141'; - 2: result:= 'CP01141'; - 3: result:= 'ebcdic-de-273+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2093: case i of - 0: result:= 'IBM01142'; - 1: result:= 'CCSID01142'; - 2: result:= 'CP01142'; - 3: result:= 'ebcdic-dk-277+euro'; - 4: result:= 'ebcdic-no-277+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2094: case i of - 0: result:= 'IBM01143'; - 1: result:= 'CCSID01143'; - 2: result:= 'CP01143'; - 3: result:= 'ebcdic-fi-278+euro'; - 4: result:= 'ebcdic-se-278+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2095: case i of - 0: result:= 'IBM01144'; - 1: result:= 'CCSID01144'; - 2: result:= 'CP01144'; - 3: result:= 'ebcdic-it-280+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2096: case i of - 0: result:= 'IBM01145'; - 1: result:= 'CCSID01145'; - 2: result:= 'CP01145'; - 3: result:= 'ebcdic-es-284+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2097: case i of - 0: result:= 'IBM01146'; - 1: result:= 'CCSID01146'; - 2: result:= 'CP01146'; - 3: result:= 'ebcdic-gb-285+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2098: case i of - 0: result:= 'IBM01147'; - 1: result:= 'CCSID01147'; - 2: result:= 'CP01147'; - 3: result:= 'ebcdic-fr-297+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2099: case i of - 0: result:= 'IBM01148'; - 1: result:= 'CCSID01148'; - 2: result:= 'CP01148'; - 3: result:= 'ebcdic-international-500+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2100: case i of - 0: result:= 'IBM01149'; - 1: result:= 'CCSID01149'; - 2: result:= 'CP01149'; - 3: result:= 'ebcdic-is-871+euro'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2101: case i of - 0: result:= 'Big5-HKSCS'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2250: case i of - 0: result:= 'windows-1250'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2251: case i of - 0: result:= 'windows-1251'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2252: case i of - 0: result:= 'windows-1252'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2253: case i of - 0: result:= 'windows-1253'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2254: case i of - 0: result:= 'windows-1254'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2255: case i of - 0: result:= 'windows-1255'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2256: case i of - 0: result:= 'windows-1256'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2257: case i of - 0: result:= 'windows-1257'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2258: case i of - 0: result:= 'windows-1258'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - 2259: case i of - 0: result:= 'TIS-620'; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; -end; - -function TCSMIB.GetAliasCount: integer; -begin - case FEnum of - 104..106,109,112,1004,1011..1015,2085,2088,2101,2250..2259: result:= 1; - 16,19,27,29,37..40,66,100..101,103,111,1000..1002,1005..1010,2000..2003,2005..2007,2012,2014..2026,2064..2084: result:= 2; - 14..15,17..18,28,31..34,44..45,47..55,59,64,72,75,77,80..86,88,93,96,102,1003,2008,2027,2030,2051,2058..2059,2063,2087: result:= 3; - 22..23,30,43,46,57,60..61,67,69..71,73,76,89..91,94..95,97..98,2004,2009..2011,2013,2029,2031..2033,2035..2043,2045..2048,2050,2052..2053,2056..2057,2060..2062,2086,2089..2092,2095..2100: result:= 4; - 21,24,26,42,56,58,62..63,65,68,74,79,92,99,2034,2044,2049,2054..2055,2093..2094: result:= 5; - 8,11,13,20,25,36,41,78,87: result:= 6; - 5..7,12,35,110,2028: result:= 7; - 9: result:= 8; - 4,10: result:= 9; - 3: result:= 11; - else - raise ECSMIBException.Create('Invalid MIB number'); - end; -end; - -function TCSMIB.GetPrfMIMEName: string; -begin - case FEnum of - 13,17,37..40,2025..2026,2084: result:= Alias[0]; - 18,82,84..85: result:= Alias[2]; - 4..12: result:= Alias[3]; - 3: result:= Alias[6]; - else - result:= ''; - end; -end; - -function TCSMIB.IsValidEnum(const Value: integer): boolean; -begin - case Value of - 3..106,109..112,1000..1015,2000..2101,2250..2259: - result:= true; - else - result:= false; - end; -end; - -procedure TCSMIB.SetEnum(const Value: integer); -var - AllowChange: boolean; -begin - if IsValidEnum(Value) then begin - if FEnum = Value then exit; - AllowChange:= True; - DoChanging(self,Value,AllowChange); - if AllowChange then begin - FEnum:= Value; - DoChange(self); - end; - end else if not IgnoreInvalidEnum then begin - raise ECSMIBException.Create('Invalid MIB number'); - end; -end; - -procedure TCSMIB.SetOnChange(const Value: TNotifyEvent); -begin - FOnChange := Value; -end; - -procedure TCSMIB.SetOnChanging(const Value: TCSMIBChangingEvent); -begin - FOnChanging := Value; -end; - -function TCSMIB.SetToAlias(const S: string): boolean; -var - i,j,oldEnum: integer; -begin - result:= true; - oldEnum:= Enum; - for i:= 3 to 106 do begin - Enum:= i; - for j:= 0 to pred(AliasCount) do begin - if CompareText(Alias[j],S) = 0 then exit; - end; - end; - for i:= 109 to 112 do begin - Enum:= i; - for j:= 0 to pred(AliasCount) do begin - if CompareText(Alias[j],S) = 0 then exit; - end; - end; - for i:= 1000 to 1015 do begin - Enum:= i; - for j:= 0 to pred(AliasCount) do begin - if CompareText(Alias[j],S) = 0 then exit; - end; - end; - for i:= 2000 to 2101 do begin - Enum:= i; - for j:= 0 to pred(AliasCount) do begin - if CompareText(Alias[j],S) = 0 then exit; - end; - end; - for i:= 2250 to 2259 do begin - Enum:= i; - for j:= 0 to pred(AliasCount) do begin - if CompareText(Alias[j],S) = 0 then exit; - end; - end; - result:= false; - Enum:= oldEnum; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWebBrokerServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWebBrokerServer.pas deleted file mode 100644 index 18460e0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWebBrokerServer.pas +++ /dev/null @@ -1,455 +0,0 @@ -unit uROWebBrokerServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, HTTPApp, uROClientIntf, uROServer; - -type - { TROWebBrokerServer } - TROWebBrokerServer = class(TROServer, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fUserBeforeDispatch : THTTPMethodEvent; - fActions : TWebActionItems; - - fActive : boolean; - fTransportIntf : IROHTTPTransport; - - fRequest : TWebRequest; - fResponse : TWebResponse; - fSendExceptionsAs500: boolean; - fOverridePathInfo : string; - fServeInfoPage: Boolean; - fServeRodl: Boolean; - - function ReadRequestStream(aRequest : TWebRequest): TStream; - function GetRequest: TWebRequest; - function GetResponse: TWebResponse; - function IsWebModuleAction(const aPathInfo: string) : boolean; - - protected - procedure ReplaceBeforeDispatch(aOwner : TComponent; aNewHandler : THTTPMethodEvent); virtual; - - function GetDispatchersClass : TROMessageDispatchersClass; override; - - procedure Loaded; override; - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - { IROTransport } - function GetTransportObject : TObject; - - { IROTCPTransport } - function GetClientAddress : string; - - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - function GetContentType : string; - procedure SetContentType(const aValue : string); - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - function GetTargetURL : string; - procedure SetTargetURL(const aValue : string); - function GetPathInfo : string; - procedure SetPathInfo (const aValue : string); - function GetLocation : string; - function GetQueryString : string; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - - property Request : TWebRequest read GetRequest; - property Response : TWebResponse read GetResponse; - - published - procedure IntOnBeforeDispatch(Sender: TObject; - Request: TWebRequest; - Response: TWebResponse; var Handled: Boolean); virtual; - property SendExceptionsAs500: boolean read fSendExceptionsAs500 write fSendExceptionsAs500 default true; - property ServeInfoPage : Boolean read fServeInfoPage write fServeInfoPage default true; - property ServeRodl : Boolean read fServeRodl write fServeRodl default true; - property OnGetRODLReader; - end; - -implementation - -uses TypInfo, uRORes, uROHTTPTools, SysUtils, uROHTTPDispatch, uROServerIntf, - uROClient, uROHtmlServerInfo, uRODL; - -type - // See TROWebBrokerServer.Loaded This is for EWF support. - IInterfaceComponentReference = interface - ['{E28B1858-EC86-4559-8FCD-6B4F824151ED}'] - function GetComponent: TComponent; - end; - -{ TROWebBrokerServer } - -constructor TROWebBrokerServer.Create(aOwner: TComponent); -begin - inherited; - - fActive := TRUE; - fActions := NIL; - fServeInfoPage := true; - fServeRodl := true; - fSendExceptionsAs500 := true; - Supports(Self, IROTransport, fTransportIntf); -end; - -destructor TROWebBrokerServer.Destroy; -begin - fTransportIntf := NIL; - - inherited; -end; - -procedure TROWebBrokerServer.Loaded; -var dispatchactions : IUnknown; - icref : IInterfaceComponentReference; -begin - inherited; - - if not (csDesigning in ComponentState) then begin - ReplaceBeforeDispatch(Owner, IntOnBeforeDispatch); - - if Owner is TWebModule - then fActions := TWebActionItems(GetObjectProp(Owner, 'Actions')) - else try - { This is for EWF. I don't want to set a dependency to the EWF units. - This component has to stay WebBroker and EWF neutral since, in the end, we are - dealing with web broker actions. This solves the problem. } - - {$IFDEF DELPHI6UP} - if IsPublishedProp(Owner, 'DispatchActions') - then dispatchactions := GetInterfaceProp(Owner, 'DispatchActions') - else Exit; - {$ENDIF DELPHI6UP} - - if (dispatchactions<>NIL) then begin - if Supports(dispatchactions, IInterfaceComponentReference, icref) then begin - fActions := TWebActionItems(GetObjectProp(icref.GetComponent, 'Actions')); - end; - end; - except - //ToDo: do we really want to catch this exception and display a DIAOG?? - on E:Exception do begin - //showmessage(e.message); - fActions := NIL; - end; - end; - end; -end; - -function TROWebBrokerServer.IntGetActive: boolean; -begin - result := fActive; -end; - -procedure TROWebBrokerServer.IntSetActive(const Value: boolean); -begin - fActive := Value; -end; - -function TROWebBrokerServer.ReadRequestStream(aRequest : TWebRequest): TStream; -var s, t : string; - i : integer; -begin - s := aRequest.Content; - i := aRequest.ContentLength-Length(Request.Content); - - while (i>0) do begin - t := aRequest.ReadString(I); - s := S+T; - i := i-Length(t); - end; - - result := TStringStream.Create(s); -end; - -function TROWebBrokerServer.IsWebModuleAction(const aPathInfo: string) : boolean; -var i : integer; -begin - result := FALSE; - if (fActions=NIL) then Exit; - - for i := 0 to (fActions.Count-1) do - if (CompareText(fActions[i].PathInfo, aPathInfo)=0) then begin - result := TRUE; - Exit; - end; -end; - -procedure TROWebBrokerServer.IntOnBeforeDispatch(Sender: TObject; - Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); -var requeststream : TStream; - responsestream : TStringStream; - root, sub: string; - disp: TROHTTPDispatcher; - lIgnore: TROResponseOptions; - format: TDataFormat; - info: IRONamedModuleInfo; - ok : boolean; - lRodl: TRODLLibrary; -begin - requeststream := NIL; - responsestream := NIL; - - fRequest := Request; - fResponse := Response; - - // Executes the user's event handler - if Assigned(fUserBeforeDispatch) - then fUserBeforeDispatch(Sender, Request, Response, Handled); - - // Processes the message if not handled already - if not Handled and not IsWebModuleAction(Request.PathInfo) then begin - try - responsestream := TStringStream.Create(''); - requeststream := ReadRequestStream(Request); - - root := request.PathInfo; - if (root <> '') and (root[1] = '/') then delete(root, 1,1); - if pos('/', root) > 0 then - begin - sub := copy(root, pos('/', root)+1, maxint); - root := '/' + copy(root, 1, pos('/', root) - 1); - end else - begin - root := '/' + root; - sub := ''; - end; - - disp := TROHTTPMessageDispatchers(Dispatchers).GetDispatcherByPath(root) as TROHTTPDispatcher; - - if disp <> nil then - begin - if (requeststream.Size = 0) then begin - ok := fServeRodl; - if ok then - ok := IntDispatchMessage(disp, fTransportIntf, requeststream, responsestream, lIgnore) - else - responsestream.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - end else if (sub = '') then - ok := IntDispatchMessage(disp, fTransportIntf, requeststream, responsestream, lIgnore) - else if (CompareText(sub, 'rodl') = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then fTransportIntf.PathInfo := disp.PathInfo else fTransportIntf.PathInfo := '/'+disp.PathInfo; - GetRodl(responsestream, fTransportIntf, format, GetRODLReader); - ok := true; - end else if Supports(disp.Message, IRONamedModuleInfo, info) and (CompareText(info.ModuleInfoName, sub) = 0) and fServeRodl then - begin - if copy(disp.PathInfo, 1, 1) = '/' then fTransportIntf.PathInfo := disp.PathInfo else fTransportIntf.PathInfo := '/'+disp.PathInfo; - info.GetModuleInfo(responsestream, fTransportIntf, format); - ok := true; - end else - begin - ok := IntDispatchMessage(disp, fTransportIntf, requeststream, responsestream, lIgnore) - end; - end else if (CompareText(root, '/rodl') = 0) and (sub = '') and fServeRodl then - begin - GetRodl(responsestream, fTransportIntf, format, GetRODLReader); - ok := true; - end else if fServeInfoPage and (CompareText(root, '/doc') = 0) then - begin - if sub = 'css' then - begin - responsestream.Writestring(GetRodlCss); - Response.ContentType := 'text/css'; - ok := true; - end else - if sub = 'xslt' then - begin - responsestream.WriteString(GetRodlStyleSheet); - Response.ContentType := 'text/xml'; - ok := true; - end else if sub = '' then - begin - lRodl := GetRodlLibrary(GetRODLReader); - try - Response.ContentType := 'text/xml'; - responsestream.WriteString(GetRodlWithStyleSheet(lRodl, fRequest.ScriptName + '/doc/xslt')); - finally - lRodl.Free; - end; - ok := true; - end else - begin - responsestream.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - ok := false; - end; - end else if fServeInfoPage and (CompareStr(root, '/favicon.ico') = 0) then - begin - GetRodlFavIcon(responsestream); - Response.ContentType := 'image/x-icon'; - ok := true; - end else if fServeInfoPage and (root = '/') then - begin - lrodl := GetRodlLibrary(GetRODLReader); - try - responsestream.WriteString(GetRodlServerInfo(fRequest.ScriptName, lRodl, Dispatchers)); - finally - lRodl.Free; - end; - ok := true; - end else - begin - responsestream.WriteString('500 Invalid Path
'+err_CannotFindMessageDispatcher); - ok := false; - end; - - if ok or not fSendExceptionsAs500 then - Response.StatusCode := HTTP_OK - else - Response.StatusCode := HTTP_FAILED; - - finally - requeststream.Free; - Handled := TRUE; - - responsestream.Position := 0; - Response.ContentStream := responsestream; - end; - end; -end; - -function TROWebBrokerServer.GetRequest: TWebRequest; -begin - result := fRequest; -end; - -function TROWebBrokerServer.GetResponse: TWebResponse; -begin - result := fResponse; -end; - -function TROWebBrokerServer.GetClientAddress: string; -begin - result := fRequest.RemoteAddr; -end; - -function TROWebBrokerServer.GetContentType: string; -begin - result := Response.ContentType -end; - -function TROWebBrokerServer.GetHeaders(const aName: string): string; -begin - Result := Request.GetFieldByName(aName); -end; - -function TROWebBrokerServer.GetTargetURL: string; -begin - result := '' -end; - -function TROWebBrokerServer.GetTransportObject: TObject; -begin - result := Self; -end; - -function TROWebBrokerServer.GetUserAgent: string; -begin - result := str_ProductName -end; - -procedure TROWebBrokerServer.SetContentType(const aValue: string); -begin - Response.ContentType := aValue -end; - -procedure TROWebBrokerServer.SetHeaders(const aName, aValue: string); -begin - SetHeaderValue(Response.CustomHeaders, aName, aValue); -end; - -procedure TROWebBrokerServer.SetPathInfo(const aValue: string); -begin - fOverridePathInfo := aValue; - // ignore? -end; - -procedure TROWebBrokerServer.SetTargetURL(const aValue: string); -begin - -end; - -procedure TROWebBrokerServer.SetUserAgent(const aValue: string); -begin - -end; - -procedure TROWebBrokerServer.ReplaceBeforeDispatch(aOwner: TComponent; - aNewHandler: THTTPMethodEvent); -// Do not change the sequance of these names. It's important for EWF. -const EventHandlerNames : array[0..1] of string = ('OnBeforeDispatch', 'BeforeDispatch'); -var pinfo : PPropInfo; - i : integer; - myevent : THTTPMethodEvent; - mtd, - mtd2 : TMethod; - s : string; -begin - for i := 0 to High(EventHandlerNames) do begin - s := EventHandlerNames[i]; - pinfo := GetPropInfo(Owner, s); - - if (pinfo<>NIL) then begin - myevent := IntOnBeforeDispatch; - mtd := TMethod(myevent); // <--- I have to pass through a local variable. Cannot type caet directly... Go figure! - - mtd2 := GetMethodProp(Owner, pinfo); - SetMethodProp(Owner, pinfo, mtd); - - TMethod(fUserBeforeDispatch) := mtd2; - Exit; - end; - end; - //TWebModule(aOwner).BeforeDispatch := aNewHandler; -end; - -function TROWebBrokerServer.GetPathInfo: string; -begin - if fOverridePathInfo <> '' then - result := fOverridePathInfo - else - result := Request.PathInfo -end; - -function TROWebBrokerServer.GetDispatchersClass: TROMessageDispatchersClass; -begin - result := TROHTTPMessageDispatchers; -end; - -function TROWebBrokerServer.GetLocation: string; -begin - result := 'http://'+fRequest.Host+fRequest.URL -end; - -function TROWebBrokerServer.GetQueryString: string; -begin - result := fRequest.Query -end; - -initialization - RegisterServerClass(TROWebBrokerServer); -finalization - UnregisterServerClass(TROWebBrokerServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinInetHttpChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinInetHttpChannel.pas deleted file mode 100644 index 2f525ec..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinInetHttpChannel.pas +++ /dev/null @@ -1,677 +0,0 @@ -unit uROWinInetHttpChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up } -{ platform: Win32 } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, WinInet, - uRORes, uROClient, uROClientIntf, Windows; - -const - DEFAULT_TIMEOUT = 1000 * 60 * 10; // default value = 10 Minutes - -type - { TLogin } - TROLogin = class(TPersistent) - private - fUsername, - fPassword: string; - public - procedure Assign(Source: TPersistent); override; - - published - property Username:string read fUsername write fUsername; - property Password:string read fPassword write fPassword; - end; - - TAfterAttemptConnectEvent = procedure (Sender: TObject; var aAttemptConnectResult: DWORD) of object; - { TROWinINetHttpChannel } - TROWinInetHTTPChannel = class(TROTransportChannel, IROTransport, IROTCPTransport, IROHTTPTransport) - private - fUserAgent:string; - fTargetUrl:string; - fStoreConnected:boolean; - fKeepConnection:boolean; - - fHeaders:string; - - fInetConnect: HINTERNET; - fInetRoot: HINTERNET; - fUrlScheme: Integer; - fUrlHost: string; - fUrlSite: string; - fUrlPort: Integer; - fLogin: TROLogin; - fAfterConnect: TNotifyEvent; - fTrustInvalidCA: boolean; // True means disable check for valid SSL/PCT-based certificates. - fTimeOut: integer; // Request TimeOut value. - fAttemptToConnect: Boolean; - fInitializeAutoProxy: Boolean; - fOnAfterAttemptConnect: TAfterAttemptConnectEvent; - procedure SetConnected(iValue:boolean); - function GetConnected:boolean; - procedure SetLogin(const Value: TROLogin); - - function SendData(iData:TStream):hInternet; - - procedure Check(Error: Boolean); - procedure ReceiveData(iRequest:hInternet; ioData:TStream); - - function AllowInvalidCA(InetConnect: HINTERNET; dwInetStatus: DWord): DWord; - function CheckInetError(InetConnect: HINTERNET; dwInetStatus: DWord): DWord; - protected - procedure IntDispatch(aRequest, aResponse : TStream); override; - procedure IntSetServerLocator(aServerLocator : TROServerLocator); override; - - { IROTransport } - function GetTransportObject : TObject; override; - - { IROTCPTransport } - function GetClientAddress : string; - - { IROHTTPTransport } - procedure SetHeaders(const aName, aValue : string); - function GetHeaders(const aName : string) : string; - function GetContentType : string; - procedure SetContentType(const aValue : string); - function GetUserAgent : string; - procedure SetUserAgent(const aValue : string); - - procedure SetTargetURL(const Value: string); - function GetTargetURL:string; - - function GetPathInfo : string; - function GetLocation : string; - function GetQueryString: String; - procedure SetPathInfo(const aValue: String); - - procedure TriggerAfterConnect; - - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - - procedure Assign(aSource : TPersistent); override; - - published - property UserAgent:string read GetUserAgent write SetUserAgent; - - property TargetURL : string read fTargetURL write SetTargetURL; - property Login:TROLogin read fLogin write SetLogin; - property StoreConnected:boolean read fStoreConnected write fStoreConnected default false; - property Connected:boolean read GetConnected write SetConnected stored fStoreConnected default false; - property KeepConnection:boolean read fKeepConnection write fKeepConnection default false; - - property Timeout: Integer read fTimeout write fTimeout default DEFAULT_TIMEOUT; - property AfterConnect:TNotifyEvent read fAfterConnect Write fAfterConnect; - property AttemptToConnect: Boolean read fAttemptToConnect write fAttemptToConnect default true; - property OnProgress; - property OnAfterAttemptConnect: TAfterAttemptConnectEvent read FOnAfterAttemptConnect write FOnAfterAttemptConnect; - property InitializeAutoProxy: Boolean read fInitializeAutoProxy write fInitializeAutoProxy default false; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - -resourcestring - sxInvalidURLformat = 'Invalid URL format'; - -implementation - -uses SysUtils, uROHTTPTools, uROClasses; - -const - INTERNET_ERROR_MASK_COMBINED_SEC_CERT = $2; - const_WinInetErrorCode_MIN = INTERNET_ERROR_BASE + 1; - const_WinInetErrorCode_MAX = ERROR_INTERNET_FAILED_DUETOSECURITYCHECK; - - ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED = (INTERNET_ERROR_BASE + 54); - ERROR_INTERNET_SEC_CERT_ERRORS = (INTERNET_ERROR_BASE + 55); - ERROR_INTERNET_SEC_CERT_NO_REV = (INTERNET_ERROR_BASE + 56); - ERROR_INTERNET_SEC_CERT_REV_FAILED = (INTERNET_ERROR_BASE + 57); - -{ TROWinINetHTTPChannel } - -procedure TROWinINetHTTPChannel.Check(Error: Boolean); -var ErrCode:integer; - S:string; -begin - ErrCode := getlasterror; - if Error and (ErrCode <> 0) then begin - SetLength(S, 256); - if FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, Pointer(GetModuleHandle('wininet.dll')), ErrCode, 0, PChar(S), Length(S), nil) > 0 then begin; - SetLength(S, StrLen(PChar(S))); - while (Length(S) > 0) and (S[Length(S)] in [#10, #13]) do SetLength(S, Length(S) - 1); - raise EROException.Create(S); - end - else begin - raise EROException.CreateFmt(err_UnexpectedWinINetProblem,[ErrCode]); - end; - - end; -end; - -constructor TROWinInetHTTPChannel.Create(AOwner: TComponent); -begin - inherited; - fTimeOut := DEFAULT_TIMEOUT; - UserAgent := str_ProductName; - fLogin := TROLogin.Create(); - fAttemptToConnect := true; -end; - -destructor TROWinInetHTTPChannel.Destroy; -begin - Connected := false; - FreeAndNil(fLogin); - inherited; -end; - -function TROWinInetHTTPChannel.GetConnected: boolean; -begin - result := Assigned(fInetConnect); -end; - -function TROWinINetHTTPChannel.GetContentType: string; -begin - result := GetHeaders(id_ContentType); -end; - -procedure TROWinINetHTTPChannel.SetContentType(const aValue: string); -begin - SetHeaders(id_ContentType,aValue); -end; - -function TROWinINetHTTPChannel.GetHeaders(const aName: string): string; -begin -end; - -procedure TROWinINetHTTPChannel.SetHeaders(const aName, aValue: string); -begin - if aValue = '' then exit; - if fHeaders <> '' then fHeaders := fHeaders+#13#10; - fHeaders := fHeaders+aName+': '+aValue; -end; - -function TROWinINetHTTPChannel.GetClientAddress: string; -begin - result := ''; -end; - -function TROWinINetHTTPChannel.GetLocation: string; -begin - result := ''; -end; - -function TROWinINetHTTPChannel.GetPathInfo: string; -begin - result := ''; -end; - -function TROWinINetHTTPChannel.GetTargetURL: string; -begin - result := fTargetUrl; -end; - -function TROWinINetHTTPChannel.GetUserAgent: string; -begin - result := fUserAgent; -end; - -procedure TROWinINetHTTPChannel.SetUserAgent(const aValue: string); -begin - if UserAgent <> aValue then - fUserAgent := aValue; -end; - -procedure TROWinInetHTTPChannel.SetLogin(const Value: TROLogin); -begin - fLogin.Assign(Value); -end; - -procedure TROWinINetHTTPChannel.IntDispatch(aRequest, aResponse: TStream); -var lRequest:hInternet; -begin - CheckProperties; - Connected := true; - try - lRequest := SendData(aRequest); - try - ReceiveData(lRequest,aResponse); - finally - InternetCloseHandle(lRequest); - end; - finally - if not KeepConnection then Connected := false; - end; -end; - -function TROWinINetHTTPChannel.SendData(iData: TStream):hInternet; -var - lHeaders: string; - RetVal, Flags: DWord; - AcceptTypes: array of PChar; - lDataStream: TMemoryStream; - Mask: DWORD; - bRes: Boolean; -begin - SetLength(AcceptTypes, 2); - - TriggerProgress(ptStart, pdSending, 0, iData.Size); - - AcceptTypes[0] := PChar('application/octet-stream'); - AcceptTypes[1] := nil; - - Flags := INTERNET_FLAG_NO_CACHE_WRITE; - - if KeepConnection then Flags := Flags or INTERNET_FLAG_KEEP_CONNECTION; - if fURLScheme = INTERNET_SCHEME_HTTPS then begin - Flags := Flags or INTERNET_FLAG_SECURE; - if fTrustInvalidCA then begin - Flags := Flags or INTERNET_FLAG_IGNORE_CERT_CN_INVALID - or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; - end; - end; - - result := HttpOpenRequest(FInetConnect, 'POST', PChar(fURLSite), nil, nil, Pointer(AcceptTypes), Flags, Integer(Self)); - Check(not Assigned(result)); - - { Time Out } - if fTimeOut > 0 then begin - InternetSetOption(Result, INTERNET_OPTION_RECEIVE_TIMEOUT, @fTimeOut, SizeOf(fTimeOut)); - InternetSetOption(FInetConnect, INTERNET_OPTION_RECEIVE_TIMEOUT, @fTimeOut, SizeOf(fTimeOut)); - - InternetSetOption(Result, INTERNET_OPTION_SEND_TIMEOUT, @fTimeOut, SizeOf(fTimeOut)); - InternetSetOption(FInetConnect, INTERNET_OPTION_SEND_TIMEOUT, @fTimeOut, SizeOf(fTimeOut)); - end; - - { Sertificates Errors } - Mask := INTERNET_ERROR_MASK_COMBINED_SEC_CERT; - InternetSetOption(FInetConnect, INTERNET_OPTION_ERROR_MASK, @Mask, SizeOf(Mask)); - - if iData is TMemoryStream then begin - lDataStream := iData as TMemoryStream - end - else begin - lDataStream := TMemoryStream.Create(); - lDataStream.LoadFromStream(iData); - end; - - try - - while true do begin - lHeaders := fHeaders; - fHeaders := ''; - bRes := HttpSendRequest(Result, pChar(lHeaders), Length(lHeaders), lDataStream.Memory, lDataStream.Size); - if not bRes then begin - RetVal := GetLastError; - if (RetVal > const_WinInetErrorCode_MIN) and (RetVal < const_WinInetErrorCode_MAX) then begin - if (RetVal = ERROR_INTERNET_SEC_CERT_ERRORS) or - (RetVal = ERROR_INTERNET_INVALID_CA) or - (RetVal = ERROR_INTERNET_SEC_CERT_CN_INVALID) or - (RetVal = ERROR_INTERNET_SEC_CERT_DATE_INVALID) or - (RetVal = ERROR_INTERNET_SEC_CERT_REV_FAILED) then begin - RetVal := AllowInvalidCA(Result, RetVal); - bRes := True; - end else if (RetVal = ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED) then begin - { you are accessing Secure Socket Layer (SSL)-protected resource - on a Web server that requires a valid client certificate. } - RetVal := CheckInetError(Result, RetVal); - bRes := True; - end else if (RetVal = HTTP_STATUS_DENIED) - or (RetVal = HTTP_STATUS_PAYMENT_REQ) then begin - RetVal := CheckInetError(Result, RetVal); - bRes := True; - end; - end; - end else begin - RetVal := CheckInetError(Result, GetLastError); - end; - Check(not bRes); - case RetVal of - ERROR_SUCCESS: begin - SetLastError(ERROR_SUCCESS); - Break; - end; - ERROR_CANCELLED: SysUtils.Abort; - ERROR_INTERNET_FORCE_RETRY: {Retry the operation}; - end; - end; - - finally - if lDataStream <> iData then lDataStream.Free; - end; - - TriggerProgress(ptDone, pdSending, 0, iData.Size); - -end; - -procedure TROWinInetHTTPChannel.ReceiveData(iRequest:hInternet; ioData:TStream); -const MaxStatusText : Integer = 4096; -var - Size, Status, Len, Index: DWord; - S:string; - - lpszData: PChar; // buffer for the data - dwSize: DWORD; // size of the data available - dwDownloaded: DWORD; // size of the downloaded data - - lTotalSize,lReceivedSize:dword; -begin - Len := SizeOf(Status); - Index := 0; - - { Get Status Code } - if not HttpQueryInfo(iRequest, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, - @Status, Len, Index) then RaiseLastOSError(); - - { Throw Exception is StatusCode >= 300 BUT not 500. SOAP faulty envelopes comes with that set } - if (Status >= 300) and (Status <> 500) then begin - Index := 0; - Size := MaxStatusText; - SetLength(S, Size); - if HttpQueryInfo(iRequest, HTTP_QUERY_STATUS_TEXT, @S[1], Size, Index) then begin - SetLength(S, Size); - raise EROException.CreateFmt('%s (%d)', [S, Status]); - end; - end; - - Index := 0; - { get total size } - if not HttpQueryInfo(iRequest, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @lTotalSize, Len, Index) then begin - { do not raise an exception when there is no "Content-Length" value in result header } - if GetLastError <> ERROR_HTTP_HEADER_NOT_FOUND then begin - RaiseLastOSError(); //TotalSize = 0;// - end else begin - SetLastError(0); - lTotalSize := 0; - end; - end; - - TriggerProgress(ptStart, pdReceiving, 0, lTotalSize); - - lReceivedSize := 0; - dwSize := 0; - dwDownloaded := 0; - while (true) do begin - // The call to InternetQueryDataAvailable determines the amount of data available to download. - while (not InternetQueryDataAvailable(iRequest, dwSize, 0, 0)) - and (GetLastError = ERROR_IO_PENDING) do begin - Sleep(1); - end; - - // Allocates a buffer of the size returned by InternetQueryDataAvailable - GetMem(lpszData, dwSize + 1); - try - // Reads the data from the HINTERNET handle. - while (not InternetReadFile(iRequest, lpszData, dwSize, dwDownloaded)) - and (GetLastError = ERROR_IO_PENDING) do begin - Sleep(1); - end; - if (GetLastError >= const_WinInetErrorCode_MIN) and (GetLastError <= const_WinInetErrorCode_MAX) then begin - Check(True); - end; - if GetLastError <> 0 then begin - // Adds a null terminator to the end of the data buffer - lpszData[dwDownloaded] := #0; - end; - - ioData.Write(PChar(lpszData)^, dwDownloaded); - Inc(lReceivedSize, dwDownloaded); - finally - FreeMem(lpszData); - end; - - TriggerProgress(ptInProgress, pdReceiving, lReceivedSize, lTotalSize); - - // Check the size of the remaining data. If it is zero, break. - if (dwDownloaded = 0) then begin - break; - end; - end; - - ioData.seek(0, soFromBeginning); - - TriggerProgress(ptDone, pdReceiving, 0,0); -end; - -function TROWinInetHTTPChannel.AllowInvalidCA(InetConnect: HINTERNET; dwInetStatus: DWord): DWord; -var - dwError: integer; - lppvData: pointer; - SECURITY_FLAGS: integer; - lpszDataSize: cardinal; - CertRevocation: boolean; - BRes: Boolean; -begin - Result := ERROR_CANCELLED; - if (dwInetStatus = ERROR_INTERNET_SEC_CERT_ERRORS) or - (dwInetStatus = ERROR_INTERNET_INVALID_CA) or - (dwInetStatus = ERROR_INTERNET_SEC_CERT_CN_INVALID) or - (dwInetStatus = ERROR_INTERNET_SEC_CERT_DATE_INVALID) or - (dwInetStatus = ERROR_INTERNET_SEC_CERT_REV_FAILED) then begin - CertRevocation := (dwInetStatus = ERROR_INTERNET_SEC_CERT_REV_FAILED); - if CertRevocation or not fTrustInvalidCA then begin - dwError := InternetErrorDlg(GetDesktopWindow(), InetConnect, dwInetStatus, - FLAGS_ERROR_UI_FILTER_FOR_ERRORS or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS or - FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, lppvData); - bRes := (dwError = ERROR_INTERNET_FORCE_RETRY) or (dwError = ERROR_SUCCESS); - end else begin - bRes := True; - end; - if bRes then begin - try - InternetQueryOption(InetConnect, INTERNET_OPTION_SECURITY_FLAGS, @SECURITY_FLAGS, lpszDataSize); - if CertRevocation then begin - SECURITY_FLAGS := SECURITY_FLAGS or SECURITY_FLAG_IGNORE_REVOCATION; - end else begin - SECURITY_FLAGS := SECURITY_FLAGS or SECURITY_FLAG_IGNORE_CERT_CN_INVALID - or SECURITY_FLAG_IGNORE_CERT_DATE_INVALID - or SECURITY_FLAG_IGNORE_UNKNOWN_CA; - end; - InternetSetOption(InetConnect, INTERNET_OPTION_SECURITY_FLAGS, @SECURITY_FLAGS, lpszDataSize); - except - dwError := InternetErrorDlg(GetDesktopWindow(), InetConnect, dwInetStatus, - FLAGS_ERROR_UI_FILTER_FOR_ERRORS or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS or - FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, lppvData); - bRes := (dwError = ERROR_INTERNET_FORCE_RETRY) or (dwError = ERROR_SUCCESS); - end; - end; - if not CertRevocation then begin - FTrustInvalidCA := bRes; - end; - if bRes then begin - Result := ERROR_INTERNET_FORCE_RETRY; - end; - end; -end; - -function TROWinInetHTTPChannel.CheckInetError(InetConnect: HINTERNET; dwInetStatus: DWord): DWord; -var - lppvData: pointer; -begin - Result := InternetErrorDlg(GetDesktopWindow(), InetConnect, dwInetStatus, - FLAGS_ERROR_UI_FILTER_FOR_ERRORS or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS or - FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, lppvData); -end; - -procedure TROWinInetHTTPChannel.TriggerAfterConnect; -begin - if Assigned(AfterConnect) then AfterConnect(self); -end; - - -function InternetInitializeAutoProxyDll(dwReserved: DWord): LongBool; stdcall; external 'WinInet.dll'; -var - AutoProxyCalled: Boolean = False; - -procedure TROWinInetHTTPChannel.SetConnected(iValue: boolean); -var - lAccessType:Integer; - lAttemptConnect: DWORD; -begin - if iValue and not GetConnected then begin - - {if Length(Proxy) > 0 then - AccessType := INTERNET_OPEN_TYPE_PROXY - else} - lAccessType := INTERNET_OPEN_TYPE_PRECONFIG; - - if fInitializeAutoProxy then begin - if not AutoProxyCalled then begin - InternetInitializeAutoProxyDll(0); - AutoProxyCalled := true; - end; - end; - - - fInetRoot := InternetOpen(PChar(UserAgent), lAccessType, nil, nil, 0);//PChar(Proxy)}, PChar(ProxyByPass), 0); - - if fAttemptToConnect then begin - lAttemptConnect := InternetAttemptConnect(0); - if assigned(FOnAfterAttemptConnect) then - FOnAfterAttemptConnect(self, lAttemptConnect); - if lAttemptConnect <> ERROR_SUCCESS then SysUtils.Abort; - end; - - Check(not Assigned(FInetRoot)); - try - FInetConnect := InternetConnect(FInetRoot, PChar(FURLHost), FURLPort, PChar(Login.UserName), PChar(Login.Password), INTERNET_SERVICE_HTTP, 0, Cardinal(Self)); - Check(not Assigned(FInetConnect)); - TriggerAfterConnect(); - except - InternetCloseHandle(FInetRoot); - FInetRoot := nil; - raise; - end; - end - else if not iValue then begin - if Assigned(FInetConnect) then InternetCloseHandle(FInetConnect); - FInetConnect := nil; - if Assigned(FInetRoot) then InternetCloseHandle(FInetRoot); - FInetRoot := nil; - end; -end; - -procedure TROWinINetHTTPChannel.SetTargetURL(const Value: string); -var URLComp:TURLComponents; - p:PChar; -begin - if Targeturl <> Value then begin - fTargetUrl := Value; - - if fTargetUrl <> '' then begin - FillChar(URLComp, SizeOf(URLComp), 0); - URLComp.dwStructSize := SizeOf(URLComp); - URLComp.dwSchemeLength := 1; - URLComp.dwHostNameLength := 1; - URLComp.dwURLPathLength := 1; - InternetCrackUrl(PChar(fTargetUrl), 0, 0, URLComp); - if not (URLComp.nScheme in [INTERNET_SCHEME_HTTP, INTERNET_SCHEME_HTTPS]) then - raise EROException.Create(sxInvalidURLformat); - FURLScheme := URLComp.nScheme; - FURLPort := URLComp.nPort; - p := PChar(fTargetUrl); - FURLHost := Copy(fTargetUrl, URLComp.lpszHostName - p + 1, URLComp.dwHostNameLength); - FURLSite := Copy(fTargetUrl, URLComp.lpszUrlPath - p + 1, URLComp.dwURLPathLength); - end - else begin - fURLPort := 0; - fURLHost := ''; - fURLSite := ''; - fURLScheme := 0; - end; - - end; -end; - -function TROWinInetHTTPChannel.GetTransportObject: TObject; -begin - result := self; -end; - -procedure TROWinInetHTTPChannel.IntSetServerLocator(aServerLocator: TROServerLocator); -begin - TargetURL := aServerLocator.Host; -end; - -function TROWinInetHTTPChannel.GetQueryString: String; -begin - result := '' -end; - -procedure TROWinInetHTTPChannel.SetPathInfo(const aValue: String); -begin - // do nothing -end; - -procedure TROWinInetHTTPChannel.CheckProperties; -begin - uROClasses.Check(TargetURL = '', Name + '.TargetURL must be set.'); - inherited; -end; - -procedure TROWinInetHTTPChannel.Assign(aSource: TPersistent); -var - lSource: TROWinInetHTTPChannel; -begin - inherited; - - if (aSource is TROWinInetHTTPChannel) then begin - lSource := TROWinInetHTTPChannel(aSource); - - UserAgent := lSource.UserAgent; - TargetURL := lSource.TargetURL; - Login.Assign(lSource.Login); - StoreConnected := lSource.StoreConnected; - Connected := lSource.Connected; - KeepConnection := lSource.KeepConnection; - AfterConnect := lSource.AfterConnect; - OnProgress := lSource.OnProgress; - end; -end; - - -{ TROLogin } - -procedure TROLogin.Assign(Source: TPersistent); -begin - if (Source is TROLogin) then begin - Username := TROLogin(Source).Username; - Password := TROLogin(Source).Password; - end - else inherited; -end; - -initialization - RegisterTransportChannelClass(TROWinInetHTTPChannel); - -finalization - UnRegisterTransportChannelClass(TROWinInetHTTPChannel); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageChannel.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageChannel.pas deleted file mode 100644 index 6a27ce3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageChannel.pas +++ /dev/null @@ -1,278 +0,0 @@ -unit uROWinMessageChannel; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} -{$I RemObjects.inc} - -interface - -{$WARN SYMBOL_DEPRECATED OFF} // This unit is only for Win32 - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROClient, uROClientIntf, Forms, Messages, Windows, uROEventRepository; - -type { TROWinMessageChannel } - TROWinMessageChannel = class(TROTransportChannel, IROActiveEventChannel) - private - fServerHandle, fWindowHandle : HWND; - fResponseRef : TStream; - fStartServer: boolean; - fServerID: string; - fFileName: string; - fParameters: string; - fDefaultDirectory: string; - fDelay: word; - fActiveEvents: Boolean; - fActiveGuid: TGUID; - - procedure WndProc(var Msg: TMessage); - procedure SetFileName(const Value: string); - procedure SetServerID(const Value: string); - - protected - fEventReceiver: IROEventReceiver; - procedure IntDispatch(aRequest, aResponse : TStream); override; - procedure RegisterEventReceiver(aReceiver: IROEventReceiver); - procedure UnregisterEventReceiver(aReceiver: IROEventReceiver); - function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall; - procedure BeforeDispatch(aMessage: IROMessage); override; - procedure OpenServer; - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - published - property StartServer : boolean read fStartServer write fStartServer default false; - property FileName : string read fFileName write SetFileName; - property Parameters : string read fParameters write fParameters; - property DefaultDirectory : string read fDefaultDirectory write fDefaultDirectory; - property ServerID : string read fServerID write SetServerID; - property Delay : word read fDelay write fDelay default 0; - - property ActiveEvents: Boolean read fActiveEvents write fActiveEvents default False; - property ActiveGuid: TGUID read fActiveGuid write fActiveGuid; - published - property SynchronizedProbing; - property OnSendStream; - property OnReceiveStream; - property ServerLocators; - property DispatchOptions; - property OnServerLocatorAssignment; - property ProbeServers; - property ProbeFrequency; - property OnBeforeProbingServers; - property OnAfterProbingServers; - property OnBeforeProbingServer; - property OnAfterProbingServer; - property OnLoginNeeded; - end; - -implementation - -uses Dialogs, SysUtils, ShellAPI, uRORes, uROClasses; - -{ - 0 = Message Request/Response - 1 = Event back - 2 = Register me (guid arg) - 3 = Unregister me (guid arg) -} - -{ TROWinMessageChannel } - -procedure TROWinMessageChannel.BeforeDispatch(aMessage: IROMessage); -begin - inherited; - if fActiveEvents then begin - if IsEqualGUID(fActiveGuid, EmptyGUID) then - fActiveGuid := NewGuid; - aMessage.ClientID := fActiveGuid; - end; -end; - -procedure TROWinMessageChannel.CheckProperties; -begin - Check(ServerID = '', Name + '.ServerID must be set.'); - inherited; -end; - -constructor TROWinMessageChannel.Create(aOwner: TComponent); -begin - inherited; - - // Removed the check to make the component usable also at design time - // There's no apparent problem with this - {if not (csDesigning in ComponentState) - then }fWindowHandle := AllocateHWnd(WndProc) - //else fWindowHandle := 0; - - {Timeout := 30000; { ms } -end; - -destructor TROWinMessageChannel.Destroy; -begin - if (fWindowHandle>0) - then DeallocateHWnd(fWindowHandle); - inherited; -end; - -procedure TROWinMessageChannel.IntDispatch(aRequest, aResponse: TStream); -var memstream : TMemoryStream; - CDS : TCopyDataStruct; - freememstream : boolean; - //dwResult:Cardinal; -begin - freememstream := not (aRequest is TMemoryStream); - fResponseRef := aResponse; - - // Locates the server window - OpenServer; - - if not freememstream then begin - memstream := TMemoryStream(aRequest) - end - else begin - memstream := TMemoryStream.Create; - memstream.LoadFromStream(aRequest); - end; - - memstream.Position := 0; - try - CDS.dwData := 0; - CDS.cbData := memstream.Size; - CDS.lpData := memstream.Memory; - - SendMessage(fServerHandle, WM_COPYDATA, fWindowHandle, Integer(@CDS)); - {if SendMessageTimeout(handle,WM_COPYDATA,fWindowHandle,Integer(@CDS), - SMTO_ABORTIFHUNG or SMTO_NORMAL,fTimeout,dwResult) = 0 then - RaiseError(err_WinMessageFailed,[GetLastError()]);} - - finally - if freememstream then memstream.Free; - fResponseRef := nil; - end; -end; - -procedure TROWinMessageChannel.OpenServer; -begin - CheckProperties; - fServerHandle := FindWindow(NIL, PChar(ServerID)); - if (fServerHandle=0) then begin - // Starts it - if StartServer then begin - ShellExecute(0, 'open', PChar(FileName), PChar(Parameters), PChar(DefaultDirectory), SW_NORMAL); - Sleep(Delay); - - fServerHandle := FindWindow(NIL, PChar(ServerID)); - end; - end; - - if (fServerHandle=0) then RaiseError(err_CannotFindServer, [ServerID]); -end; - -function TROWinMessageChannel.QueryInterface(const IID: TGUID; - out Obj): HRESULT; -begin - if (IsEqualGUID(IROActiveEventChannel, iid)) and (not fActiveEvents) then begin - Result := E_NOINTERFACE; - end else - result := inherited QueryInterface(IID, Obj); -end; - -procedure TROWinMessageChannel.RegisterEventReceiver( - aReceiver: IROEventReceiver); -var - CDS : TCopyDataStruct; -begin - fEventReceiver := aReceiver; - if fEventReceiver <> nil then begin - if IsEqualGUID(fActiveGuid, EmptyGUID) then - fActiveGuid := NewGuid; - - OpenServer; - - CDS.dwData := 2; - CDS.cbData := sizeof(fActiveGuid); - CDS.lpData := @fActiveGuid; - - SendMessage(fServerHandle, WM_COPYDATA, fWindowHandle, Integer(@CDS)); - end; -end; - -procedure TROWinMessageChannel.SetFileName(const Value: string); -begin - fFileName := Value; -end; - -procedure TROWinMessageChannel.SetServerID(const Value: string); -begin - fServerID := Value; -end; - -procedure TROWinMessageChannel.UnregisterEventReceiver( - aReceiver: IROEventReceiver); -var - CDS: TCopyDataStruct; -begin - if fEventReceiver <> nil then begin - if IsEqualGUID(fActiveGuid, EmptyGUID) then - fActiveGuid := NewGuid; - - OpenServer; - - CDS.dwData := 3; - CDS.cbData := sizeof(fActiveGuid); - CDS.lpData := @fActiveGuid; - - SendMessage(fServerHandle, WM_COPYDATA, fWindowHandle, Integer(@CDS)); - end; - fEventReceiver := nil; -end; - -procedure TROWinMessageChannel.WndProc(var Msg: TMessage); -var WMMsg : TWMCopyData absolute Msg; - lTmpStream: TMemoryStream; -begin - with Msg do - case Msg of - WM_COPYDATA : begin - case WMMsg.CopyDataStruct.dwData of - 0: begin - if fResponseRef = nil then exit; - fResponseRef.Write(WMMsg.CopyDataStruct.lpData^, WMMsg.CopyDataStruct.cbData); - fResponseRef.Position := 0; - end; - 1: begin - if fEventReceiver <> nil then begin - lTmpStream := TMemoryStream.Create; - try - lTmpStream.Write(WMMsg.CopyDataStruct.lpData^, WMMsg.CopyDataStruct.cbData); - lTmpStream.Position := 0; - fEventReceiver.Dispatch(lTmpStream, nil); - finally - lTmpStream.Free; - end; - end; - end; - end; - end; - else result := DefWindowProc(FWindowHandle, Msg, wParam, lParam); - end; -end; - -initialization - RegisterTransportChannelClass(TROWinMessageChannel); - -finalization - UnRegisterTransportChannelClass(TROWinMessageChannel); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageServer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageServer.pas deleted file mode 100644 index 877cdce..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROWinMessageServer.pas +++ /dev/null @@ -1,233 +0,0 @@ -unit uROWinMessageServer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, Windows, Messages, uROClientIntf, uROServer, uROEventRepository, uROServerIntf; - -type { TROWinMessageServer } - TROWinMessageServer = class(TROServer, IROTransport, IROActiveEventServer) - private - fWindowHandle : HWND; - fServerID : string; - fTransport : IROTransport; - fActiveEventRepository : TROEventRepository; - fActiveEventMap: TStringList; - - procedure WndProc(var Msg: TMessage); - procedure DispatchEvent(anEventDataItem: TROEventData; aSessionReference: TGUID; aSender: TObject); - procedure EventsRegistered(aSender: TObject; aClient: TGUID); - protected - { Internals } - procedure IntSetActive(const Value: boolean); override; - function IntGetActive : boolean; override; - - { IROTransport } - function GetTransportObject : TObject; - function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall; - - public - constructor Create(aOwner : TComponent); override; - destructor Destroy; override; - procedure CheckProperties; override; - published - property ServerID : string read fServerID write fServerID; - property ActiveEventRepository : TROEventRepository read fActiveEventRepository write fActiveEventRepository; - end; - -implementation - -uses Forms, Controls, SysUtils, uRORes, uROClasses; - -var - ROWindowClass: TWndClass = ( - style: 0; - lpfnWndProc: @DefWindowProc; - cbClsExtra: 0; - cbWndExtra: 0; - hInstance: 0; - hIcon: 0; - hCursor: 0; - hbrBackground: 0; - lpszMenuName: nil; - lpszClassName: 'ROUtilWindow'); - -function AllocateHWnd(const aWindowName : string; Method: TWndMethod): HWND; -var tmpclass: TWndClass; - isclsregistered: Boolean; -begin - ROWindowClass.hInstance := HInstance; - isclsregistered := GetClassInfo(HInstance, ROWindowClass.lpszClassName, tmpclass); - - if not isclsregistered or (tmpclass.lpfnWndProc <> @DefWindowProc) then begin - if isclsregistered then Windows.UnregisterClass(ROWindowClass.lpszClassName, HInstance); - Windows.RegisterClass(ROWindowClass); - end; - - Result := CreateWindowEx(WS_EX_TOOLWINDOW, ROWindowClass.lpszClassName, - PChar(aWindowName), WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil); - - if Assigned(Method) - then SetWindowLong(Result, GWL_WNDPROC, Longint({$IFDEF DELPHI6UP}Classes.{$ENDIF}MakeObjectInstance(Method))); -end; - -{ TROWinMessageServer } - -constructor TROWinMessageServer.Create(aOwner: TComponent); -begin - inherited; - Supports(Self, IROTransport, fTransport); - fWindowHandle := 0; - fActiveEventMap := TStringList.Create; -end; - -destructor TROWinMessageServer.Destroy; -begin - if (fWindowHandle>1) then {$IFDEF DELPHI6UP}Classes.{$ENDIF}DeallocateHWnd(fWindowHandle); - fActiveEventMap.Free; - inherited; -end; - -procedure TROWinMessageServer.WndProc(var Msg: TMessage); -var WMMsg : TWMCopyData absolute Msg; - requeststream, - responsestream : TMemoryStream; - CDS: TCopyDataStruct; - s: string; - i: Integer; -begin - requeststream := NIL; - responsestream := NIL; - - with Msg do - case Msg of - WM_COPYDATA : try - case WMMsg.CopyDataStruct.dwData of - 0: begin - requeststream := TMemoryStream.Create; - responsestream := TMemoryStream.Create; - - requeststream.Write(WMMsg.CopyDataStruct.lpData^, WMMsg.CopyDataStruct.cbData); - requeststream.Position := 0; - - //ProcessMessage(MessageIntf, fTransport, requeststream, responsestream); - DispatchMessage(fTransport, requeststream, responsestream); - - CDS.dwData := 0; - CDS.cbData := responsestream.Size; - CDS.lpData := responsestream.Memory; - - SendMessage(WMMsg.From, WM_COPYDATA, 0, Integer(@CDS)); - end; - 2: - begin - if WMMsg.CopyDataStruct.cbData = sizeof(TGuid) then begin - s := GuidToString(PGuid(WMMsg.CopyDataStruct.lpData)^); - fActiveEventMap.Values[s] := IntToStr(WMMsg.From); - if assigned(fActiveEventRepository) then - fActiveEventRepository.AddSession(PGuid(WMMsg.CopyDataStruct.lpData)^, Self) - end; - end; - 3: - begin - if WMMsg.CopyDataStruct.cbData = sizeof(TGuid) then begin - s := GuidToString(PGuid(WMMsg.CopyDataStruct.lpData)^); - i := fActiveEventMap.IndexOfName(s); - if i <> -1 then - fActiveEventMap.Delete(i); - if assigned(fActiveEventRepository) then - fActiveEventRepository.RemoveSession(PGuid(WMMsg.CopyDataStruct.lpData)^); - end; - end; - end; - finally - responsestream.Free; - requeststream.Free; - end; - else result := DefWindowProc(FWindowHandle, Msg, wParam, lParam); - end; -end; - -function TROWinMessageServer.IntGetActive: boolean; -begin - result := (fWindowHandle>0); -end; - -procedure TROWinMessageServer.IntSetActive(const Value: boolean); -begin - if Value then begin - if not (csDesigning in ComponentState) - then begin - CheckProperties; - fWindowHandle := AllocateHWnd(ServerID, WndProc); - end - else fWindowHandle := 1; // To save the property value - end - else begin - if (fWindowHandle>0) then begin - if (fWindowHandle>1) then {$IFDEF DELPHI6UP}Classes.{$ENDIF}DeallocateHWnd(fWindowHandle); - fWindowHandle := 0; - end; - end; -end; - -function TROWinMessageServer.GetTransportObject: TObject; -begin - result := Self; -end; - -function TROWinMessageServer.QueryInterface(const IID: TGUID; - out Obj): HRESULT; -begin - if IsEqualGUID(IROActiveEventServer, IID) and not assigned(fActiveEventRepository) then - result := E_NOINTERFACE - else - result := inherited QueryInterface(IID, Obj) -end; - -procedure TROWinMessageServer.DispatchEvent(anEventDataItem: TROEventData; - aSessionReference: TGUID; aSender: TObject); -var - lHandle: HWND; - cds: TCopyDataStruct; -begin - lHandle := StrToIntDef(fActiveEventMap.Values[GUIDToString(aSessionReference)], 0); - if lHandle = 0 then exit; // doesn't exist. - CDS.dwData := 1; - CDS.cbData := TMemoryStream(anEventDataItem.Data).Size; - CDS.lpData := TMemoryStream(anEventDataItem.Data).Memory; - - SendMessage(lHandle, WM_COPYDATA, 0, Integer(@CDS)); -end; - -procedure TROWinMessageServer.EventsRegistered(aSender: TObject; - aClient: TGUID); -begin - -end; - -procedure TROWinMessageServer.CheckProperties; -begin - Check(ServerID = '', Name + '.ServerID must be set.'); - inherited; -end; - -initialization - RegisterServerClass(TROWinMessageServer); -finalization - UnregisterServerClass(TROWinMessageServer); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXDOM_2_3.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXDOM_2_3.pas deleted file mode 100644 index 6b7a6e7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXDOM_2_3.pas +++ /dev/null @@ -1,33165 +0,0 @@ -unit uROXDOM_2_3; - -// XDOM 2.3.28 -// Extended Document Object Model 2.3.28 -// Delphi 3/4/5/6 and Kylix Implementation -// -// Copyright (c) 1999-2002 by Dieter Köhler -// ("http://www.philo.de/xml/") -// -// Definitions: -// - "Package" refers to the collection of files distributed by -// the Copyright Holder, and derivatives of that collection of -// files created through textual modification. -// - "Standard Version" refers to such a Package if it has not -// been modified, or has been modified in accordance with the -// wishes of the Copyright Holder. -// - "Copyright Holder" is whoever is name in the copyright or -// copyrights for the package. -// - "You" is you, if you're thinking about copying or distributing -// this Package. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Package"), to deal in the Package without restriction, -// including without limitation the rights to use, copy, modify, -// merge, publish, distribute, sublicense, and/or sell copies of the -// Package, and to permit persons to whom the Package is furnished -// to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Package. -// -// You may modify your copy of this Package in any way, provided -// that you insert a prominent notice in each changed file stating -// how and when you changed a file, and provided that you do at -// least one of the following: -// -// a) allow the Copyright Holder to include your modifications in -// the Standard Version of the Package. -// -// b) use the modified Package only within your corporation or -// organization. -// -// c) rename any non standard executables, units, and classes so -// the names do not conflict with standard executables, units, and -// classes, and provide a separate manual page that clearly documents -// how it differs from the standard version. -// -// d) make other distribution arrangements with the Copyright Holder. -// -// The name of the Copyright Holder may not be used to endorse or -// promote products derived from this Package without specific prior -// written permission. -// -// THE PACKAGE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// PACKAGE OR THE USE OR OTHER DEALINGS IN THE PACKAGE. - -{$HINTS OFF} - -interface -{$IFDEF FPC} -{$MODE DELPHI} -{$ENDIF} -uses - uROUnicodeConv, // This version of XDOM needs the Unicode Converter Library 2.x, - // available at "http://www.philo.de/xml/" - Math, SysUtils, Classes, variants; - -type - EDomException = class(Exception); - - EIndex_Size_Err = class(EdomException); - EDomstring_Size_Err = class(EdomException); - EHierarchy_Request_Err = class(EdomException); - EWrong_Document_Err = class(EdomException); - EInvalid_Character_Err = class(EdomException); - ENo_Data_Allowed_Err = class(EdomException); - ENo_Modification_Allowed_Err = class(EdomException); - ENot_Found_Err = class(EdomException); - ENot_Supported_Err = class(EdomException); - EInuse_Attribute_Err = class(EdomException); - EInvalid_State_Err = class(EdomException); - ESyntax_Err = class(EdomException); - EInvalid_Modification_Err = class(EdomException); - ENamespace_Err = class(EdomException); - EInvalid_Access_Err = class(EdomException); - EInuse_Node_Err = class(EdomException); - EInuse_Content_Model_Err = class(EdomException); - EInuse_AttributeDefinition_Err = class(EdomException); - ENo_External_Entity_Allowed_Err = class(EdomException); - EUnknown_Document_Format_Err = class(EdomException); - - EDomASException = class(EdomException); - EDuplicate_Name_Err = class(EDomASException); - ENo_AS_Available = class(EDomASException); - EType_Err = class(EDomASException); - EValidation_Err = class(EDomASException); - EWrong_MIME_Type_Err = class(EDomASException); - - EWrong_ASModel_Err = class(EDomASException); // xxx Replace this! - - EParserException = class(EdomException); - - EXPath_Exception = class(EdomException); - EXPath_Invalid_Expression_Err = class(EXPath_Exception); - EXPath_Type_Err = class(EXPath_Exception); - - - TXmlErrorType = ( - - // Remark: The order and number of this error types is perhaps going to - // change in future XDOM versions. So, if possible, do refer to - // error types by using the constants below, but avoid using - // their numerical equivalents! - - ET_NONE, // No Error - - ET_DOUBLE_ATTDEF, - ET_DOUBLE_ENTITY_DECL, - ET_DOUBLE_PARAMETER_ENTITY_DECL, - ET_UNUSABLE_ENTITY_DECL, - - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH, - ET_ATTRIBUTE_DEFINITION_NOT_FOUND, - ET_ATTRIBUTE_TYPE_MISMATCH, - ET_DUPLICATE_ELEMENT_TYPE_DECL, - ET_DUPLICATE_ENUMERATION_TOKEN, - ET_DUPLICATE_ID_ON_ELEMENT_TYPE, - ET_DUPLICATE_ID_VALUE, - ET_DUPLICATE_NAME_IN_MIXED_CONTENT, - ET_DUPLICATE_NOTATION_DECL, - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE, - ET_DUPLICATE_NOTATION_TOKEN, - ET_DUPLICATE_TOKENS, - ET_FIXED_ATTRIBUTE_MISMATCH, - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED, - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT, - ET_ELEMENT_TYPE_DECL_NOT_FOUND, - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT, - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT, - ET_ENTITY_DECL_NOT_FOUND, - ET_EXTERNAL_SUBSET_NOT_FOUND, - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL, - ET_NOTATION_ON_EMPTY_ELEMENT, - ET_PARAMETER_ENTITY_DECL_NOT_FOUND, - ET_REQUIRED_ATTRIBUTE_NOT_FOUND, - ET_TARGET_ID_VALUE_NOT_FOUND, - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND, - ET_UNDECLARED_NOTATION_NAME, - ET_UNRESOLVABLE_ENTITY_REFERENCE, - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE, - ET_WRONG_DECL_OF_PREDEFINED_ENTITY, - ET_WRONG_ROOT_ELEMENT_TYPE, - - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY, - ET_DOUBLE_ATTRIBUTE_NAME, - ET_DOUBLE_EQUALITY_SIGN, - ET_DOUBLE_ROOT_ELEMENT, - ET_INVALID_ATTRIBUTE_NAME, - ET_INVALID_ATTRIBUTE_VALUE, - ET_INVALID_CDATA_SECTION, - ET_INVALID_CHARACTER, - ET_INVALID_CHARREF, - ET_INVALID_COMMENT, - ET_INVALID_ELEMENT_NAME, - ET_INVALID_ENTITY_NAME, - ET_INVALID_PROCESSING_INSTRUCTION, - ET_INVALID_PUBID_LITERAL, - ET_INVALID_SYSTEM_LITERAL, - ET_INVALID_TEXT_DECL, - ET_INVALID_XML_DECL, - ET_LT_IN_ATTRIBUTE_VALUE, - ET_MISSING_END_TAG, - ET_MISSING_EQUALITY_SIGN, - ET_MISSING_QUOTATION_MARK, - ET_MISSING_START_TAG, - ET_MISSING_WHITE_SPACE, - ET_NOT_IN_ROOT, - ET_NO_PROPER_MARKUP_REFERENCED, - ET_RECURSIVE_REFERENCE, - ET_REFERENCE_TO_UNPARSED_ENTITY, - ET_WRONG_ORDER, - - ET_DOUBLE_DOCTYPE, - ET_INVALID_ATTRIBUTE_DECL, - ET_INVALID_CONDITIONAL_SECTION, - ET_INVALID_DOCTYPE, - ET_INVALID_ELEMENT_DECL, - ET_INVALID_ENTITY_DECL, - ET_INVALID_NOTATION_DECL, - ET_UNKNOWN_DECL_TYPE, - - ET_INVALID_NAMESPACE_URI, - ET_INVALID_PREFIX, - ET_INVALID_QUALIFIED_NAME, - ET_NAMESPACE_URI_NOT_FOUND, - ET_WRONG_PREFIX_MAPPING_NESTING, - - ET_ENCODING_NOT_SUPPORTED - ); - - TXmlErrorTypes = set of TXmlErrorType; - -const - ET_WARNINGS: TXmlErrorTypes = [ - ET_NONE, // Included in ET_WARNINGS to ease calculations. - ET_DOUBLE_ATTDEF, - ET_DOUBLE_ENTITY_DECL, - ET_DOUBLE_PARAMETER_ENTITY_DECL, - ET_UNUSABLE_ENTITY_DECL - ]; - - ET_ERRORS: TXmlErrorTypes = [ - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH, - ET_ATTRIBUTE_DEFINITION_NOT_FOUND, - ET_ATTRIBUTE_TYPE_MISMATCH, - ET_DUPLICATE_ELEMENT_TYPE_DECL, - ET_DUPLICATE_ENUMERATION_TOKEN, - ET_DUPLICATE_ID_ON_ELEMENT_TYPE, - ET_DUPLICATE_ID_VALUE, - ET_DUPLICATE_NAME_IN_MIXED_CONTENT, - ET_DUPLICATE_NOTATION_DECL, - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE, - ET_DUPLICATE_NOTATION_TOKEN, - ET_DUPLICATE_TOKENS, - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT, - ET_ELEMENT_TYPE_DECL_NOT_FOUND, - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT, - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT, - ET_ENTITY_DECL_NOT_FOUND, - ET_EXTERNAL_SUBSET_NOT_FOUND, - ET_FIXED_ATTRIBUTE_MISMATCH, - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED, - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL, - ET_NOTATION_ON_EMPTY_ELEMENT, - ET_PARAMETER_ENTITY_DECL_NOT_FOUND, - ET_REQUIRED_ATTRIBUTE_NOT_FOUND, - ET_TARGET_ID_VALUE_NOT_FOUND, - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND, - ET_UNDECLARED_NOTATION_NAME, - ET_UNRESOLVABLE_ENTITY_REFERENCE, - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE, - ET_WRONG_DECL_OF_PREDEFINED_ENTITY, - ET_WRONG_ROOT_ELEMENT_TYPE - ]; - - ET_FATAL_ERRORS: TXmlErrorTypes = [ - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY, - ET_DOUBLE_ATTRIBUTE_NAME, - ET_DOUBLE_EQUALITY_SIGN, - ET_DOUBLE_ROOT_ELEMENT, - ET_INVALID_ATTRIBUTE_NAME, - ET_INVALID_ATTRIBUTE_VALUE, - ET_INVALID_CDATA_SECTION, - ET_INVALID_CHARACTER, - ET_INVALID_CHARREF, - ET_INVALID_COMMENT, - ET_INVALID_ELEMENT_NAME, - ET_INVALID_ENTITY_NAME, - ET_INVALID_PROCESSING_INSTRUCTION, - ET_INVALID_PUBID_LITERAL, - ET_INVALID_SYSTEM_LITERAL, - ET_INVALID_TEXT_DECL, - ET_INVALID_XML_DECL, - ET_LT_IN_ATTRIBUTE_VALUE, - ET_MISSING_END_TAG, - ET_MISSING_EQUALITY_SIGN, - ET_MISSING_QUOTATION_MARK, - ET_MISSING_START_TAG, - ET_MISSING_WHITE_SPACE, - ET_NOT_IN_ROOT, - ET_NO_PROPER_MARKUP_REFERENCED, - ET_RECURSIVE_REFERENCE, - ET_REFERENCE_TO_UNPARSED_ENTITY, - ET_WRONG_ORDER, - - ET_DOUBLE_DOCTYPE, - ET_INVALID_ATTRIBUTE_DECL, - ET_INVALID_CONDITIONAL_SECTION, - ET_INVALID_DOCTYPE, - ET_INVALID_ELEMENT_DECL, - ET_INVALID_ENTITY_DECL, - ET_INVALID_NOTATION_DECL, - ET_UNKNOWN_DECL_TYPE, - - ET_INVALID_NAMESPACE_URI, - ET_INVALID_PREFIX, - ET_INVALID_QUALIFIED_NAME, - ET_NAMESPACE_URI_NOT_FOUND, - ET_WRONG_PREFIX_MAPPING_NESTING, - - ET_ENCODING_NOT_SUPPORTED - ]; - - ET_DOCTYPE_FATAL_ERRORS: TXmlErrorTypes = [ - ET_INVALID_DOCTYPE, - ET_DOUBLE_DOCTYPE, - ET_INVALID_ATTRIBUTE_DECL, - ET_INVALID_CONDITIONAL_SECTION, - ET_INVALID_ELEMENT_DECL, - ET_INVALID_ENTITY_DECL, - ET_INVALID_NOTATION_DECL, - ET_UNKNOWN_DECL_TYPE - ]; - - ET_NAMESPACE_FATAL_ERRORS: TXmlErrorTypes = [ - ET_INVALID_NAMESPACE_URI, - ET_INVALID_PREFIX, - ET_INVALID_QUALIFIED_NAME, - ET_NAMESPACE_URI_NOT_FOUND, - ET_WRONG_PREFIX_MAPPING_NESTING - ]; - -type - TIso639LanguageCode = ( iso639_aa, // Afar - iso639_ab, // Abkhazian - iso639_af, // Afrikaans - iso639_am, // Amharic - iso639_ar, // Arabic - iso639_as, // Assamese - iso639_ay, // Aymara - iso639_az, // Azerbaijani - - iso639_ba, // Bashkir - iso639_be, // Byelorussian - iso639_bg, // Bulgarian - iso639_bh, // Bihari - iso639_bi, // Bislama - iso639_bn, // Bengali; Bangla - iso639_bo, // Tibetan - iso639_br, // Breton - - iso639_ca, // Catalan - iso639_co, // Corsican - iso639_cs, // Czech - iso639_cy, // Welsh - - iso639_da, // Danish - iso639_de, // German - iso639_dz, // Bhutani - - iso639_el, // Greek - iso639_en, // English - iso639_eo, // Esperanto - iso639_es, // Spanish - iso639_et, // Estonian - iso639_eu, // Basque - - iso639_fa, // Persian - iso639_fi, // Finnish - iso639_fj, // Fiji - iso639_fo, // Faeroese - iso639_fr, // French - iso639_fy, // Frisian - - iso639_ga, // Irish - iso639_gd, // Scots Gaelic - iso639_gl, // Galician - iso639_gn, // Guarani - iso639_gu, // Gujarati - - iso639_ha, // Hausa - iso639_hi, // Hindi - iso639_hr, // Croatian - iso639_hu, // Hungarian - iso639_hy, // Armenian - - iso639_ia, // Interlingua - iso639_ie, // Interlingue - iso639_ik, // Inupiak - iso639_in, // Indonesian - iso639_is, // Icelandic - iso639_it, // Italian - iso639_iw, // Hebrew - - iso639_ja, // Japanese - iso639_ji, // Yiddish - iso639_jw, // Javanese - - iso639_ka, // Georgian - iso639_kk, // Kazakh - iso639_kl, // Greenlandic - iso639_km, // Cambodian - iso639_kn, // Kannada - iso639_ko, // Korean - iso639_ks, // Kashmiri - iso639_ku, // Kurdish - iso639_ky, // Kirghiz - - iso639_la, // Latin - iso639_ln, // Lingala - iso639_lo, // Laothian - iso639_lt, // Lithuanian - iso639_lv, // Latvian; Lettish - - iso639_mg, // Malagasy - iso639_mi, // Maori - iso639_mk, // Macedonian - iso639_ml, // Malayalam - iso639_mn, // Mongolian - iso639_mo, // Moldavian - iso639_mr, // Marathi - iso639_ms, // Malay - iso639_mt, // Maltese - iso639_my, // Burmese - - iso639_na, // Nauru - iso639_ne, // Nepali - iso639_nl, // Dutch - iso639_no, // Norwegian - - iso639_oc, // Occitan - iso639_om, // Afan; Oromo - iso639_or, // Oriya - - iso639_pa, // Punjabi - iso639_pl, // Polish - iso639_ps, // Pashto; Pushto - iso639_pt, // Portuguese - - iso639_qu, // Quechua - - iso639_rm, // Rhaeto-Romance - iso639_rn, // Kirundi - iso639_ro, // Romanian - iso639_ru, // Russian - iso639_rw, // Kinyarwanda - - iso639_sa, // Sanskrit - iso639_sd, // Sindhi - iso639_sg, // Sangro - iso639_sh, // Serbo-Croatian - iso639_si, // Singhalese - iso639_sk, // Slovak - iso639_sl, // Slovenian - iso639_sm, // Samoan - iso639_sn, // Shona - iso639_so, // Somali - iso639_sq, // Albanian - iso639_sr, // Serbian - iso639_ss, // Siswati - iso639_st, // Sesotho - iso639_su, // Sundanese - iso639_sv, // Swedish - iso639_sw, // Swahili - - iso639_ta, // Tamil - iso639_te, // Tegulu - iso639_tg, // Tajik - iso639_th, // Thai - iso639_ti, // Tigrinya - iso639_tk, // Turkmen - iso639_tl, // Tagalog - iso639_tn, // Setswana - iso639_to, // Tonga - iso639_tr, // Turkish - iso639_ts, // Tsonga - iso639_tt, // Tatar - iso639_tw, // Twi - - iso639_uk, // Ukrainian - iso639_ur, // Urdu - iso639_uz, // Uzbek - - iso639_vi, // Vietnamese - iso639_vo, // Volapuk - - iso639_wo, // Wolof - - iso639_xh, // Xhosa - - iso639_yo, // Yoruba - - iso639_zh, // Chinese - iso639_zu // Zulu - ); - - TIso639LanguageCodeSet = set of TIso639LanguageCode; - - TdomNodeType = (ntUnknown, - ntElement_Node, - ntAttribute_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntEntity_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node, - ntDocument_Type_Node, - ntDocument_Fragment_Node, - ntNotation_Node, - ntXPath_Namespace_Node); - - TdomWhatToShow = set of TdomNodeType; - -const - SHOW_ALL: TdomWhatToShow = [ntElement_Node .. High(TDomNodeType)]; - AS_UNBOUND = High(integer); - -type - TdomXPathResultType = ( XPATH_BOOLEAN_TYPE, - XPATH_NODE_SNAPSHOT_TYPE, - XPATH_NUMBER_TYPE, - XPATH_STRING_TYPE - ); - - TdomXPathResultTypes = set of TdomXPathResultType; - -const - XPATH_ANY_TYPE: TdomXPathResultTypes = [XPATH_BOOLEAN_TYPE .. High(TdomXPathResultType)]; - -type - TdomNodeTypeSet = set of TdomNodeType; - - TdomPieceType = (xmlProcessingInstruction,xmlXmlDeclaration, // xxx xmlXmlDeclaration necessary? - xmlTextDeclaration,xmlComment,xmlCDATA,xmlPCDATA, // xxx xmlTextDeclaration necessary? - xmlDoctype,xmlStartTag,xmlEndTag,xmlEmptyElementTag, - xmlCharRef,xmlEntityRef,xmlParameterEntityRef, - xmlEntityDecl,xmlElementDecl,xmlAttributeDecl, - xmlNotationDecl,xmlCondSection,xmlUnknown); - - TdomTreePosition = set of ( Tree_Position_Ancestor, - Tree_Position_Descendant, - Tree_Position_Disconnected, - Tree_Position_Equivalent, - Tree_Position_Following, - Tree_Position_Preceding, - Tree_Position_Same_Node ); - - TdomEntityResolveOption = (erReplace,erExpand); - - TdomContentspecType = (ctEmpty,ctAny,ctMixed,ctChildren); - - TdomEntityType = (etExternal_Entity,etInternal_Entity); - - TdomFilterResult = (filter_accept,filter_reject,filter_skip); - - TdomFilenameToUriOptions = set of (fuSetLocalhost,fuPlainColon); - - TdomNode = class; - TdomAttr = class; - TdomElement = class; - TdomDocument = class; - TdomDocumentType = class; - TdomEntity = class; - TdomNotation = class; - TdomNodeList = class; - - TdomAbstractView = class; - - TdomMediaList = class; - - TXmlSourceCodePiece = class; - - TdomDocumentClass = class of TdomDocument; - - PdomDocumentFormat = ^TdomDocumentFormat; - - TdomDocumentFormat = record - DocumentClass: TdomDocumentClass; - NamespaceUri: wideString; - QualifiedName: wideString; - next: PdomDocumentFormat; - end; - - TdomWideStringItem = record - FString: WideString; - FObject: TObject; - end; - - PdomWideStringItemList = ^TdomWideStringItemList; - TdomWideStringItemList = array[0..MaxListSize] of TdomWideStringItem; - - TdomWideStringList = class(TPersistent) - private - FCapacity: integer; - FCount: integer; - FDuplicates: TDuplicates; - FList: PdomWideStringItemList; - FSorted: boolean; - FUpdateCount: integer; - FOnChange: TNotifyEvent; - FOnChanging: TNotifyEvent; - procedure exchangeItems(index1, - index2: integer); - procedure grow; - procedure insertItem(index: integer; - const s: wideString; - AObject: TObject); - procedure quickSort(l, - r: integer); - procedure setSorted(const value: boolean); - protected - procedure changed; virtual; - procedure changing; virtual; - procedure error(const msg: string; - data: integer); - function get(index: integer): WideString; virtual; - function getCapacity: integer; virtual; - function getCount: integer; virtual; - function getObject(index: integer): TObject; virtual; - procedure put(index: integer; - const s: wideString); virtual; - procedure putObject(index: integer; - aObject: TObject); virtual; - procedure setCapacity(newCapacity: integer); virtual; - procedure setUpdateState(updating: boolean); virtual; - public - destructor destroy; override; - function add(s: wideString): integer; virtual; - function addObject(s: wideString; AObject: TObject): integer; virtual; - procedure addWideStrings(strings: TdomWideStringList); virtual; - procedure append(s: wideString); virtual; - procedure assign(source: TPersistent); override; - procedure beginUpdate; virtual; - procedure clear; virtual; - procedure Delete(index: integer); virtual; - procedure endUpdate; virtual; - procedure exchange(index1, index2: integer); virtual; - function find(const s: wideString; - var index: integer): boolean; virtual; - function indexOf(const s: wideString): integer; virtual; - procedure insert(index: integer; const s: wideString); virtual; - procedure insertObject(index: integer; const s: wideString; AObject: TObject); virtual; - procedure sort; virtual; - property capacity: integer read getCapacity write setCapacity; - property count: integer read getCount; - property duplicates: TDuplicates read FDuplicates write FDuplicates; - property objects[index: integer]: TObject read getObject write putObject; - property sorted: boolean read FSorted write setSorted; - property wideStrings[index: integer]: wideString read get write put; default; - property OnChange: TNotifyEvent read FOnChange write FOnChange; - property OnChanging: TNotifyEvent read FOnChanging write FOnChanging; - end; - - TdomNameValueList = class(TPersistent) - private - FNames: TdomWideStringList; - FValues: TdomWideStringList; - procedure error(const msg: string; - data: integer); - function getLength: integer; virtual; - function getCapacity: integer; virtual; - function getDuplicates: TDuplicates; - function getName(index: integer): wideString; virtual; - function getObject(index: integer): TObject; virtual; - function getValue(index: integer): wideString; virtual; - procedure putObject(index: integer; - aObject: TObject); virtual; - procedure setCapacity(const value: integer); virtual; - procedure setDuplicates(const value: TDuplicates); - procedure setSorted(const Value: boolean); - function getSorted: boolean; - public - constructor create; - destructor destroy; override; - function add(const name, - value: wideString): integer; virtual; - function addObject(const name, - value: wideString; - AObject: TObject): integer; virtual; - procedure addNameValueList(const nvl: TdomNameValueList); virtual; - procedure assign(source: TPersistent); override; - procedure clear; virtual; - procedure Delete(const index: integer); virtual; - procedure exchange(const index1, - index2: integer); virtual; - function indexOf(const name, - value: wideString): integer; virtual; - function indexOfName(const name: wideString): integer; virtual; - procedure insert(const index: integer; - const name, - value: wideString); virtual; - function find(const name, - value: wideString; - var index: integer): boolean; virtual; - function findOfName(const name: wideString; - var index: integer): boolean; virtual; - procedure sort; virtual; - property capacity: integer read getCapacity write setCapacity; - property duplicates: TDuplicates read getDuplicates write setDuplicates; - property length: integer read getLength; - property names[index: integer]: wideString read getName; - property objects[index: integer]: TObject read getObject write putObject; - property sorted: boolean read getSorted write setSorted; - property values[index: integer]: wideString read getValue; - end; - - TdomNameValueTree = class(TdomNameValueList) - private - FParentTree: TdomNameValueTree; - function getChild(index: integer): TdomNameValueTree; - public - destructor Destroy; override; - function addChild(const name, - value: wideString; - const child: TdomNameValueTree): integer; virtual; - function addChildObject(const name, - value: wideString; - const child: TdomNameValueTree; - const AObject: TObject): integer; virtual; - procedure assign(source: TPersistent); override; - procedure clear; override; - procedure Delete(const index: integer); override; - function hasChild(const index: integer): boolean; virtual; - function indexOfChild(const child: TdomNameValueTree): integer; virtual; - procedure insertChild(const index: integer; - const name, - value: wideString; - const child: TdomNameValueTree); virtual; - function isDescendantOf(const nvtree: TdomNameValueTree): boolean; virtual; - function replaceChild(const index: integer; - const newChild: TdomNameValueTree): TdomNameValueTree; virtual; - property children[index: integer]: TdomNameValueTree read getChild; - property parentTree: TdomNameValueTree read FParentTree; - end; - - TdomCustomStr = class - private - FActualLen: integer; - FCapacity: integer; - FContent: wideString; - protected - function getWideChars(indx: integer): wideChar; virtual; - procedure setWideChars(indx: integer; - ch: wideChar); virtual; - public - constructor create; - procedure addWideChar(const ch: wideChar); virtual; - procedure addWideString(const s: wideString); virtual; - function endsWith(const s: wideString): boolean; virtual; - function isEqual(const s: wideString): boolean; virtual; - procedure reset; virtual; // xxx rename this into 'clear'? - function startsWith(const s: wideString): boolean; virtual; - function value: wideString; virtual; - // Since calling the value function involves time - // consuming string copying, always use one of the - // other TdomCustomStr access functions, if possible, - // e.g. wideChars[index] instead of value[index], - // isEqual[s] instead of (value = s), or - // length instead of length(value). - property length: integer read FActualLen; - property wideChars[indx: integer]: wideChar read getWideChars write setWideChars; default; - end; - - TdomWideStringStream = class(TStream) - private - FDataStringP: PChar; - FSize: longint; - FCapacity: longint; - FPosition: longint; - protected - procedure setCapacity(newCapacity: longint); virtual; - procedure setSize(newSize: longint); override; - procedure setStringPosition(value: longint); - function getStringPosition: longint; - procedure setStringLength(value: longint); - function getStringLength: longint; - function getDataString: wideString; - public - constructor createFromString(const aString: wideString); - destructor destroy; override; - function read(var buffer; count: longint): longint; override; - function readString(count: longint): wideString; - function seek(offset: longint; origin: word): longint; override; - function write(const buffer; count: longint): longint; override; - procedure writeString(const aString: wideString); - property capacity: longint read FCapacity write setCapacity; - property stringLength: longint read getStringLength write setStringLength; - property stringPosition: longint read getStringPosition write setStringPosition; - property dataString: wideString read getDataString; - end; - - TIso639Info = class(TPersistent) - private - function codeToName_en(value: TIso639LanguageCode): wideString; - function nameToCode_en(value: wideString): TIso639LanguageCode; - protected - FAppendSymbolToName: boolean; - FNameLanguage: TIso639LanguageCode; - FSupportedLanguages: TIso639LanguageCodeSet; - procedure assignTo(dest: TPersistent); override; - procedure setNameLanguage(const value: TIso639LanguageCode); virtual; - public - constructor create; - function codeToName(const value: TIso639LanguageCode): wideString; virtual; - function codeToSymbol(const value: TIso639LanguageCode): wideString; virtual; - function nameToCode(const value: wideString): TIso639LanguageCode; virtual; - function symbolToCode(const value: wideString): TIso639LanguageCode; virtual; - property appendSymbolToName: boolean read FAppendSymbolToName write FAppendSymbolToName default false; - property nameLanguage: TIso639LanguageCode read FNameLanguage write setNameLanguage default iso639_en; - property supportedLanguages: TIso639LanguageCodeSet read FSupportedLanguages; - end; - - TdomCMNodeList = class; - TdomCMObject = class; - TdomCMEntity = class; - TdomCMExternalObject = class; - TdomCMInternalObject = class; - TdomError = class; - TdomXPathExpression = class; - TdomXPathNSResolver = class; - TdomXPathResult = class; - TdomXPathSnapshotResult = class; - - TXmlParserAction = (paFail,paRetry,paOK); - - TdomNewLineType = (nltCRLF,ntlCR,ntlLF); - - TdomAttrChange = ( AC_ADDITION, - AC_MODIFICATION, - AC_REMOVAL); - - TdomAttrModifiedDocEvent = procedure(sender: TObject; - modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr) of object; - - TdomAttrModifiedEvent = procedure(sender: TObject; - modifiedNode: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr) of object; - - TdomCharacterDataModifiedDocEvent = procedure(sender: TObject; - modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - prevValue, - newValue: wideString) of object; - - TdomCharacterDataModifiedEvent = procedure(sender: TObject; - modifiedNode: TdomNode; - prevValue, - newValue: wideString) of object; - - TdomNodeModifiedDocEvent = procedure(sender: TObject; - modifiedDoc: TdomDocument; - modifiedNode: TdomNode) of object; - - TdomNodeModifiedEvent = procedure(sender: TObject; - modifiedNode: TdomNode) of object; - - TXmlParserEvent = procedure( sender: TObject; - const parentSystemId: wideString; - var publicId, - systemId: wideString; - var stream: TStream; - var action: TXmlParserAction) of object; - - TdomErrorEvent = procedure( sender: TObject; - error: TdomError; - var go: boolean) of object; - - TDomImplementation = class (TComponent) - private - FOnError: TdomErrorEvent; - FOnExternalParsedEntity: TXmlParserEvent; - FOnAttrModified: TdomAttrModifiedDocEvent; - FOnCharacterDataModified: TdomCharacterDataModifiedDocEvent; - FOnNodeRemoved: TdomNodeModifiedDocEvent; - FOnNodeInserted: TdomNodeModifiedDocEvent; - protected - FCreatedCMExternalObjects: TdomCMNodeList; - FCreatedCMInternalObjects: TdomCMNodeList; - FCreatedCMObjects: TdomCMNodeList; - FCreatedDocuments: TdomNodeList; - FCreatedDocumentTypes: TdomNodeList; - FCreatedCMExternalObjectsListing: TList; - FCreatedCMInternalObjectsListing: TList; - FCreatedCMObjectsListing: TList; - FCreatedDocumentsListing: TList; - FCreatedDocumentTypesListing: TList; - procedure doAttrModified(modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); virtual; - procedure doCharacterDataModified(modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - prevValue, - newValue: wideString); virtual; - procedure doError( sender: TObject; - error: TdomError; - var go: boolean); virtual; - procedure doExternalParsedEntity( parentSystemId: wideString; - var publicId, - systemId: wideString; - var stream: TStream; - var action: TXmlParserAction); virtual; - procedure doNodeInserted(modifiedDoc: TdomDocument; - modifiedNode: TdomNode); virtual; - procedure doNodeRemoved(modifiedDoc: TdomDocument; - modifiedNode: TdomNode); virtual; - function getCMExternalObjects: TdomCMNodeList; virtual; - function getCMInternalObjects: TdomCMNodeList; virtual; - function getCMObjects: TdomCMNodeList; virtual; - function getDocuments: TdomNodeList; virtual; - function getDocumentTypes: TdomNodeList; virtual; - function getXdomVersion: wideString; virtual; - public - constructor create(aOwner: TComponent); override; - destructor destroy; override; - procedure clear; virtual; - function createCMExternalObject(const pubId, - sysId: wideString): TdomCMExternalObject; virtual; - function createCMInternalObject(const pubId, - sysId: wideString): TdomCMInternalObject; virtual; - function createCMObject(const sysId: wideString): TdomCMObject; virtual; - function createDocument(const aname: wideString; - doctype: TdomDocumentType): TdomDocument; virtual; - function createDocumentNS(const namespaceURI, - qualifiedName: wideString; - doctype: TdomDocumentType): TdomDocument; virtual; - -{ - The following two methods have been removed from this version of - the XDOM, but will be reintroduced in a future release. - - function createDocumentType(const name, - publicId, - systemId, - intSubset: wideString): TdomDocumentType; virtual; - function createDocumentTypeNS(const qualifiedName, - publicId, - systemId, - intSubset: wideString): TdomDocumentType; virtual; -} - - procedure freeCMExternalObject(var arg: TdomCMExternalObject); virtual; - procedure freeCMInternalObject(var arg: TdomCMInternalObject); virtual; - procedure freeCMObject(var arg: TdomCMObject); virtual; - procedure freeDocument(var doc: TdomDocument); virtual; - procedure freeDocumentType(var docType: TdomDocumentType); virtual; - function hasFeature(const feature, - version: wideString): boolean; virtual; - function getDocumentClass(const aNamespaceUri, - aQualifiedName: wideString): TdomDocumentClass; virtual; - function handleError(const sender: TObject; - const error: TdomError): boolean; virtual; - class procedure registerDocumentFormat(const aNamespaceUri, - aQualifiedName: wideString; - aDocumentClass: TdomDocumentClass); virtual; - function supportsDocumentFormat(const aNamespaceUri, - aQualifiedName: wideString): boolean; virtual; - class procedure unregisterDocumentClass(const aDocumentClass: TdomDocumentClass); virtual; - property cmExternalObjects: TdomCMNodeList read getCMExternalObjects; - property cmInternalObjects: TdomCMNodeList read getCMInternalObjects; - property cmObjects: TdomCMNodeList read getCMObjects; - property documents: TdomNodeList read getDocuments; - property documentTypes: TdomNodeList read getDocumentTypes; - property xdomVersion: wideString read getXdomVersion; - published - property OnAttrModified: TdomAttrModifiedDocEvent read FOnAttrModified write FOnAttrModified; - property OnCharacterDataModified: TdomCharacterDataModifiedDocEvent read FOnCharacterDataModified write FOnCharacterDataModified; - property OnError: TdomErrorEvent read FOnError write FOnError; - property OnExternalParsedEntity: TXmlParserEvent read FOnExternalParsedEntity write FOnExternalParsedEntity; - property OnNodeInserted: TdomNodeModifiedDocEvent read FOnNodeInserted write FOnNodeInserted; - property OnNodeRemoved: TdomNodeModifiedDocEvent read FOnNodeRemoved write FOnNodeRemoved; - end; - - TdomNodeFilter = class - public - function acceptNode(const n: TdomNode): TdomFilterResult; virtual; abstract; - end; - - TdomTreeWalker = class - private - FCurrentNode: TdomNode; - FExpandEntityReferences: boolean; - FFilter: TdomNodeFilter; - FRoot: TdomNode; - FWhatToShow: TdomWhatToShow; - protected - function findFirstChild(const oldNode: TdomNode): TdomNode; virtual; - function findLastChild(const oldNode: TdomNode): TdomNode; virtual; - function findNextNode(oldNode: TdomNode): TdomNode; virtual; - function findNextSibling(const oldNode: TdomNode): TdomNode; virtual; - function findParentNode(const oldNode: TdomNode): TdomNode; virtual; - function findPreviousNode(const oldNode: TdomNode): TdomNode; virtual; - function findPreviousSibling(const oldNode: TdomNode): TdomNode; virtual; - procedure setCurrentNode(const node: TdomNode); virtual; - procedure setExpandEntityReferences(const value: boolean); virtual; // Derived classes can move this method to the public section to allow write access. - procedure setFilter(const value: TdomNodeFilter); virtual; // Derived classes can move this method to the public section to allow write access. - procedure setRoot(const node: TdomNode); virtual; // Derived classes can move this method to the public section to allow write access. - procedure setWhatToShow(const value: TdomWhatToShow); virtual; // Derived classes can move this method to the public section to allow write access. - public - constructor create(const root: TdomNode; - const whatToShow: TdomWhatToShow; - const nodeFilter: TdomNodeFilter; - const entityReferenceExpansion: boolean); virtual; - function parentNode: TdomNode; virtual; - function firstChild: TdomNode; virtual; - function lastChild: TdomNode; virtual; - function previousSibling: TdomNode; virtual; - function nextSibling: TdomNode; virtual; - function nextNode: TdomNode; virtual; - function previousNode: TdomNode; virtual; - property currentNode: TdomNode read FCurrentNode write setCurrentNode; - property expandEntityReferences: boolean read FExpandEntityReferences; - property filter: TdomNodeFilter read FFilter; - property root: TdomNode read FRoot; - property whatToShow: TdomWhatToShow read FWhatToShow; - end; - - TdomPosition = (posBefore,posAfter); - - TdomNodeIterator = class - private - FRoot: TdomNode; - FReferenceNode: TdomNode; - FPosition: TdomPosition; // Position of the Iterator relativ to FReferenceNode - FWhatToShow: TdomWhatToShow; - FExpandEntityReferences: boolean; - FFilter: TdomNodeFilter; - FInvalid: boolean; - protected - procedure findNewReferenceNode(const nodeToRemove: TdomNode); virtual; // To be called if the current FReferenceNode is being removed - function findNextNode(oldNode: TdomNode): TdomNode; virtual; - function findPreviousNode(const oldNode: TdomNode): TdomNode; virtual; - public - constructor create(const root: TdomNode; - const whatToShow: TdomWhatToShow; - const nodeFilter: TdomNodeFilter; - const entityReferenceExpansion: boolean); virtual; - procedure detach; virtual; - function nextNode: TdomNode; virtual; - function previousNode: TdomNode; virtual; - property expandEntityReferences: boolean read FExpandEntityReferences; - property filter: TdomNodeFilter read FFilter; - property root: TdomNode read FRoot; - property whatToShow: TdomWhatToShow read FWhatToShow; - end; - - TdomNodeList = class - private - FNodeList: TList; - protected - function getLength: integer; virtual; - function indexOf(const node: TdomNode): integer; virtual; - public - constructor create(const nodeList: TList); - function item(const index: integer): TdomNode; virtual; - property length: integer read getLength; - end; - - TdomElementsNodeList = class(TdomNodeList) - private - FQueryName: wideString; - FStartElement: TdomNode; - protected - function getLength: integer; override; - public - function indexOf(const node: TdomNode): integer; override; - function item(const index: integer): TdomNode; override; - constructor create(const queryName: wideString; - const startElement: TdomNode); virtual; - end; - - TdomElementsNodeListNS = class(TdomNodeList) - private - FQueryNamespaceURI: wideString; - FQueryLocalName: wideString; - FStartElement: TdomNode; - protected - function getLength: integer; override; - public - function indexOf(const node: TdomNode): integer; override; - function item(const index: integer): TdomNode; override; - constructor create(const queryNamespaceURI, - queryLocalName: wideString; - const startElement: TdomNode); virtual; - end; - - TdomSpecialNodeList = class(TdomNodeList) - protected - FAllowedNodeTypes: TDomNodeTypeSet; - function getLength: integer; override; - function getNamedIndex(const name: wideString): integer; virtual; - function getNamedItem(const name: wideString): TdomNode; virtual; - public - constructor create(const nodeList: TList; - const allowedNTs: TDomNodeTypeSet); virtual; - function indexOf(const node: TdomNode): integer; override; - function item(const index: integer): TdomNode; override; - end; - - TdomNamedNodeMap = class(TdomNodeList) - private - FIsReadonly: boolean; - FNamespaceAware: boolean; - FOwner: TdomNode; // The owner document. - FOwnerNode: TdomNode; // The node to which the map is attached to. - function getNamespaceAware: boolean; virtual; - function getOwnerNode: TdomNode; virtual; - procedure setNamespaceAware(const value: boolean); virtual; - protected - FAllowedNodeTypes: TDomNodeTypeSet; - function getNamedIndex(const name: wideString): integer; virtual; - function removeItem(const arg: TdomNode): TdomNode; virtual; - procedure setIsReadonly(const value: boolean); virtual; - public - constructor create(const aOwner, - aOwnerNode: TdomNode; - const nodeList: TList; - const allowedNTs: TDomNodeTypeSet); virtual; - function getNamedItem(const name: wideString): TdomNode; virtual; - function getNamedItemNS(const namespaceURI, - localName: wideString): TdomNode; virtual; - function removeNamedItem(const name: wideString): TdomNode; virtual; - function removeNamedItemNS(const namespaceURI, - localName: wideString): TdomNode; virtual; - function setNamedItem(const arg: TdomNode): TdomNode; virtual; - function setNamedItemNS(const arg: TdomNode): TdomNode; virtual; - property isReadonly: boolean read FIsReadonly; - property namespaceAware: boolean read getNamespaceAware write setNamespaceAware default false; - property ownerNode: TdomNode read getOwnerNode; - end; - - TdomLocator = class; - - TdomNode = class - private - FNodeName: wideString; - FNodeValue: wideString; - FNodeType: TdomNodeType; - FNodeList: TdomNodeList; - FNodeListing: TList; - FDocument: TdomDocument; - FParentNode: TdomNode; - FIsNamespaceNode: boolean; - FIsReadonly: boolean; - - FOnAttrModified: TdomAttrModifiedEvent; - FOnCharacterDataModified: TdomCharacterDataModifiedEvent; - FOnNodeInserted: TdomNodeModifiedEvent; - FOnNodeInsertedIntoDocument: TdomNodeModifiedEvent; - FOnNodeRemoved: TdomNodeModifiedEvent; - FOnNodeRemovedFromDocument: TdomNodeModifiedEvent; - - procedure makeChildrenReadonly; virtual; - function refersToExternalEntity: boolean; virtual; - function hasEntRef(const entName: widestring): boolean; virtual; - protected - FAllowedChildTypes: set of TDomNodeType; - FLocalName: wideString; - FNamespaceURI: wideString; - FPrefix: wideString; - procedure doAttrModified(originalTarget: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); virtual; - procedure doCharacterDataModified(originalTarget: TdomNode; - prevValue, - newValue: wideString); virtual; - procedure doNodeInserted(originalTarget: TdomNode); virtual; - procedure doNodeInsertedIntoDocument(originalTarget: TdomNode); virtual; - procedure doNodeRemoved(originalTarget: TdomNode); virtual; - procedure doNodeRemovedFromDocument(originalTarget: TdomNode); virtual; - function getAttributes: TdomNamedNodeMap; virtual; - function getBaseUri: wideString; virtual; - function getChildNodes: TdomNodeList; virtual; - function getDocument: TdomDocument; virtual; - function getFirstChild: TdomNode; virtual; - function getNextSibling: TdomNode; virtual; - function getNodeName: wideString; virtual; - function getNodeValue: wideString; virtual; - function getNodeType: TdomNodeType; virtual; - function getLastChild: TdomNode; virtual; - function getParentNode: TdomNode; virtual; - function getPreviousSibling: TdomNode; virtual; - function getTextContent: wideString; virtual; - function getXPathStringValue: wideString; virtual; - function sendErrorNotification(const xmlErrorType: TXmlErrorType; - const relNode: TdomNode): boolean; virtual; - procedure setIsReadonly(const value: boolean); virtual; - procedure setNodeValue(const value: wideString); virtual; - procedure setPrefix(const value: wideString); virtual; - function validate2: boolean; virtual; - function validateIDREFS: boolean; virtual; - public - constructor create(const aOwner: TdomDocument); - destructor destroy; override; - function appendChild(const newChild: TdomNode): TdomNode; virtual; - procedure clear; virtual; - function cloneNode(const deep: boolean): TdomNode; virtual; - function compareTreePosition(const other: TdomNode): TdomTreePosition; virtual; - function evaluate(const expression: wideString): TdomXPathResult; virtual; - function findFirstChildElement: TdomElement; virtual; - function findLastChildElement: TdomElement; virtual; - function findNextSiblingElement: TdomElement; virtual; - function findParentElement: TdomElement; virtual; - function findPreviousSiblingElement: TdomElement; virtual; - function getFirstChildElement(const name: wideString): TdomElement; virtual; - function getFirstChildElementNS(const namespaceURI, - localName: wideString): TdomElement; virtual; - function getLastChildElement(const name: wideString): TdomElement; virtual; - function getLastChildElementNS(const namespaceURI, - localName: wideString): TdomElement; virtual; - function getNextSiblingElement(const name: wideString): TdomElement; virtual; - function getNextSiblingElementNS(const namespaceURI, - localName: wideString): TdomElement; virtual; - function getParentElement(const name: wideString): TdomElement; virtual; - function getParentElementNS(const namespaceURI, - localName: wideString): TdomElement; virtual; - function getPreviousSiblingElement(const name: wideString): TdomElement; virtual; - function getPreviousSiblingElementNS(const namespaceURI, - localName: wideString): TdomElement; virtual; - function hasChildNodes: boolean; virtual; - function insertBefore(const newChild, - refChild: TdomNode): TdomNode; virtual; - function isAncestor(const AncestorNode: TdomNode): boolean; virtual; - procedure normalize; virtual; - function removeChild(const oldChild: TdomNode): TdomNode; virtual; - function replaceChild(const newChild, - oldChild: TdomNode): TdomNode; virtual; - function resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; virtual; - function supports(const feature, - version: wideString): boolean; virtual; - property attributes: TdomNamedNodeMap read getAttributes; - property baseUri: wideString read getBaseUri; - property childNodes: TdomNodeList read getChildNodes; - property firstChild: TdomNode read getFirstChild; - property isNamespaceNode: boolean read FIsNamespaceNode; - property isReadonly: boolean read FIsReadonly; - property lastChild: TdomNode read getLastChild; - property localName: wideString read FLocalName; - property namespaceURI: wideString read FNamespaceURI; - property nextSibling: TdomNode read getNextSibling; - property nodeName: wideString read getNodeName; - property nodeType: TdomNodeType read getNodeType; - property nodeValue: wideString read getNodeValue write setNodeValue; - property ownerDocument: TdomDocument read getDocument; - property parentNode: TdomNode read getParentNode; - property previousSibling: TdomNode read getPreviousSibling; - property prefix: wideString read FPrefix write setPrefix; - property textContent: wideString read getTextContent; - property XPathStringValue: wideString read getXPathStringValue; - - property onAttrModified: TdomAttrModifiedEvent read FOnAttrModified write FOnAttrModified; - property onCharacterDataModified: TdomCharacterDataModifiedEvent read FOnCharacterDataModified write FOnCharacterDataModified; - property onNodeInserted: TdomNodeModifiedEvent read FOnNodeInserted write FOnNodeInserted; - property onNodeInsertedIntoDocument: TdomNodeModifiedEvent read FOnNodeInsertedIntoDocument write FOnNodeInsertedIntoDocument; - property onNodeRemoved: TdomNodeModifiedEvent read FOnNodeRemoved write FOnNodeRemoved; - property onNodeRemovedFromDocument: TdomNodeModifiedEvent read FOnNodeRemovedFromDocument write FOnNodeRemovedFromDocument; - end; - - TdomCharacterData = class (TdomNode) - private - function getData: wideString; virtual; - procedure setData(const Value: wideString); virtual; - function getLength: integer; virtual; - public - constructor create(const aOwner: TdomDocument); virtual; - function substringData(const offset, - count: integer): wideString; virtual; - procedure appendData(const arg: wideString); virtual; - procedure insertData(const offset: integer; - const arg: wideString); virtual; - procedure deleteData(const offset, - count: integer); virtual; - procedure replaceData(const offset, - count: integer; - const arg: wideString); virtual; - property data: wideString read getData write setData; - property length: integer read getLength; - end; - - TdomAttr = class (TdomNode) - private - FOwnerElement: TdomElement; - FSpecified: boolean; - protected - function getLiteralValue: wideString; virtual; - function getName: wideString; virtual; - function getNextSibling: TdomNode; override; - function getNodeValue: wideString; override; - function getOwnerElement: TdomElement; virtual; - function getParentNode: TdomNode; override; - function getPreviousSibling: TdomNode; override; - function getSpecified: boolean; virtual; - function getValue: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - procedure setValue(const value: wideString); virtual; - function validate2: boolean; override; - function validateIDREFS: boolean; override; - public - constructor create(const aOwner: TdomDocument; - const name: wideString; - const spcfd: boolean); - constructor createNS(const aOwner: TdomDocument; - const anamespaceURI, - qualifiedName: wideString; - const spcfd: boolean); - procedure normalize; override; - function resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; override; - property literalValue: wideString read getLiteralValue; - property name: wideString read getName; - property ownerElement: TdomElement read getOwnerElement; - property specified: boolean read getSpecified; - property value: wideString read getValue write setValue; - end; - - TdomElement = class (TdomNode) - private - FCreatedElementsNodeLists: TList; - FCreatedElementsNodeListNSs: TList; - FAttributeListing: TList; - FAttributeList: TdomNamedNodeMap; - protected - procedure setIsReadonly(const value: boolean); override; - procedure setNodeValue(const value: wideString); override; - function validate2: boolean; override; - function validateIDREFS: boolean; override; - public - constructor create(const aOwner: TdomDocument; - const tagName: wideString); - constructor createNS(const aOwner: TdomDocument; - const anamespaceURI, - qualifiedName: wideString); - destructor destroy; override; - function getTagName: wideString; virtual; - function getAttributes: TdomNamedNodeMap; override; - function getAttribute(const name: wideString): wideString; virtual; - function setAttribute(const name, - value: wideString): TdomAttr; virtual; - function removeAttribute(const name: wideString): TdomAttr; virtual; - function getAttributeNode(const name: wideString): TdomAttr; virtual; - function setAttributeNode(const newAttr: TdomAttr): TdomAttr; virtual; - function removeAttributeNode(const oldAttr: TdomAttr): TdomAttr; virtual; - function resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; override; - function getElementsByTagName(const name: wideString): TdomNodeList; virtual; - function getAttributeNS(const anamespaceURI, - alocalName: wideString): wideString; virtual; - function setAttributeNS(const anamespaceURI, - qualifiedName, - value: wideString): TdomAttr; virtual; - function removeAttributeNS(const anamespaceURI, - alocalName: wideString): TdomAttr; virtual; - function getAttributeNodeNS(const anamespaceURI, - alocalName: wideString): TdomAttr; virtual; - function setAttributeNodeNS(const newAttr: TdomAttr): TdomAttr; virtual; - function getElementsByTagNameNS(const anamespaceURI, - alocalName: wideString): TdomNodeList; virtual; - function hasAttribute(const aname: wideString): boolean; virtual; - function hasAttributeNS(const anamespaceURI, - alocalName: wideString): boolean; virtual; - procedure normalize; override; - property tagName: wideString read getTagName; - end; - - TdomText = class (TdomCharacterData) - protected - function getIsWhitespaceInElementContent: boolean; virtual; - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument); override; - function splitText(const offset: integer): TdomText; virtual; - property isWhitespaceInElementContent: boolean read getIsWhitespaceInElementContent; - end; - - TdomComment = class (TdomCharacterData) - protected - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument); override; - end; - - TdomProcessingInstruction = class (TdomNode) - private - function getTarget: wideString; virtual; - function getData: wideString; virtual; - procedure setData(const value: wideString); virtual; - protected - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument; - const targ: wideString); virtual; - property target: wideString read getTarget; - property data: wideString read getData write setData; - end; - - TdomCDATASection = class (TdomText) - protected - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument); override; - end; - - TdomDocumentType = class (TdomNode) - private - FInternalSubset: wideString; - FPublicId: wideString; - FSystemId: wideString; - FEntitiesListing: TList; - FEntitiesList: TdomNamedNodeMap; - FNotationsListing: TList; - FNotationsList: TdomNamedNodeMap; - protected - function getEntities: TdomNamedNodeMap; virtual; - function getInternalSubset: wideString; virtual; - function getName: wideString; virtual; - function getNotations: TdomNamedNodeMap; virtual; - function getPublicId: wideString; virtual; - function getSystemId: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument; - const name, - pubId, - sysId, - intSubset: wideString); virtual; - destructor destroy; override; - property entities: TdomNamedNodeMap read getEntities; - property internalSubset: wideString read getInternalSubset; - property name: wideString read getName; - property notations: TdomNamedNodeMap read getNotations; - property publicId: wideString read getPublicId; - property systemId: wideString read getSystemId; - end; - - TdomNotation = class (TdomNode) - private - FPublicId: wideString; - FSystemId: wideString; - protected - function getPublicId: wideString; virtual; - function getSystemId: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - public - constructor create(const aOwner: TdomDocument; - const name, - pubId, - sysId: wideString); virtual; - property publicId: wideString read getPublicId; - property systemId: wideString read getSystemId; - end; - - TdomEntity = class (TdomNode) - private - FEncoding: wideString; - FNotationName: wideString; - FPublicId: wideString; - FSystemId: wideString; - FVersion: wideString; - protected - function getNotationName: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - public - constructor create(const aOwner: TdomDocument; - const name, - pubId, - sysId, - notaName: wideString); virtual; - function insertBefore(const newChild, - refChild: TdomNode): TdomNode; override; - function replaceChild(const newChild, - oldChild: TdomNode): TdomNode; override; - function appendChild(const newChild: TdomNode): TdomNode; override; - property encoding: wideString read FEncoding write FEncoding; - property notationName: wideString read getNotationName; - property publicId: wideString read FPublicId; - property systemId: wideString read FSystemId; - property version: wideString read FVersion write FVersion; - end; - - TdomEntityReference = class (TdomNode) - protected - function expand: boolean; virtual; - function getCorrespondingCMEntity: TdomCMEntity; virtual; - function getRefersToPredefinedEntity: boolean; virtual; - procedure setNodeValue(const value: wideString); override; - function validate2: boolean; override; - public - constructor create(const aOwner: TdomDocument; - const name: wideString); virtual; - function cloneNode(const deep: boolean): TdomNode; override; - function resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; override; - property correspondingCMEntity: TdomCMEntity read getCorrespondingCMEntity; - property refersToPredefinedEntity: boolean read getRefersToPredefinedEntity; - end; - - TdomDocumentFragment = class (TdomNode) - protected - procedure setNodeValue(const value: wideString); override; - public - constructor create(const aOwner: TdomDocument); virtual; - end; - - TdomXPathNamespace = class (TdomNode) - private - FOwnerElement: TdomElement; - protected - function getDocument: TdomDocument; override; - function getOwnerElement: TdomElement; virtual; - public - constructor create(const aOwnerElement: TdomElement; - const anamespaceUri, - aprefix: wideString); virtual; - property ownerElement: TdomElement read getOwnerElement; - end; - - TdomDocument = class (TdomNode) - private - FBaseUri: wideString; - FCMInternal: TdomCMObject; - FCreatedNodes: TList; - FCreatedNodeIterators: TList; - FCreatedTreeWalkers: TList; - FCreatedElementsNodeLists: TList; - FCreatedElementsNodeListNSs: TList; - FCreatedExpressions: TList; - FCreatedNSResolvers: TList; - FDefaultView: TdomAbstractView; - FDOMImpl: TDomImplementation; - FEncoding: wideString; - FIDs: TdomWideStringList; - FModified: boolean; - FStandalone: wideString; - FSystemId: wideString; - FVersion: wideString; - procedure findNewReferenceNodes(const nodeToRemove: TdomNode); virtual; - protected - function createEntity(const name, - pubId, - sysId, - notaName: wideString): TdomEntity; virtual; - function createNotation(const name, - pubId, - sysId: wideString): TdomNotation; virtual; - procedure doAttrModified(originalTarget: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); override; - procedure doCharacterDataModified(originalTarget: TdomNode; - prevValue, - newValue: wideString); override; - procedure doNodeInserted(originalTarget: TdomNode); override; - procedure doNodeRemoved(originalTarget: TdomNode); override; - function getBaseUri: wideString; override; - function getDoctype: TdomDocumentType; virtual; - function getDocumentElement: TdomElement; virtual; - procedure initDoc(const tagName: wideString); virtual; - procedure initDocNS(const anamespaceURI, - aqualifiedName: wideString); virtual; - procedure setNodeValue(const value: wideString); override; - function validateIDREFS: boolean; override; - public - constructor create(const aOwner: TDomImplementation); virtual; - destructor destroy; override; - function appendChild(const newChild: TdomNode): TdomNode; override; - procedure clear; override; - procedure clearInvalidNodeIterators; virtual; - function createAttribute(const name: wideString): TdomAttr; virtual; - function createAttributeNS(const anamespaceURI, - aqualifiedName: wideString): TdomAttr; virtual; - function createCDATASection(const data: wideString): TdomCDATASection; virtual; - function createComment(const data: wideString): TdomComment; virtual; - function createDocumentFragment: TdomDocumentFragment; virtual; - function createDocumentType(const aname, - pubId, - sysId, - intSubset: wideString): TdomDocumentType; virtual; - function createElement(const tagName: wideString): TdomElement; virtual; - function createElementNS(const anamespaceURI, - aqualifiedName: wideString): TdomElement; virtual; - function createEntityReference(const name: wideString): TdomEntityReference; virtual; - function createExpression(const expression: wideString; - const resolver: TdomXPathNSResolver): TdomXPathExpression; virtual; - function createNodeIterator(const root: TdomNode; - whatToShow: TdomWhatToShow; - nodeFilter: TdomNodeFilter; - entityReferenceExpansion: boolean): TdomNodeIterator; virtual; - function createNSResolver(const nodeResolver: TdomNode): TdomXPathNSResolver; virtual; - function createProcessingInstruction(const targ, - data : wideString): TdomProcessingInstruction; virtual; - function createTextNode(const data: wideString): TdomText; virtual; - function createTreeWalker(const root: TdomNode; - whatToShow: TdomWhatToShow; - nodeFilter: TdomNodeFilter; - entityReferenceExpansion: boolean): TdomTreeWalker; virtual; - procedure freeAllNodes(var node: TdomNode); virtual; - procedure freeExpression(var expression: TdomXPathExpression); virtual; - procedure freeNSResolver(var resolver: TdomXPathNSResolver); virtual; - procedure freeTreeWalker(var treeWalker: TdomTreeWalker); virtual; - function getElementById(const elementId: wideString): TdomElement; virtual; - function getElementsByTagName(const tagName: wideString): TdomNodeList; virtual; - function getElementsByTagNameNS(const anamespaceURI, - alocalName: wideString): TdomNodeList; virtual; - function importNode(const importedNode: TdomNode; - const deep: boolean): TdomNode; virtual; - function insertBefore(const newChild, - refChild: TdomNode): TdomNode; override; - function removeContentModel: TdomCMObject; virtual; - function replaceChild(const newChild, - oldChild: TdomNode): TdomNode; override; - procedure setBaseUri(const value: wideString); virtual; - function setContentModel(const arg: TdomCMObject): TdomCMObject; virtual; - function validate(const opt: TdomEntityResolveOption): boolean; virtual; - property contentModel: TdomCMObject read FCMInternal; - property defaultView: TdomAbstractView read FDefaultView; - property doctype: TdomDocumentType read getDoctype; - property documentElement: TdomElement read getDocumentElement; - property domImplementation: TdomImplementation read FDomImpl; - property encoding: wideString read FEncoding write FEncoding; - property IDs: TdomWideStringList read FIDs; - property modified: boolean read FModified write FModified; - property standalone: wideString read FStandalone write FStandalone; - property systemId: wideString read FSystemId write FSystemId; - property version: wideString read FVersion write FVersion; - end; - - TdomCMNode = class; - - TXmlInputSource = class; - - TdomSeverity = (DOM_SEVERITY_WARNING, - DOM_SEVERITY_ERROR, - DOM_SEVERITY_FATAL_ERROR); - - TdomError = class - protected - FCode: wideString; - FLanguage: TIso639LanguageCode; - FLocation: TdomLocator; - FRelatedException: TXmlErrorType; - FSupportedLanguages: TIso639LanguageCodeSet; - function getDutchErrorStr: wideString; virtual; - function getEnglishErrorStr: wideString; virtual; - function getFrenchErrorStr: wideString; virtual; - function getGermanErrorStr: wideString; virtual; - function getItalianErrorStr: wideString; virtual; - function getPolishErrorStr: wideString; virtual; - function getPortugueseErrorStr: wideString; virtual; - function getSpanishErrorStr: wideString; virtual; - procedure setLanguage(const value: TIso639LanguageCode); virtual; - function getMessage: wideString; virtual; - function getSeverity: TdomSeverity; virtual; - public - constructor create(const errorType: TXmlErrorType; - const startLine, - startColumn, - endLine, - endColumn, - offs: integer; - const uriStr: wideString; - const rCMNode: TdomCMNode; - const rNode: TdomNode; - const code: wideString); virtual; - constructor createFromLocator(const errorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString); virtual; - destructor destroy; override; - property code: wideString read FCode; - property language: TIso639LanguageCode read FLanguage write setLanguage default iso639_en; - property location: TdomLocator read FLocation; - property relatedException: TXmlErrorType read FRelatedException; - property message: wideString read getMessage; - property severity: TdomSeverity read getSeverity; - property supportedLanguages: TIso639LanguageCodeSet read FSupportedLanguages; - end; - - TdomLocator = class - protected - FColumnNumber: integer; - FOffset: integer; - FStartColumnNumber: integer; - FStartLineNumber: integer; - FLineNumber: integer; - FRelatedCMNode: TdomCMNode; - FRelatedNode: TdomNode; - FUri: wideString; - function getColumnNumber: integer; virtual; - function getLineNumber: integer; virtual; - function getOffset: integer; virtual; - function getRelatedCMNode: TdomCMNode; virtual; - function getRelatedNode: TdomNode; virtual; - function getStartColumnNumber: integer; virtual; - function getStartLineNumber: integer; virtual; - function getUri: wideString; virtual; - public - constructor create(const startLine, - startColumn, - endLine, - endColumn, - offset: integer; - const uri: wideString; - const rCMNode: TdomCMNode; - const rNode: TdomNode); - property columnNumber: integer read getColumnNumber; - property lineNumber: integer read getLineNumber; - property offset: integer read getOffset; - property relatedCMNode: TdomCMNode read getRelatedCMNode; - property relatedNode: TdomNode read getRelatedNode; - property startColumnNumber: integer read getStartColumnNumber; - property startLineNumber: integer read getStartLineNumber; - property uri: wideString read getUri; - end; - - TdomInputSourceLocator = class(TdomLocator) - protected - FInputSource: TXmlInputSource; - FTabWidth: integer; - function getOffset: integer; override; - function getUri: wideString; override; - procedure evaluate(const s: WideChar); virtual; - procedure setStartMark; virtual; // This procedure is called by a Content Handler - // to indicate that the properties startLineNumber - // and startColumnNumber shall be set to the current - // lineNumber and columnNumber. - public - constructor create(const inputSource: TXmlInputSource; - const startLine, - startColumn, - endLine, - endColumn, - tabWidthValue: integer); virtual; - property tabWidth: integer read FTabWidth; - end; - -// Abstract Schema - - TdomASConstraintType = (AS_NO_VALUE_CONSTRAINT, - AS_DEFAULT_VALUE_CONSTRAINT, - AS_FIXED_VALUE_CONSTRAINT); - - TdomASContentType = (AS_EMPTY, - AS_ANY, - AS_MIXED, - AS_ELEMENTS); - - TdomASDataType = (AS_STRING_DATATYPE, - AS_BOOLEAN_DATATYPE, - AS_FLOAT_DATATYPE, - AS_DOUBLE_DATATYPE, - AS_DECIMAL_DATATYPE, - AS_HEXBINARY_DATATYPE, - AS_BASE64BINARY_DATATYPE, - AS_ANYURI_DATATYPE, - AS_QNAME_DATATYPE, - AS_DURATION_DATATYPE, - AS_DATETIME_DATATYPE, - AS_DATE_DATATYPE, - AS_TIME_DATATYPE, - AS_YEARMONTH_DATATYPE, - AS_YEAR_DATATYPE, - AS_MONTHDAY_DATATYPE, - AS_DAY_DATATYPE, - AS_MONTH_DATATYPE, - AS_NOTATION_DATATYPE, - AS_ID_DATATYPE, - AS_IDREF_DATATYPE, - AS_IDREFS_DATATYPE, - AS_ENTITY_DATATYPE, - AS_ENTITIES_DATATYPE, - AS_NMTOKEN_DATATYPE, - AS_NMTOKENS_DATATYPE, - AS_SIMPLE_DATATYPE, - AS_DERIVED_DATATYPE, - AS_COMPLEX_DATATYPE); - - TdomASEntityType = (AS_INTERNAL_ENTITY, - AS_EXTERNAL_ENTITY); - - TdomASListOperator = (AS_SEQUENCE, - AS_CHOICE, - AS_NONE); - - TdomASModelType = (AS_EXTERNAL_SUBSET, - AS_INTERNAL_SUBSET, - AS_NOT_USED); - - TdomASObjectType = (AS_UNKNOWN, - AS_ATTRIBUTE_DECLARATION, - AS_CONTENTMODEL, - AS_ELEMENT_DECLARATION, - AS_ENTITY_DECLARATION, - AS_MODEL, - AS_NOTATION_DECLARATION); - - TdomASObjectTypeSet = set of TdomASObjectType; - - TdomASModel = class; - - TdomASObject = class - protected - FASObjectName: wideString; - FASObjectType: TdomASObjectType; - FInuse: boolean; - FLocalName: wideString; - FNamespaceURI: wideString; - FOwnerAsModel: TdomASModel; - FPrefix: wideString; - procedure setPrefix(const value: wideString); virtual; - public - constructor create(const aOwner: TdomASModel); - property ASObjectName: wideString read FASObjectName; - property ASObjectType: TdomASObjectType read FASObjectType; - property localName: wideString read FLocalName; - property namespaceURI: wideString read FNamespaceURI; - property ownerASModel: TdomASModel read FOwnerAsModel; - property prefix: wideString read FPrefix write setPrefix; - end; - - TdomASObjectList = class - private - FNodeList: TList; - protected - procedure clear; - function appendASNode(const newNode: TdomASObject): TdomASObject; virtual; - procedure Delete(const index: integer); virtual; - function indexOf(const node: TdomASObject): integer; virtual; - function insertBefore(const newNode, - refNode: TdomASObject): TdomASObject; virtual; - function getLength: integer; virtual; - function removeASNode(const oldNode: TdomASObject): TdomASObject; virtual; - public - constructor create; - destructor destroy; override; - function item(const index: integer): TdomASObject; virtual; - property length: integer read getLength; - end; - - TdomASNamedObjectMap = class - protected - FNamespaceAware: boolean; - FNodeList: TList; - FOwnerAsModel: TdomASModel; - function getLength: integer; virtual; - function removeNamedItem(const name: wideString): TdomASObject; virtual; - function removeNamedItemNS(const namespaceURI, - localName: wideString): TdomASObject; virtual; - function setNamedItem(const arg: TdomASObject): TdomASObject; virtual; - function setNamedItemNS(const arg: TdomASObject): TdomASObject; virtual; - public - constructor create(const aOwner: TdomASModel; - const namespaceAware: boolean); - destructor destroy; override; - function getNamedItem(const name: wideString): TdomASObject; virtual; - function getNamedItemNS(const namespaceURI, - localName: wideString): TdomASObject; virtual; - function item(const index: integer): TdomASObject; virtual; - property length: integer read getLength; - property isNamespaceAware: boolean read FNamespaceAware; - property ownerASModel: TdomASModel read FOwnerAsModel; - end; - - TdomASAttributeDeclaration = class(TdomASObject) - private - FAttrType: TdomASDataType; - FAttrValue: wideString; - FConstraintType: TdomASConstraintType; - FEnumAttr: TdomWideStringList; - function getIsNamespaceAware: boolean; - public - constructor create(const aOwner: TdomASModel; - const name: wideString); - constructor createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName: wideString); - destructor destroy; override; - property attrType: TdomASDataType read FAttrType write FAttrType default AS_STRING_DATATYPE; - property attrValue: wideString read FAttrValue write FAttrValue; - property constraintType: TdomASConstraintType read FConstraintType write FConstraintType default AS_NO_VALUE_CONSTRAINT; - property enumAttr: TdomWideStringList read FEnumAttr; - property isNamespaceAware: boolean read getIsNamespaceAware; - end; - - TdomASContentModel = class(TdomASObject) - protected - FListOperator: TdomASListOperator; - FMaxOccurs: integer; - FMinOccurs: integer; - FSubModels: TdomASObjectList; - public - constructor create(const aOwner: TdomASModel); - destructor destroy; override; - function appendASNode(const newNode: TdomASObject): TdomASObject; virtual; - function insertBefore(const newNode, - refNode: TdomASObject): TdomASObject; virtual; - function removeASNode(const oldNode: TdomASObject): TdomASObject; virtual; - property listOperator: TdomASListOperator read FListOperator write FListOperator default AS_CHOICE; - property maxOccurs: integer read FMaxOccurs write FMaxOccurs default AS_UNBOUND; - property minOccurs: integer read FMinOccurs write FMinOccurs default 0; - property subModels: TdomASObjectList read FSubModels; - end; - - TdomASElementDeclaration = class(TdomASObject) - protected - FAttributeDeclarations: TdomASNamedObjectMap; - FContentModel: TdomASContentModel; - FContentType: TdomASContentType; - FElementType: TdomASDataType; - FIsPCDataOnly: boolean; - FStrictMixedContent: boolean; - function getIsNamespaceAware: boolean; - public - constructor create(const aOwner: TdomASModel; - const name: wideString); - constructor createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName: wideString); - destructor destroy; override; - function addASAttributeDecl(const arg: TdomASAttributeDeclaration): boolean; virtual; - function removeASAttributeDeclaration(const arg: TdomASAttributeDeclaration): TdomASAttributeDeclaration; virtual; - property attributeDecls: TdomASNamedObjectMap read FAttributeDeclarations; - property contentModel: TdomASContentModel read FContentModel; - property contentType: TdomASContentType read FContentType write FContentType default AS_MIXED; - property elementType: TdomASDataType read FElementType write FElementType default AS_STRING_DATATYPE; - property isNamespaceAware: boolean read getIsNamespaceAware; - property isPCDataOnly: boolean read FIsPCDataOnly write FIsPCDataOnly default false; - property strictMixedContent: boolean read FStrictMixedContent write FStrictMixedContent default false; - end; - - TdomASEntityDeclaration = class(TdomASObject) - protected - FEntityType: TdomASEntityType; - FPublicId: wideString; - FEntityValue: wideString; - FSystemId: wideString; - FNotationName: wideString; - public - constructor create(const aOwner: TdomASModel; - const name: wideString); - property entityType: TdomASEntityType read FEntityType write FEntityType default AS_INTERNAL_ENTITY; - property entityValue: wideString read FEntityValue write FEntityValue; - property notationName: wideString read FNotationName write FNotationName; - property publicId: wideString read FPublicId write FPublicId; - property systemId: wideString read FSystemId write FSystemId; - end; - - TdomASNotationDeclaration = class(TdomASObject) - protected - FNotationName: wideString; - FPublicId: wideString; - FSystemId: wideString; - public - constructor create(const aOwner: TdomASModel; - const name, - pubId, - sysId: wideString); - constructor createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName, - pubId, - sysId: wideString); - property publicId: wideString read FPublicId; - property systemId: wideString read FSystemId; - end; - - TdomASModel = class (TdomASObject) - protected - FAttributeDeclarations: TdomASNamedObjectMap; - FContentModelDeclarations: TdomASNamedObjectMap; - FCreatedASNodes: TdomASObjectList; - FDomImpl: TDomImplementation; - FElementDeclarations: TdomASNamedObjectMap; - FEntityDeclarations: TdomASNamedObjectMap; - FNamespaceAware: boolean; - FNotationDeclarations: TdomASNamedObjectMap; - FHint: wideString; - FLocation: wideString; - FUsage: TdomASModelType; - function getContainer: boolean; virtual; - public - constructor create(const aOwner: TDomImplementation; - const namespaceAware: boolean); virtual; - destructor destroy; override; - function addNamedASElementDeclaration(const arg: TdomASElementDeclaration): boolean; virtual; - function addNamedASEntityDeclaration(const arg: TdomASEntityDeclaration): boolean; virtual; - function addNamedASNotationDeclaration(const arg: TdomASNotationDeclaration): boolean; virtual; - procedure clear; virtual; - function createASAttributeDeclaration(const anamespaceURI, - qualifiedName: wideString): TdomASAttributeDeclaration; - function createASContentModel: TdomASContentModel; - function createASElementDeclaration(const anamespaceURI, - qualifiedName: wideString): TdomASElementDeclaration; - function createASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; - function createASNotationDeclaration(const name, - pubId, - sysId: wideString): TdomASNotationDeclaration; - procedure freeAllASObjects(var obj: TdomASObject); virtual; - function getNamedASElementDeclaration(const anamespaceURI, - name: wideString): TdomASElementDeclaration; virtual; - function getNamedASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; virtual; - function getNamedASNotationDeclaration(const anamespaceURI, - name: wideString): TdomASNotationDeclaration; virtual; - function removeNamedASElementDeclaration(const anamespaceURI, - name: wideString): TdomASElementDeclaration; virtual; - function removeNamedASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; virtual; - function removeNamedASNotationDeclaration(const anamespaceURI, - name: wideString): TdomASNotationDeclaration; virtual; - property attributeDecls: TdomASNamedObjectMap read FAttributeDeclarations; - property container: boolean read getContainer; - property contentModelDecls: TdomASNamedObjectMap read FContentModelDeclarations; - property elementDecls: TdomASNamedObjectMap read FElementDeclarations; - property entityDecls: TdomASNamedObjectMap read FEntityDeclarations; - property hint: wideString read FHint write FHint; - property isNamespaceAware: boolean read FNamespaceAware; - property location: wideString read FLocation write FLocation; - property notationDecls: TdomASNamedObjectMap read FNotationDeclarations; - property usage: TdomASModelType read FUsage; - end; - -// Content Model - - TdomCMNodeType = (ctUnknown, - ctProcessingInstruction, - ctComment, - ctObject, - ctFragment, - ctExternalObject, - ctInternalObject, - ctAttribute, - ctNotation, - ctEntity, - ctParameterEntityReference, - ctEntityDeclaration, - ctParameterEntityDeclaration, - ctElementTypeDeclaration, - ctSequenceParticle, - ctChoiceParticle, - ctPcdataChoiceParticle, - ctElementParticle, - ctAttributeList, - ctAttributeDefinition, - ctNotationDeclaration, - ctNameParticle, - ctNmtokenParticle); - - TdomCMNodeTypeSet = set of TdomCMNodeType; - - TdomCustomCMObject = class; - TdomCMParameterEntityReference = class; - TdomCMEntityDeclaration = class; - TdomCMElementParticle = class; - TdomCMNameParticle = class; - TdomCMNmtokenParticle = class; - TdomCMElementTypeDeclaration = class; - TdomCMParameterEntityDeclaration = class; - TdomCMFragment = class; - TdomCMNotationDeclaration = class; - TdomCMAttrDefinition = class; - TdomCMAttrList = class; - TdomCMChoiceParticle = class; - TdomCMAttribute = class; - TdomCMNotation = class; - TdomCMPcdataChoiceParticle = class; - TdomCMSequenceParticle = class; - - TdomCMNodeList = class - private - FCMNodeList: TList; - function getLength: integer; virtual; - protected - function indexOf(const node: TdomCMNode): integer; virtual; - public - function item(const index: integer): TdomCMNode; virtual; - constructor create(const CMNodeList: TList); - property length: integer read getLength; - end; - - TdomNamedCMNodeMap = class(TdomCMNodeList) - private - FOwner: TdomCMNode; // The owner content model. - FOwnerNode: TdomCMNode; // The node to which the map is attached to. - FIsReadonly: boolean; - function getOwnerNode: TdomCMNode; virtual; - protected - FAllowedNodeTypes: TDomCMNodeTypeSet; - function getNamedIndex(const name: wideString): integer; virtual; - function removeItem(const arg: TdomCMNode): TdomCMNode; virtual; - procedure setIsReadonly(const value: boolean); virtual; - public - constructor create(const aOwner, - aOwnerNode: TdomCMNode; - const nodeList: TList; - const allowedNTs: TDomCMNodeTypeSet); virtual; - function getNamedItem(const name: wideString): TdomCMNode; virtual; - function setNamedItem(const arg: TdomCMNode): TdomCMNode; virtual; - function removeNamedItem(const name: wideString): TdomCMNode; virtual; - property isReadonly: boolean read FIsReadonly; - property ownerNode: TdomCMNode read getOwnerNode; - end; - - TdomNamedCMAttributeMap = class - private - FOwner: TdomCMObject; // The owner document. - FCMAttributesList: TList; - function getLength: integer; virtual; - public - constructor create(const aOwner: TdomCMObject); - destructor destroy; override; - function item(const index: integer): TdomCMAttribute; virtual; - function getNamedItem(const elementName, - attributeName: wideString): TdomCMAttribute; virtual; - function appendNamedItem(const arg: TdomCMAttribute): boolean; virtual; - function removeLastItem: TdomCMAttribute; virtual; - property length: integer read getLength; - property ownerContentModel: TdomCMObject read FOwner; - end; - - TdomNamedCMEntityMap = class - private - FOwner: TdomCMObject; // The owner document. - FCMEntitiesList: TList; - function getLength: integer; virtual; - public - constructor create(const aOwner: TdomCMObject); - destructor destroy; override; - function item(const index: integer): TdomCMEntity; virtual; - function getNamedItem(const name: wideString): TdomCMEntity; virtual; - function appendNamedItem(const arg: TdomCMEntity): boolean; virtual; - function removeLastItem: TdomCMEntity; virtual; - property length: integer read getLength; - property ownerContentModel: TdomCMObject read FOwner; - end; - - TdomCMNode = class - private - FNodeName: wideString; - FNodeValue: wideString; - FNodeType: TdomCMNodeType; - FCMNodeList: TdomCMNodeList; - FCMNodeListing: TList; - FCMObject: TdomCustomCMObject; - FParentNode: TdomCMNode; - FIsReadonly: boolean; - function getCMNodeType: TdomCMNodeType; virtual; - function getCMObject: TdomCustomCMObject; virtual; - function getParentNode: TdomCMNode; virtual; - function getChildNodes: TdomCMNodeList; virtual; - function getFirstChild: TdomCMNode; virtual; - function getLastChild: TdomCMNode; virtual; - function getNextSibling: TdomCMNode; virtual; - function getNodeName: wideString; virtual; - function getNodeValue: wideString; virtual; - function getPreviousSibling: TdomCMNode; virtual; - procedure makeChildrenReadonly; virtual; - procedure setNodeValue(const value: wideString); virtual; - protected - FAllowedChildTypes: set of TDomCMNodeType; - function sendErrorNotification(const xmlErrorType: TXmlErrorType; - const relCMNode: TdomCMNode): boolean; virtual; - procedure setIsReadonly(const value: boolean); virtual; - function validate: boolean; virtual; - public - constructor create(const aOwner: TdomCustomCMObject); - destructor destroy; override; - procedure clear; virtual; - function insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; virtual; - function replaceChild(const newChild, - oldChild: TdomCMNode): TdomCMNode; virtual; - function removeChild(const oldChild: TdomCMNode): TdomCMNode; virtual; - function appendChild(const newChild: TdomCMNode): TdomCMNode; virtual; - function hasChildNodes: boolean; virtual; - function cloneNode(const deep: boolean): TdomCMNode; virtual; - function isAncestor(const ancestorNode: TdomCMNode): boolean; virtual; - property childNodes: TdomCMNodeList read getChildNodes; - property firstChild: TdomCMNode read getFirstChild; - property isReadonly: boolean read FIsReadonly; - property lastChild: TdomCMNode read getLastChild; - property nextSibling: TdomCMNode read getNextSibling; - property nodeName: wideString read getNodeName; - property nodeType: TdomCMNodeType read getCMNodeType; - property nodeValue: wideString read getNodeValue write setNodeValue; - property ownerCMObject: TdomCustomCMObject read getCMObject; - property parentNode: TdomCMNode read getParentNode; - property previousSibling: TdomCMNode read getPreviousSibling; - end; - - TdomCMComment = class (TdomCMNode) - private - function getData: wideString; virtual; - procedure setData(const value: wideString); virtual; - function getLength: integer; virtual; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject); virtual; - function substringData(const offset, - count: integer):wideString; virtual; - procedure appendData(const arg: wideString); virtual; - procedure insertData(const offset: integer; - const arg: wideString); virtual; - procedure deleteData(const offset, - count: integer); virtual; - procedure replaceData(const offset, - count: integer; - const arg: wideString); virtual; - property data: wideString read getData write setData; - property length: integer read getLength; - end; - - TdomCMProcessingInstruction = class (TdomCMNode) - private - function getTarget: wideString; virtual; - function getData: wideString; virtual; - procedure setData(const value: wideString); virtual; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const targ: wideString); virtual; - property target: wideString read getTarget; - property data: wideString read getData write setData; - end; - - TdomCustomCMObject = class (TdomCMNode) - private - FCreatedNodes: TList; - FDomImpl: TDomImplementation; - FSystemId: wideString; - procedure setNodeValue(const value: wideString); override; - protected - function duplicateCMNode(const node: TdomCMNode): TdomCMNode; virtual; - public - constructor create(const aOwner: TdomImplementation; - const sysId: wideString); - destructor destroy; override; - function createCMAttributeDefinition(const name, - attType, - defaultDecl, - attValue: wideString) : TdomCMAttrDefinition; virtual; - function createCMAttributeList(const name: wideString): TdomCMAttrList; virtual; - function createCMChoiceParticle(const freq: wideString): TdomCMChoiceParticle; virtual; - function createCMComment(const data: wideString): TdomCMComment; virtual; - function createCMElementParticle(const name, - freq: wideString): TdomCMElementParticle; virtual; - function createCMElementTypeDeclaration(const name: wideString; - const ContspecType: TdomContentspecType): TdomCMElementTypeDeclaration; virtual; - function createCMExtEntityDeclaration(const name, - pubId, - sysId: wideString): TdomCMEntityDeclaration; virtual; - function createCMExtParameterEntityDeclaration(const name, - pubId, - sysId: wideString): TdomCMParameterEntityDeclaration; virtual; - function createCMExtUnparsedEntityDeclaration(const name, - pubId, - sysId, - notaName: wideString): TdomCMEntityDeclaration; virtual; - function createCMFragment: TdomCMFragment; virtual; - function createCMIntEntityDeclaration(const name, - entityValue: wideString): TdomCMEntityDeclaration; virtual; - function createCMIntParameterEntityDeclaration(const name, - entityValue: wideString): TdomCMParameterEntityDeclaration; virtual; - function createCMNameParticle(const name: wideString): TdomCMNameParticle; virtual; - function createCMNmtokenParticle(const name: wideString): TdomCMNmtokenParticle; virtual; - function createCMNotationDeclaration(const name, - pubId, - sysId: wideString): TdomCMNotationDeclaration; virtual; - function createCMParameterEntityReference(const name: wideString): TdomCMParameterEntityReference; virtual; - function createCMPcdataChoiceParticle: TdomCMPcdataChoiceParticle; virtual; - function createCMProcessingInstruction(const targ, - data : wideString): TdomCMProcessingInstruction; virtual; - function createCMSequenceParticle(const freq: wideString): TdomCMSequenceParticle; virtual; - procedure freeAllCMNodes(var CMNode: TdomCMNode); virtual; - procedure getValueOfPE(const name: wideString; - var value: wideString; - var error: TXmlErrorType); virtual; - function hasPEDeclaration(const name: wideString): boolean; virtual; - property domImplementation: TdomImplementation read FDomImpl; - property systemId: wideString read FSystemId write FSystemId; - end; - - TdomCMObject = class (TdomCustomCMObject) - private - FAssociatedDocument: TdomDocument; - FAttributesList: TdomNamedCMAttributeMap; - FCMExternal: TdomCMExternalObject; - FCMInternal: TdomCMInternalObject; - FEntitiesList: TdomNamedCMEntityMap; - FNotationsList: TdomNamedCMNodeMap; - FNotationsListing: TList; - FElementTypesList: TdomNamedCMNodeMap; - FElementTypesListing: TList; - procedure clearAttributes; - procedure clearElementTypes; - procedure clearEntities; - procedure clearNotations; - protected - function createCMAttribute(const elementName, - attributeName, - attType, - defaultDecl, - attValue: wideString): TdomCMAttribute; virtual; - function createCMExtParsedEntity(const name, - pubId, - sysId: wideString): TdomCMEntity; virtual; - function createCMExtUnparsedEntity(const name, - pubId, - sysId, - notaName: wideString): TdomCMEntity; virtual; - function createCMIntEntity(const name, - literalValue: wideString): TdomCMEntity; virtual; - function createCMNotation(const name, - pubId, - sysId: wideString): TdomCMNotation; virtual; - function duplicateCMNode(const node: TdomCMNode): TdomCMNode; override; - function prepareCM: boolean; virtual; - function setPredefinedEntities: boolean; virtual; - public - constructor create(const aOwner: TdomImplementation; - const sysId: wideString); virtual; - destructor destroy; override; - procedure clear; override; - function prepare: boolean; virtual; - function removeExternalCM: TdomCMExternalObject; virtual; - function removeInternalCM: TdomCMInternalObject; virtual; - function setExternalCM(const arg: TdomCMExternalObject): TdomCMExternalObject; virtual; - function setInternalCM(const arg: TdomCMInternalObject): TdomCMInternalObject; virtual; - function validate: boolean; override; - property associatedDocument: TdomDocument read FAssociatedDocument; - property attributes: TdomNamedCMAttributeMap read FAttributesList; - property elementTypes: TdomNamedCMNodeMap read FElementTypesList; - property entities: TdomNamedCMEntityMap read FEntitiesList; - property externalCM: TdomCMExternalObject read FCMExternal; - property internalCM: TdomCMInternalObject read FCMInternal; - property notations: TdomNamedCMNodeMap read FNotationsList; - end; - - TdomCustomCMIEObject = class (TdomCustomCMObject) - protected - FAssociatedContentModel: TdomCMObject; - FPublicId: wideString; - function validate: boolean; override; - public - constructor create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); - property associatedContentModel: TdomCMObject read FAssociatedContentModel; - property publicId: wideString read FPublicId write FPublicId; - end; - - TdomCMInternalObject = class (TdomCustomCMIEObject) - public - constructor create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); - end; - - TdomCMExternalObject = class (TdomCustomCMIEObject) - protected - FEncoding: wideString; - FVersion: wideString; - public - constructor create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); - property encoding: wideString read FEncoding write FEncoding; - property version: wideString read FVersion write FVersion; - end; - - TdomCMNotationDeclaration = class (TdomCMNode) - private - FPublicId: wideString; - FSystemId: wideString; - function getPublicId: wideString; virtual; - function getSystemId: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); virtual; - property publicId: wideString read getPublicId; - property systemId: wideString read getSystemId; - end; - - TdomCMElementTypeDeclaration = class (TdomCMNode) - private - FContentspec: TdomContentspecType; - function getContentspec: wideString; virtual; - function getContentspecType: TdomContentspecType; virtual; - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name: wideString; - const contspecType: TdomContentspecType); virtual; - function appendChild(const newChild: TdomCMNode): TdomCMNode; override; - function insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; override; - property contentspec: wideString read getContentspec; - property contentspecType: TdomContentspecType read getContentspecType; - end; - - TdomCMAttrList = class(TdomCMNode) - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name: wideString); virtual; - end; - - TdomCMAttrDefinition = class(TdomCMNode) - private - FAttributeType: wideString; - FDefaultDeclaration: wideString; - FParentAttributeList: TdomCMAttrList; - function getAttributeType: wideString; virtual; - function getDefaultDeclaration: wideString; virtual; - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - attType, - defaultDecl, - attValue: wideString); virtual; - property attributeType: wideString read getAttributeType; - property defaultDeclaration: wideString read getDefaultDeclaration; - end; - - TdomCMParticle = class (TdomCMNode) - private - FFrequency: wideString; - function contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; virtual; - function contentModelTest(const source, - rest: TdomWideStringList; - var isNonDeterministic: boolean): boolean; virtual; - function getFrequency: wideString; virtual; - procedure setFrequency(const freq: wideString); virtual; - procedure setNodeValue(const value: wideString); override; - procedure writeCode(stream: TStream); virtual; abstract; - public - constructor create(const aOwner: TdomCustomCMObject; - const freq: wideString); - property frequency: wideString read getFrequency; - end; - - TdomCMSequenceParticle = class (TdomCMParticle) - private - function contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; override; - procedure writeCode(stream: TStream); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const freq: wideString); virtual; - end; - - TdomCMChoiceParticle = class (TdomCMParticle) - private - function contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; override; - procedure writeCode(stream: TStream); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const freq: wideString); virtual; - end; - - TdomCMPcdataChoiceParticle = class (TdomCMParticle) - private - function contentModelTest(const source, - rest: TdomWideStringList; - var isNonDeterministic: boolean): boolean; override; - procedure setFrequency(const freq: wideString); override; - procedure writeCode(stream: TStream); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const freq: wideString); virtual; - function elementDefined(const elementName: wideString): boolean; - end; - - TdomCMElementParticle = class (TdomCMParticle) - private - function contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; override; - procedure writeCode(stream: TStream); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - freq: wideString); virtual; - end; - - TdomCMNameParticle = class (TdomCMNode) - private - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name: wideString); virtual; - end; - - TdomCMNmtokenParticle = class (TdomCMNode) - private - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name: wideString); virtual; - end; - - TdomCMAttribute = class (TdomCMNode) - private - FAttributeName: wideString; - FAttributeType: wideString; - FDefaultDeclaration: wideString; - FElementName: wideString; - procedure setNodeValue(const value: wideString); override; - public - constructor create(const aOwner: TdomCustomCMObject; - const elementName, - attributeName, - attType, - defaultDecl, - attValue: wideString); virtual; - property attributeName: wideString read FAttributeName; - property attributeType: wideString read FAttributeType; - property defaultDeclaration: wideString read FDefaultDeclaration; - property elementName: wideString read FElementName; - end; - - TdomCMNotation = class (TdomCMNode) - private - FPublicId: wideString; - FSystemId: wideString; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); virtual; - property publicId: wideString read FPublicId; - property systemId: wideString read FSystemId; - end; - - TdomCMEntity = class (TdomCMNode) - private - FEncoding: wideString; - FEntityType: TdomEntityType; - FIsParsedEntity: boolean; - FLiteralValue: wideString; - FNotationName: wideString; - FPublicId: wideString; - FSystemId: wideString; - function refersToXyz(const allowUnresolvableEntities: boolean; - const previousEntities: TdomWideStringList; - const whatToTest: integer): boolean; - procedure calculateLiteralValue(const S: wideString); - procedure setNodeValue(const value: wideString); override; - protected - FReplacementText: wideString; - FIsUnusable: boolean; // xxx can be problematic! - FIsResolved: boolean; - function getIsUnusable: boolean; virtual; - function getLiteralValue: wideString; virtual; - function getNormalizedValue: wideString; virtual; - function getReplacementText: wideString; virtual; - function refersToItself(const allowUnresolvableEntities: boolean): boolean; virtual; - function refersToExternalEntity(const allowUnresolvableEntities: boolean): boolean; virtual; - function refersToUnparsedEntity(const allowUnresolvableEntities: boolean): boolean; virtual; - function refersToUnusableEntity(const allowUnresolvableEntities: boolean): boolean; virtual; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); virtual; - constructor createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); virtual; - constructor createExtUnparsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId, - notaName: wideString); virtual; - function resolve: boolean; virtual; - property encoding: wideString read FEncoding write FEncoding; - property entityType: TdomEntityType read FEntityType; - property isParsedEntity: boolean read FIsParsedEntity; - property isResolved: boolean read FIsResolved; - property isUnusable: boolean read getIsUnusable; - property literalValue: wideString read getLiteralValue; - property normalizedValue: wideString read getNormalizedValue; - property notationName: wideString read FNotationName; - property publicId: wideString read FPublicId; - property replacementText: wideString read getReplacementText; - property systemId: wideString read FSystemId; - end; - - TdomCustomCMEntDecl = class (TdomCMNode) - private - FEntityType: TdomEntityType; - FPublicId: wideString; - FSystemId: wideString; - function getEntityType: TdomEntityType; virtual; - function getPublicId: wideString; virtual; - function getSystemId: wideString; virtual; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); virtual; - constructor createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); virtual; - function insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; override; - function replaceChild(const newChild, - oldChild: TdomCMNode): TdomCMNode; override; - function appendChild(const newChild: TdomCMNode): TdomCMNode; override; - property entityType: TdomEntityType read getEntityType; - property publicId: wideString read getPublicId; - property systemId: wideString read getSystemId; - end; - - TdomCMEntityDeclaration = class (TdomCustomCMEntDecl) - private - FIsParsedEntity: boolean; - FNotationName: wideString; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); override; - constructor createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); override; - constructor createExtUnparsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId, - notaName: wideString); virtual; - property isParsedEntity: boolean read FIsParsedEntity; - property notationName: wideString read FNotationName; - end; - - TdomCMParameterEntityDeclaration = class (TdomCustomCMEntDecl) - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); override; - constructor createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); override; - end; - - TdomCMParameterEntityReference = class (TdomCMNode) - private - procedure setNodeValue(const value: wideString); override; - protected - function validate: boolean; override; - public - constructor create(const aOwner: TdomCustomCMObject; - const name: wideString); virtual; - end; - - TdomCMFragment = class (TdomCMNode) - private - procedure setNodeValue(const value: wideString); override; - public - constructor create(const aOwner: TdomCustomCMObject); virtual; - end; - - -// Views - - TdomAbstractView = class - protected - FDocument: TdomDocument; - public - property document: TdomDocument read FDocument; - end; - - TdomStyleSheet = class - private - function getStyleSheetType: wideString; virtual; abstract; - function getDisabled: boolean; virtual; abstract; - procedure setDisabled(const value: boolean); virtual; abstract; - function getOwnerNode: TdomNode; virtual; abstract; - function getParentStyleSheet: TdomStyleSheet; virtual; abstract; - function getHref: wideString; virtual; abstract; - function getTitle: wideString; virtual; abstract; - function getMedia: TdomMediaList; virtual; abstract; - public - property styleSheetType: wideString read getStyleSheetType; - property disabled: boolean read getDisabled write setDisabled; - property ownerNode: TdomNode read getOwnerNode; - property parentStyleSheet: TdomStyleSheet read getParentStyleSheet; - property href: wideString read getHref; - property title: wideString read getTitle; - property media: TdomMediaList read getMedia; - end; - - TdomMediaList = class - private - function getCssText: wideString; virtual; abstract; - procedure setCssText(const value: wideString); virtual; abstract; - function getLength: integer; virtual; abstract; - public - function item(const index: integer): TdomStyleSheet; virtual; abstract; - procedure Delete(const oldMedium: wideString); virtual; abstract; - procedure append(const newMedium: wideString); virtual; abstract; - property length: integer read getLength; - property cssText: wideString read getCssText write setCssText; - end; - - TdomStyleSheetList = class - private - function getLength: integer; virtual; abstract; - public - function item(const index: integer): TdomStyleSheet; virtual; abstract; - property length: integer read getLength; - end; - - TdomDocumentStyle = class - private - function getStyleSheets: TdomStyleSheetList; virtual; abstract; - public - property styleSheets: TdomStyleSheetList read getStyleSheets; - end; - - TXmlSourceCode = class (TList) - private - procedure calculatePieceOffset(const startItem: integer); virtual; - function getNameOfFirstTag: wideString; virtual; - public - function add(Item: Pointer): integer; - procedure clear; {$ifdef ver100} virtual; {$else} override; {$endif} - // ifdef... is necessary because TList.clear is static in Delphi 3 - // (=ver100), but dynamic in later versions. - procedure clearAndFree; virtual; - procedure Delete(index: integer); - procedure exchange(index1, index2: integer); - function getPieceAtPos(pos: integer): TXmlSourceCodePiece; - procedure insert(index: integer; item: pointer); - procedure move(curIndex, newIndex: integer); - procedure pack; - function remove(Item: Pointer): integer; - procedure sort(Compare: TListSortCompare); - property nameOfFirstTag: wideString read getNameOfFirstTag; - end; - - TXmlSourceCodePiece = class - private - FPieceType: TdomPieceType; - FText: wideString; - FOffset: integer; - FOwner: TXmlSourceCode; - public - constructor create(const pt: TdomPieceType); virtual; - property pieceType: TdomPieceType read FPieceType; - property text: wideString read FText write FText; - property offset: integer read FOffset; - property ownerSourceCode: TXmlSourceCode read FOwner; - end; - - -{Parser} - - TdomStandalone = ( STANDALONE_YES, - STANDALONE_NO, - STANDALONE_UNSPECIFIED); - - TdomXMLDeclType = ( DT_UNKNOWN, - DT_XML_DECLARATION, - DT_TEXT_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED ); - - TXmlInputSource = class - private - FDeclType: TdomXMLDeclType; - FEncoding: TdomEncodingType; - FEncodingName: wideString; - FHasMalformedDecl: boolean; - FLastCharWasCR: boolean; - FLastUcs4: integer; // Buffer storage for UTF-8 surrogates - FLocator: TdomInputSourceLocator; - FPublicId: wideString; - FStandalone: TdomStandalone; - FStartPosition: integer; - FStream: TStream; - FSystemId: wideString; - FVersionNumber: wideString; - function evaluateXmlOrTextDecl(const tabWidthValue: integer; - out declType: TdomXMLDeclType; - out encodingType: TdomEncodingType; - out versionInfo, - encName: wideString; - out standalone: TdomStandalone; - out lineOffset, - columnOffset: integer): boolean; - protected - function getStreamAsWideString: wideString; virtual; - function getNextWideChar2(var dest: wideChar; - const enc: TdomEncodingType; - const locator: TdomInputSourceLocator): boolean; virtual; - public - constructor create(const stream: TStream; - const publicId, - systemId: wideString; - const tabWidthValue: integer); virtual; - destructor destroy; override; - function getNextWideChar(var dest: wideChar): boolean; virtual; - property declType: TdomXMLDeclType read FDeclType; - property encoding: TdomEncodingType read FEncoding; - property encodingName: wideString read FEncodingName; - property hasMalformedDecl: boolean read FHasMalformedDecl; - property locator: TdomInputSourceLocator read FLocator; - property publicId: wideString read FPublicId; - property standalone: TdomStandalone read FStandalone; - property stream: TStream read FStream; - property streamAsWideString: wideString read getStreamAsWideString; - property systemId: wideString read FSystemId; - property versionNumber: wideString read FVersionNumber; - end; - - TXmlCustomParser = class; - TXmlToDomParser = class; - TXmlCustomReader = class; - TXmlStandardDocReader = class; - TXmlStandardDtdReader = class; - - TXmlProcessorEvent1 = procedure(reader: TXmlCustomReader; - locator: TdomLocator) of object; - - TXmlProcessorEvent2 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var data: wideString) of object; - - TXmlProcessorEvent3 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var targ, - data : wideString) of object; - - TXmlProcessorEvent4 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var namespaceURI, - tagName: wideString) of object; - - TXmlProcessorEvent5 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var namespaceURI, - tagName: wideString; - attributes: TdomNameValueList) of object; - - TXmlProcessorEvent6 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - pubId, - sysId, - data: wideString) of object; - - TXmlProcessorEvent7 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var prefix, - uri: wideString) of object; - - TXmlProcessorEvent8 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var version, - encDl, - sdDl: wideString) of object; - - TXmlProcessorEvent9 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - attType, - bracket, - defaultDecl, - attValue: wideString) of object; - - TXmlProcessorEvent10 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var includeStmt, - data: wideString) of object; - - TXmlProcessorEvent11 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - data: wideString) of object; - - TXmlProcessorEvent12 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - entityValue, - pubId, - sysId, - notaName: wideString) of object; - - TXmlProcessorEvent13 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - pubId, - sysId: wideString) of object; - - TXmlProcessorEvent14 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var name, - entityValue, - pubId, - sysId: wideString) of object; - - TXmlProcessorEvent15 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var version, - encDl: wideString) of object; - - TXmlProcessorEvent16 = procedure(reader: TXmlCustomReader; - locator: TdomLocator; - var version, - encDl: wideString; - var sdDl: TdomStandalone) of object; - - TXmlCustomHandler = class(TComponent) - protected - FOnComment: TXmlProcessorEvent2; - FOnCDATA: TXmlProcessorEvent2; - FOnCharRef: TXmlProcessorEvent2; - FOnDoctype: TXmlProcessorEvent6; - FOnEndDocument: TXmlProcessorEvent1; - FOnEndElement: TXmlProcessorEvent4; - FOnEndPrefixMapping: TXmlProcessorEvent2; - FOnEntityRef: TXmlProcessorEvent2; - FOnPCDATA: TXmlProcessorEvent2; - FOnProcessingInstruction: TXmlProcessorEvent3; - FOnSkippedEntity: TXmlProcessorEvent2; - FOnStartDocument: TXmlProcessorEvent16; - FOnStartElement: TXmlProcessorEvent5; - FOnStartPrefixMapping: TXmlProcessorEvent7; - FOnAttributeDefinition: TXmlProcessorEvent9; - FOnConditionalSection: TXmlProcessorEvent10; - FOnDtdComment: TXmlProcessorEvent2; - FOnDtdProcessingInstruction: TXmlProcessorEvent3; - FOnElementTypeDeclaration: TXmlProcessorEvent11; - FOnEndAttListDeclaration: TXmlProcessorEvent1; - FOnEndExtDtd: TXmlProcessorEvent1; - FOnEndIntDtd: TXmlProcessorEvent1; - FOnEntityDeclaration: TXmlProcessorEvent12; - FOnNotationDeclaration: TXmlProcessorEvent13; - FOnParameterEntityDeclaration: TXmlProcessorEvent14; - FOnParameterEntityRef: TXmlProcessorEvent2; - FOnStartAttListDeclaration: TXmlProcessorEvent2; - FOnStartExtDtd: TXmlProcessorEvent15; - FOnStartIntDtd: TXmlProcessorEvent1; - function sendErrorNotification(const target: TXmlCustomReader; - const xmlErrorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString): boolean; virtual; - public - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; virtual; abstract; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; virtual; abstract; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; virtual; abstract; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; virtual; abstract; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; virtual; abstract; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; virtual; abstract; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; virtual; abstract; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; virtual; abstract; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; virtual; abstract; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; virtual; abstract; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; virtual; abstract; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; virtual; abstract; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; virtual; abstract; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; virtual; abstract; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; virtual; abstract; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; virtual; abstract; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; virtual; abstract; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; virtual; abstract; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; virtual; abstract; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; virtual; abstract; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; virtual; abstract; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; virtual; abstract; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; virtual; abstract; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; virtual; abstract; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; virtual; abstract; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; virtual; abstract; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; virtual; abstract; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; virtual; abstract; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; virtual; abstract; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; virtual; abstract; - procedure notifyReset; virtual; abstract; - published - property OnAttributeDefinition: TXmlProcessorEvent9 read FOnAttributeDefinition write FOnAttributeDefinition; - property OnCDATA: TXmlProcessorEvent2 read FOnCDATA write FOnCDATA; - property OnCharRef: TXmlProcessorEvent2 read FOnCharRef write FOnCharRef; - property OnComment: TXmlProcessorEvent2 read FOnComment write FOnComment; - property OnConditionalSection: TXmlProcessorEvent10 read FOnConditionalSection write FOnConditionalSection; - property OnDoctype: TXmlProcessorEvent6 read FOndoctype write FOndoctype; - property OnDtdComment: TXmlProcessorEvent2 read FOnDtdComment write FOnDtdComment; - property OnDtdProcessingInstruction: TXmlProcessorEvent3 read FOnDtdProcessingInstruction write FOnDtdProcessingInstruction; - property OnElementTypeDeclaration: TXmlProcessorEvent11 read FOnElementTypeDeclaration write FOnElementTypeDeclaration; - property OnEndAttListDeclaration: TXmlProcessorEvent1 read FOnEndAttListDeclaration write FOnEndAttListDeclaration; - property OnEndDocument: TXmlProcessorEvent1 read FOnEndDocument write FOnEndDocument; - property OnEndElement: TXmlProcessorEvent4 read FOnEndElement write FOnEndElement; - property OnEndExtDtd: TXmlProcessorEvent1 read FOnEndExtDtd write FOnEndExtDtd; - property OnEndIntDtd: TXmlProcessorEvent1 read FOnEndIntDtd write FOnEndIntDtd; - property OnEndPrefixMapping: TXmlProcessorEvent2 read FOnEndPrefixMapping write FOnEndPrefixMapping; - property OnEntityDeclaration: TXmlProcessorEvent12 read FOnEntityDeclaration write FOnEntityDeclaration; - property OnEntityRef: TXmlProcessorEvent2 read FOnEntityRef write FOnEntityRef; - property OnNotationDeclaration: TXmlProcessorEvent13 read FOnNotationDeclaration write FOnNotationDeclaration; - property OnParameterEntityDeclaration: TXmlProcessorEvent14 read FOnParameterEntityDeclaration write FOnParameterEntityDeclaration; - property OnParameterEntityRef: TXmlProcessorEvent2 read FOnParameterEntityRef write FOnParameterEntityRef; - property OnPCDATA: TXmlProcessorEvent2 read FOnPCDATA write FOnPCDATA; - property OnProcessingInstruction: TXmlProcessorEvent3 read FOnProcessingInstruction write FOnProcessingInstruction; - property OnSkippedEntity: TXmlProcessorEvent2 read FOnSkippedEntity write FOnSkippedEntity; - property OnStartAttListDeclaration: TXmlProcessorEvent2 read FOnStartAttListDeclaration write FOnStartAttListDeclaration; - property OnStartDocument: TXmlProcessorEvent16 read FOnStartDocument write FOnStartDocument; - property OnStartElement: TXmlProcessorEvent5 read FOnStartElement write FOnStartElement; - property OnStartExtDtd: TXmlProcessorEvent15 read FOnStartExtDtd write FOnStartExtDtd; - property OnStartIntDtd: TXmlProcessorEvent1 read FOnStartIntDtd write FOnStartIntDtd; - property OnStartPrefixMapping: TXmlProcessorEvent7 read FOnStartPrefixMapping write FOnStartPrefixMapping; - end; - - TXmlStandardHandler = class(TXmlCustomHandler) - protected - FNextHandler: TXmlCustomHandler; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - public - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; override; - procedure notifyReset; override; - published - property NextHandler: TXmlCustomHandler read FNextHandler write FNextHandler; - end; - - TXmlDistributor = class; - - TXmlHandlerItem = class(TCollectionItem) - protected - FXmlHandler: TXmlCustomHandler; - function getXmlHandler: TXmlCustomHandler; - procedure setXmlHandler(Value: TXmlCustomHandler); - public - procedure Assign(Source: TPersistent); override; - published - property XmlHandler: TXmlCustomHandler read getXmlHandler write setXmlHandler; - end; - - TXmlHandlers = class(TCollection) - private - FDistributor: TXmlDistributor; - protected - function GetItem(Index: Integer): TXmlHandlerItem; virtual; - procedure SetItem(Index: Integer; Value: TXmlHandlerItem); virtual; - function GetOwner: TPersistent; override; - public - constructor Create(Distributor: TXmlDistributor); - function Add: TXmlHandlerItem; - procedure Assign(Source: TPersistent); override; - function FindHandlerItem(AHandler: TXmlCustomHandler): TXmlHandlerItem; - property Distributor: TXmlDistributor read FDistributor; - property Items[Index: Integer]: TXmlHandlerItem read GetItem write SetItem; default; - end; - - TXmlDistributor = class(TXmlCustomHandler) - private - procedure readData(Reader: TReader); - procedure writeData(Writer: TWriter); - protected - FNextHandlers: TXmlHandlers; - procedure DefineProperties(Filer: TFiler); override; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - procedure setNextHandlers(const value: TXmlHandlers); - public - constructor create(AOwner: TComponent); override; - destructor destroy; override; - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encDl: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; override; - procedure notifyReset; override; - published - property NextHandlers: TXmlHandlers read FNextHandlers write setNextHandlers; - end; - - TXmlCustomDTDHandler = class(TXmlStandardHandler) - public - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - end; - - TXmlCustomContentHandler = class(TXmlStandardHandler) - public - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encDl: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - end; - - TXmlCustomReader = class(TComponent) - private - FDOMImpl: TDomImplementation; - FNextHandler: TXmlStandardHandler; - procedure setDomImpl(const impl: TDomImplementation); - protected - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - function sendErrorNotification(const xmlErrorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString): boolean; virtual; - public - constructor create(AOwner: TComponent); override; - published - property DOMImpl: TDomImplementation read FDomImpl write setDomImpl; - property NextHandler: TXmlStandardHandler read FNextHandler write FNextHandler; - end; - - TXmlWFTestContentHandler = class(TXmlCustomContentHandler) - protected - FIsActive: boolean; - FDoctypeFound: boolean; - FRootFound: boolean; - FTestRootFound: boolean; - FTagStack: TdomWideStringList; - public - constructor create(AOwner: TComponent); override; - destructor destroy; override; - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - procedure notifyReset; override; - property isActive: boolean read FIsActive; - property testRootFound: boolean read FTestRootFound write FTestRootFound default true; - end; - - TXmlWFTestDTDHandler = class(TXmlCustomDtdHandler) - protected - FAttListDeclActive: boolean; - FExtDtdIsActive: boolean; - FIntDtdIsActive: boolean; - public - constructor create(AOwner: TComponent); override; - destructor destroy; override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - procedure notifyReset; override; - property extDtdIsActive: boolean read FExtDtdIsActive; - property intDtdIsActive: boolean read FIntDtdIsActive; - end; - - TXmlDocBuilder = class(TXmlCustomContentHandler) - private - FBuildNamespaceTree: boolean; - protected - FRefNode: TdomNode; - FPrefixUriList: TdomNameValueList; - public - constructor create(AOwner: TComponent); override; - destructor destroy; override; - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - procedure notifyReset; override; - property referenceNode: TdomNode read FRefNode write FRefNode; - published - property BuildNamespaceTree: boolean read FBuildNamespaceTree write FBuildNamespaceTree default false; - end; - - TXmlDtdBuilder = class(TXmlCustomContentHandler) - protected - FExtDtdIsActive: boolean; - FIntDtdIsActive: boolean; - FReferenceExtCM: TdomCMExternalObject; - FReferenceIntCM: TdomCMInternalObject; - FRefNode: TdomCMNode; - procedure resolveCharRefsAndPERefs(const s: wideString; - var result: wideString; - var error: boolean); virtual; - procedure insertMixedContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); virtual; - procedure insertChildrenContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); virtual; - procedure insertNotationOrEnumerationContent(const sender: TXmlCustomReader; - const refCMAttrDefinition: TdomCMAttrDefinition; - const contSpec: wideString); virtual; - function getExtContentModel: TdomCMExternalObject; virtual; - function getIntContentModel: TdomCMInternalObject; virtual; - procedure setExtContentModel(const cm: TdomCMExternalObject); virtual; - procedure setIntContentModel(const cm: TdomCMInternalObject); virtual; - public - constructor create(AOwner: TComponent); override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; override; - procedure notifyReset; override; - property extContentModel: TdomCMExternalObject read getExtContentModel write setExtContentModel; - property extDtdIsActive: boolean read FExtDtdIsActive; - property intContentModel: TdomCMInternalObject read getIntContentModel write setIntContentModel; - property intDtdIsActive: boolean read FIntDtdIsActive; - end; - - TXmlCMBuilder = class(TXmlCustomContentHandler) - protected - FContentModel: TdomCMObject; - FCurrentAttListName: wideString; - FIsActive: boolean; - procedure CDataNormalization(const s: wideString; - var result: wideString; - var error: boolean); virtual; - function getContentModel: TdomCMObject; virtual; - procedure insertMixedContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); virtual; - procedure insertChildrenContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); virtual; - procedure insertNotationOrEnumerationContent(const sender: TXmlCustomReader; - const refCMAttribute: TdomCMAttribute; - const contSpec: wideString); virtual; - procedure resolveCharRefsAndPERefs(const s: wideString; - var result: wideString; - var error: boolean); virtual; - procedure setContentModel(const cm: TdomCMObject); virtual; - public - constructor create(AOwner: TComponent); override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - literalValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; override; - procedure notifyReset; override; - property contentModel: TdomCMObject read getContentModel write setContentModel; - property isActive: boolean read FIsActive; - end; - - TXmlStreamBuilder = class(TXmlStandardHandler) - private - FCurrentEncodingType: TdomEncodingType; - FDefaultEncoding: wideString; - FDefaultEncodingType: TdomEncodingType; - FDestination: TStream; - FNewLine: TdomNewLineType; - procedure setDefaultEncoding(const value: wideString); - procedure setDestination(const value: TStream); - procedure setNewLine(const value: TdomNewLineType); - protected - function writeWideString(const sender: TXmlCustomReader; - const locator: TdomLocator; - const xmlStrg: wideString): boolean; virtual; - function writeWideStrings(const sender: TXmlCustomReader; - const locator: TdomLocator; - const xmlStrgs: array of wideString): boolean; virtual; - public - constructor create(aOwner: TComponent); override; - function CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; override; - function endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; override; - function endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; override; - function entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; override; - function startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; override; - function startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; override; - function attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; override; - function conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; override; - function DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; override; - function DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; override; - function elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; override; - function endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; override; - function notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; override; - function parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; override; - function parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; override; - function startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; override; - function startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; override; - function resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; override; - procedure notifyReset; override; - property currentEncodingType: TdomEncodingType read FCurrentEncodingType; - property defaultEncoding: wideString read FDefaultEncoding write SetDefaultEncoding; - property defaultEncodingType: TdomEncodingType read FDefaultEncodingType; - property destination: TStream read FDestination write setDestination; - published - property newLine: TdomNewLineType read FNewLine write setNewLine default nltCRLF; - end; - - TXmlStandardDocReader = class (TXmlCustomReader) - protected - FPrefixMapping: boolean; - FPrefixMappingStack: TList; - FSuppressXmlns: boolean; - function analyzeElement(const locator: TdomLocator; - const source: wideString; - out tagName: wideString; - const attributes: TdomNameValueList): boolean; virtual; - procedure clearPrefixMappingStack; virtual; - function writeProcessingInstruction(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeComment(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeCDATA(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writePCDATA(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeStartDocument(const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; virtual; - function writeStartElement(const locator: TdomLocator; - const content: wideString; - out tagName: wideString): boolean; virtual; - function writeStartPrefixMapping(const locator: TdomLocator; - prefix, - uri: wideString): boolean; virtual; - function writeEndDocument(const locator: TdomLocator): boolean; virtual; - function writeEndElement(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeEndPrefixMapping(const locator: TdomLocator; - prefix: wideString): boolean; virtual; - function writeEmptyElement(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeCharRef(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeEntityRef(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeDoctype(const locator: TdomLocator; - const content: wideString): boolean; virtual; - public - constructor create(AOwner: TComponent); override; - destructor destroy; override; - function parse(const inputSource: TXmlInputSource):boolean; virtual; - published - property PrefixMapping: boolean read FPrefixMapping write FPrefixMapping; - property SuppressXmlns: boolean read FSuppressXmlns write FSuppressXmlns; - end; - - TXmlStandardDtdReader = class (TXmlCustomReader) - private - function findNextAttDef(const Decl: wideString; - var aname, - attType, - Bracket, - defaultDecl, - attValue, - Rest: wideString): boolean; - protected - function includeAsPE(const inputSource: TXmlInputSource; - var s: wideString): boolean; virtual; - function includeInLiteral(const inputSource: TXmlInputSource; - var s: wideString): boolean; virtual; - function writeConditionalSection(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeDTDProcessingInstruction(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeDTDComment(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeParameterEntityRef(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeEntityDeclaration(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeElementDeclaration(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeAttributeDeclaration(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeNotationDeclaration(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeStartExtDtd(const locator: TdomLocator; - version, - encName: wideString): boolean; virtual; - function writeStartIntDtd(const locator: TdomLocator): boolean; virtual; - public - function parseExternalSubset(const inputSource: TXmlInputSource):boolean; virtual; - function parseInternalSubset(const inputSource: TXmlInputSource):boolean; virtual; - end; - - TXmlCustomDomReader = class (TXmlCustomReader) - protected - FPrefixMapping: boolean; - FSuppressXmlns: boolean; - function parseloop(const sourceNode: TdomNode): boolean; virtual; - function writeCDATA(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeCharRef(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeComment(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeDoctype(const locator: TdomLocator; - const aname, - publicId, - systemId, - intSubset: wideString): boolean; virtual; - function writeEmptyElement(const locator: TdomLocator; - const tagName: wideString; - const attributeList: TdomNameValueList): boolean; virtual; - function writeEndDocument(const locator: TdomLocator): boolean; virtual; - function writeEndElement(const locator: TdomLocator; - const tagName: wideString): boolean; virtual; - function writeEndPrefixMapping(const locator: TdomLocator; - prefix: wideString): boolean; virtual; - function writeEntityRef(const locator: TdomLocator; - const entityName: wideString): boolean; virtual; - function writePCDATA(const locator: TdomLocator; - const content: wideString): boolean; virtual; - function writeProcessingInstruction(const locator: TdomLocator; - const targ, - attribSequence : wideString): boolean; virtual; - function writeStartDocument(const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; virtual; - function writeStartElement(const locator: TdomLocator; - const tagName: wideString; - const attributeList: TdomNameValueList): boolean; virtual; - function writeStartPrefixMapping(const locator: TdomLocator; - prefix, - uri: wideString): boolean; virtual; - property PrefixMapping: boolean read FPrefixMapping write FPrefixMapping; - property SuppressXmlns: boolean read FSuppressXmlns write FSuppressXmlns; - public - constructor create(AOwner: TComponent); override; - end; - - TXmlStandardDomReader = class (TXmlCustomDomReader) - public - function parse(const sourceNode: TdomNode): boolean; virtual; - published - property PrefixMapping; - property SuppressXmlns; - end; - - TXmlStandardCMReader = class (TXmlCustomReader) - protected - function writeAttributeDefinition(const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; virtual; - function writeDTDComment(const locator: TdomLocator; - content: wideString): boolean; virtual; - function writeDTDProcessingInstruction(const locator: TdomLocator; - targ, - attribSequence : wideString): boolean; virtual; - function writeElementTypeDeclaration(const locator: TdomLocator; - aname, - data: wideString): boolean; virtual; - function writeEndAttListDeclaration(const locator: TdomLocator): boolean; virtual; - function writeEndExtDtd(const locator: TdomLocator): boolean; virtual; - function writeEndIntDtd(const locator: TdomLocator): boolean; virtual; - function writeEntityDeclaration(const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; virtual; - function writeNotationDeclaration(const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; virtual; - function writeParameterEntityRef(const locator: TdomLocator; - content: wideString): boolean; virtual; - function writeStartAttListDeclaration(const locator: TdomLocator; - aname: wideString): boolean; virtual; - function writeStartExtDtd(const locator: TdomLocator; - version, - encName: wideString): boolean; virtual; - function writeStartIntDtd(const locator: TdomLocator): boolean; virtual; - function parseloop(const sourceCMNode: TdomCMNode): boolean; virtual; - public - function parse(const sourceCMNode: TdomCMNode): boolean; virtual; - end; - - TXmlCustomParser = class (TComponent) - private - FDOMImpl: TDomImplementation; - protected - procedure setDomImpl(const impl: TDomImplementation); virtual; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; - published - constructor create(aOwner: TComponent); override; - property DOMImpl: TDomImplementation read FDOMImpl write setDomImpl; - end; - - TXmlCMAnalyzer = class (TXmlCustomParser) - protected - FCMReader: TXmlStandardCMReader; - FCMBuilder: TXmlCMBuilder; // xxx will be replaced by TXmlASBuilder in the future. - FDtdReader: TXmlStandardDtdReader; - procedure setDomImpl(const impl: TDomImplementation); override; - public - constructor create(aOwner: TComponent); override; - destructor destroy; override; - function analyzeCM(const source: TdomCustomCMIEObject; - const target: TdomCMObject): boolean; virtual; - procedure analyzeIntDTDStr( str: wideString; - const target: TdomCMObject); virtual; - end; - - TXmlToDomParser = class (TXmlCustomParser) - protected - FDtdBuilder: TXmlDtdBuilder; - FDtdReader: TXmlStandardDtdReader; - FDocBuilder: TXmlDocBuilder; - FDocReader: TXmlStandardDocReader; - FTabWidth: integer; - FWFTestContentHandler: TXmlWFTestContentHandler; - FWFTestDtdHandler: TXmlWFTestDtdHandler; - procedure doExternalSubset(const parentSystemId: wideString; - var publicId, - systemId: wideString; - var stream: TStream; - var action: TXmlParserAction); virtual; - function processDocFile(const pubId, - sysId: wideString): boolean; virtual; - function processDocSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; virtual; - function processDocStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; virtual; - function processDocString(const str: String; - const pubId, - sysId: wideString): boolean; virtual; - function processDocWideString(str: wideString; - const pubId, - sysId: wideString): boolean; virtual; - function processDtd(const doc: TdomDocument): boolean; virtual; - function processExtDtdFile(const pubId, - sysId: wideString): boolean; virtual; - function processExtDtdSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; virtual; - function processExtDtdStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; virtual; - function processExtDtdString(const str: String; - const pubId, - sysId: wideString): boolean; virtual; - function processExtDtdWideString(str: wideString; - const pubId, - sysId: wideString): boolean; virtual; - function processIntDtdFile(const pubId, - sysId: wideString): boolean; virtual; - function processIntDtdSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; virtual; - function processIntDtdStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; virtual; - function processIntDtdString(const str: String; - const pubId, - sysId: wideString): boolean; virtual; - function processIntDtdWideString(str: wideString; - const pubId, - sysId: wideString): boolean; virtual; - function sendErrorNotification(const xmlErrorType: TXmlErrorType): boolean; virtual; - procedure setDomImpl(const impl: TDomImplementation); override; - procedure setTabWidth(const value: integer); virtual; - public - constructor create(aOwner: TComponent); override; - procedure docSourceCodeToDom(const docSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomNode); virtual; - procedure docStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomNode); virtual; - procedure docStringToDom(const Str: string; - const pubId, - sysId: wideString; - const refNode: TdomNode); virtual; - procedure docWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomNode); virtual; - procedure extDtdSourceCodeToDom(const ExtDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure extDtdStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure extDtdStringToDom(const str: string; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure extDtdWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure intDtdSourceCodeToDom(const IntDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure intDtdStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure intDtdStringToDom(const str: string; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - procedure intDtdWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); virtual; - function fileToDom(const filename: TFileName): TdomDocument; virtual; - function sourceCodeToDom(const sc: TXmlSourceCode): TdomDocument; virtual; - function streamToDom(const stream: TStream): TdomDocument; virtual; - function stringToDom(const str: String): TdomDocument; virtual; - function wideStringToDom(str: wideString): TdomDocument; virtual; - published - property TabWidth: integer read FTabWidth write setTabWidth default 1; - end; - - TDomToXmlParser = class (TXmlCustomParser) - protected - FStreamBuilder: TXmlStreamBuilder; - FDomReader: TXmlStandardDomReader; - function getNewLine: TdomNewLineType; virtual; - procedure setNewLine(const value: TdomNewLineType); virtual; - public - constructor create(aOwner: TComponent); override; - function writeToStream(const wnode: TdomNode; - const encoding: wideString; - const destination: TStream): boolean; virtual; - function writeToString(const wnode: TdomNode; - const encoding: wideString; - out S: string): boolean; virtual; - function writeToWideString(const wnode: TdomNode; - out S: wideString): boolean; virtual; - published - property newLine: TdomNewLineType read getNewLine write setNewLine; - end; - - TCMToXmlParser = class (TXmlCustomParser) - protected - FStreamBuilder: TXmlStreamBuilder; - FCMReader: TXmlStandardCMReader; - function getNewLine: TdomNewLineType; virtual; - procedure setNewLine(const value: TdomNewLineType); virtual; - public - constructor create(aOwner: TComponent); override; - function writeToStream(const wnode: TdomCMNode; - const encoding: wideString; - const destination: TStream): boolean; virtual; - function writeToString(const wnode: TdomCMNode; - const encoding: wideString; - out S: string): boolean; virtual; - function writeToWideString(const wnode: TdomCMNode; - out S: wideString): boolean; virtual; - published - property newLine: TdomNewLineType read getNewLine write setNewLine; - end; - -{DOM XPath} - TdomXPathTokenType = ( XPATH_LEFT_PARENTHESIS_TOKEN, - XPATH_RIGHT_PARENTHESIS_TOKEN, - XPATH_LEFT_SQUARE_BRACKET_TOKEN, - XPATH_RIGHT_SQUARE_BRACKET_TOKEN, - XPATH_SINGLE_DOT_TOKEN, - XPATH_DOUBLE_DOT_TOKEN, - XPATH_COMMERCIAL_AT_TOKEN, - XPATH_COMMA_TOKEN, - XPATH_DOUBLE_COLON_TOKEN, - XPATH_NAME_TEST_TOKEN, - XPATH_NODE_TYPE_COMMENT_TOKEN, - XPATH_NODE_TYPE_TEXT_TOKEN, - XPATH_NODE_TYPE_PI_TOKEN, - XPATH_NODE_TYPE_NODE_TOKEN, - XPATH_AND_OPERATOR_TOKEN, - XPATH_OR_OPERATOR_TOKEN, - XPATH_MOD_OPERATOR_TOKEN, - XPATH_DIV_OPERATOR_TOKEN, - XPATH_MULTIPLY_OPERATOR_TOKEN, - XPATH_SLASH_OPERATOR_TOKEN, - XPATH_SHEFFER_STROKE_OPERATOR_TOKEN, - XPATH_PLUS_OPERATOR_TOKEN, - XPATH_MINUS_OPERATOR_TOKEN, - XPATH_IS_EQUAL_OPERATOR_TOKEN, - XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN, - XPATH_LESS_THAN_OPERATOR_TOKEN, - XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_FUNCTION_NAME_TOKEN, - XPATH_AXIS_NAME_ANCESTOR_TOKEN, - XPATH_AXIS_NAME_ANCESTOR_OR_SELF_TOKEN, - XPATH_AXIS_NAME_ATTRIBUTE_TOKEN, - XPATH_AXIS_NAME_CHILD_TOKEN, - XPATH_AXIS_NAME_DESCENDANT_TOKEN, - XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN, - XPATH_AXIS_NAME_FOLLOWING_TOKEN, - XPATH_AXIS_NAME_FOLLOWING_SIBLING_TOKEN, - XPATH_AXIS_NAME_NAMESPACE_TOKEN, - XPATH_AXIS_NAME_PARENT_TOKEN, - XPATH_AXIS_NAME_PRECEDING_TOKEN, - XPATH_AXIS_NAME_PRECEDING_SIBLING_TOKEN, - XPATH_AXIS_NAME_SELF_TOKEN, - XPATH_LITERAL_TOKEN, - XPATH_NUMBER_TOKEN, - XPATH_VARIABLE_REFERENCE_TOKEN, - XPATH_END_OF_TEXT_TOKEN, - XPATH_INVALID_TOKEN - ); - - TdomXPathAxisType = ( XPATH_FORWARD_AXIS, XPATH_REVERSE_AXIS ); - - TdomXPathSyntaxNode = class; - - TdomXPathSyntaxNodeStack = class - private - FNodeList: TList; - protected - function getLength: integer; virtual; - public - constructor create; virtual; - destructor destroy; override; - procedure clear; virtual; - function peek(offset: integer): TdomXPathSyntaxNode; virtual; - function pop: TdomXPathSyntaxNode; virtual; - function push(node: TdomXPathSyntaxNode): TdomXPathSyntaxNode; virtual; - property length: integer read getLength; - end; - - TdomXPathSyntaxNode = class - protected - FLeft: TdomXPathSyntaxNode; - FRight: TdomXPathSyntaxNode; - FValue: wideString; - public - constructor create(const value: wideString); virtual; - destructor destroy; override; - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; virtual; - property left: TdomXPathSyntaxNode read FLeft write FLeft; - property right: TdomXPathSyntaxNode read FRight write FRight; - property value: wideString read FValue; - end; - - // Cf. XPath 1.0, prod. [2]. - TdomXPathAbsoluteLocationPath = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [4]. - TdomXPathStep = class(TdomXPathSyntaxNode) - public - function addStep(const step: TdomXPathStep): boolean; virtual; - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [6]. - // This class is only used as a common ancestor of the axis name classes below. - TdomXPathCustomAxisName = class(TdomXPathSyntaxNode) - protected - FAxisType: TdomXPathAxisType; - FPrincipalNodeType: TdomNodeType; - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; virtual; abstract; - public - constructor create(const avalue: wideString); override; - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; virtual; - property axisType: TdomXPathAxisType read FAxisType; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameAncestor = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameAncestorOrSelf = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameAttribute = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameChild = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameDescendant = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameDescendantOrSelf = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameFollowing = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameFollowingSibling = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameNamespace = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameParent = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNamePreceding = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNamePrecedingSibling = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - public - constructor create(const avalue: wideString); override; - end; - - // Cf. XPath 1.0, prod. [6]. - TdomXPathAxisNameSelf = class(TdomXPathCustomAxisName) - protected - function getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; override; - end; - - // Cf. XPath 1.0, prod. [7]. - TdomXPathNodeTest = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldsnapshotResult: TdomXPathSnapshotResult; - const principalNodeType: TdomNodeType; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [8]. - TdomXPathPredicate = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [14]. - TdomXPathExpr = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [15]. - TdomXPathPrimaryExpr = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [16]. - TdomXPathFunctionCall = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [17]. - TdomXPathArgument = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [18]. - TdomXPathUnionExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [19]. - TdomXPathPathExpr = class(TdomXPathSyntaxNode) - public - function addStep(const step: TdomXPathStep): boolean; virtual; - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [20]. - TdomXPathFilterExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [21]. - TdomXPathOrExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [22]. - TdomXPathAndExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [23]. - TdomXPathIsEqualExpr = class(TdomXPathSyntaxNode) - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [23]. - TdomXPathIsNotEqualExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [24]. - TdomXPathLessThanExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [24]. - TdomXPathLessThanOrEqualExpr = class(TdomXPathSyntaxNode) - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [24]. - TdomXPathGreaterThanExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [24]. - TdomXPathGreaterThanOrEqualExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [25]. - TdomXPathPlusExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [25]. - TdomXPathMinusExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [26]. - TdomXPathMultiplyExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [26]. - TdomXPathDivExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [26]. - TdomXPathModExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [27]. - TdomXPathUnaryExpr = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathLeftParenthesis = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathRightParenthesis = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathLeftSquareBracket = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathRightSquareBracket = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathSingleDot = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathDoubleDot = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathCommercialAt = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathComma = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [28]. - TdomXPathDoubleColon = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [29]. - TdomXPathLiteral = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [30]. - TdomXPathNumber = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathSlashOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathShefferStrokeOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathPlusOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathMinusOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathIsEqualOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathIsNotEqualOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathLessThanOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathLessThanOrEqualOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathGreaterThanOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [32]. - TdomXPathGreaterThanOrEqualOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [33]. - TdomXPathAndOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [33]. - TdomXPathOrOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [33]. - TdomXPathModOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [33]. - TdomXPathDivOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [34]. - TdomXPathMultiplyOperator = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [35]. - TdomXPathFunctionName = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [36]. - TdomXPathVariableReference = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - end; - - // Cf. XPath 1.0, prod. [37]. - TdomXPathNameTest = class(TdomXPathSyntaxNode) - protected - FPrefix: wideString; - FLocalName: wideString; - public - constructor create(const avalue: wideString); override; - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const principalNodeType: TdomNodeType; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [38]. - TdomXPathNodeTypeComment = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [38]. - TdomXPathNodeTypeNode = class(TdomXPathSyntaxNode) - end; - - // Cf. XPath 1.0, prod. [38]. - TdomXPathNodeTypePI = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; virtual; - end; - - // Cf. XPath 1.0, prod. [38]. - TdomXPathNodeTypeText = class(TdomXPathSyntaxNode) - public - function evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; override; - function evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; virtual; - end; - - TdomXPathSlashStatus = ( SL_NO_DOUBLE_SLASH, - SL_XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN_FOLLOWS, - SL_XPATH_DOUBLE_COLON_TOKEN_FOLLOWS, - SL_XPATH_NODE_TYPE_NODE_TOKEN_FOLLOWS, - SL_XPATH_LEFT_PARENTHESIS_FOLLOWS, - SL_XPATH_RIGHT_PARENTHESIS_FOLLOWS, - SL_XPATH_SLASH_OPERATOR_TOKEN_FOLLLOWS ); - - TdomXPathTokenizer = class - protected - FCacheIsActive: boolean; - FDoubleSlashStatus: TdomXPathSlashStatus; - FExpression: wideString; - FLastSymbol: TdomXPathTokenType; - FPosition: integer; - FPositionCache: integer; - FSymbolCache: TdomXPathTokenType; - FValueCache: wideString; - function doubleColonFollows: boolean; virtual; - function getNextWideChar(out s: wideChar): boolean; virtual; - function leftParanthesisFollows: boolean; virtual; - function lookAheadNextWideChar(out s: wideChar): boolean; virtual; - public - constructor create(const expression: wideString; - const xpathVersion: wideString); virtual; - function isFollowing(const symbol: TdomXPathTokenType): boolean; virtual; - procedure read(out symbol: TdomXPathTokenType; - out value: wideString; - out position: integer); virtual; - procedure reset; virtual; - end; - - TdomXPathExpression = class - protected - FIsPrepared: boolean; // Indicates whether the syntax tree has already been build. - FIsValid: boolean; // Indicates whether there was a syntax error found during preparation. - FExpression: wideString; // Holds the expression to be evaluated. - FOwnerDocument: TdomDocument; // The Document that created this XPath Expression. - FResolver: TdomXPathNSResolver; // Points to the namespace resolver to be used. - FSyntaxTree: TdomXPathExpr; // Holds the root node of the XPath syntax tree if the expression was valid. - function createSyntaxNode(const symbol: TdomXPathTokenType; - const value: wideString): TdomXPathSyntaxNode; virtual; - public - constructor create(const aOwner: TdomDocument; - const expression: wideString; - const resolver: TdomXPathNSResolver); virtual; - function evaluate(const contextNode: TdomNode; - const typeCodes: TdomXPathResultTypes; - const oldResult: TdomXPathResult): TdomXPathResult; virtual; - function prepare: boolean; virtual; - end; - - TdomXPathNSResolver = class - protected - FPrefixUriList: TdomNameValueList; - public - constructor create(const resolverNode: TdomNode); virtual; - destructor destroy; override; - function lookupNamespaceURI(const prefix: wideString): wideString; virtual; - end; - - TdomXPathResult = class - protected - FResultType: TdomXPathResultType; - public - property resultType: TdomXPathResultType read FResultType; - end; - - TdomXPathSnapshotResult = class(TdomXPathResult) - protected - FAxisType: TdomXPathAxisType; - FList: TList; - procedure add(const node: TdomNode); virtual; - procedure addSnapshotResult(const ir: TdomXPathSnapshotResult); virtual; - procedure addSubtree(const node: TdomNode); virtual; - procedure delete(const index: integer); virtual; - function getSnapshotLength: integer; virtual; - procedure setAxisType(const value: TdomXPathAxisType); virtual; - property axisType: TdomXPathAxisType read FAxisType write setAxisType default XPATH_FORWARD_AXIS; - public - constructor create; virtual; - destructor destroy; override; - function snapshotItem(const index: integer): TdomNode; virtual; - property snapshotLength: integer read getSnapshotLength; - end; - - TdomXPathBooleanResult = class(TdomXPathResult) - protected - FBooleanValue: boolean; - public - constructor create(const aBooleanValue: boolean); virtual; - property booleanValue: boolean read FBooleanValue; - end; - - TdomXPathNumberResult = class(TdomXPathResult) - protected - FNumberValue: double; - public - constructor create(const aNumberValue: double); virtual; - property numberValue: double read FNumberValue; - end; - - TdomXPathStringResult = class(TdomXPathResult) - protected - FStringValue: wideString; - public - constructor create(const aStringValue: wideString); virtual; - property stringValue: wideString read FStringValue; - end; - -// XPathFunctions -function XPathBooleanFunc(const oldResult: TdomXPathResult): TdomXPathBooleanResult; -function XPathNumberFunc(const oldResult: TdomXPathResult): TdomXPathNumberResult; -function XPathStringFunc(const oldResult: TdomXPathResult): TdomXPathStringResult; - -// WideString Handling Routines -function trimWhitespace(S: wideString): wideString; -function trimWhitespaceLeft(S: wideString): wideString; -function trimWhitespaceRight(S: wideString): wideString; - -// Routines for XML Namespace Processing -function xmlExtractPrefix(const qualifiedName: wideString): wideString; -function xmlExtractLocalName(const qualifiedName: wideString): wideString; -function xmlExtractPrefixAndLocalName(const qualifiedName: wideString; - out prefix, - localName: wideString): boolean; - -// Routines for Testing XML Rules -function isXmlChar(const S: WideChar): boolean; -function IsXmlWhiteSpace(const S: WideChar): boolean; -function isXmlLetter(const S: WideChar): boolean; -function isXmlBaseChar(const S: WideChar): boolean; -function isXmlIdeographic(const S: WideChar): boolean; -function isXmlCombiningChar(const S: WideChar): boolean; -function isXmlDigit(const S: WideChar): boolean; -function isXmlExtender(const S: WideChar): boolean; -function isXmlNameChar(const S: WideChar): boolean; -function isXmlPubidChar(const S: WideChar): boolean; - -function isXmlChars(const S: wideString): boolean; -function isXmlS(const S: wideString): boolean; -function isXmlName(const S: wideString): boolean; -function isXmlNames(const S: wideString): boolean; -function isXmlNmtoken(const S: wideString): boolean; -function isXmlNmtokens(const S: wideString): boolean; -function isXmlCharRef(const S: wideString): boolean; -function isXmlEntityRef(const S: wideString): boolean; -function isXmlPEReference(const S: wideString): boolean; -function isXmlReference(const S: wideString): boolean; -function isXmlEntityValue(const S: wideString): boolean; -function isXmlEntityValueChars(const S: wideString): boolean; -function isXmlAttValue(const S: wideString): boolean; -function isXmlSystemLiteral(const S: wideString): boolean; -function isXmlSystemChars(const S: wideString): boolean; -function isXmlPubidLiteral(const S: wideString): boolean; -function isXmlPubidChars(const S: wideString): boolean; -function isXmlComment(const S: wideString): boolean; -function isXmlCData(const S: wideString): boolean; -function isXmlCharData(const S: wideString): boolean; -function isXmlPITarget(const S: wideString): boolean; -function isXmlVersionNumChar(const S: WideChar): boolean; -function isXmlVersionNum(const S: wideString): boolean; -function isXmlEncNameLeadingChar(const s: WideChar): boolean; -function isXmlEncNameFollowingChar(const s: WideChar): boolean; -function isXmlEncName(const S: wideString): boolean; -function isXmlStringType(const S: wideString): boolean; -function isXmlTokenizedType(const S: wideString): boolean; - -function isXmlNCNameChar(const s: WideChar): boolean; -function isXmlNCName(const S: wideString): boolean; -function isXmlDefaultAttName(const S: wideString): boolean; -function isXmlPrefixedAttName(const S: wideString): boolean; -function isXmlNSAttName(const S: wideString): boolean; -function isXmlLocalPart(const S: wideString): boolean; -function isXmlPrefix(const S: wideString): boolean; -function isXmlQName(const S: wideString): boolean; - -// Character Encoding Conversion -function resolveCharRefs(const S: wideString): wideString; -function xmlIntToCharRef(const value: integer): wideString; -function xmlCharRefToInt(const S: wideString): integer; -function xmlCharRefToStr(const S: wideString): wideString; -function xmlStrToCharRef(const S: wideString): wideString; - -// Augmented Backus-Naur Form (ABNF) Core Rules (cf. RFC 2234, 6.1) -function isAbnfALPHAWideChar(c: wideChar): boolean; -function isAbnfBITWideChar(c: wideChar): boolean; -function isAbnfCHARWideChar(c: wideChar): boolean; -function isAbnfCRWideChar(c: wideChar): boolean; -function isAbnfCRLFWideStr(s: wideString): boolean; -function isAbnfCTLWideChar(c: wideChar): boolean; -function isAbnfDIGITWideChar(c: wideChar): boolean; -function isAbnfDQUOTEWideChar(c: wideChar): boolean; -function isAbnfHEXDIGWideChar(c: wideChar): boolean; -function isAbnfHTABWideChar(c: wideChar): boolean; -function isAbnfLFWideChar(c: wideChar): boolean; -function isAbnfLWSPWideStr(s: wideString): boolean; -function isAbnfOCTETWideChar(c: wideChar): boolean; -function isAbnfSPWideChar(c: wideChar): boolean; -function isAbnfVCHARWideChar(c: wideChar): boolean; -function isAbnfWSPWideChar(c: wideChar): boolean; - -function isAbnfALPHAChar(c: char): boolean; -function isAbnfBITChar(c: char): boolean; -function isAbnfCHARChar(c: char): boolean; -function isAbnfCRChar(c: char): boolean; -function isAbnfCRLFStr(s: string): boolean; -function isAbnfCTLChar(c: char): boolean; -function isAbnfDIGITChar(c: char): boolean; -function isAbnfDQUOTEChar(c: char): boolean; -function isAbnfHEXDIGChar(c: char): boolean; -function isAbnfHTABChar(c: char): boolean; -function isAbnfLFChar(c: char): boolean; -function isAbnfLWSPStr(s: string): boolean; -function isAbnfOCTETChar(c: char): boolean; -function isAbnfSPChar(c: char): boolean; -function isAbnfVCHARChar(c: char): boolean; -function isAbnfWSPChar(c: char): boolean; - -// URI Rules (cf. RFC 2396, App. A) -function isUriURI_referenceWideStr(s: wideString): boolean; -function isUriAbsoluteURIWideStr(s: wideString): boolean; -function isUriRelativeURIWideStr(s: wideString): boolean; -function isUriHier_partWideStr(s: wideString): boolean; -function isUriOpaque_partWideStr(s: wideString): boolean; -function isUriNet_pathWideStr(s: wideString): boolean; -function isUriAbs_pathWideStr(s: wideString): boolean; -function isUriRel_pathWideStr(s: wideString): boolean; -function isUriRel_segmentWideStr(s: wideString): boolean; -function isUriSchemeWideStr(s: wideString): boolean; -function isUriAuthorityWideStr(s: wideString): boolean; -function isUriReg_nameWideStr(s: wideString): boolean; -function isUriServerWideStr(s: wideString): boolean; -function isUriUserinfoWideStr(s: wideString): boolean; -function isUriHostPortWideStr(s: wideString): boolean; -function isUriHostWideStr(s: wideString): boolean; -function isUriHostnameWideStr(s: wideString): boolean; -function isUriDomainlabelWideStr(s: wideString): boolean; -function isUriToplabelWideStr(s: wideString): boolean; -function isUriIPv4addressWideStr(s: wideString): boolean; -function isUriPortWideStr(s: wideString): boolean; -function isUriPathWideStr(s: wideString): boolean; -function isUriPath_segmentsWideStr(s: wideString): boolean; -function isUriSegmentWideStr(s: wideString): boolean; -function isUriParamWideStr(s: wideString): boolean; -function isUriQueryWideStr(s: wideString): boolean; -function isUriFragmentWideStr(s: wideString): boolean; -function isUriUricWideStr(s: wideString): boolean; -function isUriReservedWideChar(c: wideChar): boolean; -function isUriUnreservedWideChar(c: wideChar): boolean; -function isUriMarkWideChar(c: wideChar): boolean; -function isUriHexWideChar(c: wideChar): boolean; -function isUriAlphanumWideChar(c: wideChar): boolean; -function isUriAlphaWideChar(c: wideChar): boolean; -function isUriDigitWideChar(c: wideChar): boolean; - -function isUriURI_referenceStr(s: string): boolean; -function isUriAbsoluteURIStr(s: string): boolean; -function isUriRelativeURIStr(s: string): boolean; -function isUriHier_partStr(s: string): boolean; -function isUriOpaque_partStr(s: string): boolean; -function isUriNet_pathStr(s: string): boolean; -function isUriAbs_pathStr(s: string): boolean; -function isUriRel_pathStr(s: string): boolean; -function isUriRel_segmentStr(s: string): boolean; -function isUriSchemeStr(s: string): boolean; -function isUriAuthorityStr(s: string): boolean; -function isUriReg_nameStr(s: string): boolean; -function isUriServerStr(s: string): boolean; -function isUriUserinfoStr(s: string): boolean; -function isUriHostPortStr(s: string): boolean; -function isUriHostStr(s: string): boolean; -function isUriHostnameStr(s: string): boolean; -function isUriDomainlabelStr(s: string): boolean; -function isUriToplabelStr(s: string): boolean; -function isUriIPv4addressStr(s: string): boolean; -function isUriPortStr(s: string): boolean; -function isUriPathStr(s: string): boolean; -function isUriPath_segmentsStr(s: string): boolean; -function isUriSegmentStr(s: string): boolean; -function isUriParamStr(s: string): boolean; -function isUriQueryStr(s: string): boolean; -function isUriFragmentStr(s: string): boolean; -function isUriUricStr(s: string): boolean; -function isUriReservedChar(c: char): boolean; -function isUriUnreservedChar(c: char): boolean; -function isUriMarkChar(c: char): boolean; -function isUriHexChar(c: char): boolean; -function isUriAlphanumChar(c: char): boolean; -function isUriAlphaChar(c: char): boolean; -function isUriDigitChar(c: char): boolean; - - -function filenameToUriStr(const path: TFilename; - const opt: TdomFilenameToUriOptions): string; -function filenameToUriWideStr(const path: TFilename; - const opt: TdomFilenameToUriOptions): wideString; -function resolveRelativeUriStr(const baseUri, - relUri: string; - var resultUri: string): boolean; -function resolveRelativeUriWideStr(const baseUri, - relUri: wideString; - var resultUri: wideString): boolean; -function uriStrToFilename(const uri: string; - var path: TFilename; - var authority, - query, - fragment: string): boolean; -function uriWideStrToFilename(const uri: wideString; - var path: TFilename; - var authority, - query, - fragment: string): boolean; - -type - TUriStrAnalyzer = class - protected - FUriAuthority: string; - FUriFragment: string; - FUriQuery: string; - FUriPath: string; - FUriScheme: string; - FHasUriAuthority: boolean; - FHasUriFragment: boolean; - FHasUriQuery: boolean; - FHasUriScheme: boolean; - function getUriReference: string; virtual; - public - constructor create; - function setUriAuthority(const Value: string; - const isDefined: boolean): boolean; virtual; - function setUriFragment(const Value: string; - const isDefined: boolean): boolean; virtual; - function setUriPath(const Value: string): boolean; virtual; - function setUriQuery(const Value: string; - const isDefined: boolean): boolean; virtual; - function setUriReference(const Value: string): boolean; virtual; - function setUriScheme(const Value: string; - const isDefined: boolean): boolean; virtual; - property HasUriAuthority: boolean read FHasUriAuthority; - property HasUriFragment: boolean read FHasUriFragment; - property HasUriQuery: boolean read FHasUriQuery; - property HasUriScheme: boolean read FHasUriScheme; - property UriAuthority: string read FUriAuthority; - property UriFragment: string read FUriFragment; - property UriPath: string read FUriPath; - property UriQuery: string read FUriQuery; - property UriReference: string read getUriReference; - property UriScheme: string read FUriScheme; - end; - - TUriWideStrAnalyzer = class - protected - FUriAuthority: wideString; - FUriFragment: wideString; - FUriQuery: wideString; - FUriPath: wideString; - FUriScheme: wideString; - FHasUriAuthority: boolean; - FHasUriFragment: boolean; - FHasUriQuery: boolean; - FHasUriScheme: boolean; - function getUriReference: wideString; virtual; - public - constructor create; - function setUriAuthority(const Value: wideString; - const isDefined: boolean): boolean; virtual; - function setUriFragment(const Value: wideString; - const isDefined: boolean): boolean; virtual; - function setUriPath(const Value: wideString): boolean; virtual; - function setUriQuery(const Value: wideString; - const isDefined: boolean): boolean; virtual; - function setUriReference(const Value: wideString): boolean; virtual; - function setUriScheme(const Value: wideString; - const isDefined: boolean): boolean; virtual; - property HasUriAuthority: boolean read FHasUriAuthority; - property HasUriFragment: boolean read FHasUriFragment; - property HasUriQuery: boolean read FHasUriQuery; - property HasUriScheme: boolean read FHasUriScheme; - property UriAuthority: wideString read FUriAuthority; - property UriFragment: wideString read FUriFragment; - property UriPath: wideString read FUriPath; - property UriQuery: wideString read FUriQuery; - property UriReference: wideString read getUriReference; - property UriScheme: wideString read FUriScheme; - end; - -procedure xmlAnalyseEntityDef( source: wideString; - var entityValue, - systemLiteral, - pubidLiteral, - nDataName: wideString; - var error: boolean); - -procedure xmlAnalyseNotationDecl(const decl: wideString; - var systemLiteral, - pubidLiteral: wideString; - var error: boolean); - -procedure xmlAnalysePCDATA(source: wideString; - var lines: TdomWideStringList); - -function xmlAnalysePubSysId(const publicId, - systemId, - notaName: wideString): wideString; - -procedure xmlAnalyseTag(const source: wideString; - var tagName, - attribSequence: wideString); - -procedure xmlIsolateQuote( source: wideString; - var content, - rest: wideString; - var quoteType: WideChar; - var error: boolean); - -function xmlNormalizeLineBreaks(const source :wideString): wideString; - -function xmlReplaceQuotes(const source: wideString): wideString; - -function xmlTrunc(const source: wideString): wideString; - -procedure xmlTruncAngularBrackets(const source: wideString; - var content: wideString; - var error: boolean); - -procedure xmlTruncRoundBrackets(const source: wideString; - var content: wideString; - var error: boolean); - -procedure writeWideString(stream: TStream; const xmlStrg: wideString); - -procedure writeWideStrings(stream: TStream; const xmlStrgs: array of wideString); - -procedure writeWideChars(stream: TStream; const xmlChars: array of wideChar); - -var - domDocumentFormatList: PdomDocumentFormat = nil; - - -implementation - -resourcestring - SCannotReadOddPos = 'Cannot read WideString from odd byte position'; - SCannotWriteOddPos = 'Cannot write WideString to odd byte position'; - SCapacityLessSize = 'Capacity cannot be less than size'; - SOddSizeInvalid = 'Odd size not valid for WideString'; - SNegativeSizeInvalid = 'Negative stream size invalid'; - SOddPosInvalid = 'Odd byte position not valid for WideString'; - -function xmlNormalizeLineBreaks(const source :wideString): wideString; -const - CR: WideChar = #13; - LF: WideChar = #10; - CRLF: wideString = #13#10; -var - nPos: integer; -begin - Result:= source; - - // CR+LF --> LF - repeat - nPos := Pos(CRLF, Result); - if nPos > 0 then - Delete(Result, nPos, 1); - until nPos = 0; - - // CR --> LF - repeat - nPos := Pos(CR, Result); - if nPos > 0 then - Result[nPos] := LF; - until nPos = 0; -end; - - -procedure xmlAnalysePCDATA(Source: wideString; - var Lines: TdomWideStringList); -// 'Source': The PCDATA-Sequence to be analyzed. -// 'Lines': Returns the content of PCDATA in singles lines containing -// only whitespace or only characters without whitespace. -var - i: integer; - Line: string; -begin - i:= 0; - Lines.clear; - while i < length(Source) do - begin - - // No White-space? - Line:= ''; - while i < length(Source) do - begin - inc(i); - if IsXmlWhiteSpace(Source[i]) then begin dec(i); break; end; - Line:= Line + Source[i]; - end; - if Line <> '' then Lines.Add(Line); - - // White-space? - Line:= ''; - while i < length(Source) do - begin - inc(i); - if not IsXmlWhiteSpace(Source[i]) then begin dec(i); break; end; - Line:= Line + Source[i]; - end; - if Line <> '' then Lines.Add(Line); - - end; -end; - -procedure xmlAnalyseTag(const source: wideString; - var tagName, - AttribSequence: wideString); -// 'Source': The tag, to be analyzed. -// 'tagName': Returns the namen of the tag. -// 'AttribSequence': Returns the Attributes, if existing. -var - i,j,sourceLength : integer; -begin - sourceLength:= length(Source); // buffer storage to increase performance - - // Evaluate tagName: - i:= 1; - while i <= sourceLength do begin - if IsXmlWhiteSpace(Source[i]) then break; - inc(i); - end; - - tagName:= copy(Source,1,i-1); - - // Evaluate Attributes: - while i < sourceLength do begin - inc(i); - if not IsXmlWhiteSpace(Source[i]) then break; - end; - j:= length(Source); - while j >= i do begin - if not IsXmlWhiteSpace(Source[j]) then break; - dec(j); - end; - - AttribSequence:= copy(Source,i,j-i+1); -end; - -procedure XMLAnalyseEntityDef( Source: wideString; - var entityValue, - SystemLiteral, - PubidLiteral, - NDataName: wideString; - var Error: boolean); -// 'Source': The entity definition to be analyzed. -// 'entityValue','SystemLiteral','PubidLiteral','NDataName': -// Return the respective values, if declared. -// 'Error': Returns 'true', if the entity definition is not well-formed. -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -var - dummy: wideString; - i: integer; - intro: wideString; - rest: wideString; - QuoteType: WideChar; - PubidLit: wideString; // = '' - SystemLit: wideString; // = '' -begin - QuoteType:= #0; - rest := ''; - SystemLit := ''; - PubidLit := '';; - entityValue:= ''; - SystemLiteral:= ''; - PubidLiteral:= ''; - NDataName:= ''; - Error:= false; - if Length(Source) < 2 then begin Error:= true; exit; end; - - // Remove leading white space: - i:= 1; - while i <= length(Source) do begin - if not IsXmlWhiteSpace(Source[i]) then break; - inc(i); - end; - if i >= Length(Source) then begin Error:= true; exit; end; - dummy:= copy(Source,i,Length(Source)-i+1); - Source:= dummy; // Necessary, because of Delphi's problem when copying WideStrings. - if (Source[1] = SQ) or (Source[1] = DQ) then begin - XMLIsolateQuote(Source,entityValue,rest,QuoteType,Error); - if Error then exit; - if rest <> '' then begin Error:= true; exit; end; - if not isXmlEntityValueChars(entityValue) - then begin Error:= true; exit; end; - end else begin - intro:= copy(Source,1,6); - if (intro = 'SYSTEM') or (intro = 'PUBLIC') then begin - Dummy:= copy(Source,7,Length(Source)-6); - Source:= dummy; // Necessary, because of Delphi's problem when copying WideStrings. - if Source = '' then begin Error:= true; exit; end; - if not IsXmlWhiteSpace(Source[1]) then begin Error:= true; exit; end; - - if (intro = 'SYSTEM') then begin - XMLIsolateQuote(Source,SystemLit,Source,QuoteType,Error); - if Error then exit; - end else begin - XMLIsolateQuote(Source,PubidLit,Source,QuoteType,Error); - if Error then exit; - if not isXmlPubidChars(PubidLit) - then begin Error:= true; exit; end; - XMLIsolateQuote(Source,SystemLit,Source,QuoteType,Error); - if Error then exit; - end; - - if Source <> '' then begin - if copy(Source,1,5) = 'NDATA' then begin - dummy:= copy(Source,6,Length(Source)-5); - Source:= XmlTrunc(dummy); // Necessary, because of Delphi's problem when copying WideStrings. - if IsXmlName(Source) - then NDataName:= Source - else begin Error:= true; exit; end; - end else begin Error:= true; exit; end; - end; - - end else begin Error:= true; exit; end; - SystemLiteral:= SystemLit; - PubidLiteral:= PubidLit; - end; {if (Source[1] ... } -end; - - -procedure XMLAnalyseNotationDecl(const Decl: wideString; - var SystemLiteral, - PubidLiteral: wideString; - var Error: boolean); -// 'Source': The notation declaration to be analyzed. -// 'SystemLiteral','PubidLiteral','NDataName': -// Return the respective values, if declared. -// 'Error': Returns 'true', if the notation declaration is not well-formed. -var - dummy: wideString; - intro: wideString; - PubidLit: wideString; // = '' - QuoteType: WideChar; - Source: wideString; - SystemLit: wideString; // = '' -begin - SystemLiteral:= ''; - PubidLiteral:= ''; - Error:= false; - if Length(Decl) < 2 then begin Error:= true; exit; end; - - Source:= XMLTrunc(Decl); - intro:= copy(Source,1,6); - - if (intro<>'SYSTEM') and (intro<>'PUBLIC') then begin Error:= true; exit; end; - - Dummy:= copy(Source,7,Length(Source)-6); - Source:= dummy; // Necessary, because of Delphi's problem when copying WideStrings. - if Source = '' then begin Error:= true; exit; end; - if not IsXmlWhiteSpace(Source[1]) then begin Error:= true; exit; end; - - if (intro = 'SYSTEM') then begin - XMLIsolateQuote(Source,SystemLit,dummy,QuoteType,Error); - if Error then exit; - if dummy <> '' then begin Error:= true; exit; end; - end else begin - XMLIsolateQuote(Source,PubidLit,dummy,QuoteType,Error); - Source:= dummy; - if Error then exit; - if not isXmlPubidChars(PubidLit) - then begin Error:= true; exit; end; - if Source <> '' then begin - if not IsXmlSystemLiteral(Source) then begin Error:= true; exit; end; - SystemLit:= copy(Source,2,length(Source)-2); - end; - end; - - SystemLiteral:= SystemLit; - PubidLiteral:= PubidLit; -end; - -function xmlReplaceQuotes(const source: wideString): wideString; -// This function replaces all single and double quotes -// with their respective character references. -var - i: integer; - content: TdomCustomStr; -begin - result:= ''; - content:= TdomCustomStr.create; - try - for i:= 1 to length(source) do begin - case ord(source[i]) of - 39: content.addWideString('''); // Single quote - 34: content.addWideString('"'); // Double quote - else - content.addWideChar(source[i]); - end; - end; - Result:= content.value; - finally - content.free; - end; -end; - -function xmlTrunc(const source: wideString): wideString; -// This function removes all white space at the beginning -// or end of 'Source'. -var - i: integer; -begin - result:= ''; - i:= 1; - while i <= length(Source) do begin - if not IsXmlWhiteSpace(Source[i]) then break; - inc(i); - end; - if i > length(Source) then exit; - result:= copy(Source,i,Length(Source)-i+1); - i:= length(Result); - while i > 0 do begin - if not IsXmlWhiteSpace(Result[i]) then break; - dec(i); - end; - if i = 0 - then result:= '' - else result:= copy(result,1,i); -end; - -function XMLTruncSpace(const Source: wideString): wideString; -// This function removes all spaces (#$20) at the beginning -// or end of 'Source'. -const - SPACE: WideChar = #$20; -var - i,startIndex,endIndex: integer; -begin - startIndex:= length(source)+1; - endIndex:= 0; - for i:= 1 to length(source) do begin - if not (Source[i] = SPACE) then begin - startIndex:= i; - break; - end; - end; - for i:= length(source) downto startIndex do begin - if not (Source[i] = SPACE) then begin - endIndex:= i; - break; - end; - end; - result:= copy(Source,startIndex,endIndex-startIndex+1); -end; - -procedure XMLTruncAngularBrackets(const Source: wideString; - var content: wideString; - var Error: boolean); -{Die Prozedur entfernt evtl. vorhandenen White-Space am Anfang und - Ende von 'Source', prüft dann, ob der verbleibende wideString durch - eckige KLammern -- '[' und ']' -- eingerahmt wird. Ist dies der Fall, - wird der Klammer-Inhalt in 'content' zurückgegeben und 'Error' wird - auf 'false' gesetzt. Ist dies nicht der Fall, gibt 'content' einen leeren - wideString ('') zurück und 'Error' wird auf 'true' gesetzt.} -var - BracketStr: wideString; -begin - content:= ''; - BracketStr:= XMLTrunc(Source); - if length(BracketStr) < 2 then begin Error:= true; exit; end; - if (BracketStr[1] <> '[') or (BracketStr[length(BracketStr)] <> ']') - then Error:= true - else begin - content:= copy(BracketStr,2,Length(BracketStr)-2); - Error:= false; - end; -end; - -procedure XMLTruncRoundBrackets(const Source: wideString; - var content: wideString; - var Error: boolean); -{Die Prozedur entfernt evtl. vorhandenen White-Space am Anfang und Ende - von 'Source', prüft dann, ob der verbleibende wideString durch runde - KLammern -- '(' und ')' -- eingerahmt wird. Ist dies der Fall, wird vom - Klammer-Inhalt erneut evtl. vorhandener Leerraum am Anfang und Ende - entfernt und das Ergebnis in 'content' zurückgegeben sowie 'Error' auf - 'false' gesetzt. Ist dies nicht der Fall, gibt 'content' einen leeren - wideString ('') zurück und 'Error' wird auf 'true' gesetzt.} -var - BracketStr: wideString; -begin - content:= ''; - BracketStr:= XMLTrunc(Source); - if length(BracketStr) < 2 then begin Error:= true; exit; end; - if (BracketStr[1] <> '(') or (BracketStr[length(BracketStr)] <> ')') - then Error:= true - else begin - content:= XMLTrunc(copy(BracketStr,2,Length(BracketStr)-2)); - Error:= false; - end; -end; - -procedure xmlIsolateQuote( Source: wideString; - var content, - rest: wideString; - var QuoteType: WideChar; - var Error: boolean); -{Analysiert einen wideString ('Source'): Führender White-Space wird - abgeschnitten, danach wird ein in einfache oder doppelte Anführungs- - zeichen gesetzter Text (der auch leer sein kann) erwartet, dessen Inhalt - in 'content' zurückgegeben wird. Falls ein Zeichen in 'content' kein - legales XML-Zeichen ist, wird 'Error = true' zurückgegen. 'QuoteType' - gibt den Wert der Anführungszeichen zurück (#39; für einfache und #34; - für doppelte Anführungszeichen). Wird nach dem Entfernen des führenden - White-Spaces kein Anführungszeichen gefunden oder fehlt das - korrespondierende Schlußzeichen, wird die Routine abgebrochen und 'Error - = true' zurückgegeben. Anschließend wird überprüft, ob direkt nach dem - Schlußzeichen etwas anderes als White-Space folgt (bzw. der wideString - zuende ist). Falls etwas anderes folgt, wird 'Error = true' zurückgegeben. - Falls nicht, wird bis zum nächsten Nicht-White-Space-Zeichen gesucht und - der Rest des WideStrings in 'rest' zurückgegeben. Für alle Fälle, in denen - 'Error = true' zurückgegen wird, werden 'content' und 'rest' als leer - ('') und 'QuoteType' als #0; zurückgegeben.} -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -var - i,quotepos: integer; - dummy: wideString; -begin - content:= ''; - rest:= ''; - if Length(Source) < 2 then begin Error:= true; exit; end; - Error:= false; - - {White-space am Anfang entfernen:} - i:= 1; - while (i <= length(Source)) do begin - if not IsXmlWhiteSpace(Source[i]) then break; - inc(i); - end; - if i >= Length(Source) then begin Error:= true; exit; end; - Dummy:= copy(Source,i,Length(Source)-i+1); - Source:= dummy; {Diese umständliche Zuweisung ist wegen Delphi-Problem von WideStrings bei copy nötig} - QuoteType:= Source[1]; - if (QuoteType <> SQ) and (QuoteType <> DQ) - then begin QuoteType:= #0; Error:= true; exit; end; - Dummy:= Copy(Source,2,Length(Source)-1); - Source:= dummy; {Diese umständliche Zuweisung ist wegen Delphi-Problem von WideStrings bei copy nötig} - QuotePos:= Pos(wideString(QuoteType),Source); - if QuotePos = 0 then begin QuoteType:= #0; Error:= true; exit; end; - if Length(Source) > QuotePos then - if not IsXmlWhiteSpace(Source[QuotePos+1]) - then begin QuoteType:= #0; Error:= true; exit; end; // No White-Space after quotation mark - content:= Copy(Source,1,QuotePos-1); - if not isXmlChars(content) then begin content:= ''; QuoteType:= #0; Error:= true; exit; end; - // Strip White-Space: - i:= QuotePos + 1; - while (i <= length(Source)) do begin - if not IsXmlWhiteSpace(Source[i]) then break; - inc(i); - end; - if i <= Length(Source) then rest:= copy(Source,i,Length(Source)-i+1); -end; - -function xmlAnalysePubSysId(const publicId, - systemId, - notaName: wideString): wideString; -const - SQ: wideString = #39; // code of ' - DQ: wideString = #34; // code of " -var - qm: wideString; -begin - result:= ''; - if not isXmlName(notaName) - then EConvertError.CreateFmt('%S is not a valid notaName value.',[notaName]);; - if isXmlSystemLiteral(concat(DQ,systemId,DQ)) - then qm:= DQ - else if IsXMLSystemLiteral(concat(SQ,systemId,SQ)) - then qm:= SQ - else EConvertError.CreateFmt('%S is not a valid systemId value.',[systemId]);; - if not isXmlPubidChars(publicId) - then EConvertError.CreateFmt('%S is not a valid publicId value.',[publicId]);; - if publicId = '' then begin - result:= concat(result,wideString(' SYSTEM '),qm,systemId,qm,wideString(' ')); - end else begin - if systemId = '' then begin - result:= concat(result,wideString(' PUBLIC "'),publicId,wideString('" ')); - end else begin - result:= concat(result,wideString(' PUBLIC "'),publicId,wideString('" '),qm,systemId,qm,wideString(' ')); - end; - end; {if ...} - if notaName <> '' - then result:= concat(result,wideString('NDATA '),notaName,wideString(' ')); -end; - -function trimWhitespace(S: wideString): wideString; -var - i, l: integer; -begin - l:= Length(S); - i:= 1; - while (i <= l) and IsXmlWhiteSpace(S[i]) do inc(i); - if i > l then - result:= '' - else begin - while IsXmlWhiteSpace(S[l]) do dec(l); - result:= copy(S,i,l-i+1); - end; -end; - -function trimWhitespaceLeft(S: wideString): wideString; -var - i, l: integer; -begin - l:= Length(S); - i:= 1; - while (i <= l) and IsXmlWhiteSpace(S[i]) do inc(i); - result:= copy(s,i,Maxint); -end; - -function trimWhitespaceRight(S: wideString): wideString; -var - i: integer; -begin - i:= Length(S); - while (i > 0) and IsXmlWhiteSpace(S[i]) do dec(I); - result:= copy(s,1,i); -end; - - -function xmlExtractPrefix(const qualifiedName: wideString): wideString; -var - colonpos: integer; - localpart: wideString; // = 0 - prefix: wideString; // = 0 -begin - colonpos:= pos(':',qualifiedName); - if colonpos = 0 - then localpart:= qualifiedName - else begin - prefix:= copy(qualifiedName,1,colonpos-1); - localpart:= copy(qualifiedName,colonpos+1,length(qualifiedName)-colonpos); - if not IsXmlPrefix(prefix) - then raise EInvalid_Character_Err.create('Invalid character error.'); - end; - if not IsXmlLocalPart(localpart) - then raise EInvalid_Character_Err.create('Invalid character error.'); - result:= prefix; -end; - -function xmlExtractLocalName(const qualifiedName: wideString): wideString; -var - colonpos: integer; - prefix,localpart: wideString; -begin - colonpos:= pos(':',qualifiedName); - if colonpos = 0 - then localpart:= qualifiedName - else begin - prefix:= copy(qualifiedName,1,colonpos-1); - localpart:= copy(qualifiedName,colonpos+1,length(qualifiedName)-colonpos); - if not IsXmlPrefix(prefix) - then raise EInvalid_Character_Err.create('Invalid character error.'); - end; - if not IsXmlLocalPart(localpart) - then raise EInvalid_Character_Err.create('Invalid character error.'); - result:= localpart; -end; - -function xmlExtractPrefixAndLocalName(const qualifiedName: wideString; - out prefix, - localName: wideString): boolean; -var - colonpos: integer; -begin - colonpos:= pos(':',qualifiedName); - if colonpos = 0 then begin - prefix:= ''; - if IsXmlLocalPart(qualifiedName) then begin - localName:= qualifiedName; - result:= true; - end else begin - localName:= ''; - result:= false; - end; - end else begin - prefix:= copy(qualifiedName,1,colonpos-1); - localName:= copy(qualifiedName,colonpos+1,length(qualifiedName)-colonpos); - if IsXmlPrefix(prefix) and IsXmlLocalPart(localName) then begin - result:= true; - end else begin - prefix:= ''; - localName:= ''; - result:= false; - end; - end; -end; - -function IsXmlChar(const S: WideChar): boolean; -begin - case Word(S) of - $0009,$000A,$000D,$0020..$D7FF,$E000..$FFFD, // Unicode below $FFFF - $D800..$DBFF, // High surrogate of Unicode character [$10000..$10FFFF] - $DC00..$DFFF: // Low surrogate of Unicode character [$10000..$10FFFF] - result:= true; - else - result:= false; - end; -end; - -function IsXmlWhiteSpace(const S: WideChar): boolean; -begin - Case Word(S) of - $0009,$000A,$000D,$0020: - result:= true; - else - result:= false; - end; -end; - -function IsXmlLetter(const S: WideChar): boolean; -begin - Result:= IsXmlIdeographic(S) or IsXmlBaseChar(S); -end; - -function IsXmlBaseChar(const S: WideChar): boolean; -begin - Case Word(S) of - $0041..$005a,$0061..$007a,$00c0..$00d6,$00d8..$00f6,$00f8..$00ff, - $0100..$0131,$0134..$013E,$0141..$0148,$014a..$017e,$0180..$01c3, - $01cd..$01f0,$01f4..$01f5,$01fa..$0217,$0250..$02a8,$02bb..$02c1, - $0386,$0388..$038a,$038c,$038e..$03a1,$03a3..$03ce,$03D0..$03D6, - $03DA,$03DC,$03DE,$03E0,$03E2..$03F3,$0401..$040C,$040E..$044F, - $0451..$045C,$045E..$0481,$0490..$04C4,$04C7..$04C8,$04CB..$04CC, - $04D0..$04EB,$04EE..$04F5,$04F8..$04F9,$0531..$0556,$0559, - $0561..$0586,$05D0..$05EA,$05F0..$05F2,$0621..$063A,$0641..$064A, - $0671..$06B7,$06BA..$06BE,$06C0..$06CE,$06D0..$06D3,$06D5, - $06E5..$06E6,$0905..$0939,$093D,$0958..$0961,$0985..$098C, - $098F..$0990,$0993..$09A8,$09AA..$09B0,$09B2,$09B6..$09B9, - $09DC..$09DD,$09DF..$09E1,$09F0..$09F1,$0A05..$0A0A,$0A0F..$0A10, - $0A13..$0A28,$0A2A..$0A30,$0A32..$0A33,$0A35..$0A36,$0A38..$0A39, - $0A59..$0A5C,$0A5E,$0A72..$0A74,$0A85..$0A8B,$0A8D,$0A8F..$0A91, - $0A93..$0AA8,$0AAA..$0AB0,$0AB2..$0AB3,$0AB5..$0AB9,$0ABD,$0AE0, - $0B05..$0B0C,$0B0F..$0B10,$0B13..$0B28,$0B2A..$0B30,$0B32..$0B33, - $0B36..$0B39,$0B3D,$0B5C..$0B5D,$0B5F..$0B61,$0B85..$0B8A, - $0B8E..$0B90,$0B92..$0B95,$0B99..$0B9A,$0B9C,$0B9E..$0B9F, - $0BA3..$0BA4,$0BA8..$0BAA,$0BAE..$0BB5,$0BB7..$0BB9,$0C05..$0C0C, - $0C0E..$0C10,$0C12..$0C28,$0C2A..$0C33,$0C35..$0C39,$0C60..$0C61, - $0C85..$0C8C,$0C8E..$0C90,$0C92..$0CA8,$0CAA..$0CB3,$0CB5..$0CB9, - $0CDE,$0CE0..$0CE1,$0D05..$0D0C,$0D0E..$0D10,$0D12..$0D28, - $0D2A..$0D39,$0D60..$0D61,$0E01..$0E2E,$0E30,$0E32..$0E33, - $0E40..$0E45,$0E81..$0E82,$0E84,$0E87..$0E88,$0E8A,$0E8D, - $0E94..$0E97,$0E99..$0E9F,$0EA1..$0EA3,$0EA5,$0EA7,$0EAA..$0EAB, - $0EAD..$0EAE,$0EB0,$0EB2..$0EB3,$0EBD,$0EC0..$0EC4,$0F40..$0F47, - $0F49..$0F69,$10A0..$10C5,$10D0..$10F6,$1100,$1102..$1103, - $1105..$1107,$1109,$110B..$110C,$110E..$1112,$113C,$113E,$1140, - $114C,$114E,$1150,$1154..$1155,$1159,$115F..$1161,$1163,$1165, - $1167,$1169,$116D..$116E,$1172..$1173,$1175,$119E,$11A8,$11AB, - $11AE..$11AF,$11B7..$11B8,$11BA,$11BC..$11C2,$11EB,$11F0,$11F9, - $1E00..$1E9B,$1EA0..$1EF9,$1F00..$1F15,$1F18..$1F1D,$1F20..$1F45, - $1F48..$1F4D,$1F50..$1F57,$1F59,$1F5B,$1F5D,$1F5F..$1F7D, - $1F80..$1FB4,$1FB6..$1FBC,$1FBE,$1FC2..$1FC4,$1FC6..$1FCC, - $1FD0..$1FD3,$1FD6..$1FDB,$1FE0..$1FEC,$1FF2..$1FF4,$1FF6..$1FFC, - $2126,$212A..$212B,$212E,$2180..$2182,$3041..$3094,$30A1..$30FA, - $3105..$312C,$AC00..$d7a3: - result:= true; - else - result:= false; - end; -end; - -function IsXmlIdeographic(const S: WideChar): boolean; -begin - Case Word(S) of - $4E00..$9FA5,$3007,$3021..$3029: - result:= true; - else - result:= false; - end; -end; - -function IsXmlCombiningChar(const S: WideChar): boolean; -begin - Case Word(S) of - $0300..$0345,$0360..$0361,$0483..$0486,$0591..$05A1,$05A3..$05B9, - $05BB..$05BD,$05BF,$05C1..$05C2,$05C4,$064B..$0652,$0670, - $06D6..$06DC,$06DD..$06DF,$06E0..$06E4,$06E7..$06E8,$06EA..$06ED, - $0901..$0903,$093C,$093E..$094C,$094D,$0951..$0954,$0962..$0963, - $0981..$0983,$09BC,$09BE,$09BF,$09C0..$09C4,$09C7..$09C8, - $09CB..$09CD,$09D7,$09E2..$09E3,$0A02,$0A3C,$0A3E,$0A3F, - $0A40..$0A42,$0A47..$0A48,$0A4B..$0A4D,$0A70..$0A71,$0A81..$0A83, - $0ABC,$0ABE..$0AC5,$0AC7..$0AC9,$0ACB..$0ACD,$0B01..$0B03,$0B3C, - $0B3E..$0B43,$0B47..$0B48,$0B4B..$0B4D,$0B56..$0B57,$0B82..$0B83, - $0BBE..$0BC2,$0BC6..$0BC8,$0BCA..$0BCD,$0BD7,$0C01..$0C03, - $0C3E..$0C44,$0C46..$0C48,$0C4A..$0C4D,$0C55..$0C56,$0C82..$0C83, - $0CBE..$0CC4,$0CC6..$0CC8,$0CCA..$0CCD,$0CD5..$0CD6,$0D02..$0D03, - $0D3E..$0D43,$0D46..$0D48,$0D4A..$0D4D,$0D57,$0E31,$0E34..$0E3A, - $0E47..$0E4E,$0EB1,$0EB4..$0EB9,$0EBB..$0EBC,$0EC8..$0ECD, - $0F18..$0F19,$0F35,$0F37,$0F39,$0F3E,$0F3F,$0F71..$0F84, - $0F86..$0F8B,$0F90..$0F95,$0F97,$0F99..$0FAD,$0FB1..$0FB7,$0FB9, - $20D0..$20DC,$20E1,$302A..$302F,$3099,$309A: - result:= true; - else - result:= false; - end; -end; - -function IsXmlDigit(const S: WideChar): boolean; -begin - Case Word(S) of - $0030..$0039,$0660..$0669,$06F0..$06F9,$0966..$096F,$09E6..$09EF, - $0A66..$0A6F,$0AE6..$0AEF,$0B66..$0B6F,$0BE7..$0BEF,$0C66..$0C6F, - $0CE6..$0CEF,$0D66..$0D6F,$0E50..$0E59,$0ED0..$0ED9,$0F20..$0F29: - result:= true; - else - result:= false; - end; -end; - -function IsXmlExtender(const S: WideChar): boolean; -begin - Case Word(S) of - $00B7,$02D0,$02D1,$0387,$0640,$0E46,$0EC6,$3005,$3031..$3035, - $309D..$309E,$30FC..$30FE: - result:= true; - else - result:= false; - end; -end; - -function IsXmlNameChar(const S: WideChar): boolean; -begin - if IsXmlLetter(S) or IsXmlDigit(S) or IsXmlCombiningChar(S) - or IsXmlExtender(S) or (S='.') or (S='-') or (S='_') or (S=':') - then Result:= true - else Result:= false; -end; - -function IsXmlPubidChar(const S: WideChar): boolean; -begin - if (S=#$20) or (S=#$D) or (S=#$A) or - ((S>='a') and (S<='z')) or - ((S>='A') and (S<='Z')) or - ((S>='0') and (S<='9')) or - (S='-') or (S=#$27) or (S='(') or (S=')') or (S='+') or (S=',') or - (S='.') or (S='/') or (S=':') or (S='=') or (S=WideChar('?')) or (S=';') or - (S='!') or (S='*') or (S='#') or (S='@') or (S='$') or (S='_') or - (S='%') - then Result:= true - else Result:= false; -end; - -function isXmlChars(const S: wideString): boolean; -var - i,l: integer; - sChar: wideChar; -begin - result:= true; - i:= 0; - l:= length(S); - while i < l do begin - inc(i); - sChar:= S[i]; - case Word(sChar) of - $0009,$000A,$000D,$0020..$D7FF,$E000..$FFFD: // Unicode below $FFFF - ; // do nothing. - $D800..$DBFF: // High surrogate of Unicode character [$10000..$10FFFF] - begin - if i = l - then begin result:= false; break; end; // End of wideString --> No low surrogate found - inc(i); - sChar:= S[i]; - if not IsUtf16LowSurrogate(sChar) - then begin result:= false; break; end; // No low surrogate found - end; - else - begin result:= false; break; end; - end; {case ...} - end; {while ...} -end; - -function IsXmlS(const S: wideString): boolean; -var - i: integer; -begin - if Length(S) = 0 then begin Result:= false; exit; end; - Result:= true; - for i:= 1 to length(S) do - if not IsXmlWhiteSpace((PWideChar(S)+i-1)^) - then begin Result:= false; exit; end; -end; - -function IsXmlName(const S: wideString): boolean; -var - i: integer; -begin - Result:= true; - if Length(S) = 0 then begin Result:= false; exit; end; - if not ( IsXmlLetter(PWideChar(S)^) - or (PWideChar(S)^ = '_') - or (PWideChar(S)^ = ':') ) - then begin Result:= false; exit; end; - for i:= 2 to length(S) do - if not IsXmlNameChar((PWideChar(S)+i-1)^) - then begin Result:= false; exit; end; -end; - -function IsXmlNames(const S: wideString): boolean; -const - SPACE: WideChar = #$20; -var - i,j: integer; - namesStr: wideString; -begin - Result:= true; - namesStr:= concat(S,wideString(SPACE)); - j:= 1; - for i:= 1 to length(namesStr) do begin - if namesStr[i] = SPACE then begin - if not IsXmlName(copy(namesStr,j,i-j)) - then begin Result:= false; exit; end; - j:= i+1; - end; - end; -end; - -function IsXmlNmtoken(const S: wideString): boolean; -var - i: integer; -begin - Result:= true; - if length(S) = 0 then begin Result:= false; exit; end; - for i:= 1 to length(S) do - if not IsXmlNameChar((PWideChar(S)+i-1)^) - then begin Result:= false; exit; end; -end; - -function IsXmlNmtokens(const S: wideString): boolean; -const - SPACE: WideChar = #$20; -var - i,j: integer; - NmtokensStr: wideString; -begin - Result:= true; - NmtokensStr:= concat(S,wideString(SPACE)); - j:= 1; - for i:= 1 to length(NmtokensStr) do begin - if NmtokensStr[i] = SPACE then begin - if not IsXmlNmtoken(copy(NmtokensStr,j,i-j)) - then begin Result:= false; exit; end; - j:= i+1; - end; - end; -end; - -function IsXmlCharRef(const S: wideString): boolean; -var - i: integer; - SChar: widechar; -begin - Result:= true; - if copy(S,length(S),1) <> ';' then begin result:= false; exit; end; - if copy(S,1,3) = '&#x' then begin - if Length(S) < 5 then begin Result:= false; exit; end; - for i:= 4 to length(S)-1 do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if not ( (SChar >= '0') and (SChar <= '9') ) - and not ( (SChar >= 'a') and (SChar <= 'f') ) - and not ( (SChar >= 'A') and (SChar <= 'F') ) - then begin Result:= false; exit; end; - end; - end else begin - if Length(S) < 4 then begin Result:= false; exit; end; - if copy(S,1,2) <> '&#' then begin Result:= false; exit; end; - for i:= 3 to length(S)-1 do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if not ( (SChar >= '0') and (SChar <= '9') ) - then begin Result:= false; exit; end; - end; - end; -end; - -function IsXmlEntityRef(const S: wideString): boolean; -begin - if pos('&',S) <> 1 then begin result:= false; exit; end; - if copy(S,length(S),1) <> ';' then begin result:= false; exit; end; - Result:= IsXmlName(copy(S,2,length(S)-2)); -end; - -function IsXmlPEReference(const S: wideString): boolean; -begin - if pos('%',S) <> 1 then begin result:= false; exit; end; - if copy(S,length(S),1) <> ';' then begin result:= false; exit; end; - Result:= IsXmlName(copy(S,2,length(S)-2)); -end; - -function isXmlReference(const S: wideString): boolean; -begin - if IsXmlEntityRef(s) or IsXmlCharRef(s) - then result:= true - else result:= false; -end; - -function isXmlEntityValue(const S: wideString): boolean; -const - sQuote: widechar = #$0027; - dQuote: widechar = '"'; -var - i,j,indexpos: integer; - SChar, SChar2, ForbittenQuote: widechar; -begin - Result:= true; - if Length(S) < 2 then begin Result:= false; exit; end; - if (S[length(S)] = sQuote) and (S[1] = sQuote) {single quotes} - then ForbittenQuote:= sQuote - else if (S[length(S)] = dQuote) and (S[1] = dQuote) {double quotes} - then ForbittenQuote:= dQuote - else begin Result:= false; exit; end; - - i:= 2; - while i < length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i+1 = length(s) then begin Result:= false; exit; end; - inc(i); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end; - if not IsXmlChar(sChar) then begin Result:= false; exit; end; - if SChar = ForbittenQuote then begin Result:= false; exit; end; - if SChar = '%' then begin {PEReference?} - indexpos:= -1; - for j:= i+1 to length(S)-1 do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 then begin Result:= false; exit; end; - if not IsXmlPEReference(copy(S,i,j-i+1)) then begin Result:= false; exit; end; - i:= j; - end; - if SChar = '&' then begin {Reference?} - indexpos:= -1; - for j:= i+1 to length(S)-1 do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 then begin Result:= false; exit; end; - if not IsXmlReference(copy(S,i,j-i+1)) then begin Result:= false; exit; end; - i:= j; - end; - inc(i); - end; -end; - -function isXmlEntityValueChars(const S: wideString): boolean; -// Returns 'true' if S consists only of legal XML characters and -// legal XML references and there are either only single or only -// double quotation marks in S, or if S is an empty wideString. -// Otherwise 'false' is returned. -const - SEMICOLON: WideChar = #$3B; // ';' -var - firstCharPos,i,l: integer; - sChar: wideChar; - dqFound,sqFound: boolean; -begin - result:= true; - dqFound:= false; - sqFound:= false; - i:= 0; - l:= length(S); - while i < l do begin - inc(i); - sChar:= S[i]; - case Word(sChar) of - $0022: // Double quote (") - if sqFound - then begin result:= false; exit; end - else dqFound:= true; - $0026: // Ampersand (&) - begin - result:= false; - firstCharPos:= i; - while i < l do begin - inc(i); - sChar:= S[i]; - if sChar = SEMICOLON then begin - if IsXmlReference(copy(S,firstCharPos,i-firstCharPos+1)) - then begin result:= true; break end - else exit; - end; {if ...} - end; {while ...} - end; - // xxx What about % ? - $0027: // Single quote (') - if dqFound - then begin result:= false; exit; end - else sqFound:= true; - $0009,$000A,$000D,$0020,$0021,$0023..$0025,$0028..$D7FF,$E000..$FFFD: // Unicode below $FFFF - ; // do nothing. - $D800..$DBFF: // High surrogate of Unicode character [$10000..$10FFFF] - begin - if i = l - then begin result:= false; exit; end; // End of wideString --> No low surrogate found - inc(i); - sChar:= S[i]; - if not IsUtf16LowSurrogate(sChar) - then begin result:= false; exit; end; // No low surrogate found - end; - else - begin result:= false; exit; end; - end; {case ...} - end; {while ...} -end; - -function isXmlAttValue(const S: wideString): boolean; -const - sQuote: widechar = #$0027; - dQuote: widechar = '"'; -var - i,j,indexpos: integer; - SChar, SChar2, ForbittenQuote: widechar; -begin - Result:= true; - if Length(S) < 2 then begin Result:= false; exit; end; - if (S[length(S)] = sQuote) and (S[1] = sQuote) {single quotes} - then ForbittenQuote:= sQuote - else if (S[length(S)] = dQuote) and (S[1] = dQuote) {double quotes} - then ForbittenQuote:= dQuote - else begin Result:= false; exit; end; - - i:= 2; - while i < length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i+1 = length(s) then begin Result:= false; exit; end; - inc(i); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end; - if not IsXmlChar(sChar) then begin Result:= false; exit; end; - if SChar = ForbittenQuote then begin Result:= false; exit; end; - if SChar = '<' then begin Result:= false; exit; end; - if SChar = '&' then begin {Reference?} - indexpos:= -1; - for j:= i+1 to length(S)-1 do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 then begin Result:= false; exit; end; - if not IsXmlReference(copy(S,i,j-i+1)) then begin Result:= false; exit; end; - i:= j; - end; - inc(i); - end; -end; - -function IsXmlSystemLiteral(const S: wideString): boolean; -const - sQuote: widechar = #$0027; - dQuote: widechar = '"'; -var - i,l: integer; - SChar, ForbittenQuote: widechar; -begin - Result:= true; - if Length(S) < 2 then begin Result:= false; exit; end; - if (S[length(S)] = sQuote) and (S[1] = sQuote) {single quotes} - then ForbittenQuote:= sQuote - else if (S[length(S)] = dQuote) and (S[1] = dQuote) {double quotes} - then ForbittenQuote:= dQuote - else begin Result:= false; exit; end; - - i:= 1; - l:= length(S)-1; - while i < l do begin - inc(i); - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i+1 = length(s) then begin Result:= false; exit; end; - inc(i); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end else if not IsXmlChar(sChar) then begin Result:= false; exit; end; - if SChar = ForbittenQuote then begin Result:= false; exit; end; - end; -end; - -function isXmlSystemChars(const S: wideString): boolean; -// Returns 'true' if all characters in S are legal XML characters -// and there are either only single or only double quotation marks -// in S, or if S is an empty wideString. -// Otherwise 'false' is returned. -var - i,l: integer; - sChar: wideChar; - dqFound,sqFound: boolean; -begin - result:= true; - dqFound:= false; - sqFound:= false; - i:= 0; - l:= length(S); - while i < l do begin - inc(i); - sChar:= S[i]; - case Word(sChar) of - $0022: // Double quote (") - if sqFound - then begin result:= false; break; end - else dqFound:= true; - $0027: // Single quote (') - if dqFound - then begin result:= false; break; end - else sqFound:= true; - $0009,$000A,$000D,$0020,$0021,$0023..$0026,$0028..$D7FF,$E000..$FFFD: // Unicode below $FFFF - ; // do nothing. - $D800..$DBFF: // High surrogate of Unicode character [$10000..$10FFFF] - begin - if i = l - then begin result:= false; break; end; // End of wideString --> No low surrogate found - inc(i); - sChar:= S[i]; - if not IsUtf16LowSurrogate(sChar) - then begin result:= false; break; end; // No low surrogate found - end; - else - begin result:= false; break; end; - end; {case ...} - end; {while ...} -end; - -function IsXmlPubidLiteral(const S: wideString): boolean; -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -var - i: integer; - SChar: widechar; -begin - Result:= true; - if Length(S) < 2 then begin Result:= false; exit; end; - if (S[length(S)] = SQ) and (S[1] = SQ) then begin // single quotes - for i:= 2 to length(S)-1 do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if (SChar = SQ) or not IsXmlPubidChar(SChar) - then begin Result:= false; exit; end; - end; - end else if (S[length(S)] = DQ) and (S[1] = DQ) then begin // double quotes - for i:= 2 to length(S)-1 do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsXmlPubidChar(SChar) then begin Result:= false; exit; end; - end; - end else begin Result:= false; exit; end; -end; - -function isXmlPubidChars(const S: wideString): boolean; -// Returns 'true' if all characters in S belong to the XML PubidChar class -// (see XML 1.0, 2nd ed., prod. [13], or if S is an empty wideString. -// Otherwise 'false' is returned. -var - i: integer; - SChar: widechar; -begin - Result:= true; - for i:= 1 to length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsXmlPubidChar(SChar) then begin Result:= false; exit; end; - end; -end; - -function IsXmlComment(const S: wideString): boolean; -var - i,lengthS: integer; - SChar: wideChar; - S2: wideString; -begin - Result:= true; - lengthS:= length(S); - if lengthS < 7 then begin result:= false; exit; end; - if copy(S,1,4) <> '' then begin result:= false; exit; end; - if lengthS = 7 then exit; // Empty comment --> ok. - SChar:= WideChar((PWideChar(S)+lengthS-4)^); - if SChar = '-' - then begin result:= false; exit; end; - S2:= copy(S,5,lengthS-7); - if pos('--',S2) > 0 then begin result:= false; exit; end; - i:= 0; - while i < pred(length(S2)) do begin - inc(i); - SChar:= S2[i]; - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i = length(S2) then begin Result:= false; exit; end; - inc(i); - SChar:= S2[i]; - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end; - if not IsXmlChar(sChar) then begin Result:= false; exit; end; - end; -end; - -function IsXmlCData(const S: wideString): boolean; -var - i: integer; - SChar: wideChar; -begin - Result:= true; - if pos(']]>',S) > 0 then begin result:= false; exit; end; - i:= 0; - while i < length(S) do begin - inc(i); - SChar:= S[i]; - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i = length(s) then begin Result:= false; exit; end; - inc(i); - SChar:= S[i]; - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end; - if not IsXmlChar(sChar) then begin Result:= false; exit; end; - end; -end; - -function IsXmlCharData(const S: wideString): boolean; -var - i: integer; - SChar: wideChar; -begin - Result:= true; - i:= 0; - while i < length(S) do begin - inc(i); - SChar:= S[i]; - if IsUtf16LowSurrogate(sChar) then begin Result:= false; exit; end; - if IsUtf16HighSurrogate(SChar) then begin - if i = length(s) then begin Result:= false; exit; end; - inc(i); - SChar:= S[i]; - if not IsUtf16LowSurrogate(SChar) then begin Result:= false; exit; end; - end; - if not IsXmlChar(sChar) then begin Result:= false; exit; end; - if SChar = '<' then begin Result:= false; exit; end; - if SChar = '&' then begin Result:= false; exit; end; - end; -end; - -function IsXmlPITarget(const S: wideString): boolean; -begin - Result:= IsXmlName(S); - if length(S) = 3 then - if ((S[1] = 'X') or (S[1] = 'x')) and - ((S[2] = 'M') or (S[2] = 'm')) and - ((S[3] = 'L') or (S[3] = 'l')) - then Result:= false; -end; - -function isXmlVersionNumChar(const s: WideChar): boolean; -begin - if ( ((s >= 'a') and (s <= 'z')) or - ((s >= 'A') and (s <= 'Z')) or - ((s >= '0') and (s <= '9')) or - (s = '_') or (s = '.') or - (s = ':') or (s = '-') ) - then result:= true - else result:= false; -end; - -function IsXmlVersionNum(const S: wideString): boolean; -var - i: integer; -begin - Result:= true; - if Length(S) = 0 then begin Result:= false; exit; end; - for i:= 1 to length(S) do begin - if not isXmlVersionNumChar(S[i]) - then begin Result:= false; exit; end; - end; -end; - -function isXmlEncNameLeadingChar(const s: WideChar): boolean; -begin - if ( ((s >= 'a') and (s <= 'z')) or - ((s >= 'A') and (s <= 'Z')) ) - then result:= true - else result:= false; -end; - -function isXmlEncNameFollowingChar(const s: WideChar): boolean; -begin - if ( ((s >= 'a') and (s <= 'z')) or - ((s >= 'A') and (s <= 'Z')) or - ((s >= '0') and (s <= '9')) or - (s = '.') or (s = '_') or (s = '-') ) - then result:= true - else result:= false; -end; - -function IsXmlEncName(const S: wideString): boolean; -var - i: integer; -begin - result:= true; - if length(S) = 0 then begin result:= false; exit; end; - if not isXmlEncNameLeadingChar(S[1]) - then begin result:= false; exit; end; - for i:= 2 to length(S) do begin - if not isXmlEncNameFollowingChar(S[i]) - then begin result:= false; exit; end; - end; -end; - -function IsXmlStringType(const S: wideString): boolean; -begin - if S = 'CDATA' - then Result:= true - else Result:= false; -end; - -function IsXmlTokenizedType(const S: wideString): boolean; -begin - if (S='ID') or (S='IDREF') or (S='IDREFS') or (S='ENTITY') or - (S='ENTITIES') or (S='NMTOKEN') or (S='NMTOKENS') - then Result:= true - else Result:= false; -end; - -function IsXmlNCNameChar(const s: WideChar): boolean; -begin - if IsXmlLetter(S) or IsXmlDigit(S) or IsXmlCombiningChar(S) - or IsXmlExtender(S) or (S='.') or (S='-') or (S='_') - then Result:= true - else Result:= false; -end; - -function IsXmlNCName(const S: wideString): boolean; -var - i: integer; -begin - Result:= true; - if Length(S) = 0 then begin Result:= false; exit; end; - if not ( IsXmlLetter(PWideChar(S)^) - or (PWideChar(S)^ = '_') ) - then begin Result:= false; exit; end; - for i:= 2 to length(S) do - if not IsXmlNCNameChar(S[i]) - then begin Result:= false; exit; end; -end; - -function IsXmlDefaultAttName(const S: wideString): boolean; -begin - if S = 'xmlns' - then Result:= true - else Result:= false; -end; - -function IsXmlPrefixedAttName(const S: wideString): boolean; -var - piece: wideString; -begin - if copy(S,1,6) = 'xmlns:' then begin - piece:= copy(S,7,length(S)-6); - Result:= IsXmlNCName(piece); - end else Result:= false; -end; - -function IsXmlNSAttName(const S: wideString): boolean; -begin - Result:= (IsXmlPrefixedAttName(S) or IsXmlDefaultAttName(S)); -end; - -function IsXmlLocalPart(const S: wideString): boolean; -begin - Result:= IsXmlNCName(S); -end; - -function IsXmlPrefix(const S: wideString): boolean; -begin - Result:= IsXmlNCName(S); -end; - -function IsXmlQName(const S: wideString): boolean; -var - colonpos: integer; - prefix,localpart: wideString; -begin - colonpos:= pos(':',S); - if colonpos = 0 - then result:= IsXmlLocalPart(S) - else begin - prefix:= copy(S,1,colonpos-1); - localpart:= copy(S,colonpos+1,length(S)-colonpos); - result:= IsXmlPrefix(prefix) and IsXmlLocalPart(localpart); - end; -end; - -function ResolveCharRefs(const S: wideString): wideString; -var - i,j,indexpos: integer; - SChar, SChar2: widechar; - ref: wideString; - content: TdomCustomStr; -begin - result:= ''; - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) - then raise EConvertError.CreateFmt('%S must not start with a UTF-16 low surrogate.',[S]); - if IsUtf16HighSurrogate(SChar) then begin - if i+1 > length(s) - then raise EConvertError.CreateFmt('%S must not end with a UTF-16 high surrogate.',[S]); - inc(i); - content.addWideChar(SChar); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) - then raise EConvertError.CreateFmt('%S contains an UTF-16 high surrogate without its corresponding low surrogate.',[S]); - end; - if not IsXmlChar(sChar) - then raise EConvertError.CreateFmt('%S contains an invalid character.',[S]); - if SChar = '&' then begin {Reference?} - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''&'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlEntityRef(ref) then begin - content.addWideString(ref); - end else if IsXmlCharRef(ref) then begin - content.addWideString(XmlCharRefToStr(ref)); - end else raise EConvertError.CreateFmt('%S contains an invalid reference.',[S]); - i:= j; - end else content.addWideChar(SChar); - inc(i); - end; {while ...} - Result:= content.value; - finally - content.free; - end; -end; - -function XmlIntToCharRef(const value: integer): wideString; -begin - Result:= concat('&#',intToStr(value),';'); -end; - -function XmlCharRefToInt(const S: wideString): integer; -var - value: word; -begin - if not IsXmlCharRef(S) - then raise EConvertError.CreateFmt('%S is not a valid XmlCharRef value.',[S]); - if S[3] = 'x' - then Result:= StrToInt(concat('$',copy(S,4,length(S)-4))) // Hex - else Result:= StrToInt(copy(S,3,length(S)-3)); // Dec - if Result > $10FFFF - then raise EConvertError.CreateFmt('%S is not a valid XmlCharRef value.',[S]); - if Result < $10000 then begin - value:= Result; - if not IsXmlChar(WideChar(value)) - then raise EConvertError.CreateFmt('%S is not a valid XmlCharRef value.',[S]); - case result of - $D800..$DBFF, // Reserved for high surrogate of Unicode character [$10000..$10FFFF] - $DC00..$DFFF: // Reserved for low surrogate of Unicode character [$10000..$10FFFF] - raise EConvertError.CreateFmt('%S is not a valid XmlCharRef value.',[S]); - end; {case ...} - end; {if ...} -end; - -function XmlCharRefToStr(const S: wideString): wideString; -var - value: integer; - smallValue: word; -begin - value:= XmlCharRefToInt(S); - if value < $10000 then begin - smallValue:= value; - Result:= wideString(WideChar(smallValue)); - end else - Result:= concat(wideString(Utf16HighSurrogate(value)), - wideString(Utf16LowSurrogate(value))); -end; - -function XmlStrToCharRef(const S: wideString): wideString; -var - SChar,LowSur: widechar; - i: integer; -begin - result:= ''; - i:= 0; - while i < length(S) do begin - inc(i); - SChar:= S[i]; - if not isXmlChar(SChar) - then raise EConvertError.CreateFmt('String contains invalid character %S.',[S]); - if isUtf16LowSurrogate(SChar) - then raise EConvertError.CreateFmt('Low surrogate %S without high surrogate.',[S]); - if isUtf16HighSurrogate(SChar) then begin - if i+1 = length(s) - then raise EConvertError.CreateFmt('High surrogate %S without low surrogate at end of string.',[S]); - inc(i); - lowSur:= S[i]; - if not IsUtf16LowSurrogate(lowSur) - then raise EConvertError.CreateFmt('High surrogate %S without low surrogate.',[S]); - result:= concat(result,XmlIntToCharRef(Utf16SurrogateToInt(SChar,lowSur))); - end else begin - result:= concat(result,XmlIntToCharRef(ord(SChar))); - end; - end; {for ...} -end; - -function isAbnfALPHAWideChar(c: wideChar): boolean; -begin - case word(c) of - $0041..$005A,$0061..$007A: - result:= true; - else - result:= false; - end; -end; - -function isAbnfBITWideChar(c: wideChar): boolean; -begin - if (c = '0') or (c = '1') - then result:= true - else result:= false; -end; - -function isAbnfCHARWideChar(c: wideChar): boolean; -begin - case word(c) of - $0001..$007F: - result:= true; - else - result:= false; - end; -end; - -function isAbnfCRWideChar(c: wideChar): boolean; -begin - if c = #$0D - then result:= true - else result:= false; -end; - -function isAbnfCRLFWideStr(s: wideString): boolean; -begin - if s = #$0D#$0A - then result:= true - else result:= false; -end; - -function isAbnfCTLWideChar(c: wideChar): boolean; -begin - case word(c) of - $0000..$001F,$007F: - result:= true; - else - result:= false; - end; -end; - -function isAbnfDIGITWideChar(c: wideChar): boolean; -begin - case word(c) of - $0030..$0039: - result:= true; - else - result:= false; - end; -end; - -function isAbnfDQUOTEWideChar(c: wideChar): boolean; -begin - if c = #$22 - then result:= true - else result:= false; -end; - -function isAbnfHEXDIGWideChar(c: wideChar): boolean; -begin - case word(c) of - $0030..$0039,$0041..$0046: - result:= true; - else - result:= false; - end; -end; - -function isAbnfHTABWideChar(c: wideChar): boolean; -begin - if c = #$09 - then result:= true - else result:= false; -end; - -function isAbnfLFWideChar(c: wideChar): boolean; -begin - if c = #$0A - then result:= true - else result:= false; -end; - -function isAbnfLWSPWideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 - then begin result:= false; exit; end - else result:= true; - i:= 0; - while i < l do begin - inc(i); - case word(s[i]) of - $0020,$0009:; // SP or TAB --> Do nothing, because everthing is alright - $000D: begin // CR --> Look for LF - if i = l then begin result:= false; exit; end; - inc(i); - if s[i] <> #$0A then begin result:= false; exit; end; - end; - else begin - result:= false; - exit; - end; - end; - end; -end; - -function isAbnfOCTETWideChar(c: wideChar): boolean; -begin - case word(c) of - $0000..$00ff: - result:= true; - else - result:= false; - end; -end; - -function isAbnfSPWideChar(c: wideChar): boolean; -begin - if c = #$20 - then result:= true - else result:= false; -end; - -function isAbnfVCHARWideChar(c: wideChar): boolean; -begin - case word(c) of - $0021..$007E: - result:= true; - else - result:= false; - end; -end; - -function isAbnfWSPWideChar(c: wideChar): boolean; -begin - case word(c) of - $0020,$0009: - result:= true; - else - result:= false; - end; -end; - -function isAbnfALPHAChar(c: char): boolean; -begin - case byte(c) of - $41..$5A,$61..$7A: - result:= true; - else - result:= false; - end; -end; - -function isAbnfBITChar(c: char): boolean; -begin - if (c = '0') or (c = '1') - then result:= true - else result:= false; -end; - -function isAbnfCHARChar(c: char): boolean; -begin - case byte(c) of - $01..$7F: - result:= true; - else - result:= false; - end; -end; - -function isAbnfCRChar(c: char): boolean; -begin - if c = #$0D - then result:= true - else result:= false; -end; - -function isAbnfCRLFStr(s: string): boolean; -begin - if s = #$0D#$0A - then result:= true - else result:= false; -end; - -function isAbnfCTLChar(c: char): boolean; -begin - case byte(c) of - $00..$1F,$7F: - result:= true; - else - result:= false; - end; -end; - -function isAbnfDIGITChar(c: char): boolean; -begin - case byte(c) of - $30..$39: - result:= true; - else - result:= false; - end; -end; - -function isAbnfDQUOTEChar(c: char): boolean; -begin - if c = #$22 - then result:= true - else result:= false; -end; - -function isAbnfHEXDIGChar(c: char): boolean; -begin - case byte(c) of - $30..$39,$41..$46: - result:= true; - else - result:= false; - end; -end; - -function isAbnfHTABChar(c: char): boolean; -begin - if c = #$09 - then result:= true - else result:= false; -end; - -function isAbnfLFChar(c: char): boolean; -begin - if c = #$0A - then result:= true - else result:= false; -end; - -function isAbnfLWSPStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 - then begin result:= false; exit; end - else result:= true; - i:= 0; - while i < l do begin - inc(i); - case byte(s[i]) of - $20,$09:; // SP or TAB --> Do nothing, because everthing is alright - $0D: begin // CR --> Look for LF - if i = l then begin result:= false; exit; end; - inc(i); - if s[i] <> #$0A then begin result:= false; exit; end; - end; - else begin - result:= false; - exit; - end; - end; - end; -end; - -function isAbnfOCTETChar(c: char): boolean; -begin - case byte(c) of - $00..$ff: - result:= true; - else - result:= false; - end; -end; - -function isAbnfSPChar(c: char): boolean; -begin - if c = #$20 - then result:= true - else result:= false; -end; - -function isAbnfVCHARChar(c: char): boolean; -begin - case byte(c) of - $21..$7E: - result:= true; - else - result:= false; - end; -end; - -function isAbnfWSPChar(c: char): boolean; -begin - case byte(c) of - $20,$09: - result:= true; - else - result:= false; - end; -end; - -function isUriURI_referencewideStr(s: wideString): boolean; -var - dcPos: integer; - s1: string; -begin - dcPos:= pos('#',s); - if dcPos > 0 then begin - s1:= copy(s,1,dcPos-1); - result:= ( isUriAbsoluteURIwideStr(s1) - or isUriRelativeURIwideStr(s1) - or (s1 = '') ) - and isUriFragmentwideStr(copy(s,dcPos+1,length(s)-dcPos)); - end else - result:= isUriAbsoluteURIwideStr(s) or isUriRelativeURIwideStr(s) or (s = ''); -end; - -function isUriAbsoluteURIwideStr(s: wideString): boolean; -var - colonPos: integer; - s1: string; -begin - colonPos:= pos(':',s); - if colonPos > 0 then begin - s1:= copy(s,colonPos+1,length(s)-colonPos); - result:= isUriSchemewideStr(copy(s,1,colonPos-1)) and - ( isUriHier_partwideStr(s1) or isUriOpaque_partwideStr(s1) ); - end else result:= false; -end; - -function isUriRelativeURIwideStr(s: wideString): boolean; -var - qmPos: integer; - s1: string; -begin - qmPos:= pos(#63,s); - if qmPos > 0 then begin - s1:= copy(s,1,qmPos-1); - result:= ( isUriNet_pathwideStr(s1) - or isUriAbs_pathwideStr(s1) - or isUriRel_pathwideStr(s1) ) - and isUriQuerywideStr(copy(s,qmPos+1,length(s)-qmPos)); - end else - result:= isUriNet_pathwideStr(s) or isUriAbs_pathwideStr(s) or isUriRel_pathwideStr(s); -end; - -function isUriHier_partwideStr(s: wideString): boolean; -var - qmPos: integer; - s1: string; -begin - qmPos:= pos(#63,s); - if qmPos > 0 then begin - s1:= copy(s,1,qmPos-1); - result:= ( isUriNet_pathwideStr(s1) - or isUriAbs_pathwideStr(s1) ) - and isUriQuerywideStr(copy(s,qmPos+1,length(s)-qmPos)); - end else - result:= isUriNet_pathwideStr(s) or isUriAbs_pathwideStr(s); -end; - -function isUriOpaque_partwideStr(s: wideString): boolean; -begin - if s = '' then begin result:= false; exit; end; - if s[1] = '/' then begin result:= false; exit; end; - result:= isUriUricwideStr(s); -end; - -function isUriNet_pathwideStr(s: wideString): boolean; -var - slashPos: integer; -begin - if copy(s,1,2) <> '//' then begin result:= false; exit; end; - s:= copy(s,3,length(s)-2); - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= isUriAuthoritywideStr(copy(s,1,slashPos-1)) and isUriAbs_pathwideStr(copy(s,slashPos,length(s)-slashPos+1)); - end else - result:= isUriAuthoritywideStr(s); -end; - -function isUriAbs_pathwideStr(s: wideString): boolean; -begin - if s = '' then begin result:= false; exit; end; - if s[1] <> '/' then begin result:= false; exit; end; - result:= isUriPath_segmentswideStr(copy(s,2,length(s)-1)); -end; - -function isUriRel_pathwideStr(s: wideString): boolean; -var - slashPos: integer; -begin - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= isUriRel_segmentwideStr(copy(s,1,slashPos-1)) and isUriAbs_pathwideStr(copy(s,slashPos,length(s)-slashPos+1)); - end else - result:= isUriRel_segmentwideStr(s); -end; - -function isUriRel_segmentwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = ';') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriSchemewideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not isAbnfALPHAWideChar(s[1]) then begin result:= false; exit; end; - result:= true; - for i:= 2 to l do - if not ( isAbnfALPHAWideChar(s[i]) - or isAbnfDIGITWideChar(s[i]) - or (s[i] = '+') - or (s[i] = '-') - or (s[i] = '.') - ) - then begin result:= false; exit; end; -end; - -function isUriAuthoritywideStr(s: wideString): boolean; -begin - result:= isUriServerwideStr(s) or isUriReg_namewideStr(s); -end; - -function isUriReg_namewideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = '$') or (s[i] = ',') or (s[i] = ';') - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') ) - then begin result:= false; exit; end; - end; -end; - -function isUriServerwideStr(s: wideString): boolean; -var - atPos,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= true; exit; end; - atPos:= pos('@',s); - if atPos > 0 then begin - result:= isUriUserinfowideStr(copy(s,1,atPos-1)) and isUriHostportwideStr(copy(s,atPos+1,l-atPos)); - end else - result:= isUriHostportwideStr(s); -end; - -function isUriUserinfowideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = ';') or (s[i] = ':') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriHostPortwideStr(s: wideString): boolean; -var - colonPos: integer; -begin - colonPos:= pos(':',s); - if colonPos > 0 then begin - result:= isUriHostwideStr(copy(s,1,colonPos-1)) and isUriPortwideStr(copy(s,colonPos+1,length(s)-colonPos)); - end else - result:= isUriHostwideStr(s); -end; - -function isUriHostwideStr(s: wideString): boolean; -begin - result:= isUriHostnamewideStr(s) or isUriIPv4addresswideStr(s); -end; - -function isUriHostnamewideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - if s[l] = '.' then dec(l); - i:= l; - while i > 0 do begin - if s[i] = '.' then break; - dec(i); - end; - if not isUriToplabelwideStr(copy(s,i+1,l-i)) - then begin result:= false; exit; end; - while i > 0 do begin - l:= i; - if s[l] = '.' then dec(l); - i:= l; - while i > 0 do begin - if s[i] = '.' then break; - dec(i); - end; - if not isUriDomainlabelwideStr(copy(s,i+1,l-i)) - then begin result:= false; exit; end; - end; -end; - -function isUriDomainlabelwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not ( isUriAlphanumWideChar(s[1]) and isUriAlphanumWideChar(s[l]) ) - then begin result:= false; exit; end; - result:= true; - i:= 1; - while i < l do begin - inc(i); - if not (isUriAlphanumWideChar(s[i]) or (s[i] = '-') ) - then begin result:= false; exit; end; - end; -end; - -function isUriToplabelwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not ( isUriAlphaWideChar(s[1]) and isUriAlphanumWideChar(s[l]) ) - then begin result:= false; exit; end; - result:= true; - i:= 1; - while i < l do begin - inc(i); - if not (isUriAlphanumWideChar(s[i]) or (s[i] = '-') ) - then begin result:= false; exit; end; - end; -end; - -function isUriIPv4addresswideStr(s: wideString): boolean; -var - digitNo,colonNo,i,l: integer; - digitFound: boolean; -begin - result:= false; - l:= length(s); - i:= 0; - digitNo:= 0; - colonNo:= 0; - digitFound:= false; - while i < l do begin - if isUriDigitWideChar(s[i]) then begin - if not digitFound then begin - digitFound:= true; - inc(digitNo); - end; - end else if s[i] = '.' then begin - if not digitFound then exit; - digitFound:= false; - inc(colonNo); - end else exit; - end; - if (colonNo = 3) and (digitNo = 4) then result:= true; -end; - -function isUriPortwideStr(s: wideString): boolean; -var - i,l: integer; -begin - result:= true; - l:= length(s); - for i:= 1 to l do - if not isUriDigitWideChar(s[i]) then begin result:= false; exit; end; -end; - -function isUriPathwideStr(s: wideString): boolean; -begin - if isUriAbs_pathwideStr(s) or isUriOpaque_partwideStr(s) or (s = '') - then result:= true - else result:= false; -end; - -function isUriPath_segmentswideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') or (s[i] = ';') or (s[i] = '/') ) - then begin result:= false; exit; end; - end; -end; - -function isUriSegmentwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') or (s[i] = ';') ) - then begin result:= false; exit; end; - end; -end; - -function isUriParamwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedWideChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriQuerywideStr(s: wideString): boolean; -begin - if s = '' - then result:= true - else result:= isUriUricwideStr(s); -end; - -function isUriFragmentwideStr(s: wideString): boolean; -begin - if s = '' - then result:= true - else result:= isUriUricwideStr(s); -end; - -function isUriUricwideStr(s: wideString): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 - then begin result:= false; exit; end - else result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexWideChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriReservedWideChar(s[i]) or isUriUnreservedWideChar(s[i]) ) - then begin result:= false; exit; end; - end; -end; - -function isUriReservedWideChar(c: wideChar): boolean; -begin - if (c=';') or (c='/') or (c=#63) or (c=':') or (c='@') or (c='&') or - (c='=') or (c='+') or (c='$') or (c=',') - then result:= true - else result:= false; -end; - -function isUriUnreservedWideChar(c: wideChar): boolean; -begin - if isUriAlphanumWideChar(c) or isUriMarkWideChar(c) - then result:= true - else result:= false; -end; - -function isUriMarkWideChar(c: wideChar): boolean; -begin - if (c='-') or (c='_') or (c='.') or (c='!') or (c='~') or (c='*') or - (c=#39) or (c='(') or (c=')') - then result:= true - else result:= false; -end; - -function isUriHexWideChar(c: wideChar): boolean; -begin - case word(c) of - $0030..$0039,$0041..$0046,$0061..$0066: // 0..9 , A..F , a..f - result:= true; - else - result:= false; - end; -end; - -function isUriAlphanumWideChar(c: wideChar): boolean; -begin - case word(c) of - $0030..$0039,$0041..$005A,$0061..$007A: - result:= true; - else - result:= false; - end; -end; - -function isUriAlphaWideChar(c: wideChar): boolean; -begin - case word(c) of - $0041..$005A,$0061..$007A: - result:= true; - else - result:= false; - end; -end; - -function isUriDigitWideChar(c: wideChar): boolean; -begin - case word(c) of - $0030..$0039: - result:= true; - else - result:= false; - end; -end; - -function isUriURI_referenceStr(s: string): boolean; -var - dcPos: integer; - s1: string; -begin - dcPos:= pos('#',s); - if dcPos > 0 then begin - s1:= copy(s,1,dcPos-1); - result:= ( isUriAbsoluteURIStr(s1) - or isUriRelativeURIStr(s1) - or (s1 = '') ) - and isUriFragmentStr(copy(s,dcPos+1,length(s)-dcPos)); - end else - result:= isUriAbsoluteURIStr(s) or isUriRelativeURIStr(s) or (s = ''); -end; - -function isUriAbsoluteURIStr(s: string): boolean; -var - colonPos: integer; - s1: string; -begin - colonPos:= pos(':',s); - if colonPos > 0 then begin - s1:= copy(s,colonPos+1,length(s)-colonPos); - result:= isUriSchemeStr(copy(s,1,colonPos-1)) and - ( isUriHier_partStr(s1) or isUriOpaque_partStr(s1) ); - end else result:= false; -end; - -function isUriRelativeURIStr(s: string): boolean; -var - qmPos: integer; - s1: string; -begin - qmPos:= pos('?',s); - if qmPos > 0 then begin - s1:= copy(s,1,qmPos-1); - result:= ( isUriNet_pathStr(s1) - or isUriAbs_pathStr(s1) - or isUriRel_pathStr(s1) ) - and isUriQueryStr(copy(s,qmPos+1,length(s)-qmPos)); - end else - result:= isUriNet_pathStr(s) or isUriAbs_pathStr(s) or isUriRel_pathStr(s); -end; - -function isUriHier_partStr(s: string): boolean; -var - qmPos: integer; - s1: string; -begin - qmPos:= pos('?',s); - if qmPos > 0 then begin - s1:= copy(s,1,qmPos-1); - result:= ( isUriNet_pathStr(s1) - or isUriAbs_pathStr(s1) ) - and isUriQueryStr(copy(s,qmPos+1,length(s)-qmPos)); - end else - result:= isUriNet_pathStr(s) or isUriAbs_pathStr(s); -end; - -function isUriOpaque_partStr(s: string): boolean; -begin - if s = '' then begin result:= false; exit; end; - if s[1] = '/' then begin result:= false; exit; end; - result:= isUriUricStr(s); -end; - -function isUriNet_pathStr(s: string): boolean; -var - slashPos: integer; -begin - if copy(s,1,2) <> '//' then begin result:= false; exit; end; - s:= copy(s,3,length(s)-2); - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= isUriAuthorityStr(copy(s,1,slashPos-1)) and isUriAbs_pathStr(copy(s,slashPos,length(s)-slashPos+1)); - end else - result:= isUriAuthorityStr(s); -end; - -function isUriAbs_pathStr(s: string): boolean; -begin - if s = '' then begin result:= false; exit; end; - if s[1] <> '/' then begin result:= false; exit; end; - result:= isUriPath_segmentsStr(copy(s,2,length(s)-1)); -end; - -function isUriRel_pathStr(s: string): boolean; -var - slashPos: integer; -begin - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= isUriRel_segmentStr(copy(s,1,slashPos-1)) and isUriAbs_pathStr(copy(s,slashPos,length(s)-slashPos+1)); - end else - result:= isUriRel_segmentStr(s); -end; - -function isUriRel_segmentStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = ';') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriSchemeStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not isAbnfALPHAChar(s[1]) then begin result:= false; exit; end; - result:= true; - for i:= 2 to l do - if not ( isAbnfALPHAChar(s[i]) - or isAbnfDIGITChar(s[i]) - or (s[i] = '+') - or (s[i] = '-') - or (s[i] = '.') - ) - then begin result:= false; exit; end; -end; - -function isUriAuthorityStr(s: string): boolean; -begin - result:= isUriServerStr(s) or isUriReg_nameStr(s); -end; - -function isUriReg_nameStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = '$') or (s[i] = ',') or (s[i] = ';') - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') ) - then begin result:= false; exit; end; - end; -end; - -function isUriServerStr(s: string): boolean; -var - atPos,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= true; exit; end; - atPos:= pos('@',s); - if atPos > 0 then begin - result:= isUriUserinfoStr(copy(s,1,atPos-1)) and isUriHostportStr(copy(s,atPos+1,l-atPos)); - end else - result:= isUriHostportStr(s); -end; - -function isUriUserinfoStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = ';') or (s[i] = ':') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriHostPortStr(s: string): boolean; -var - colonPos: integer; -begin - colonPos:= pos(':',s); - if colonPos > 0 then begin - result:= isUriHostStr(copy(s,1,colonPos-1)) and isUriPortStr(copy(s,colonPos+1,length(s)-colonPos)); - end else - result:= isUriHostStr(s); -end; - -function isUriHostStr(s: string): boolean; -begin - result:= isUriHostnameStr(s) or isUriIPv4addressStr(s); -end; - -function isUriHostnameStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - result:= true; - if s[l] = '.' then dec(l); - i:= l; - while i > 0 do begin - if s[i] = '.' then break; - dec(i); - end; - if not isUriToplabelStr(copy(s,i+1,l-i)) - then begin result:= false; exit; end; - while i > 0 do begin - l:= i; - if s[l] = '.' then dec(l); - i:= l; - while i > 0 do begin - if s[i] = '.' then break; - dec(i); - end; - if not isUriDomainlabelStr(copy(s,i+1,l-i)) - then begin result:= false; exit; end; - end; -end; - -function isUriDomainlabelStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not ( isUriAlphanumChar(s[1]) and isUriAlphanumChar(s[l]) ) - then begin result:= false; exit; end; - result:= true; - i:= 1; - while i < l do begin - inc(i); - if not (isUriAlphanumChar(s[i]) or (s[i] = '-') ) - then begin result:= false; exit; end; - end; -end; - -function isUriToplabelStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 then begin result:= false; exit; end; - if not ( isUriAlphaChar(s[1]) and isUriAlphanumChar(s[l]) ) - then begin result:= false; exit; end; - result:= true; - i:= 1; - while i < l do begin - inc(i); - if not (isUriAlphanumChar(s[i]) or (s[i] = '-') ) - then begin result:= false; exit; end; - end; -end; - -function isUriIPv4addressStr(s: string): boolean; -var - digitNo,colonNo,i,l: integer; - digitFound: boolean; -begin - result:= false; - l:= length(s); - i:= 0; - digitNo:= 0; - colonNo:= 0; - digitFound:= false; - while i < l do begin - if isUriDigitChar(s[i]) then begin - if not digitFound then begin - digitFound:= true; - inc(digitNo); - end; - end else if s[i] = '.' then begin - if not digitFound then exit; - digitFound:= false; - inc(colonNo); - end else exit; - end; - if (colonNo = 3) and (digitNo = 4) then result:= true; -end; - -function isUriPortStr(s: string): boolean; -var - i,l: integer; -begin - result:= true; - l:= length(s); - for i:= 1 to l do - if not isUriDigitChar(s[i]) then begin result:= false; exit; end; -end; - -function isUriPathStr(s: string): boolean; -begin - if isUriAbs_pathStr(s) or isUriOpaque_partStr(s) or (s = '') - then result:= true - else result:= false; -end; - -function isUriPath_segmentsStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') or (s[i] = ';') or (s[i] = '/') ) - then begin result:= false; exit; end; - end; -end; - -function isUriSegmentStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') or (s[i] = ';') ) - then begin result:= false; exit; end; - end; -end; - -function isUriParamStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - result:= true; - if l = 0 then exit; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriUnreservedChar(s[i]) - or (s[i] = ':') or (s[i] = '@') or (s[i] = '&') - or (s[i] = '=') or (s[i] = '+') or (s[i] = '$') - or (s[i] = ',') ) - then begin result:= false; exit; end; - end; -end; - -function isUriQueryStr(s: string): boolean; -begin - if s = '' - then result:= true - else result:= isUriUricStr(s); -end; - -function isUriFragmentStr(s: string): boolean; -begin - if s = '' - then result:= true - else result:= isUriUricStr(s); -end; - -function isUriUricStr(s: string): boolean; -var - i,l: integer; -begin - l:= length(s); - if l = 0 - then begin result:= false; exit; end - else result:= true; - i:= 0; - while i < l do begin - inc(i); - if s[i] = '%' then begin - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - if i = l then begin result:= false; exit; end; - inc(i); - if not isUriHexChar(s[i]) then begin result:= false; exit; end; - end else if not ( isUriReservedChar(s[i]) or isUriUnreservedChar(s[i]) ) - then begin result:= false; exit; end; - end; -end; - -function isUriReservedChar(c: char): boolean; -begin - if (c=';') or (c='/') or (c='?') or (c=':') or (c='@') or (c='&') or - (c='=') or (c='+') or (c='$') or (c=',') - then result:= true - else result:= false; -end; - -function isUriUnreservedChar(c: char): boolean; -begin - if isUriAlphanumChar(c) or isUriMarkChar(c) - then result:= true - else result:= false; -end; - -function isUriMarkChar(c: char): boolean; -begin - if (c='-') or (c='_') or (c='.') or (c='!') or (c='~') or (c='*') or - (c=#39) or (c='(') or (c=')') - then result:= true - else result:= false; -end; - -function isUriHexChar(c: char): boolean; -begin - case byte(c) of - $30..$39,$41..$46,$61..$66: // 0..9 , A..F , a..f - result:= true; - else - result:= false; - end; -end; - -function isUriAlphanumChar(c: char): boolean; -begin - case byte(c) of - $30..$39,$41..$5A,$61..$7A: - result:= true; - else - result:= false; - end; -end; - -function isUriAlphaChar(c: char): boolean; -begin - case byte(c) of - $41..$5A,$61..$7A: - result:= true; - else - result:= false; - end; -end; - -function isUriDigitChar(c: char): boolean; -begin - case byte(c) of - $30..$39: - result:= true; - else - result:= false; - end; -end; - -function resolveRelativeUriStr(const baseUri, - relUri: string; - var resultUri: string): boolean; -var - BaseUriAnalyzer,RelUriAnalyzer: TUriStrAnalyzer; - i,slashPos,queryIndex: integer; - pathBuffer: string; - segments: TStringList; -begin - resultUri:= ''; - BaseUriAnalyzer:= TUriStrAnalyzer.create; - RelUriAnalyzer:= TUriStrAnalyzer.create; - try - result:= BaseUriAnalyzer.setUriReference(baseUri); - result:= (RelUriAnalyzer.setUriReference(relUri) and result); - result:= ((BaseUriAnalyzer.HasUriScheme or RelUriAnalyzer.HasUriScheme) and result); - if not result then exit; // baseUri is not an absolute URI reference, or baseUri or relUri is maleformed - with RelUriAnalyzer do begin - if (UriPath = '') and not ( HasUriScheme or HasUriAuthority or HasUriQuery) then begin - // Same document reference detected - BaseUriAnalyzer.setUriFragment(UriFragment,HasUriFragment); - resultUri:= BaseUriAnalyzer.UriReference; - exit; - end; - if HasUriScheme then begin - // relUri is an absolute URI --> we are done. - resultUri:= relUri; - exit; - end; - // inherit scheme: - setUriScheme(BaseUriAnalyzer.UriScheme,BaseUriAnalyzer.HasUriScheme); - if not HasUriAuthority then begin - // inherit authority: - setUriAuthority(BaseUriAnalyzer.UriAuthority,BaseUriAnalyzer.HasUriAuthority); - if not (copy(UriPath,1,1) = '/') then begin - // analyze paths: - segments:= TStringList.create; - try - slashPos:= LastDelimiter('/',BaseUriAnalyzer.UriPath); - if slashPos > 0 - then pathBuffer:= copy(BaseUriAnalyzer.UriPath,2,slashPos-1) // Copy path without last segment and first character which is always '/' - else pathBuffer:= ''; - pathBuffer:= concat(pathBuffer,UriPath); - with segments do begin - // cut pathBuffer into segments: - slashPos:= pos('/',pathBuffer); - while slashPos > 0 do begin - Add(copy(pathBuffer,1,slashPos-1)); - pathBuffer:= copy(pathBuffer,slashPos+1,length(pathBuffer)-slashPos); - slashPos:= pos('/',pathBuffer); - end; {while ...} - Add(pathBuffer); - if (pathBuffer = '..') or (pathBuffer = '.') - then Add(''); // Necessary to preserve ending '/' under some circumstances - // remove '.' segments: - queryIndex:= IndexOf('.'); - while queryIndex > -1 do begin - Delete(queryIndex); - queryIndex:= IndexOf('.'); - end; - // remove '/..' segments: - queryIndex:= IndexOf('..'); - while queryIndex > 0 do begin - Delete(queryIndex); - Delete(pred(queryIndex)); - queryIndex:= IndexOf('..'); - end; - // test for maleformed path: - if count > 0 - then if strings[0] = '..' then begin - result:= false; - exit; - end; - pathBuffer:= ''; - for i:= 0 to pred(count) do - pathBuffer:= concat(pathBuffer,'/',strings[i]); - setUriPath(pathBuffer); - end; {with segments ...} - finally - segments.free; - end; - end; {if not (copy(UriPath,1,1) = '/') ...} - end; {if not HasAuthorityScheme ...} - resultUri:= UriReference; - end; {with RelUriAnalyzer ...} - finally - BaseUriAnalyzer.free; - RelUriAnalyzer.free; - end; -end; - -function resolveRelativeUriWideStr(const baseUri, - relUri: wideString; - var resultUri: wideString): boolean; -var - BaseUriAnalyzer,RelUriAnalyzer: TUriWideStrAnalyzer; - i,slashPos,queryIndex: integer; - pathBuffer: wideString; - segments: TdomWideStringList; -begin - resultUri:= ''; - BaseUriAnalyzer:= TUriWideStrAnalyzer.create; - RelUriAnalyzer:= TUriWideStrAnalyzer.create; - try - result:= BaseUriAnalyzer.setUriReference(baseUri); - result:= (RelUriAnalyzer.setUriReference(relUri) and result); - result:= ( (BaseUriAnalyzer.HasUriScheme or RelUriAnalyzer.HasUriScheme) and result); - if not result then exit; // baseUri is not an absolute URI reference, or baseUri or relUri is maleformed - with RelUriAnalyzer do begin - if (UriPath = '') and not ( HasUriScheme or HasUriAuthority or HasUriQuery) then begin - // Same document reference detected - BaseUriAnalyzer.setUriFragment(UriFragment,HasUriFragment); - resultUri:= BaseUriAnalyzer.UriReference; - exit; - end; - if HasUriScheme then begin - // relUri is an absolute URI --> we are done. - resultUri:= relUri; - exit; - end; - // inherit scheme: - setUriScheme(BaseUriAnalyzer.UriScheme,BaseUriAnalyzer.HasUriScheme); - if not HasUriAuthority then begin - // inherit authority: - setUriAuthority(BaseUriAnalyzer.UriAuthority,BaseUriAnalyzer.HasUriAuthority); - if not (copy(UriPath,1,1) = '/') then begin - // analyze paths: - segments:= TdomWideStringList.create; - try - slashPos:= LastDelimiter('/',BaseUriAnalyzer.UriPath); - if slashPos > 0 - then pathBuffer:= copy(BaseUriAnalyzer.UriPath,2,slashPos-1) // Copy path without last segment and first character which is always '/' - else pathBuffer:= ''; - pathBuffer:= concat(pathBuffer,UriPath); - with segments do begin - // cut pathBuffer into segments: - slashPos:= pos('/',pathBuffer); - while slashPos > 0 do begin - Add(copy(pathBuffer,1,slashPos-1)); - pathBuffer:= copy(pathBuffer,slashPos+1,length(pathBuffer)-slashPos); - slashPos:= pos('/',pathBuffer); - end; {while ...} - Add(pathBuffer); - if (pathBuffer = '..') or (pathBuffer = '.') - then Add(''); // Necessary to preserve ending '/' under some circumstances - // remove '.' segments: - queryIndex:= IndexOf('.'); - while queryIndex > -1 do begin - Delete(queryIndex); - queryIndex:= IndexOf('.'); - end; - // remove '/..' segments: - queryIndex:= IndexOf('..'); - while queryIndex > 0 do begin - Delete(queryIndex); - Delete(pred(queryIndex)); - queryIndex:= IndexOf('..'); - end; - // test for maleformed path: - if count > 0 - then if wideStrings[0] = '..' then begin - result:= false; - exit; - end; - pathBuffer:= ''; - for i:= 0 to pred(count) do - pathBuffer:= concat(pathBuffer,'/',wideStrings[i]); - setUriPath(pathBuffer); - end; {with segments ...} - finally - segments.free; - end; - end; {if not (copy(UriPath,1,1) = '/') ...} - end; {if not HasAuthorityScheme ...} - resultUri:= UriReference; - end; {with RelUriAnalyzer ...} - finally - BaseUriAnalyzer.free; - RelUriAnalyzer.free; - end; -end; - -function FilenameToUriStr(const path: TFilename; - const opt: TdomFilenameToUriOptions): string; -var - i,l: integer; -begin - if fuSetLocalhost in opt - then result:= 'file://localhost' - else result:= 'file://'; - l:= length(path); - if l > 0 then begin - // add leading '/': - result:= concat(result,'/'); - i:= 1; - while i <= l do begin - case byte(path[i]) of - // A-z a-z 0-9 ! '()* - . _ ~ - $41..$5A,$61..$7A,$30..$39,$21,$27..$2a,$2d,$2e,$5f,$7e: - result:= concat(result,path[i]); - // special treatment for colons (':'): - $3a: - if fuPlainColon in opt - then result:= concat(result,':') - else result:= concat(result,'%3a'); - // translate '\' to '/': - $5c: - result:= concat(result,'/'); - else - // calculate escape sequence: - result:= concat(result,'%',IntToHex(byte(path[i]),2)); - end; - inc(i); - end; {while ...} - end; {if ...} -end; - -function FilenameToUriWideStr(const path: TFilename; - const opt: TdomFilenameToUriOptions): wideString; -var - i,l: integer; -begin - if fuSetLocalhost in opt - then result:= 'file://localhost' - else result:= 'file://'; - l:= length(path); - if l > 0 then begin - // add leading '/': - result:= concat(result,'/'); - i:= 1; - while i <= l do begin - case byte(path[i]) of - // A-z a-z 0-9 ! '()* - . _ ~ - $41..$5A,$61..$7A,$30..$39,$21,$27..$2a,$2d,$2e,$5f,$7e: - result:= concat(result,wideString(wideChar(byte(path[i])))); - // special treatment for colons (':'): - $3a: - if fuPlainColon in opt - then result:= concat(result,':') - else result:= concat(result,'%3a'); - // translate '\' to '/': - $5c: - result:= concat(result,'/'); - else - // calculate escape sequence: - result:= concat(result,'%',IntToHex(byte(path[i]),2)); - end; - inc(i); - end; {while ...} - end; {if ...} -end; - -function UriStrToFilename(const uri: string; - var path: TFilename; - var authority, - query, - fragment: string): boolean; -var - UriAnalyzer: TUriStrAnalyzer; - pathBuffer: string; // Used to increase performance - i,l: integer; -begin - path:= ''; - query:= ''; - fragment:= ''; - result:= false; - UriAnalyzer:= TUriStrAnalyzer.create; - try - with UriAnalyzer do begin - if setUriReference(uri) then begin - if CompareText(UriScheme,'file') = 0 then begin - result:= true; - pathBuffer:= UriPath; - l:= length(pathBuffer); - if l > 0 then begin - // remove leading '/': - dec(l); - pathBuffer:= copy(pathBuffer,2,l); - i:= 1; - while i <= l do begin - if pathBuffer[i] = '%' then begin - // resolve escape sequence: - path:= concat(path,chr(StrToInt(concat('x',pathBuffer[i+1],pathBuffer[i+2])))); - i:= i+2; - end else if pathBuffer[i] = '/' then begin - // translate '/' to '\': - path:= concat(path,'\'); - end else path:= concat(path,pathBuffer[i]); - inc(i); - end; {while ...} - end; {if ...} - authority:= UriAuthority; - if HasUriQuery - then query:= concat('?',UriQuery); - if HasUriFragment - then fragment:= concat('#',UriFragment); - end; {if ...} - end; {if ...} - end; {with ...} - finally - UriAnalyzer.free; - end; -end; - -function UriWideStrToFilename(const uri: wideString; - var path: TFilename; - var authority, - query, - fragment: string): boolean; -var - UriAnalyzer: TUriStrAnalyzer; - pathBuffer: string; // Used to increase performance - uri2: string; - i,l: integer; -begin - path:= ''; - query:= ''; - fragment:= ''; - result:= false; - try - uri2:= UTF16To7BitASCIIStr(uri) - except - uri2:= ''; - end; - UriAnalyzer:= TUriStrAnalyzer.create; - try - with UriAnalyzer do begin - if setUriReference(uri2) then begin - if CompareText(UriScheme,'file') = 0 then begin - result:= true; - pathBuffer:= UriPath; - l:= length(pathBuffer); - if l > 0 then begin - // remove leading '/': - dec(l); - pathBuffer:= copy(pathBuffer,2,l); - i:= 1; - while i <= l do begin - if pathBuffer[i] = '%' then begin - // resolve escape sequence: - path:= concat(path,chr(StrToInt(concat('x',pathBuffer[i+1],pathBuffer[i+2])))); - i:= i+2; - end else if pathBuffer[i] = '/' then begin - // translate '/' to '\': - path:= concat(path,'\'); - end else path:= concat(path,pathBuffer[i]); - inc(i); - end; {while ...} - end; {if ...} - authority:= UriAuthority; - if HasUriQuery - then query:= concat('?',UriQuery); - if HasUriFragment - then fragment:= concat('#',UriFragment); - end; {if ...} - end; {if ...} - end; {with ...} - finally - UriAnalyzer.free; - end; -end; - -procedure writeWideChars(stream: TStream; const XMLChars: array of WideChar); -begin - stream.WriteBuffer(XMLChars, SizeOf(XMLChars)); -end; - -procedure writeWideString(stream: TStream; const XMLStrg: wideString); -begin - stream.WriteBuffer(pointer(XMLStrg)^, Length(XMLStrg) shl 1); -end; - -procedure writeWideStrings(stream: TStream; const XMLStrgs: array of wideString); -var - Indx: longint; -begin - for Indx := 0 to High(XMLStrgs) do - stream.WriteBuffer(pointer(XMLStrgs[Indx])^, Length(XMLStrgs[Indx]) shl 1); -end; - -function XPathBooleanFunc(const oldResult: TdomXPathResult): TdomXPathBooleanResult; -begin - if not assigned(oldResult) - then raise ENot_Supported_Err.create('Not supported error.'); - case oldResult.resultType of - XPATH_NUMBER_TYPE: begin - if TdomXPathNumberResult(oldResult).numberValue = 0 then begin // xxx NaN ? - oldResult.free; - result:= TdomXPathBooleanResult.create(false); - end else begin - oldResult.free; - result:= TdomXPathBooleanResult.create(true); - end; - end; - XPATH_NODE_SNAPSHOT_TYPE: begin - if TdomXPathSnapshotResult(oldResult).snapshotLength > 0 then begin - oldResult.free; - result:= TdomXPathBooleanResult.create(true); - end else begin - oldResult.free; - result:= TdomXPathBooleanResult.create(false); - end; - end; - XPATH_STRING_TYPE: begin - if length(TdomXPathStringResult(oldResult).stringValue) > 0 then begin - oldResult.free; - result:= TdomXPathBooleanResult.create(true); - end else begin - oldResult.free; - result:= TdomXPathBooleanResult.create(false); - end; - end; - XPATH_BOOLEAN_TYPE: result:= (oldResult as TdomXPathBooleanResult); - else - oldResult.free; - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -function XPathNumberFunc(const oldResult: TdomXPathResult): TdomXPathNumberResult; -var - stringResult: TdomXPathStringResult; - - function convertXPathStringType(const oldResult: TdomXPathStringResult): TdomXPathNumberResult; - begin - try - result:= TdomXPathNumberResult.create(StrToFloat(oldResult.stringValue)); - except - result:= TdomXPathNumberResult.create(0); - // xxx Not XPath conformant, because we must use NaN. - end; - oldResult.free; - end; - -begin - if not assigned(oldResult) - then raise ENot_Supported_Err.create('Not supported error.'); - case oldResult.resultType of - XPATH_NUMBER_TYPE: - result:= (oldResult as TdomXPathNumberResult); - XPATH_NODE_SNAPSHOT_TYPE: begin - stringResult:= XPathStringFunc(oldResult); - result:= convertXPathStringType(stringResult); - end; - XPATH_STRING_TYPE: - result:= convertXPathStringType(TdomXPathStringResult(oldResult)); - XPATH_BOOLEAN_TYPE: begin - if TdomXPathBooleanResult(oldResult).booleanValue - then result:= TdomXPathNumberResult.create(1) - else result:= TdomXPathNumberResult.create(0); - oldResult.free; - end; - else - oldResult.free; - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -function XPathStringFunc(const oldResult: TdomXPathResult): TdomXPathStringResult; -begin - if not assigned(oldResult) - then raise ENot_Supported_Err.create('Not supported error.'); - case oldResult.resultType of - XPATH_NUMBER_TYPE: begin - result:= TdomXPathStringResult.create(FloatToStr(TdomXPathNumberResult(oldResult).numberValue)); - // xxx Not XPath conformant, because FloatToStr uses limited digits. - oldResult.free; - end; - XPATH_NODE_SNAPSHOT_TYPE: begin - if TdomXPathSnapshotResult(oldResult).snapshotLength = 0 then begin - result:= TdomXPathStringResult.create(''); - oldResult.free; - end else begin - result:= TdomXPathStringResult.create(TdomXPathSnapshotResult(oldResult).snapshotItem(0).XPathStringValue); - oldResult.free; - end; - end; - XPATH_STRING_TYPE: - result:= (oldResult as TdomXPathStringResult); - XPATH_BOOLEAN_TYPE: begin - if TdomXPathBooleanResult(oldResult).booleanValue - then result:= TdomXPathStringResult.create('true') - else result:= TdomXPathStringResult.create('false'); - oldResult.free; - end; - else - oldResult.free; - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - - -// ++++++++++++++++++++++++++ TUriStrAnalyzer +++++++++++++++++++++++++++ -constructor TUriStrAnalyzer.create; -begin - setUriReference(''); -end; - -function TUriStrAnalyzer.getUriReference: string; -begin - result:= ''; - if FHasUriScheme - then result:= concat(result,FUriScheme,':'); - if FHasUriAuthority - then result:= concat(result,'//',FUriAuthority); - result:= concat(result,FUriPath); - if FHasUriQuery - then result:= concat(result,'?',FUriQuery); - if FHasUriFragment - then result:= concat(result,'#',FUriFragment); -end; - -function TUriStrAnalyzer.setUriAuthority(const Value: string; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriAuthority:= isDefined; - if isDefined then begin - if isUriAuthorityStr(Value) - then FUriAuthority:= value - else begin FUriAuthority:= ''; result:= false; end; - end else FUriAuthority:= ''; -end; - -function TUriStrAnalyzer.setUriFragment(const Value: string; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriFragment:= isDefined; - if isDefined then begin - if isUriFragmentStr(Value) - then FUriFragment:= value - else begin FUriFragment:= ''; result:= false; end; - end else FUriFragment:= ''; -end; - -function TUriStrAnalyzer.setUriPath(const Value: string): boolean; -begin - result:= isUriPathStr(Value); - if result - then FUriPath:= value - else FUriPath:= ''; -end; - -function TUriStrAnalyzer.setUriQuery(const Value: string; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriQuery:= isDefined; - if isDefined then begin - if isUriQueryStr(Value) - then FUriQuery:= value - else begin FUriQuery:= ''; result:= false; end; - end else FUriQuery:= ''; -end; - -function TUriStrAnalyzer.setUriReference(const Value: string): boolean; -var - colonPos,dcPos,qmPos,slashPos: integer; - s: string; -begin - colonPos:= pos(':',value); - result:= setUriScheme(copy(value,1,colonPos-1),(colonPos > 0)); - s:= copy(value,colonPos+1,length(value)-colonPos); - - dcPos:= pos('#',s); - if dcPos > 0 then begin - result:= (setUriFragment(copy(s,dcPos+1,length(s)-dcPos),true) and result); - s:= copy(s,1,dcPos-1); - end else setUriFragment('',false); - - qmPos:= pos('?',s); - if qmPos > 0 then begin - result:= (setUriQuery(copy(s,qmPos+1,length(s)-qmPos),true) and result); - s:= copy(s,1,qmPos-1); - end else setUriQuery('',false); - - if copy(s,1,2) = '//' then begin - s:= copy(s,3,length(s)-2); - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= (setUriAuthority(copy(s,1,slashPos-1),true) and result); - s:= copy(s,slashPos,length(s)-slashPos+1); - end else begin - result:= (setUriAuthority(s,true) and result); - s:= ''; - end; - end else setUriAuthority('',false); - - result:= setUriPath(s) and result; - - if not result then setUriReference(''); -end; - -function TUriStrAnalyzer.setUriScheme(const Value: string; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriScheme:= isDefined; - if isDefined then begin - if isUriSchemeStr(Value) - then FUriScheme:= value - else begin FUriScheme:= ''; result:= false; end; - end else FUriScheme:= ''; -end; - - - -// ++++++++++++++++++++++++ TUriWideStrAnalyzer +++++++++++++++++++++++++ -constructor TUriWideStrAnalyzer.create; -begin - setUriReference(''); -end; - -function TUriWideStrAnalyzer.getUriReference: wideString; -begin - result:= ''; - if FHasUriScheme - then result:= concat(result,FUriScheme,':'); - if FHasUriAuthority - then result:= concat(result,'//',FUriAuthority); - result:= concat(result,FUriPath); - if FHasUriQuery - then result:= concat(result,#63,FUriQuery); - if FHasUriFragment - then result:= concat(result,'#',FUriFragment); -end; - -function TUriWideStrAnalyzer.setUriAuthority(const Value: wideString; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriAuthority:= isDefined; - if isDefined then begin - if isUriAuthorityWideStr(Value) - then FUriAuthority:= value - else begin FUriAuthority:= ''; result:= false; end; - end else FUriAuthority:= ''; -end; - -function TUriWideStrAnalyzer.setUriFragment(const Value: wideString; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriFragment:= isDefined; - if isDefined then begin - if isUriFragmentWideStr(Value) - then FUriFragment:= value - else begin FUriFragment:= ''; result:= false; end; - end else FUriFragment:= ''; -end; - -function TUriWideStrAnalyzer.setUriPath(const Value: wideString): boolean; -begin - result:= isUriPathWideStr(Value); - if result - then FUriPath:= value - else FUriPath:= ''; -end; - -function TUriWideStrAnalyzer.setUriQuery(const Value: wideString; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriQuery:= isDefined; - if isDefined then begin - if isUriQueryWideStr(Value) - then FUriQuery:= value - else begin FUriQuery:= ''; result:= false; end; - end else FUriQuery:= ''; -end; - -function TUriWideStrAnalyzer.setUriReference(const Value: wideString): boolean; -var - colonPos,dcPos,qmPos,slashPos: integer; - s: wideString; -begin - colonPos:= pos(':',value); - result:= setUriScheme(copy(value,1,colonPos-1),(colonPos > 0)); - s:= copy(value,colonPos+1,length(value)-colonPos); - - dcPos:= pos('#',s); - if dcPos > 0 then begin - result:= (setUriFragment(copy(s,dcPos+1,length(s)-dcPos),true) and result); - s:= copy(s,1,dcPos-1); - end else setUriFragment('',false); - - qmPos:= pos('?',s); - if qmPos > 0 then begin - result:= (setUriQuery(copy(s,qmPos+1,length(s)-qmPos),true) and result); - s:= copy(s,1,qmPos-1); - end else setUriQuery('',false); - - if copy(s,1,2) = '//' then begin - s:= copy(s,3,length(s)-2); - slashPos:= pos('/',s); - if slashPos > 0 then begin - result:= (setUriAuthority(copy(s,1,slashPos-1),true) and result); - s:= copy(s,slashPos,length(s)-slashPos+1); - end else begin - result:= (setUriAuthority(s,true) and result); - s:= ''; - end; - end else setUriAuthority('',false); - - result:= setUriPath(s) and result; - - if not result then setUriReference(''); -end; - -function TUriWideStrAnalyzer.setUriScheme(const Value: wideString; - const isDefined: boolean): boolean; -begin - result:= true; - FHasUriScheme:= isDefined; - if isDefined then begin - if isUriSchemeWideStr(Value) - then FUriScheme:= value - else begin FUriScheme:= ''; result:= false; end; - end else FUriScheme:= ''; -end; - - - -// +++++++++++++++++++++++++ TdomNameValueList +++++++++++++++++++++++++ -constructor TdomNameValueList.create; -begin - inherited create; - FNames:= TdomWideStringList.create; - FValues:= TdomWideStringList.create; -end; - -destructor TdomNameValueList.destroy; -begin - FNames.free; - FValues.free; - inherited destroy; -end; - -procedure TdomNameValueList.error(const msg: string; - data: integer); -{$IFNDEF FPC} - function ReturnAddr: Pointer; - asm - MOV EAX,[EBP+4] - end; -{$ENDIF} -begin -{$IFDEF FPC} - raise EStringListError.CreateFmt(Msg, [Data]); -{$ELSE} - raise EStringListError.CreateFmt(Msg, [Data]) at ReturnAddr; -{$ENDIF} -end; - - -function TdomNameValueList.getLength: integer; -begin - result:= FNames.Count; -end; - -function TdomNameValueList.getCapacity: integer; -begin - result:= FNames.Capacity; -end; - -function TdomNameValueList.getDuplicates: TDuplicates; -begin - result:= FNames.duplicates; -end; - -function TdomNameValueList.getName(index: integer): wideString; -begin - result:= FNames[index]; -end; - -function TdomNameValueList.getSorted: boolean; -begin - result:= FNames.sorted; -end; - -function TdomNameValueList.getObject(index: integer): TObject; -begin - result:= FValues.objects[integer(FNames.objects[index])]; -end; - -function TdomNameValueList.getValue(index: integer): wideString; -begin - result:= FValues[integer(FNames.objects[index])]; -end; - -procedure TdomNameValueList.putObject(index: integer; aObject: TObject); -begin - FValues.objects[integer(FNames.objects[index])]:= aObject; -end; - -procedure TdomNameValueList.setCapacity(const value: integer); -begin - FNames.Capacity:= value; - FValues.Capacity:= value; -end; - -procedure TdomNameValueList.setDuplicates(const value: TDuplicates); -begin - FNames.duplicates:= value; -end; - -procedure TdomNameValueList.setSorted(const Value: boolean); -begin - FNames.sorted:= value; -end; - -function TdomNameValueList.add(const name, - value: wideString): integer; -var - valueIndex: integer; -begin - valueIndex:= FValues.Add(value); - result:= FNames.addObject(name,Tobject(pointer(valueIndex))); -end; - -procedure TdomNameValueList.addNameValueList(const nvl: TdomNameValueList); -var - i: integer; -begin - with nvl do - for i:= 0 to pred(length) do - self.addObject(names[i],values[i],objects[i]); -end; - -function TdomNameValueList.addObject(const name, - value: wideString; - AObject: TObject): integer; -var - valueIndex: integer; -begin - valueIndex:= FValues.addObject(value,AObject); - result:= FNames.addObject(name,Tobject(pointer(valueIndex))); -end; - -procedure TdomNameValueList.assign(source: TPersistent); -begin - if source is TdomNameValueList then begin - if source = self then exit; - clear; - addNameValueList(TdomNameValueList(source)); - exit; - end; - inherited assign(Source); -end; - -procedure TdomNameValueList.clear; -begin - FNames.clear; - FValues.clear; -end; - -procedure TdomNameValueList.Delete(const index: integer); -begin - FNames.Delete(index); -end; - -procedure TdomNameValueList.exchange(const index1, - index2: integer); -begin - FNames.exchange(index1,index2); -end; - -function TdomNameValueList.indexOf(const name, - value: wideString): integer; -var - i: integer; -begin - result:= -1; - for i:= 0 to pred(FNames.count) do begin - if FNames[i] = name then - if FValues[integer(FNames.objects[i])] = value then begin - result:= i; - exit; - end; - end; -end; - -function TdomNameValueList.indexOfName(const name: wideString): integer; -begin - result:= FNames.IndexOf(name); -end; - -procedure TdomNameValueList.insert(const index: integer; - const name, - value: wideString); -var - valueIndex: integer; -begin - valueIndex:= FValues.Add(value); - FNames.insertObject(index,name,Tobject(pointer(valueIndex))); -end; - -function TdomNameValueList.find(const name, - value: wideString; - var index: integer): boolean; -begin - if FNames.duplicates = dupAccept then begin - index:= indexOf(name,value); - result:= (index > -1); - end else begin - result:= FNames.find(name,index); - if result then begin - if FValues[integer(FNames.objects[index])] <> value then begin - index:= -1; - result:= false; - end; - end; - end; -end; - -function TdomNameValueList.findOfName(const name: wideString; - var index: integer): boolean; -begin - result:= FNames.find(name,index); -end; - -procedure TdomNameValueList.sort; -begin - FNames.sort; -end; - - - -//++++++++++++++++++++++++ TdomNameValueTree +++++++++++++++++++++++++++ -destructor TdomNameValueTree.Destroy; -var - index: integer; -begin - if assigned(FParentTree) - then FParentTree.replaceChild(FParentTree.indexOfChild(self),nil); - for index:= 0 to pred(FNames.count) do - children[index].free; - inherited; -end; - -function TdomNameValueTree.addChild(const name, - value: wideString; - const child: TdomNameValueTree): integer; -begin - result:= addChildObject(name,value,child,nil); -end; - -function TdomNameValueTree.addChildObject(const name, value: wideString; - const child: TdomNameValueTree; const AObject: TObject): integer; -begin - if assigned(child) then begin - if assigned(child.FParentTree) - then error('Child name-value tree is in use elsewhere', 0); - if isDescendantOf(child) - then error('Circular reference', 0); - result:= self.addObject(name,value,AObject); - FValues.objects[integer(FNames.objects[result])]:= child; - child.FParentTree:= self; - end else result:= addObject(name,value,AObject); -end; - -procedure TdomNameValueTree.assign(source: TPersistent); -var - i: integer; - newNameValueTree: TdomNameValueTree; -begin - if source is TdomNameValueTree then begin - if source = self then exit; - clear; - with TdomNameValueTree(source) do - for i:= 0 to pred(length) do begin - if hasChild(i) then begin - newNameValueTree:= TdomNameValueTree.create; - self.addChildObject(names[i],values[i],newNameValueTree,objects[i]); - newNameValueTree.assign(children[i]); - end else self.addObject(names[i],values[i],objects[i]); - end; - exit; - end; - inherited assign(Source); -end; - -procedure TdomNameValueTree.clear; -var - index: integer; - subtree: TdomNameValueTree; -begin - for index:= 0 to pred(FNames.count) do begin - subtree:= children[index]; - if assigned(subtree) then - with subtree do begin - FParentTree:= nil; - free; - end; - end; - inherited; -end; - -procedure TdomNameValueTree.Delete(const index: integer); -var - subtree: TdomNameValueTree; -begin - subtree:= children[index]; - if assigned(subtree) then - with subtree do begin - FParentTree:= nil; - free; - end; - inherited; -end; - -function TdomNameValueTree.getChild(index: integer): TdomNameValueTree; -begin - result:= TdomNameValueTree(FValues.objects[integer(FNames.objects[index])]); -end; - -function TdomNameValueTree.hasChild(const index: integer): boolean; -begin - result:= assigned(FValues.objects[integer(FNames.objects[index])]); -end; - -function TdomNameValueTree.indexOfChild(const child: TdomNameValueTree): integer; -var - i: integer; -begin - result:= -1; - for i:= 0 to pred(FNames.count) do begin - if FValues.objects[integer(FNames.objects[i])] = child then begin - result:= i; - exit; - end; - end; -end; - -procedure TdomNameValueTree.insertChild(const index: integer; - const name, - value: wideString; - const child: TdomNameValueTree); -begin - if assigned(child) then begin - if assigned(child.FParentTree) - then error('Child name-value tree is in use elsewhere', 0); - if isDescendantOf(child) - then error('Circular reference', 0); - insert(index,name,value); - FValues.objects[integer(FNames.objects[index])]:= child; - child.FParentTree:= self; - end else insert(index,name,value); -end; - -function TdomNameValueTree.isDescendantOf(const nvtree: TdomNameValueTree): boolean; -var - tree: TdomNameValueTree; -begin - tree:= self; - result:= false; - while assigned(tree) do begin - tree:= tree.parentTree; - if tree = nvtree - then begin result:= true; exit; end; - end; -end; - -function TdomNameValueTree.replaceChild(const index: integer; - const newChild: TdomNameValueTree): TdomNameValueTree; -begin - if assigned(newChild) then begin - if assigned(newChild.FParentTree) - then error('Child name-value tree is in use elsewhere', 0); - if isDescendantOf(newChild) - then error('Circular reference', 0); - result:= children[index]; - if assigned(result) - then result.FParentTree:= nil; - FValues.objects[integer(FNames.objects[index])]:= newChild; - newChild.FParentTree:= self; - end else begin - result:= children[index]; - if assigned(result) - then result.FParentTree:= nil; - FValues.objects[integer(FNames.objects[index])]:= nil; - end; -end; - - - -//++++++++++++++++++++++++++ TdomCustomStr +++++++++++++++++++++++++++++ -constructor TdomCustomStr.create; -begin - inherited; - reset; -end; - -function TdomCustomStr.getWideChars(indx: integer): wideChar; -begin - result:= FContent[indx]; -end; - -procedure TdomCustomStr.setWideChars(indx: integer; - ch: wideChar); -begin - FContent[indx]:= ch; -end; - -procedure TdomCustomStr.addWideChar(const Ch: wideChar); -begin - if FActualLen = FCapacity then begin // Grow - FCapacity:= FCapacity + FCapacity div 4; - setLength(FContent,FCapacity); - end; - Inc(FActualLen); - FContent[FActualLen]:= Ch; -end; - -procedure TdomCustomStr.addWideString(const s: wideString); -var - i,l: integer; -begin - l:= system.length(s); - while FActualLen+l > FCapacity do begin // Grow - FCapacity:= FCapacity + FCapacity div 4; - setLength(Fcontent,FCapacity); - end; - Inc(FActualLen,l); - for i:= 1 to l do - FContent[FActualLen-l+i]:= WideChar(s[i]); -end; - -function TdomCustomStr.endsWith(const s: wideString): boolean; -var - i,offset,sLength: integer; -begin - sLength:= system.length(s); - offset:= FActualLen-sLength; - if (offset < 0) or (sLength = 0) - then begin result:= false; exit; end; - i:= 1; - repeat - result := FContent[i+offset] = s[i]; - Inc(i); - until (not result) or (i > sLength); -end; - -function TdomCustomStr.isEqual(const s: wideString): boolean; -var - i,sLength: integer; -begin - sLength:= system.length(s); - if FActualLen <> sLength - then begin result:= false; exit; end; - if sLength = 0 - then begin result:= true; exit; end; - i:= 1; - repeat - result := FContent[i] = s[i]; - Inc(i); - until (not result) or (i > sLength); -end; - -procedure TdomCustomStr.reset; -begin - FCapacity:= 64; - setLength(FContent,FCapacity); - FActualLen:= 0; -end; - -function TdomCustomStr.startsWith(const s: wideString): boolean; -var - i,sLength: integer; -begin - sLength:= system.length(s); - if (FActualLen < sLength) or (sLength = 0) - then begin result:= false; exit; end; - i:= 1; - repeat - result := FContent[i] = s[i]; - Inc(i); - until (not result) or (i > sLength); -end; - -function TdomCustomStr.value: wideString; -begin - Result:= Copy(FContent,1,FActualLen); -end; - - - -// ++++++++++++++++++++++++ TdomWideStringList ++++++++++++++++++++++++ -// The code of this class is based on Delphi's TStringList class - -destructor TdomWideStringList.destroy; -begin - FOnChange := nil; - FOnChanging := nil; - inherited destroy; - if FCount <> 0 then Finalize(FList^[0], FCount); - FCount := 0; - SetCapacity(0); -end; - -function TdomWideStringList.add(s: wideString): integer; -begin - Result:= AddObject(S, nil); -end; - -function TdomWideStringList.addObject(s: wideString; - aObject: TObject): integer; -begin - if not Sorted then - Result:= FCount - else - if Find(S, Result) then - case Duplicates of - dupIgnore: Exit; - dupError: Error('String list does not allow duplicates', 0); - end; - InsertItem(Result, S, AObject); -end; - -procedure TdomWideStringList.addWideStrings(strings: TdomWideStringList); -var - i: integer; -begin - beginUpdate; - try - for i:= 0 to pred(strings.count) do - addObject(strings[i],strings.objects[i]); - finally - endUpdate; - end; -end; - -procedure TdomWideStringList.append(s: wideString); -begin - add(S); -end; - -procedure TdomWideStringList.assign(source: TPersistent); -begin - if source is TdomWideStringList then begin - if source = self then exit; - beginUpdate; - try - clear; - addWideStrings(TdomWideStringList(source)); - finally - endUpdate; - end; - exit; - end; - inherited assign(Source); -end; - -procedure TdomWideStringList.beginUpdate; - -begin - if FUpdateCount = 0 then setUpdateState(True); - inc(FUpdateCount); -end; - -procedure TdomWideStringList.changed; -begin - if (FUpdateCount = 0) and Assigned(FOnChange) then FOnChange(Self); -end; - -procedure TdomWideStringList.changing; -begin - if (FUpdateCount = 0) and Assigned(FOnChanging) then FOnChanging(Self); -end; - -procedure TdomWideStringList.clear; -begin - if FCount <> 0 then - begin - Changing; - Finalize(FList^[0], FCount); - FCount := 0; - SetCapacity(0); - Changed; - end; -end; - -procedure TdomWideStringList.Delete(index: integer); -begin - if (Index < 0) or (Index >= FCount) then Error('List index out of bounds (%d)', Index); - Changing; - Finalize(FList^[Index]); - Dec(FCount); - if Index < FCount then - System.Move(FList^[Index + 1], FList^[Index], - (FCount - Index) * SizeOf(TdomWideStringItem)); - Changed; -end; - -procedure TdomWideStringList.endUpdate; -begin - dec(FUpdateCount); - if FUpdateCount = 0 then setUpdateState(False); -end; - -procedure TdomWideStringList.error(const msg: string; - data: integer); -{$IFNDEF FPC} - function ReturnAddr: Pointer; - asm - MOV EAX,[EBP+4] - end; -{$ENDIF} -begin -{$IFDEF FPC} - raise EStringListError.CreateFmt(msg, [Data]); -{$ELSE} - raise EStringListError.CreateFmt(Msg, [Data]) at ReturnAddr; -{$ENDIF} -end; - -procedure TdomWideStringList.exchange(index1, - index2: integer); -begin - if (Index1 < 0) or (Index1 >= FCount) then Error('List index out of bounds (%d)', Index1); - if (Index2 < 0) or (Index2 >= FCount) then Error('List index out of bounds (%d)', Index2); - Changing; - ExchangeItems(Index1, Index2); - Changed; -end; - -procedure TdomWideStringList.exchangeItems(index1, - index2: integer); -var - Temp: Integer; - Item1, Item2: ^TdomWideStringItem; -begin - Item1 := @FList^[Index1]; - Item2 := @FList^[Index2]; - Temp := Integer(Item1^.FString); - Integer(Item1^.FString) := Integer(Item2^.FString); - Integer(Item2^.FString) := Temp; - Temp := Integer(Item1^.FObject); - Integer(Item1^.FObject) := Integer(Item2^.FObject); - Integer(Item2^.FObject) := Temp; -end; - -function TdomWideStringList.find(const s: wideString; - var index: Integer): boolean; -var - L, H, I, C: Integer; -begin - Result := False; - L := 0; - H := FCount - 1; - while L <= H do - begin - I := (L + H) shr 1; - C := CompareText(FList^[I].FString, S); - if C < 0 then L := I + 1 else - begin - H := I - 1; - if C = 0 then - begin - Result := True; - if Duplicates <> dupAccept then L := I; - end; - end; - end; - Index := L; -end; - -function TdomWideStringList.get(index: integer): wideString; -begin - if (Index < 0) or (Index >= FCount) then Error('List index out of bounds (%d)', Index); - Result := FList^[Index].FString; -end; - -function TdomWideStringList.getCapacity: Integer; -begin - Result := FCapacity; -end; - -function TdomWideStringList.getCount: Integer; -begin - Result := FCount; -end; - -function TdomWideStringList.getObject(index: integer): TObject; -begin - if (Index < 0) or (Index >= FCount) then Error('List index out of bounds (%d)', Index); - Result := FList^[Index].FObject; -end; - -procedure TdomWideStringList.grow; -var - Delta: Integer; -begin - if FCapacity > 64 then Delta := FCapacity div 4 else - if FCapacity > 8 then Delta := 16 else - Delta := 4; - SetCapacity(FCapacity + Delta); -end; - -function TdomWideStringList.indexOf(const s: wideString): integer; -begin - if not Sorted then begin - for Result:= 0 to GetCount - 1 do - if CompareText(Get(Result), S) = 0 then exit; - Result := -1; - end else - if not Find(S, Result) then result := -1; -end; - -procedure TdomWideStringList.insert(index: integer; - const s: wideString); -begin - InsertObject(Index, S, nil); -end; - -procedure TdomWideStringList.insertObject(index: integer; - const s: wideString; - AObject: TObject); -begin - if Sorted then Error('Operation not allowed on sorted string list', 0); - if (Index < 0) or (Index > FCount) then Error('List index out of bounds (%d)', Index); - InsertItem(Index, S, AObject); -end; - -procedure TdomWideStringList.insertItem(index: integer; - const s: wideString; - AObject: TObject); -begin - Changing; - if FCount = FCapacity then Grow; - if Index < FCount then - System.Move(FList^[Index], FList^[Index + 1], - (FCount - Index) * SizeOf(TdomWideStringItem)); - with FList^[Index] do - begin - Pointer(FString) := nil; - FObject := AObject; - FString := S; - end; - Inc(FCount); - Changed; -end; - -procedure TdomWideStringList.put(index: integer; - const s: wideString); -begin - if Sorted then Error('Operation not allowed on sorted string list', 0); - if (Index < 0) or (Index >= FCount) then Error('List index out of bounds (%d)', Index); - Changing; - FList^[Index].FString := S; - Changed; -end; - -procedure TdomWideStringList.putObject(index: integer; - aObject: TObject); -begin - if (Index < 0) or (Index >= FCount) then Error('List index out of bounds (%d)', Index); - Changing; - FList^[Index].FObject := AObject; - Changed; -end; - -procedure TdomWideStringList.quickSort(l, - r: integer); -var - I, J: Integer; - P: WideString; -begin - repeat - I := L; - J := R; - P := FList^[(L + R) shr 1].FString; - repeat - while CompareText(FList^[I].FString, P) < 0 do Inc(I); - while CompareText(FList^[J].FString, P) > 0 do Dec(J); - if I <= J then - begin - ExchangeItems(I, J); - Inc(I); - Dec(J); - end; - until I > J; - if L < J then - QuickSort(L, J); - L := I; - until I >= R; -end; - -procedure TdomWideStringList.setCapacity(newCapacity: integer); -begin - ReallocMem(FList, NewCapacity * SizeOf(TdomWideStringItem)); - FCapacity := NewCapacity; -end; - -procedure TdomWideStringList.setSorted(const value: boolean); -begin - if FSorted <> Value then begin - if Value then Sort; - FSorted := Value; - end; -end; - -procedure TdomWideStringList.setUpdateState(updating: boolean); -begin - if Updating then Changing else Changed; -end; - -procedure TdomWideStringList.sort; -begin - if not sorted and (FCount > 1) then begin - changing; - quickSort(0, FCount - 1); - changed; - end; -end; - - - -// +++++++++++++++++++++++ TdomWideStringStream +++++++++++++++++++++++ -// - Provided by Karl Waclawek - -// This is a stream interface for widestrings. -// Purpose: avoid excessive memory re-allocations that occur with -// wideStrings because they are not reference counted. -// Note: when the dataString property is accesses, the complete -// wideString will be copied out. - -constructor TdomWideStringStream.CreateFromString(const aString: wideString); -begin - inherited create; - setSize(Length(aString) shl 1); - Move(pointer(aString)^, FDataStringP^, FSize); -end; - -destructor TdomWideStringStream.destroy; -begin - FreeMem(FDataStringP); - inherited destroy; -end; - -function TdomWideStringStream.GetDataString: wideString; -begin - setLength(Result, StringLength); - Move(FDataStringP^, pointer(Result)^, FSize); -end; - -function TdomWideStringStream.Read(var Buffer; Count: longint): longint; -begin - Result := FSize - FPosition; - if Result > Count then Result := Count; - Move((FDataStringP + FPosition)^, Buffer, Result); - Inc(FPosition, Result); -end; - -function TdomWideStringStream.Write(const Buffer; Count: longint): longint; -var - NewPos: longint; -begin - Result := Count; - NewPos := FPosition + Result; - if NewPos > FSize - then setSize(((NewPos + 1) shr 1) shl 1); //next larger even value - Move(Buffer, (FDataStringP + FPosition)^, Result); - FPosition := NewPos; -end; - -function TdomWideStringStream.Seek(Offset: longint; Origin: Word): longint; -begin - case Origin of - soFromBeginning: FPosition := Offset; - soFromCurrent: FPosition := FPosition + Offset; - soFromEnd: FPosition := FSize - Offset; - end; - if FPosition > FSize then FPosition := FSize - else if FPosition < 0 then FPosition := 0; - Result := FPosition; -end; - -function TdomWideStringStream.ReadString(Count: longint): wideString; -// Reads Count WideChars from stream and returns them as wideString. -var - Len: longint; -begin - if Odd(FPosition) then raise EReadError.create(SCannotReadOddPos); - Len := (FSize - FPosition) shr 1; - if Len > Count then Len := Count; - setLength(Result, Len); - Read(pointer(Result)^, Len shl 1); -end; - -procedure TdomWideStringStream.WriteString(const aString: wideString); -// Writes aString into stream, starting at StringPosition, overwriting -// existing characters and extending the stream if necessary. -begin - if Odd(FPosition) then raise EWriteError.create(SCannotWriteOddPos); - Write(pointer(aString)^, Length(aString) shl 1); -end; - -procedure TdomWideStringStream.SetCapacity(NewCapacity: longint); -// sets stream capacity in bytes. -begin - if NewCapacity < FSize then raise EStreamError.create(SCapacityLessSize); - ReallocMem(FDataStringP, NewCapacity); - FCapacity := NewCapacity; -end; - -procedure TdomWideStringStream.SetSize(NewSize: longint); -// sets stream size in bytes. -var - Delta: longint; -begin - if Odd(NewSize) then raise EStreamError.create(SOddSizeInvalid); - if NewSize > Capacity then begin - Delta := NewSize shr 2; - if Delta < 8 then Delta := 8; - setCapacity(((NewSize + Delta) shr 2) shl 2); //make it a multiple of 4 - end else - if NewSize < 0 then raise EStreamError.create(SNegativeSizeInvalid); - FSize := NewSize; - if FPosition > FSize then FPosition := FSize; -end; - -procedure TdomWideStringStream.SetStringPosition(value: longint); -// sets string position in terms of WideChars. -begin - Position := (value - 1) shl 1; -end; - -function TdomWideStringStream.GetStringPosition: longint; -// ets string position in terms of WideChars. -begin - if Odd(Position) then raise EStreamError.create(SOddPosInvalid); - Result := (Position shr 1) + 1; -end; - -procedure TdomWideStringStream.SetStringLength(value: longint); -// sets string length in terms of WideChars. -begin - setSize(value shl 1); -end; - -function TdomWideStringStream.GetStringLength: longint; -// gets string length in terms of WideChars. -begin - Result := FSize shr 1; -end; - - - -//++++++++++++++++++++++++++++ TIso639Info ++++++++++++++++++++++++++++ -constructor TIso639Info.create; -begin - inherited create; - FSupportedLanguages:= [iso639_en]; - FNameLanguage:= iso639_en; - FAppendSymbolToName:= false; -end; - -procedure TIso639Info.assignTo(dest: TPersistent); -var - i: integer; -begin - if dest is TStrings then begin - - with TStrings(dest) do begin - beginUpdate; - try - clear; - try - for i:= ord(low(TIso639LanguageCode)) to ord(high(TIso639LanguageCode)) do - addObject(UTF16To7BitASCIIStr(codeToName(TIso639LanguageCode(i))),TObject(pointer(i))); - except - clear; - raise; - end; - finally - endUpdate; - end; - end; - - end else if dest is TdomWideStringList then begin - - with TdomWideStringList(dest) do begin - beginUpdate; - try - clear; - try - for i:= ord(low(TIso639LanguageCode)) to ord(high(TIso639LanguageCode)) do - addObject(codeToName(TIso639LanguageCode(i)),tobject(pointer(i))); - except - clear; - raise; - end; - finally - endUpdate; - end; - end; - - end else inherited assignTo(dest); -end; - -function TIso639Info.codeToName(const value: TIso639LanguageCode): wideString; -begin - case nameLanguage of - iso639_en: result:= codeToName_en(value); - else - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -function TIso639Info.codeToName_en(value: TIso639LanguageCode): wideString; -begin - if value = iso639_aa then result:= 'Afar' - else if value = iso639_ab then result:= 'Abkhazian' - else if value = iso639_af then result:= 'Afrikaans' - else if value = iso639_am then result:= 'Amharic' - else if value = iso639_ar then result:= 'Arabic' - else if value = iso639_as then result:= 'Assamese' - else if value = iso639_ay then result:= 'Aymara' - else if value = iso639_az then result:= 'Azerbaijani' - else if value = iso639_ba then result:= 'Bashkir' - else if value = iso639_be then result:= 'Byelorussian' - else if value = iso639_bg then result:= 'Bulgarian' - else if value = iso639_bh then result:= 'Bihari' - else if value = iso639_bi then result:= 'Bislama' - else if value = iso639_bn then result:= 'Bengali; Bangla' - else if value = iso639_bo then result:= 'Tibetan' - else if value = iso639_br then result:= 'Breton' - else if value = iso639_ca then result:= 'Catalan' - else if value = iso639_co then result:= 'Corsican' - else if value = iso639_cs then result:= 'Czech' - else if value = iso639_cy then result:= 'Welsh' - else if value = iso639_da then result:= 'Danish' - else if value = iso639_de then result:= 'German' - else if value = iso639_dz then result:= 'Bhutani' - else if value = iso639_el then result:= 'Greek' - else if value = iso639_en then result:= 'English' - else if value = iso639_eo then result:= 'Esperanto' - else if value = iso639_es then result:= 'Spanish' - else if value = iso639_et then result:= 'Estonian' - else if value = iso639_eu then result:= 'Basque' - else if value = iso639_fa then result:= 'Persian' - else if value = iso639_fi then result:= 'Finnish' - else if value = iso639_fj then result:= 'Fiji' - else if value = iso639_fo then result:= 'Faeroese' - else if value = iso639_fr then result:= 'French' - else if value = iso639_fy then result:= 'Frisian' - else if value = iso639_ga then result:= 'Irish' - else if value = iso639_gd then result:= 'Scots Gaelic' - else if value = iso639_gl then result:= 'Galician' - else if value = iso639_gn then result:= 'Guarani' - else if value = iso639_gu then result:= 'Gujarati' - else if value = iso639_ha then result:= 'Hausa' - else if value = iso639_hi then result:= 'Hindi' - else if value = iso639_hr then result:= 'Croatian' - else if value = iso639_hu then result:= 'Hungarian' - else if value = iso639_hy then result:= 'Armenian' - else if value = iso639_ia then result:= 'Interlingua' - else if value = iso639_ie then result:= 'Interlingue' - else if value = iso639_ik then result:= 'Inupiak' - else if value = iso639_in then result:= 'Indonesian' - else if value = iso639_is then result:= 'Icelandic' - else if value = iso639_it then result:= 'Italian' - else if value = iso639_iw then result:= 'Hebrew' - else if value = iso639_ja then result:= 'Japanese' - else if value = iso639_ji then result:= 'Yiddish' - else if value = iso639_jw then result:= 'Javanese' - else if value = iso639_ka then result:= 'Georgian' - else if value = iso639_kk then result:= 'Kazakh' - else if value = iso639_kl then result:= 'Greenlandic' - else if value = iso639_km then result:= 'Cambodian' - else if value = iso639_kn then result:= 'Kannada' - else if value = iso639_ko then result:= 'Korean' - else if value = iso639_ks then result:= 'Kashmiri' - else if value = iso639_ku then result:= 'Kurdish' - else if value = iso639_ky then result:= 'Kirghiz' - else if value = iso639_la then result:= 'Latin' - else if value = iso639_ln then result:= 'Lingala' - else if value = iso639_lo then result:= 'Laothian' - else if value = iso639_lt then result:= 'Lithuanian' - else if value = iso639_lv then result:= 'Latvian; Lettish' - else if value = iso639_mg then result:= 'Malagasy' - else if value = iso639_mi then result:= 'Maori' - else if value = iso639_mk then result:= 'Macedonian' - else if value = iso639_ml then result:= 'Malayalam' - else if value = iso639_mn then result:= 'Mongolian' - else if value = iso639_mo then result:= 'Moldavian' - else if value = iso639_mr then result:= 'Marathi' - else if value = iso639_ms then result:= 'Malay' - else if value = iso639_mt then result:= 'Maltese' - else if value = iso639_my then result:= 'Burmese' - else if value = iso639_na then result:= 'Nauru' - else if value = iso639_ne then result:= 'Nepali' - else if value = iso639_nl then result:= 'Dutch' - else if value = iso639_no then result:= 'Norwegian' - else if value = iso639_oc then result:= 'Occitan' - else if value = iso639_om then result:= 'Afan; Oromo' - else if value = iso639_or then result:= 'Oriya' - else if value = iso639_pa then result:= 'Punjabi' - else if value = iso639_pl then result:= 'Polish' - else if value = iso639_ps then result:= 'Pashto; Pushto' - else if value = iso639_pt then result:= 'Portuguese' - else if value = iso639_qu then result:= 'Quechua' - else if value = iso639_rm then result:= 'Rhaeto-Romance' - else if value = iso639_rn then result:= 'Kirundi' - else if value = iso639_ro then result:= 'Romanian' - else if value = iso639_ru then result:= 'Russian' - else if value = iso639_rw then result:= 'Kinyarwanda' - else if value = iso639_sa then result:= 'Sanskrit' - else if value = iso639_sd then result:= 'Sindhi' - else if value = iso639_sg then result:= 'Sangro' - else if value = iso639_sh then result:= 'Serbo-Croatian' - else if value = iso639_si then result:= 'Singhalese' - else if value = iso639_sk then result:= 'Slovak' - else if value = iso639_sl then result:= 'Slovenian' - else if value = iso639_sm then result:= 'Samoan' - else if value = iso639_sn then result:= 'Shona' - else if value = iso639_so then result:= 'Somali' - else if value = iso639_sq then result:= 'Albanian' - else if value = iso639_sr then result:= 'Serbian' - else if value = iso639_ss then result:= 'Siswati' - else if value = iso639_st then result:= 'Sesotho' - else if value = iso639_su then result:= 'Sundanese' - else if value = iso639_sv then result:= 'Swedish' - else if value = iso639_sw then result:= 'Swahili' - else if value = iso639_ta then result:= 'Tamil' - else if value = iso639_te then result:= 'Tegulu' - else if value = iso639_tg then result:= 'Tajik' - else if value = iso639_th then result:= 'Thai' - else if value = iso639_ti then result:= 'Tigrinya' - else if value = iso639_tk then result:= 'Turkmen' - else if value = iso639_tl then result:= 'Tagalog' - else if value = iso639_tn then result:= 'Setswana' - else if value = iso639_to then result:= 'Tonga' - else if value = iso639_tr then result:= 'Turkish' - else if value = iso639_ts then result:= 'Tsonga' - else if value = iso639_tt then result:= 'Tatar' - else if value = iso639_tw then result:= 'Twi' - else if value = iso639_uk then result:= 'Ukrainian' - else if value = iso639_ur then result:= 'Urdu' - else if value = iso639_uz then result:= 'Uzbek' - else if value = iso639_vi then result:= 'Vietnamese' - else if value = iso639_vo then result:= 'Volapuk' - else if value = iso639_wo then result:= 'Wolof' - else if value = iso639_xh then result:= 'Xhosa' - else if value = iso639_yo then result:= 'Yoruba' - else if value = iso639_zh then result:= 'Chinese' - else if value = iso639_zu then result:= 'Zulu' - ; - - if FAppendSymbolToName - then result:= concat(result,' [',codeToSymbol(value),']'); -end; - -function TIso639Info.codeToSymbol(const value: TIso639LanguageCode): wideString; -begin - if value = iso639_aa then result:= 'aa' // Afar - else if value = iso639_ab then result:= 'ab' // Abkhazian - else if value = iso639_af then result:= 'af' // Afrikaans - else if value = iso639_am then result:= 'am' // Amharic - else if value = iso639_ar then result:= 'ar' // Arabic - else if value = iso639_as then result:= 'as' // Assamese - else if value = iso639_ay then result:= 'ay' // Aymara - else if value = iso639_az then result:= 'az' // Azerbaijani - else if value = iso639_ba then result:= 'ba' // Bashkir - else if value = iso639_be then result:= 'be' // Byelorussian - else if value = iso639_bg then result:= 'bg' // Bulgarian - else if value = iso639_bh then result:= 'bh' // Bihari - else if value = iso639_bi then result:= 'bi' // Bislama - else if value = iso639_bn then result:= 'bn' // Bengali; Bangla - else if value = iso639_bo then result:= 'bo' // Tibetan - else if value = iso639_br then result:= 'br' // Breton - else if value = iso639_ca then result:= 'ca' // Catalan - else if value = iso639_co then result:= 'co' // Corsican - else if value = iso639_cs then result:= 'cs' // Czech - else if value = iso639_cy then result:= 'cy' // Welsh - else if value = iso639_da then result:= 'da' // Danish - else if value = iso639_de then result:= 'de' // German - else if value = iso639_dz then result:= 'dz' // Bhutani - else if value = iso639_el then result:= 'el' // Greek - else if value = iso639_en then result:= 'en' // English - else if value = iso639_eo then result:= 'eo' // Esperanto - else if value = iso639_es then result:= 'es' // Spanish - else if value = iso639_et then result:= 'et' // Estonian - else if value = iso639_eu then result:= 'eu' // Basque - else if value = iso639_fa then result:= 'fa' // Persian - else if value = iso639_fi then result:= 'fi' // Finnish - else if value = iso639_fj then result:= 'fj' // Fiji - else if value = iso639_fo then result:= 'fo' // Faeroese - else if value = iso639_fr then result:= 'fr' // French - else if value = iso639_fy then result:= 'fy' // Frisian - else if value = iso639_ga then result:= 'ga' // Irish - else if value = iso639_gd then result:= 'gd' // Scots Gaelic - else if value = iso639_gl then result:= 'gl' // Galician - else if value = iso639_gn then result:= 'gn' // Guarani - else if value = iso639_gu then result:= 'gu' // Gujarati - else if value = iso639_ha then result:= 'ha' // Hausa - else if value = iso639_hi then result:= 'hi' // Hindi - else if value = iso639_hr then result:= 'hr' // Croatian - else if value = iso639_hu then result:= 'hu' // Hungarian - else if value = iso639_hy then result:= 'hy' // Armenian - else if value = iso639_ia then result:= 'ia' // Interlingua - else if value = iso639_ie then result:= 'ie' // Interlingue - else if value = iso639_ik then result:= 'ik' // Inupiak - else if value = iso639_in then result:= 'in' // Indonesian - else if value = iso639_is then result:= 'is' // Icelandic - else if value = iso639_it then result:= 'it' // Italian - else if value = iso639_iw then result:= 'iw' // Hebrew - else if value = iso639_ja then result:= 'ja' // Japanese - else if value = iso639_ji then result:= 'ji' // Yiddish - else if value = iso639_jw then result:= 'jw' // Javanese - else if value = iso639_ka then result:= 'ka' // Georgian - else if value = iso639_kk then result:= 'kk' // Kazakh - else if value = iso639_kl then result:= 'kl' // Greenlandic - else if value = iso639_km then result:= 'km' // Cambodian - else if value = iso639_kn then result:= 'kn' // Kannada - else if value = iso639_ko then result:= 'ko' // Korean - else if value = iso639_ks then result:= 'ks' // Kashmiri - else if value = iso639_ku then result:= 'ku' // Kurdish - else if value = iso639_ky then result:= 'ky' // Kirghiz - else if value = iso639_la then result:= 'la' // Latin - else if value = iso639_ln then result:= 'ln' // Lingala - else if value = iso639_lo then result:= 'lo' // Laothian - else if value = iso639_lt then result:= 'lt' // Lithuanian - else if value = iso639_lv then result:= 'lv' // Latvian; Lettish - else if value = iso639_mg then result:= 'mg' // Malagasy - else if value = iso639_mi then result:= 'mi' // Maori - else if value = iso639_mk then result:= 'mk' // Macedonian - else if value = iso639_ml then result:= 'ml' // Malayalam - else if value = iso639_mn then result:= 'mn' // Mongolian - else if value = iso639_mo then result:= 'mo' // Moldavian - else if value = iso639_mr then result:= 'mr' // Marathi - else if value = iso639_ms then result:= 'ms' // Malay - else if value = iso639_mt then result:= 'mt' // Maltese - else if value = iso639_my then result:= 'my' // Burmese - else if value = iso639_na then result:= 'na' // Nauru - else if value = iso639_ne then result:= 'ne' // Nepali - else if value = iso639_nl then result:= 'nl' // Dutch - else if value = iso639_no then result:= 'no' // Norwegian - else if value = iso639_oc then result:= 'oc' // Occitan - else if value = iso639_om then result:= 'om' // Afan; Oromo - else if value = iso639_or then result:= 'or' // Oriya - else if value = iso639_pa then result:= 'pa' // Punjabi - else if value = iso639_pl then result:= 'pl' // Polish - else if value = iso639_ps then result:= 'ps' // Pashto; Pushto - else if value = iso639_pt then result:= 'pt' // Portuguese - else if value = iso639_qu then result:= 'qu' // Quechua - else if value = iso639_rm then result:= 'rm' // Rhaeto-Romance - else if value = iso639_rn then result:= 'rn' // Kirundi - else if value = iso639_ro then result:= 'ro' // Romanian - else if value = iso639_ru then result:= 'ru' // Russian - else if value = iso639_rw then result:= 'rw' // Kinyarwanda - else if value = iso639_sa then result:= 'sa' // Sanskrit - else if value = iso639_sd then result:= 'sd' // Sindhi - else if value = iso639_sg then result:= 'sg' // Sangro - else if value = iso639_sh then result:= 'sh' // Serbo-Croatian - else if value = iso639_si then result:= 'si' // Singhalese - else if value = iso639_sk then result:= 'sk' // Slovak - else if value = iso639_sl then result:= 'sl' // Slovenian - else if value = iso639_sm then result:= 'sm' // Samoan - else if value = iso639_sn then result:= 'sn' // Shona - else if value = iso639_so then result:= 'so' // Somali - else if value = iso639_sq then result:= 'sq' // Albanian - else if value = iso639_sr then result:= 'sr' // Serbian - else if value = iso639_ss then result:= 'ss' // Siswati - else if value = iso639_st then result:= 'st' // Sesotho - else if value = iso639_su then result:= 'su' // Sundanese - else if value = iso639_sv then result:= 'sv' // Swedish - else if value = iso639_sw then result:= 'sw' // Swahili - else if value = iso639_ta then result:= 'ta' // Tamil - else if value = iso639_te then result:= 'te' // Tegulu - else if value = iso639_tg then result:= 'tg' // Tajik - else if value = iso639_th then result:= 'th' // Thai - else if value = iso639_ti then result:= 'ti' // Tigrinya - else if value = iso639_tk then result:= 'tk' // Turkmen - else if value = iso639_tl then result:= 'tl' // Tagalog - else if value = iso639_tn then result:= 'tn' // Setswana - else if value = iso639_to then result:= 'to' // Tonga - else if value = iso639_tr then result:= 'tr' // Turkish - else if value = iso639_ts then result:= 'ts' // Tsonga - else if value = iso639_tt then result:= 'tt' // Tatar - else if value = iso639_tw then result:= 'tw' // Twi - else if value = iso639_uk then result:= 'uk' // Ukrainian - else if value = iso639_ur then result:= 'ur' // Urdu - else if value = iso639_uz then result:= 'uz' // Uzbek - else if value = iso639_vi then result:= 'vi' // Vietnamese - else if value = iso639_vo then result:= 'vo' // Volapuk - else if value = iso639_wo then result:= 'wo' // Wolof - else if value = iso639_xh then result:= 'xh' // Xhosa - else if value = iso639_yo then result:= 'yo' // Yoruba - else if value = iso639_zh then result:= 'zh' // Chinese - else if value = iso639_zu then result:= 'zu' // Zulu - ; -end; - -function TIso639Info.nameToCode(const value: wideString): TIso639LanguageCode; -begin - case nameLanguage of - iso639_en: result:= nameToCode_en(value); - else - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -function TIso639Info.nameToCode_en(value: wideString): TIso639LanguageCode; -var - i,j: integer; - dummy: wideString; -begin - i:= pos(';',value); - if i > 0 then begin - dummy:= copy(value,1,i-1); - value:= dummy; - end else begin - j:= pos('[',value); - if j > 1 then begin - if value[j] = ' ' then begin - dummy:= copy(value,1,j-2); - value:= dummy; - end; - end; - end; - - if value = 'Afar' then result:= iso639_aa - else if value = 'Abkhazian' then result:= iso639_ab - else if value = 'Afrikaans' then result:= iso639_af - else if value = 'Amharic' then result:= iso639_am - else if value = 'Arabic' then result:= iso639_ar - else if value = 'Assamese' then result:= iso639_as - else if value = 'Aymara' then result:= iso639_ay - else if value = 'Azerbaijani' then result:= iso639_az - else if value = 'Bashkir' then result:= iso639_ba - else if value = 'Byelorussian' then result:= iso639_be - else if value = 'Bulgarian' then result:= iso639_bg - else if value = 'Bihari' then result:= iso639_bh - else if value = 'Bislama' then result:= iso639_bi - else if value = 'Bengali' then result:= iso639_bn - else if value = 'Bangla' then result:= iso639_bn - else if value = 'Tibetan' then result:= iso639_bo - else if value = 'Breton' then result:= iso639_br - else if value = 'Catalan' then result:= iso639_ca - else if value = 'Corsican' then result:= iso639_co - else if value = 'Czech' then result:= iso639_cs - else if value = 'Welsh' then result:= iso639_cy - else if value = 'Danish' then result:= iso639_da - else if value = 'German' then result:= iso639_de - else if value = 'Bhutani' then result:= iso639_dz - else if value = 'Greek' then result:= iso639_el - else if value = 'English' then result:= iso639_en - else if value = 'Esperanto' then result:= iso639_eo - else if value = 'Spanish' then result:= iso639_es - else if value = 'Estonian' then result:= iso639_et - else if value = 'Basque' then result:= iso639_eu - else if value = 'Persian' then result:= iso639_fa - else if value = 'Finnish' then result:= iso639_fi - else if value = 'Fiji' then result:= iso639_fj - else if value = 'Faeroese' then result:= iso639_fo - else if value = 'French' then result:= iso639_fr - else if value = 'Frisian' then result:= iso639_fy - else if value = 'Irish' then result:= iso639_ga - else if value = 'Scots Gaelic' then result:= iso639_gd - else if value = 'Galician' then result:= iso639_gl - else if value = 'Guarani' then result:= iso639_gn - else if value = 'Gujarati' then result:= iso639_gu - else if value = 'Hausa' then result:= iso639_ha - else if value = 'Hindi' then result:= iso639_hi - else if value = 'Croatian' then result:= iso639_hr - else if value = 'Hungarian' then result:= iso639_hu - else if value = 'Armenian' then result:= iso639_hy - else if value = 'Interlingua' then result:= iso639_ia - else if value = 'Interlingue' then result:= iso639_ie - else if value = 'Inupiak' then result:= iso639_ik - else if value = 'Indonesian' then result:= iso639_in - else if value = 'Icelandic' then result:= iso639_is - else if value = 'Italian' then result:= iso639_it - else if value = 'Hebrew' then result:= iso639_iw - else if value = 'Japanese' then result:= iso639_ja - else if value = 'Yiddish' then result:= iso639_ji - else if value = 'Javanese' then result:= iso639_jw - else if value = 'Georgian' then result:= iso639_ka - else if value = 'Kazakh' then result:= iso639_kk - else if value = 'Greenlandic' then result:= iso639_kl - else if value = 'Cambodian' then result:= iso639_km - else if value = 'Kannada' then result:= iso639_kn - else if value = 'Korean' then result:= iso639_ko - else if value = 'Kashmiri' then result:= iso639_ks - else if value = 'Kurdish' then result:= iso639_ku - else if value = 'Kirghiz' then result:= iso639_ky - else if value = 'Latin' then result:= iso639_la - else if value = 'Lingala' then result:= iso639_ln - else if value = 'Laothian' then result:= iso639_lo - else if value = 'Lithuanian' then result:= iso639_lt - else if value = 'Latvian' then result:= iso639_lv - else if value = 'Lettish' then result:= iso639_lv - else if value = 'Malagasy' then result:= iso639_mg - else if value = 'Maori' then result:= iso639_mi - else if value = 'Macedonian' then result:= iso639_mk - else if value = 'Malayalam' then result:= iso639_ml - else if value = 'Mongolian' then result:= iso639_mn - else if value = 'Moldavian' then result:= iso639_mo - else if value = 'Marathi' then result:= iso639_mr - else if value = 'Malay' then result:= iso639_ms - else if value = 'Maltese' then result:= iso639_mt - else if value = 'Burmese' then result:= iso639_my - else if value = 'Nauru' then result:= iso639_na - else if value = 'Nepali' then result:= iso639_ne - else if value = 'Dutch' then result:= iso639_nl - else if value = 'Norwegian' then result:= iso639_no - else if value = 'Occitan' then result:= iso639_oc - else if value = 'Afan' then result:= iso639_om - else if value = 'Oromo' then result:= iso639_om - else if value = 'Oriya' then result:= iso639_or - else if value = 'Punjabi' then result:= iso639_pa - else if value = 'Polish' then result:= iso639_pl - else if value = 'Pashto' then result:= iso639_ps - else if value = 'Pushto' then result:= iso639_ps - else if value = 'Portuguese' then result:= iso639_pt - else if value = 'Quechua' then result:= iso639_qu - else if value = 'Rhaeto-Romance' then result:= iso639_rm - else if value = 'Kirundi' then result:= iso639_rn - else if value = 'Romanian' then result:= iso639_ro - else if value = 'Russian' then result:= iso639_ru - else if value = 'Kinyarwanda' then result:= iso639_rw - else if value = 'Sanskrit' then result:= iso639_sa - else if value = 'Sindhi' then result:= iso639_sd - else if value = 'Sangro' then result:= iso639_sg - else if value = 'Serbo-Croatian' then result:= iso639_sh - else if value = 'Singhalese' then result:= iso639_si - else if value = 'Slovak' then result:= iso639_sk - else if value = 'Slovenian' then result:= iso639_sl - else if value = 'Samoan' then result:= iso639_sm - else if value = 'Shona' then result:= iso639_sn - else if value = 'Somali' then result:= iso639_so - else if value = 'Albanian' then result:= iso639_sq - else if value = 'Serbian' then result:= iso639_sr - else if value = 'Siswati' then result:= iso639_ss - else if value = 'Sesotho' then result:= iso639_st - else if value = 'Sundanese' then result:= iso639_su - else if value = 'Swedish' then result:= iso639_sv - else if value = 'Swahili' then result:= iso639_sw - else if value = 'Tamil' then result:= iso639_ta - else if value = 'Tegulu' then result:= iso639_te - else if value = 'Tajik' then result:= iso639_tg - else if value = 'Thai' then result:= iso639_th - else if value = 'Tigrinya' then result:= iso639_ti - else if value = 'Turkmen' then result:= iso639_tk - else if value = 'Tagalog' then result:= iso639_tl - else if value = 'Setswana' then result:= iso639_tn - else if value = 'Tonga' then result:= iso639_to - else if value = 'Turkish' then result:= iso639_tr - else if value = 'Tsonga' then result:= iso639_ts - else if value = 'Tatar' then result:= iso639_tt - else if value = 'Twi' then result:= iso639_tw - else if value = 'Ukrainian' then result:= iso639_uk - else if value = 'Urdu' then result:= iso639_ur - else if value = 'Uzbek' then result:= iso639_uz - else if value = 'Vietnamese' then result:= iso639_vi - else if value = 'Volapuk' then result:= iso639_vo - else if value = 'Wolof' then result:= iso639_wo - else if value = 'Xhosa' then result:= iso639_xh - else if value = 'Yoruba' then result:= iso639_yo - else if value = 'Chinese' then result:= iso639_zh - else if value = 'Zulu' then result:= iso639_zu - else raise EConvertError.Create('Invalid ISO 639 language name'); -end; - -procedure TIso639Info.setNameLanguage(const value: TIso639LanguageCode); -begin - if not (value in FSupportedLanguages) - then raise ENot_Supported_Err.create('Not supported error.'); -end; - -function TIso639Info.symbolToCode(const value: wideString): TIso639LanguageCode; -begin - if value = 'aa' then result:= iso639_aa // Afar - else if value = 'ab' then result:= iso639_ab // Abkhazian - else if value = 'af' then result:= iso639_af // Afrikaans - else if value = 'am' then result:= iso639_am // Amharic - else if value = 'ar' then result:= iso639_ar // Arabic - else if value = 'as' then result:= iso639_as // Assamese - else if value = 'ay' then result:= iso639_ay // Aymara - else if value = 'az' then result:= iso639_az // Azerbaijani - else if value = 'ba' then result:= iso639_ba // Bashkir - else if value = 'be' then result:= iso639_be // Byelorussian - else if value = 'bg' then result:= iso639_bg // Bulgarian - else if value = 'bh' then result:= iso639_bh // Bihari - else if value = 'bi' then result:= iso639_bi // Bislama - else if value = 'bn' then result:= iso639_bn // Bengali; Bangla - else if value = 'bo' then result:= iso639_bo // Tibetan - else if value = 'br' then result:= iso639_br // Breton - else if value = 'ca' then result:= iso639_ca // Catalan - else if value = 'co' then result:= iso639_co // Corsican - else if value = 'cs' then result:= iso639_cs // Czech - else if value = 'cy' then result:= iso639_cy // Welsh - else if value = 'da' then result:= iso639_da // Danish - else if value = 'de' then result:= iso639_de // German - else if value = 'dz' then result:= iso639_dz // Bhutani - else if value = 'el' then result:= iso639_el // Greek - else if value = 'en' then result:= iso639_en // English - else if value = 'eo' then result:= iso639_eo // Esperanto - else if value = 'es' then result:= iso639_es // Spanish - else if value = 'et' then result:= iso639_et // Estonian - else if value = 'eu' then result:= iso639_eu // Basque - else if value = 'fa' then result:= iso639_fa // Persian - else if value = 'fi' then result:= iso639_fi // Finnish - else if value = 'fj' then result:= iso639_fj // Fiji - else if value = 'fo' then result:= iso639_fo // Faeroese - else if value = 'fr' then result:= iso639_fr // French - else if value = 'fy' then result:= iso639_fy // Frisian - else if value = 'ga' then result:= iso639_ga // Irish - else if value = 'gd' then result:= iso639_gd // Scots Gaelic - else if value = 'gl' then result:= iso639_gl // Galician - else if value = 'gn' then result:= iso639_gn // Guarani - else if value = 'gu' then result:= iso639_gu // Gujarati - else if value = 'ha' then result:= iso639_ha // Hausa - else if value = 'hi' then result:= iso639_hi // Hindi - else if value = 'hr' then result:= iso639_hr // Croatian - else if value = 'hu' then result:= iso639_hu // Hungarian - else if value = 'hy' then result:= iso639_hy // Armenian - else if value = 'ia' then result:= iso639_ia // Interlingua - else if value = 'ie' then result:= iso639_ie // Interlingue - else if value = 'ik' then result:= iso639_ik // Inupiak - else if value = 'in' then result:= iso639_in // Indonesian - else if value = 'is' then result:= iso639_is // Icelandic - else if value = 'it' then result:= iso639_it // Italian - else if value = 'iw' then result:= iso639_iw // Hebrew - else if value = 'ja' then result:= iso639_ja // Japanese - else if value = 'ji' then result:= iso639_ji // Yiddish - else if value = 'jw' then result:= iso639_jw // Javanese - else if value = 'ka' then result:= iso639_ka // Georgian - else if value = 'kk' then result:= iso639_kk // Kazakh - else if value = 'kl' then result:= iso639_kl // Greenlandic - else if value = 'km' then result:= iso639_km // Cambodian - else if value = 'kn' then result:= iso639_kn // Kannada - else if value = 'ko' then result:= iso639_ko // Korean - else if value = 'ks' then result:= iso639_ks // Kashmiri - else if value = 'ku' then result:= iso639_ku // Kurdish - else if value = 'ky' then result:= iso639_ky // Kirghiz - else if value = 'la' then result:= iso639_la // Latin - else if value = 'ln' then result:= iso639_ln // Lingala - else if value = 'lo' then result:= iso639_lo // Laothian - else if value = 'lt' then result:= iso639_lt // Lithuanian - else if value = 'lv' then result:= iso639_lv // Latvian; Lettish - else if value = 'mg' then result:= iso639_mg // Malagasy - else if value = 'mi' then result:= iso639_mi // Maori - else if value = 'mk' then result:= iso639_mk // Macedonian - else if value = 'ml' then result:= iso639_ml // Malayalam - else if value = 'mn' then result:= iso639_mn // Mongolian - else if value = 'mo' then result:= iso639_mo // Moldavian - else if value = 'mr' then result:= iso639_mr // Marathi - else if value = 'ms' then result:= iso639_ms // Malay - else if value = 'mt' then result:= iso639_mt // Maltese - else if value = 'my' then result:= iso639_my // Burmese - else if value = 'na' then result:= iso639_na // Nauru - else if value = 'ne' then result:= iso639_ne // Nepali - else if value = 'nl' then result:= iso639_nl // Dutch - else if value = 'no' then result:= iso639_no // Norwegian - else if value = 'oc' then result:= iso639_oc // Occitan - else if value = 'om' then result:= iso639_om // Afan; Oromo - else if value = 'or' then result:= iso639_or // Oriya - else if value = 'pa' then result:= iso639_pa // Punjabi - else if value = 'pl' then result:= iso639_pl // Polish - else if value = 'ps' then result:= iso639_ps // Pashto; Pushto - else if value = 'pt' then result:= iso639_pt // Portuguese - else if value = 'qu' then result:= iso639_qu // Quechua - else if value = 'rm' then result:= iso639_rm // Rhaeto-Romance - else if value = 'rn' then result:= iso639_rn // Kirundi - else if value = 'ro' then result:= iso639_ro // Romanian - else if value = 'ru' then result:= iso639_ru // Russian - else if value = 'rw' then result:= iso639_rw // Kinyarwanda - else if value = 'sa' then result:= iso639_sa // Sanskrit - else if value = 'sd' then result:= iso639_sd // Sindhi - else if value = 'sg' then result:= iso639_sg // Sangro - else if value = 'sh' then result:= iso639_sh // Serbo-Croatian - else if value = 'si' then result:= iso639_si // Singhalese - else if value = 'sk' then result:= iso639_sk // Slovak - else if value = 'sl' then result:= iso639_sl // Slovenian - else if value = 'sm' then result:= iso639_sm // Samoan - else if value = 'sn' then result:= iso639_sn // Shona - else if value = 'so' then result:= iso639_so // Somali - else if value = 'sq' then result:= iso639_sq // Albanian - else if value = 'sr' then result:= iso639_sr // Serbian - else if value = 'ss' then result:= iso639_ss // Siswati - else if value = 'st' then result:= iso639_st // Sesotho - else if value = 'su' then result:= iso639_su // Sundanese - else if value = 'sv' then result:= iso639_sv // Swedish - else if value = 'sw' then result:= iso639_sw // Swahili - else if value = 'ta' then result:= iso639_ta // Tamil - else if value = 'te' then result:= iso639_te // Tegulu - else if value = 'tg' then result:= iso639_tg // Tajik - else if value = 'th' then result:= iso639_th // Thai - else if value = 'ti' then result:= iso639_ti // Tigrinya - else if value = 'tk' then result:= iso639_tk // Turkmen - else if value = 'tl' then result:= iso639_tl // Tagalog - else if value = 'tn' then result:= iso639_tn // Setswana - else if value = 'to' then result:= iso639_to // Tonga - else if value = 'tr' then result:= iso639_tr // Turkish - else if value = 'ts' then result:= iso639_ts // Tsonga - else if value = 'tt' then result:= iso639_tt // Tatar - else if value = 'tw' then result:= iso639_tw // Twi - else if value = 'uk' then result:= iso639_uk // Ukrainian - else if value = 'ur' then result:= iso639_ur // Urdu - else if value = 'uz' then result:= iso639_uz // Uzbek - else if value = 'vi' then result:= iso639_vi // Vietnamese - else if value = 'vo' then result:= iso639_vo // Volapuk - else if value = 'wo' then result:= iso639_wo // Wolof - else if value = 'xh' then result:= iso639_xh // Xhosa - else if value = 'yo' then result:= iso639_yo // Yoruba - else if value = 'zh' then result:= iso639_zh // Chinese - else if value = 'zu' then result:= iso639_zu // Zulu - else raise EConvertError.Create('Invalid ISO 639 language symbol'); -end; - - - -//+++++++++++++++++++++++ TdomImplementation ++++++++++++++++++++++++++ -constructor TdomImplementation.create(aOwner: TComponent); -begin - inherited create(aOwner); - FCreatedCMObjectsListing:= TList.create; - FCreatedCMObjects:= TdomCMNodeList.create(FCreatedCMObjectsListing); - FCreatedDocumentsListing:= TList.create; - FCreatedDocuments:= TdomNodeList.create(FCreatedDocumentsListing); - FCreatedDocumentTypesListing:= TList.create; - FCreatedDocumentTypes:= TdomNodeList.create(FCreatedDocumentTypesListing); - FCreatedCMExternalObjectsListing:= TList.create; - FCreatedCMExternalObjects:= TdomCMNodeList.create(FCreatedCMExternalObjectsListing); - FCreatedCMInternalObjectsListing:= TList.create; - FCreatedCMInternalObjects:= TdomCMNodeList.create(FCreatedCMInternalObjectsListing); -end; - -destructor TdomImplementation.destroy; -begin - clear; - FCreatedCMObjectsListing.free; - FCreatedCMObjects.free; - FCreatedDocumentsListing.free; - FCreatedDocuments.free; - FCreatedDocumentTypesListing.free; - FCreatedDocumentTypes.free; - FCreatedCMExternalObjectsListing.free; - FCreatedCMExternalObjects.free; - FCreatedCMInternalObjectsListing.free; - FCreatedCMInternalObjects.free; - inherited destroy; -end; - -procedure TdomImplementation.clear; -var - i: integer; -begin - for i:= 0 to FCreatedDocumentsListing.count-1 do begin - TdomDocument(FCreatedDocumentsListing[i]).clear; // destroys all child nodes, nodeIterators and treeWalkers - TdomDocument(FCreatedDocumentsListing[i]).free; - FCreatedDocumentsListing[i]:= nil; - end; - FCreatedDocumentsListing.pack; - FCreatedDocumentsListing.Capacity:= FCreatedDocumentsListing.Count; - - for i:= 0 to FCreatedDocumentTypesListing.count-1 do begin - TdomDocumentType(FCreatedDocumentTypesListing[i]).free; - FCreatedDocumentTypesListing[i]:= nil; - end; - FCreatedDocumentTypesListing.pack; - FCreatedDocumentTypesListing.Capacity:= FCreatedDocumentTypesListing.Count; - - for i:= 0 to FCreatedCMExternalObjectsListing.count-1 do begin - TdomCMExternalObject(FCreatedCMExternalObjectsListing[i]).free; - FCreatedCMExternalObjectsListing[i]:= nil; - end; - FCreatedCMExternalObjectsListing.pack; - FCreatedCMExternalObjectsListing.Capacity:= FCreatedCMExternalObjectsListing.Count; - - for i:= 0 to FCreatedCMInternalObjectsListing.count-1 do begin - TdomCMInternalObject(FCreatedCMInternalObjectsListing[i]).free; - FCreatedCMInternalObjectsListing[i]:= nil; - end; - FCreatedCMInternalObjectsListing.pack; - FCreatedCMInternalObjectsListing.Capacity:= FCreatedCMInternalObjectsListing.Count; - - for i:= 0 to FCreatedCMObjectsListing.count-1 do begin - TdomCMObject(FCreatedCMObjectsListing[i]).free; - FCreatedCMObjectsListing[i]:= nil; - end; - FCreatedCMObjectsListing.pack; - FCreatedCMObjectsListing.Capacity:= FCreatedCMObjectsListing.Count; -end; - -function TdomImplementation.createCMExternalObject(const pubId, - sysId: wideString): TdomCMExternalObject; -begin - Result:= TdomCMExternalObject.create(self,pubId,sysId); - FCreatedCMExternalObjectsListing.add(Result); -end; - -function TdomImplementation.createCMInternalObject(const pubId, - sysId: wideString): TdomCMInternalObject; -begin - Result:= TdomCMInternalObject.create(self,pubId,sysId); - FCreatedCMInternalObjectsListing.add(Result); -end; - -function TdomImplementation.createCMObject(const sysId: wideString): TdomCMObject; -begin - Result:= TdomCMObject.create(self,sysId); - FCreatedCMObjectsListing.add(Result); -end; - -function TdomImplementation.createDocument(const aname: wideString; - doctype: TdomDocumentType): TdomDocument; -begin - if assigned(doctype) then - if documentTypes.IndexOf(doctype) = -1 - then raise EWrong_Document_Err.create('Wrong document error.'); - if not IsXmlName(aname) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if SupportsDocumentFormat('',aname) - then Result:= getDocumentClass('',aname).create(self) - else Result:= TdomDocument.create(self); - FCreatedDocumentsListing.add(Result); - if assigned(doctype) then begin - FCreatedDocumentTypes.FNodeList.Remove(doctype); - doctype.FDocument:= Result; - Result.appendChild(doctype); - end; - Result.InitDoc(aname); -end; - -function TdomImplementation.createDocumentNS(const namespaceURI, - qualifiedName: wideString; - doctype: TdomDocumentType): TdomDocument; -var - prfx, localName: wideString; -begin - if assigned(doctype) then - if documentTypes.IndexOf(doctype) = -1 - then raise EWrong_Document_Err.create('Wrong document error.'); - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,localName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if ( ((prfx = 'xmlns') or (qualifiedName = 'xmlns')) - and not (namespaceURI = 'http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (namespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (namespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - if SupportsDocumentFormat(namespaceURI,qualifiedName) - then Result:= getDocumentClass(namespaceURI,qualifiedName).create(self) - else Result:= TdomDocument.create(self); - FCreatedDocuments.FNodeList.add(Result); - if assigned(doctype) then begin - FCreatedDocumentTypes.FNodeList.Remove(doctype); - doctype.FDocument:= Result; - Result.appendChild(doctype); - end; - Result.InitDocNS(namespaceURI,qualifiedName); -end; - -{ - The following two methods have been removed from this version of - the XDOM, but will be reintroduced in a further release. - -function TdomImplementation.createDocumentType(const name, - publicId, - systemId, - intSubset: wideString): TdomDocumentType; -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - Result:= TdomDocumentType.create(nil,name,publicId,systemId,intSubset); - FCreatedDocumentTypes.FNodeList.add(Result); -end; - -function TdomImplementation.createDocumentTypeNS(const qualifiedName, - publicId, - systemId, - intSubset: wideString): TdomDocumentType; -begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not IsXmlQName(qualifiedName) - then raise ENamespace_Err.create('Namespace error.'); - Result:= TdomDocumentType.create(nil,qualifiedName,publicId,systemId,intSubset); - FCreatedDocumentTypes.FNodeList.add(Result); -end; - } - -procedure TdomImplementation.freeCMExternalObject(var arg: TdomCMExternalObject); -var - index: integer; - dummyArg: TdomCMExternalObject; -begin - if not assigned(arg) then exit; - dummyArg:= arg; - index:= FCreatedCMExternalObjectsListing.IndexOf(arg); - if index = -1 - then raise ENot_Found_Err.create('External content model not found error.'); - // remove the content model from its associated content models: - if assigned(arg.associatedContentModel) - then arg.associatedContentModel.removeExternalCM; - // free the external content model itself: - FCreatedCMExternalObjectsListing.Delete(index); - dummyArg.free; // Use dummyArg here, because the call to removeExternalCM - // can set the FCMInternal field of the document being - // processed in TdomImplementation.FreeDocument to nil. - // Since arg is a var parameter, it will be set to nil, and - // will not be freed at the end of the procedure. - arg:= nil; -end; - -procedure TdomImplementation.freeCMInternalObject(var arg: TdomCMInternalObject); -var - index: integer; - dummyArg: TdomCMInternalObject; -begin - if not assigned(arg) then exit; - dummyArg:= arg; - index:= FCreatedCMInternalObjectsListing.indexOf(arg); - if index = -1 - then raise ENot_Found_Err.create('Internal content model not found error.'); - // remove the content model from its associated content model: - if assigned(arg.associatedContentModel) - then arg.associatedContentModel.removeInternalCM; - // free the Internal content model itself: - FCreatedCMInternalObjectsListing.Delete(index); - dummyArg.free; // Use dummyArg here, because the call to removeInternalCM - // can set the FCMInternal field of the document being - // processed in TdomImplementation.FreeDocument to nil. - // Since arg is a var parameter, it will be set to nil, and - // will not be freed at the end of the procedure. - arg:= nil; -end; - -procedure TdomImplementation.freeCMObject(var arg: TdomCMObject); -var - index: integer; - dummyArg: TdomCMObject; -begin - if not assigned(arg) then exit; - dummyArg:= arg; - index:= FCreatedCMObjectsListing.IndexOf(arg); - if index = -1 - then raise ENot_Found_Err.create('Content model not found error.'); - // remove associated content models - arg.removeExternalCM; - arg.removeInternalCM; - // remove the content model from its associated document: - if assigned(arg.associatedDocument) - then arg.associatedDocument.removeContentModel; - // free the content model itself: - FCreatedCMObjectsListing.Delete(index); - dummyArg.free; // Use dummyArg here, because the call to removeContentModel - // can set the FCMInternal field of the document being - // processed in TdomImplementation.FreeDocument to nil. - // Since arg is a var parameter, it will be set to nil, and - // will not be freed at the end of the procedure. - arg:= nil; -end; - -procedure TdomImplementation.freeDocument(var doc: TdomDocument); -var - index: integer; -begin - if not assigned(doc) then exit; - index:= FCreatedDocumentsListing.IndexOf(doc); - if index = -1 - then raise ENot_Found_Err.create('Document not found error.'); - // free the content model associated with the document: - if assigned(doc.FCMInternal) then FreeCMObject(doc.FCMInternal); - // free all child nodes, nodeIterators and treeWalkers: - doc.clear; - // free the document itself: - FCreatedDocumentsListing.Delete(index); - doc.free; - doc:= nil; -end; - -procedure TdomImplementation.freeDocumentType(var docType: TdomDocumentType); -var - index: integer; -begin - if not assigned(docType) then exit; - index:= FCreatedDocumentTypesListing.IndexOf(docType); - if index = -1 - then raise ENot_Found_Err.create('DocumentType not found error.'); - FCreatedDocumentTypesListing.Delete(index); - docType.free; - docType:= nil; -end; - -function TdomImplementation.getCMObjects: TdomCMNodeList; -begin - result:= FCreatedCMObjects; -end; - -function TdomImplementation.getDocuments: TdomNodeList; -begin - Result:= FCreatedDocuments; -end; - -function TdomImplementation.getDocumentTypes: TdomNodeList; -begin - Result:= FCreatedDocumentTypes; -end; - -procedure TDomImplementation.doAttrModified(modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); -begin - if assigned(FOnAttrModified) - then FOnAttrModified(self,modifiedDoc,modifiedNode,attrChange,prevValue,newValue,relatedAttr); -end; - -procedure TDomImplementation.doCharacterDataModified(modifiedDoc: TdomDocument; - modifiedNode: TdomNode; - prevValue, - newValue: wideString); -begin - if assigned(FOnCharacterDataModified) - then FOnCharacterDataModified(self,modifiedDoc,modifiedNode,prevValue,newValue); -end; - -procedure TdomImplementation.doError( sender: TObject; - error: TdomError; - var go: boolean); -begin - case error.severity of - DOM_SEVERITY_WARNING, DOM_SEVERITY_ERROR: go:= true; - DOM_SEVERITY_FATAL_ERROR: go:= false; - end; - if assigned(FOnError) - then FOnError(sender,error,go); -end; - -procedure TDomImplementation.doExternalParsedEntity(parentSystemId: wideString; - var publicId, - systemId: wideString; - var stream: TStream; - var action: TXmlParserAction); -begin - if assigned(FOnExternalParsedEntity) then - repeat - FOnExternalParsedEntity(self,parentSystemId,publicId,systemId,stream,action); - until action <> paRetry; -end; - -procedure TDomImplementation.doNodeInserted(modifiedDoc: TdomDocument; - modifiedNode: TdomNode); -begin - if assigned(FOnNodeInserted) - then FOnNodeInserted(self,modifiedDoc,modifiedNode); -end; - -procedure TDomImplementation.doNodeRemoved(modifiedDoc: TdomDocument; - modifiedNode: TdomNode); -begin - if assigned(FOnNodeRemoved) - then FOnNodeRemoved(self,modifiedDoc,modifiedNode); -end; - -function TdomImplementation.getCMExternalObjects: TdomCMNodeList; -begin - result:= FCreatedCMExternalObjects; -end; - -function TdomImplementation.getCMInternalObjects: TdomCMNodeList; -begin - result:= FCreatedCMInternalObjects; -end; - -function TDomImplementation.getXdomVersion: wideString; -begin - result:= '2.3.27'; -end; - -function TdomImplementation.hasFeature(const feature, - version: wideString): boolean; -var - VersionStr: string; -begin - Result:= false; - VersionStr:= WideCharToString(PWideChar(feature)); - if (WideCharToString(PWideChar(version))='1.0') - or (WideCharToString(PWideChar(version))='') - then begin - if (CompareText(VersionStr,'XML')=0) - then Result:= true; - end else begin - if (WideCharToString(PWideChar(version))='2.0') - then begin - if (CompareText(VersionStr,'XML')=0) - then Result:= true; - if (CompareText(VersionStr,'VIEWS')=0) - then Result:= true; - if (CompareText(VersionStr,'TRAVERSAL')=0) - then Result:= true; - end else begin - if version = '' - then begin - if (CompareText(VersionStr,'XML')=0) - then Result:= true; - if (CompareText(VersionStr,'VIEWS')=0) - then Result:= true; - if (CompareText(VersionStr,'TRAVERSAL')=0) - then Result:= true; - end; {if ... } - end; {if ... else ...} - end; {if ... else ...} -end; - -function TdomImplementation.GetDocumentClass(const aNamespaceUri, - aQualifiedName: wideString): TdomDocumentClass; -var - aDocFormat: PdomDocumentFormat; -begin - aDocFormat := domDocumentFormatList; - while aDocFormat <> nil do - with aDocFormat^ do begin - if (aNamespaceUri = aNamespaceUri) and (aQualifiedName = qualifiedName) then begin - Result:= DocumentClass; - exit; - end else aDocFormat := next; - end; - raise EUnknown_Document_Format_Err.create('Unknown document format yet'); -end; - -function TDomImplementation.handleError(const sender: TObject; - const error: TdomError): boolean; -begin - if not assigned(error) - then raise ENot_Supported_Err.create('Not supported error.'); - doError(sender,error,result); -end; - -class procedure TdomImplementation.RegisterDocumentFormat(const aNamespaceUri, - aQualifiedName: wideString; - aDocumentClass: TdomDocumentClass); -var - newRec: PdomDocumentFormat; -begin - if aQualifiedName = 'default' - then raise EInvalid_Access_Err.create('Illegal Parameter Error: Attempt to set the reserved Document Format "default".'); - new(newRec); - with newRec^ do begin - documentClass:= aDocumentClass; - NamespaceUri:= aNamespaceUri; - qualifiedName:= aQualifiedName; - next:= domDocumentFormatList; - end; - domDocumentFormatList:= newRec; -end; - -function TdomImplementation.SupportsDocumentFormat(const aNamespaceUri, - aQualifiedName: wideString): boolean; -var - aDocFormat: PdomDocumentFormat; -begin - Result:= false; - aDocFormat:= domDocumentFormatList; - while aDocFormat <> nil do - with aDocFormat^ do begin - if (aNamespaceUri = NamespaceUri) and (aQualifiedName = qualifiedName) then begin - Result:= true; - exit; - end else aDocFormat := next; - end; -end; - -class procedure TdomImplementation.UnregisterDocumentClass(const aDocumentClass: TdomDocumentClass); -var - aDocFormat,oldRec,previous: PdomDocumentFormat; -begin - previous:= nil; - aDocFormat := domDocumentFormatList; - while aDocFormat <> nil do - with aDocFormat^ do begin - if aDocumentClass = DocumentClass then begin - oldRec:= aDocFormat; - if assigned(previous) - then previous^.next:= next - else domDocumentFormatList := next; - previous:= aDocFormat; - aDocFormat := next; - Dispose(oldRec); - end else begin - previous:= aDocFormat; - aDocFormat := next; - end; - end; {with ...} -end; - - - -//++++++++++++++++++++++++++++ TdomTreeWalker +++++++++++++++++++++++++++++++ -constructor TdomTreeWalker.create(const Root: TdomNode; - const WhatToShow: TdomWhatToShow; - const NodeFilter: TdomNodeFilter; - const EntityReferenceExpansion: boolean); -begin - if not assigned(Root) - then raise ENot_Supported_Err.create('Not supported error.'); - inherited create; - FWhatToShow:= WhatToShow; - FFilter:= NodeFilter; - FExpandEntityReferences:= EntityReferenceExpansion; - FRoot:= Root; - FCurrentNode:= Root; -end; - -procedure TdomTreeWalker.SetCurrentNode(const node: TdomNode); -begin - if not assigned(node) - then raise ENot_Supported_Err.create('Not supported error.'); - FCurrentNode:= node; -end; - -procedure TdomTreeWalker.setExpandEntityReferences(const value: boolean); -begin - FExpandEntityReferences:= value; -end; - -procedure TdomTreeWalker.setFilter(const value: TdomNodeFilter); -begin - FFilter:= value; -end; - -procedure TdomTreeWalker.setRoot(const node: TdomNode); -begin - if not assigned(node) - then raise ENot_Supported_Err.create('Not supported error.'); - FRoot:= node; -end; - -procedure TdomTreeWalker.setWhatToShow(const value: TdomWhatToShow); -begin - FWhatToShow:= value; -end; - -function TdomTreeWalker.FindNextSibling(const oldNode: TdomNode): TdomNode; -var - accept: TdomFilterResult; - newNode: TdomNode; -begin - Result:= nil; - if oldNode = root then exit; - newNode:= oldNode.NextSibling; - if assigned(newNode) then begin - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_reject: - Result:= FindNextSibling(newNode); - filter_skip: - begin - Result:= FindFirstChild(newNode); - if not assigned(result) - then Result:= FindNextSibling(newNode); - end; - filter_accept: - Result:= newNode; - end; {case ...} - end else begin - if not assigned(oldNode.parentNode) - then begin result:= nil; exit; end; // TreeWalker.root not found! - if oldNode.parentNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(oldNode.parentNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_reject, filter_skip: - Result:= FindNextSibling(oldNode.parentNode); - filter_accept: - Result:= nil; - end; {case ...} - end; -end; - -function TdomTreeWalker.FindPreviousSibling(const OldNode: TdomNode): TdomNode; -var - accept: TdomFilterResult; - newNode: TdomNode; -begin - Result:= nil; - if OldNode = root then exit; - newNode:= oldNode.PreviousSibling; - if assigned(newNode) then begin - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_reject: - Result:= FindPreviousSibling(newNode); - filter_skip: - begin - Result:= FindLastChild(newNode); - if not assigned(result) - then Result:= FindPreviousSibling(newNode); - end; - filter_accept: - Result:= newNode; - end; {case ...} - end else begin - if not assigned(oldNode.parentNode) - then begin result:= nil; exit; end; // TreeWalker.root not found! - if oldNode.parentNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(oldNode.parentNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_reject, filter_skip: - Result:= FindPreviousSibling(oldNode.parentNode); - filter_accept: - Result:= nil; - end; {case ...} - end; -end; - -function TdomTreeWalker.FindParentNode(const OldNode: TdomNode): TdomNode; -var - accept: TdomFilterResult; -begin - Result:= nil; - if OldNode = root then exit; - Result:= OldNode.ParentNode; - if not assigned(Result) - then begin result:= nil; exit; end; // TreeWalker.root not found! - if Result.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(Result) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_reject, filter_skip: - Result:= FindParentNode(Result); - end; -end; - -function TdomTreeWalker.FindFirstChild(const oldNode: TdomNode): TdomNode; -var - i: integer; - newNode: TdomNode; - accept: TdomFilterResult; -begin - Result:= nil; - if (oldNode.nodeType = ntEntity_Reference_Node) and not FExpandEntityReferences - then exit; - for i:= 0 to pred(oldnode.childNodes.length) do begin - newNode:= oldnode.childNodes.item(i); - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_skip: - Result:= FindFirstChild(newNode); - filter_accept: - Result:= newNode; - end; {case ...} - if assigned(result) then break; - end; {for ...} -end; - -function TdomTreeWalker.FindLastChild(const OldNode: TdomNode): TdomNode; -var - i: integer; - newNode: TdomNode; - accept: TdomFilterResult; -begin - Result:= nil; - if (oldNode.nodeType = ntEntity_Reference_Node) and not FExpandEntityReferences - then exit; - for i:= pred(oldnode.childNodes.length) downto 0 do begin - newNode:= oldnode.childNodes.item(i); - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode) - else accept:= filter_accept; - end else accept:= filter_skip; - case accept of - filter_skip: - Result:= FindLastChild(newNode); - filter_accept: - Result:= newNode; - end; {case ...} - if assigned(result) then break; - end; {for ...} -end; - -function TdomTreeWalker.FindNextNode(OldNode: TdomNode): TdomNode; -var - newNode: TdomNode; -begin - Result:= FindFirstChild(oldNode); - if OldNode = root then exit; - if not assigned(Result) - then Result:= FindNextSibling(oldNode); - while not assigned(Result) do begin - newNode:= FindParentNode(oldNode); - if not assigned(newNode) then exit; // No next node. - Result:= FindNextSibling(newNode); - oldNode:= newNode; - end; -end; - -function TdomTreeWalker.FindPreviousNode(const OldNode: TdomNode): TdomNode; -var - newNode: TdomNode; -begin - Result:= nil; - if OldNode = root then exit; - Result:= FindPreviousSibling(oldNode); - if assigned(Result) then begin - newNode:= FindLastChild(Result); - if assigned(newNode) then result:= newNode; - end else - result:= FindParentNode(oldNode); -end; - -function TdomTreeWalker.parentNode: TdomNode; -begin - Result:= FindParentNode(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.firstChild: TdomNode; -begin - Result:= FindFirstChild(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.lastChild: TdomNode; -begin - Result:= FindLastChild(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.previousSibling: TdomNode; -begin - Result:= FindPreviousSibling(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.nextSibling: TdomNode; -begin - Result:= FindNextSibling(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.previousNode: TdomNode; -begin - Result:= FindPreviousNode(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - -function TdomTreeWalker.nextNode: TdomNode; -begin - Result:= FindNextNode(FCurrentNode); - if assigned(Result) then FCurrentNode:= Result; -end; - - - -//++++++++++++++++++++++++++++ TdomNodeIterator +++++++++++++++++++++++++++++++ -constructor TdomNodeIterator.create(const Root: TdomNode; - const WhatToShow: TdomWhatToShow; - const nodeFilter: TdomNodeFilter; - const EntityReferenceExpansion: boolean); -begin - if not assigned(Root) - then raise ENot_Supported_Err.create('Not supported error.'); - inherited create; - FRoot:= root; - FWhatToShow:= WhatToShow; - FFilter:= NodeFilter; - FExpandEntityReferences:= EntityReferenceExpansion; - FReferenceNode:= Root; - FInvalid:= false; - FPosition:= posBefore; -end; - -procedure TdomNodeIterator.FindNewReferenceNode(const nodeToRemove: TdomNode); -var - newRefNode: TdomNode; - newPosition: TdomPosition; -begin - newRefNode:= nil; - newPosition:= FPosition; - case FPosition of - posBefore: begin - newRefNode:= nodeToRemove.NextSibling; - if not assigned(newRefNode) then begin - newRefNode:= FindPreviousNode(nodeToRemove); - newPosition:= posAfter; - end; - end; - posAfter: begin - newRefNode:= nodeToRemove.NextSibling; - if not assigned(newRefNode) then begin - newRefNode:= FindPreviousNode(nodeToRemove); - newPosition:= posBefore; - end; - end; - end; {case ...} - if assigned(newRefNode) then begin - FReferenceNode:= newRefNode; - FPosition:= newPosition; - end; -end; - -procedure TdomNodeIterator.detach; -begin - FReferenceNode:= nil; - FInvalid:= true; -end; - -function TdomNodeIterator.FindNextNode(OldNode: TdomNode): TdomNode; -var - newNode: TdomNode; -begin - with OldNode do - if HasChildNodes - and ( FExpandEntityReferences or (nodeType <> ntEntity_Reference_Node) ) - then result:= FirstChild - else result:= NextSibling; - while not assigned(Result) do begin - newNode:= oldNode.ParentNode; - if not assigned(newNode) then exit; // No next node. - Result:= newNode.NextSibling; - oldNode:= newNode; - end; -end; - -function TdomNodeIterator.FindPreviousNode(const OldNode: TdomNode): TdomNode; -var - newNode: TdomNode; -begin - with OldNode do begin - result:= PreviousSibling; - if assigned(result) then begin - newNode:= result; - while assigned(newNode) do begin - result:= newNode; - newNode:= newNode.LastChild; - end; - end else result:= ParentNode; - end; -end; - -function TdomNodeIterator.NextNode: TdomNode; -var - accept: TdomFilterResult; - newNode: TdomNode; -begin - newNode:= nil; - if FInvalid - then raise EInvalid_State_Err.create('Invalid state error.'); - case FPosition of - posBefore: begin - FPosition:= posAfter; - newNode:= FReferenceNode; - end; - posAfter: begin - newNode:= FindNextNode(FReferenceNode); - end; - end; - repeat - accept:= filter_accept; - if assigned(newNode) then begin - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode); - end else accept:= filter_skip; - if not (accept = filter_accept) - then newNode:= FindNextNode(newNode); - end; - until accept = filter_accept; - if assigned(newNode) then - if not (newNode.IsAncestor(root) or (newNode = root)) then - if (FReferenceNode.IsAncestor(root) or (FReferenceNode = root)) then newNode:= nil; - if assigned(newNode) then FReferenceNode:= newNode; - Result:= newNode; -end; - -function TdomNodeIterator.PreviousNode: TdomNode; -var - accept: TdomFilterResult; - newNode: TdomNode; -begin - newNode:= nil; - if FInvalid - then raise EInvalid_State_Err.create('Invalid state error.'); - case FPosition of - posBefore: begin - newNode:= FindPreviousNode(FReferenceNode); - end; - posAfter: begin - FPosition:= posBefore; - newNode:= FReferenceNode; - end; - end; - repeat - accept:= filter_accept; - if assigned(newNode) then begin - if newNode.NodeType in FWhatToShow then begin - if assigned(FFilter) - then accept:= FFilter.acceptNode(newNode); - end else accept:= filter_skip; - if not (accept = filter_accept) - then newNode:= FindPreviousNode(newNode); - end; - until accept = filter_accept; - if assigned(newNode) then - if not (newNode.IsAncestor(root) or (newNode = root)) then - if (FReferenceNode.IsAncestor(root) or (FReferenceNode = root)) then newNode:= nil; - if assigned(newNode) then FReferenceNode:= newNode; - Result:= newNode; -end; - - - -//++++++++++++++++++++++++++++ TdomNodeList +++++++++++++++++++++++++++++++ -constructor TdomNodeList.create(const nodeList: TList); -begin - inherited create; - FNodeList:= nodeList; -end; - -function TdomNodeList.getLength: integer; -begin - Result:= FNodeList.count; -end; - -function TdomNodeList.indexOf(const node: TdomNode): integer; -begin - Result:= FNodeList.IndexOf(node); -end; - -function TdomNodeList.item(const index: integer): TdomNode; -begin - if (index < 0) or (index >= FNodeList.Count) - then result:= nil - else result:= TdomNode(FNodeList.List^[Index]); -end; - - - -//++++++++++++++++++++++++ TdomElementsNodeList ++++++++++++++++++++++++++ -constructor TdomElementsNodeList.create(const QueryName: wideString; - const StartElement: TdomNode); -begin - inherited create(nil); - FQueryName:= QueryName; - FStartElement:= StartElement; -end; - -function TdomElementsNodeList.GetLength: integer; -var - AktNode,NewNode: TdomNode; - Level: integer; -begin - Result:= 0; - if not assigned(FStartElement) then exit; - Level:= 0; - AktNode:= FStartElement; - if AktNode.NodeType = ntElement_Node then - if (AktNode.NodeName = FQueryName) or (FQueryName = '*') then - inc(Result); - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if (AktNode.NodeName = FQueryName) or (FQueryName = '*') then - inc(Result); - until Level < 1; -end; - -function TdomElementsNodeList.IndexOf(const node: TdomNode): integer; -var - AktNode,NewNode: TdomNode; - Level,i: integer; -begin - Result:= -1; - if not assigned(FStartElement) then exit; - if not (node is TdomNode) then exit; - if node.NodeType <> ntElement_Node then exit; - i:= -1; - Level:= 0; - AktNode:= FStartElement; - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if (AktNode.NodeName = FQueryName) or (FQueryName = '*') then begin - inc(i); - if AktNode = node then begin Result:= i; break; end; - end; - until Level < 1; -end; - -function TdomElementsNodeList.Item(const index: integer): TdomNode; -var - AktNode,NewNode: TdomNode; - Level,i: integer; -begin - Result:= nil; - if not assigned(FStartElement) then exit; - if (index < 0) then exit; - i:= -1; - Level:= 0; - AktNode:= FStartElement; - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if (AktNode.NodeName = FQueryName) or (FQueryName = '*') then begin - inc(i); - if i = index then begin Result:= AktNode; break; end; - end; - until Level < 1; -end; - - - -//+++++++++++++++++++++TdomElementsNodeListNS ++++++++++++++++++++++++++ -constructor TdomElementsNodeListNS.create(const QueryNamespaceURI, - QueryLocalName: wideString; - const StartElement: TdomNode); -begin - inherited create(nil); - FQueryNamespaceURI:= QueryNamespaceURI; - FQueryLocalName:= QueryLocalName; - FStartElement:= StartElement; -end; - -function TdomElementsNodeListNS.GetLength: integer; -var - AktNode,NewNode: TdomNode; - Level: integer; -begin - Result:= 0; - if not assigned(FStartElement) then exit; - Level:= 0; - AktNode:= FStartElement; - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if ((AktNode.namespaceURI = FQueryNamespaceURI) or (FQueryNamespaceURI = '*')) - and ((AktNode.localName = FQueryLocalName) or (FQueryLocalName = '*')) - then inc(Result); - until Level < 1; -end; - -function TdomElementsNodeListNS.IndexOf(const node: TdomNode): integer; -var - AktNode,NewNode: TdomNode; - Level,i: integer; -begin - Result:= -1; - if not assigned(FStartElement) then exit; - if not (node is TdomNode) then exit; - if node.NodeType <> ntElement_Node then exit; - i:= -1; - Level:= 0; - AktNode:= FStartElement; - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if ((AktNode.namespaceURI = FQueryNamespaceURI) or (FQueryNamespaceURI = '*')) - and ((AktNode.localName = FQueryLocalName) or (FQueryLocalName = '*')) - then begin - inc(i); - if AktNode = node then begin Result:= i; break; end; - end; - until Level < 1; -end; - -function TdomElementsNodeListNS.Item(const index: integer): TdomNode; -var - AktNode,NewNode: TdomNode; - Level,i: integer; -begin - Result:= nil; - if not assigned(FStartElement) then exit; - if (index < 0) then exit; - i:= -1; - Level:= 0; - AktNode:= FStartElement; - repeat - if AktNode.HasChildNodes - then begin NewNode:= AktNode.FirstChild; inc(Level); end - else NewNode:= AktNode.NextSibling; - while not assigned(NewNode) do begin - dec(Level); - if Level < 1 then break; - AktNode:= AktNode.ParentNode; - NewNode:= AktNode.NextSibling; - end; - if Level < 1 then break; - AktNode:= NewNode; - if AktNode.NodeType = ntElement_Node then - if ((AktNode.namespaceURI = FQueryNamespaceURI) or (FQueryNamespaceURI = '*')) - and ((AktNode.localName = FQueryLocalName) or (FQueryLocalName = '*')) - then begin - inc(i); - if i = index then begin Result:= AktNode; break; end; - end; - until Level < 1; -end; - - - -//++++++++++++++++++++++++ TdomSpecialNodeList ++++++++++++++++++++++++++ -constructor TdomSpecialNodeList.create(const nodeList: TList; - const allowedNTs: TDomNodeTypeSet); -begin - inherited create(nodeList); - FAllowedNodeTypes:= allowedNTs; -end; - -function TdomSpecialNodeList.GetLength: integer; -var - i: integer; -begin - Result:= 0; - for i:= 0 to FNodeList.count-1 do - if TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes - then inc(Result); -end; - -function TdomSpecialNodeList.IndexOf(const node: TdomNode): integer; -var - i: integer; -begin - Result:= -1; - if not (node.NodeType in FAllowedNodeTypes) then exit; - for i:= 0 to FNodeList.count-1 do begin - if TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes - then inc(Result); - if TdomNode(FNodeList[i]) = node - then begin Result:= i; break; end; - end; -end; - -function TdomSpecialNodeList.Item(const index: integer): TdomNode; -var - i,j: integer; -begin - Result:= nil; - j:= -1; - if (index < 0) or (index > FNodeList.count-1) then exit; - for i:= 0 to FNodeList.count-1 do begin - if TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes - then inc(j); - if j = index then begin Result:= TdomNode(FNodeList[i]); break; end; - end; -end; - -function TdomSpecialNodeList.GetNamedIndex(const name: wideString): integer; -var - i,j: integer; -begin - result:= -1; - j:= -1; - for i:= 0 to FNodeList.count-1 do - if TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes then begin - inc(j); - if (TdomNode(FNodeList[i]).NodeName = name) - then begin Result:= j; break; end; - end; -end; - -function TdomSpecialNodeList.GetNamedItem(const name: wideString): TdomNode; -var - i: integer; -begin - result:= nil; - for i:= 0 to FNodeList.count-1 do - if (TdomNode(FNodeList[i]).NodeName = name) - and (TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= TdomNode(FNodeList[i]); - break; - end; -end; - - -//+++++++++++++++++++++++++ TdomNamedNodeMap +++++++++++++++++++++++++++++ -constructor TdomNamedNodeMap.create(const aOwner, - aOwnerNode: TdomNode; - const nodeList: TList; - const allowedNTs: TDomNodeTypeSet); -begin - inherited create(nodeList); - FOwner:= aOwner; - FOwnerNode:= aOwnerNode; - FAllowedNodeTypes:= allowedNTs; - FNamespaceAware:= false; - FIsReadonly:= false; -end; - -function TdomNamedNodeMap.getOwnerNode: TdomNode; -begin - Result:= FOwnerNode; -end; - -function TdomNamedNodeMap.getNamespaceAware: boolean; -begin - Result:= FNamespaceAware; -end; - -procedure TdomNamedNodeMap.setNamespaceAware(const value: boolean); -begin - if FNodeList.count > 0 - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - FNamespaceAware:= value; -end; - -function TdomNamedNodeMap.RemoveItem(const arg: TdomNode): TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FNodeList.IndexOf(arg) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= arg; - FNodeList.Remove(arg); - Result.FParentNode:= nil; -end; - -procedure TdomNamedNodeMap.setIsReadonly(const value: boolean); -begin - FIsReadonly:= value; -end; - -function TdomNamedNodeMap.GetNamedIndex(const name: wideString): integer; -var - i: integer; -begin - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - result:= -1; - for i:= 0 to FNodeList.count-1 do - if (TdomNode(FNodeList[i]).NodeName = name) - and (TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= i; - break; - end; -end; - -function TdomNamedNodeMap.GetNamedItem(const name: wideString): TdomNode; -var - i: integer; -begin - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - result:= nil; - for i:= 0 to FNodeList.count-1 do - if (TdomNode(FNodeList[i]).NodeName = name) - and (TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= TdomNode(FNodeList[i]); - break; - end; -end; - -function TdomNamedNodeMap.SetNamedItem(const arg: TdomNode): TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - if FOwner.OwnerDocument <> arg.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if not (arg.NodeType in FAllowedNodeTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if assigned(arg.parentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if arg.NodeType = ntAttribute_Node - then if assigned((arg as TdomAttr).OwnerElement) - then if (arg as TdomAttr).OwnerElement <> FOwnerNode - then raise EInuse_Attribute_Err.create('Inuse attribute error.'); - if assigned(GetNamedItem(arg.NodeName)) - then Result:= RemoveNamedItem(arg.NodeName) - else Result:= nil; - FNodeList.Add(arg); - arg.FParentNode:= nil; - if (arg.NodeType = ntAttribute_Node) - and (FOwnerNode.NodeType = ntElement_Node) - then (arg as TdomAttr).FownerElement:= TdomElement(FOwnerNode); -end; - -function TdomNamedNodeMap.RemoveNamedItem(const name: wideString): TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - Result:= getNamedItem(name); - if not assigned(Result) - then raise ENot_Found_Err.create('Node not found error.'); - FNodeList.Remove(Result); - if Result.NodeType = ntAttribute_Node - then (Result as TdomAttr).FownerElement:= nil; -end; - -function TdomNamedNodeMap.GetNamedItemNS(const namespaceURI, - localName: wideString): TdomNode; -var - i: integer; -begin - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - result:= nil; - for i:= 0 to FNodeList.count-1 do - if (TdomNode(FNodeList[i]).namespaceURI = namespaceURI) - and (TdomNode(FNodeList[i]).localName = localName) - and (TdomNode(FNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= TdomNode(FNodeList[i]); - break; - end; -end; - -function TdomNamedNodeMap.SetNamedItemNS(const arg: TdomNode): TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - if FOwner.OwnerDocument <> arg.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if not (arg.NodeType in FAllowedNodeTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if assigned(arg.parentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if arg.NodeType = ntAttribute_Node - then if assigned((arg as TdomAttr).OwnerElement) - then if (arg as TdomAttr).OwnerElement <> FOwnerNode - then raise EInuse_Attribute_Err.create('Inuse attribute error.'); - if assigned(GetNamedItemNS(arg.namespaceURI,arg.localName)) - then Result:= RemoveNamedItemNS(arg.namespaceURI,arg.localName) - else Result:= nil; - FNodeList.Add(arg); - if (arg.NodeType = ntAttribute_Node) - and (FOwnerNode.NodeType = ntElement_Node) - then (arg as TdomAttr).FownerElement:= TdomElement(FOwnerNode); -end; - -function TdomNamedNodeMap.RemoveNamedItemNS(const namespaceURI, - localName: wideString): TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - Result:= getNamedItemNS(namespaceURI,localName); - if not assigned(Result) - then raise ENot_Found_Err.create('Node not found error.'); - FNodeList.Remove(Result); - if Result.NodeType = ntAttribute_Node - then (Result as TdomAttr).FownerElement:= nil; -end; - - - -//++++++++++++++++++++++++++++++ TdomNode +++++++++++++++++++++++++++++++++ -constructor TdomNode.create(const aOwner: TdomDocument); -begin - inherited create; - FDocument:= aOwner; - FParentNode:= nil; - FNodeListing:= TList.create; - FNodeList:= TdomNodeList.create(FNodeListing); - FNodeName:= ''; - FNodeValue:= ''; - FLocalName:= ''; - FNamespaceURI:= ''; - FPrefix:= ''; - FNodeType:= ntUnknown; - FAllowedChildTypes:= [ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Type_Node, - ntDocument_Fragment_Node, - ntNotation_Node]; - FIsReadonly:= false; - FIsNamespaceNode:= false; -end; - -destructor TdomNode.destroy; -begin - FNodeListing.free; - FNodeList.free; - inherited destroy; -end; - -procedure TdomNode.clear; -var - oldChild: TdomNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - while hasChildNodes do begin - firstChild.setIsReadonly(false); - oldChild:= removeChild(firstChild); - ownerDocument.FreeAllNodes(oldChild); - end; -end; - -procedure TdomNode.makeChildrenReadonly; -var - i: integer; -begin - with childnodes do - for i:= 0 to pred(length) do - with item(i) do begin - item(i).setIsReadonly(true); - item(i).makeChildrenReadonly; - end; -end; - -function TdomNode.RefersToExternalEntity: boolean; -// Returns 'true', if one the TdomNode's children or grandchildren -// (not the TdomNode itself!) is an TdomEntityReference node refering -// directly or indirectly to an external Entity. Otherwise it returns -// 'false'. If the target of a TdomEntityReference cannot be detected -// this TdomEntityReference counts NOT as refering to an external Entity. -var - i: integer; - node: TdomNode; - contmod: TdomCMObject; - ent: TdomCMEntity; -begin - result:= false; - contmod:= OwnerDocument.contentModel; - if not assigned(contmod) then exit; - for i:= 0 to pred(childnodes.length) do begin - node:= childnodes.item(i); - case node.nodeType of - ntEntity_Reference_Node: begin - ent:= contMod.Entities.getNamedItem(node.nodeName); - if assigned(ent) then result:= ent.refersToExternalEntity(true); - end; - else - result:= node.RefersToExternalEntity; - end; {case ...} - if result then exit; - end; {for ...} -end; - -function TdomNode.HasEntRef(const EntName: wideString): boolean; -var - i: integer; -begin - result:= false; - for i:= 0 to pred(childnodes.length) do - with childnodes.item(i) do - if (nodeType = ntEntity_Reference_Node) - and (nodeName = EntName) - then result:= true - else if HasEntRef(EntName) then begin result:= true; exit; end; -end; - -function TdomNode.GetNodeName: wideString; -begin - Result:= FNodeName; -end; - -function TdomNode.GetNodeValue: wideString; -begin - Result:= FNodeValue; -end; - -procedure TdomNode.SetNodeValue(const value: wideString); -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - FNodeValue:= value; -end; - -function TdomNode.GetNodeType: TdomNodeType; -begin - Result:= FNodeType; -end; - -function TdomNode.GetAttributes: TdomNamedNodeMap; -begin - Result:= nil; -end; - -function TdomNode.GetParentNode: TdomNode; -begin - Result:= FParentNode; -end; - -function TdomNode.GetDocument: TdomDocument; -begin - Result:= FDocument; -end; - -function TdomNode.getTextContent: wideString; -var - childType: TdomNodeType; - childItem: TdomNode; - i,cl: integer; -begin - case nodeType of - ntElement_Node,ntEntity_Reference_Node,ntEntity_Node,ntDocument_Fragment_Node: begin - result:= ''; - cl:= pred(childnodes.length); - for i:= 0 to cl do begin - childItem:= childnodes.item(i); - childType:= childItem.nodeType; - if (childType <> ntComment_Node) and (childType <> ntProcessing_Instruction_Node) - then result:= concat(result,childItem.textContent); - end; - end; - ntAttribute_Node,ntText_Node,ntCDATA_Section_Node,ntComment_Node,ntProcessing_Instruction_Node: - result:= nodeValue; - else - result:= ''; - end; -end; - -function TdomNode.getXPathStringValue: wideString; -begin - case nodeType of - ntElement_Node: - result:= textContent; - ntAttribute_Node,ntComment_Node,ntProcessing_Instruction_Node: - result:= nodeValue; - ntCDATA_Section_Node,ntEntity_Reference_Node,ntText_Node: - if assigned(parentNode) - then result:= parentNode.textContent - else result:= textContent; - ntDocument_Node: - if assigned(TdomDocument(self).documentElement) - then result:= TdomDocument(self).documentElement.textContent; - ntXPath_Namespace_Node: - result:= namespaceUri; - else - result:= ''; - end; -end; - -procedure TdomNode.SetPrefix(const value: wideString); -begin - if not IsXmlName(value) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not IsXmlPrefix(value) - then raise ENamespace_Err.create('Namespace error.'); - if namespaceURI = '' - then raise ENamespace_Err.create('Namespace error.'); - if (value = 'xml') and (namespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - if self.NodeType = ntAttribute_Node then begin - if (value = 'xmlns') - and not (namespaceURI ='http://www.w3.org/2000/xmlns/') - then raise ENamespace_Err.create('Namespace error.'); - if NodeName = 'xmlns' - then raise ENamespace_Err.create('Namespace error.'); - end; - FPrefix:= value; - FNodeName:= concat(value,':',localName); -end; - -procedure TdomNode.doAttrModified(originalTarget: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); -begin - try - if assigned(FOnAttrModified) - then FOnAttrModified(self,originalTarget,attrChange,prevValue,newValue,relatedAttr); - finally - if assigned(FParentNode) - then FParentNode.doAttrModified(originalTarget,attrChange,prevValue,newValue,relatedAttr); - end; -end; - -procedure TdomNode.doCharacterDataModified(originalTarget: TdomNode; - prevValue, - newValue: wideString); -begin - try - if assigned(FOnCharacterDataModified) - then FOnCharacterDataModified(self,originalTarget,prevValue,newValue); - finally - if assigned(FParentNode) - then FParentNode.doCharacterDataModified(originalTarget,prevValue,newValue); - end; -end; - -procedure TdomNode.doNodeInserted(originalTarget: TdomNode); -begin - try - if assigned(FOnNodeInserted) - then FOnNodeInserted(self,originalTarget); - finally - if assigned(FParentNode) - then FParentNode.doNodeInserted(originalTarget); - end; -end; - -procedure TdomNode.doNodeInsertedIntoDocument(originalTarget: TdomNode); -var - i: integer; -begin - try - if assigned(FOnNodeInsertedIntoDocument) - then FOnNodeInsertedIntoDocument(self,originalTarget); - finally - for i:= 0 to pred(childNodes.length) do - childNodes.item(i).doNodeInsertedIntoDocument(originalTarget); - end; -end; - -procedure TdomNode.doNodeRemoved(originalTarget: TdomNode); -begin - try - if assigned(FOnNodeRemoved) - then FOnNodeRemoved(self,originalTarget); - finally - if assigned(FParentNode) - then FParentNode.doNodeRemoved(originalTarget); - end; -end; - -procedure TdomNode.doNodeRemovedFromDocument(originalTarget: TdomNode); -var - i: integer; -begin - try - if assigned(FOnNodeRemovedFromDocument) - then FOnNodeRemovedFromDocument(self,originalTarget); - finally - for i:= 0 to pred(childNodes.length) do - childNodes.item(i).doNodeRemovedFromDocument(originalTarget); - end; -end; - -function TdomNode.getBaseUri: wideString; -var - attr: TdomAttr; - UriAnalyzer: TUriWideStrAnalyzer; - uri1,uri2: wideString; -begin - case nodeType of - ntElement_Node: begin - if TdomElement(self).attributes.namespaceAware - then attr:= TdomElement(self).getAttributeNodeNS('http://www.w3.org/XML/1998/namespace','base') - else attr:= TdomElement(self).getAttributeNode('xml:base'); - if assigned(attr) then begin - - uri1:= attr.value; - UriAnalyzer:= TUriWideStrAnalyzer.create; - try - UriAnalyzer.setUriReference(uri1); - if UriAnalyzer.HasUriScheme then begin - // absolute URI --> we are done - result:= attr.value; - end else begin - uri2:= attr.baseUri; - resolveRelativeUriWideStr(uri2,uri1,result); - end; - finally - UriAnalyzer.free; - end; - - end else begin - if assigned(parentNode) - then result:= parentNode.baseUri - else result:= ''; - end; {if ... else ...} - end; - ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node,ntDocument_Type_Node: - if assigned(parentNode) - then result:= parentNode.baseUri - else result:= ''; - ntAttribute_Node: begin - result:= ''; - if assigned(TdomAttr(self).ownerElement) then begin - if ( (namespaceURI = 'http://www.w3.org/XML/1998/namespace') and ( localName = 'base') ) - or ( (namespaceURI = '') and ( nodeName = 'xml:base') ) then begin - if assigned(TdomAttr(self).ownerElement.parentNode) - then result:= TdomAttr(self).ownerElement.parentNode.baseUri; - end else begin - if assigned(TdomAttr(self).ownerElement) - then result:= TdomAttr(self).ownerElement.baseUri; - end; - end; - end; - ntEntity_Node,ntNotation_Node: - result:= ownerDocument.baseUri; - else - result:= ''; - end; -end; - -function TdomNode.sendErrorNotification(const xmlErrorType: TXmlErrorType; - const relNode: TdomNode): boolean; -// Used to centralize code for sending error notifications to the DomImplementation. -// Usually used during validation. -var - domImpl: TDomImplementation; - error: TdomError; - uri: wideString; -begin - if assigned(ownerDocument) then begin - domImpl:= ownerDocument.domImplementation; - uri:= ownerDocument.systemId; - end else domImpl:= nil; - - error:= TdomError.create(xmlErrorType,-1,-1,-1,-1,-1,uri,nil,relNode,''); - try - if assigned(domImpl) then begin - result:= domImpl.handleError(domImpl,error); - end else if error.severity = DOM_SEVERITY_FATAL_ERROR - then result:= false - else result:= true; - finally - error.free; - end; -end; - -procedure TdomNode.setIsReadonly(const value: boolean); -begin - FIsReadonly:= value; -end; - -function TdomNode.GetChildNodes: TdomNodeList; -begin - Result:= FNodeList; -end; - -function TdomNode.GetFirstChild: TdomNode; -begin - if FNodeListing.count = 0 - then Result:= nil - else Result:= TdomNode(FNodeListing.First); -end; - -function TdomNode.GetLastChild: TdomNode; -begin - if FNodeListing.count = 0 - then Result:= nil - else Result:= TdomNode(FNodeListing.Last); -end; - -function TdomNode.GetPreviousSibling: TdomNode; -begin - if assigned(ParentNode) - then Result:= ParentNode.ChildNodes.Item(ParentNode.ChildNodes.IndexOf(Self)-1) - else Result:= nil; -end; - -function TdomNode.GetNextSibling: TdomNode; -begin - if assigned(ParentNode) - then Result:= ParentNode.ChildNodes.Item(ParentNode.ChildNodes.IndexOf(Self)+1) - else Result:= nil; -end; - -function TdomNode.insertBefore(const newChild, - refChild: TdomNode): TdomNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerDocument <> newChild.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if IsAncestor(newChild) or (newChild = self) or (newChild = refChild ) // Test for circularity - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(refChild) then - if FNodeListing.IndexOf(refChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= newChild; - if NewChild is TdomDocumentFragment then begin - while NewChild.HasChildNodes do - insertBefore(newChild.ChildNodes.Item(0),refChild) - end else begin - if assigned(newChild.parentNode) - then newChild.parentNode.RemoveChild(newChild); - if assigned(refChild) - then FNodeListing.Insert(FNodeListing.IndexOf(refChild),newChild) - else FNodeListing.Add(newChild); - with newChild do begin - FParentNode:= self; - doNodeInserted(newChild); - doNodeInsertedIntoDocument(newChild); - end; - end; -end; - -function TdomNode.appendChild(const newChild: TdomNode): TdomNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerDocument <> newChild.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if IsAncestor(newChild) or (newChild = self) // Test for circularity - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= newChild; - if NewChild is TdomDocumentFragment then - while NewChild.HasChildNodes do - appendChild(newChild.ChildNodes.Item(0)) - else begin - if assigned(newChild.parentNode) - then newChild.parentNode.RemoveChild(newChild); - FNodeListing.Add(newChild); - with newChild do begin - FParentNode:= self; - doNodeInserted(newChild); - doNodeInsertedIntoDocument(newChild); - end; - end; -end; - -function TdomNode.removeChild(const oldChild: TdomNode): TdomNode; -begin - if not assigned(oldChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FNodeListing.IndexOf(oldChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - with oldChild do begin - doNodeRemoved(oldChild); - doNodeRemovedFromDocument(oldChild); - end; - OwnerDocument.FindNewReferenceNodes(oldChild); - Result:= oldChild; - FNodeListing.Remove(oldChild); - OldChild.FParentNode:= nil; -end; - -function TdomNode.replaceChild(const newChild, - oldChild: TdomNode): TdomNode; -var - refChild: TdomNode; -begin - if not ( assigned(newChild) and assigned(oldChild) ) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerDocument <> newChild.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if IsAncestor(newChild) or (newChild = self) // Test for circularity - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FNodeListing.IndexOf(oldChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= oldChild; - if newChild = oldChild then exit; - if assigned(newChild.parentNode) - then newChild.parentNode.RemoveChild(newChild); - refChild:= oldChild.NextSibling; - RemoveChild(oldChild); - if assigned(refChild) - then insertBefore(newChild,refChild) - else appendChild(newChild); -end; - -function TdomNode.hasChildNodes: boolean; -begin - if FNodeListing.count = 0 - then result:= false - else result:= true; -end; - -function TdomNode.cloneNode(const deep: boolean): TdomNode; -begin - result:= ownerDocument.importNode(self,deep); -end; - -function TdomNode.compareTreePosition(const other: TdomNode): TdomTreePosition; - - procedure buildAncestorList(node: TdomNode; - const ancestors: TList); - begin - ancestors.clear; - while true do begin - ancestors.insert(0,node); - if assigned(node.parentNode) then begin - node:= node.parentNode; - end else begin - if node.nodeType = ntAttribute_Node then begin - if assigned(TdomAttr(node).ownerElement) - then node:= TdomAttr(node).ownerElement - else break; - end else break; - end; {if ... else ...} - end; {while ...} - end; - -var - selfAncestors, otherAncestors: TList; - i: integer; - nodes: TdomNodeList; -begin - if not assigned(other) - then raise ENot_Supported_Err.create('Not supported error.'); - if other = self then begin - result:= [Tree_Position_Equivalent,Tree_Position_Same_Node]; - exit; - end; - - selfAncestors:= TList.create; - otherAncestors:= TList.create; - try - buildAncestorList(self,selfAncestors); - buildAncestorList(other,otherAncestors); - - // Disconnected? - if selfAncestors[0] <> otherAncestors[0] then begin - result:= [Tree_Position_Disconnected]; - exit; - end; - - // Reduce list to the last common ancestor: - selfAncestors.Add(nil); // Add stop-nil - otherAncestors.Add(nil); // Add stop-nil - while selfAncestors[1] = otherAncestors[1] do begin - selfAncestors.Delete(0); - otherAncestors.Delete(0); - // Remark: No run over, because 'self' and 'other' are not identical. - end; - - // Is 'other' ancestor? - if otherAncestors.count = 2 then begin // Remark: 2, because 'other' and nil are in the list. - result:= [Tree_Position_Ancestor,Tree_Position_Preceding]; - exit; - end; - - // Is 'other' descendant? - if selfAncestors.count = 2 then begin - result:= [Tree_Position_Descendant,Tree_Position_Following]; - exit; - end; - - // Attributes involved? - if (TdomNode(selfAncestors[1]).nodeType = ntAttribute_Node) then begin - if (TdomNode(otherAncestors[1]).nodeType = ntAttribute_Node) - then result:= [Tree_Position_Equivalent] - else result:= [Tree_Position_Following]; - exit; - end; - if (TdomNode(otherAncestors[1]).nodeType = ntAttribute_Node) then begin - result:= [Tree_Position_Preceding]; - exit; - end; - - with TdomNode(selfAncestors[0]).childNodes do - begin - // No Attributes. Determine the order of the nodes. - for i:= 0 to pred(length) do begin - if item(i) = TObject(selfAncestors[1]) then begin - result:= [Tree_Position_Following]; - exit; - end; - if item(i) = TObject(otherAncestors[1]) then begin - result:= [Tree_Position_Preceding]; - exit; - end; - end; - end; - - finally - selfAncestors.free; - otherAncestors.free; - end; -end; - -function TdomNode.evaluate(const expression: wideString): TdomXPathResult; -var - nsResolver: TdomXPathNSResolver; - XPathExpression: TdomXPathExpression; -begin - nsResolver:= ownerDocument.createNSResolver(self); - try - XPathExpression:= ownerDocument.createExpression(expression,nsResolver); - try - result:= XPathExpression.evaluate(self,XPATH_ANY_TYPE,nil); - finally - ownerDocument.freeExpression(XPathExpression); - end; - finally - ownerDocument.freeNSResolver(nsResolver); - end; -end; - -function TdomNode.findFirstChildElement: TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= firstChild; - while assigned(nodeToTest) do begin - if nodeToTest.nodeType = ntElement_Node then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.findLastChildElement: TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= lastChild; - while assigned(nodeToTest) do begin - if nodeToTest.nodeType = ntElement_Node then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.findNextSiblingElement: TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= nextSibling; - while assigned(nodeToTest) do begin - if nodeToTest.nodeType = ntElement_Node then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.findParentElement: TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= parentNode; - while assigned(nodeToTest) do begin - if nodeToTest.nodeType = ntElement_Node then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.parentNode; - end; -end; - -function TdomNode.findPreviousSiblingElement: TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= previousSibling; - while assigned(nodeToTest) do begin - if nodeToTest.nodeType = ntElement_Node then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.getFirstChildElement(const name: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= firstChild; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) and (nodeToTest.nodeName = name) then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.getFirstChildElementNS(const namespaceURI, - localName: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= firstChild; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) - and (nodeToTest.namespaceURI = namespaceURI) - and (nodeToTest.localName = localName) - then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.getLastChildElement(const name: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= lastChild; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) and (nodeToTest.nodeName = name) then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.getLastChildElementNS(const namespaceURI, - localName: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= lastChild; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) - and (nodeToTest.namespaceURI = namespaceURI) - and (nodeToTest.localName = localName) - then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.getNextSiblingElement(const name: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= nextSibling; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) and (nodeToTest.nodeName = name) then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.getNextSiblingElementNS(const namespaceURI, - localName: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= nextSibling; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) - and (nodeToTest.namespaceURI = namespaceURI) - and (nodeToTest.localName = localName) - then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.nextSibling; - end; -end; - -function TdomNode.getParentElement(const name: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= parentNode; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) and (nodeToTest.nodeName = name) then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.parentNode; - end; -end; - -function TdomNode.getParentElementNS(const namespaceURI, - localName: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= parentNode; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) - and (nodeToTest.namespaceURI = namespaceURI) - and (nodeToTest.localName = localName) - then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.parentNode; - end; -end; - -function TdomNode.getPreviousSiblingElement(const name: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= previousSibling; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) and (nodeToTest.nodeName = name) then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.getPreviousSiblingElementNS(const namespaceURI, - localName: wideString): TdomElement; -var - nodeToTest: TdomNode; -begin - result:= nil; - nodeToTest:= previousSibling; - while assigned(nodeToTest) do begin - if (nodeToTest.nodeType = ntElement_Node) - and (nodeToTest.namespaceURI = namespaceURI) - and (nodeToTest.localName = localName) - then begin - result:= (nodeToTest as TdomElement); - exit; - end; - nodeToTest:= nodeToTest.previousSibling; - end; -end; - -function TdomNode.isAncestor(const AncestorNode: TdomNode): boolean; -var - NewAncestor: TdomNode; - List1: TList; -begin - Result:= false; - NewAncestor:= ParentNode; - List1:= TList.create; - List1.clear; - try - while assigned(NewAncestor) do begin - {Ciculation test:} - if List1.IndexOf(NewAncestor) > -1 - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - List1.Add(NewAncestor); - if NewAncestor = AncestorNode then begin Result:= true; break; end; - NewAncestor:= NewAncestor.ParentNode; - end; - finally - List1.free; - end; -end; - -procedure TdomNode.normalize; -var - i: integer; -begin - for i:= 0 to ChildNodes.Length-1 do - ChildNodes.Item(i).normalize; -end; - -function TdomNode.supports(const feature, - version: wideString): boolean; -var - VersionStr: string; -begin - Result:= false; - VersionStr:= WideCharToString(PWideChar(feature)); - if (WideCharToString(PWideChar(version))='1.0') - or (WideCharToString(PWideChar(version))='') - then begin - if (CompareText(VersionStr,'XML')=0) - then Result:= true; - end else begin - if (WideCharToString(PWideChar(version))='2.0') - then begin - if (CompareText(VersionStr,'XML')=0) - then Result:= true; - end; {if ...} - end; {if ... else ...} -end; - -function TdomNode.validate2: boolean; -begin - raise ENot_Supported_Err.create('Not supported error.'); -end; - -function TdomNode.validateIDREFS: boolean; -begin - raise ENot_Supported_Err.create('Not supported error.'); -end; - -function TdomNode.resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; -var - i: integer; - ok: boolean; -begin - result:= true; - for i:= 0 to pred(ChildNodes.Length) do begin - ok:= ChildNodes.Item(i).resolveEntityReferences(opt); - if not ok then result:= false; - end; -end; - - - -//+++++++++++++++++++++++++ TdomCharacterData ++++++++++++++++++++++++++++ -constructor TdomCharacterData.create(const aOwner: TdomDocument); -begin - inherited create(aOwner); - FAllowedChildTypes:= []; -end; - -function TdomCharacterData.getData: wideString; -begin - Result:= NodeValue; -end; - -procedure TdomCharacterData.setData(const value: wideString); -var - prevValue: wideString; -begin - prevValue:= NodeValue; - NodeValue:= value; - doCharacterDataModified(self,prevValue,value); -end; - -function TdomCharacterData.getLength: integer; -begin - Result:= System.Length(Data); -end; - -function TdomCharacterData.substringData(const offset, - count: integer):wideString; -var - len: integer; -begin - if(offset < 0) or (offset > Length) or (count < 0) - then raise EIndex_Size_Err.create('Index size error.'); - // Make sure, that the length of the wideString is not - // exeeded, when using count and offset: - len:= Length-Offset; - if count < len then len:= count; - setString(Result,PWideChar(Data)+Offset,len); -end; - -procedure TdomCharacterData.appendData(const arg: wideString); -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Data:= concat(Data,arg); -end; - -procedure TdomCharacterData.insertData(const offset: integer; - const arg: wideString); -begin - ReplaceData(offset,0,arg); -end; - -procedure TdomCharacterData.deleteData(const offset, - count: integer); -begin - ReplaceData(offset,count,''); -end; - -procedure TdomCharacterData.replaceData(const offset, - count: integer; - const arg: wideString); -var - len: integer; - Data1,Data2:wideString; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if (offset < 0) or (offset > Length) or (count < 0) - then raise EIndex_Size_Err.create('Index size error.'); - // Make sure, that the length of the wideString is not - // exeeded, when using count and offset: - len:= Length-Offset; - if count < len then len:= count; - Data1:= SubstringData(0,offset); - Data2:= SubstringData(offset+len,Length-offset-len); - Data:= concat(Data1,arg,Data2); -end; - - - -// +++++++++++++++++++++++++++++ TdomAttr +++++++++++++++++++++++++++++ -constructor TdomAttr.create(const aOwner: TdomDocument; - const name: wideString; - const spcfd: boolean); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ntAttribute_Node; - FOwnerElement:= nil; - FSpecified:= Spcfd; - FAllowedChildTypes:= [ntText_Node, - ntEntity_Reference_Node, - ntDocument_Fragment_Node]; -end; - -constructor TdomAttr.createNS(const aOwner: TdomDocument; - const anamespaceURI, - qualifiedName: wideString; - const spcfd: boolean); -var - locName,prfx: wideString; -begin - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,locName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if ( ((prfx = 'xmlns') or (qualifiedName = 'xmlns')) - and not (namespaceURI ='http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (namespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (namespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - inherited create(aOwner); - FNodeName:= qualifiedName; - FNamespaceURI:= namespaceURI; - FPrefix:= prfx; - FLocalName:= locName; - FIsNamespaceNode:= true; - FNodeValue:= ''; - FNodeType:= ntAttribute_Node; - FOwnerElement:= nil; - FSpecified:= Spcfd; - FAllowedChildTypes:= [ntText_Node, - ntEntity_Reference_Node, - ntDocument_Fragment_Node]; -end; - -procedure TdomAttr.normalize; -var - PrevNode, CurrentNode: TdomNode; - i: integer; -begin - {normalize text:} - PrevNode:= nil; - i:= ChildNodes.Length; - while i>0 do - begin - Dec(i); - CurrentNode:= ChildNodes.Item(i); - if (CurrentNode.NodeType = ntText_Node) then - begin - if (Assigned(PrevNode)) and (PrevNode.NodeType = ntText_Node) then - begin - (CurrentNode as TdomText).AppendData((PrevNode as TdomText).Data); - removeChild(PrevNode); - PrevNode.OwnerDocument.FreeAllNodes(PrevNode); - end; - end - else // no text node, then normalize - CurrentNode.normalize; - PrevNode:=CurrentNode; - end; -end; - -function TdomAttr.GetName: wideString; -begin - Result:= NodeName; -end; - -function TdomAttr.GetSpecified: boolean; -begin - Result:= FSpecified; -end; - -function TdomAttr.GetNodeValue: wideString; -begin - Result:= getValue; -end; - -function TdomAttr.getLiteralValue: wideString; -var - i, j: integer; - child: TdomNode; - content: TdomCustomStr; - textData: wideString; -begin - content:= TdomCustomStr.create; - try - for i:= 0 to pred(childNodes.length) do begin - child:= childNodes.item(i); - case child.NodeType of - ntText_Node: - begin - textData:= (child as TdomText).data; - for j:= 1 to length(textData) do begin - case ord(textData[j]) of - 38: content.addWideString('&'); // Ampersand ('&') - 34: content.addWideString('"'); // Double quote ('"') - 60: content.addWideString('<'); // Less than ('<') - else - content.addWideChar(textData[j]); - end; - end; - end; - ntEntity_Reference_Node: begin - content.addWideChar('&'); - content.addWideString(child.nodeName); - content.addWideChar(';'); - end; - end; - end; {for ...} - result:= content.value; - finally - content.free; - end; -end; - -procedure TdomAttr.SetNodeValue(const value: wideString); -begin - setValue(value); -end; - -function TdomAttr.GetValue: wideString; - procedure FurtherAttrNormalization(var S: wideString); - const - DOUBLESPACE: wideString = #$20#$20; - var - nPos: integer; - dummy: wideString; - begin - repeat - nPos := Pos(DOUBLESPACE, S); - if nPos > 0 then - Delete(S, nPos, 1); - until nPos = 0; - dummy:= S; - s:= XMLTruncSpace(dummy); - end; -var - i: integer; - EntName: wideString; - Entity: TdomCMEntity; - CMAttr: TdomCMAttribute; - child: TdomNode; -begin - Result:=''; - for i:= 0 to ChildNodes.Length -1 do begin - child:= ChildNodes.item(i); - case child.NodeType of - ntText_Node: - Result:= Concat(Result,(child as TdomText).Data); - ntEntity_Reference_Node: begin - Entity:= nil; - EntName:= (child as TdomEntityReference).NodeName; - if (EntName='lt') then begin - Result:= Concat(Result,wideString('<')) - end else if (EntName='gt') then begin - Result:= Concat(Result,#62) - end else if (EntName='amp') then begin - Result:= Concat(Result,wideString('&')) - end else if (EntName='apos') then begin - Result:= Concat(Result,#39) - end else if (EntName='quot') then begin - Result:= Concat(Result,#34) - end else begin - if assigned(OwnerDocument) then - if assigned(OwnerDocument.contentModel) then - Entity:= OwnerDocument.contentModel.entities.getNamedItem(EntName); - if assigned(Entity) then begin - Result:= Concat(Result,Entity.normalizedValue) - end else raise EConvertError.create('Invalid entity reference error.'); - end; - end; - end; - end; {for ...} - - // Further attribute normalization: - if assigned(OwnerElement) then - if assigned(OwnerDocument) then - if assigned(OwnerDocument.contentModel) then begin - CMAttr:= OwnerDocument.contentModel.attributes.getNamedItem(OwnerElement.nodeName,nodename); - if assigned(CMAttr) then - if not IsXmlStringType(CMAttr.attributeType) - then FurtherAttrNormalization(result); - end; -end; - -procedure TdomAttr.SetValue(const value: wideString); -var - newTextNode: TdomText; - oldChild: TdomNode; - prevValue: wideString; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - prevValue:= nodeValue; - while HasChildNodes do begin - FirstChild.setIsReadonly(false); - oldChild:= RemoveChild(FirstChild); - ownerDocument.FreeAllNodes(oldChild); - end; - newTextNode:= OwnerDocument.CreateTextNode(value); - appendChild(newTextNode); - if assigned(FOwnerElement) - then FOwnerElement.doAttrModified(FOwnerElement,AC_MODIFICATION,prevValue,value,self); -end; - -function TdomAttr.GetOwnerElement: TdomElement; -begin - Result:= FOwnerElement; -end; - -function TdomAttr.GetParentNode: TdomNode; -begin - Result:= nil; -end; - -function TdomAttr.GetPreviousSibling: TdomNode; -begin - Result:= nil; -end; - -function TdomAttr.GetNextSibling: TdomNode; -begin - Result:= nil; -end; - -function TdomAttr.validate2: boolean; - - function isValidENTITY(const entitiesList: TdomNamedCMEntityMap; - const entityValue: wideString): boolean; - begin - if not assigned(entitiesList.getNamedItem(entityValue)) then begin - result:= false; - sendErrorNotification(ET_TARGET_UNPARSED_ENTITY_NOT_FOUND,self); - end else result:= true; - end; - -const - SPACE: WideChar = #$20; - LT: WideChar = #60; // '<' -var - i,startIndex,indexCount: integer; - ok, typeMismatch: boolean; - attriValue, AType: wideString; - Attri: TdomCMAttribute; -begin - result:= true; - - try - attriValue:= value; - except - // VC: Entity declared (XML 1.0, § 4.1) - result:= false; - sendErrorNotification(ET_ENTITY_DECL_NOT_FOUND,self); - exit; // Necessary because 'attriValue' will be used again in the next tests. - end; - - // WFC: No < in Attribute Values (XML 1.0, § 3.1) - if pos(LT,attriValue) > 0 then begin - result:= false; - sendErrorNotification(ET_LT_IN_ATTRIBUTE_VALUE,self); - end; - - // WFC: No External Entity Reference (XML 1.0, § 3.1) - if refersToExternalEntity then begin - result:= false; - sendErrorNotification(ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY,self); - end; - - // VC: Attribute value Type (XML 1.0, § 3.1) - if assigned(OwnerDocument.contentModel) and assigned(OwnerElement) then begin - Attri:= (OwnerDocument.contentModel.attributes.GetNamedItem(OwnerElement.NodeName,NodeName) as TdomCMAttribute); - if not assigned(Attri) then begin - result:= false; - sendErrorNotification(ET_ATTRIBUTE_DEFINITION_NOT_FOUND,self); - end else begin - AType:= Attri.AttributeType; - TypeMismatch:= false; - If AType = '' then begin - ok:= false; - with attri do begin - for i:= 0 to pred(ChildNodes.length) do begin - if ChildNodes.item(i).NodeName = attriValue then begin - ok:= true; - break; - end; - end; - end; {with ...} - TypeMismatch:= not ok; // VC: Enumaration (XML 1.0, § 3.3.1) - end else - if AType = 'ID' then begin - if not isXMLName(attriValue) - then TypeMismatch:= true; // VC: Entity (XML 1.0, § 3.3.1) - try - OwnerDocument.IDs.addObject(attriValue,self); - except // VC: ID (XML 1.0, § 3.3.1) - on EStringListError do begin - result:= false; - sendErrorNotification(ET_DUPLICATE_ID_VALUE,self); - end; - end; - end else - if AType = 'ENTITY' then begin - // VC: Entity (XML 1.0, § 3.3.1) - if not isXMLName(attriValue) then begin - TypeMismatch:= true - end else begin - if not isValidEntity(ownerDocument.contentModel.entities,attriValue) - then result:= false; - end; - end else - if AType = 'ENTITIES' then begin - // VC: Entity (XML 1.0, § 3.3.1) - if not isXMLNames(attriValue) then begin - TypeMismatch:= true; - end else begin - startIndex:= 1; indexCount:= 0; - for i:= 1 to length(attriValue) do begin - if attriValue[i] = SPACE then begin - if not isValidEntity(ownerDocument.contentModel.entities,copy(attriValue,startIndex,IndexCount)) then result:= false; - startIndex:= succ(i); - indexCount:= 0; - end else inc(indexCount); - end; - if not isValidEntity(ownerDocument.contentModel.entities,copy(attriValue,startIndex,IndexCount)) then result:= false; - end; - end else - if AType = 'NMTOKEN' then begin - if not isXmlNmtoken(attriValue) - then TypeMismatch:= true; // VC: name Token (XML 1.0, § 3.3.1) - end else - if AType = 'NMTOKENS' then begin - if not isXmlNmtokens(attriValue) - then TypeMismatch:= true; // VC: name Token (XML 1.0, § 3.3.1) - end; - - if TypeMismatch then begin - result:= false; - sendErrorNotification(ET_ATTRIBUTE_TYPE_MISMATCH,self); - end; - - end; - end else begin - result:= false; - sendErrorNotification(ET_ATTRIBUTE_DEFINITION_NOT_FOUND,self); - end; {if assigned(OwnerDocument.contentModel) ... else ... end} - -end; - -function TdomAttr.validateIDREFS: boolean; - function isValidIDREF(const idList: TdomWideStringList; - const idrefValue: wideString): boolean; - var - dummyIndex: integer; - begin - if not idList.find(idrefValue,dummyIndex) then begin - result:= false; - sendErrorNotification(ET_TARGET_ID_VALUE_NOT_FOUND,self); - end else result:= true; - end; - -const - SPACE: WideChar = #$20; -var - i, startIndex, indexCount: integer; - attrivalue, AType: wideString; - TypeMismatch: boolean; - Attri: TdomCMAttribute; -begin - result:= true; - - try - attriValue:= value; - except - // VC: Entity declared (XML 1.0, § 4.1) - result:= false; - sendErrorNotification(ET_ENTITY_DECL_NOT_FOUND,self); - exit; // Necessary because 'attriValue' would instead be used again in the next tests. - end; - - // VC: IDREF (XML 1.0, § 3.3.1) - TypeMismatch:= false; - if assigned(OwnerDocument.contentModel) and assigned(OwnerElement) then begin - Attri:= (OwnerDocument.contentModel.attributes.GetNamedItem(OwnerElement.NodeName,NodeName) as TdomCMAttribute); - AType:= Attri.AttributeType; - if AType = 'IDREF' then begin - if not isXMLName(attriValue) - then TypeMismatch:= true - else begin - if not isValidIDREF(ownerDocument.IDs,attriValue) then result:= false; - end; - end else - if AType = 'IDREFS' then begin - if not isXMLNames(attriValue) - then TypeMismatch:= true - else begin - startIndex:= 1; indexCount:= 0; - for i:= 1 to length(attriValue) do begin - if attriValue[i] = SPACE then begin - if not isValidIDREF(ownerDocument.IDs,copy(attriValue,startIndex,IndexCount)) then result:= false; - startIndex:= succ(i); - indexCount:= 0; - end else inc(indexCount); - end; - if not isValidIDREF(ownerDocument.IDs,copy(attriValue,startIndex,IndexCount)) then result:= false; - end; - end; - end; - - if TypeMismatch then begin - result:= false; - sendErrorNotification(ET_ATTRIBUTE_TYPE_MISMATCH,self); - end; - -end; - -function TdomAttr.resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; -var - i: integer; - s, childName: wideString; - child: TdomNode; - cmEnt: TdomCMEntity; - parser: TXmlToDomParser; -begin - result:= true; - parser:= TXmlToDomParser.create(nil); - try - case opt of - erReplace: begin - try - S:= literalValue; - clear; - if S <> '' then parser.docWideStringToDom(S,'','',self); - except - result:= false; - end; - end; - erExpand: begin // xxx Shouldn't that be removed at all ??? - for i:= 0 to pred(childnodes.length) do begin - child:= childnodes.item(i); - if child.nodeType = ntEntity_Reference_Node then begin - child.clear; - cmEnt:= (child as TdomEntityReference).correspondingCMEntity; - if assigned(cmEnt) then begin - try - S:= cmEnt.normalizedValue; - if S <> '' then parser.docWideStringToDom(S,'','',child); - except - result:= false; - end; - end else begin - childName:= child.nodeName; - if (childName='lt') then begin - child.appendChild(ownerDocument.CreateTextNode(#60)) - end else if (childName='gt') then begin - child.appendChild(ownerDocument.CreateTextNode(#62)) - end else if (childName='amp') then begin - child.appendChild(ownerDocument.CreateTextNode(#38)) - end else if (childName='apos') then begin - child.appendChild(ownerDocument.CreateTextNode(#39)) - end else if (childName='quot') then begin - child.appendChild(ownerDocument.CreateTextNode(#34)) - end else result:= false; - end; {if assigned(cmEnt) ...} - // xxx setting the readonly property is missing here! - end; - end; - end; - end; - finally - parser.free; - end; -end; - - - -//++++++++++++++++++++++++++++ TdomElement ++++++++++++++++++++++++++++++++ -constructor TdomElement.create(const aOwner: TdomDocument; - const tagName: wideString); -begin - if not IsXmlName(tagName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= tagName; - FNodeValue:= ''; - FNodeType:= ntElement_Node; - FAttributeListing:= TList.create; - FCreatedElementsNodeLists:= TList.create; - FCreatedElementsNodeListNSs:= TList.create; - FAttributeList:= TdomNamedNodeMap.create(aOwner,self,FAttributeListing,[ntAttribute_Node]); - FAllowedChildTypes:= [ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Fragment_Node]; -end; - -constructor TdomElement.createNS(const aOwner: TdomDocument; - const anamespaceURI, - qualifiedName: wideString); -var - locName,prfx: wideString; -begin - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,locName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if (namespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (namespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - inherited create(aOwner); - FNodeName:= qualifiedName; - FNamespaceURI:= anamespaceURI; - FPrefix:= prfx; - FLocalName:= locName; - FIsNamespaceNode:= true; - FNodeValue:= ''; - FNodeType:= ntElement_Node; - FAttributeListing:= TList.create; - FCreatedElementsNodeLists:= TList.create; - FCreatedElementsNodeListNSs:= TList.create; - FAttributeList:= TdomNamedNodeMap.create(aOwner,self,FAttributeListing,[ntAttribute_Node]); - FAllowedChildTypes:= [ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Fragment_Node]; -end; - -destructor TdomElement.destroy; -var - i: integer; -begin - FAttributeList.free; - FAttributeListing.free; - if assigned(FCreatedElementsNodeLists) - then for i := 0 to pred(FCreatedElementsNodeLists.Count) do - TdomElementsNodeList(FCreatedElementsNodeLists[i]).free; - if assigned(FCreatedElementsNodeListNSs) - then for i := 0 to pred(FCreatedElementsNodeListNSs.Count) do - TdomElementsNodeListNS(FCreatedElementsNodeListNSs[i]).free; - FCreatedElementsNodeLists.free; - FCreatedElementsNodeListNSs.free; - inherited destroy; -end; - -procedure TdomElement.setNodeValue(const value: wideString); -begin -end; - -procedure TdomElement.setIsReadonly(const value: boolean); -begin - inherited setIsReadonly(value); - Attributes.setIsReadonly(value); -end; - -function TdomElement.getTagName: wideString; -begin - Result:= NodeName; -end; - -function TdomElement.getAttributes: TdomNamedNodeMap; -begin - Result:= FAttributeList; -end; - -function TdomElement.getAttribute(const name: wideString): wideString; -begin - if Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if not assigned(GetAttributeNode(name)) - then result:= '' - else result:= (Attributes.GetNamedItem(name) as TdomAttr).value; -end; - -function TdomElement.setAttribute(const name, - value: wideString): TdomAttr; -var - Attr: TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - Attr:= getAttributeNode(name); - if assigned(Attr) then begin - Attr.value:= value; - Result:= nil; - end else begin - Result:= OwnerDocument.CreateAttribute(name); - Result.value:= value; - setAttributeNode(Result); - end; -end; - -function TdomElement.removeAttribute(const name: wideString): TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if not assigned(GetAttributeNode(name)) - then ENot_Found_Err.create('Node not found error.'); - Result:= RemoveAttributeNode(GetAttributeNode(name)); -end; - -function TdomElement.getAttributeNode(const name: wideString): TdomAttr; -begin - if Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - Result:= TdomAttr(Attributes.GetNamedItem(name)); -end; - -function TdomElement.setAttributeNode(const newAttr: TdomAttr): TdomAttr; -var - OldAttr: TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if OwnerDocument <> newAttr.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if assigned(newAttr.parentNode) and not (newAttr.OwnerElement = self) - then raise EInuse_Attribute_Err.create('Inuse attribute error.'); - Result:= nil; - if not (newAttr.OwnerElement = self) then begin - OldAttr:= (Attributes.GetNamedItem(newAttr.name) as TdomAttr); - if assigned(OldAttr) then Result:= RemoveAttributeNode(OldAttr); - Attributes.SetNamedItem(newAttr); - doAttrModified(self,AC_ADDITION,'',newAttr.value,newAttr); - end; -end; - -function TdomElement.removeAttributeNode(const oldAttr: TdomAttr): TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if Attributes.indexof(oldAttr) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Attributes.RemoveItem(oldAttr); - oldAttr.FOwnerElement:= nil; - Result:= oldAttr; - doAttrModified(self,AC_REMOVAL,oldAttr.value,'',oldAttr); -end; - -function TdomElement.getElementsByTagName(const name: wideString): TdomNodeList; -var - i: integer; -begin - for i:= 0 to FCreatedElementsNodeLists.Count - 1 do - if TdomElementsNodeList(FCreatedElementsNodeLists[i]).FQueryName = name - then begin Result:= TdomElementsNodeList(FCreatedElementsNodeLists[i]); exit; end; - Result:= TdomElementsNodeList.create(name,self); - FCreatedElementsNodeLists.add(Result); -end; - -function TdomElement.getAttributeNS(const anamespaceURI, - alocalName: wideString): wideString; -begin - if not Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if not assigned(GetAttributeNodeNS(anamespaceURI,alocalName)) - then result:= '' - else result:= (Attributes.GetNamedItemNS(anamespaceURI,alocalName) as TdomAttr).value; -end; - -function TdomElement.setAttributeNS(const anamespaceURI, - qualifiedName, - value: wideString): TdomAttr; -var - Attr: TdomAttr; - prfx, alocalname: wideString; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,alocalName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if ( ((prfx = 'xmlns') or (qualifiedName = 'xmlns')) - and not (anamespaceURI ='http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (namespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - Attr:= getAttributeNodeNS(anamespaceURI,alocalName); - if assigned(Attr) then begin - Attr.FNodeName:= qualifiedName; - Attr.value:= value; - Result:= nil; - end else begin - Result:= OwnerDocument.CreateAttributeNS(anamespaceURI,qualifiedName); - Result.value:= value; - setAttributeNodeNS(Result); - end; -end; - -function TdomElement.removeAttributeNS(const anamespaceURI, - alocalName: wideString): TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if not assigned(GetAttributeNodeNS(anamespaceURI,alocalName)) - then ENot_Found_Err.create('Node not found error.'); - Result:= RemoveAttributeNode(GetAttributeNodeNS(anamespaceURI,alocalName)); -end; - -function TdomElement.getAttributeNodeNS(const anamespaceURI, - alocalName: wideString): TdomAttr; -begin - if not Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - Result:= TdomAttr(Attributes.GetNamedItemNS(anamespaceURI,alocalName)); -end; - -function TdomElement.setAttributeNodeNS(const newAttr: TdomAttr): TdomAttr; -var - OldAttr: TdomAttr; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if not Attributes.NamespaceAware - then raise ENamespace_Err.create('Namespace error.'); - if OwnerDocument <> newAttr.OwnerDocument - then raise EWrong_Document_Err.create('Wrong document error.'); - if assigned(newAttr.parentNode) and not (newAttr.OwnerElement = self) - then raise EInuse_Attribute_Err.create('Inuse attribute error.'); - Result:= nil; - if not (newAttr.OwnerElement = self) then begin - OldAttr:= (Attributes.GetNamedItemNS(newAttr.namespaceURI,newAttr.localName) as TdomAttr); - if assigned(OldAttr) then Result:= RemoveAttributeNode(OldAttr); - Attributes.SetNamedItemNS(newAttr); - doAttrModified(self,AC_ADDITION,'',newAttr.value,newAttr); - end; -end; - -function TdomElement.getElementsByTagNameNS(const anamespaceURI, - alocalName: wideString): TdomNodeList; -var - i: integer; - nl: TdomElementsNodeListNS; -begin - for i:= 0 to FCreatedElementsNodeListNSs.Count - 1 do begin - nl:= TdomElementsNodeListNS(FCreatedElementsNodeListNSs[i]); - if (nl.FQueryNamespaceURI = anamespaceURI) and (nl.FQueryLocalName = alocalName) - then begin Result:= nl; exit; end; - end; - Result:= TdomElementsNodeListNS.create(anamespaceURI,alocalName,self); - FCreatedElementsNodeListNSs.add(Result); -end; - -function TdomElement.hasAttribute(const aname: wideString): boolean; -begin - Result:= assigned(Attributes.GetNamedItem(aname)); -end; - -function TdomElement.hasAttributeNS(const anamespaceURI, - alocalName: wideString): boolean; -begin - Result:= assigned(Attributes.GetNamedItemNS(anamespaceURI,alocalName)); -end; - -procedure TdomElement.normalize; -var - PrevNode, CurrentNode: TdomNode; - i: integer; -begin - {normalize text:} - PrevNode:=nil; - i:=ChildNodes.Length; - while i>0 do - begin - Dec(i); - CurrentNode:=ChildNodes.Item(i); - if (CurrentNode.NodeType = ntText_Node) then - begin - if (Assigned(PrevNode)) and (PrevNode.NodeType = ntText_Node) then - begin - (CurrentNode as TdomText).AppendData((PrevNode as TdomText).Data); - removeChild(PrevNode); - PrevNode.OwnerDocument.FreeAllNodes(PrevNode); - end; - end - else // no text node, then normalize - CurrentNode.normalize; - PrevNode:=CurrentNode; - end; - - {normalize attributes:} - for i:= 0 to attributes.Length-1 do - attributes.item(i).normalize; -end; - -function TdomElement.validate2: boolean; -var - i: integer; - ok: boolean; - contentModelOk: boolean; - EType: TdomCMElementTypeDeclaration; - PcdataChoice: TdomCMPcdataChoiceParticle; - particle: TdomCMParticle; - elementnames,rest: TdomWideStringList; - cm: TdomCMObject; - attri: TdomCMAttribute; - newAttr, textAttr: TdomAttr; - treeWalker: TdomTreeWalker; - nodeToTest: TdomNode; - isNonDeterministic: boolean; -begin - result:= true; - cm:= OwnerDocument.contentModel; - - if assigned(cm) then begin - - // VC: Element Valid (XML 1.0, § 3) - EType:= (cm.elementTypes.GetNamedItem(NodeName) as TdomCMElementTypeDeclaration); - if not assigned(EType) then begin - result:= false; - sendErrorNotification(ET_ELEMENT_TYPE_DECL_NOT_FOUND,self); - end else begin - treeWalker:= ownerDocument.CreateTreeWalker(self, - // Hide entity reference nodes: - [ntElement_Node, - ntAttribute_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node, - ntDocument_Type_Node, - ntDocument_Fragment_Node, - ntNotation_Node], - nil, - true); - try - case EType.ContentspecType of - ctEmpty: begin - nodeToTest:= treeWalker.firstChild; - while assigned(nodeToTest) do begin - if not ( (nodeToTest.nodeType = ntText_Node) and (nodeToTest.nodeValue = '') ) then begin - result:= false; - sendErrorNotification(ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT,self); - break; - end; - nodeToTest:= treeWalker.nextSibling; - end; {while ...} - end; - ctChildren: begin - elementnames:= TdomWideStringList.create; - rest:= TdomWideStringList.create; - try - ok:= true; - nodeToTest:= treeWalker.firstChild; - while assigned(nodeToTest) do begin - with nodeToTest do begin - case nodeType of - ntElement_Node: - elementnames.Add(NodeName); - ntText_Node: - if not (IsXmlS(nodeValue) or (nodeValue = '')) then begin - ok:= false; - break; - end; - ntProcessing_Instruction_Node,ntComment_Node:; // Do nothing --> node accepted. - else begin - ok:= false; - break; - end; - end; {case ...} - end; {with ...} - nodeToTest:= treeWalker.nextSibling; - end; {while ...} - if ok then begin - particle:= EType.firstChild as TdomCMParticle; - contentModelOk:= particle.contentModelTest(elementnames,rest,isNonDeterministic); - if isNonDeterministic then begin - result:= false; - sendErrorNotification(ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL,self); - end else ok:= contentModelOk and (rest.Count = 0); - end; {if ok ...} - finally - elementnames.free; - rest.free; - end; - if not ok then begin - result:= false; - sendErrorNotification(ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT,self); - end; {if ...} - end; - ctMixed: begin - PcdataChoice:= EType.firstChild as TdomCMPcdataChoiceParticle; - nodeToTest:= treeWalker.firstChild; - while assigned(nodeToTest) do begin - ok:= true; - with nodeToTest do begin - case nodeType of - ntElement_Node: - if assigned(PcdataChoice) then begin - if not PcdataChoice.elementDefined(NodeName) - then ok:= false; - end else ok:= false; - ntText_Node,ntProcessing_Instruction_Node,ntComment_Node:; // Do nothing --> node accepted. - else - ok:= false; - end; {case ...} - if not ok then begin - result:= false; - sendErrorNotification(ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT,self); - end; {if ...} - end; {with ...} - nodeToTest:= treeWalker.nextSibling; - end; {while ...} - end; - end; {case ...} - finally - ownerDocument.freeTreeWalker(TreeWalker); - end; {try ...} - end; {if not assigned(EType) ... else ... end} - - with cm.attributes do begin - for i:= 0 to pred(length) do begin - attri:= item(i); - if attri.elementName = nodeName then begin - if attri.defaultDeclaration = '#REQUIRED' then begin - // VC: Required Attribute (XML 1.0, § 3.3.2) - if not hasAttribute(attri.attributeName) then begin - result:= false; - sendErrorNotification(ET_REQUIRED_ATTRIBUTE_NOT_FOUND,self); - end; - end else begin - - textAttr:= self.GetAttributeNode(attri.attributeName); - if assigned(textAttr) then begin - // VC: Fixed Attribute Default (XML 1.0, § 3.3.2) - if attri.defaultDeclaration = '#FIXED' then begin - if attri.NodeValue <> textAttr.value then begin - result:= false; - sendErrorNotification(ET_FIXED_ATTRIBUTE_MISMATCH,self); - end; - end; - end else begin - // set default attributes: - if not (attri.defaultDeclaration = '#IMPLIED') then begin - newAttr:= OwnerDocument.CreateAttribute(attri.AttributeName); - newAttr.value:= attri.NodeValue; - newAttr.FSpecified:= false; - self.SetAttributeNode(newAttr); - end; - end; - - end; - end; {if attri.elementName ...} - end; {for ...} - end; {with ...} - - end else begin - result:= false; - sendErrorNotification(ET_ELEMENT_TYPE_DECL_NOT_FOUND,self); - end; {if assigned(cm) ... else ... end} - - // validate child attributes: - for i:= 0 to pred(attributes.length) do - if not attributes.item(i).validate2 - then result:= false; - - // validate child nodes: - for i:= 0 to pred(childnodes.length) do - if not childnodes.item(i).validate2 - then result:= false; - -end; - -function TdomElement.validateIDREFS: boolean; -var - i: integer; -begin - result:= true; - for i:= 0 to pred(attributes.length) do - if not attributes.Item(i).validateIDREFS - then result:= false; -end; - -function TdomElement.resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; -var - i: integer; - ok,hasEntRefs: boolean; - S, childName: wideString; - child: TdomNode; - docFrag: TdomDocumentFragment; - ReplText: TdomText; - cmEnt: TdomCMEntity; - parser: TXmlToDomParser; -begin - result:= true; - - for i:= 0 to pred(attributes.Length) do begin - ok:= attributes.Item(i).resolveEntityReferences(opt); - if not ok then result:= false; - end; - - case opt of - erReplace: begin - parser:= TXmlToDomParser.create(nil); - try - parser.DOMImpl:= ownerDocument.domImplementation; - hasEntRefs:= false; - i:= 0; - while i < ChildNodes.Length do begin - child:= ChildNodes.Item(i); - if child.nodeType = ntEntity_Reference_Node then begin - hasEntRefs:= true; - cmEnt:= (child as TdomEntityReference).correspondingCMEntity; - if assigned(cmEnt) then begin - try - S:= cmEnt.replacementText; - docFrag:= ownerDocument.CreateDocumentFragment; - try - if S <> '' then parser.docWideStringToDom(S,'','',docFrag); - replaceChild(docFrag,child); - ownerDocument.FreeAllNodes(child); - dec(i); // Necessary, if an empty entity was referenced. - finally - ownerDocument.FreeAllNodes(TdomNode(docFrag)); - end; - except - result:= false; - end; - end else begin - childName:= child.nodeName; - if (childName='lt') then begin - ReplText:= ownerDocument.CreateTextNode(#60); - replaceChild(ReplText,child); - ownerDocument.FreeAllNodes(child); - end else if (childName='gt') then begin - ReplText:= ownerDocument.CreateTextNode(#62); - replaceChild(ReplText,child); - ownerDocument.FreeAllNodes(child); - end else if (childName='amp') then begin - ReplText:= ownerDocument.CreateTextNode(#38); - replaceChild(ReplText,child); - ownerDocument.FreeAllNodes(child); - end else if (childName='apos') then begin - ReplText:= ownerDocument.CreateTextNode(#39); - replaceChild(ReplText,child); - ownerDocument.FreeAllNodes(child); - end else if (childName='quot') then begin - ReplText:= ownerDocument.CreateTextNode(#34); - replaceChild(ReplText,child); - ownerDocument.FreeAllNodes(child); - end else result:= false; - end; {if assigned(cmEnt) ...} - end else child.resolveEntityReferences(opt); - inc(i); - end; {while ...} - finally - parser.free; - end; - if hasEntRefs then normalize; - end; - erExpand: begin - for i:= 0 to pred(ChildNodes.Length) do begin - child:= ChildNodes.Item(i); - if child.nodeType = ntEntity_Reference_Node then begin - ok:= (child as TdomEntityReference).expand; - if not ok then result:= false; - end else child.resolveEntityReferences(opt); - end; {for ...} - end; - end; -end; - - - -//+++++++++++++++++++++++++++++ TdomText +++++++++++++++++++++++++++++++++ -constructor TdomText.create(const aOwner: TdomDocument); -begin - inherited create(aOwner); - FNodeName:= '#text'; - FNodeValue:= ''; - FNodeType:= ntText_Node; - FAllowedChildTypes:= []; -end; - -function TdomText.getIsWhitespaceInElementContent: boolean; -var - cm: TdomCMObject; - EType: TdomCMElementTypeDeclaration; - pNode: TdomNode; -begin - result:= false; - if not (isXMLS(nodeValue) or (nodeValue = '')) then exit; - cm:= OwnerDocument.contentModel; - if assigned(cm) then begin - pNode:= parentNode; - while assigned(pNode) do begin - case pNode.nodeType of - ntElement_Node: begin - EType:= (cm.elementTypes.GetNamedItem(pNode.NodeName) as TdomCMElementTypeDeclaration); - if assigned(EType) - then if EType.ContentspecType = ctChildren - then result:= true; - break; - end; - ntEntity_Reference_Node: - pNode:= pNode.parentNode; - else - break; - end; {case ...} - end; {while ...} - end; {if ...} -end; - -function TdomText.validate2: boolean; -begin - result:= true; -end; - -function TdomText.SplitText(const offset: integer): TdomText; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if(offset < 0) or (offset > Length) - then raise EIndex_Size_Err.create('Index size error.'); - Result:= OwnerDocument.CreateTextNode(SubstringData(offset,length-offset)); - DeleteData(offset,length-offset); - if assigned(ParentNode) then ParentNode.insertBefore(Result,self.NextSibling); -end; - - - -//++++++++++++++++++++++++++++ TdomComment +++++++++++++++++++++++++++++++ -constructor TdomComment.create(const aOwner: TdomDocument); -begin - inherited create(aOwner); - FNodeName:= '#comment'; - FNodeValue:= ''; - FNodeType:= ntComment_Node; - FAllowedChildTypes:= []; -end; - -function TdomComment.validate2: boolean; -begin - result:= true; -end; - - - -//+++++++++++++++++++++ TdomProcessingInstruction +++++++++++++++++++++++++ -constructor TdomProcessingInstruction.create(const aOwner: TdomDocument; - const targ: wideString); -begin - if not IsXmlPITarget(targ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= targ; - FNodeValue:= ''; - FNodeType:= ntProcessing_Instruction_Node; - FAllowedChildTypes:= []; -end; - -function TdomProcessingInstruction.validate2: boolean; -begin - result:= true; -end; - -function TdomProcessingInstruction.getTarget: wideString; -begin - Result:= FNodeName; -end; - -function TdomProcessingInstruction.getData: wideString; -begin - Result:= FNodeValue; -end; - -procedure TdomProcessingInstruction.setData(const value: wideString); -var - prevValue: wideString; -begin - prevValue:= NodeValue; - NodeValue:= value; - doCharacterDataModified(self,prevValue,value); -end; - - - -//++++++++++++++++++++++++++ TdomCDATASection +++++++++++++++++++++++++++++ -constructor TdomCDATASection.create(const aOwner: TdomDocument); -begin - inherited create(aOwner); - FNodeName:= '#cdata-section'; - FNodeValue:= ''; - FNodeType:= ntCDATA_Section_Node; -end; - -function TdomCDATASection.validate2: boolean; -begin - result:= true; -end; - - - -//++++++++++++++++++++++++++ TdomDocumentType +++++++++++++++++++++++++++++ -constructor TdomDocumentType.create(const aOwner: TdomDocument; - const name, - pubId, - sysId, - IntSubset: wideString); -begin - inherited create(aOwner); - FNodeValue:= ''; - FNodeName:= name; - FPublicId:= pubId; - FSystemId:= sysId; - FInternalSubset:= IntSubset; - FNodeType:= ntDocument_Type_Node; - FAllowedChildTypes:= []; - FEntitiesListing:= TList.create; - FEntitiesList:= TdomNamedNodeMap.create(aOwner,self,FEntitiesListing,[ntEntity_Node]); - FNotationsListing:= TList.create; - FNotationsList:= TdomNamedNodeMap.create(aOwner,self,FNotationsListing,[ntNotation_Node]); -end; - -destructor TdomDocumentType.destroy; -begin - FEntitiesListing.free; - FEntitiesList.free; - FNotationsListing.free; - FNotationsList.free; - inherited destroy; -end; - -function TdomDocumentType.validate2: boolean; -begin - result:= true; -end; - -function TdomDocumentType.GetEntities: TdomNamedNodeMap; -begin - Result:= FEntitiesList; -end; - -function TdomDocumentType.GetInternalSubset: wideString; -begin - Result:= FInternalSubset; -end; - -function TdomDocumentType.GetName: wideString; -begin - Result:= NodeName; -end; - -function TdomDocumentType.GetNotations: TdomNamedNodeMap; -begin - Result:= FNotationsList; -end; - -function TdomDocumentType.GetPublicId: wideString; -begin - Result:= FPublicId; -end; - -function TdomDocumentType.GetSystemId: wideString; -begin - Result:= FSystemId; -end; - -procedure TdomDocumentType.SetNodeValue(const value: wideString); -begin -end; - - - -//++++++++++++++++++++++++++ TdomNotation ++++++++++++++++++++++++++++++ -constructor TdomNotation.create(const aOwner: TdomDocument; - const name, - pubId, - sysId: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(publicId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FPublicId:= pubId; - FSystemId:= sysId; - FNodeType:= ntNotation_Node; - FAllowedChildTypes:= []; -end; - -procedure TdomNotation.SetNodeValue(const value: wideString); -begin - // Do nothing. -end; - -function TdomNotation.GetPublicId: wideString; -begin - Result:= FPublicId; -end; - -function TdomNotation.GetSystemId: wideString; -begin - Result:= FSystemId; -end; - - - -//+++++++++++++++++++++++++++ TdomEntity +++++++++++++++++++++++++++++++++ -constructor TdomEntity.create(const aOwner: TdomDocument; - const name, - pubId, - sysId, - notaName: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNotationName:= notaName; - FNodeType:= ntEntity_Node; - FPublicId:= pubId; - FSystemId:= sysId; - FEncoding:= ''; - FVersion:= ''; - FAllowedChildTypes:= [ntElement_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntDocument_Fragment_Node]; -end; - -function TdomEntity.GetNotationName: wideString; -begin - Result:= FNotationName; -end; - -procedure TdomEntity.SetNodeValue(const value: wideString); -begin - // Do nothing -end; - -function TdomEntity.insertBefore(const newChild, - refChild: TdomNode): TdomNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited insertBefore(newChild,refChild); -end; - -function TdomEntity.replaceChild(const newChild, - oldChild: TdomNode): TdomNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited replaceChild(newChild,oldChild); -end; - -function TdomEntity.appendChild(const newChild: TdomNode): TdomNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited appendChild(newChild); -end; - - - -//++++++++++++++++++++++++ TdomEntityReference +++++++++++++++++++++++++ -constructor TdomEntityReference.create(const aOwner: TdomDocument; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ntEntity_Reference_Node; - FAllowedChildTypes:= [ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Fragment_Node]; -end; - -function TdomEntityReference.getCorrespondingCMEntity: TdomCMEntity; -var - cm: TdomCMObject; -begin - cm:= ownerDocument.contentModel; - if assigned(cm) - then result:= cm.Entities.getNamedItem(NodeName) - else result:= nil; -end; - -function TdomEntityReference.getRefersToPredefinedEntity: boolean; -begin - if (nodeName = 'lt') or - (nodeName = 'gt') or - (nodeName = 'amp') or - (nodeName = 'apos') or - (nodeName = 'quot') - then result:= true - else result:= false; -end; - -function TdomEntityReference.expand: boolean; -// Resolves the replacement text of the entity reference by the value of -// its correspondingCMEntity or by a default entity respectivly. -// Returns 'true' if successful, otherwise 'false'. -var - S: wideString; - cmEnt: TdomCMEntity; - parser: TXmlToDomParser; -begin - result:= true; - parser:= TXmlToDomParser.create(nil); - try - parser.DOMImpl:= ownerDocument.domImplementation; - clear; - cmEnt:= correspondingCMEntity; - if assigned(cmEnt) then begin - try - S:= cmEnt.replacementText; - if S <> '' then parser.docWideStringToDom(S,'','',self); - // xxx setting the readonly property is missing here! - except - result:= false; - end; - end else begin - if (nodeName='lt') then begin - appendChild(ownerDocument.CreateTextNode(#60)) - end else if (nodeName='gt') then begin - appendChild(ownerDocument.CreateTextNode(#62)) - end else if (nodeName='amp') then begin - appendChild(ownerDocument.CreateTextNode(#38)) - end else if (nodeName='apos') then begin - appendChild(ownerDocument.CreateTextNode(#39)) - end else if (nodeName='quot') then begin - appendChild(ownerDocument.CreateTextNode(#34)) - end else result:= false; - end; {if assigned(cmEnt) ...} - // xxx setting the readonly property is missing here! - finally - parser.free; - end; -end; - -function TdomEntityReference.validate2: boolean; -var - ent: TdomCMEntity; - i: integer; -begin - result:= true; - - if not refersToPredefinedEntity then begin - - // VC: Entity declared (XML 1.0, § 4.1) - ent:= getCorrespondingCMEntity; - if not assigned(ent) then begin - result:= false; - sendErrorNotification(ET_ENTITY_DECL_NOT_FOUND,self); - exit; - end; - - if ent.isParsedEntity then begin - - if not ent.resolve then begin - result:= false; - sendErrorNotification(ET_UNRESOLVABLE_ENTITY_REFERENCE,self); - exit; - end; - - // WFC: Parsed Entity (XML 1.0, § 4.1) - if ent.refersToUnparsedEntity(true) then begin - result:= false; - sendErrorNotification(ET_REFERENCE_TO_UNPARSED_ENTITY,self); - end; - - // WFC: No Recursion (XML 1.0, § 4.1) - if ent.RefersToItself(true) then begin - result:= false; - sendErrorNotification(ET_RECURSIVE_REFERENCE,self); - end; - - // WFC: Well-Formed Parsed Entities (XML 1.0, § 4.3.2) - if ent.isUnusable then begin - result:= false; - sendErrorNotification(ET_NO_PROPER_MARKUP_REFERENCED,self); - end; {if ...} - - end; - - end; {if not refersToPredefinedEntity ...} - - // validate child nodes: - for i:= 0 to pred(childnodes.length) do - if not childnodes.item(i).validate2 - then result:= false; - -end; - -procedure TdomEntityReference.SetNodeValue(const value: wideString); -begin - // Do nothing. -end; - -function TdomEntityReference.CloneNode(const deep: boolean): TdomNode; -begin - result:= inherited cloneNode(deep); - makeChildrenReadonly; -end; - -function TdomEntityReference.resolveEntityReferences(const opt: TdomEntityResolveOption): boolean; -begin - result:= true; -end; - - - -//++++++++++++++++++++++++ TdomDocumentFragment +++++++++++++++++++++++++++ -constructor TdomDocumentFragment.create(const aOwner: TdomDocument); -begin - inherited create(aOwner); - FNodeName:= '#document-fragment'; - FNodeValue:= ''; - FNodeType:= ntDocument_Fragment_Node; - FAllowedChildTypes:= [ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Type_Node, // xxx not DOM conformant. Delete? - ntDocument_Fragment_Node]; -end; - -procedure TdomDocumentFragment.SetNodeValue(const value: wideString); -begin -end; - - - -//+++++++++++++++++++++++++ TdomXPathNamespace ++++++++++++++++++++++++++++ -constructor TdomXPathNamespace.create(const aOwnerElement: TdomElement; - const anamespaceUri, - aprefix: wideString); -begin - if not ( IsXmlPrefix(aprefix) or (aprefix = '') ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if ( (aprefix = 'xmlns') and not (anamespaceURI = 'http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (anamespaceURI = '') and (aprefix <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (aprefix = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - FOwnerElement:= aOwnerElement; - FIsReadonly:= true; - FNodeType:= ntXPath_Namespace_Node; - FNodeName:= aprefix; - FPrefix:= aprefix; - FNamespaceURI:= anamespaceUri; -end; - -function TdomXPathNamespace.getDocument: TdomDocument; -begin - result:= FOwnerElement.ownerDocument; -end; - -function TdomXPathNamespace.getOwnerElement: TdomElement; -begin - result:= FOwnerElement; -end; - - - -//++++++++++++++++++++++++++++ TdomDocument +++++++++++++++++++++++++++++++ -constructor TdomDocument.create(const aOwner: TDomImplementation); -begin - inherited create(self); - FDomImpl:= aOwner; - FNodeName:= '#document'; - FNodeValue:= ''; - FNodeType:= ntDocument_Node; - FEncoding:= ''; - FStandalone:= ''; - FSystemId:= ''; - FVersion:= ''; - FBaseUri:= ''; - FModified:= false; - FCMInternal:= nil; - FDefaultView:= nil; - FCreatedNodes:= TList.create; - FCreatedNodeIterators:= TList.create; - FCreatedTreeWalkers:= TList.create; - FCreatedElementsNodeLists:= TList.create; - FCreatedElementsNodeListNSs:= TList.create; - FCreatedExpressions:= TList.create; - FCreatedNSResolvers:= TList.create; - FIDs:= TdomWideStringList.create; - FIDs.Sorted:= true; - FIDs.Duplicates:= dupError; - FAllowedChildTypes:= [ntElement_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Type_Node, - ntDocument_Fragment_Node]; -end; - -destructor TdomDocument.destroy; -begin - clear; - FCreatedNodes.Free; - FCreatedNodeIterators.Free; - FCreatedTreeWalkers.Free; - FCreatedElementsNodeLists.free; - FCreatedElementsNodeListNSs.free; - FCreatedExpressions.free; - FCreatedNSResolvers.free; - FIDs.free; - inherited destroy; -end; - -procedure TdomDocument.SetNodeValue(const value: wideString); -begin - // Do nothing. -end; - -procedure TdomDocument.FindNewReferenceNodes(const NodeToRemove: TdomNode); -var - i: integer; - refNode, refRoot: TdomNode; -begin - for i:= 0 to FCreatedNodeIterators.count-1 do begin - refNode:= TdomNodeIterator(FCreatedNodeIterators[i]).FReferenceNode; - if (refNode = NodeToRemove) or refNode.IsAncestor(NodeToRemove) then begin - refRoot:= TdomNodeIterator(FCreatedNodeIterators[i]).root; - if NodeToRemove.IsAncestor(refRoot) - then TdomNodeIterator(FCreatedNodeIterators[i]).FindNewReferenceNode(NodeToRemove); - end; - end; -end; - -procedure TdomDocument.clear; -var - i : integer; -begin - FNodeListing.clear; - for i := 0 to FCreatedNodes.Count - 1 do - TdomNode(FCreatedNodes[i]).free; - FCreatedNodes.Clear; - for i := 0 to FCreatedNodeIterators.Count - 1 do - TdomNodeIterator(FCreatedNodeIterators[i]).free; - FCreatedNodeIterators.Clear; - for i := 0 to FCreatedTreeWalkers.Count - 1 do - TdomTreeWalker(FCreatedTreeWalkers[i]).Free; - FCreatedTreeWalkers.Clear; - for i := 0 to FCreatedElementsNodeLists.Count - 1 do - TdomElementsNodeList(FCreatedElementsNodeLists[i]).free; - FCreatedElementsNodeLists.Clear; - for i := 0 to FCreatedElementsNodeListNSs.Count - 1 do - TdomElementsNodeListNS(FCreatedElementsNodeListNSs[i]).free; - FCreatedElementsNodeListNSs.Clear; - for i := 0 to FCreatedNSResolvers.Count - 1 do - TdomXPathNSResolver(FCreatedNSResolvers[i]).Free; - FCreatedNSResolvers.Clear; - for i:= 0 to FCreatedExpressions.count-1 do - TdomXPathExpression(FCreatedExpressions[i]).free; - FCreatedExpressions.Clear; -end; - -procedure TdomDocument.ClearInvalidNodeIterators; -var - i: integer; -begin - for i:= 0 to FCreatedNodeIterators.count-1 do - if TdomNodeIterator(FCreatedNodeIterators[i]).FInvalid then begin - TdomNodeIterator(FCreatedNodeIterators[i]).free; - FCreatedNodeIterators[i]:= nil; - end; - FCreatedNodeIterators.pack; - FCreatedNodeIterators.Capacity:= FCreatedNodeIterators.Count; -end; - -function TdomDocument.createEntity(const name, - pubId, - sysId, - notaName: wideString): TdomEntity; -begin - result:= TdomEntity.create(self,name,pubId,sysId,notaName); - FCreatedNodes.add(result); -end; - -function TdomDocument.createNotation(const name, - pubId, - sysId: wideString): TdomNotation; -begin - result:= TdomNotation.create(self,name,pubId,sysId); - FCreatedNodes.add(result); -end; - -function TdomDocument.importNode(const importedNode: TdomNode; - const deep: boolean): TdomNode; -var - cm: TdomCMObject; - i: integer; - newChild: TdomNode; - attri: TdomCMAttribute; - newAttr, oldAttr, textAttr: TdomAttr; - nsAware: boolean; -begin - if not assigned(importedNode) - then raise ENot_Supported_Err.create('Not supported error.'); - case importedNode.NodeType of - ntAttribute_Node: - begin - with importedNode do - if isNamespaceNode - then result:= createAttributeNS(namespaceURI,nodeName) - else result:= createAttribute(nodeName); - Result.FNodeValue:= FNodeValue; - // duplicate the text of the attribute node: - for i:= 0 to pred(importedNode.ChildNodes.Length) do begin - newChild:= importNode(importedNode.ChildNodes.Item(i),true); - Result.appendChild(newChild); - end; - end; - ntCDATA_Section_Node: - Result:= createCDATASection((importedNode as TdomCDATASection).Data); - ntComment_Node: - Result:= createComment((importedNode as TdomComment).Data); - ntDocument_Fragment_Node: - begin - Result:= createDocumentFragment; - if deep then for i:= 0 to pred(importedNode.ChildNodes.Length) do begin - newChild:= importNode(importedNode.ChildNodes.Item(i),true); - Result.appendChild(newChild); - end; - end; - ntElement_Node: - begin - with importedNode do - if isNamespaceNode - then result:= createElementNS(namespaceURI,nodeName) - else result:= createElement(nodeName); - nsAware:= importedNode.attributes.namespaceAware; - Result.attributes.namespaceAware:= nsAware; - // Duplicating specified attributes: - if nsAware then begin - for i:= 0 to importedNode.attributes.Length-1 do begin - oldAttr:= TdomAttr(importedNode.attributes.Item(i)); - if oldAttr.specified then begin - newChild:= importNode(oldAttr,true); - (result as TdomElement).setAttributeNodeNS((newChild as TdomAttr)); - end; - end; {for i:= 0 to ...} - end else begin - for i:= 0 to importedNode.attributes.Length-1 do begin - oldAttr:= TdomAttr(importedNode.attributes.Item(i)); - if oldAttr.specified then begin - newChild:= importNode(oldAttr,true); - (result as TdomElement).setAttributeNode((newChild as TdomAttr)); - end; - end; {for i:= 0 to ...} - end; {if ... else ...} - // Adding default attributes: - cm:= OwnerDocument.contentModel; - if assigned(cm) then begin - with cm.attributes do begin - for i:= 0 to pred(length) do begin - attri:= item(i); - if attri.elementName = (result as TdomElement).nodeName then begin - if (attri.defaultDeclaration <> '#REQUIRED') - and (attri.defaultDeclaration <> '#IMPLIED') then begin - textAttr:= (result as TdomElement).getAttributeNode(attri.attributeName); - if not assigned(textAttr) then begin - newAttr:= OwnerDocument.CreateAttribute(attri.AttributeName); - newAttr.value:= attri.NodeValue; - newAttr.FSpecified:= false; - (result as TdomElement).SetAttributeNode(newAttr); - end; {if not ...} - end; {if ...} - end; {if ...} - end; {with ...} - end; {if assigned(cm) ...} - end; {for i:= 0 to ...} - // Duplicating child nodes: - if deep then for i:= 0 to pred(importedNode.ChildNodes.Length) do begin - newChild:= importNode(importedNode.ChildNodes.Item(i),true); - Result.appendChild(newChild); - end; - end; - ntEntity_Node: - with (importedNode as TdomEntity) do begin - result:= createEntity(nodeName,publicId,systemId,notationName); - (result as TdomEntity).encoding:= encoding; - (result as TdomEntity).version:= version; - if deep then for i:= 0 to pred(childNodes.length) do begin - newChild:= importNode(childNodes.Item(i),true); - result.appendChild(newChild); - end; - end; - ntEntity_Reference_Node: - begin - Result:= createEntityReference(importedNode.NodeName); - (result as TdomEntityReference).expand; - end; - ntNotation_Node: - with (importedNode as TdomEntity) do begin - result:= createNotation(nodeName,publicId,systemId); - end; - ntProcessing_Instruction_Node: - Result:= createProcessingInstruction((importedNode as TdomProcessingInstruction).target, - (importedNode as TdomProcessingInstruction).data); - ntText_Node: - Result:= createTextNode((importedNode as TdomText).Data); - else - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -procedure TdomDocument.doAttrModified(originalTarget: TdomNode; - attrChange: TdomAttrChange; - prevValue, - newValue: wideString; - relatedAttr: TdomAttr); -begin - FModified:= true; - try - inherited; - finally - if assigned(FParentNode) - then domImplementation.doAttrModified(self,originalTarget,attrChange,prevValue,newValue,relatedAttr); - end; -end; - -procedure TdomDocument.doCharacterDataModified(originalTarget: TdomNode; - prevValue, - newValue: wideString); -begin - FModified:= true; - try - inherited; - finally - if assigned(FParentNode) - then domImplementation.doCharacterDataModified(self,originalTarget,prevValue,newValue); - end; -end; - -procedure TdomDocument.doNodeInserted(originalTarget: TdomNode); -begin - FModified:= true; - try - inherited; - finally - if assigned(FParentNode) - then domImplementation.doNodeInserted(self,originalTarget); - end; -end; - -procedure TdomDocument.doNodeRemoved(originalTarget: TdomNode); -begin - FModified:= true; - try - inherited; - finally - if assigned(FParentNode) - then domImplementation.doNodeRemoved(self,originalTarget); - end; -end; - -function TdomDocument.getBaseUri: wideString; -begin - result:= FBaseUri; -end; - -procedure TdomDocument.InitDoc(const tagName: wideString); -begin - if not IsXmlName(tagName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if assigned (DocumentElement) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - appendChild(CreateElement(tagName)); -end; - -procedure TdomDocument.InitDocNS(const anamespaceURI, - aqualifiedName: wideString); -var - prfx, alocalName: wideString; -begin - if not IsXmlName(aqualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not xmlExtractPrefixAndLocalName(aqualifiedName,prfx,alocalName) then begin - if not IsXmlName(aqualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if ( ((prfx = 'xmlns') or (aqualifiedName = 'xmlns')) - and not (anamespaceURI ='http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (anamespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - if assigned (DocumentElement) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - appendChild(CreateElementNS(anamespaceURI,aqualifiedName)); -end; - -function TdomDocument.removeContentModel: TdomCMObject; -begin - if assigned(FCMInternal) - then FCMInternal.FAssociatedDocument:= nil; - result:= FCMInternal; - FCMInternal:= nil; -end; - -procedure TdomDocument.setBaseUri(const value: wideString); -var - uri: string; -begin - try - uri:= UTF16To7BitASCIIStr(value); - except - raise ESyntax_Err.create('Syntax error.'); - end; - if not isUriAbsoluteURIStr(uri) - then raise ESyntax_Err.create('Syntax error.'); - FBaseUri:= value; -end; - -function TdomDocument.setContentModel(const arg: TdomCMObject): TdomCMObject; -begin - result:= removeContentModel; - if assigned(arg) - then if assigned(arg.associatedDocument) - then raise EInuse_Content_Model_Err.create('Inuse content model error.'); - FCMInternal:= arg; - arg.FAssociatedDocument:= self; -end; - -function TdomDocument.GetDoctype: TdomDocumentType; -var - Child: TdomNode; -begin - Result:= nil; - Child:= getFirstChild; - while assigned(Child) do begin - if Child.NodeType = ntDocument_Type_Node then begin - Result:= (Child as TdomDocumentType); - break; - end; - Child:= Child.NextSibling; - end; -end; - -function TdomDocument.GetDocumentElement: TdomElement; -var - Child: TdomNode; -begin - Result:= nil; - Child:= getFirstChild; - while assigned(Child) do begin - if Child.NodeType = ntElement_Node then begin - Result:= (Child as TdomElement); - break; - end; - Child:= Child.NextSibling; - end; -end; - -function TdomDocument.CreateElement(const tagName: wideString): TdomElement; -begin - Result:= TdomElement.create(self,tagName); - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateElementNS(const anamespaceURI, - aqualifiedName: wideString): TdomElement; -begin - Result:= TdomElement.createNS(self,anamespaceURI,aqualifiedName); - FCreatedNodes.add(Result); - Result.attributes.namespaceAware:= true; -end; - -function TdomDocument.CreateDocumentFragment: TdomDocumentFragment; -begin - Result:= TdomDocumentFragment.create(self); - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateTextNode(const Data: wideString): TdomText; -begin - Result:= TdomText.create(self); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateComment(const Data: wideString): TdomComment; -begin - Result:= TdomComment.create(self); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateCDATASection(const Data: wideString): TdomCDATASection; -begin - Result:= TdomCDATASection.create(self); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateProcessingInstruction(const targ, - Data : wideString): TdomProcessingInstruction; -begin - Result:= TdomProcessingInstruction.create(self,targ); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateAttribute(const name: wideString): TdomAttr; -begin - Result:= TdomAttr.create(self,name,true); - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateAttributeNS(const anamespaceURI, - aqualifiedName: wideString): TdomAttr; -begin - Result:= TdomAttr.createNS(self,anamespaceURI,aqualifiedName,true); - FCreatedNodes.add(Result); -end; - -function TdomDocument.CreateEntityReference(const name: wideString): TdomEntityReference; -begin - Result:= TdomEntityReference.create(self,name); - FCreatedNodes.add(Result); -end; - -function TdomDocument.createExpression(const expression: wideString; - const resolver: TdomXPathNSResolver): TdomXPathExpression; -begin - result:= TdomXPathExpression.create(self,expression,resolver); - FCreatedExpressions.add(result); -end; - -function TdomDocument.CreateDocumentType(const aname, - pubId, - sysId, - IntSubset: wideString): TdomDocumentType; -begin - Result:= TdomDocumentType.create(self,aname,pubId,sysId,IntSubset); - FCreatedNodes.add(Result); -end; - -procedure TdomDocument.freeAllNodes(var node: TdomNode); -var - index: integer; - oldChild: TdomNode; - oldAttr: TdomAttr; -begin - if not assigned(node) then exit; - if node.OwnerDocument <> Self - then raise EWrong_Document_Err.create('Wrong document error.'); - if node = Self - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(node.ParentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if node.NodeType = ntAttribute_Node then - if assigned((node as TdomAttr).OwnerElement) - then raise EInuse_Attribute_Err.create('Inuse attribute error.'); - // xxx notations ? - while node.HasChildNodes do begin - node.FirstChild.setIsReadonly(false); - oldChild:= node.RemoveChild(node.FirstChild); - node.OwnerDocument.FreeAllNodes(oldChild); - end; - case node.NodeType of - ntElement_Node: - while node.Attributes.Length > 0 do begin - oldAttr:= (node.Attributes.item(0) as TdomAttr); - oldAttr.setIsReadonly(false); - (node as TdomElement).RemoveAttributeNode(oldAttr); - node.OwnerDocument.FreeAllNodes(TdomNode(oldAttr)); - end; - end; {case ...} - index:= FCreatedNodes.IndexOf(node); - node.free; - FCreatedNodes.Delete(index); - node:= nil; -end; - -procedure TdomDocument.freeExpression(var expression: TdomXPathExpression); -var - index: integer; -begin - if not assigned(expression) then exit; - index:= FCreatedExpressions.IndexOf(expression); - if index = -1 - then raise EWrong_Document_Err.create('Wrong document error.'); - FCreatedExpressions.delete(index); - expression.free; - expression:= nil; -end; - -procedure TdomDocument.freeNSResolver(var resolver: TdomXPathNSResolver); -var - index: integer; -begin - if not assigned(resolver) then exit; - index:= FCreatedNSResolvers.IndexOf(resolver); - if index = -1 - then raise EWrong_Document_Err.create('Wrong document error.'); - FCreatedNSResolvers.Delete(index); - resolver.free; - resolver:= nil; -end; - -procedure TdomDocument.freeTreeWalker(var TreeWalker: TdomTreeWalker); -var - TreeWalkerIndex: integer; -begin - if not assigned(TreeWalker) then exit; - TreeWalkerIndex:= FCreatedTreeWalkers.IndexOf(TreeWalker); - if TreeWalkerIndex = -1 - then raise EWrong_Document_Err.create('Wrong document error.'); - FCreatedTreeWalkers.Delete(TreeWalkerIndex); - TreeWalker.free; - TreeWalker:= nil; -end; - -function TdomDocument.GetElementById(const elementId: wideString): TdomElement; -begin - result:= nil; -end; - -function TdomDocument.GetElementsByTagName(const tagName: wideString): TdomNodeList; -var - i: integer; -begin - for i:= 0 to FCreatedElementsNodeLists.Count - 1 do - if TdomElementsNodeList(FCreatedElementsNodeLists[i]).FQueryName = tagName - then begin Result:= TdomElementsNodeList(FCreatedElementsNodeLists[i]); exit; end; - Result:= TdomElementsNodeList.create(tagName,self); - FCreatedElementsNodeLists.add(Result); -end; - -function TdomDocument.GetElementsByTagNameNS(const anamespaceURI, - alocalName: wideString): TdomNodeList; -var - i: integer; - nl: TdomElementsNodeListNS; -begin - for i:= 0 to FCreatedElementsNodeListNSs.Count - 1 do begin - nl:= TdomElementsNodeListNS(FCreatedElementsNodeListNSs[i]); - if (nl.FQueryNamespaceURI = anamespaceURI) and (nl.FQueryLocalName = alocalName) - then begin Result:= nl; exit; end; - end; - Result:= TdomElementsNodeListNS.create(anamespaceURI,alocalName,self); - FCreatedElementsNodeListNSs.add(Result); -end; - -function TdomDocument.insertBefore(const newChild, - refChild: TdomNode): TdomNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - case newChild.NodeType of - ntElement_Node: begin - if assigned(DocType) then begin - if DocType.NodeName <> newChild.NodeName - then raise EInvalid_Character_Err.create('Invalid character error.'); - if ChildNodes.IndexOf(DocType) >= ChildNodes.IndexOf(refChild) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - end; - if assigned(DocumentElement) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - Result:= inherited insertBefore(newChild,refChild); - end; - ntDocument_Type_Node: begin - if assigned(DocumentElement) then begin - if DocumentElement.NodeName <> newChild.NodeName - then raise EInvalid_Character_Err.create('Invalid character error.'); - if ChildNodes.IndexOf(DocumentElement) < ChildNodes.IndexOf(refChild) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - end; - if assigned(DocType) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - Result:= inherited insertBefore(newChild,refChild); - end; - ntProcessing_Instruction_Node,ntComment_Node,ntDocument_Fragment_Node: - Result:= inherited insertBefore(newChild,refChild); - else - raise EHierarchy_Request_Err.create('Hierarchy request error.'); - end; -end; - -function TdomDocument.replaceChild(const newChild, - oldChild: TdomNode): TdomNode; -begin - if not ( assigned(newChild) and assigned(oldChild) ) - then raise ENot_Supported_Err.create('Not supported error.'); - case newChild.NodeType of - ntElement_Node: begin - if assigned(DocumentElement) and (DocumentElement <> oldChild) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if assigned(DocType) then - if DocType.NodeName <> newChild.NodeName - then raise EInvalid_Character_Err.create('Invalid character error.'); - Result:= inherited replaceChild(newChild,oldChild); - end; - ntDocument_Type_Node: begin - if assigned(DocType) and (DocType <> oldChild) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if assigned(DocumentElement) - then if DocumentElement.NodeName <> newChild.NodeName - then raise EInvalid_Character_Err.create('Invalid character error.'); - Result:= inherited replaceChild(newChild,oldChild); - end; - ntProcessing_Instruction_Node,ntComment_Node, - ntDocument_Fragment_Node: - Result:= inherited replaceChild(newChild,oldChild); - else - raise EHierarchy_Request_Err.create('Hierarchy request error.'); - end; -end; - -function TdomDocument.appendChild(const newChild: TdomNode): TdomNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - case newChild.NodeType of - ntElement_Node: begin - if assigned(DocumentElement) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - Result:= inherited appendChild(newChild); - end; - ntDocument_Type_Node: begin - if assigned(Doctype) or assigned(DocumentElement) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - Result:= inherited appendChild(newChild); - end; - ntProcessing_Instruction_Node,ntComment_Node, - ntDocument_Fragment_Node: - Result:= inherited appendChild(newChild); - else - raise EHierarchy_Request_Err.create('Hierarchy request error.'); - end; -end; - -function TdomDocument.CreateNodeIterator(const root: TdomNode; - whatToShow: TdomWhatToShow; - nodeFilter: TdomNodeFilter; - entityReferenceExpansion: boolean): TdomNodeIterator; -begin - Result:= TdomNodeIterator.create(root,whatToShow,nodeFilter,entityReferenceExpansion); - FCreatedNodeIterators.add(Result); -end; - -function TdomDocument.CreateTreeWalker(const root: TdomNode; - whatToShow: TdomWhatToShow; - nodeFilter: TdomNodeFilter; - entityReferenceExpansion: boolean): TdomTreeWalker; -begin; - Result:= TdomTreeWalker.create(root,whatToShow,nodeFilter,entityReferenceExpansion); - FCreatedTreeWalkers.add(Result); -end; - -function TdomDocument.CreateNSResolver(const nodeResolver: TdomNode): TdomXPathNSResolver; -begin; - Result:= TdomXPathNSResolver.create(nodeResolver); - FCreatedNSResolvers.add(Result); -end; - -function TdomDocument.validate(const opt: TdomEntityResolveOption): boolean; -var - i: integer; - ok: boolean; -begin - result:= true; - - if not assigned(documentElement) - then raise EValidation_Err.create('Validation Error: Root not found.'); - - if assigned(docType) then begin - if assigned(contentModel) - then if not contentModel.validate - then result:= false; - end; - - ok:= resolveEntityReferences(opt); - if not ok then begin - result:= false; - sendErrorNotification(ET_UNRESOLVABLE_ENTITY_REFERENCE,self); - end; - - // VC: Root Element Type (XML 1.0, § 2.8) - if assigned(docType) then begin - if docType.name <> documentElement.NodeName then begin - result:= false; - sendErrorNotification(ET_WRONG_ROOT_ELEMENT_TYPE,self); - end; - end; - - IDs.clear; - for i:= 0 to pred(childnodes.length) do begin - if not childnodes.item(i).validate2 - then result:= false; - end; - if not result then IDs.clear - else begin - // VC: IDREF (XML 1.0, § 3.3.1) - // Second parse only for IDREF and IDREFS: - if not validateIDREFs - then result:= false; - end; -end; - -function TdomDocument.validateIDREFS: boolean; -begin - result:= documentElement.validateIDREFS; -end; - - - -//+++++++++++++++++++++++++ TdomASObjectList +++++++++++++++++++++++++++++ -constructor TdomASObjectList.create; -begin - inherited create; - FNodeList:= TList.create; -end; - -destructor TdomASObjectList.destroy; -begin - FNodeList.free; - inherited; -end; - -procedure TdomASObjectList.clear; -begin - FNodeList.clear; -end; - -function TdomASObjectList.appendASNode(const newNode: TdomASObject): TdomASObject; -begin - FNodeList.Add(newNode); - result:= newNode; -end; - -procedure TdomASObjectList.Delete(const index: integer); -begin - FNodeList.Delete(index); -end; - -function TdomASObjectList.indexOf(const node: TdomASObject): integer; -begin - result:= FNodeList.indexOf(node); -end; - -function TdomASObjectList.getLength: integer; -begin - Result:= FNodeList.count; -end; - -function TdomASObjectList.insertBefore(const newNode, - refNode: TdomASObject): TdomASObject; -begin - Result:= newNode; - with FNodeList do - if assigned(refNode) - then insert(indexOf(refNode),newNode) - else add(newNode); -end; - -function TdomASObjectList.removeASNode(const oldNode: TdomASObject): TdomASObject; -begin - Result:= oldNode; - FNodeList.Remove(oldNode); -end; - -function TdomASObjectList.item(const index: integer): TdomASObject; -begin - if (index < 0) or (index + 1 > FNodeList.count) - then Result:= nil - else Result:= TdomASObject(FNodeList.Items[index]); -end; - - - -//+++++++++++++++++++++++++ TdomASNamedObjectMap +++++++++++++++++++++++++ -constructor TdomASNamedObjectMap.create(const aOwner: TdomASModel; - const namespaceAware: boolean); -begin - inherited create; - FOwnerAsModel:= aOwner; - FNamespaceAware:= namespaceAware; - FNodeList:= TList.create; - FNamespaceAware:= false; -end; - -destructor TdomASNamedObjectMap.destroy; -begin - FNodeList.free; - inherited; -end; - -function TdomASNamedObjectMap.getLength: integer; -begin - Result:= FNodeList.count; -end; - -function TdomASNamedObjectMap.GetNamedItem(const name: wideString): TdomASObject; -var - i: integer; -begin - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - result:= nil; - for i:= 0 to pred(FNodeList.count) do - if (TdomASObject(FNodeList[i]).ASObjectName = name) then begin - Result:= TdomASObject(FNodeList[i]); - break; - end; -end; - -function TdomASNamedObjectMap.GetNamedItemNS(const namespaceURI, - localName: wideString): TdomASObject; -var - i: integer; -begin - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - result:= nil; - for i:= 0 to pred(FNodeList.count) do - if (TdomASObject(FNodeList[i]).namespaceURI = namespaceURI) - and (TdomASObject(FNodeList[i]).localName = localName) then begin - Result:= TdomASObject(FNodeList[i]); - break; - end; -end; - -function TdomASNamedObjectMap.item(const index: integer): TdomASObject; -begin - if (index < 0) or (index + 1 > FNodeList.count) - then Result:= nil - else Result:= TdomASObject(FNodeList.Items[index]); -end; - -function TdomASNamedObjectMap.RemoveNamedItem(const name: wideString): TdomASObject; -begin - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - Result:= getNamedItem(name); - if not assigned(Result) - then raise ENot_Found_Err.create('Not found error.'); - FNodeList.Remove(Result); - Result.FInuse:= false; -end; - -function TdomASNamedObjectMap.RemoveNamedItemNS(const namespaceURI, - localName: wideString): TdomASObject; -begin - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - Result:= getNamedItemNS(namespaceURI,localName); - if not assigned(Result) - then raise ENot_Found_Err.create('Node not found error.'); - FNodeList.Remove(Result); - Result.FInuse:= false; -end; - -function TdomASNamedObjectMap.SetNamedItem(const arg: TdomASObject): TdomASObject; -begin - if FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - if FOwnerAsModel <> arg.OwnerASModel - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if arg.FInuse - then raise EInuse_Node_Err.create('Inuse node error.'); - if assigned(GetNamedItem(arg.ASObjectName)) - then Result:= RemoveNamedItem(arg.ASObjectName) - else Result:= nil; - FNodeList.Add(arg); - Result.FInuse:= true; -end; - -function TdomASNamedObjectMap.SetNamedItemNS(const arg: TdomASObject): TdomASObject; -begin - if not FNamespaceAware then raise ENamespace_Err.create('Namespace error.'); - if FOwnerAsModel <> arg.OwnerASModel - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if arg.FInuse - then raise EInuse_Node_Err.create('Inuse node error.'); - if assigned(GetNamedItemNS(arg.namespaceURI,arg.localName)) - then Result:= RemoveNamedItemNS(arg.namespaceURI,arg.localName) - else Result:= nil; - FNodeList.Add(arg); - Result.FInuse:= true; -end; - - - -//+++++++++++++++++++++++++++ TdomASObject +++++++++++++++++++++++++++++++ -constructor TdomASObject.create(const aOwner: TdomASModel); -begin - inherited create; - FOwnerAsModel:= aOwner; - FInuse:= false; -end; - -procedure TdomASObject.setPrefix(const value: wideString); -begin - if not IsXmlName(value) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not IsXmlPrefix(value) - then raise ENamespace_Err.create('Namespace error.'); - if namespaceURI = '' - then raise ENamespace_Err.create('Namespace error.'); - if (value = 'xml') and (namespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - if FASObjectType = AS_ATTRIBUTE_DECLARATION then begin - if (value = 'xmlns') - and not (namespaceURI ='http://www.w3.org/2000/xmlns/') - then raise ENamespace_Err.create('Namespace error.'); - if FASObjectName = 'xmlns' - then raise ENamespace_Err.create('Namespace error.'); - end; - FPrefix:= value; - FASObjectName:= concat(value,':',localName); -end; - - - -//+++++++++++++++++++++++++++ TdomASContentModel +++++++++++++++++++++++++++ -constructor TdomASContentModel.create(const aOwner: TdomASModel); -begin - inherited create(aOwner); - FASObjectType:= AS_CONTENTMODEL; - FSubModels:= TdomASObjectList.create; - FListOperator:= AS_CHOICE; - FMaxOccurs:= AS_UNBOUND; - FMinOccurs:= 0; -end; - -destructor TdomASContentModel.destroy; -begin - FSubModels.free; - inherited; -end; - -function TdomASContentModel.appendASNode(const newNode: TdomASObject): TdomASObject; -begin - with newNode do begin - if FASObjectType = AS_CONTENTMODEL then begin - if FInuse then raise EInuse_Node_Err.create('Inuse node error.'); - FInuse:= true; - end; - end; - result:= FSubModels.appendASNode(newNode); -end; - -function TdomASContentModel.insertBefore(const newNode, - refNode: TdomASObject): TdomASObject; -begin - with newNode do begin - if FASObjectType = AS_CONTENTMODEL then begin - if FInuse then raise EInuse_Node_Err.create('Inuse node error.'); - FInuse:= true; - end; - end; - result:= FSubModels.insertBefore(newNode,refNode); -end; - -function TdomASContentModel.removeASNode(const oldNode: TdomASObject): TdomASObject; -begin - if FSubModels.indexof(oldNode) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - with oldNode do - if FASObjectType = AS_CONTENTMODEL then FInuse:= false; - result:= FSubModels.removeASNode(oldNode); -end; - - - -//++++++++++++++++++++++ TdomASAttributeDeclaration ++++++++++++++++++++++ -constructor TdomASAttributeDeclaration.create(const aOwner: TdomASModel; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FASObjectName:= name; - FASObjectType:= AS_ATTRIBUTE_DECLARATION; - FAttrType:= AS_STRING_DATATYPE; - FAttrValue:= ''; - FConstraintType:= AS_NO_VALUE_CONSTRAINT; - FEnumAttr:= TdomWideStringList.create; -end; - -constructor TdomASAttributeDeclaration.createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName: wideString); -var - locName,prfx: wideString; -begin - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,locName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if ( ((prfx = 'xmlns') or (qualifiedName = 'xmlns')) - and not (anamespaceURI ='http://www.w3.org/2000/xmlns/') ) - then raise ENamespace_Err.create('Namespace error.'); - if (anamespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - create(aOwner,qualifiedName); - FNamespaceURI:= anamespaceURI; - FPrefix:= prfx; - FLocalName:= locName; -end; - -destructor TdomASAttributeDeclaration.destroy; -begin - FEnumAttr.free; - inherited; -end; - -function TdomASAttributeDeclaration.getIsNamespaceAware: boolean; -begin - result:= FOwnerAsModel.isNamespaceAware; -end; - - - - -//++++++++++++++++++++++++ TdomASEntityDeclaration +++++++++++++++++++++++ -constructor TdomASEntityDeclaration.create(const aOwner: TdomASModel; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FASObjectType:= AS_ENTITY_DECLARATION; - FEntityType:= AS_INTERNAL_ENTITY; - FEntityValue:= ''; - FNotationName:= ''; - FPublicId:= ''; - FSystemId:= ''; -end; - - - -//+++++++++++++++++++++++ TdomASNotationDeclaration ++++++++++++++++++++++ -constructor TdomASNotationDeclaration.create(const aOwner: TdomASModel; - const name, - pubId, - sysId: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FASObjectType:= AS_NOTATION_DECLARATION; - FNotationName:= name; - FPublicId:= pubId; - FSystemId:= sysId; -end; - -constructor TdomASNotationDeclaration.createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName, - pubId, - sysId: wideString); -var - locName,prfx: wideString; -begin - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,locName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if (anamespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - create(aOwner,qualifiedName,pubId,sysId); - FNamespaceURI:= anamespaceURI; - FPrefix:= prfx; - FLocalName:= locName; -end; - - - -//+++++++++++++++++++++++ TdomASElementDeclaration +++++++++++++++++++++++ -constructor TdomASElementDeclaration.create(const aOwner: TdomASModel; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FASObjectType:= AS_ELEMENT_DECLARATION; - FASObjectName:= name; - FAttributeDeclarations:= TdomASNamedObjectMap.create(aOwner,aOwner.FNamespaceAware); - FContentModel:= aOwner.createASContentModel; - FContentModel.FInuse:= true; - FContentType:= AS_MIXED; - FElementType:= AS_STRING_DATATYPE; - FIsPCDataOnly:= false; - FStrictMixedContent:= false; -end; - -constructor TdomASElementDeclaration.createNS(const aOwner: TdomASModel; - const anamespaceURI, - qualifiedName: wideString); -var - locName,prfx: wideString; -begin - if not xmlExtractPrefixAndLocalName(qualifiedName,prfx,locName) then begin - if not IsXmlName(qualifiedName) - then raise EInvalid_Character_Err.create('Invalid character error.') - else raise ENamespace_Err.create('Namespace error.'); - end; - if (anamespaceURI = '') and (prfx <> '') - then raise ENamespace_Err.create('Namespace error.'); - if (prfx = 'xml') and (anamespaceURI <> 'http://www.w3.org/XML/1998/namespace') - then raise ENamespace_Err.create('Namespace error.'); - create(aOwner,qualifiedName); - FNamespaceURI:= anamespaceURI; - FPrefix:= prfx; - FLocalName:= locName; -end; - -destructor TdomASElementDeclaration.destroy; -begin - FAttributeDeclarations.free; - inherited; -end; - -function TdomASElementDeclaration.getIsNamespaceAware: boolean; -begin - result:= FOwnerAsModel.isNamespaceAware; -end; - -function TdomASElementDeclaration.addASAttributeDecl(const arg: TdomASAttributeDeclaration): boolean; -begin - if arg.ownerASModel <> ownerASModel - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if arg.FInuse then raise EInuse_Node_Err.create('Inuse node error.'); - if isNamespaceAware then begin - if assigned(FAttributeDeclarations.getNamedItemNS(arg.namespaceURI,arg.localName)) then begin - result:= false; - end else begin - FAttributeDeclarations.setNamedItemNS(arg); - arg.FInuse:= true; - result:= true; - end; - end else begin - if assigned(FAttributeDeclarations.getNamedItem(arg.ASObjectName)) then begin - result:= false; - end else begin - FAttributeDeclarations.setNamedItem(arg); - arg.FInuse:= true; - result:= true; - end; - end; -end; - -function TdomASElementDeclaration.removeASAttributeDeclaration(const arg: TdomASAttributeDeclaration): TdomASAttributeDeclaration; -begin - if arg.ownerASModel <> ownerASModel - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if isNamespaceAware then begin - if arg = FAttributeDeclarations.getNamedItemNS(arg.namespaceURI,arg.localName) then begin - result:= (FAttributeDeclarations.removeNamedItemNS(arg.namespaceURI,arg.localName) as TdomASAttributeDeclaration); - result.FInuse:= false; - end else result:= nil; - end else begin - if arg = FAttributeDeclarations.getNamedItem(arg.ASObjectName) then begin - result:= (FAttributeDeclarations.removeNamedItem(arg.ASObjectName) as TdomASAttributeDeclaration); - result.FInuse:= false; - end else result:= nil; - end; -end; - - - -//+++++++++++++++++++++++++++++ TdomASModel +++++++++++++++++++++++++++++ -constructor TdomASModel.create(const aOwner: TDomImplementation; - const namespaceAware: boolean); -begin - inherited create(nil); - FDomImpl:= aOwner; - FNamespaceAware:= namespaceAware; - FASObjectType:= AS_MODEL; - FAttributeDeclarations:= TdomASNamedObjectMap.create(self,namespaceAware); - FContentModelDeclarations:= TdomASNamedObjectMap.create(self,namespaceAware); - FElementDeclarations:= TdomASNamedObjectMap.create(self,namespaceAware); - FEntityDeclarations:= TdomASNamedObjectMap.create(self,false); - FNotationDeclarations:= TdomASNamedObjectMap.create(self,false); - FCreatedASNodes:= TdomASObjectList.create; -end; - -destructor TdomASModel.destroy; -begin - clear; - FAttributeDeclarations.free; - FContentModelDeclarations.free; - FElementDeclarations.free; - FEntityDeclarations.free; - FNotationDeclarations.free; - FCreatedASNodes.free; - inherited; -end; - -function TdomASModel.getContainer: boolean; -begin - result:= (usage in [AS_EXTERNAL_SUBSET,AS_NOT_USED]); - // xxx and the container is simply a container of other TdomASModels. -end; - -function TdomASModel.addNamedASElementDeclaration(const arg: TdomASElementDeclaration): boolean; -begin - if arg.OwnerASModel <> self - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if isNamespaceAware then begin - if assigned(FElementDeclarations.getNamedItemNS(arg.namespaceURI,arg.localName)) then begin - result:= false; - end else begin - FElementDeclarations.setNamedItemNS(arg); - result:= true; - end; - end else begin - if assigned(FElementDeclarations.getNamedItem(arg.ASObjectName)) then begin - result:= false; - end else begin - FElementDeclarations.setNamedItem(arg); - result:= true; - end; - end; -end; - -function TdomASModel.addNamedASEntityDeclaration(const arg: TdomASEntityDeclaration): boolean; -begin - if arg.OwnerASModel <> self - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if assigned(FEntityDeclarations.getNamedItem(arg.ASObjectName)) then begin - result:= false; - end else begin - FEntityDeclarations.setNamedItem(arg); - result:= true; - end; -end; - -function TdomASModel.addNamedASNotationDeclaration(const arg: TdomASNotationDeclaration): boolean; -begin - if arg.OwnerASModel <> self - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if isNamespaceAware then begin - if assigned(FNotationDeclarations.getNamedItemNS(arg.namespaceURI,arg.localName)) then begin - result:= false; - end else begin - FNotationDeclarations.setNamedItemNS(arg); - result:= true; - end; - end else begin - if assigned(FNotationDeclarations.getNamedItem(arg.ASObjectName)) then begin - result:= false; - end else begin - FNotationDeclarations.setNamedItem(arg); - result:= true; - end; - end; -end; - -procedure TdomASModel.clear; -var - i: integer; -begin - for i := 0 to pred(FCreatedASNodes.length) do - TdomASObject(FCreatedASNodes.item(i)).free; - FCreatedASNodes.clear; -end; - -function TdomASModel.createASAttributeDeclaration(const anamespaceURI, - qualifiedName: wideString): TdomASAttributeDeclaration; -begin - if isNamespaceAware - then result:= TdomASAttributeDeclaration.createNS(self,anamespaceURI,qualifiedName) - else result:= TdomASAttributeDeclaration.create(self,qualifiedName); - FCreatedASNodes.appendASNode(result); -end; - -function TdomASModel.createASContentModel: TdomASContentModel; -begin - result:= TdomASContentModel.create(self); - FCreatedASNodes.appendASNode(result); -end; - -function TdomASModel.createASElementDeclaration(const anamespaceURI, - qualifiedName: wideString): TdomASElementDeclaration; -begin - if isNamespaceAware - then result:= TdomASElementDeclaration.createNS(self,anamespaceURI,qualifiedName) - else result:= TdomASElementDeclaration.create(self,qualifiedName); - FCreatedASNodes.appendASNode(result); -end; - -function TdomASModel.createASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; -begin - result:= TdomASEntityDeclaration.create(self,name); - FCreatedASNodes.appendASNode(result); -end; - -function TdomASModel.createASNotationDeclaration(const name, - pubId, - sysId: wideString): TdomASNotationDeclaration; -begin - result:= TdomASNotationDeclaration.create(self,name,pubId,sysId); - FCreatedASNodes.appendASNode(result); -end; - -procedure TdomASModel.freeAllASObjects(var obj: TdomASObject); -var - index: integer; - oldASAttrDecl,oldASChildren: TdomASObject; - subModelASObject: TdomASObject; -begin - if not assigned(obj) then exit; - if obj.OwnerASModel <> self - then raise EWrong_ASModel_Err.create('Wrong abstract schema model error.'); - if obj.FInuse - then raise EInuse_Node_Err.create('Inuse obj error.'); - - case obj.ASObjectType of - AS_ELEMENT_DECLARATION: begin - with (obj as TdomASElementDeclaration) do begin - with attributeDecls do begin - for index:= 0 to pred(length) do begin - oldASAttrDecl:= item(index); - oldASAttrDecl.FInuse:= false; - FreeAllASObjects(oldASAttrDecl); - end; {for ...} - end; {with ...} - oldASChildren:= contentModel; - oldASChildren.FInuse:= false; - FreeAllASObjects(oldASChildren); - end; {with ...} - end; - AS_CONTENTMODEL: begin - with (obj as TdomASContentModel).SubModels do begin - for index:= 0 to pred(length) do begin - subModelASObject:= item(index); - if subModelASObject.ASObjectType = AS_CONTENTMODEL then begin - subModelASObject.FInuse:= false; - FreeAllASObjects(subModelASObject); - end; - end; {for ...} - end {with ...} - end; - end; {case ...} - - index:= FCreatedASNodes.IndexOf(obj); - obj.free; - FCreatedASNodes.Delete(index); - obj:= nil; -end; - -function TdomASModel.getNamedASElementDeclaration(const anamespaceURI, - name: wideString): TdomASElementDeclaration; -begin - if isNamespaceAware - then result:= (FElementDeclarations.getNamedItemNS(anamespaceURI,name) as TdomASElementDeclaration) - else result:= (FElementDeclarations.getNamedItem(name) as TdomASElementDeclaration); -end; - -function TdomASModel.getNamedASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; -begin - result:= (FEntityDeclarations.getNamedItem(name) as TdomASEntityDeclaration); -end; - -function TdomASModel.getNamedASNotationDeclaration(const anamespaceURI, - name: wideString): TdomASNotationDeclaration; -begin - if isNamespaceAware - then result:= (FNotationDeclarations.getNamedItemNS(anamespaceURI,name) as TdomASNotationDeclaration) - else result:= (FNotationDeclarations.getNamedItem(name) as TdomASNotationDeclaration); -end; - -function TdomASModel.removeNamedASElementDeclaration(const anamespaceURI, - name: wideString): TdomASElementDeclaration; -begin - if isNamespaceAware - then result:= (FElementDeclarations.removeNamedItemNS(anamespaceURI,name) as TdomASElementDeclaration) - else result:= (FElementDeclarations.removeNamedItem(name) as TdomASElementDeclaration); -end; - -function TdomASModel.removeNamedASEntityDeclaration(const name: wideString): TdomASEntityDeclaration; -begin - result:= (FEntityDeclarations.removeNamedItem(name) as TdomASEntityDeclaration); -end; - -function TdomASModel.removeNamedASNotationDeclaration(const anamespaceURI, - name: wideString): TdomASNotationDeclaration; -begin - if isNamespaceAware - then result:= (FNotationDeclarations.removeNamedItemNS(anamespaceURI,name) as TdomASNotationDeclaration) - else result:= (FNotationDeclarations.removeNamedItem(name) as TdomASNotationDeclaration); -end; - - - -//+++++++++++++++++++++++++ TdomCMNodeList +++++++++++++++++++++++++++++ -constructor TdomCMNodeList.create(const CMNodeList: TList); -begin - inherited create; - FCMNodeList:= CMNodeList; -end; - -function TdomCMNodeList.GetLength: integer; -begin - Result:= FCMNodeList.count; -end; - -function TdomCMNodeList.IndexOf(const node: TdomCMNode): integer; -begin - Result:= FCMNodeList.IndexOf(node); -end; - -function TdomCMNodeList.Item(const index: integer): TdomCMNode; -begin - if (index < 0) or (index + 1 > FCMNodeList.count) - then Result:= nil - else Result:= TdomCMNode(FCMNodeList.Items[index]); -end; - - -//+++++++++++++++++++++++ TdomNamedCMNodeMap +++++++++++++++++++++++++++ -constructor TdomNamedCMNodeMap.create(const aOwner, - aOwnerNode: TdomCMNode; - const nodeList: TList; - const allowedNTs: TDomCMNodeTypeSet); -begin - inherited create(nodeList); - FOwner:= aOwner; - FOwnerNode:= aOwnerNode; - FAllowedNodeTypes:= allowedNTs; - FIsReadonly:= false; -end; - -function TdomNamedCMNodeMap.getOwnerNode: TdomCMNode; -begin - Result:= FOwnerNode; -end; - -function TdomNamedCMNodeMap.RemoveItem(const arg: TdomCMNode): TdomCMNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FCMNodeList.IndexOf(arg) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= arg; - FCMNodeList.Remove(arg); - Result.FParentNode:= nil; -end; - -procedure TdomNamedCMNodeMap.setIsReadonly(const value: boolean); -begin - FIsReadonly:= value; -end; - -function TdomNamedCMNodeMap.GetNamedIndex(const name: wideString): integer; -var - i: integer; -begin - result:= -1; - for i:= 0 to FCMNodeList.count-1 do - if (TdomCMNode(FCMNodeList[i]).NodeName = name) - and (TdomCMNode(FCMNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= i; - break; - end; -end; - -function TdomNamedCMNodeMap.GetNamedItem(const name: wideString): TdomCMNode; -var - i: integer; -begin - result:= nil; - for i:= 0 to FCMNodeList.count-1 do - if (TdomCMNode(FCMNodeList[i]).NodeName = name) - and (TdomCMNode(FCMNodeList[i]).NodeType in FAllowedNodeTypes) then begin - Result:= TdomCMNode(FCMNodeList[i]); - break; - end; -end; - -function TdomNamedCMNodeMap.SetNamedItem(const arg: TdomCMNode): TdomCMNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FOwner.OwnerCMObject <> arg.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - if not (arg.NodeType in FAllowedNodeTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if assigned(arg.parentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if assigned(GetNamedItem(arg.NodeName)) - then Result:= RemoveNamedItem(arg.NodeName) - else Result:= nil; - FCMNodeList.Add(arg); - arg.FParentNode:= nil; -end; - -function TdomNamedCMNodeMap.RemoveNamedItem(const name: wideString): TdomCMNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= getNamedItem(name); - if not assigned(Result) - then raise ENot_Found_Err.create('Node not found error.'); - FCMNodeList.Remove(Result); -end; - - - -// ++++++++++++++++++++++ TdomNamedCMAttributeMap ++++++++++++++++++++++ -constructor TdomNamedCMAttributeMap.create(const aOwner: TdomCMObject); -begin - inherited create; - FOwner:= aOwner; - FCMAttributesList:= TList.create; -end; - -destructor TdomNamedCMAttributeMap.destroy; -begin - FCMAttributesList.free; - inherited destroy; -end; - -function TdomNamedCMAttributeMap.GetLength: integer; -begin - result:= FCMAttributesList.count; -end; - -function TdomNamedCMAttributeMap.item(const index: integer): TdomCMAttribute; -begin - if (index < 0) or (index + 1 > FCMAttributesList.count) - then Result:= nil - else Result:= TdomCMAttribute(FCMAttributesList.Items[index]); -end; - -function TdomNamedCMAttributeMap.GetNamedItem(const elementName, - attributeName: wideString): TdomCMAttribute; -var - i: integer; - cmAttr: TdomCMAttribute; -begin - result:= nil; - for i:= 0 to FCMAttributesList.count-1 do begin - cmAttr:= TdomCMAttribute(FCMAttributesList[i]); - if (cmAttr.elementName = elementName) and (cmAttr.attributeName = attributeName) - then begin Result:= cmAttr; break; end; - end; -end; - -function TdomNamedCMAttributeMap.appendNamedItem(const arg: TdomCMAttribute): boolean; -begin - if FOwner.OwnerCMObject <> arg.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - if assigned(arg.parentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if assigned(GetNamedItem(arg.elementName,arg.attributeName)) then begin - result:= false; - end else begin - result:= true; - FCMAttributesList.Add(arg); - arg.FParentNode:= FOwner; - arg.FCMObject:= FOwner; - end; {if ...} -end; - -function TdomNamedCMAttributeMap.removeLastItem: TdomCMAttribute; -begin - with FCMAttributesList do begin - result:= TdomCMAttribute(Last); - if not assigned(result) - then raise ENot_Found_Err.create('Node not found error.'); - remove(Last); - end; - Result.FCMObject:= nil; - Result.FParentNode:= nil; -end; - - - -// +++++++++++++++++++++++ TdomNamedCMEntityMap +++++++++++++++++++++++ -constructor TdomNamedCMEntityMap.create(const aOwner: TdomCMObject); -begin - inherited create; - FOwner:= aOwner; - FCMEntitiesList:= TList.create; -end; - -destructor TdomNamedCMEntityMap.destroy; -begin - FCMEntitiesList.free; - inherited destroy; -end; - -function TdomNamedCMEntityMap.GetLength: integer; -begin - result:= FCMEntitiesList.count; -end; - -function TdomNamedCMEntityMap.item(const index: integer): TdomCMEntity; -begin - if (index < 0) or (index + 1 > FCMEntitiesList.count) - then Result:= nil - else Result:= TdomCMEntity(FCMEntitiesList.Items[index]); -end; - -function TdomNamedCMEntityMap.GetNamedItem(const name: wideString): TdomCMEntity; -var - i: integer; -begin - result:= nil; - for i:= 0 to FCMEntitiesList.count-1 do - if (TdomCMEntity(FCMEntitiesList[i]).NodeName = name) then begin - Result:= TdomCMEntity(FCMEntitiesList[i]); - break; - end; -end; - -function TdomNamedCMEntityMap.appendNamedItem(const arg: TdomCMEntity): boolean; -begin - if FOwner.OwnerCMObject <> arg.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - if assigned(arg.parentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - if assigned(GetNamedItem(arg.NodeName)) then begin - result:= false; - end else begin - // Append 'arg': - result:= true; - FCMEntitiesList.Add(arg); - arg.FParentNode:= FOwner; - end; {if ...} -end; - -function TdomNamedCMEntityMap.removeLastItem: TdomCMEntity; -begin - with FCMEntitiesList do begin - result:= TdomCMEntity(Last); - if not assigned(result) - then raise ENot_Found_Err.create('Node not found error.'); - remove(Last); - end; - Result.FParentNode:= nil; -end; - - - -//+++++++++++++++++++++++++++ TdomCMNode +++++++++++++++++++++++++++++++ -constructor TdomCMNode.create(const aOwner: TdomCustomCMObject); -begin - inherited create; - FCMObject:= aOwner; - FParentNode:= nil; - FCMNodeListing:= TList.create; - FCMNodeList:= TdomCMNodeList.create(FCMNodeListing); - FNodeName:= ''; - FNodeValue:= ''; - FNodeType:= ctUnknown; - FAllowedChildTypes:= []; - FIsReadonly:= false; -end; - -destructor TdomCMNode.destroy; -begin - FCMNodeListing.free; - FCMNodeList.free; - inherited destroy; -end; - -procedure TdomCMNode.clear; -var - oldCMChild: TdomCMNode; -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - while hasChildNodes do begin - firstChild.setIsReadonly(false); - oldCMChild:= removeChild(firstChild); - OwnerCMObject.FreeAllCMNodes(oldCMChild); - end; -end; - -procedure TdomCMNode.makeChildrenReadonly; -var - i: integer; -begin - with childnodes do - for i:= 0 to pred(length) do - with item(i) do begin - item(i).setIsReadonly(true); - item(i).makeChildrenReadonly; - end; -end; - -function TdomCMNode.GetNodeName: wideString; -begin - Result:= FNodeName; -end; - -function TdomCMNode.GetNodeValue: wideString; -begin - Result:= FNodeValue; -end; - -procedure TdomCMNode.SetNodeValue(const value: wideString); -begin - if isReadonly = true - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - FNodeValue:= value; -end; - -function TdomCMNode.GetCMNodeType: TdomCMNodeType; -begin - Result:= FNodeType; -end; - -function TdomCMNode.GetParentNode: TdomCMNode; -begin - Result:= FParentNode; -end; - -function TdomCMNode.GetCMObject: TdomCustomCMObject; -begin - Result:= FCMObject; -end; - -function TdomCMNode.validate: boolean; -begin - raise ENot_Supported_Err.create('Not supported error.'); -end; - -function TdomCMNode.sendErrorNotification(const xmlErrorType: TXmlErrorType; - const relCMNode: TdomCMNode): boolean; -// Used to centralize code for sending error notifications to the DomImplementation. -// Usually used during validation. -var - domImpl: TDomImplementation; - error: TdomError; -begin - if assigned(ownerCMObject) - then domImpl:= ownerCMObject.domImplementation - else domImpl:= nil; - - error:= TdomError.create(xmlErrorType,-1,-1,-1,-1,-1,'',relCMNode,nil,''); - try - if assigned(domImpl) then begin - result:= domImpl.handleError(domImpl,error); - end else if error.severity = DOM_SEVERITY_FATAL_ERROR - then result:= false - else result:= true; - finally - error.free; - end; -end; - -function TdomCMNode.getChildNodes: TdomCMNodeList; -begin - Result:= FCMNodeList; -end; - -function TdomCMNode.getFirstChild: TdomCMNode; -begin - if FCMNodeListing.count = 0 - then Result:= nil - else Result:= TdomCMNode(FCMNodeListing.First); -end; - -function TdomCMNode.getLastChild: TdomCMNode; -begin - if FCMNodeListing.count = 0 - then Result:= nil - else Result:= TdomCMNode(FCMNodeListing.Last); -end; - -function TdomCMNode.getNextSibling: TdomCMNode; -begin - if assigned(ParentNode) - then Result:= ParentNode.ChildNodes.Item(ParentNode.ChildNodes.IndexOf(Self)+1) - else Result:= nil; -end; - -function TdomCMNode.getPreviousSibling: TdomCMNode; -begin - if assigned(ParentNode) - then Result:= ParentNode.ChildNodes.Item(ParentNode.ChildNodes.IndexOf(Self)-1) - else Result:= nil; -end; - -procedure TdomCMNode.setIsReadonly(const value: boolean); -begin - FIsReadonly:= value; -end; - -function TdomCMNode.insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerCMObject <> newChild.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - if isAncestor(newChild) or (newChild = self) or (newChild = refChild ) // Test for circularity - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(refChild) then - if FCMNodeListing.IndexOf(refChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= newChild; - if NewChild is TdomCMFragment - then while NewChild.HasChildNodes do - insertBefore(newChild.ChildNodes.Item(0),refChild) - else begin - if assigned(newChild.parentNode) then newChild.parentNode.RemoveChild(newChild); - if assigned(refChild) - then FCMNodeListing.Insert(FCMNodeListing.IndexOf(refChild),newChild) - else FCMNodeListing.Add(newChild); - NewChild.FParentNode:= self; - end; -end; - -function TdomCMNode.replaceChild(const newChild, - oldChild: TdomCMNode): TdomCMNode; -var - refChild: TdomCMNode; -begin - if not ( assigned(newChild) and assigned(oldChild) ) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerCMObject <> newChild.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - if IsAncestor(newChild) or (newChild = self) // Test for circularity - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FCMNodeListing.IndexOf(oldChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= oldChild; - if newChild = oldChild then exit; - if assigned(newChild.parentNode) then newChild.parentNode.RemoveChild(newChild); - refChild:= oldChild.NextSibling; - RemoveChild(oldChild); - if assigned(refChild) - then insertBefore(newChild,refChild) - else appendChild(newChild); -end; - -function TdomCMNode.removeChild(const oldChild: TdomCMNode): TdomcmNode; -begin - if not assigned(oldChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if FCMNodeListing.IndexOf(oldChild) = -1 - then raise ENot_Found_Err.create('Node not found error.'); - Result:= oldChild; - FCMNodeListing.Remove(oldChild); - OldChild.FParentNode:= nil; -end; - -function TdomCMNode.appendChild(const newChild: TdomCMNode): TdomCMNode; -begin - if not assigned(newChild) - then raise ENot_Supported_Err.create('Not supported error.'); - if not (newChild.NodeType in FAllowedChildTypes) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if OwnerCMObject <> newChild.OwnerCMObject - then raise EWrong_Document_Err.create('Wrong document error.'); - // Test for circularity: - if IsAncestor(newChild) or (newChild = self) - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(newChild.ParentNode) - then if newChild.ParentNode.isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= newChild; - if NewChild is TdomCMFragment then - while NewChild.HasChildNodes do - appendChild(newChild.ChildNodes.Item(0)) - else begin - if assigned(newChild.parentNode) then newChild.parentNode.RemoveChild(newChild); - FCMNodeListing.Add(newChild); - NewChild.FParentNode:= self; - end; -end; - -function TdomCMNode.HasChildNodes: boolean; -begin - if FCMNodeListing.count = 0 - then result:= false - else result:= true; -end; - -function TdomCMNode.CloneNode(const deep: boolean): TdomCmNode; -var - newChildNode: TdomCMNode; - i: integer; -begin - Result:= OwnerCMObject.DuplicateCMNode(self); - if deep then for i:= 0 to ChildNodes.Length-1 do - begin - newChildNode:= ChildNodes.Item(i).CloneNode(true); - Result.appendChild(newChildNode); - end; -end; - -function TdomCMNode.IsAncestor(const AncestorNode: TdomCMNode): boolean; -var - NewAncestor: TdomCMNode; - List1: TList; -begin - Result:= false; - NewAncestor:= ParentNode; - List1:= TList.create; - List1.clear; - try - while assigned(NewAncestor) do begin - {Ciculation test:} - if List1.IndexOf(NewAncestor) > -1 - then raise EHierarchy_Request_Err.create('Hierarchy request error.'); - List1.Add(NewAncestor); - if NewAncestor = AncestorNode then begin Result:= true; break; end; - NewAncestor:= NewAncestor.ParentNode; - end; - finally - List1.free; - end; -end; - - - -// +++++++++++++++++++++++++++ TdomCMComment +++++++++++++++++++++++++++ -constructor TdomCMComment.create(const aOwner: TdomCustomCMObject); -begin - inherited create(aOwner); - FNodeName:= '#comment'; - FNodeValue:= ''; - FNodeType:= ctComment; - FAllowedChildTypes:= []; -end; - -function TdomCMComment.GetData: wideString; -begin - Result:= NodeValue; -end; - -procedure TdomCMComment.SetData(const value: wideString); -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - NodeValue:= value; -end; - -function TdomCMComment.GetLength: integer; -begin - Result:= System.Length(Data); -end; - -function TdomCMComment.SubstringData(const offset, - count: integer):wideString; -var - len: integer; -begin - if(offset < 0) or (offset > Length) or (count < 0) - then raise EIndex_Size_Err.create('Index size error.'); - // Make sure, that the length of the wideString is not - // exeeded, when using count and offset: - len:= Length-Offset; - if count < len then len:= count; - setString(Result,PWideChar(Data)+Offset,len); -end; - -procedure TdomCMComment.AppendData(const arg: wideString); -begin - Data:= concat(Data,arg); -end; - -procedure TdomCMComment.InsertData(const offset: integer; - const arg: wideString); -begin - ReplaceData(offset,0,arg); -end; - -procedure TdomCMComment.DeleteData(const offset, - count: integer); -begin - ReplaceData(offset,count,''); -end; - -procedure TdomCMComment.replaceData(const offset, - count: integer; - const arg: wideString); -var - len: integer; - Data1,Data2:wideString; -begin - if(offset < 0) or (offset > Length) or (count < 0) - then raise EIndex_Size_Err.create('Index size error.'); - // Make sure, that the length of the wideString is not - // exeeded, when using count and offset: - len:= Length-Offset; - if count < len then len:= count; - Data1:= SubstringData(0,offset); - Data2:= SubstringData(offset+len,Length-offset-len); - Data:= concat(Data1,arg,Data2); -end; - -function TdomCMComment.validate: boolean; -begin - result:= true; -end; - - -//++++++++++++++++++ TdomCMProcessingInstruction +++++++++++++++++++++++ -constructor TdomCMProcessingInstruction.create(const aOwner: TdomCustomCMObject; - const targ: wideString); -begin - if not IsXmlPITarget(targ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= targ; - FNodeValue:= ''; - FNodeType:= ctProcessingInstruction; - FAllowedChildTypes:= []; -end; - -function TdomCMProcessingInstruction.GetTarget: wideString; -begin - Result:= FNodeName; -end; - -function TdomCMProcessingInstruction.GetData: wideString; -begin - Result:= FNodeValue; -end; - -procedure TdomCMProcessingInstruction.SetData(const value: wideString); -begin - if isReadonly - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - FNodeValue:= value; -end; - -function TdomCMProcessingInstruction.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++++++++++ TdomCustomCMObject ++++++++++++++++++++++++ -constructor TdomCustomCMObject.create(const aOwner: TdomImplementation; - const sysId: wideString); -begin - inherited create(self); - FDomImpl:= aOwner; - FNodeValue:= ''; - FCreatedNodes:= TList.create; - FSystemId:= sysId; - FAllowedChildTypes:= []; -end; - -destructor TdomCustomCMObject.destroy; -var - i: integer; -begin - for i := 0 to pred(FCreatedNodes.Count) do - TdomCMNode(FCreatedNodes[i]).free; - FCreatedNodes.free; - inherited destroy; -end; - -procedure TdomCustomCMObject.SetNodeValue(const value: wideString); -begin -end; - -function TdomCustomCMObject.CreateCMAttributeDefinition(const name, - attType, - defaultDecl, - attValue: wideString) : TdomCMAttrDefinition; -begin - Result:= TdomCMAttrDefinition.create(self,name,attType,defaultDecl,attValue); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMAttributeList(const name: wideString): TdomCMAttrList; -begin - Result:= TdomCMAttrList.create(self,name); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMChoiceParticle(const freq: wideString): TdomCMChoiceParticle; -begin - Result:= TdomCMChoiceParticle.create(self,freq); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMComment(const Data: wideString): TdomCMComment; -begin - Result:= TdomCMComment.create(self); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMElementParticle(const name, - freq: wideString): TdomCMElementParticle; -begin - Result:= TdomCMElementParticle.create(self,name,freq); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMElementTypeDeclaration(const name: wideString; - const contspecType: TdomContentspecType): TdomCMElementTypeDeclaration; -begin - Result:= TdomCMElementTypeDeclaration.create(self,name,contspecType); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.createCMExtEntityDeclaration(const name, - pubId, - sysId: wideString): TdomCMEntityDeclaration; -begin - Result:= TdomCMEntityDeclaration.createExtParsed(self,name,pubId,sysId); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.createCMExtParameterEntityDeclaration(const name, - pubId, - sysId: wideString): TdomCMParameterEntityDeclaration; -begin - Result:= TdomCMParameterEntityDeclaration.createExtParsed(self,name,pubId,sysId); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.createCMExtUnparsedEntityDeclaration(const name, - pubId, - sysId, - notaName: wideString): TdomCMEntityDeclaration; -begin - Result:= TdomCMEntityDeclaration.createExtUnparsed(self,name,pubId,sysId,notaName); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMFragment: TdomCMFragment; -begin - Result:= TdomCMFragment.create(self); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.createCMIntEntityDeclaration(const name, - entityValue: wideString): TdomCMEntityDeclaration; -begin - Result:= TdomCMEntityDeclaration.create(self,name,entityValue); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.createCMIntParameterEntityDeclaration(const name, - entityValue: wideString): TdomCMParameterEntityDeclaration; -begin - Result:= TdomCMParameterEntityDeclaration.create(self,name,entityValue); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMNameParticle(const name: wideString): TdomCMNameParticle; -begin - Result:= TdomCMNameParticle.create(self,name); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMNmtokenParticle(const name: wideString): TdomCMNmtokenParticle; -begin - Result:= TdomCMNmtokenParticle.create(self,name); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMNotationDeclaration(const name, - pubId, - sysId: wideString): TdomCMNotationDeclaration; -begin - Result:= TdomCMNotationDeclaration.create(self,name,pubId,sysId); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMParameterEntityReference(const name: wideString): TdomCMParameterEntityReference; -begin - Result:= TdomCMParameterEntityReference.create(self,name); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMPcdataChoiceParticle: TdomCMPcdataChoiceParticle; -begin - Result:= TdomCMPcdataChoiceParticle.create(self,'*'); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMProcessingInstruction(const targ, - Data : wideString): TdomCMProcessingInstruction; -begin - Result:= TdomCMProcessingInstruction.create(self,targ); - Result.Data:= Data; - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.CreateCMSequenceParticle(const freq: wideString): TdomCMSequenceParticle; -begin - Result:= TdomCMSequenceParticle.create(self,freq); - FCreatedNodes.add(Result); -end; - -function TdomCustomCMObject.DuplicateCMNode(const node: TdomCMNode): TdomCMNode; -// Creates a new CMNode of the same type and properties than 'Node', -// except that the new CMNode has no parent and no child nodes. -var - i: integer; - newChild: TdomCMNode; -begin - case node.NodeType of - ctUnknown: - raise ENot_Supported_Err.create('Not supported error.'); - ctParameterEntityReference: - begin - Result:= CreateCMParameterEntityReference((node as TdomCMParameterEntityReference).NodeName); - Result.FNodeValue:= FNodeValue; - end; - ctEntityDeclaration: - if (node as TdomCMEntityDeclaration).isParsedEntity then begin - if (node as TdomCMEntityDeclaration).entityType = etExternal_Entity then begin - Result:= CreateCMExtEntityDeclaration((node as TdomCMEntityDeclaration).NodeName, - (node as TdomCMEntityDeclaration).publicId, - (node as TdomCMEntityDeclaration).systemId); - end else begin - Result:= CreateCMIntEntityDeclaration((node as TdomCMEntityDeclaration).NodeName, - (node as TdomCMEntityDeclaration).NodeValue); - end; - end else begin - Result:= createCMExtUnparsedEntityDeclaration((node as TdomCMEntityDeclaration).NodeName, - (node as TdomCMEntityDeclaration).publicId, - (node as TdomCMEntityDeclaration).systemId, - (node as TdomCMEntityDeclaration).notationName); - end; - ctParameterEntityDeclaration: - if (node as TdomCMParameterEntityDeclaration).entityType = etExternal_Entity then begin - Result:= CreateCMExtParameterEntityDeclaration((node as TdomCMParameterEntityDeclaration).NodeName, - (node as TdomCMParameterEntityDeclaration).publicId, - (node as TdomCMParameterEntityDeclaration).systemId); - end else begin - Result:= CreateCMIntParameterEntityDeclaration((node as TdomCMParameterEntityDeclaration).NodeName, - (node as TdomCMParameterEntityDeclaration).NodeValue); - end; - ctProcessingInstruction: - Result:= CreateCMProcessingInstruction((node as TdomCMProcessingInstruction).Target, - (node as TdomCMProcessingInstruction).Data); - ctComment: - Result:= CreateCMComment((node as TdomCMComment).Data); - ctObject: - Result:= TdomCMObject.create((node as TdomCMObject).FDomImpl, - (node as TdomCMObject).systemId); - ctExternalObject: - Result:= TdomCMExternalObject.create((node as TdomCMExternalObject).FDomImpl, - (node as TdomCMExternalObject).FPublicId, - (node as TdomCMExternalObject).FSystemId); - ctInternalObject: - Result:= TdomCMInternalObject.create((node as TdomCMInternalObject).FDomImpl, - (node as TdomCMInternalObject).FPublicId, - (node as TdomCMInternalObject).FSystemId); - ctFragment: - Result:= CreateCMFragment; - ctNotationDeclaration: - Result:= CreateCMNotationDeclaration((node as TdomCMNotationDeclaration).NodeName, - (node as TdomCMNotationDeclaration).publicId, - (node as TdomCMNotationDeclaration).systemId); - ctElementTypeDeclaration: - Result:= CreateCMElementTypeDeclaration((node as TdomCMElementTypeDeclaration).NodeName, - (node as TdomCMElementTypeDeclaration).contentspecType); - ctSequenceParticle: - Result:= CreateCMSequenceParticle((node as TdomCMSequenceParticle).Frequency); - ctPcdataChoiceParticle: - Result:= CreateCMPcdataChoiceParticle; - ctChoiceParticle: - Result:= CreateCMChoiceParticle((node as TdomCMChoiceParticle).Frequency); - ctElementParticle: - Result:= CreateCMElementParticle((node as TdomCMElementParticle).NodeName, - (node as TdomCMElementParticle).Frequency); - ctAttributeList: begin - Result:= CreateCMAttributeList((node as TdomCMAttrList).NodeName); - {duplicate attribute definitions:} - for i:= 0 to pred(node.ChildNodes.Length) do begin - NewChild:= DuplicateCMNode(node.ChildNodes.Item(i)); - Result.appendChild(NewChild); - end; - end; - ctAttributeDefinition: begin - Result:= CreateCMAttributeDefinition((node as TdomCMAttrDefinition).NodeName, - (node as TdomCMAttrDefinition).AttributeType, - (node as TdomCMAttrDefinition).DefaultDeclaration, - (node as TdomCMAttrDefinition).NodeValue); - {duplicate the children of the attribute definition node:} - for i:= 0 to node.ChildNodes.Length-1 do begin - newChild:= DuplicateCMNode(node.ChildNodes.Item(i)); - Result.appendChild(newChild); - end; - end; - ctNameParticle: - Result:= CreateCMNameParticle((node as TdomCMNameParticle).NodeName); - ctNmtokenParticle: - Result:= CreateCMNmtokenParticle((node as TdomCMNmtokenParticle).NodeName); - else - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -procedure TdomCustomCMObject.FreeAllCMNodes(var CMNode: TdomCMNode); -var - index: integer; - oldChild: TdomCMNode; -begin - if not assigned(CMNode) then exit; - if CMNode.OwnerCMObject <> Self - then raise EWrong_Document_Err.create('Wrong document error.'); - if CMNode = Self - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - if assigned(CMNode.ParentNode) - then raise EInuse_Node_Err.create('Inuse node error.'); - while CMnode.HasChildNodes do begin - CMnode.FirstChild.setIsReadonly(false); - oldChild:= CMnode.RemoveChild(CMnode.FirstChild); - CMnode.OwnerCMObject.FreeAllCMNodes(oldChild); - end; - index:= FCreatedNodes.IndexOf(CMNode); - CMNode.free; - FCreatedNodes.Delete(index); - CMNode:= nil; -end; - -procedure TdomCustomCMObject.getValueOfPE(const name: wideString; - var value: wideString; - var error: TXmlErrorType); -var - InputSrc: TXmlInputSource; - stream: TStream; - PId,SId: wideString; - action: TXmlParserAction; - i: integer; -begin - value:= ''; - error:= ET_PARAMETER_ENTITY_DECL_NOT_FOUND; - for i:= 0 to pred(FCreatedNodes.Count) do begin - if TdomCMNode(FCreatedNodes[i]).nodeType = ctParameterEntityDeclaration then begin - with TdomCMParameterEntityDeclaration(FCreatedNodes[i]) do begin - if nodeName = name then begin - if entityType = etInternal_Entity then begin - - value:= nodeValue; - error:= ET_NONE; - exit; - - end else begin - - // Resolve value of external parsed entity: - if not ( (publicId = '') and (systemId = '')) then begin - stream:= nil; - PId:= publicId; - SId:= systemId; - action:= paFail; - try - if assigned(domImplementation) - then domImplementation.doExternalParsedEntity(self.systemId,PId,SId,stream,action); - if action = paFail then begin - error:= ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE; - exit; - end else begin - - // convert external entity value to UTF-16BE: - if assigned(stream) then begin - InputSrc:= TXmlInputSource.create(stream,PId,SId,1); - try - if InputSrc.hasMalformedDecl - or not ( InputSrc.declType in [ DT_TEXT_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED] ) - then begin - value:= ''; - error:= ET_INVALID_TEXT_DECL; - end else begin - value:= InputSrc.streamAsWideString; - error:= ET_NONE; - end; {if ... else ...} - exit; - finally - InputSrc.free; - end; {try} - end; - - error:= ET_NONE; - exit; - - end; {if ... else ...} - finally - if assigned(stream) then stream.free; - end; - end; - - end; - end; - end; - end; - end; -end; - -function TdomCustomCMObject.hasPEDeclaration(const name: wideString): boolean; -var - i: integer; -begin - result:= false; - for i:= 0 to pred(FCreatedNodes.Count) do - with TdomCMNode(FCreatedNodes[i]) do - if nodeType = ctParameterEntityDeclaration then - if nodeName = name then begin - result:= true; - exit; - end; -end; - - - -// ++++++++++++++++++++++++++++ TdomCMObject +++++++++++++++++++++++++++ -constructor TdomCMObject.create(const aOwner: TdomImplementation; - const sysId: wideString); -begin - inherited; - FNodeName:= '#cm-object'; - FNodeType:= ctObject; - FAllowedChildTypes:= []; - FAssociatedDocument:= nil; - FCMExternal:= nil; - FCMInternal:= nil; - FNotationsListing:= TList.create; - FNotationsList:= TdomNamedCMNodeMap.create(self,self,FNotationsListing,[ctNotation]); - FElementTypesListing:= TList.create; - FElementTypesList:= TdomNamedCMNodeMap.create(self,self,FElementTypesListing,[ctElementTypeDeclaration]); - FAttributesList:= TdomNamedCMAttributeMap.create(self); - FEntitiesList:= TdomNamedCMEntityMap.create(self); - setPredefinedEntities; -end; - -destructor TdomCMObject.destroy; -begin - FAttributesList.free; - FEntitiesList.free; - FNotationsListing.free; - FNotationsList.free; - FElementTypesListing.free; - FElementTypesList.free; - inherited destroy; -end; - -procedure TdomCMObject.clear; -begin - clearAttributes; - clearElementtypes; - clearEntities; - clearNotations; - inherited clear; -end; - -procedure TdomCMObject.clearAttributes; -var - removedAttribute: TdomCMAttribute; -begin - while attributes.length > 0 do begin - removedAttribute:= attributes.removeLastItem; - FCreatedNodes.remove(removedAttribute); - removedAttribute.free; - end; -end; - -procedure TdomCMObject.clearElementTypes; -var - i: integer; -begin - for i:= pred(FElementTypesListing.count) downto 0 do - FCreatedNodes.remove(FElementTypesListing[i]); - FElementTypesListing.clear; -end; - -procedure TdomCMObject.clearEntities; -var - removedEntity: TdomCMEntity; -begin - while Entities.length > 0 do begin - removedEntity:= Entities.removeLastItem; - FCreatedNodes.remove(removedEntity); - removedEntity.free; - end; -end; - -procedure TdomCMObject.clearNotations; -var - i: integer; -begin - for i:= pred(FNotationsListing.count) downto 0 do - FCreatedNodes.remove(FNotationsListing[i]); - FNotationsListing.clear; -end; - -function TdomCMObject.duplicateCMNode(const node: TdomCMNode): TdomCMNode; -begin - case node.NodeType of - ctAttribute: - result:= createCMAttribute((node as TdomCMAttribute).elementName, - (node as TdomCMAttribute).attributeName, - (node as TdomCMAttribute).attributeType, - (node as TdomCMAttribute).defaultDeclaration, - (node as TdomCMAttribute).NodeValue); - ctEntity: - if (node as TdomCMEntity).entityType = etInternal_Entity then begin - result:= createCMIntEntity((node as TdomCMEntity).nodeName, - (node as TdomCMEntity).literalValue); - end else begin - if (node as TdomCMEntity).isParsedEntity - then result:= createCMExtParsedEntity((node as TdomCMEntity).nodeName, - (node as TdomCMEntity).publicId, - (node as TdomCMEntity).systemId) - else result:= createCMExtUnparsedEntity((node as TdomCMEntity).nodeName, - (node as TdomCMEntity).publicId, - (node as TdomCMEntity).systemId, - (node as TdomCMEntity).notationName); - end; - ctNotation: - result:= createCMNotation((node as TdomCMNotation).NodeName, - (node as TdomCMNotation).publicId, - (node as TdomCMNotation).systemId); - else - result:= inherited DuplicateCMNode(node); - end; -end; - -function TdomCMObject.createCMAttribute(const elementName, - attributeName, - attType, - defaultDecl, - attValue: wideString): TdomCMAttribute; -begin - Result:= TdomCMAttribute.create(self,elementName,attributeName,attType,defaultDecl,attValue); - FCreatedNodes.add(Result); -end; - -function TdomCMObject.createCMExtParsedEntity(const name, - pubId, - sysId: wideString): TdomCMEntity; -begin - Result:= TdomCMEntity.createExtParsed(self,name,pubId,sysId); - FCreatedNodes.add(Result); -end; - -function TdomCMObject.createCMExtUnparsedEntity(const name, - pubId, - sysId, - notaName: wideString): TdomCMEntity; -begin - Result:= TdomCMEntity.createExtUnparsed(self,name,pubId,sysId,notaName); - FCreatedNodes.add(Result); -end; - -function TdomCMObject.createCMIntEntity(const name, - literalValue: wideString): TdomCMEntity; -begin - Result:= TdomCMEntity.create(self,name,literalValue); - FCreatedNodes.add(Result); -end; - -function TdomCMObject.CreateCMNotation(const name, - pubId, - sysId: wideString): TdomCMNotation; -begin - Result:= TdomCMNotation.create(self,name,pubId,sysId); - FCreatedNodes.add(Result); -end; - -function TdomCMObject.setPredefinedEntities: boolean; - - function testGtAposQuot(const entName, - litVal, - CdataVal: wideString): boolean; - var - newEntity, oldEntity: TdomCMEntity; - ok: boolean; - begin - result:= true; - oldEntity:= Entities.GetNamedItem(entName); - if assigned(oldEntity) then begin - try - ok:= (oldEntity.replacementText = CdataVal); - except - ok:= false; - end; - if not ok then begin - sendErrorNotification(ET_WRONG_DECL_OF_PREDEFINED_ENTITY,oldEntity); - result:= false; - end; - end else begin - newEntity:= CreateCMIntEntity(entName,litVal); - Entities.appendNamedItem(newEntity); - end; - end; - - function testLtAmp(const entName, - litVal: wideString; - const charValue: integer): boolean; - var - newEntity, oldEntity: TdomCMEntity; - ok: boolean; - begin - result:= true; - oldEntity:= Entities.GetNamedItem(entName); - if assigned(oldEntity) then begin - try - ok:= (XmlCharRefToInt(oldEntity.replacementText) = charValue); - except - ok:= false; - end; - if not ok then begin - sendErrorNotification(ET_WRONG_DECL_OF_PREDEFINED_ENTITY,oldEntity); - result:= false; - end; - end else begin - newEntity:= CreateCMIntEntity(entName,litVal); - Entities.appendNamedItem(newEntity); - end; - end; - -begin - result:= true; - if not testLtAmp('lt','&#60;',60) - then result:= false; - if not testGtAposQuot('gt','>',#62) - then result:= false; - if not testLtAmp('amp','&#38;',38) - then result:= false; - if not testGtAposQuot('apos',''',#39) - then result:= false; - if not testGtAposQuot('quot','"',#34) - then result:= false; -end; - -function TdomCMObject.prepareCM: boolean; -var - dtdAnalyzer: TXmlCMAnalyzer; -begin - result:= true; - - clearEntities; - clearAttributes; - clearElementTypes; - clearNotations; - - dtdAnalyzer:= TXmlCMAnalyzer.create(nil); - try - dtdAnalyzer.DOMImpl:= domImplementation; - if assigned(internalCM) - then result:= dtdAnalyzer.analyzeCM(internalCM,self); - if result and assigned(externalCM) - then result:= dtdAnalyzer.analyzeCM(externalCM,self); - finally - dtdAnalyzer.free; - end; - - if result - then result:= setPredefinedEntities; - - if not result then begin - clearEntities; - clearAttributes; - clearElementTypes; - clearNotations; - end; -end; - -function TdomCMObject.prepare: boolean; -begin - result:= prepareCM; -end; - -function TdomCMObject.removeExternalCM: TdomCMExternalObject; -begin - result:= FCMExternal; - if assigned(FCMExternal) - then FCMExternal.FAssociatedContentModel:= nil; - FCMExternal:= nil; -end; - -function TdomCMObject.setExternalCM(const arg: TdomCMExternalObject): TdomCMExternalObject; -begin - if assigned(arg) - then if assigned(arg.associatedContentModel) - then raise EInuse_Content_Model_Err.create('Inuse content model error.'); - result:= removeExternalCM; - FCMExternal:= arg; - arg.FAssociatedContentModel:= self; -end; - -function TdomCMObject.removeInternalCM: TdomCMInternalObject; -begin - result:= FCMInternal; - if assigned(FCMInternal) - then FCMInternal.FAssociatedContentModel:= nil; - FCMInternal:= nil; -end; - -function TdomCMObject.setInternalCM(const arg: TdomCMInternalObject): TdomCMInternalObject; -begin - if assigned(arg) - then if assigned(arg.associatedContentModel) - then raise EInuse_Content_Model_Err.create('Inuse content model error.'); - result:= removeInternalCM; - FCMInternal:= arg; - arg.FAssociatedContentModel:= self; -end; - -function TdomCMObject.validate: boolean; -var - i,j: integer; - goOn, ok, typeMismatch: boolean; - idNames, notationNames, notationTokens, enumerationTokens: TdomWideStringList; - AType: wideString; - Attri: TdomCMAttribute; - EType: TdomCMElementTypeDeclaration; -begin - result:= true; - if not prepareCM then begin - result:= false; - exit; - end; - - if assigned(internalCM) then begin - if not internalCM.validate then begin - result:= false; - exit; - end; - end; - - if assigned(externalCM) then begin - if not externalCM.validate then begin - result:= false; - exit; - end; - end; - - for i:= 0 to pred(entities.length) do begin - with entities.item(i) do begin - - resolve; // xxx necessary here? - - // VC: Notation Declared (XML 1.0, § 4.2.2) - if not isParsedEntity then - if notations.GetNamedIndex(notationName) = -1 then begin - result:= false; - goOn:= sendErrorNotification(ET_UNDECLARED_NOTATION_NAME,entities.item(i)); - if not goOn then exit; - end; - - end; {with ...} - end; {for ...} - - IdNames:= TdomWideStringList.create; - IdNames.Sorted:= true; - IdNames.Duplicates:= dupError; - NotationNames:= TdomWideStringList.create; - NotationNames.Sorted:= true; - NotationNames.Duplicates:= dupError; - NotationTokens:= TdomWideStringList.create; - NotationTokens.Sorted:= true; - NotationTokens.Duplicates:= dupError; - EnumerationTokens:= TdomWideStringList.create; - EnumerationTokens.Sorted:= true; - EnumerationTokens.Duplicates:= dupError; - try - for i:= 0 to pred(attributes.length) do begin - Attri:= attributes.item(i); - AType:= Attri.AttributeType; - TypeMismatch:= false; - if AType = 'ID' then begin - - // VC: One ID per Element Type (XML 1.0, § 3.3.1) - try - IdNames.Add(Attri.ElementName) - except // xxx not elegant - result:= false; - goOn:= sendErrorNotification(ET_DUPLICATE_ID_ON_ELEMENT_TYPE,Attri); - if not goOn then exit; - end; - - end else if AType = 'NOTATION' then begin - - NotationTokens.clear; - - for j:= 0 to pred(Attri.childnodes.length) do begin - - // VC: Notation Attributes (XML 1.0, § 3.3.1) - if notations.GetNamedIndex(Attri.childnodes.item(j).NodeName) = -1 then begin - result:= false; - goOn:= sendErrorNotification(ET_UNDECLARED_NOTATION_NAME,Attri.childnodes.item(j)); - if not goOn then exit; - end; - - // VC: No Duplicate Tokens (XML 1.0, 2nd ed., erratum 2) - try - NotationTokens.Add(Attri.childnodes.item(j).NodeName) - except // xxx not elegant - result:= false; - goOn:= sendErrorNotification(ET_DUPLICATE_NOTATION_TOKEN,Attri.childnodes.item(j)); - if not goOn then exit; - end; - - end; {for ...} - - // VC: One Notation per Element Type (XML 1.0, § 3.3.1) - try - NotationNames.Add(Attri.ElementName) - except // xxx not elegant - result:= false; - goOn:= sendErrorNotification(ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE,Attri); - if not goOn then exit; - end; - - // VC: No Notation on Empty Element (XML 1.0, § 3.3.1) - EType:= (elementTypes.GetNamedItem(Attri.ElementName) as TdomCMElementTypeDeclaration); - if assigned(EType) then begin - if EType.ContentspecType = ctEmpty then begin - result:= false; - goOn:= sendErrorNotification(ET_NOTATION_ON_EMPTY_ELEMENT,Attri); - if not goOn then exit; - end; - end; - - end else - - if AType = '' then begin - if attri.NodeValue <> '' then begin - ok:= false; - EnumerationTokens.clear; - with attri do begin - for j:= 0 to pred(ChildNodes.length) do begin - if ChildNodes.item(j).NodeName = NodeValue then begin - ok:= true; - break; - end; - - // VC: No Duplicate Tokens (XML 1.0, 2nd ed., erratum 2) - try - EnumerationTokens.Add(childnodes.item(j).NodeName) - except // xxx not elegant - result:= false; - goOn:= sendErrorNotification(ET_DUPLICATE_ENUMERATION_TOKEN,childnodes.item(j)); - if not goOn then exit; - end; - if not result then break; - - end; - end; {with ...} - TypeMismatch:= not ok; // VC: Enumeration (XML 1.0, § 3.3.1) - end; {if ...} - end else - if AType = 'IDREF' then begin - if not (isXMLName(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: IDREF (XML 1.0, § 3.3.1) - end else - if AType = 'IDREFS' then begin - if not (isXMLNames(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: IDREF (XML 1.0, § 3.3.1) - end else - if AType = 'ENTITY' then begin - if not (isXMLName(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: Entity (XML 1.0, § 3.3.1) - end else - if AType = 'ENTITIES' then begin - if not (isXMLNames(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: Entity (XML 1.0, § 3.3.1) - end else - if AType = 'NMTOKEN' then begin - if not (isXmlNmtoken(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: name Token (XML 1.0, § 3.3.1) - end else - if AType = 'NMTOKENS' then begin - if not (isXmlNmtokens(attri.NodeValue) or (attri.NodeValue = '')) - then TypeMismatch:= true; // VC: name Token (XML 1.0, § 3.3.1) - end; - - if TypeMismatch then begin - result:= false; - goOn:= sendErrorNotification(ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH,attri); - if not goOn then exit; - end; - - end; {for ...} - finally - IdNames.free; - NotationNames.free; - NotationTokens.free; - EnumerationTokens.free; - end; - -end; - - - -// +++++++++++++++++++++++ TdomCustomCMIEObject +++++++++++++++++++++++ -constructor TdomCustomCMIEObject.create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); -begin - inherited create(aOwner,sysId); - FPublicId:= pubId; - FAssociatedContentModel:= nil; -end; - -function TdomCustomCMIEObject.validate: boolean; -var - i: integer; -begin - result:= true; - for i:= 0 to pred(childnodes.length) do begin - if not childnodes.item(i).validate then begin - result:= false; - exit; - end; - end; -end; - - - -// +++++++++++++++++++++++ TdomCMInternalObject +++++++++++++++++++++++ -constructor TdomCMInternalObject.create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); -begin - inherited create(aOwner,pubId,sysId); - FNodeName:= '#cm-internal-object'; - FNodeType:= ctInternalObject; - FAllowedChildTypes:= [ctAttributeList, - ctComment, - ctElementTypeDeclaration, - ctEntityDeclaration, - ctNotationDeclaration, - ctParameterEntityDeclaration, - ctParameterEntityReference, - ctProcessingInstruction]; -end; - - - -// ++++++++++++++++++++++++ TdomCMExternalObject +++++++++++++++++++++++ -constructor TdomCMExternalObject.create(const aOwner: TdomImplementation; - const pubId, - sysId: wideString); -begin - inherited create(aOwner,pubId,sysId); - FNodeName:= '#cm-external-object'; - FNodeType:= ctExternalObject; - FEncoding:= ''; - FVersion:= ''; - FAllowedChildTypes:= [ctAttributeList, - ctComment, - ctElementTypeDeclaration, - ctEntityDeclaration, - ctNotationDeclaration, - ctParameterEntityDeclaration, - ctParameterEntityReference, - ctProcessingInstruction]; -end; - - - -// ++++++++++++++++++ TdomCMNotationDeclaration ++++++++++++++++++++++++ -constructor TdomCMNotationDeclaration.create(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FPublicId:= pubId; - FSystemId:= sysId; - FNodeType:= ctNotationDeclaration; - FAllowedChildTypes:= []; -end; - -procedure TdomCMNotationDeclaration.SetNodeValue(const value: wideString); -begin -end; - -function TdomCMNotationDeclaration.GetPublicId: wideString; -begin - Result:= FPublicId; -end; - -function TdomCMNotationDeclaration.GetSystemId: wideString; -begin - Result:= FSystemId; -end; - -function TdomCMNotationDeclaration.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++ TdomCMElementTypeDeclaration +++++++++++++++++++++++ -constructor TdomCMElementTypeDeclaration.create(const aOwner: TdomCustomCMObject; - const name: wideString; - const contspecType: TdomContentspecType); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeType:= ctElementTypeDeclaration; - FContentspec:= contspecType; - case contspecType of - ctEmpty,ctAny: FAllowedChildTypes:= []; - ctMixed: FAllowedChildTypes:= [ctPcdataChoiceParticle]; - ctChildren: FAllowedChildTypes:= [ctSequenceParticle, - ctChoiceParticle]; - end; -end; - -function TdomCMElementTypeDeclaration.GetContentspec: wideString; -var - XMLStream: TdomWideStringStream; -begin - XMLStream := TdomWideStringStream.create; - try - case ContentSpecType of - ctEmpty: writeWideString(XMLStream, 'EMPTY '); - ctAny: writeWideString(XMLStream, 'ANY '); - ctMixed, ctChildren: (ChildNodes.Item(0) as TdomCMParticle).writeCode(XMLStream); - end; {case ...} - Result := XMLStream.DataString; - finally - XMLStream.Free; - end; -end; - -function TdomCMElementTypeDeclaration.GetContentspecType: TdomContentspecType; -begin - Result:= FContentspec; -end; - -procedure TdomCMElementTypeDeclaration.SetNodeValue(const value: wideString); -begin -end; - -function TdomCMElementTypeDeclaration.appendChild(const newChild: TdomCMNode): TdomCMNode; -begin - if (contentspecType = ctEmpty) or (contentspecType = ctAny) - or (hasChildNodes and (FirstChild <> newChild)) - then raise ENot_Supported_Err.create('Not supported error.'); - result:= inherited appendChild(newChild); -end; - -function TdomCMElementTypeDeclaration.insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; -begin - if (contentspecType = ctEmpty) or (contentspecType = ctAny) - or (hasChildNodes and (FirstChild <> newChild)) - then raise ENot_Supported_Err.create('Not supported error.'); - result:= inherited insertBefore(newChild,refChild); -end; - -function TdomCMElementTypeDeclaration.validate: boolean; -var - i: integer; -begin - result:= true; - for i:= 0 to pred(childnodes.length) do begin - if not childnodes.item(i).validate then begin - result:= false; - exit; - end; - end; -end; - - - -// +++++++++++++++++++++++ TdomCMAttrList ++++++++++++++++++++++++++++++ -constructor TdomCMAttrList.create(const aOwner: TdomCustomCMObject; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeType:= ctAttributeList; - FAllowedChildTypes:= [ctAttributeDefinition]; -end; - -function TdomCMAttrList.validate: boolean; -var - i: integer; -begin - result:= true; - for i:= 0 to pred(childnodes.length) do begin - if not childnodes.item(i).validate then begin - result:= false; - exit; - end; - end; -end; - - -// ++++++++++++++++++++ TdomCMAttrDefinition ++++++++++++++++++++++++++ -constructor TdomCMAttrDefinition.create(const aOwner: TdomCustomCMObject; - const name, - attType, - defaultDecl, - attValue: wideString); -const - sQuote: wideString = #$0027; - dQuote: wideString = '"'; -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not ( (attType='') or (attType='NOTATION') or - IsXmlStringType(attType) or IsXmlTokenizedType(attType) ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not ( (defaultDecl = '#REQUIRED') or (defaultDecl = '#IMPLIED') or - (defaultDecl = '#FIXED') or (defaultDecl = '') ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if ((defaultDecl = '#REQUIRED') or (defaultDecl = '#IMPLIED')) - and (attValue <> '') - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not ( IsXMLAttValue(concat(dQuote,attValue,dQuote)) or - IsXMLAttValue(concat(sQuote,attValue,sQuote)) ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FAttributeType:= attType; - FDefaultDeclaration:= defaultDecl; - FNodeValue:= attValue; - FNodeType:= ctAttributeDefinition; - FParentAttributeList:= nil; - FAllowedChildTypes:= []; - if attType = '' - then FAllowedChildTypes:= [ctNmtokenParticle]; - if attType = 'NOTATION' - then FAllowedChildTypes:= [ctNameParticle]; -end; - -function TdomCMAttrDefinition.validate: boolean; -var - i: integer; - particleNames: TdomWideStringList; -begin - result:= true; - - // VC: ID Attribute Default (XML 1.0, § 3.3.1) - if (AttributeType = 'ID') and not - ( (DefaultDeclaration = '#REQUIRED') or (DefaultDeclaration = '#IMPLIED') ) then begin - result:= false; - sendErrorNotification(ET_ID_NEITHER_IMPLIED_NOR_REQUIRED,self); - end; - - // VC: No Duplicate Tokens (XML 1.0, 2nd Ed., Erratum 2) - if hasChildNodes then begin - particleNames:= TdomWideStringList.create; - particleNames.Sorted:= true; - particleNames.Duplicates:= dupError; - try - for i:= 0 to pred(childnodes.length) do begin - try - particleNames.Add(childnodes.item(i).nodeName); - except // xxx not elegant - result:= false; - sendErrorNotification(ET_DUPLICATE_TOKENS,childnodes.item(i)); - break; - end; {try ... except ...} - end; {for ...} - finally - particleNames.free; - end; - end; - -end; - -function TdomCMAttrDefinition.GetAttributeType: wideString; -begin - Result:= FAttributeType; -end; - -function TdomCMAttrDefinition.GetDefaultDeclaration: wideString; -begin - Result:= FDefaultDeclaration; -end; - -procedure TdomCMAttrDefinition.SetNodeValue(const value: wideString); -begin -end; - - - -// +++++++++++++++++++++++++ TdomCMParticle ++++++++++++++++++++++++++++ -constructor TdomCMParticle.create(const aOwner: TdomCustomCMObject; - const freq: wideString); -begin - if not ( (freq = '') or (freq = wideString('?')) or (freq = '*') or (freq = '+') ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeType:= ctUnknown; - FAllowedChildTypes:= []; - FFrequency:= freq; -end; - -function TdomCMParticle.contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; -begin - raise EParserException.create('Parser exception in TdomCMParticle.contentModelTest'); -end; - -function TdomCMParticle.contentModelTest(const source, - rest: TdomWideStringList; - var isNonDeterministic: boolean): boolean; -var - rest2: TdomWideStringList; -begin - result:= false; - isNonDeterministic:= false; - if Frequency = '' then begin - result:= contentModelTest2(source,rest,'',isNonDeterministic); - end else if Frequency = '?' then begin - result:= contentModelTest2(source,rest,'?',isNonDeterministic); - end else if Frequency = '+' then begin - result:= contentModelTest2(source,rest,'',isNonDeterministic); - if result then begin - rest2:= TdomWideStringList.create; - try - while rest.Count > 0 do begin - if not contentModelTest2(rest,rest2,'',isNonDeterministic) then break; - rest.assign(rest2); - end; - finally - rest2.free; - end; - end; - end else if Frequency = '*' then begin - result:= contentModelTest2(source,rest,'?',isNonDeterministic); - if result then begin - rest2:= TdomWideStringList.create; - try - while rest.Count > 0 do begin - if not contentModelTest2(rest,rest2,'',isNonDeterministic) then break; - rest.assign(rest2); - end; - finally - rest2.free; - end; - end; - end; - if isNonDeterministic then result:= false; -end; - -function TdomCMParticle.GetFrequency: wideString; -begin - Result:= FFrequency; -end; - -procedure TdomCMParticle.SetFrequency(const freq: wideString); -begin - if not ( (freq = '') or (freq = wideString('?')) or (freq = '*') or (freq = '+') ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - FFrequency:= freq; -end; - -procedure TdomCMParticle.SetNodeValue(const value: wideString); -begin -end; - - - -// ++++++++++++++++++++++ TdomCMSequenceParticle +++++++++++++++++++++++ -constructor TdomCMSequenceParticle.create(const aOwner: TdomCustomCMObject; - const freq: wideString); -begin - inherited create(aOwner,freq); - FNodeName:= '#sequence-particle'; - FNodeType:= ctSequenceParticle; - FAllowedChildTypes:= [ctSequenceParticle, - ctChoiceParticle, - ctElementParticle]; -end; - -function TdomCMSequenceParticle.contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; -var - i: integer; - source2,rest2: TdomWideStringList; - ok: boolean; -begin - isNonDeterministic:= false; - rest.Assign(source); - result:= false; - source2:= TdomWideStringList.create; - rest2:= TdomWideStringList.create; - try - source2.Assign(source); - ok:= false; - for i:= 0 to pred(childnodes.length) do begin - ok:= (childnodes.item(i) as TdomCMParticle).contentModelTest(source2,rest2,isNonDeterministic); - if not ok then break; - source2.Assign(rest2); - end; - if freq = '' then begin - if ok then begin - rest.assign(rest2); - result:= true; - end else result:= false; - end else if freq = '?' then begin - if ok then rest.assign(rest2); - result:= true; - end; - finally - source2.free; - rest2.free; - end; - if isNonDeterministic - then result:= false; -end; - -procedure TdomCMSequenceParticle.writeCode(stream: TStream); -var - i: integer; -begin - if not HasChildNodes - then raise ENot_Supported_Err.create('Not supported error.'); - writeWideChars(stream, ['(']); - for i:= 0 to childnodes.length-1 do begin - if i > 0 then writeWideChars(stream, [',', ' ']); - (ChildNodes.item(i) as TdomCMParticle).writeCode(stream); - end; - writeWideChars(stream, [')']); - writeWideString(stream, Frequency); -end; - -function TdomCMSequenceParticle.validate: boolean; -begin - result:= true; -end; - - - -//++++++++++++++++++++++ TdomChoiceParticle ++++++++++++++++++++++++++++ -constructor TdomCMChoiceParticle.create(const aOwner: TdomCustomCMObject; - const freq: wideString); -begin - inherited create(aOwner,freq); - FNodeName:= '#choice-particle'; - FNodeType:= ctChoiceParticle; - FAllowedChildTypes:= [ctSequenceParticle, - ctChoiceParticle, - ctElementParticle]; -end; - -function TdomCMChoiceParticle.contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; -var - i: integer; - rest3,rest2: TdomWideStringList; - okNumber: integer; -begin - isNonDeterministic:= false; - rest.Assign(source); - result:= false; - rest3:= TdomWideStringList.create; - rest2:= TdomWideStringList.create; - try - okNumber:= 0; - for i:= 0 to pred(childnodes.length) do begin - if (childnodes.item(i) as TdomCMParticle).contentModelTest(source,rest2,isNonDeterministic) then begin - inc(okNumber); - if okNumber > 1 then begin - isNonDeterministic:= true; - break; - end; - rest3.assign(rest2); - end else if isNonDeterministic then break; - end; - if freq = '' then begin - if okNumber = 1 then begin - rest.assign(rest3); - result:= true; - end else result:= false; - end else if freq = '?' then begin - if okNumber = 1 then rest.assign(rest3); - result:= true; - end; - finally - rest3.free; - rest2.free; - end; - if isNonDeterministic - then result:= false; -end; - -procedure TdomCMChoiceParticle.writeCode(stream: TStream); -var - i: integer; -begin - if not HasChildNodes - then raise ENot_Supported_Err.create('Not supported error.'); - writeWideChars(stream, ['(']); - for i:= 0 to childnodes.length-1 do begin - if i > 0 then writeWideChars(stream, [' ', '|', ' ']); - (ChildNodes.item(i) as TdomCMParticle).writeCode(stream); - end; - writeWideChars(stream, [')']); - writeWideString(stream, Frequency); -end; - -function TdomCMChoiceParticle.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++++ TdomCMPcdataChoiceParticle ++++++++++++++++++++++ -constructor TdomCMPcdataChoiceParticle.create(const aOwner: TdomCustomCMObject; - const freq: wideString); -begin - if freq <> '*' - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner,freq); - FNodeName:= '#pcdata-choice-particle'; - FNodeType:= ctPcdataChoiceParticle; - FAllowedChildTypes:= [ctElementParticle]; -end; - -function TdomCMPcdataChoiceParticle.contentModelTest(const source, - rest: TdomWideStringList; - var isNonDeterministic: boolean): boolean; -begin - raise EParserException.create('Parser exception in TdomCMParticle.contentModelTest'); -end; - -procedure TdomCMPcdataChoiceParticle.SetFrequency(const freq: wideString); -begin - if freq <> '*' - then raise EInvalid_Character_Err.create('Invalid character error.'); - FFrequency:= freq; -end; - -procedure TdomCMPcdataChoiceParticle.writeCode(stream: TStream); -var - i: integer; -begin - writeWideString(stream, '( #PCDATA'); - for i:= 0 to childnodes.length-1 do begin - writeWideChars(stream, [' ', '|', ' ']); - (ChildNodes.item(i) as TdomCMParticle).writeCode(stream); - end; - writeWideChars(stream, [' ', ')']); - writeWideString(stream, Frequency); -end; - -function TdomCMPcdataChoiceParticle.elementDefined(const elementName: wideString): boolean; -var - i: integer; -begin - if not IsXmlName(elementName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - result:= false; - for i:= 0 to pred(childnodes.length) do begin - if childnodes.item(i).nodeName = elementName then begin - result:= true; - exit; - end; - end; -end; - -function TdomCMPcdataChoiceParticle.validate: boolean; -var - i: integer; - particleNames: TdomWideStringList; -begin - result:= true; - particleNames:= TdomWideStringList.create; - particleNames.Sorted:= true; - particleNames.Duplicates:= dupError; - try - for i:= 0 to pred(childnodes.length) do begin - try - particleNames.Add(childnodes.item(i).nodeName); - except // xxx not elegant - result:= false; - sendErrorNotification(ET_DUPLICATE_NAME_IN_MIXED_CONTENT,childnodes.item(i)); - break; - end; {try ... except ...} - end; {for ...} - finally - particleNames.free; - end; -end; - - - -// +++++++++++++++++++++ TdomCMElementParticle +++++++++++++++++++++++++ -constructor TdomCMElementParticle.create(const aOwner: TdomCustomCMObject; - const name, - freq: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner,freq); - FNodeName:= name; - FNodeType:= ctElementParticle; - FAllowedChildTypes:= []; -end; - -function TdomCMElementParticle.contentModelTest2(const source, - rest: TdomWideStringList; - const freq: wideString; - var isNonDeterministic: boolean): boolean; -begin - isNonDeterministic:= false; - result:= false; - rest.Assign(source); - if freq = '' then begin - if rest.Count = 0 then exit; - if rest[0] = nodeName then begin - rest.Delete(0); - result:= true; - end else result:= false; - end else if freq = '?' then begin - result:= true; - if rest.Count = 0 then exit; - if rest[0] = nodeName then rest.Delete(0); - end; -end; - -procedure TdomCMElementParticle.writeCode(stream: TStream); -begin - writeWideStrings(stream, [NodeName, Frequency]); -end; - -function TdomCMElementParticle.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++++++++ TdomCMNameParticle ++++++++++++++++++++++++++ -constructor TdomCMNameParticle.create(const aOwner: TdomCustomCMObject; - const name: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeType:= ctNameParticle; - FAllowedChildTypes:= []; -end; - -procedure TdomCMNameParticle.SetNodeValue(const value: wideString); -begin -end; - -function TdomCMNameParticle.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++++++ TdomCMNmtokenParticle +++++++++++++++++++++++++ -constructor TdomCMNmtokenParticle.create(const aOwner: TdomCustomCMObject; - const name: wideString); -begin - if not isXmlNmtoken(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeType:= ctNmtokenParticle; - FAllowedChildTypes:= []; -end; - -procedure TdomCMNmtokenParticle.SetNodeValue(const value: wideString); -begin -end; - -function TdomCMNmtokenParticle.validate: boolean; -begin - result:= true; -end; - - - -// ++++++++++++++++++++++++++ TdomCMAttribute ++++++++++++++++++++++++++ -constructor TdomCMAttribute.create(const aOwner: TdomCustomCMObject; - const elementName, - attributeName, - attType, - defaultDecl, - attValue: wideString); - - procedure FurtherAttrNormalization(var S: wideString); - const - DOUBLESPACE: wideString = #$20#$20; - var - dummy: wideString; - nPos: integer; - begin - repeat - nPos := Pos(DOUBLESPACE, S); - if nPos > 0 then - Delete(S, nPos, 1); - until nPos = 0; - dummy:= S; - s:= XMLTruncSpace(dummy); - end; - -const - sQuote: wideString = #$0027; - dQuote: wideString = '"'; -var - normalizedAttValue: wideString; -begin - if not IsXmlName(attributeName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not IsXmlName(elementName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not ( (attType='') or (attType='NOTATION') or - IsXmlStringType(attType) or IsXmlTokenizedType(attType) ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not ( (defaultDecl = '#REQUIRED') or (defaultDecl = '#IMPLIED') or - (defaultDecl = '#FIXED') or (defaultDecl = '') ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if ((defaultDecl = '#REQUIRED') or (defaultDecl = '#IMPLIED')) - and (attValue <> '') - then raise EInvalid_Character_Err.create('Invalid character error.'); - normalizedAttValue:= attValue; - if not IsXmlStringType(attType) - then FurtherAttrNormalization(normalizedAttValue); - if not ( IsXMLAttValue(concat(dQuote,normalizedAttValue,dQuote)) or - IsXMLAttValue(concat(sQuote,normalizedAttValue,sQuote)) ) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FAttributeName:= attributeName; - FElementName:= elementName; - FNodeName:= '#cm-attribute'; - FNodeType:= ctAttribute; - FAttributeType:= attType; - FDefaultDeclaration:= defaultDecl; - FNodeValue:= normalizedAttValue; - FAllowedChildTypes:= []; - if attType = '' - then FAllowedChildTypes:= [ctNmtokenParticle]; - if attType = 'NOTATION' - then FAllowedChildTypes:= [ctNameParticle]; -end; - -procedure TdomCMAttribute.setNodeValue(const value: wideString); -begin -end; - - - - -// ++++++++++++++++++++++++++ TdomCMNotation ++++++++++++++++++++++++++ -constructor TdomCMNotation.create(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FPublicId:= pubId; - FSystemId:= sysId; - FNodeType:= ctNotation; - FAllowedChildTypes:= []; -end; - - - -// +++++++++++++++++++++++++++++ TdomCMEntity +++++++++++++++++++++++++++++ -constructor TdomCMEntity.create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FAllowedChildTypes:= []; - FEncoding:= ''; // xxx Set this on create? - FEntityType:= etInternal_Entity; - FIsParsedEntity:= true; - FIsResolved:= false; - FIsUnusable:= false; - FLiteralValue:= ''; - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ctEntity; - FNotationName:= ''; - FPublicId:= ''; - FReplacementText:= ''; - FSystemId:= ''; - - calculateLiteralValue(litValue); // sets replacement text, too. -end; - -constructor TdomCMEntity.createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FAllowedChildTypes:= []; - FEncoding:= ''; // xxx Set this on create? - FEntityType:= etExternal_Entity; - FIsParsedEntity:= true; - FIsResolved:= false; - FIsUnusable:= false; - FLiteralValue:= ''; - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ctEntity; - FNotationName:= ''; - FPublicId:= pubId; - FReplacementText:= ''; - FSystemId:= sysId; -end; - -constructor TdomCMEntity.createExtUnparsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId, - notaName: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlName(notaName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FAllowedChildTypes:= []; - FEncoding:= ''; // xxx Set this on create? - FEntityType:= etExternal_Entity; - FIsParsedEntity:= false; - FIsResolved:= false; - FIsUnusable:= false; - FLiteralValue:= ''; - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ctEntity; - FNotationName:= notaName; - FPublicId:= pubId; - FReplacementText:= ''; - FSystemId:= sysId; -end; - -function TdomCMEntity.refersToXyz(const allowUnresolvableEntities: boolean; - const previousEntities: TdomWideStringList; - const whatToTest: integer): boolean; -// Recursivly tests, whether the TdomCMEntity is an external entity -// (whatToTest = 1), an unparsed entity (whatToTest = 2), or an unusable -// (whatToTest = 3). -// To just traverse all resolved entity references in order to test -// for circular references, 'whatToTest' must be set to 0. -const - AMP: WideChar = #$26; // '&' - SEMICOLON: WideChar = #$3B; // ';' -var - i: integer; - SChar: widechar; - refName,S: wideString; - dereferencedEntity: TdomCMEntity; - updatedEntities: TdomWideStringList; - ampActive: boolean; -begin - case whatToTest of - 0: Result:= false; - 1: result:= (entityType = etExternal_Entity); - 2: result:= not FIsParsedEntity; - 3: result:= FIsUnusable; - else - raise ESyntax_Err.create('Syntax error in TdomCMEntity.refersToXyz'); - end; - if result then exit; - S:= ReplacementText; - i:= 1; - ampActive:= false; - refName:= ''; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if ampActive then begin - if SChar = SEMICOLON then begin - if IsXmlName(refName) then begin - if (previousEntities.indexOf(refName) = -1) then begin - dereferencedEntity:= (ownerCMObject as TdomCMObject).Entities.getNamedItem(refName); - if not assigned(dereferencedEntity) then begin - if not allowUnresolvableEntities - then if not ( (refName='lt') or (refName='gt') or (refName='amp') or (refName='apos') or (refName='quot')) - then raise EConvertError.CreateFmt('&%S; cannot be resolved.',[refName]); - end else begin - updatedEntities:= TdomWideStringList.create; - try - updatedEntities.Assign(previousEntities); - updatedEntities.Add(refName); - Result:= dereferencedEntity.refersToXyz(allowUnresolvableEntities,updatedEntities,whatToTest); - finally - updatedEntities.free; - end; - end; - end else begin - if whatToTest = 0 - then result:= true; // circular reference - end; - if result then exit; - end; - ampActive:= false; - refName:= ''; - end else refName:= concat(refName,wideString(SChar)); - end else begin - if SChar = AMP then ampActive:= true; - end; - inc(i); - end; {while ...} -end; - -procedure TdomCMEntity.calculateLiteralValue(const S: wideString); -const - AMP: WideChar = #$26; // '&' - SEMICOLON: WideChar = #$3B; // ';' -var - i,j,indexpos: integer; - SChar, SChar2: widechar; - ref: wideString; - content: TdomCustomStr; - parser: TXmlToDomParser; - dummyDoc: TdomDocument; -begin - if not isParsedEntity - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - - // Calculate replacment text - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) - then raise EInvalid_Character_Err.CreateFmt('%S must not start with a UTF-16 low surrogate.',[S]); - if IsUtf16HighSurrogate(SChar) then begin - if i+1 > length(s) - then raise EInvalid_Character_Err.CreateFmt('%S must not end with a UTF-16 high surrogate.',[S]); - inc(i); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) - then raise EInvalid_Character_Err.CreateFmt('%S contains an UTF-16 high surrogate without its corresponding low surrogate.',[S]); - end; - if not IsXmlChar(sChar) - then raise EInvalid_Character_Err.CreateFmt('%S contains an invalid character.',[S]); - if (entityType = etInternal_Entity) and (SChar = AMP) then begin // Reference? - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = SEMICOLON then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EInvalid_Character_Err.CreateFmt('%S contains an ''&'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if not (IsXmlEntityRef(ref) or IsXmlCharRef(ref)) - then raise EInvalid_Character_Err.CreateFmt('%S contains an invalid reference.',[S]); - if (entityType = etInternal_Entity) and isXmlCharRef(ref) - then content.addWideString(XmlCharRefToStr(ref)) - else content.addWideString(ref); - i:= j; - end else content.addWideChar(SChar); - inc(i); - end; {while ...} - - FReplacementText:= content.value; - FLiteralValue:= S; - FIsResolved:= true; - - finally - content.free; - end; - - // IsUnusable? - if FReplacementText <> '' then begin - parser:= TXmlToDomParser.create(nil); - try - parser.domImpl:= OwnerCMObject.domImplementation; - dummyDoc:= OwnerCMObject.domImplementation.createDocument('dummy',nil); - try - parser.docWideStringToDom(FReplacementText,'','',dummyDoc.documentElement); - except - FIsUnusable:= true; - end; {try ...} - OwnerCMObject.domImplementation.FreeDocument(dummyDoc); - finally - parser.free; - end; {try ...} - end; {if ...} -end; - -procedure TdomCMEntity.setNodeValue(const value: wideString); -begin -end; - -function TdomCMEntity.getIsUnusable: boolean; -begin - if isParsedEntity and (FEntityType = etExternal_Entity) - then calculateLiteralValue(literalValue); - result:= refersToUnusableEntity(true); -end; - -function TdomCMEntity.getLiteralValue: wideString; -begin - if not isParsedEntity - then raise EConvertError.CreateFmt('&%S; is an unparsed entity.',[Nodename]); - if not resolve - then raise EConvertError.create('Entity cannot be resolved.'); - result:= FLiteralValue; -end; - -function TdomCMEntity.getNormalizedValue: wideString; -const - TAB: WideChar = #$9; // Horizontal Tabulation - LF: WideChar = #$A; // Line Feed - CR: WideChar = #$D; // Carriage Return - SPACE: WideChar = #$20; // ' ' - AMP: WideChar = #$26; // '&' - SEMICOLON: WideChar = #$3B; // ';' -var - i,j: integer; - SChar, SChar2: widechar; - ref,derefText,S: wideString; - content: TdomCustomStr; - dereferencedEntity: TdomCMEntity; -begin - if not isParsedEntity - then raise EConvertError.CreateFmt('&%S; is an unparsed entity.',[Nodename]); - if entityType = etExternal_Entity - then raise EConvertError.CreateFmt('&%S; is an external entity.',[Nodename]); - result:= ''; - S:= ReplacementText; - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if (SChar = TAB) or (SChar = LF) or (SChar = CR) // White space? - then content.addWideChar(SPACE) - else if SChar = AMP then begin // Reference? - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = SEMICOLON then break; // End of Reference? - end; - // Test for indexpos = -1 is not necessary here, because of the previous test in calculateReplacementText(). - ref:= copy(S,i,j-i+1); - if IsXmlEntityRef(ref) then begin - dereferencedEntity:= (ownerCMObject as TdomCMObject).Entities.getNamedItem(copy(ref,2,length(ref)-2)); - if not assigned(dereferencedEntity) - then raise EConvertError.CreateFmt('&%S; refers to an undeclared entity.',[Nodename]); - if dereferencedEntity.entityType = etExternal_Entity - then raise EConvertError.CreateFmt('&%S; refers to an external entity.',[Nodename]); - if dereferencedEntity = self - then raise EConvertError.CreateFmt('&%S; refers to itself.',[Nodename]); - derefText:= dereferencedEntity.normalizedValue; // Whether dereferencedEntity is assigned was tested in 'refersToUnparsedEntity' - content.addWideString(derefText); - end else // Test for IsXmlCharRef is not necessary here, because of the previous test in calculateReplacementText(). - content.addWideString(XmlCharRefToStr(ref)); - i:= j; - end else content.addWideChar(SChar); - inc(i); - end; {while ...} - Result:= content.value; - finally - content.free; - end; -end; - -function TdomCMEntity.getReplacementText: wideString; -begin - if not isParsedEntity - then raise EConvertError.CreateFmt('&%S; is an unparsed entity.',[Nodename]); - if not resolve - then raise EConvertError.create('Invalid entity reference error.'); - result:= FReplacementText; -end; - -function TdomCMEntity.refersToItself(const allowUnresolvableEntities: boolean): boolean; -// This procedure just traverses through all entity references in -// order to test for circular references. If a circular reference is -// found, the called subroutine 'refersToXyz' raises an EConvertError. -var - previousEntities: TdomWideStringList; -begin - result:= false; - previousEntities:= TdomWideStringList.create; - try - try - result:= refersToXyz(allowUnresolvableEntities,previousEntities,0); - except - raise EConvertError.create('Invalid entity reference error.'); - end; - finally - previousEntities.free; - end; -end; - -function TdomCMEntity.refersToExternalEntity(const allowUnresolvableEntities: boolean): boolean; -// This function returns 'true', if a node refers directly or -// indirectly to an external Entity. -var - previousEntities: TdomWideStringList; -begin - result:= false; - previousEntities:= TdomWideStringList.create; - try - try - result:= refersToXyz(allowUnresolvableEntities,previousEntities,1); - except - raise EConvertError.create('Invalid entity reference error.'); - end; - finally - previousEntities.free; - end; -end; - -function TdomCMEntity.refersToUnparsedEntity(const allowUnresolvableEntities: boolean): boolean; -// This function returns 'true', if a node refers directly or -// indirectly to an unparsed Entity. -var - previousEntities: TdomWideStringList; -begin - result:= false; - previousEntities:= TdomWideStringList.create; - try - try - result:= refersToXyz(allowUnresolvableEntities,previousEntities,2); - except - raise EConvertError.create('Invalid entity reference error.'); - end; - finally - previousEntities.free; - end; -end; - -function TdomCMEntity.refersToUnusableEntity(const allowUnresolvableEntities: boolean): boolean; -// This function returns 'true', if a node refers directly or -// indirectly to an Entity marked as unusable (such as declared -// e.g. by ), or if the node itself is unusable. -var - previousEntities: TdomWideStringList; -begin - result:= false; - previousEntities:= TdomWideStringList.create; - try - try - result:= refersToXyz(allowUnresolvableEntities,previousEntities,3); - except - raise EConvertError.create('Invalid entity reference error.'); - end; - finally - previousEntities.free; - end; -end; - -function TdomCMEntity.resolve: boolean; -var - action: TXmlParserAction; - litValue,PId,SId: wideString; - inputSrc: TXmlInputSource; - stream: TStream; -begin - // xxx resolvement of unparsed entities missing! - if not isResolved then begin - result:= false; - if isParsedEntity and (FEntityType = etExternal_Entity) then begin - - stream:= nil; - PId:= publicId; - SId:= systemId; - if assigned(ownerCMObject) - then if assigned(ownerCMObject.domImplementation) - then ownerCMObject.domImplementation.doExternalParsedEntity(ownerCMObject.systemId,PId,SId,stream,action); - if (action <> paFail) and assigned(stream) then begin - try - // convert external entity value to UTF-16BE: - InputSrc:= TXmlInputSource.create(stream,'','',1); - try - if InputSrc.hasMalformedDecl - or not ( InputSrc.declType in [ DT_TEXT_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED] ) - then result:= false - else begin - litValue:= InputSrc.streamAsWideString; - calculateLiteralValue(litValue); - result:= true; - end; {if ... else ...} - finally - InputSrc.free; - end; {try} - finally - stream.free; - end; - end; {if ...} - - end; {if ...} - end else result:= true; -end; - - - -// ++++++++++++++++++++++++ TdomCustomCMEntDecl ++++++++++++++++++++++++++ -constructor TdomCustomCMEntDecl.create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FAllowedChildTypes:= []; - FEntityType:= etInternal_Entity; - FNodeName:= name; - FNodeValue:= litValue; - FPublicId:= ''; - FSystemId:= ''; -end; - -constructor TdomCustomCMEntDecl.createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - if not isXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlSystemChars(sysId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - if not isXmlPubidChars(pubId) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FPublicId:= pubId; - FSystemId:= sysId; - FEntityType:= etExternal_Entity -end; - -function TdomCustomCMEntDecl.insertBefore(const newChild, - refChild: TdomCMNode): TdomCMNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited insertBefore(newChild,refChild); -end; - -function TdomCustomCMEntDecl.replaceChild(const newChild, - oldChild: TdomCMNode): TdomCMNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited replaceChild(newChild,oldChild); -end; - -function TdomCustomCMEntDecl.appendChild(const newChild: TdomCMNode): TdomCMNode; -begin - if (publicId <> '') or (systemId <> '') - then raise ENo_Modification_Allowed_Err.create('No modification allowed error.'); - Result:= inherited appendChild(newChild); -end; - -function TdomCustomCMEntDecl.GetPublicId: wideString; -begin - Result:= FPublicId; -end; - -function TdomCustomCMEntDecl.GetSystemId: wideString; -begin - Result:= FSystemId; -end; - -function TdomCustomCMEntDecl.GetEntityType: TdomEntityType; -begin - result:= FEntityType; -end; - - - -// +++++++++++++++++++++ TdomCMEntityDeclaration +++++++++++++++++++++++ -constructor TdomCMEntityDeclaration.create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); -begin - inherited; - FIsParsedEntity:= true; - FIsReadonly:= true; - FNodeType:= ctEntityDeclaration; - FNotationName:= ''; -end; - -constructor TdomCMEntityDeclaration.createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - inherited; - FEntityType:= etExternal_Entity; - FIsParsedEntity:= true; - FIsReadonly:= true; - FNodeType:= ctEntityDeclaration; - FNotationName:= ''; -end; - -constructor TdomCMEntityDeclaration.createExtUnparsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId, - notaName: wideString); -begin - if not IsXMLName(notaName) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited createExtParsed(aOwner,name,pubId,sysId); - FEntityType:= etExternal_Entity; - FIsParsedEntity:= false; - FIsReadonly:= true; - FNodeType:= ctEntityDeclaration; - FNotationName:= notaName; -end; - -function TdomCMEntityDeclaration.validate: boolean; -begin - result:= true; -end; - - - -// ++++++++++++++++ TdomCMParameterEntityDeclaration +++++++++++++++++++ -constructor TdomCMParameterEntityDeclaration.create(const aOwner: TdomCustomCMObject; - const name, - litValue: wideString); -begin - inherited; - FIsReadonly:= true; - FNodeType:= ctParameterEntityDeclaration; -end; - -constructor TdomCMParameterEntityDeclaration.createExtParsed(const aOwner: TdomCustomCMObject; - const name, - pubId, - sysId: wideString); -begin - inherited; - FEntityType:= etExternal_Entity; - FIsReadonly:= true; - FNodeType:= ctParameterEntityDeclaration; -end; - -function TdomCMParameterEntityDeclaration.validate: boolean; -begin - result:= true; -end; - - - -// +++++++++++++++++++ TdomCMParameterEntityReference +++++++++++++++++++ -constructor TdomCMParameterEntityReference.create(const aOwner: TdomCustomCMObject; - const name: wideString); -begin - if not IsXmlName(name) - then raise EInvalid_Character_Err.create('Invalid character error.'); - inherited create(aOwner); - FNodeName:= name; - FNodeValue:= ''; - FNodeType:= ctParameterEntityReference; - FAllowedChildTypes:= []; -end; - -procedure TdomCMParameterEntityReference.SetNodeValue(const value: wideString); -begin -end; - -function TdomCMParameterEntityReference.validate: boolean; -var - i: integer; -begin - result:= true; - for i:= 0 to pred(childnodes.length) do begin // xxx necessary? - if not childnodes.item(i).validate then begin - result:= false; - exit; - end; - end; -end; - - - -// ++++++++++++++++++++++++ TdomCMFragment +++++++++++++++++++++++++++++ -constructor TdomCMFragment.create(const aOwner: TdomCustomCMObject); -begin - inherited create(aOwner); - FNodeName:= '#cm-fragment'; - FNodeValue:= ''; - FNodeType:= ctFragment; -end; - -procedure TdomCMFragment.SetNodeValue(const value: wideString); -begin - // Do nothing. -end; - - - -// +++++++++++++++++++++++++++ TXmlSourceCode ++++++++++++++++++++++++++ -procedure TXmlSourceCode.calculatePieceOffset(const startItem: integer); -var - os, i: integer; -begin - if (startItem < count) and (startItem >= 0) then begin - if startItem = 0 - then os:= 0 - else begin - if not assigned(Items[startItem-1]) - then begin - pack; - exit; - end else with TXmlSourceCodePiece(Items[startItem-1]) do - os:= FOffset + length(FText); - end; - for i:= startItem to count -1 do - if not assigned(Items[i]) - then begin - pack; - exit; - end else with TXmlSourceCodePiece(Items[i]) do begin - FOffset:= os; - os:= os + length(FText); - end; - end; {if ...} -end; - -function TXmlSourceCode.getNameOfFirstTag: wideString; -var - i,j,k: integer; -begin - result:= ''; - for i:= 0 to count -1 do - if assigned(Items[i]) then - with TXmlSourceCodePiece(Items[i]) do - if (pieceType = xmlStartTag) or (pieceType = xmlEmptyElementTag) then begin - if pieceType = xmlStartTag - then k:= length(text)-1 - else k:= length(text)-2; - j:= 1; - while j < k do begin - inc(j); - if IsXmlWhiteSpace(text[j]) then break; - Result:= concat(Result,wideString(WideChar(text[j]))); - end; - exit; - end; -end; - -function TXmlSourceCode.Add(Item: pointer): Integer; -begin - if assigned(Item) then begin - if not assigned(TXmlSourceCodePiece(Item).FOwner) - then TXmlSourceCodePiece(Item).FOwner:= self - else Error('Inuse source code piece error.',-1); - end else Error('Item not assigned error.',-1); - Result:= inherited Add(Item); - calculatePieceOffset(Result); -end; - -procedure TXmlSourceCode.Clear; -var - i: integer; -begin - for i:= 0 to count -1 do - if assigned(Items[i]) then - with TXmlSourceCodePiece(Items[i]) do begin - FOffset:= 0; - FOwner:= nil; - end; - inherited clear; -end; - -procedure TXmlSourceCode.ClearAndFree; -var - i: integer; -begin - for i:= 0 to count -1 do - if assigned(Items[i]) then TXmlSourceCodePiece(Items[i]).free; - inherited clear; -end; - -procedure TXmlSourceCode.Delete(Index: Integer); -begin - if assigned(Items[index]) then - with TXmlSourceCodePiece(Items[index]) do begin - FOffset:= 0; - FOwner:= nil; - end; - inherited Delete(index); - calculatePieceOffset(Index); -end; - -procedure TXmlSourceCode.Exchange(Index1, Index2: Integer); -var - nr: integer; -begin - nr:= MinIntValue([Index1,Index2]); - inherited Exchange(Index1,Index2); - calculatePieceOffset(nr); -end; - -function TXmlSourceCode.GetPieceAtPos(pos: integer): TXmlSourceCodePiece; -var - i: integer; -begin - // xxx This search routine is not optimized. - Result:= nil; - if pos < 1 then exit; - for i:= 0 to count -1 do - if not assigned(Items[i]) then begin - pack; - Result:= getPieceAtPos(pos); - end else with TXmlSourceCodePiece(Items[i]) do begin - if (FOffset + length(FText)) >= pos then begin - Result:= TXmlSourceCodePiece(Items[i]); - exit; - end; - end; -end; - -procedure TXmlSourceCode.Insert(Index: Integer; Item: pointer); -begin - if assigned(Item) then begin - if not assigned(TXmlSourceCodePiece(Item).FOwner) - then TXmlSourceCodePiece(Item).FOwner:= self - else Error('Inuse source code piece error.',-1); - end else Error('Item not assigned error.',-1); - inherited Insert(Index,item); - calculatePieceOffset(index); -end; - -procedure TXmlSourceCode.Move(CurIndex, NewIndex: Integer); -var - nr: integer; -begin - nr:= MinIntValue([CurIndex,NewIndex]); - inherited Move(CurIndex, NewIndex); - calculatePieceOffset(nr); -end; - -procedure TXmlSourceCode.Pack; -begin - inherited pack; - calculatePieceOffset(0); -end; - -function TXmlSourceCode.Remove(Item: pointer): Integer; -var - nr: integer; -begin - nr:= IndexOf(Item); - result:= inherited Remove(Item); - if assigned(Items[nr]) then - with TXmlSourceCodePiece(Item) do begin - FOffset:= 0; - FOwner:= nil; - end; - calculatePieceOffset(nr); -end; - -procedure TXmlSourceCode.Sort(Compare: TListSortCompare); -begin - inherited Sort(Compare); - calculatePieceOffset(0); -end; - - - -// ++++++++++++++++++++++++ TXmlSourceCodePiece ++++++++++++++++++++++++ -constructor TXmlSourceCodePiece.create(const pt: TdomPieceType); -begin - FPieceType:= pt; - Ftext:= ''; - FOffset:= 0; - FOwner:= nil; -end; - - - -// ++++++++++++++++++++++++++ TXmlInputSource ++++++++++++++++++++++++++ -constructor TXmlInputSource.create(const stream: TStream; - const publicId, - systemId: wideString; - const tabWidthValue: integer); -var - line, column: integer; -begin - if not assigned(stream) - then raise EStreamError.create('Stream not specified.'); - inherited create; - FLastUcs4:= 0; - FLastCharWasCR:= false; - FStream:= stream; - FPublicId:= publicId; - FSystemId:= systemId; - FHasMalformedDecl:= - not evaluateXmlOrTextDecl( tabWidthValue, - FDeclType, - FEncoding, - FVersionNumber, - FEncodingName, - FStandalone, - line, - column ); - FStartPosition:= FStream.Position; - FLocator:= TdomInputSourceLocator.create(self,line,column,line,column,tabWidthValue); -end; - -destructor TXmlInputSource.destroy; -begin - FLocator.free; - inherited destroy; -end; - -function TXmlInputSource.evaluateXmlOrTextDecl(const tabWidthValue: integer; - out declType: TdomXMLDeclType; - out encodingType: TdomEncodingType; - out versionInfo, - encName: wideString; - out standalone: TdomStandalone; - out lineOffset, - columnOffset: integer): boolean; -var - BOM_Offset: integer; // Byte order mark offset - ch: wideChar; - encType: TdomEncodingType; - loc: TdomInputSourceLocator; - qm: wideChar; - str1: wideChar; -begin - result:= true; - declType:= DT_UNKNOWN; - encName:= ''; - versionInfo:= ''; - standalone:= STANDALONE_UNSPECIFIED; - lineOffset:= 0; - columnOffset:= 0; - - try - FStream.ReadBuffer(str1,2); - case ord(str1) of - $feff: begin encodingType:= etUTF16BE; BOM_Offset:= 2; end; - $fffe: begin encodingType:= etUTF16LE; BOM_Offset:= 2; end; - else - encodingType:= etUTF8; - BOM_Offset:= 0; - FStream.seek(0,soFromBeginning); - end; - except - on EReadError do begin - encodingType:= etUTF8; - FStream.seek(0,soFromBeginning); - declType:= DT_UNSPECIFIED; - exit; - end; - end; {try ...} - - try - loc:= TdomInputSourceLocator.create(self,1,1,1,1,tabWidthValue); - try - if getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $003c ) // '<' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $003f ) // '?' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0078 ) // 'x' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006d ) // 'm' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006c ) // 'l' - then begin // Does the stream start with ' qm then begin // Is the first quotation mark of the same type as the second? - result:= false; - exit; - end; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - end else begin - result:= false; - exit; - end; {if ... else ...} - end else declType:= DT_TEXT_DECLARATION; - - // EncodingDecl: - if ( ord(ch) = $0065 ) then begin // 'e' - if getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006e ) // 'n' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0063 ) // 'c' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006f ) // 'o' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0064 ) // 'd' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0069 ) // 'i' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006e ) // 'n' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0067 ) // 'g' - then begin - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - if not ( ord(ch) = $003d ) then begin // '=' - result:= false; - exit; - end; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - if not ( ( ord(ch) = $0022 ) or ( ord(ch) = $0027 ) ) then begin // '"' or ''' - result:= false; - exit; - end; - - qm:= ch; - - // Get encoding name value: - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - if isXmlEncNameLeadingChar(ch) then begin - encName:= ch; - end else begin - result:= false; - exit; - end; - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - while isXmlEncNameFollowingChar(ch) do begin - encName:= concat(encName,wideString(ch)); - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - end; - - if ch <> qm then begin // Is the first quotation mark of the same type as the second? - result:= false; - exit; - end; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - end else begin - result:= false; - exit; - end; {if ... else ...} - end else begin - if declType = DT_TEXT_DECLARATION then begin - result:= false; - exit; - end else declType:= DT_XML_DECLARATION; - end; {if ... else ...} - - // SDDecl: - if ( ord(ch) = $0073 ) then begin // 's' - if getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0074 ) // 't' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0061 ) // 'a' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006e ) // 'n' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0064 ) // 'd' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0061 ) // 'a' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006c ) // 'l' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006f ) // 'o' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006e ) // 'n' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0065 ) // 'e' - then begin - - if declType = DT_TEXT_DECLARATION then begin - result:= false; - exit; - end else declType:= DT_XML_DECLARATION; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - if not ( ord(ch) = $003d ) then begin // '=' - result:= false; - exit; - end; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - if not ( ( ord(ch) = $0022 ) or ( ord(ch) = $0027 ) ) then begin // '"' or ''' - result:= false; - exit; - end; - - qm:= ch; - - // Get standalone document declaration value: - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - case ord(ch) of - $0079: begin // 'y' - if getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0065 ) // 'e' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $0073 ) // 's' - and getNextWideChar2(ch,encodingType,loc) - then begin - standalone:= STANDALONE_YES; - end else begin - result:= false; - exit; - end; - end; - $006e: begin // 'n' - if getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $006f ) // 'o' - and getNextWideChar2(ch,encodingType,loc) - then begin - standalone:= STANDALONE_NO; - end else begin - result:= false; - exit; - end; - end; - else - result:= false; - exit; - end; {case ...} - - if ch <> qm then begin // Is the first quotation mark of the same type as the second? - result:= false; - exit; - end; - - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - // Skip Whitespace: - while IsXmlWhiteSpace(ch) do - if not getNextWideChar2(ch,encodingType,loc) then begin - result:= false; - exit; - end; - - end else begin - result:= false; - exit; - end; {if ... else ...} - end; {if ...} - - // '?>': - if ( ord(ch) = $003f ) // '?' - and getNextWideChar2(ch,encodingType,loc) - and ( ord(ch) = $003e ) // '>' - then begin - - // Calculate encodingType: - encType:= StrToEncoding(UTF16To7BitASCIIStr(encName)); - if encType <> etUnknown - then encodingType:= encType; - - end else result:= false; - - end else result:= false; - - end else begin - declType:= DT_UNSPECIFIED; - FStream.seek(BOM_Offset,soFromBeginning); // Set the stream position directly behind the byte order mark. - end; - - finally - lineOffset:= loc.lineNumber; - columnOffset:= loc.columnNumber; - loc.free; - end; {try ...} - except - result:= false; - FStream.seek(BOM_Offset,soFromBeginning); - end; {try ...} -end; - -function TXmlInputSource.getNextWideChar2(var dest: wideChar; - const enc: TdomEncodingType; - const locator: TdomInputSourceLocator): boolean; -const - CR: WideChar = #13; - LF: WideChar = #10; - MaxCode: array[1..6] of integer = ($7F,$7FF,$FFFF,$1FFFFF,$3FFFFFF,$7FFFFFFF); -var - str0, first: Char; - CharSize, ucs4, mask: integer; -begin - if stream.Position < stream.size - then result:= true - else begin result:= false; exit; end; - case Enc of - etUTF8: begin - if FLastUcs4>=$10000 then begin - // Output low surrogate - dest:=Utf16LowSurrogate(FLastUcs4); - FLastUcs4:= 0; - end else begin - stream.ReadBuffer(str0,1); - if ord(str0)>=$80 then // UTF-8 sequence - begin - CharSize:=1; - first:=str0; mask:=$40; ucs4:=ord(str0); - if (ord(str0) and $C0<>$C0) then - raise EConvertError.CreateFmt('Invalid UTF-8 sequence at position %d',[stream.Position-1]); - while (mask and ord(first)<>0) do - begin - // read next character of stream - if stream.Position=stream.size then - raise EConvertError.CreateFmt('Aborted UTF-8 sequence at position %d',[stream.Position]); - stream.ReadBuffer(str0,1); - if (ord(str0) and $C0<>$80) then - raise EConvertError.CreateFmt('Invalid UTF-8 sequence at position %d',[stream.Position-1]); - ucs4:=(ucs4 shl 6) or (ord(str0) and $3F); // add bits to result - Inc(CharSize); // increase sequence length - mask:=mask shr 1; // adjust mask - end; - if (CharSize>6) then // no 0 bit in sequence header 'first' - raise EConvertError.CreateFmt('Invalid UTF-8 sequence at position %d',[stream.Position-1]); - ucs4:=ucs4 and MaxCode[CharSize]; // dispose of header bits - // check for invalid sequence as suggested by RFC2279 - if ((CharSize>1) and (ucs4<=MaxCode[CharSize-1])) then - raise EConvertError.CreateFmt('Invalid UTF-8 encoding at position %d',[stream.Position-1]); - if (ucs4>=$10000) then - begin - // Buffer storage of the ucs4 value for output of the - // low surrogate at the next function call - FLastUcs4:= ucs4; - // Output high surrogate - dest:=Utf16HighSurrogate(ucs4); - end - else - dest:= WideChar(ord(ucs4)); - end - else - dest:= WideChar(ord(str0)); - end; {if FLastUcs4 ... else ...} - end; - etUTF16BE: begin - stream.ReadBuffer(dest,2); - end; - etUTF16LE: begin - stream.ReadBuffer(dest,2); - dest:= wideChar(Swap(ord(dest))); - end; - else - stream.ReadBuffer(str0,1); - dest:= SingleByteEncodingToUTF16Char(str0,Enc); - end; {case ...} - - // normalize CRLF or a single CR to LF: - if (dest = LF) and FLastCharWasCR then begin - FLastCharWasCR:= false; - result:= getNextWideChar2(dest,enc,locator); - end else begin - if dest = CR then begin - FLastCharWasCR:= true; - dest:= LF; - end else FLastCharWasCR:= false; - if assigned(locator) then locator.evaluate(dest); - end; - -end; - -function TXmlInputSource.getNextWideChar(var dest: wideChar): boolean; -begin - try - result:= getNextWideChar2(dest,FEncoding,FLocator); - except - on EConvertError do begin - result:= true; - dest:= #0; // #0 is not a legal XML character. So it is suitable - // to indicate a malformed character in the source. - if assigned(locator) then locator.evaluate(#0); - end; - end; -end; - -function TXmlInputSource.getStreamAsWideString: wideString; -var - oldPosition: longint; - oldFLastUcs4: integer; - oldFLastCharWasCR: boolean; - content: TdomCustomStr; - str1: WideChar; -begin - try - oldPosition:= FStream.Position; - oldFLastUcs4:= FLastUcs4; - oldFLastCharWasCR:= FLastCharWasCR; - content:= TdomCustomStr.create; - try - FStream.seek(FStartPosition,soFromBeginning); - while getNextWideChar2(str1,FEncoding,nil) do begin - content.addWideChar(str1) - end; - result:= content.value; - finally - content.free; - FLastUcs4:= oldFLastUcs4; - FLastCharWasCR:= oldFLastCharWasCR; - FStream.seek(oldPosition,soFromBeginning); - end; - except - raise EConvertError.create('Invalid character code error.'); - end; -end; - - - -// ++++++++++++++++++++++++++ TdomError ++++++++++++++++++++++++++ -constructor TdomError.create(const errorType: TXmlErrorType; - const startLine, - startColumn, - endLine, - endColumn, - offs: integer; - const uriStr: wideString; - const rCMNode: TdomCMNode; - const rNode: TdomNode; - const code: wideString); -begin - inherited create; - FLanguage:= iso639_en; - FSupportedLanguages:= [ iso639_de, // German - iso639_en, // English - iso639_es, // Spanish - iso639_fr, // French - iso639_it, // Italian - iso639_nl, // Dutch - iso639_pl, // Polish - iso639_pt // Portuguese - ]; - FRelatedException:= errorType; - FCode:= Code; - FLocation:= TdomLocator.create(startLine,startColumn,endLine,endColumn,offs,UriStr,rCMNode,rNode); -end; - -constructor TdomError.createFromLocator(const errorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString); -begin - if assigned(location) then - with location do - self.create(errorType, - startLineNumber, - startColumnNumber, - lineNumber, - columnNumber, - offset, - uri, - relatedCMNode, - relatedNode, - code) - else create(errorType,0,0,0,0,-1,'',nil,nil,code); -end; - -destructor TdomError.destroy; -begin - FLocation.free; - inherited; -end; - -function TdomError.getSeverity: TdomSeverity; -begin - if FRelatedException in ET_FATAL_ERRORS - then result:= DOM_SEVERITY_FATAL_ERROR - else if FRelatedException in ET_ERRORS - then result:= DOM_SEVERITY_ERROR - else result:= DOM_SEVERITY_WARNING; -end; - -function TdomError.getDutchErrorStr: wideString; -// - This function was provided by Erik van der Poll, -// Incore Automatisering b.v., Amsterdam - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='FATALE FOUT '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='FOUT '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='WAARSCHUWING: '; - end; - - with FLocation do begin - DocStr:= concat('in document ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'in regel %d, positie %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'in regel %d, tussen positie %d en %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'tussen regel %d, positie %d en regel %d, positie %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Onjuiste element naam'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Dubbel begin element'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Dubbele document type declaratie (DTD)'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Onjuiste attribuut name'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Onjuiste attribuut waarde'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Dubbele attribuut name in een element'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Onjuiste entiteit naam'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Onjuiste verwerkings code'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Onuiste XML declaratie'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Onjuiste karakter referentie'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Aanhalingstekens ontbreken'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Is-teken ontbreekt'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Dubbel is-teken'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Ontbrekende spaties'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Eind-tag zonder begin-tag'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Eind-tag ontbreekt'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Onjuist karakter'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Tekst buiten het begin element'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Onjuiste documenttype declaratie'; - ET_WRONG_ORDER: - ErrorStr2:= 'Volgorde fout'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Onbekend declaratie type'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Onjuiste entiteits declaratie'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Onjuiste element declaratie'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Onjuiste attribuut declaratie'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Onjuiste notatie declaratie'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Onjuiste conditionele sectie'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Onjuiste tekst declaratie'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= '''<'' in de vervangingstekst van een attribuut waarde'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Attribuut waarde verwijst naar externe entiteit'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Referentie naar een niet ingelezen entiteit'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Referentie naar een entiteit zonder juiste opmaak'; - ET_INVALID_COMMENT: - ErrorStr2:= 'Fout in commentaar'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'Onjuiste CDATA sectie'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'Onjuiste systeem tekst'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'Onjuiste publieke tekst'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Dubbele attribuut definitie'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Dubbele entiteit declaratie'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Dubbele parameter entiteit declaratie'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Onbruikbare entiteit gedefinieerd'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Ontbrekende entiteit declaratie'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Dubbele element type declaratie'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Naam komt meer keren voor in gemengde inhoud'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Dubbel ID attribuut binnen hetzelfde element type'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Niet gedefinieerde notatie naam'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Dubbel notatie attribuut binnen hetzelfde element type'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Notatie attribuut definitie voor een leeg element type'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Attribuut type en attribuut waarde komen niet overeen'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Tokens meermalen gedefinieerd'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'ID attribuut is niet gedefinieerd als #IMPLIED of #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'Type van begin element komt niet overeen met de naam van de document type declaratie'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Element type declaratie niet gevonden'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Element met definitie EMPTY is niet leeg'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'Inhoud van een element met gemengde inhoud komt niet overeen met de declaratie'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'Inhoud van een element met element inhoud komt niet overeen met de declaratie'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'Inhoud element model is niet deterministisch'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Dubbele notatie declaratie'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Attribuut definitie niet gevonden'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Verplicht attribuut niet gevonden'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'Gedefinieerde waarde en werkelijke waarde van een vast attribuut komen niet overeen'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'Attribuut type en attribuut default waarde komen niet overeen'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Dubbele ID waarde'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'IDREF of IDREFS waarde verwijst naar een niet bestaande ID waarde'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'ENTITY of ENTITIES waarde verwijst naar een niet bestaande entiteit'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Foute declaratie voor een voorgedefinieerde entiteit'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Niet oplosbare entiteit referentie'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'Niet oplosbare parameter entiteit referentie'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'Externe subset van de DTD niet gevonden'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Parameter entiteit declaratie niet gevonden'; - else - ErrorStr2:= 'Fout in broncode'; - end; {case ...} - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getEnglishErrorStr: wideString; -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='FATAL ERROR '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='ERROR '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='WARNING: '; - end; - - with FLocation do begin - DocStr:= concat('in document ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'in line %d, position %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'in line %d, between position %d and %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'between line %d, position %d and line %d, position %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Invalid element name'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Double root element'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Double document type declaration (DTD)'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Invalid attribute name'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Invalid attribute value'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Double attribute name in one element'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Invalid entity name'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Invalid processing instruction'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Invalid XML declaration'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Invalid character reference'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Missing quotation marks'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Missing equality sign'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Double equality sign'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Missing white-space'; - ET_MISSING_START_TAG: - ErrorStr2:= 'End-tag without start-tag'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Missing end-tag'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Invalid character'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Character(s) outside the root-element'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Invalid doctype declaration'; - ET_WRONG_ORDER: - ErrorStr2:= 'Wrong order'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Unknown declaration type'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Invalid entity declaration'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Invalid element declaration'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Invalid attribute declaration'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Invalid notation declaration'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Invalid conditional section'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Invalid text declaration'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= '''<'' in the replacement text of an attribute value'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Attribute value refers to external entity'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'Recursive reference found'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Reference to an unparsed entity'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Reference to an entity containing no proper markup'; - ET_INVALID_COMMENT: - ErrorStr2:= 'Invalid comment'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'Invalid CDATA section'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'Invalid system literal'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'Invalid pubid literal'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'Invalid qualified name'; - ET_INVALID_PREFIX: - ErrorStr2:= 'Invalid prefix'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'Invalid namespace URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'Namespace URI not found'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'Wrong prefix mapping nesting'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'Encoding not supported'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Double attribute defintion'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Double entity declaration'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Double parameter entity declaration'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Unusable entity declared'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Entity declaration not found'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Double element type declaration'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Duplicate name in mixed content'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Duplicate ID attribute on the same element type declared'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Undeclared notation name'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Duplicate notation attribute on the same element type declared'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'Duplicate notation token'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Notation attribute on an empty element type declared'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'Duplicate enumeration token'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Attribute type and attribute value do not match'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Duplicate tokens declared'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'ID attribute is neither declared as #IMPLIED nor as #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'Type of root element does not match name of document type declaration'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Element type declaration not found'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Element declared EMPTY is not empty'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'Content of an element with mixed content does not match the declaration'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'Content of an element with element content does not match the declaration'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'Content model of an element is not deterministic'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Duplicate notation declaration'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Attribute definition not found'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Required attribute not found'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'Declared value and actual value of a fixed attribute do not match'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'Attribute type and attribute default do not match'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Duplicate ID value'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'IDREF or IDREFS value refers to a non-existent target ID value'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'ENTITY or ENTITIES value refers to a non-existent target unparsed entity'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Wrong declaration of a predefined entity'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Unresolvable entity reference'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'Unresolvable parameter entity reference'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'External subset of the DTD not found'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Parameter entity declaration not found'; - else - ErrorStr2:= 'Invalid source-code'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getFrenchErrorStr: wideString; -// - This function was provided by Bernard Eblin - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='ERREUR FATALE '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='ERREUR '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='ATTENTION: '; - end; - - with FLocation do begin - DocStr:= concat('dans le document ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'à la ligne %d, position %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'à la ligne %d, entre la position %d et %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'entre la ligne %d, position %d et la ligne %d, position %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Nom d'';élément invalide'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Double élément racine'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Double déclaration de type de document (DTD)'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Nom d'';attribut invalide'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Valeur d'';attribut invalide'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Double nom d'';atribut dans un élément'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Nom d'';entité invalide'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Instruction de commande invalide'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Déclaration XML invalide'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Référence de caractère invalide'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Apostrophe (''): manquant'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Signe égale manquant'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Double signe égale'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Espace manquant'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Tag de fin sans tag de début'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Tag de fin manquant'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Caractère invalide'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Caractère(s) en dehors de l'';élément racine'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Déclaration de type de document invalide'; - ET_WRONG_ORDER: - ErrorStr2:= 'Mauvais ordre'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Déclaration de type inconnue'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Déclaration d'';entité invalide'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Déclaration d'';élément invalide'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Déclaration d'';attribut invalide'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Déclaration de notation invalide'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Section conditionnelle invalide'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Déclaration de texte invalide'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= 'ET_LT_IN_ATTRIBUTE_VALUE'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'ET_REFERENCE_TO_UNPARSED_ENTITY'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'ET_NO_PROPER_MARKUP_REFERENCED'; - ET_INVALID_COMMENT: - ErrorStr2:= 'ET_INVALID_COMMENT'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'ET_INVALID_CDATA_SECTION'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'ET_INVALID_SYSTEM_LITERAL'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'ET_INVALID_PUBID_LITERAL'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'ET_DOUBLE_ATTDEF'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Double déclaration d'';entité'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Double déclaration d'';entité paramètre'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'ET_UNUSABLE_ENTITY_DECL'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_ENTITY_DECL_NOT_FOUND'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'ET_DUPLICATE_ELEMENT_TYPE_DECL'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'ET_DUPLICATE_NAME_IN_MIXED_CONTENT'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'ET_DUPLICATE_ID_ON_ELEMENT_TYPE'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'ET_UNDECLARED_NOTATION_NAME'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'ET_NOTATION_ON_EMPTY_ELEMENT'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'ET_ATTRIBUTE_TYPE_MISMATCH'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'ET_DUPLICATE_TOKENS'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'ET_ID_NEITHER_IMPLIED_NOR_REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'ET_WRONG_ROOT_ELEMENT_TYPE'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'ET_ELEMENT_TYPE_DECL_NOT_FOUND'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Double déclaration de notation'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'ET_ATTRIBUTE_DEFINITION_NOT_FOUND'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'ET_REQUIRED_ATTRIBUTE_NOT_FOUND'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'ET_FIXED_ATTRIBUTE_MISMATCH'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'ET_DUPLICATE_ID_VALUE'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'ET_TARGET_ID_VALUE_NOT_FOUND'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'ET_TARGET_UNPARSED_ENTITY_NOT_FOUND'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'ET_WRONG_DECL_OF_PREDEFINED_ENTITY'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'ET_UNRESOLVABLE_ENTITY_REFERENCE'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'ET_EXTERNAL_SUBSET_NOT_FOUND'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_PARAMETER_ENTITY_DECL_NOT_FOUND'; - else - ErrorStr2:= 'Code source invalide'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getGermanErrorStr: wideString; -var - DocStr,ErrorTypeStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='KRITISCHER FEHLER '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='FEHLER '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='WARNUNG: '; - end; - - with FLocation do begin - DocStr:= concat('im Dokument ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'in Zeile %d, Position %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'in Zeile %d, zwischen Position %d und %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'zwischen Zeile %d, Position %d und Zeile %d, Position %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Ungültiger Element-name'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Doppeltes Wurzel-Element'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Doppelte Dokument-Typ-Deklaration (DTD)'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Ungültiger Attribut-name'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Ungültiger Attribut-Wert'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Doppelter Attributname in einem Element'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Ungültiger Entität-name'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Ungültige Processing-Instruction'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Ungültige XML-Deklaration'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Ungültige Zeichen-Referenz'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Fehlende Anführungszeichen'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Fehlendes Gleichheitszeichen'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Doppeltes Gleichheitszeichen'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Fehlender Leerraum'; - ET_MISSING_START_TAG: - ErrorStr2:= 'End-Tag ohne Start-Tag'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Fehlendes End-Tag'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Ungültiges Zeichen'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Zeichen außerhalb des Wurzel-Elements'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Ungültige Dokumenttyp-Deklaration'; - ET_WRONG_ORDER: - ErrorStr2:= 'Falsche Reihenfolge'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Unbekannter Deklarationstyp'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Ungültige Entität-Deklaration'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Ungültige Element-Deklaration'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Ungültige Attribut-Deklaration'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Ungültige Notations-Deklaration'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Ungültiger bedingter Abschnitt'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Ungültige Text-Deklaration'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= '''<'' im Ersetzungstext eines Attributwertes'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Attribut-Wert verweist auf eine externe Entität'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'Rekursive Referenz gefunden'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Referenz auf eine nicht analysierte Entität'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Referenz auf eine Entität mit ungültigen Markierunszeichen'; - ET_INVALID_COMMENT: - ErrorStr2:= 'Ungültiger Kommentar'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'Ungültiger CDATA-Abschnitt'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'Ungültiges System-Literal'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'Ungültiges Pubid-Literal'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'Ungültiger qualifizierter Name'; - ET_INVALID_PREFIX: - ErrorStr2:= 'Ungültiges Prefix'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'Ungültiger Namensraum-URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'Namensraum-URI nicht gefunden'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'Falsche Prefix-Verschachtelung'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'Nicht-unterstütze Zeichencodierung'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Doppelte Attribut-Defintion'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Doppelte Entität-Deklaration'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Doppelte Parameter-Entität-Deklaration'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Unbrauchbare Entität deklariert'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Entität-Declaration nicht gefunden'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Doppelte Element-Typ-Deklaration'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Doppelter Name in gemischtem Inhalt'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'ID-Attribut mehrfach für denselben Element-Typ deklariert'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Notationsname nicht deklariert'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Notationsattribut mehrfach für denselben Element-Typ deklariert'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'Doppelte Notationstokens'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Notationsattribut für einen leeren Element-Typ deklariert'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'Doppeltes Aufzählungstoken'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Attribut-Typ und Attribut-Wert stimmen nicht überein'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Token mehrfach deklariert'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'ID-Attribut ist weder als #IMPLIED noch als #REQUIRED deklariert'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'Typ des Wurzelelements entspricht nicht der Angabe in der Dokumenttyp-Deklaration'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Elementtyp-Deklaration nicht gefunden'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Als EMPTY deklariertes Element ist nicht leer'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'Inhalt eines Elements gemischten Inhalts entspricht nicht der Deklaration'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'Inhalt eines Elements mit Element-Inhalt entspricht nicht der Deklaration'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'Inhaltsmodell eines Elements ist nicht deterministisch'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Doppelte Notationsdeklaration'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Attribut-Definition nicht gefunden'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Als "#REQUIRED" deklariertes Attribut nicht gefunden'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'Werte eines als "#FIXED" deklarierten Attributs entspricht nicht der Deklaration'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'Attribut-Typ und Attribut-Vorgabe stimmen nicht überein'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'ID-Wert mehrfach verwendet'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'Ein IDREF- bzw. IDREFS-Attribute verweist auf ein nicht vorhandenes Ziel'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'Ein ENTITY- bzw. ENTITIES-Attribute verweist auf eine nicht analysierte Entität, die nicht deklariert wurde'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Falsche Deklaration einer vordefinierten Entität'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Nicht auflösbare Entitäten-Referenz'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'Nicht auflösbare Parameter-Entitäten-Referenz'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'Externe Teilmenge der DTD nicht gefunden'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Parameter-Entität-Deklaration nicht gefunden'; - else - ErrorStr2:= 'Ungültiger Quellcode'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getItalianErrorStr: wideString; -// - This function was provided by Massimo Maria Ghisalberti - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='ERRORE CRITICO '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='ERRORE '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='ATTENZIONE: '; - end; - - with FLocation do begin - DocStr:= concat('nel documento ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'nella linea %d, posizione %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'nella linea %d, tra la posizione %d e %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'tra la linea %d, posizione %d e la linea %d, posizione %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Nome elemento non valido'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Elemento radice duplicato'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Dichiarazione del tipo di documento (DTD) duplicata'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Nome attributo non valido'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Valore attributo non valido'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Nome dell''attributo duplicato in un elemento'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Nome entità non valido'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Istruzione di processo non valida'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Dichiarazione XML non valida'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Riferimento a carattere non valida'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Virgolette mancanti'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Segno di uguale mancante'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Segno di uguale duplicato'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Spazio mancante'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Tag finale senza tag iniziale'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Tag finale mancante'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Carattere non valido'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Carattere(i) oltre l''elemento radice'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Dichiarazione del tipo di documento non valida'; - ET_WRONG_ORDER: - ErrorStr2:= 'Ordine errato'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Dichiarazione di tipo sconosciuta'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Dichiarazione di entità non valida'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Dichiarazione di elemento non valida'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Dichiarazione di attributo non valida'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Dichiarazione di notazione non valida'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Sezione condizionale non valida'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Dichiarazione di testo non valida'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= 'Tovato il carattere ''<'' nel valore di un attributo'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Il valore dell''attributo si riferisce ad un''entità esterna'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Riferimento ad una entità non analizzata'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Riferimento ad una entità senza un marcatore adeguato'; - ET_INVALID_COMMENT: - ErrorStr2:= 'ET_INVALID_COMMENT'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'ET_INVALID_CDATA_SECTION'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'ET_INVALID_SYSTEM_LITERAL'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'ET_INVALID_PUBID_LITERAL'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Definizione di attibuto duplicata'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Dichiarazione di entità duplicata'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Dichiarazione di entità con parametri duplicati'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Entità dichiarata non utilizzabile'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Dichiarazione di entità non trovata'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Dichiarazione di tipo dell''elemento duplicata'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Nome duplicato in un contenuto misto'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Attributo ID duplicato nella stessa dichiarazione di tipo di elemento'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Nome di notazione non dichiarato'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Attributo di notazione duplicato nello stessa dichiarazione di tipo di elemento'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Attributo di notazione nella dichiarazione di tipo di elemento vuoto'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'L''attributo di tipo e il valore non coincidono'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Dichiarazione duplicata di token'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'L''attributo ID non è stato dichiarato come #IMPLIED né come #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'Il tipo dell''elemento radice non coincide con il nome della dichiarazione di tipo del documento'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Dichiarazione del tipo dell''elemento non trovata'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'L''elemento dichiarato vuoto non lo è'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'Il contenuto di un elemento con contenuto misto non coincide con la dichiarazione'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'Il contenuto di un elemento che contiene elementi non coincide con la dichiarazione'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'Il modello di contenuto di un elemento non è deterministico'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Dichiarazione di notazione duplicata'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Definizione di attributo non trovata'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Attributo richiesto non trovato'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'Il valore dichiarato e quello attuale di un attributo fisso non coincidono'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'Il tipo di un attributo ed il suo predefinito non coincidono'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Valore ID duplicato'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'Il valore IDREF o IDREFS si riferisce ad un valore ID inesistente'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'Il valore ENTITY o ENTITIES si riferisce ad una entità non analizzata non esistente'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Dichiarazione di entità predefinita errata'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Riferimento non risolvibile ad una entità'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'Riferimento non risolvibile ad una entità con parametri'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'ET_EXTERNAL_SUBSET_NOT_FOUND'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_PARAMETER_ENTITY_DECL_NOT_FOUND'; - else - ErrorStr2:= 'Codice sorgente non valido'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getPolishErrorStr: wideString; -// - This function was provided by Piotr Kuczynski - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='FATALNY B£¥D '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='B£¥D '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='OSTRZE¯ENIE: '; - end; - - with FLocation do begin - DocStr:= concat('w dokumencie ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'w linii %d, znak %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'w linii %d, pomiêdzy znakiem %d i %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'pomiêdzy lini¹ %d, znak %d i lini¹ %d, znak %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Niew³aœciwa nazwa elementu'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Podwójnie zdefiniowany korzeñ'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Podwójna deklaracja typu dokumentu (DTD)'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Niew³aœciwa nazwa atrybutu'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Niew³aœciwa wartoœæ atrybutu'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Powtarzaj¹ca siê nazwa atrybutu'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Niew³aœciwa nazwa encji'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Niew³aœciwa instrukcja przetwarzania'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja XML'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Niew³aœciwy znak w odwo³aniu'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Brakuj¹cy cudzys³ów'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Brakuj¹cy znak równoœci'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Podwójny znak równoœci'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Brakuj¹cy znak spacji'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Znacznik zamykaj¹cy bez znacznika otwieraj¹cego'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Brakuj¹cy znacznik zamykaj¹cy'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Niew³aœciwy znak'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Znak(i) umieszczone poza zasiêgiem korzenia'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Niew³aœciwa deklaracja typu dokumentu'; - ET_WRONG_ORDER: - ErrorStr2:= 'Niew³aœciwa kolejnoœæ'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Nieznany typ deklaracji'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja encji'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja elementu'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja atrybutu'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja notacji'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Niew³aœciwa sekcja warunkowa'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Niew³aœciwa deklaracja tekstu'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= 'Znak ''<'' wystêpuj¹cy w zmienianej wartoœci atrybutu'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Wartoœæ atrybutu odwo³uje siê do zewnêtrznej encji'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Odwo³anie do encji, która nie by³a jeszcze parsowana'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Odwo³anie do encji zawieraj¹cej niew³aœciwy znacznik'; - ET_INVALID_COMMENT: - ErrorStr2:= 'ET_INVALID_COMMENT'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'ET_INVALID_CDATA_SECTION'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'ET_INVALID_SYSTEM_LITERAL'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'ET_INVALID_PUBID_LITERAL'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Podwójna definicja atrybutu'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Podwójna deklaracja encji'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Podwójna deklaracja encji parametrycznej'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Nieu¿ywana deklaracja encji'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Brakuj¹ca deklaracja encji'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Podwójna deklaracja typu elementu'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Podwójna nazwa w mieszanej zawartoœci'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Zadeklarowany podwójny atrybut ID dla elementów tego samego typu'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Nie zadeklarowana nazwa notacji'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Zadeklarowany podwójny atrybut notacji dla elementów tego samego typu'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Atrybut notacji zadeklarowany dla elementu typu pusty'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Typ atrybutu i wartoœæ atrybutu nie pasuj¹ do siebie'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Zadeklarowane dwa identyczne tokeny'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'Atrybut ID nie jest zadeklarowany ani jako #IMPLIED ani #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'Typ korzenia nie pasuje do nazwy z deklaracji typu dokumentu'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Nie znaleziona deklaracja typu elementu'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Element zadeklarowany jako EMPTY nie jest pusty'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'Zawartoœæ elementu o mieszanej zawartoœci nie pasuje do deklaracji'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'Zawartoœæ elementu, zawieraj¹cego element, nie pasuje do deklaracji'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'Model zawartoœci elementu jest niedeterministyczny'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Podwójna deklaracja notacji'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Definicja atrybutu nie zosta³a znaleziona'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Wymagany atrybut nie zosta³ znaleziony'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'Zadeklarowana i bie¿¹ca wartoœæ sta³ego atrybutu nie pasuja do siebie'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'Typ atrybutu i jego wartoœæ domyœlna nie pasuj¹ do siebie'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Podwójna wartoœæ ID'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'Wartoœæ IDREF lub IDREFS odwo³uje siê do wartoœci ID nieistniej¹cego elementu'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'Wartoœæ ENTITY lub ENTITIES odwo³uje siê do niesparsowanej encji, która nie istnieje'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Niew³aœciwa deklaracja predefiniowanej encji'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Nierozwi¹zywalna referencja do encji'; - ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE: - ErrorStr2:= 'Nierozwi¹zywalna referencja encji parametrycznej'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'Zewnêtrzny podzbiór DTD nie zosta³ znaleziony'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_PARAMETER_ENTITY_DECL_NOT_FOUND'; - else - ErrorStr2:= 'Niew³aœciwy kod Ÿród³owy'; - end; {case ...} - - result:= cp1250ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getPortugueseErrorStr: wideString; -// - This function was provided by Ricardo Albuquerque - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='ERRO FATAL '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='ERRO '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='ATENÇÃO: '; - end; - - with FLocation do begin - DocStr:= concat('no documento ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'na linha %d, posição %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'na linha %d, entre posição %d e %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'entre linha %d, posição %d e linha %d, posição %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Nome de elemento inválido'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Elemento raiz duplicado'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Definição de tipo de documento(DTD) duplicado'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Nome de atributo inválido'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'valor de atributo inválido'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Nome de atributo duplicado em um elemento'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Nome de entidade inválida'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Instrução de processamento inválida'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Declaração XML inválida'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Referência a caracter invalida'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'Aspas faltando'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'Sinal de igualdade faltando'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Sinal de igualdade duplicado'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'Espaço em branco faltando'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Marca de fim sem marca de início '; - ET_MISSING_END_TAG: - ErrorStr2:= 'Marca de fim faltando'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Caracter inválido'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Caracter(es) fora do elemento raiz'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Declaração de tipo de documento inválida'; - ET_WRONG_ORDER: - ErrorStr2:= 'Ordem errada'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Tipo de declaração inválida'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Declaração de entidade inválida'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Declaração de elemento inválido'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Declaração de atributo inválido'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Declaração de notação inválida'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Seção condicional inválida'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Declaração de texto inválido'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= 'Encontrado o caracter ''<'' no valor do atributo'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'O valor do atributo se refere a uma entidade externa'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Referência a uma entidade não analisada'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Referência a uma entidade contendo marcação imprópria'; - ET_INVALID_COMMENT: - ErrorStr2:= 'ET_INVALID_COMMENT'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'ET_INVALID_CDATA_SECTION'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'ET_INVALID_SYSTEM_LITERAL'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'ET_INVALID_PUBID_LITERAL'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Definição de atributo duplicada'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Declaração de entidade duplicada'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Declaração de entidade paramétrica duplicada'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Entidade inutilizável declarada'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'Faltando declaração de entidade'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Declaração do tipo do elemento duplicada'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Nome duplicado no conteúdo misto'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Atributo ID duplicado na mesma declaração de tipo de elemento'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Nome de anotação não declarado'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Atributo de Anotação duplicado na mesma declaração de tipo de elemento'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Atributo de anotação em uma declaração de tipo de elemento vazia'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Tipo de atributo e valor de atributo não coincidem'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Declaração de ''tokens'' duplicada'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'Atributo ID não foi declarado como #IMPLIED nem como #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'O tipo de elemento raiz não tem o mesmo nome que a declaração do tipo de documento'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Declaração de tipo de elemento não encontrada'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Elemento declarado como ''EMPTY'' não está vazio'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'O conteúdo de um elemento com conteúdo misto não coincide com sua declaração'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'O conteúdo de um elemento com conteúdo de elemento não coincide com sua declaração'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'O modelo de conteúdo de um elemento não é determinante'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Declaração de anotação duplicada'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Definição de atributo não encontrada'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Atributo requerido não encontrado'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'O valor declarado e o valor atual de um atributo fixo não coincidem'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'O tipo de atributo e o atributo por definição não coincidem'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Valor de ID duplicado'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'O valor de IDREF ou IDREFS se refere a um valor de ID não existente'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'O valor de ENTITY ou ENTITIES se refere a uma entidade não existente'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'Declaração errônea de uma entidade pré-definida'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Referência a entidade impossível de resolver'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'ET_EXTERNAL_SUBSET_NOT_FOUND'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_PARAMETER_ENTITY_DECL_NOT_FOUND'; - else - ErrorStr2:= 'Código fonte inválido'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -function TdomError.getSpanishErrorStr: wideString; -// - This function was provided by Pedro de Paz - -var - ErrorTypeStr,DocStr,ErrorStr1,ErrorStr2: string; -begin - case severity of - DOM_SEVERITY_FATAL_ERROR: ErrorTypeStr:='ERROR FATAL '; - DOM_SEVERITY_ERROR: ErrorTypeStr:='ERROR '; - DOM_SEVERITY_WARNING: ErrorTypeStr:='AVISO: '; - end; - - with FLocation do begin - DocStr:= concat('en el documento ',uri,' '); - if lineNumber = -1 then ErrorStr1:= '' - else if startLineNumber = lineNumber then begin - if startColumnNumber = columnNumber - then FmtStr(ErrorStr1,'en la linea %d, posición %d',[lineNumber,columnNumber]) - else FmtStr(ErrorStr1,'en la linea %d, entre las posiciones %d y %d',[lineNumber,startColumnNumber,columnNumber]); - end else begin - FmtStr(ErrorStr1,'entre la linea %d, posición %d y la linea %d, posición %d',[startLineNumber,startColumnNumber,lineNumber,columnNumber]); - end; - end; - - case FRelatedException of - ET_INVALID_ELEMENT_NAME: - ErrorStr2:= 'Nombre de elemento no válido'; - ET_DOUBLE_ROOT_ELEMENT: - ErrorStr2:= 'Elemento raiz duplicado'; - ET_DOUBLE_DOCTYPE: - ErrorStr2:= 'Declaración de tipo de documento (DTD) duplicada'; - ET_INVALID_ATTRIBUTE_NAME: - ErrorStr2:= 'Nombre de atributo no válido'; - ET_INVALID_ATTRIBUTE_VALUE: - ErrorStr2:= 'Valor de atributo no válido'; - ET_DOUBLE_ATTRIBUTE_NAME: - ErrorStr2:= 'Atributo duplicado en un elemento'; - ET_INVALID_ENTITY_NAME: - ErrorStr2:= 'Nombre de entidad no válida'; - ET_INVALID_PROCESSING_INSTRUCTION: - ErrorStr2:= 'Instrucción de proceso no válida'; - ET_INVALID_XML_DECL: - ErrorStr2:= 'Declaración XML no válida'; - ET_INVALID_CHARREF: - ErrorStr2:= 'Referencia a caracter no válida'; - ET_MISSING_QUOTATION_MARK: - ErrorStr2:= 'No se encontraron comillas'; - ET_MISSING_EQUALITY_SIGN: - ErrorStr2:= 'No se encontró simbolo de igualdad'; - ET_DOUBLE_EQUALITY_SIGN: - ErrorStr2:= 'Signo de igualdad duplicado'; - ET_MISSING_WHITE_SPACE: - ErrorStr2:= 'No se encontró espacio en blanco'; - ET_MISSING_START_TAG: - ErrorStr2:= 'Tag final sin tag de inicio'; - ET_MISSING_END_TAG: - ErrorStr2:= 'Tag de inicio sin tag final'; - ET_INVALID_CHARACTER: - ErrorStr2:= 'Caracter no válido'; - ET_NOT_IN_ROOT: - ErrorStr2:= 'Caracter(es) fuera del elemento raiz'; - ET_INVALID_DOCTYPE: - ErrorStr2:= 'Declaración de tipo de documento no válida'; - ET_WRONG_ORDER: - ErrorStr2:= 'Orden equivocado'; - ET_UNKNOWN_DECL_TYPE: - ErrorStr2:= 'Tipo de declaración desconocida'; - ET_INVALID_ENTITY_DECL: - ErrorStr2:= 'Declaración de entidad no válida'; - ET_INVALID_ELEMENT_DECL: - ErrorStr2:= 'Declaración de elemento no válida'; - ET_INVALID_ATTRIBUTE_DECL: - ErrorStr2:= 'Declaración de atributo no válida'; - ET_INVALID_NOTATION_DECL: - ErrorStr2:= 'Declaración de anotación no válida'; - ET_INVALID_CONDITIONAL_SECTION: - ErrorStr2:= 'Sección condicional no válida'; - ET_INVALID_TEXT_DECL: - ErrorStr2:= 'Declaración de texto no válida'; - ET_LT_IN_ATTRIBUTE_VALUE: - ErrorStr2:= 'Encontrado caracter ''<'' en valor de atributo'; - ET_ATTRIBUTE_VALUE_REFERS_TO_EXTERNAL_ENTITY: - ErrorStr2:= 'Valor de atributo apuntando a una entidad externa'; - ET_RECURSIVE_REFERENCE: - ErrorStr2:= 'ET_RECURSIVE_REFERENCE'; - ET_REFERENCE_TO_UNPARSED_ENTITY: - ErrorStr2:= 'Referencia a una entidad no analizada'; - ET_NO_PROPER_MARKUP_REFERENCED: - ErrorStr2:= 'Referencia a una entidad que contiene un ''markup'' no adecuado'; - ET_INVALID_COMMENT: - ErrorStr2:= 'ET_INVALID_COMMENT'; - ET_INVALID_CDATA_SECTION: - ErrorStr2:= 'ET_INVALID_CDATA_SECTION'; - ET_INVALID_SYSTEM_LITERAL: - ErrorStr2:= 'ET_INVALID_SYSTEM_LITERAL'; - ET_INVALID_PUBID_LITERAL: - ErrorStr2:= 'ET_INVALID_PUBID_LITERAL'; - ET_INVALID_QUALIFIED_NAME: - ErrorStr2:= 'ET_INVALID_QUALIFIED_NAME'; - ET_INVALID_PREFIX: - ErrorStr2:= 'ET_INVALID_PREFIX'; - ET_INVALID_NAMESPACE_URI: - ErrorStr2:= 'ET_INVALID_NAMESPACE_URI'; - ET_NAMESPACE_URI_NOT_FOUND: - ErrorStr2:= 'ET_NAMESPACE_URI_NOT_FOUND'; - ET_WRONG_PREFIX_MAPPING_NESTING: - ErrorStr2:= 'ET_WRONG_PREFIX_MAPPING_NESTING'; - ET_ENCODING_NOT_SUPPORTED: - ErrorStr2:= 'ET_ENCODING_NOT_SUPPORTED'; - ET_DOUBLE_ATTDEF: - ErrorStr2:= 'Definición de atributo duplicada'; - ET_DOUBLE_ENTITY_DECL: - ErrorStr2:= 'Declaración de entidad duplicada'; - ET_DOUBLE_PARAMETER_ENTITY_DECL: - ErrorStr2:= 'Declaración de entidad con parametros duplicados'; - ET_UNUSABLE_ENTITY_DECL: - ErrorStr2:= 'Declaración de entidad no utilizable'; - ET_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'No existe declaración de entidad'; - ET_DUPLICATE_ELEMENT_TYPE_DECL: - ErrorStr2:= 'Duplicada declaración de tipo de elemento'; - ET_DUPLICATE_NAME_IN_MIXED_CONTENT: - ErrorStr2:= 'Nombre duplicado en contenido mezclado'; - ET_DUPLICATE_ID_ON_ELEMENT_TYPE: - ErrorStr2:= 'Atributo ID duplicado en la misma declaración de tipo de elemento'; - ET_UNDECLARED_NOTATION_NAME: - ErrorStr2:= 'Nombre de anotación no declarado'; - ET_DUPLICATE_NOTATION_ON_ELEMENT_TYPE: - ErrorStr2:= 'Atributo de anotación duplicado en la misma declaración de tipo de elemento'; - ET_DUPLICATE_NOTATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_NOTATION_TOKEN'; - ET_NOTATION_ON_EMPTY_ELEMENT: - ErrorStr2:= 'Atributo de anotación en una declaración de tipo de elemento vacia'; - ET_DUPLICATE_ENUMERATION_TOKEN: - ErrorStr2:= 'ET_DUPLICATE_ENUMERATION_TOKEN'; - ET_ATTRIBUTE_TYPE_MISMATCH: - ErrorStr2:= 'Tipo de atributo y valor de atributo no coinciden'; - ET_DUPLICATE_TOKENS: - ErrorStr2:= 'Declaración de ''tokens'' duplicada'; - ET_ID_NEITHER_IMPLIED_NOR_REQUIRED: - ErrorStr2:= 'Atributo ID no ha sido declarado como #IMPLIED ni como #REQUIRED'; - ET_WRONG_ROOT_ELEMENT_TYPE: - ErrorStr2:= 'El tipo del elemento raiz no tiene el mismo nombre que la declaración del tipo de documento'; - ET_ELEMENT_TYPE_DECL_NOT_FOUND: - ErrorStr2:= 'Declaración de tipo de elemento no encontrada'; - ET_ELEMENT_DECLARED_EMPTY_HAS_CONTENT: - ErrorStr2:= 'Elemento declarado como ''EMPTY'' no esta vacio'; - ET_ELEMENT_WITH_ILLEGAL_MIXED_CONTENT: - ErrorStr2:= 'El contenido de un elemento con contenido mezclado no coincide con su declaración'; - ET_ELEMENT_WITH_ILLEGAL_ELEMENT_CONTENT: - ErrorStr2:= 'El contenido de un elemento con contenido de elemento no coincide con su declaración'; - ET_NONDETERMINISTIC_ELEMENT_CONTENT_MODEL: - ErrorStr2:= 'El modelo de contenido de un elemento no es determinante'; - ET_DUPLICATE_NOTATION_DECL: - ErrorStr2:= 'Declaración de anotación duplicada'; - ET_ATTRIBUTE_DEFINITION_NOT_FOUND: - ErrorStr2:= 'Definición de atributo no encontrada'; - ET_REQUIRED_ATTRIBUTE_NOT_FOUND: - ErrorStr2:= 'Atributo requerido no encontrado'; - ET_FIXED_ATTRIBUTE_MISMATCH: - ErrorStr2:= 'El valor declarado y el valor actual de un atributo fijo no coincide'; - ET_ATTRIBUTE_DEFAULT_TYPE_MISMATCH: - ErrorStr2:= 'El tipo de atributo y el atributo por defecto no coincide'; - ET_DUPLICATE_ID_VALUE: - ErrorStr2:= 'Valor de ID duplicado'; - ET_TARGET_ID_VALUE_NOT_FOUND: - ErrorStr2:= 'El valor de IDREF o IDREFS apunta a un valor de ID no existente'; - ET_TARGET_UNPARSED_ENTITY_NOT_FOUND: - ErrorStr2:= 'El valor de ENTITY o ENTITIES apunta a una entidad no existente'; - ET_WRONG_DECL_OF_PREDEFINED_ENTITY: - ErrorStr2:= 'DEclaración erronea de una entidad predefinida'; - ET_UNRESOLVABLE_ENTITY_REFERENCE: - ErrorStr2:= 'Referencia a entidad imposible de resolver'; - ET_EXTERNAL_SUBSET_NOT_FOUND: - ErrorStr2:= 'ET_EXTERNAL_SUBSET_NOT_FOUND'; - ET_PARAMETER_ENTITY_DECL_NOT_FOUND: - ErrorStr2:= 'ET_PARAMETER_ENTITY_DECL_NOT_FOUND'; - else - ErrorStr2:= 'Codigo fuente no válido'; - end; {case ...} - - result:= Iso8859_1ToUTF16Str(concat(ErrorTypeStr,DocStr,ErrorStr1,' -- ',ErrorStr2)); -end; - -procedure TdomError.setLanguage(const value: TIso639LanguageCode); -begin - if not (value in FSupportedLanguages) - then raise ENot_Supported_Err.create('Not supported error.'); - FLanguage:= value; -end; - -function TdomError.getMessage: wideString; -begin - Result:= ''; - - case FLanguage of - iso639_de: result:= getGermanErrorStr; - iso639_en: result:= getEnglishErrorStr; - iso639_es: result:= getSpanishErrorStr; - iso639_fr: result:= getFrenchErrorStr; - iso639_it: result:= getItalianErrorStr; - iso639_nl: result:= getDutchErrorStr; - iso639_pl: result:= getPolishErrorStr; - iso639_pt: result:= getPortugueseErrorStr; - else - exit; - end; - - if FCode = '' - then Result:= concat(Result,'.') - else Result:= concat(Result,': ',FCode); -end; - - - -// ++++++++++++++++++++++++ TdomLocator ++++++++++++++++++++++++ -constructor TdomLocator.create(const startLine, - startColumn, - endLine, - endColumn, - offset: integer; - const uri: wideString; - const rCMNode: TdomCMNode; - const rNode: TdomNode); -begin - inherited create; - FStartLineNumber:= startLine; - FStartColumnNumber:= startColumn; - FLineNumber:= endLine; - FColumnNumber:= endColumn; - FOffset:= offset; - FUri:= uri; - FRelatedCMNode:= rCMNode; - FRelatedNode:= rNode; -end; - -function TdomLocator.getColumnNumber: integer; -begin - Result:= FColumnNumber; -end; - -function TdomLocator.getLineNumber: integer; -begin - Result:= FLineNumber; -end; - -function TdomLocator.getOffset: integer; -begin - Result:= FOffset; -end; - -function TdomLocator.getRelatedCMNode: TdomCMNode; -begin - Result:= FRelatedCMNode; -end; - -function TdomLocator.getRelatedNode: TdomNode; -begin - Result:= FRelatedNode; -end; - -function TdomLocator.getStartColumnNumber: integer; -begin - Result:= FStartColumnNumber; -end; - -function TdomLocator.getStartLineNumber: integer; -begin - Result:= FStartLineNumber; -end; - -function TdomLocator.getUri: wideString; -begin - Result:= FUri; -end; - - - -// ++++++++++++++++++++ TdomInputSourceLocator ++++++++++++++++++++ -constructor TdomInputSourceLocator.create(const inputSource: TXmlInputSource; - const startLine, - startColumn, - endLine, - endColumn, - tabWidthValue: integer); -begin - inherited create(startLine,startColumn,endLine,endColumn,-1,'',nil,nil); - FInputSource:= inputSource; - FTabWidth:= tabWidthValue; -end; - -function TdomInputSourceLocator.getOffset: integer; -begin - Result:= -1; - if assigned(FInputSource) then - with FInputSource do - if assigned(stream) - then result:= stream.Position; -end; - -function TdomInputSourceLocator.getUri: wideString; -begin - if assigned(FInputSource) - then result:= FInputSource.systemId - else result:= ''; -end; - -procedure TdomInputSourceLocator.evaluate(const s: WideChar); -const - TAB: WideChar = #9; - LF: WideChar = #10; -begin - if s = LF then begin - inc(FLineNumber); - FColumnNumber:= 0; - end else if s = TAB then begin - inc(FColumnNumber,tabWidth); - end else inc(FColumnNumber); -end; - -procedure TdomInputSourceLocator.setStartMark; -begin - FStartColumnNumber:= FColumnNumber; - FStartLineNumber:= FLineNumber; -end; - - - -// ++++++++++++++++++++++++++++ TXmlCustomHandler ++++++++++++++++++++++++++++ -function TXmlCustomHandler.sendErrorNotification(const target: TXmlCustomReader; - const xmlErrorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString): boolean; -begin - if assigned(target) then begin - result:= target.sendErrorNotification(xmlErrorType,location,code); - end else begin - if xmlErrorType in ET_FATAL_ERRORS - then result:= false - else result:= true; - end; -end; - - - -// +++++++++++++++++++++++++++ TXmlStandardHandler +++++++++++++++++++++++++++ -procedure TXmlStandardHandler.Notification(AComponent: TComponent; operation: TOperation); -begin - inherited notification(AComponent,Operation); - if (Operation = opRemove) and (AComponent = FNextHandler) - then FNextHandler:= nil; -end; - -function TXmlStandardHandler.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCDATA) then FOnCDATA(sender,locator,data); - if assigned(nextHandler) - then result:= nextHandler.CDATA(sender,locator,data) - else result:= true; -end; - -function TXmlStandardHandler.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCharRef) then FOnCharRef(sender,locator,data); - if assigned(nextHandler) - then result:= nextHandler.charRef(sender,locator,data) - else result:= true; -end; - -function TXmlStandardHandler.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnComment) then FOnComment(sender,locator,data); - if assigned(nextHandler) - then result:= nextHandler.comment(sender,locator,data) - else result:= true; -end; - -function TXmlStandardHandler.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -begin - if assigned(FOnDoctype) then FOnDoctype(sender,locator,aname,pubId,sysId,data); - if assigned(nextHandler) - then result:= nextHandler.doctype(sender,locator,aname,pubId,sysId,data) - else result:= true; -end; - -function TXmlStandardHandler.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndDocument) then FOnEndDocument(sender,locator); - if assigned(nextHandler) - then result:= nextHandler.endDocument(sender,locator) - else result:= true; -end; - -function TXmlStandardHandler.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -begin - if assigned(FOnEndElement) then FOnEndElement(sender,locator,namespaceURI,tagName); - if assigned(nextHandler) - then result:= nextHandler.endElement(sender,locator,namespaceURI,tagName) - else result:= true; -end; - -function TXmlStandardHandler.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -begin - if assigned(FOnEndPrefixMapping) then FOnEndPrefixMapping(sender,locator,prefix); - if assigned(nextHandler) - then result:= nextHandler.endPrefixMapping(sender,locator,prefix) - else result:= true; -end; - -function TXmlStandardHandler.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnEntityRef) then FOnEntityRef(sender,locator,aname); - if assigned(nextHandler) - then result:= nextHandler.entityRef(sender,locator,aname) - else result:= true; -end; - -function TXmlStandardHandler.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnPCDATA) then FOnPCDATA(sender,locator,data); - if assigned(nextHandler) - then result:= nextHandler.PCDATA(sender,locator,data) - else result:= true; -end; - -function TXmlStandardHandler.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnProcessingInstruction) then FOnProcessingInstruction(sender,locator,targ,data); - if assigned(nextHandler) - then result:= nextHandler.processingInstruction(sender,locator,targ,data) - else result:= true; -end; - -function TXmlStandardHandler.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnSkippedEntity) then FOnSkippedEntity(sender,locator,aname); - if assigned(nextHandler) - then result:= nextHandler.skippedEntity(sender,locator,aname) - else result:= true; -end; - -function TXmlStandardHandler.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - if assigned(FOnStartDocument) then FOnStartDocument(sender,locator,version,encName,sdDl); - if assigned(nextHandler) - then result:= nextHandler.startDocument(sender,locator,version,encName,sdDl) - else result:= true; -end; - -function TXmlStandardHandler.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -begin - if assigned(FOnStartElement) then FOnStartElement(sender,locator,namespaceURI,tagName,attributes); - if assigned(nextHandler) - then result:= nextHandler.startElement(sender,locator,namespaceURI,tagName,attributes) - else result:= true; -end; - -function TXmlStandardHandler.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - if assigned(FOnStartPrefixMapping) then FOnStartPrefixMapping(sender,locator,prefix,uri); - if assigned(nextHandler) - then result:= nextHandler.startPrefixMapping(sender,locator,prefix,uri) - else result:= true; -end; - -function TXmlStandardHandler.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -begin - if assigned(FOnAttributeDefinition) then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - if assigned(nextHandler) - then result:= nextHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue) - else result:= true; -end; - -function TXmlStandardHandler.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - if assigned(nextHandler) - then result:= nextHandler.conditionalSection(sender,locator,includeStmt,data) - else result:= true; -end; - -function TXmlStandardHandler.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnDtdComment) then FOnDtdComment(sender,locator,data); - if assigned(nextHandler) - then result:= nextHandler.DTDcomment(sender,locator,data) - else result:= true; -end; - -function TXmlStandardHandler.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnDtdProcessingInstruction) then FOnDtdProcessingInstruction(sender,locator,targ,data); - if assigned(nextHandler) - then result:= nextHandler.DTDprocessingInstruction(sender,locator,targ,data) - else result:= true; -end; - -function TXmlStandardHandler.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - if assigned(nextHandler) - then result:= nextHandler.elementTypeDeclaration(sender,locator,aname,data) - else result:= true; -end; - -function TXmlStandardHandler.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - if assigned(nextHandler) - then result:= nextHandler.endAttListDeclaration(sender,locator) - else result:= true; -end; - -function TXmlStandardHandler.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator) - else result:= true; -end; - -function TXmlStandardHandler.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnendIntDtd) then FOnendIntDtd(sender,locator); - if assigned(nextHandler) - then result:= nextHandler.endIntDtd(sender,locator) - else result:= true; -end; - -function TXmlStandardHandler.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - if assigned(nextHandler) - then result:= nextHandler.entityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName) - else result:= true; -end; - -function TXmlStandardHandler.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - if assigned(nextHandler) - then result:= nextHandler.notationDeclaration(sender,locator,aname,pubId,sysId) - else result:= true; -end; - -function TXmlStandardHandler.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -begin - if assigned(FOnParameterEntityDeclaration) then FOnParameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - if assigned(nextHandler) - then result:= nextHandler.parameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId) - else result:= true; -end; - -function TXmlStandardHandler.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - if assigned(nextHandler) - then result:= nextHandler.parameterEntityRef(sender,locator,aname) - else result:= true; -end; - -function TXmlStandardHandler.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - if assigned(nextHandler) - then result:= nextHandler.startAttListDeclaration(sender,locator,aname) - else result:= true; -end; - -function TXmlStandardHandler.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(FOnstartExtDtd) then FOnstartExtDtd(sender,locator,version,encName); - if assigned(nextHandler) - then result:= nextHandler.startExtDtd(sender,locator,version,encName) - else result:= true; -end; - -function TXmlStandardHandler.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnstartIntDtd) then FOnstartIntDtd(sender,locator); - if assigned(nextHandler) - then result:= nextHandler.startIntDtd(sender,locator) - else result:= true; -end; - -function TXmlStandardHandler.resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; -begin - if assigned(nextHandler) - then result:= nextHandler.resolvePE(PEReferenceName,PEValue,error) - else begin - PEValue:= ''; - error:= ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE; - result:= true; - end; -end; - -procedure TXmlStandardHandler.notifyReset; -begin - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// +++++++++++++++++++++++++++++ TXmlHandlerItem +++++++++++++++++++++++++++++ -function TXmlHandlerItem.getXmlHandler: TXmlCustomHandler; -begin - Result := FXmlHandler; -end; - -procedure TXmlHandlerItem.setXmlHandler(Value: TXmlCustomHandler); -begin - FXmlHandler:= Value; -end; - -procedure TXmlHandlerItem.Assign(Source: TPersistent); -begin - if Source is TXmlHandlerItem - then XmlHandler:= TXmlHandlerItem(Source).XmlHandler - else inherited Assign(Source); -end; - - -// +++++++++++++++++++++++++++++++ TXmlHandlers ++++++++++++++++++++++++++++++ -constructor TXmlHandlers.Create(Distributor: TXmlDistributor); -begin - inherited create(TXmlHandlerItem); - FDistributor:= Distributor; -end; - -function TXmlHandlers.GetItem(Index: Integer): TXmlHandlerItem; -begin - result:= TXmlHandlerItem(inherited GetItem(Index)); -end; - -procedure TXmlHandlers.SetItem(Index: Integer; Value: TXmlHandlerItem); -begin - inherited SetItem(Index, Value); -end; - -function TXmlHandlers.GetOwner: TPersistent; -begin - result:= FDistributor; -end; - -function TXmlHandlers.Add: TXmlHandlerItem; -begin - result:= TXmlHandlerItem(inherited Add); -end; - -procedure TXmlHandlers.Assign(Source: TPersistent); -var - i: integer; -begin - if Source = self then exit; - if Source is TStrings then begin - clear; - with TStrings(Source) do - for i:= 0 to pred(count) do - if assigned(Objects[i]) - then if Objects[i] is TXmlCustomHandler - then self.add.XmlHandler:= TXmlCustomHandler(Objects[i]); - end else inherited Assign(Source); -end; - -function TXmlHandlers.FindHandlerItem(AHandler: TXmlCustomHandler): TXmlHandlerItem; -var - i: integer; -begin - for i:= 0 to pred(count) do - begin - result := TXmlHandlerItem(inherited getItem(i)); - if result.FXmlHandler = AHandler then exit; - end; - result:= nil; -end; - - - -// +++++++++++++++++++++++++++++ TXmlDistributor +++++++++++++++++++++++++++++ -constructor TXmlDistributor.create(AOwner: TComponent); -begin - inherited create(AOwner); - FNextHandlers:= TXmlHandlers.create(self); -end; - -destructor TXmlDistributor.destroy; -begin - FNextHandlers.free; - inherited destroy; -end; - -procedure TXmlDistributor.readData(Reader: TReader); -begin - Reader.ReadCollection(nextHandlers); -end; - -procedure TXmlDistributor.writeData(Writer: TWriter); -begin - Writer.WriteCollection(nextHandlers); -end; - -procedure TXmlDistributor.DefineProperties(Filer: TFiler); -begin - inherited DefineProperties(Filer); - Filer.DefineProperty('NextHandlers',readData,writeData,true); -end; - -procedure TXmlDistributor.Notification(AComponent: TComponent; operation: TOperation); -var - handlerItem: TXmlHandlerItem; -begin - inherited notification(AComponent,Operation); - if not (csDestroying in ComponentState) and (Operation = opRemove) then begin - if (AComponent is TXmlCustomHandler) then begin - handlerItem := nextHandlers.FindHandlerItem(TXmlCustomHandler(AComponent)); - if handlerItem <> nil then handlerItem.XmlHandler:= nil; - end; - end; -end; - -procedure TXmlDistributor.setNextHandlers(const value: TXmlHandlers); -begin - FNextHandlers.Assign(Value); -end; - -function TXmlDistributor.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnCDATA) then FOnCDATA(sender,locator,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.CDATA(sender,locator,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnCharRef) then FOnCharRef(sender,locator,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.charRef(sender,locator,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnComment) then FOnComment(sender,locator,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.comment(sender,locator,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnDoctype) then FOnDoctype(sender,locator,aname,pubId,sysId,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.doctype(sender,locator,aname,pubId,sysId,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -var - i: integer; -begin - if assigned(FOnEndDocument) then FOnEndDocument(sender,locator); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endDocument(sender,locator); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -var - i: integer; -begin - if assigned(FOnEndElement) then FOnEndElement(sender,locator,namespaceURI,tagName); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endElement(sender,locator,namespaceURI,tagName); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -var - i: integer; -begin - if assigned(FOnEndPrefixMapping) then FOnEndPrefixMapping(sender,locator,prefix); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endPrefixMapping(sender,locator,prefix); - if not result then break; - end; - end; -end; - -function TXmlDistributor.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - i: integer; -begin - if assigned(FOnEntityRef) then FOnEntityRef(sender,locator,aname); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.entityRef(sender,locator,aname); - if not result then break; - end; - end; -end; - -function TXmlDistributor.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnPCDATA) then FOnPCDATA(sender,locator,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.PCDATA(sender,locator,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -var - i: integer; -begin - if assigned(FOnProcessingInstruction) then FOnProcessingInstruction(sender,locator,targ,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.processingInstruction(sender,locator,targ,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - i: integer; -begin - if assigned(FOnSkippedEntity) then FOnSkippedEntity(sender,locator,aname); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.skippedEntity(sender,locator,aname); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -var - i: integer; -begin - if assigned(FOnStartDocument) then FOnStartDocument(sender,locator,version,encName,sdDl); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startDocument(sender,locator,version,encName,sdDl); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -var - i: integer; -begin - if assigned(FOnStartElement) then FOnStartElement(sender,locator,namespaceURI,tagName,attributes); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startElement(sender,locator,namespaceURI,tagName,attributes); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -var - i: integer; -begin - if assigned(FOnStartPrefixMapping) then FOnStartPrefixMapping(sender,locator,prefix,uri); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startPrefixMapping(sender,locator,prefix,uri); - if not result then break; - end; - end; -end; - -function TXmlDistributor.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -var - i: integer; -begin - if assigned(FOnAttributeDefinition) then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - if not result then break; - end; - end; -end; - -function TXmlDistributor.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.conditionalSection(sender,locator,includeStmt,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnDtdComment) then FOnDtdComment(sender,locator,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.DTDcomment(sender,locator,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -var - i: integer; -begin - if assigned(FOnDtdProcessingInstruction) then FOnDtdProcessingInstruction(sender,locator,targ,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.DTDprocessingInstruction(sender,locator,targ,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -var - i: integer; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.elementTypeDeclaration(sender,locator,aname,data); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -var - i: integer; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endAttListDeclaration(sender,locator); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -var - i: integer; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endExtDtd(sender,locator); - if not result then break; - end; - end; -end; - -function TXmlDistributor.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -var - i: integer; -begin - if assigned(FOnendIntDtd) then FOnendIntDtd(sender,locator); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.endIntDtd(sender,locator); - if not result then break; - end; - end; -end; - -function TXmlDistributor.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -var - i: integer; -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.entityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - if not result then break; - end; - end; -end; - -function TXmlDistributor.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -var - i: integer; -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.notationDeclaration(sender,locator,aname,pubId,sysId); - if not result then break; - end; - end; -end; - -function TXmlDistributor.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -var - i: integer; -begin - if assigned(FOnParameterEntityDeclaration) then FOnParameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.parameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - if not result then break; - end; - end; -end; - -function TXmlDistributor.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - i: integer; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.parameterEntityRef(sender,locator,aname); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - i: integer; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startAttListDeclaration(sender,locator,aname); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encDl: wideString): boolean; -var - i: integer; -begin - if assigned(FOnStartExtDtd) then FOnStartExtDtd(sender,locator,version,encDl); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startExtDtd(sender,locator,version,encDl); - if not result then break; - end; - end; -end; - -function TXmlDistributor.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -var - i: integer; -begin - if assigned(FOnstartIntDtd) then FOnstartIntDtd(sender,locator); - result:= true; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.startIntDtd(sender,locator); - if not result then break; - end; - end; -end; - -function TXmlDistributor.resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; -var - i: integer; -begin - result:= true; - PEValue:= ''; - error:= ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE; - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if not assigned(items[i].XmlHandler) then continue; - result:= items[i].XmlHandler.resolvePE(PEReferenceName,PEValue,error); - if (error = ET_NONE) or not result then break; - end; - end; -end; - -procedure TXmlDistributor.notifyReset; -var - i: integer; -begin - with nextHandlers do begin - for i:= 0 to pred(count) do begin - if assigned(items[i].XmlHandler) - then items[i].XmlHandler.notifyReset; - end; - end; -end; - - - -// +++++++++++++++++++++++++++ TXmlCustomDTDHandler +++++++++++++++++++++++++++ -function TXmlCustomDtdHandler.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomDtdHandler.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - - - -// +++++++++++++++++++++++++ TXmlCustomContentHandler +++++++++++++++++++++++++ -function TXmlCustomContentHandler.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encDl: wideString): boolean; -begin - raise EParserException.create('Parser error.'); -end; - -function TXmlCustomContentHandler.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - raise EParserException.create('Parser error.'); -end; - - - -// +++++++++++++++++++++++++ TXmlCustomReader ++++++++++++++++++++++++++ -constructor TXmlCustomReader.create(AOwner: TComponent); -begin - inherited; - FDOMImpl:= nil; - FNextHandler:= nil; -end; - -procedure TXmlCustomReader.setDomImpl(const impl: TDomImplementation); -begin - FDOMImpl:= impl; - if assigned(impl) - then impl.FreeNotification(Self); -end; - -procedure TXmlCustomReader.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited Notification(AComponent,Operation); - if Operation = opRemove then begin - if AComponent = FNextHandler then FNextHandler:= nil; - if AComponent = FDOMImpl then FDOMImpl:= nil; - end; -end; - -function TXmlCustomReader.sendErrorNotification(const xmlErrorType: TXmlErrorType; - const location: TdomLocator; - const code: wideString): boolean; -var - error: TdomError; -begin - error:= TdomError.createFromLocator(xmlErrorType,location,code); - try - if assigned(FDomImpl) then begin - result:= FDomImpl.handleError(self,error); - end else if error.severity = DOM_SEVERITY_FATAL_ERROR - then result:= false - else result:= true; - - if not result - then if assigned(nextHandler) then nextHandler.notifyReset; - finally - error.free; - end; -end; - - - -// +++++++++++++++++++++++ TXmlWFTestContentHandler +++++++++++++++++++++++ -constructor TXmlWFTestContentHandler.create(AOwner: TComponent); -begin - inherited create(AOwner); - FIsActive:= false; - FDoctypeFound:= false; - FRootFound:= false; - FTestRootFound:= true; - FTagStack:= TdomWideStringList.Create; -end; - -destructor TXmlWFTestContentHandler.destroy; -begin - FTagStack.free; - inherited destroy; -end; - -function TXmlWFTestContentHandler.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCDATA) then FOnCDATA(sender,locator,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlCData(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CDATA_SECTION,locator,''); - end; - - if (not FRootFound) and FTestRootFound and result then begin - result:= sendErrorNotification(sender,ET_NOT_IN_ROOT,locator,data); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.CDATA(sender,locator,data); -end; - -function TXmlWFTestContentHandler.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCharRef) then FOnCharRef(sender,locator,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - try - XmlCharRefToStr(data); - except - on EConvertError do begin - result:= sendErrorNotification(sender,ET_INVALID_CHARREF,locator,data); - end; - end; - - if (not FRootFound) and FTestRootFound and result then begin - result:= sendErrorNotification(sender,ET_NOT_IN_ROOT,locator,data); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.charRef(sender,locator,data); -end; - -function TXmlWFTestContentHandler.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - dataLength: integer; -begin - if assigned(FOnComment) then FOnComment(sender,locator,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if pos('--',data) > 0 then begin - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,'--'); - end else begin - dataLength:= length(data); - if dataLength > 0 - then if WideChar(data[dataLength]) = '-' then begin - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,'-'); - end; - end; - - if result then begin - if not IsXmlChars(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.comment(sender,locator,data); -end; - -function TXmlWFTestContentHandler.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -begin - if assigned(FOnDoctype) then FOnDoctype(sender,locator,aname,pubId,sysId,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if FDoctypeFound then begin - result:= sendErrorNotification(sender,ET_DOUBLE_DOCTYPE,locator,data); - end; - - FDoctypeFound:= true; - - if result then begin - if FRootFound then begin - result:= sendErrorNotification(sender,ET_WRONG_ORDER,locator,data); - end; - end; - - if result then begin - if not (isXmlName(aname) and isXmlPubidChars(pubId) and isXmlSystemChars(sysId) ) then begin - result:= sendErrorNotification(sender,ET_INVALID_DOCTYPE,locator,data); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.doctype(sender,locator,aname,pubId,sysId,data); -end; - -function TXmlWFTestContentHandler.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndDocument) then FOnEndDocument(sender,locator); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FIsActive:= false; - - if FTagStack.Count > 0 then begin - result:= sendErrorNotification(sender,ET_MISSING_END_TAG,locator,''); - end; - - if (not FRootFound) and FTestRootFound and result then begin - result:= sendErrorNotification(sender,ET_NOT_IN_ROOT,locator,''); - end; - - FDoctypeFound:= false; - FRootFound:= false; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endDocument(sender,locator); -end; - -function TXmlWFTestContentHandler.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -var - lastItemIndex: integer; -begin - if assigned(FOnEndElement) then FOnEndElement(sender,locator,namespaceURI,tagName); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlName(tagName) then begin - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_NAME,locator,tagname); - end; - - if result then begin - lastItemIndex:= pred(FTagStack.Count); - if lastItemIndex = -1 then begin - result:= sendErrorNotification(sender,ET_MISSING_START_TAG,locator,tagname); - end else begin - if FTagStack[lastItemIndex] = tagname - then FTagStack.Delete(lastItemIndex) - else begin - result:= sendErrorNotification(sender,ET_MISSING_START_TAG,locator,tagname); - end; - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endElement(sender,locator,namespaceURI,tagName); -end; - -function TXmlWFTestContentHandler.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -begin - if assigned(FOnEndPrefixMapping) then FOnEndPrefixMapping(sender,locator,prefix); - if assigned(nextHandler) - then result:= nextHandler.endPrefixMapping(sender,locator,prefix) - else result:= true; -end; - -function TXmlWFTestContentHandler.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnEntityRef) then FOnEntityRef(sender,locator,aname); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; - - if (not FRootFound) and FTestRootFound and result then begin - result:= sendErrorNotification(sender,ET_NOT_IN_ROOT,locator,'&' + name +';'); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityRef(sender,locator,aname); -end; - -function TXmlWFTestContentHandler.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnPCDATA) then FOnPCDATA(sender,locator,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlCharData(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - - if (not FRootFound) and (not IsXmlS(data)) and FTestRootFound and result then begin - result:= sendErrorNotification(sender,ET_NOT_IN_ROOT,locator,data); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.PCDATA(sender,locator,data); -end; - -function TXmlWFTestContentHandler.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnProcessingInstruction) then FOnProcessingInstruction(sender,locator,targ,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlPITarget(targ) then begin - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,targ); - end else begin - if pos('?>',data) > 0 then begin - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,'?>'); - end; - end; - - if result then begin - if not IsXmlChars(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.processingInstruction(sender,locator,targ,data); -end; - -function TXmlWFTestContentHandler.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnSkippedEntity) then FOnSkippedEntity(sender,locator,aname); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if result - then if assigned(nextHandler) - then result:= nextHandler.skippedEntity(sender,locator,aname); -end; - -function TXmlWFTestContentHandler.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - if assigned(FOnStartDocument) then FOnStartDocument(sender,locator,version,encName,sdDl); - if FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FTagStack.Clear; - FIsActive:= true; - FDoctypeFound:= false; - FRootFound:= false; - if not ( ( IsXmlEncName(encName) or (encName = '') ) and - ( IsXmlVersionNum(version) or (version = '') ) ) - then begin - result:= sendErrorNotification(sender,ET_INVALID_XML_DECL,locator,''); - end; - if result - then if assigned(nextHandler) - then result:= nextHandler.startDocument(sender,locator,version,encName,sdDl); -end; - -function TXmlWFTestContentHandler.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -var - i,j: integer; - name,value,text,characRef,v: wideString; - isEntity: boolean; -begin - if assigned(FOnStartElement) then FOnStartElement(sender,locator,namespaceURI,tagName,attributes); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not IsXmlName(tagName) then begin - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_NAME,locator,tagname); - end; - - if (FTagStack.Count = 0) and FTestRootFound and FRootFound and result then begin - result:= sendErrorNotification(sender,ET_DOUBLE_ROOT_ELEMENT,locator,tagname); - end; - - FRootFound:= true; - FTagStack.Add(tagname); - - if result then begin - for i:= 0 to pred(attributes.length) do begin - value:= attributes.values[i]; - name:= attributes.names[i]; - - if attributes.indexOfName(name) <> i then begin - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_NAME,locator,name); - if not result then break; - end; - - if not IsXmlName(name) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_NAME,locator,value); - if not result then break; - end; - - if pos('&',value) = 0 then begin - if not IsXmlCharData(value) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_VALUE,locator,value); - if not result then break; - end; - end else begin - isEntity:= false; - text:= ''; - for j:= 1 to Length(value) do begin - if IsEntity then begin - if value[j] = ';' then begin - if text[1] = '#' then begin // CharRef - try - CharacRef:= concat(wideString('&'),text,wideString(';')); - v:= XmlCharRefToStr(CharacRef); - except - on EConvertError do begin - result:= sendErrorNotification(sender,ET_INVALID_CHARREF,locator,CharacRef); - if not result then break; - end; - end; {try} - end else begin // EntityRef - if not IsXmlName(text) then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,text); - if not result then break; - end; - end; - text:= ''; - IsEntity:= false; - end else Text:= concat(text,wideString(value[j])); - end else begin - if value[j] = '&' then begin - IsEntity:= true; - end else if (value[j] = '<') or not IsXmlChar(value[j]) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_VALUE,locator,value); - if not result then break; - end; - end; {if ...} - end; {for ...} - - // invalid attribute value? - if result then begin - if IsEntity then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_VALUE,locator,value); - end; {if ...} - end; {if ...} - - end; {if ...} - end; - end; {if result ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.startElement(sender,locator,namespaceURI,tagName,attributes); -end; - -function TXmlWFTestContentHandler.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - if assigned(FOnStartPrefixMapping) then FOnStartPrefixMapping(sender,locator,prefix,uri); - if assigned(nextHandler) - then result:= nextHandler.startPrefixMapping(sender,locator,prefix,uri) - else result:= true; -end; - -procedure TXmlWFTestContentHandler.notifyReset; -begin - FIsActive:= false; - FDoctypeFound:= false; - FRootFound:= false; - FTagStack.clear; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// +++++++++++++++++++++++++ TXmlWFTestDTDHandler +++++++++++++++++++++++++ -constructor TXmlWFTestDTDHandler.create(AOwner: TComponent); -begin - inherited; - FAttListDeclActive:= false; - FExtDtdIsActive:= false; - FIntDtdIsActive:= false; -end; - -destructor TXmlWFTestDTDHandler.destroy; -begin - inherited; -end; - -function TXmlWFTestDTDHandler.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -begin - if assigned(FOnAttributeDefinition) then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result then begin - if not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); -end; - -function TXmlWFTestDTDHandler.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result then begin - if FIntDtdIsActive or ( not ((IncludeStmt = 'INCLUDE') or (IncludeStmt = 'IGNORE')) ) then begin - result:= sendErrorNotification(sender,ET_INVALID_CONDITIONAL_SECTION,locator,name); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.conditionalSection(sender,locator,includeStmt,data); -end; - -function TXmlWFTestDTDHandler.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - dataLength: integer; -begin - if assigned(FOnDTDcomment) then FOnDTDcomment(sender,locator,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - - if pos('--',data) > 0 then begin - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,'--'); - end else begin - dataLength:= length(data); - if dataLength > 0 - then if WideChar(data[dataLength]) = '-' then begin - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,'-'); - end; - end; - - if result then begin - if not IsXmlChars(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDcomment(sender,locator,data); -end; - -function TXmlWFTestDTDHandler.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data: wideString): boolean; -begin - if assigned(FOnDTDprocessingInstruction) then FOnDTDprocessingInstruction(sender,locator,targ,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if not IsXmlPITarget(targ) then begin - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,targ); - end else begin - if pos('?>',data) > 0 then begin - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,'?>'); - end; - end; - - if result and not IsXmlChars(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDprocessingInstruction(sender,locator,targ,data); -end; - -function TXmlWFTestDTDHandler.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result and not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_DECL,locator,name); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.elementTypeDeclaration(sender,locator,aname,data); -end; - -function TXmlWFTestDTDHandler.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if not FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - FAttListDeclActive:= false; - if result - then if assigned(nextHandler) - then result:= nextHandler.endAttListDeclaration(sender,locator); -end; - -function TXmlWFTestDTDHandler.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - if FIntDtdIsActive or not FextDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FExtDtdIsActive:= false; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator); -end; - -function TXmlWFTestDTDHandler.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndIntDtd) then FOnEndIntDtd(sender,locator); - if FExtDtdIsActive or not FIntDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FIntDtdIsActive:= false; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endIntDtd(sender,locator); -end; - -function TXmlWFTestDTDHandler.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -var - error: boolean; -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result then begin - error:= false; - if not IsXmlName(aname) - then error:= true; - if entityValue <> '' then begin - if not IsXmlEntityValueChars(entityValue) - then error:= true; - if not ( (pubId = '') and (sysId = '') ) - then error:= true; - end; - if not isXmlSystemChars(sysId) - then error:= true; - if not isXmlPubidChars(pubId) - then error:= true; - if error then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,aname); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityDeclaration(sender,locator,name,entityValue,pubId,sysId,notaName); -end; - -function TXmlWFTestDTDHandler.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -var - error: boolean; -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result then begin - error:= false; - if not IsXmlName(aname) - then error:= true; - if not isXmlSystemChars(sysId) - then error:= true; - if not isXmlPubidChars(pubId) - then error:= true; - if error then begin - result:= sendErrorNotification(sender,ET_INVALID_NOTATION_DECL,locator,aname); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.notationDeclaration(sender,locator,aname,pubId,sysId); -end; - -function TXmlWFTestDTDHandler.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -var - error: boolean; -begin - if assigned(FOnParameterEntityDeclaration) then FOnParameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result then begin - error:= false; - if not IsXmlName(aname) - then error:= true; - if entityValue <> '' then begin - if not IsXmlEntityValueChars(entityValue) - then error:= true; - if not ( (pubId = '') and (sysId = '') ) - then error:= true; - end; - if not isXmlSystemChars(sysId) - then error:= true; - if not isXmlPubidChars(pubId) - then error:= true; - if error then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,aname); - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); -end; - -function TXmlWFTestDTDHandler.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - if result and not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityRef(sender,locator,aname); -end; - -function TXmlWFTestDTDHandler.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if FAttListDeclActive or not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - - FAttListDeclActive:= true; - if result - then if assigned(nextHandler) - then result:= nextHandler.startAttListDeclaration(sender,locator,aname); -end; - -function TXmlWFTestDTDHandler.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(FOnStartExtDtd) then FOnStartExtDtd(sender,locator,version,encName); - if FIntDtdIsActive or FExtDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FExtDtdIsActive:= true; - - if not ( ( IsXmlEncName(encName) or (encName = '') ) and - ( IsXmlVersionNum(version) or (version = '') ) ) - then begin - result:= sendErrorNotification(sender,ET_INVALID_TEXT_DECL,locator,''); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startExtDtd(sender,locator,version,encName); -end; - -function TXmlWFTestDTDHandler.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnStartIntDtd) then FOnStartIntDtd(sender,locator); - if FIntDtdIsActive or FExtDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FIntDtdIsActive:= true; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startIntDtd(sender,locator); -end; - -procedure TXmlWFTestDTDHandler.notifyReset; -begin - FAttListDeclActive:= false; - FExtDtdIsActive:= false; - FIntDtdIsActive:= false; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// ++++++++++++++++++++++++++++ TXmlDocBuilder ++++++++++++++++++++++++++++ -constructor TXmlDocBuilder.create(AOwner: TComponent); -begin - inherited create(AOwner); - FRefNode:= nil; - FBuildNamespaceTree:= false; - FPrefixUriList:= TdomNameValueList.create; -end; - -destructor TXmlDocBuilder.destroy; -begin - FPrefixUriList.free; - inherited destroy; -end; - -function TXmlDocBuilder.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - newCData: TdomCDATASection; -begin - if assigned(FOnCDATA) then FOnCDATA(sender,locator,data); - result:= true; - if assigned(FRefNode) then begin - try - newCData:= FRefNode.OwnerDocument.CreateCDATASection(data); - try - FRefNode.appendChild(newCData); - except - if assigned(newCData.ParentNode) - then newCData.ParentNode.RemoveChild(newCData); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newCData)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_CDATA_SECTION,locator,data); - end; {try ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.CDATA(sender,locator,data); -end; - -function TXmlDocBuilder.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - newText: TdomText; - previousNode: TdomNode; - value: wideString; - previousNodeIsText: boolean; -begin - if assigned(FOnCharRef) then FOnCharRef(sender,locator,data); - result:= true; - if assigned(FRefNode) then begin - - try - value:= XmlCharRefToStr(data); - except - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; - - if result then begin - previousNode:= FRefNode.LastChild; - if assigned(previousNode) then begin - if (previousNode.NodeType = ntText_Node) - then previousNodeIsText:= true - else previousNodeIsText:= false; - end else previousNodeIsText:= false; - - if previousNodeIsText - then (previousNode as TdomText).appendData(value) - else begin - try - newText:= FRefNode.OwnerDocument.CreateTextNode(value); - try - FRefNode.appendChild(newText); - except - if assigned(newText.ParentNode) - then newText.ParentNode.RemoveChild(newText); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newText)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_CHARREF,locator,data); - end; {try ...} - end; - end; {if not assgined ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.charRef(sender,locator,data); -end; - -function TXmlDocBuilder.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - newComment: TdomComment; -begin - if assigned(FOnComment) then FOnComment(sender,locator,data); - result:= true; - if assigned(FRefNode) then begin - try - newComment:= FRefNode.OwnerDocument.CreateComment(data); - try - FRefNode.appendChild(newComment); - except - if assigned(newComment.ParentNode) - then newComment.ParentNode.RemoveChild(newComment); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newComment)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,data); - end; {try ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.comment(sender,locator,data); -end; - -function TXmlDocBuilder.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -var - newDocType: TdomDocumentType; -begin - if assigned(FOnDoctype) then FOnDoctype(sender,locator,aname,pubId,sysId,data); - result:= true; - if assigned(FRefNode) then begin - try - newDocType:= FRefNode.OwnerDocument.CreateDocumentType(aname,pubId,sysId,data); - try - FRefNode.appendChild(newDocType); - except - if assigned(newDocType.ParentNode) - then newDocType.ParentNode.RemoveChild(newDocType); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newDocType)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_DOCTYPE,locator,data); - end; {try ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.doctype(sender,locator,aname,pubId,sysId,data); -end; - -function TXmlDocBuilder.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndDocument) then FOnEndDocument(sender,locator); - // notifications of endDocument are being ignored. - result:= true; - if assigned(nextHandler) - then result:= nextHandler.endDocument(sender,locator); -end; - -function TXmlDocBuilder.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -begin - if assigned(FOnEndElement) then FOnEndElement(sender,locator,namespaceURI,tagName); - result:= true; - if assigned(FRefNode) then begin - // xxx Evaluate 'FBuildNamespaceTree' and 'namespaceURI' here, too? - if not ( (FRefNode.nodeType = ntElement_Node) and (tagName = FRefNode.NodeName) ) then begin - result:= sendErrorNotification(sender,ET_MISSING_START_TAG,locator,tagname); - end else FRefNode:= FRefNode.ParentNode; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endElement(sender,locator,namespaceURI,tagName); -end; - -function TXmlDocBuilder.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -var - l: integer; -begin - if assigned(FOnEndPrefixMapping) then FOnEndPrefixMapping(sender,locator,prefix); - - l:= pred(FPrefixUriList.length); - if l = -1 then begin - result:= sendErrorNotification(sender,ET_WRONG_PREFIX_MAPPING_NESTING,locator,prefix); - end else begin - if FPrefixUriList.names[l] <> prefix then begin - result:= sendErrorNotification(sender,ET_WRONG_PREFIX_MAPPING_NESTING,locator,prefix); - end else begin - FPrefixUriList.Delete(l); - result:= true; - end; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endPrefixMapping(sender,locator,prefix); -end; - -function TXmlDocBuilder.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - newEntityRef: TdomEntityReference; -begin - if assigned(FOnEntityRef) then FOnEntityRef(sender,locator,aname); - result:= true; - if assigned(FRefNode) then begin - try - newEntityRef:= FRefNode.OwnerDocument.CreateEntityReference(aname); - try - FRefNode.appendChild(newEntityRef); - except - if assigned(newEntityRef.ParentNode) - then newEntityRef.ParentNode.RemoveChild(newEntityRef); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newEntityRef)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; {try ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityRef(sender,locator,aname); -end; - -function TXmlDocBuilder.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - newPcdata: TdomText; -begin - if assigned(FOnPCDATA) then FOnPCDATA(sender,locator,data); - result:= true; - if assigned(FRefNode) then begin - - if (FRefNode.NodeType = ntDocument_Node) then begin - if not IsXmlS(data) then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,name); - end; - end else begin - if assigned(FRefNode.LastChild) and (FRefNode.LastChild.NodeType = ntText_Node) - then (FRefNode.LastChild as TdomText).appendData(data) - else begin - try - newPcdata:= FRefNode.OwnerDocument.CreateTextNode(data); - try - FRefNode.appendChild(newPcdata); - except - if assigned(newPcdata.ParentNode) - then newPcdata.ParentNode.RemoveChild(newPcdata); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newPcdata)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,data); - end; {try ...} - end; - end; {if (FRefNode.NodeType = ntDocument_Node) then ... else ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.PCDATA(sender,locator,data); -end; - -function TXmlDocBuilder.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -var - newPI: TdomProcessingInstruction; -begin - if assigned(FOnProcessingInstruction) then FOnProcessingInstruction(sender,locator,targ,data); - result:= true; - if assigned(FRefNode) then begin - try - newPI:= FRefNode.OwnerDocument.CreateProcessingInstruction(targ,data); - try - FRefNode.appendChild(newPI); - except - if assigned(newPI.ParentNode) - then newPI.ParentNode.RemoveChild(newPI); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newPI)); - raise; - end; - except - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,targ); - end; - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.processingInstruction(sender,locator,targ,data); -end; - -function TXmlDocBuilder.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnSkippedEntity) then FOnSkippedEntity(sender,locator,aname); - // notifications through skippedEntity() are being ignored. - result:= true; - if assigned(nextHandler) - then result:= nextHandler.skippedEntity(sender,locator,aname); -end; - -function TXmlDocBuilder.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - if assigned(FOnStartDocument) then FOnStartDocument(sender,locator,version,encName,sdDl); - FPrefixUriList.clear; - result:= true; - - if assigned(FRefNode) then begin - if (FRefNode.nodeType = ntDocument_Node) then begin - if assigned(locator) // xxx evaluate version, encName and sdDl, too? - then (FRefNode as TdomDocument).systemId:= locator.uri - else (FRefNode as TdomDocument).systemId:= ''; - end; - end; - - if assigned(nextHandler) - then result:= nextHandler.startDocument(sender,locator,version,encName,sdDl); -end; - -function TXmlDocBuilder.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -type - TKindOfToken = (IS_EMPTY,IS_TEXT,IS_REFSTART,IS_CHARREF,IS_ENTITYREF); -var - newElement: TdomElement; - i,j: integer; - prfx,localName,elementNsUri,AttrNsUri,name,value: wideString; - Attri: TdomAttr; - pfxFound: boolean; - kindOfToken: TKindOfToken; - text, reference: TdomCustomStr; -begin - if assigned(FOnStartElement) then FOnStartElement(sender,locator,namespaceURI,tagName,attributes); - result:= true; - elementNsUri:= ''; - if FBuildNamespaceTree then begin - if xmlExtractPrefixAndLocalName(tagName,prfx,localName) then begin - pfxFound:= false; - with FPrefixUriList do begin - for i:= pred(FPrefixUriList.length) downto 0 do - if FPrefixUriList.names[i] = prfx then begin - elementNsUri:= FPrefixUriList.values[i]; - pfxFound:= true; - break; - end; - end; {with ...} - if not pfxFound and (prfx <> '') then begin - result:= sendErrorNotification(sender,ET_NAMESPACE_URI_NOT_FOUND,locator,tagname); - end; - end else begin - result:= sendErrorNotification(sender,ET_INVALID_QUALIFIED_NAME,locator,tagname); - end; {if ... else ...} - end; {if FBuildNamespaceTree ...} - - if result then begin - if assigned(FRefNode) then begin - try - if FBuildNamespaceTree - then newElement:= FRefNode.OwnerDocument.CreateElementNS(elementNsUri,tagName) - else newElement:= FRefNode.OwnerDocument.CreateElement(tagName); - except // xxx not elegant. - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_NAME,locator,tagname); - exit; - end; - - // Compute attributes: - text:= TdomCustomStr.create; - reference:= TdomCustomStr.create; - try - - try - for i:= 0 to pred(attributes.length) do begin - value:= attributes.values[i]; - name:= attributes.names[i]; - prfx:= ''; - attrNsUri:= ''; - - if FBuildNamespaceTree then begin - if xmlExtractPrefixAndLocalName(name,prfx,localName) then begin - if name = 'xmlns' then begin - attrNsUri:= 'http://www.w3.org/2000/xmlns/'; - end else begin - if prfx = '' then begin - attrNsUri:= ''; - end else if prfx = 'xml' then begin - attrNsUri:= 'http://www.w3.org/XML/1998/namespace'; - end else if prfx = 'xmlns' then begin - attrNsUri:= 'http://www.w3.org/2000/xmlns/'; - end else begin - pfxFound:= false; - with FPrefixUriList do begin - for j:= pred(FPrefixUriList.length) downto 0 do begin - if FPrefixUriList.names[j] = prfx then begin - attrNsUri:= FPrefixUriList.values[j]; - pfxFound:= true; - break; - end; {if ...} - end; {for ...} - end; {with ...} - if not pfxFound then begin - result:= sendErrorNotification(sender,ET_NAMESPACE_URI_NOT_FOUND,locator,name); - exit; - end; {if not pfxFound ...} - end; {if prfx = '' ... else ...} - end; {if name = 'xmlns' ...} - end else begin - result:= sendErrorNotification(sender,ET_INVALID_QUALIFIED_NAME,locator,name); - exit; - end; {if... else ...} - end; {if FBuildNamespaceTree ...} - - if result then begin - - if not IsXmlName(name) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_NAME,locator,name); - exit; - end; {if ...} - - if FBuildNamespaceTree then begin - Attri:= newElement.OwnerDocument.CreateAttributeNS(attrNsUri,name); - newElement.SetAttributeNodeNS(Attri); - end else begin - Attri:= newElement.OwnerDocument.CreateAttribute(name); - newElement.SetAttributeNode(Attri); - end; - - kindOfToken:= IS_EMPTY; - text.reset; - for j:= 1 to length(value) do begin - case kindOfToken of - IS_TEXT: - if value[j] = '&' - then kindOfToken:= IS_REFSTART - else text.addWideChar(value[j]); - IS_REFSTART: - if value[j] = '#' then begin - reference.reset; - reference.addWideString('&#'); - kindOfToken:= IS_CHARREF; - end else begin - if text.length > 0 - then Attri.appendChild(newElement.OwnerDocument.CreateTextNode(text.value)); - kindOfToken:= IS_ENTITYREF; - reference.reset; - reference.addWideChar(value[j]); - end; - IS_CHARREF: - if value[j] = ';' then begin - reference.addWideChar(';'); - text.addWideString(XmlCharRefToStr(reference.value)); - kindOfToken:= IS_TEXT; - end else reference.addWideString(value[j]); - IS_ENTITYREF: - if value[j] = ';' then begin - Attri.appendChild(newElement.OwnerDocument.CreateEntityReference(reference.value)); - kindOfToken:= IS_EMPTY; - text.reset; - end else reference.addWideString(value[j]); - IS_EMPTY: - if value[j] = '&' then begin - kindOfToken:= IS_REFSTART; - end else begin - kindOfToken:= IS_TEXT; - text.addWideString(value[j]); - end; - end; {case ...} - end; {for ...} - case kindOfToken of - IS_TEXT: - Attri.appendChild(newElement.OwnerDocument.CreateTextNode(text.value)); - IS_REFSTART, IS_CHARREF, IS_ENTITYREF: begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_VALUE,locator,name); - exit; - end; {if ...} - end; {case ...} - - end; - end; - if assigned(newElement) - then FRefNode.appendChild(newElement); - except - if assigned(newElement.ParentNode) - then newElement.ParentNode.RemoveChild(newElement); - FRefNode.OwnerDocument.FreeAllNodes(TdomNode(newElement)); - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_VALUE,locator,value); - end; {try ...} - - finally - text.Free; - reference.Free; - end; - - if assigned(newElement) - then FRefNode:= newElement; - end; {if assigned(FRefNode) ...} - end; {if result ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.startElement(sender,locator,namespaceURI,tagName,attributes); -end; - -function TXmlDocBuilder.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -const - sQuote: wideString = #$0027; - dQuote: wideString = '"'; -begin - if assigned(FOnStartPrefixMapping) then FOnStartPrefixMapping(sender,locator,prefix,uri); - result:= true; - if ( (prefix = 'xmlns') and (uri <> 'http://www.w3.org/2000/xmlns/') ) - or ( (prefix <> '') and not isXmlPrefix(prefix) ) then begin - result:= sendErrorNotification(sender,ET_INVALID_PREFIX,locator,prefix); - end else begin - if not ( IsXMLAttValue(concat(dQuote,uri,dQuote)) or - IsXMLAttValue(concat(sQuote,uri,sQuote)) ) - then begin - result:= sendErrorNotification(sender,ET_INVALID_NAMESPACE_URI,locator,uri); - end else FPrefixUriList.add(prefix,uri); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startPrefixMapping(sender,locator,prefix,uri) -end; - -procedure TXmlDocBuilder.notifyReset; -begin - FPrefixUriList.clear; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// ++++++++++++++++++++++++++ TXmlDtdBuilder +++++++++++++++++++++++++++ -constructor TXmlDtdBuilder.create(AOwner: TComponent); -begin - inherited create(AOwner); - FReferenceExtCM:= nil; - FReferenceIntCM:= nil; - FRefNode:= nil; - FExtDtdIsActive:= false; - FIntDtdIsActive:= false; -end; - -function TXmlDtdBuilder.resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; - -begin - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - intContentModel.getValueOfPE(PEReferenceName,PEValue,error); - if error <> ET_NONE // xxx Is this correct? What happens if there is an error? - then extContentModel.getValueOfPE(PEReferenceName,PEValue,error); -end; - -procedure TXmlDtdBuilder.ResolveCharRefsAndPERefs(const s: wideString; - var result: wideString; - var error: boolean); -var - i,j,indexpos: integer; - SChar, SChar2: widechar; - name,ref,value: wideString; - content: TdomCustomStr; - errType: TXmlErrorType; -begin - Result:= ''; - Error:= false; - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) - then raise EConvertError.CreateFmt('%S must not start with a UTF-16 low surrogate.',[S]); - if IsUtf16HighSurrogate(SChar) then begin - if i+1 > length(s) - then raise EConvertError.CreateFmt('%S must not end with a UTF-16 high surrogate.',[S]); - inc(i); - content.addWideChar(SChar); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) - then raise EConvertError.CreateFmt('%S contains an UTF-16 high surrogate without its corresponding low surrogate.',[S]); - end; - if not IsXmlChar(sChar) - then raise EConvertError.CreateFmt('%S contains an invalid character.',[S]); - if SChar = '&' then begin {Reference?} - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''&'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlEntityRef(ref) then begin - content.addWideString(ref); - end else if IsXmlCharRef(ref) then begin - content.addWideString(XmlCharRefToStr(ref)); - end else raise EConvertError.CreateFmt('%S contains an invalid reference.',[S]); - i:= j; - end else if SChar = '%' then begin // PEReference? - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''%'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlPEReference(ref) then begin - name:= copy(ref,2,length(ref)-2); - resolvePE(name,value,errType); - if errType <> ET_NONE - then raise EConvertError.CreateFmt('%S contains an invalid parameter entity reference.',[S]); - content.addWideString(value); - end else raise EConvertError.CreateFmt('%S contains an invalid parameter entity reference.',[S]); - i:= j; - end else content.addWideChar(SChar); - inc(i); - end; {while ...} - Result:= content.value; - finally - content.free; - end; -end; - -procedure TXmlDtdBuilder.insertMixedContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); -var - freq, dummy, content,piece: wideString; - separator: integer; - Error: boolean; - newNode: TdomCMNode; -begin - content:= XMLTrunc(contSpec); - freq:= ''; - if (content[length(content)] = '*') then begin - freq:= '*'; - dummy:= copy(content,1,length(content)-1); - content:= dummy; - end; - if length(content) = 0 - then raise EParserException.create('Parser error.'); - if wideChar(content[length(content)]) <> ')' - then raise EParserException.create('Parser error.'); - XMLTruncRoundBrackets(content,dummy,Error); - if Error or (dummy = '') - then raise EParserException.create('Parser error.'); - content:= dummy; - newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMPcdataChoiceParticle); - if content = '#PCDATA' then exit; - if freq = '' then raise EParserException.create('Parser error.'); - separator:= pos(wideString('|'),content); - if separator = 0 then raise EParserException.create('Parser error.'); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - while content <> '' do begin - separator:= pos(wideString('|'),content); - if separator = 0 then begin - piece:= content; - content:= ''; - end else begin - piece:= XMLTrunc(copy(content,1,separator-1)); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - if content = '' then raise EParserException.create('Parser error.'); - end; {if ...} - if not IsXmlName(piece) then raise EParserException.create('Parser error.'); - newNode.appendChild(newNode.OwnerCMObject.CreateCMElementParticle(piece,'')); - end; {while ...} -end; - -procedure TXmlDtdBuilder.insertChildrenContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); -var - piece,dummy,content,freq: wideString; - SeparatorChar: WideChar; - j,i,bracketNr: integer; - newNode: TdomCMNode; - Error: boolean; -begin - content:= XMLTrunc(contSpec); - freq:= ''; - if (content[length(content)] = WideChar('?')) or - (content[length(content)] = WideChar('*')) or - (content[length(content)] = WideChar('+')) then begin - freq:= content[length(content)]; - dummy:= copy(content,1,length(content)-1); - content:= dummy; - end; - if length(content) = 0 - then raise EParserException.create('Parser error.'); - if wideChar(content[length(content)]) <> ')' - then raise EParserException.create('Parser error.'); - XMLTruncRoundBrackets(content,dummy,Error); - if Error or (dummy = '') - then raise EParserException.create('Parser error.'); - content:= dummy; - - bracketNr:= 0; - SeparatorChar:= ','; - for i:= 1 to length(content) do begin - if (content[i] = ',') and (bracketNr = 0) then begin - SeparatorChar:= ','; - break; - end; {if ...} - if (content[i] = '|') and (bracketNr = 0) then begin - SeparatorChar:= '|'; - break; - end; {if ...} - if content[i] = '(' then inc(bracketNr); - if content[i] = ')' then begin - if bracketNr = 0 then raise EParserException.create('Parser error.'); - dec(bracketNr); - end; - end; {for ...} - - if SeparatorChar = ',' - then newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMSequenceParticle(freq)) - else newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMChoiceParticle(freq)); - - bracketNr:= 0; - i:= 0; - j:= 1; - while i < length(content) do begin - inc(i); - if content[i] = '(' then inc(bracketNr); - if content[i] = ')' then begin - if bracketNr = 0 then raise EParserException.create('Parser error.'); - dec(bracketNr); - end; - if ((content[i] = SeparatorChar) and (bracketNr = 0)) or - (i = length(content)) then begin - if bracketNr > 0 then raise EParserException.create('Parser error.'); - if i = length(content) - then piece:= XmlTrunc(copy(content,j,i+1-j)) - else piece:= XmlTrunc(copy(content,j,i-j)); - j:= i+1; - - if piece[1] = '(' then begin - insertChildrenContent(sender,NewNode,piece); - end else begin - freq:= ''; - if (piece[length(piece)] = wideChar('?')) or - (piece[length(piece)] = wideChar('*')) or - (piece[length(piece)] = wideChar('+')) then begin - freq:= piece[length(piece)]; - dummy:= copy(piece,1,length(piece)-1); - piece:= dummy; - end; - if not IsXmlName(piece) - then raise EParserException.create('Parser error.'); - NewNode.appendChild(refNode.OwnerCMObject.CreateCMElementParticle(piece,freq)); - end; {if ...} - - end; {if ...} - end; {while ...} - -end; - -procedure TXmlDtdBuilder.insertNotationOrEnumerationContent(const sender: TXmlCustomReader; - const refCMAttrDefinition: TdomCMAttrDefinition; - const contSpec: wideString); -var - dummy,content,piece: wideString; - separator: integer; - Error: boolean; -begin - XMLTruncRoundBrackets(contSpec,content,Error); - if Error or (content = '') - then raise EParserException.create('Parser error.'); - while content <> '' do begin - separator:= pos(wideString('|'),content); - if separator = 0 then begin - piece:= content; - content:= ''; - end else begin - piece:= XMLTrunc(copy(content,1,separator-1)); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - if content = '' then raise EParserException.create('Parser error.'); - end; {if ...} - if refCMAttrDefinition.attributeType = 'NOTATION' then begin - if not IsXmlName(piece) then raise EParserException.create('Parser error.'); - refCMAttrDefinition.appendChild(refCMAttrDefinition.OwnerCMObject.CreateCMNameParticle(piece)); - end else begin - if not IsXmlNmtoken(piece) then raise EParserException.create('Parser error.'); - refCMAttrDefinition.appendChild(refCMAttrDefinition.OwnerCMObject.CreateCMNmtokenParticle(piece)); - end; - end; {while ...} -end; - -function TXmlDtdBuilder.getExtContentModel: TdomCMExternalObject; -begin - Result:= FReferenceExtCM; -end; - -function TXmlDtdBuilder.getIntContentModel: TdomCMInternalObject; -begin - Result:= FReferenceIntCM; -end; - -procedure TXmlDtdBuilder.setExtContentModel(const cm: TdomCMExternalObject); -begin - if FExtDtdIsActive - then raise EParserException.Create('TXmlDtdBuilder -- external DTD is active.'); - FReferenceExtCM:= cm; -end; - -procedure TXmlDtdBuilder.setIntContentModel(const cm: TdomCMInternalObject); -begin - if FIntDtdIsActive - then raise EParserException.Create('TXmlDtdBuilder -- internal DTD is active.'); - FReferenceIntCM:= cm; -end; - -function TXmlDtdBuilder.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -var - newAttDef: TdomCMAttrDefinition; -begin - if assigned(FOnAttributeDefinition) then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - if not (FRefNode.nodeType = ctAttributeList) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end else begin - try - newAttDef:= FRefNode.OwnerCMObject.CreateCMAttributeDefinition(aname,attType,defaultDecl,attValue); - try - if Bracket <> '' - then insertNotationOrEnumerationContent(sender,newAttDef,Bracket); - // xxx no well-formedness testing is performed for 'Bracket' - FRefNode.appendChild(newAttDef); - except - if assigned(newAttDef.ParentNode) - then newAttDef.ParentNode.RemoveChild(newAttDef); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newAttDef)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end; {try ...} - end; {if ... else ...} - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); -end; - -function TXmlDtdBuilder.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - newComment: TdomCMComment; -begin - if assigned(FOnDTDcomment) then FOnDTDcomment(sender,locator,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FRefNode) then begin - try - newComment:= FRefNode.OwnerCMObject.CreateCMComment(data); - try - FRefNode.appendChild(newComment); - except - if assigned(newComment.ParentNode) - then newComment.ParentNode.RemoveChild(newComment); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newComment)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_COMMENT,locator,data); - end; {try ...} - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDcomment(sender,locator,data); -end; - -function TXmlDtdBuilder.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -var - parser: TXmlToDomParser; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - try - if (IncludeStmt = 'INCLUDE') and (data <> '') then begin - parser:= TXmlToDomParser.create(sender); - parser.domImpl:= FRefNode.OwnerCMObject.domImplementation; - try - if assigned(locator) - then parser.extDtdWideStringToDom(data,'',locator.uri,FRefNode) - else parser.extDtdWideStringToDom(data,'','',FRefNode); - finally - parser.free; - end; {try ...} - end; {if ...} - except - result:= sendErrorNotification(sender,ET_INVALID_CONDITIONAL_SECTION,locator,name); - end; {try ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.conditionalSection(sender,locator,includeStmt,data); -end; - -function TXmlDtdBuilder.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -var - contSpec: wideString; - contspecType: TdomContentspecType; - newElementTypeDecl: TdomCMElementTypeDeclaration; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - - contSpec:= XMLTrunc(data); - contspecType:= ctChildren; - if contSpec = 'EMPTY' - then contspecType:= ctEmpty - else if contSpec = 'ANY' - then contspecType:= ctAny - else if pos('#PCDATA',contSpec) > 0 - then contspecType:= ctMixed; - try - newElementTypeDecl:= FRefNode.OwnerCMObject.CreateCMElementTypeDeclaration(aname,contspecType); - try - FRefNode.appendChild(newElementTypeDecl); - except - if assigned(newElementTypeDecl.ParentNode) - then newElementTypeDecl.ParentNode.RemoveChild(newElementTypeDecl); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newElementTypeDecl)); - raise; - end; {try ...} - try - case contspecType of - ctMixed: insertMixedContent(sender,newElementTypeDecl,contSpec); - ctChildren: insertChildrenContent(sender,newElementTypeDecl,contSpec); - end; {case ...} - except - FRefNode.RemoveChild(newElementTypeDecl); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newElementTypeDecl)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_DECL,locator,aname); - end; {try ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.elementTypeDeclaration(sender,locator,aname,data); -end; - -function TXmlDtdBuilder.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - if not (FRefNode.nodeType = ctAttributeList) then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else FRefNode:= FRefNode.ParentNode; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endAttListDeclaration(sender,locator); -end; - -function TXmlDtdBuilder.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - if FIntDtdIsActive or not FExtDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FExtDtdIsActive:= false; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator); -end; - -function TXmlDtdBuilder.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndIntDtd) then FOnEndIntDtd(sender,locator); - if FExtDtdIsActive or not FIntDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FIntDtdIsActive:= false; - - if result - then if assigned(nextHandler) - then result:= nextHandler.endIntDtd(sender,locator); -end; - -function TXmlDtdBuilder.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -var - newEntDecl: TdomCMEntityDeclaration; -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - - try - if (pubId = '') and (sysId = '') and (notaName = '') then begin - newEntDecl:= FRefNode.OwnerCMObject.CreateCMIntEntityDeclaration(aname,entityValue); - end else begin - if notaName = '' - then newEntDecl:= FRefNode.OwnerCMObject.CreateCMExtEntityDeclaration(aname,pubId,sysId) - else newEntDecl:= FRefNode.OwnerCMObject.CreateCMExtUnparsedEntityDeclaration(aname,pubId,sysId,notaName); - end; - try - FRefNode.appendChild(newEntDecl); - except - if assigned(newEntDecl) then begin - if assigned(newEntDecl.ParentNode) - then newEntDecl.ParentNode.RemoveChild(newEntDecl); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newEntDecl)); - end; - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,aname); - end; {try ...} - - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); -end; - -function TXmlDtdBuilder.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -var - newNotaDecl: TdomCMNotationDeclaration; -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - try - newNotaDecl:= FRefNode.OwnerCMObject.CreateCMNotationDeclaration(aname,pubId,sysId); - try - FRefNode.appendChild(newNotaDecl); - except - if assigned(newNotaDecl) then begin - if assigned(newNotaDecl.ParentNode) - then newNotaDecl.ParentNode.RemoveChild(newNotaDecl); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newNotaDecl)); - end; - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_NOTATION_DECL,locator,aname); - end; {try ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.notationDeclaration(sender,locator,aname,pubId,sysId); -end; - -function TXmlDtdBuilder.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -var - newParamEntDecl: TdomCMParameterEntityDeclaration; -begin - if assigned(FOnParameterEntityDeclaration) then FOnParameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if FExtDtdIsActive then begin - if extContentModel.hasPEDeclaration(aname) - then result:= sendErrorNotification(sender,ET_DOUBLE_PARAMETER_ENTITY_DECL,locator,aname); - end else if FIntDtdIsActive then begin - if intContentModel.hasPEDeclaration(aname) - then result:= sendErrorNotification(sender,ET_DOUBLE_PARAMETER_ENTITY_DECL,locator,aname); - end; - - if result then begin - if assigned(FRefNode) then begin - try - if (pubId = '') and (sysId = '') - then newParamEntDecl:= FRefNode.OwnerCMObject.CreateCMIntParameterEntityDeclaration(aname,entityValue) - else newParamEntDecl:= FRefNode.OwnerCMObject.CreateCMExtParameterEntityDeclaration(aname,pubId,sysId); - try - FRefNode.appendChild(newParamEntDecl); - except - if assigned(newParamEntDecl) then begin - if assigned(newParamEntDecl.ParentNode) - then newParamEntDecl.ParentNode.RemoveChild(newParamEntDecl); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newParamEntDecl)); - end; - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,aname); - end; {try ...} - end; {if ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); -end; - -function TXmlDtdBuilder.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -const - SPACE: wideString = #$0020; -var - error: TXmlErrorType; - error2: boolean; - newParamEntRef: TdomCMParameterEntityReference; - parser: TXmlToDomParser; - replText, value: wideString; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - - if FIntDtdIsActive then begin - newParamEntRef:= FRefNode.OwnerCMObject.CreateCMParameterEntityReference(aname); - try - FRefNode.appendChild(newParamEntRef); - except - if assigned(newParamEntRef.ParentNode) - then newParamEntRef.ParentNode.RemoveChild(newParamEntRef); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newParamEntRef)); - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; {try ...} - end; - - if FExtDtdIsActive then begin - resolvePE(aname,value,error); - if error = ET_NONE then begin - try - ResolveCharRefsAndPERefs(value,replText,error2); - except - error2:= true; - end; - if error2 then begin - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,aname); - end else begin - - try - parser:= TXmlToDomParser.create(sender); - parser.domImpl:= FRefNode.OwnerCMObject.domImplementation; - try - if assigned(locator) - then parser.extDtdWideStringToDom(concat(SPACE,replText,SPACE),'',locator.uri,FRefNode) - else parser.extDtdWideStringToDom(concat(SPACE,replText,SPACE),'','',FRefNode); - // SPACE is required by XML 1.0 Spec, § 4.4.8 - finally - parser.free; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; {try ...} - - end; {if ... else ...} - end else begin - result:= sendErrorNotification(sender,error,locator,aname); - end; - end; {if FExtDtdIsActive ...} - - end; {if ...} - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityRef(sender,locator,aname); -end; - -function TXmlDtdBuilder.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -var - newPI: TdomCMProcessingInstruction; -begin - if assigned(FOnDTDprocessingInstruction) then FOnDTDprocessingInstruction(sender,locator,targ,data); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - try - newPI:= FRefNode.OwnerCMObject.CreateCMProcessingInstruction(targ,data); - try - FRefNode.appendChild(newPI); - except - if assigned(newPI.ParentNode) - then newPI.ParentNode.RemoveChild(newPI); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newPI)); - raise; - end; - except - result:= sendErrorNotification(sender,ET_INVALID_PROCESSING_INSTRUCTION,locator,targ); - end; - end; {if assigned(FRefNode) ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDprocessingInstruction(sender,locator,targ,data); -end; - -function TXmlDtdBuilder.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -var - newAttList: TdomCMAttrList; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - if not (FExtDtdIsActive or FIntDtdIsActive) then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FRefNode) then begin - try - newAttList:= FRefNode.OwnerCMObject.CreateCMAttributeList(aname); - try - FRefNode.appendChild(newAttList); - except - if assigned(newAttList.ParentNode) - then newAttList.ParentNode.RemoveChild(newAttList); - FRefNode.OwnerCMObject.FreeAllCMNodes(TdomCMNode(newAttList)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end; {try ...} - FRefNode:= newAttList; - - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.startAttListDeclaration(sender,locator,aname); -end; - -function TXmlDtdBuilder.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(FOnStartExtDtd) then FOnStartExtDtd(sender,locator,version,encName); - if FIntDtdIsActive or FExtDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FExtDtdIsActive:= true; - - FRefNode:= FReferenceExtCM; - if assigned(FReferenceExtCM) then begin - FReferenceExtCM.publicId:= ''; - if assigned(locator) - then FReferenceExtCM.systemId:= locator.uri - else FReferenceExtCM.systemId:= ''; - FReferenceExtCM.version:= version; - FReferenceExtCM.encoding:= encName; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startExtDtd(sender,locator,version,encName); -end; - -function TXmlDtdBuilder.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnStartIntDtd) then FOnStartIntDtd(sender,locator); - if FIntDtdIsActive or FExtDtdIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FIntDtdIsActive:= true; - - FRefNode:= FReferenceIntCM; - if assigned(FReferenceIntCM) then begin - if assigned(locator) - then FReferenceIntCM.publicId:= '' - else FReferenceIntCM.systemId:= locator.uri; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startIntDtd(sender,locator); -end; - -procedure TXmlDtdBuilder.notifyReset; -begin - FRefNode:= nil; - FExtDtdIsActive:= false; - FIntDtdIsActive:= false; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// ++++++++++++++++++++++++++ TXmlCMBuilder +++++++++++++++++++++++++++ -constructor TXmlCMBuilder.create(AOwner: TComponent); -begin - inherited create(AOwner); - FContentModel:= nil; - FIsActive:= false; -end; - -procedure TXmlCMBuilder.CDataNormalization(const s: wideString; - var result: wideString; - var error: boolean); -const - TAB: WideChar = #$9; // Horizontal Tabulation - LF: WideChar = #$A; // Line Feed - CR: WideChar = #$D; // Carriage Return - SPACE: WideChar = #$20; // ' ' -var - i,j,indexpos: integer; - SChar, SChar2: widechar; - name,ref: wideString; - content: TdomCustomStr; - Entity: TdomCMEntity; -begin - Result:= ''; - Error:= false; - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) - then raise EConvertError.CreateFmt('%S must not start with a UTF-16 low surrogate.',[S]); - if IsUtf16HighSurrogate(SChar) then begin - if i+1 > length(s) - then raise EConvertError.CreateFmt('%S must not end with a UTF-16 high surrogate.',[S]); - inc(i); - content.addWideChar(SChar); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) - then raise EConvertError.CreateFmt('%S contains an UTF-16 high surrogate without its corresponding low surrogate.',[S]); - end; - if not IsXmlChar(sChar) - then raise EConvertError.CreateFmt('%S contains an invalid character.',[S]); - if SChar = '&' then begin // Reference? - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''&'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlEntityRef(ref) then begin - name:= copy(ref,2,length(ref)-2); - Entity:= FContentModel.Entities.GetNamedItem(name); - if assigned(Entity) then begin - try - content.addWideString(Entity.normalizedValue); - except - error:= true; - end; - end else begin - content.addWideString(ref); - error:= true; - end; - end else if IsXmlCharRef(ref) then begin - content.addWideString(XmlCharRefToStr(ref)); - end else raise EConvertError.CreateFmt('%S contains an invalid reference.',[S]); - i:= j; - end else if (SChar = TAB) or (SChar = LF) or (SChar = CR) // White space? - then content.addWideChar(SPACE) - else content.addWideChar(SChar); - inc(i); - end; {while ...} - Result:= content.value; - finally - content.free; - end; -end; - -function TXmlCMBuilder.getContentModel: TdomCMObject; -begin - Result:= FContentModel; -end; - -procedure TXmlCMBuilder.insertMixedContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); -var - freq, dummy, content,piece: wideString; - separator: integer; - Error: boolean; - newNode: TdomCMNode; -begin - content:= XMLTrunc(contSpec); - freq:= ''; - if (content[length(content)] = '*') then begin - freq:= '*'; - dummy:= copy(content,1,length(content)-1); - content:= dummy; - end; - if length(content) = 0 - then raise EParserException.create('Parser error.'); - if wideChar(content[length(content)]) <> ')' - then raise EParserException.create('Parser error.'); - XMLTruncRoundBrackets(content,dummy,Error); - if Error or (dummy = '') - then raise EParserException.create('Parser error.'); - content:= dummy; - newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMPcdataChoiceParticle); - if content = '#PCDATA' then exit; - if freq = '' then raise EParserException.create('Parser error.'); - separator:= pos(wideString('|'),content); - if separator = 0 then raise EParserException.create('Parser error.'); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - while content <> '' do begin - separator:= pos(wideString('|'),content); - if separator = 0 then begin - piece:= content; - content:= ''; - end else begin - piece:= XMLTrunc(copy(content,1,separator-1)); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - if content = '' then raise EParserException.create('Parser error.'); - end; {if ...} - if not IsXmlName(piece) then raise EParserException.create('Parser error.'); - newNode.appendChild(newNode.OwnerCMObject.CreateCMElementParticle(piece,'')); - end; {while ...} -end; - -procedure TXmlCMBuilder.insertChildrenContent(const sender: TXmlCustomReader; - const refNode: TdomCMNode; - const contSpec: wideString); -var - piece,dummy,content,freq: wideString; - SeparatorChar: WideChar; - j,i,bracketNr: integer; - newNode: TdomCMNode; - Error: boolean; -begin - content:= XMLTrunc(contSpec); - freq:= ''; - if (content[length(content)] = WideChar('?')) or - (content[length(content)] = WideChar('*')) or - (content[length(content)] = WideChar('+')) then begin - freq:= content[length(content)]; - dummy:= copy(content,1,length(content)-1); - content:= dummy; - end; - if length(content) = 0 - then raise EParserException.create('Parser error.'); - if wideChar(content[length(content)]) <> ')' - then raise EParserException.create('Parser error.'); - XMLTruncRoundBrackets(content,dummy,Error); - if Error or (dummy = '') - then raise EParserException.create('Parser error.'); - content:= dummy; - - bracketNr:= 0; - SeparatorChar:= ','; - for i:= 1 to length(content) do begin - if (content[i] = ',') and (bracketNr = 0) then begin - SeparatorChar:= ','; - break; - end; {if ...} - if (content[i] = '|') and (bracketNr = 0) then begin - SeparatorChar:= '|'; - break; - end; {if ...} - if content[i] = '(' then inc(bracketNr); - if content[i] = ')' then begin - if bracketNr = 0 then raise EParserException.create('Parser error.'); - dec(bracketNr); - end; - end; {for ...} - - if SeparatorChar = ',' - then newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMSequenceParticle(freq)) - else newNode:= refNode.appendChild(refNode.OwnerCMObject.CreateCMChoiceParticle(freq)); - - bracketNr:= 0; - i:= 0; - j:= 1; - while i < length(content) do begin - inc(i); - if content[i] = '(' then inc(bracketNr); - if content[i] = ')' then begin - if bracketNr = 0 then raise EParserException.create('Parser error.'); - dec(bracketNr); - end; - if ((content[i] = SeparatorChar) and (bracketNr = 0)) or - (i = length(content)) then begin - if bracketNr > 0 then raise EParserException.create('Parser error.'); - if i = length(content) - then piece:= XmlTrunc(copy(content,j,i+1-j)) - else piece:= XmlTrunc(copy(content,j,i-j)); - j:= i+1; - - if piece[1] = '(' then begin - insertChildrenContent(sender,NewNode,piece); - end else begin - freq:= ''; - if (piece[length(piece)] = wideChar('?')) or - (piece[length(piece)] = wideChar('*')) or - (piece[length(piece)] = wideChar('+')) then begin - freq:= piece[length(piece)]; - dummy:= copy(piece,1,length(piece)-1); - piece:= dummy; - end; - if not IsXmlName(piece) - then raise EParserException.create('Parser error.'); - NewNode.appendChild(refNode.OwnerCMObject.CreateCMElementParticle(piece,freq)); - end; {if ...} - - end; {if ...} - end; {while ...} - -end; - -procedure TXmlCMBuilder.insertNotationOrEnumerationContent(const sender: TXmlCustomReader; - const refCMAttribute: TdomCMAttribute; - const contSpec: wideString); -var - dummy,content,piece: wideString; - separator: integer; - Error: boolean; -begin - XMLTruncRoundBrackets(contSpec,content,Error); - if Error or (content = '') - then raise EParserException.create('Parser error.'); - while content <> '' do begin - separator:= pos(wideString('|'),content); - if separator = 0 then begin - piece:= content; - content:= ''; - end else begin - piece:= XMLTrunc(copy(content,1,separator-1)); - dummy:= XMLTrunc(copy(content,separator+1,length(content)-separator)); - content:= dummy; - if content = '' then raise EParserException.create('Parser error.'); - end; {if ...} - if refCMAttribute.attributeType = 'NOTATION' then begin - if not IsXmlName(piece) then raise EParserException.create('Parser error.'); - refCMAttribute.appendChild(refCMAttribute.OwnerCMObject.CreateCMNameParticle(piece)); - end else begin - if not IsXmlNmtoken(piece) then raise EParserException.create('Parser error.'); - refCMAttribute.appendChild(refCMAttribute.OwnerCMObject.CreateCMNmtokenParticle(piece)); - end; - end; {while ...} -end; - -procedure TXmlCMBuilder.resolveCharRefsAndPERefs(const s: wideString; - var result: wideString; - var error: boolean); -var - i,j,indexpos: integer; - SChar, SChar2: widechar; - name,ref,value: wideString; - content: TdomCustomStr; - errType: TXmlErrorType; -begin - Result:= ''; - Error:= false; - content:= TdomCustomStr.create; - try - i:= 1; - while i <= length(S) do begin - SChar:= WideChar((PWideChar(S)+i-1)^); - if IsUtf16LowSurrogate(sChar) - then raise EConvertError.CreateFmt('%S must not start with a UTF-16 low surrogate.',[S]); - if IsUtf16HighSurrogate(SChar) then begin - if i+1 > length(s) - then raise EConvertError.CreateFmt('%S must not end with a UTF-16 high surrogate.',[S]); - inc(i); - content.addWideChar(SChar); - SChar:= WideChar((PWideChar(S)+i-1)^); - if not IsUtf16LowSurrogate(SChar) - then raise EConvertError.CreateFmt('%S contains an UTF-16 high surrogate without its corresponding low surrogate.',[S]); - end; - if not IsXmlChar(sChar) - then raise EConvertError.CreateFmt('%S contains an invalid character.',[S]); - if SChar = '&' then begin {Reference?} - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''&'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlEntityRef(ref) then begin - content.addWideString(ref); - end else if IsXmlCharRef(ref) then begin - content.addWideString(XmlCharRefToStr(ref)); - end else raise EConvertError.CreateFmt('%S contains an invalid reference.',[S]); - i:= j; - end else if SChar = '%' then begin {PEReference?} - indexpos:= -1; - for j:= i+1 to length(S) do begin - SChar2:= WideChar((PWideChar(S)+j-1)^); - if SChar2 = ';' then begin indexpos:= j; break; end; - end; - if indexpos = -1 - then raise EConvertError.CreateFmt('%S contains an ''%'' without a '';''.',[S]); - ref:= copy(S,i,j-i+1); - if IsXmlPEReference(ref) then begin - name:= copy(ref,2,length(ref)-2); - resolvePE(name,value,errType); - if errType <> ET_NONE - then raise EConvertError.CreateFmt('%S contains an invalid parameter entity reference.',[S]); - content.addWideString(value); - end else raise EConvertError.CreateFmt('%S contains an invalid parameter entity reference.',[S]); - i:= j; - end else content.addWideChar(SChar); - inc(i); - end; {while ...} - Result:= content.value; - finally - content.free; - end; -end; - -procedure TXmlCMBuilder.setContentModel(const cm: TdomCMObject); -begin - if FIsActive - then raise EParserException.Create('TXmlCMBuilder -- Content Model is active.'); - FContentModel:= cm; -end; - -function TXmlCMBuilder.resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; -begin - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FContentModel.getValueOfPE(PEReferenceName,PEValue,error); -end; - -function TXmlCMBuilder.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -const - LT: WideChar = #60; // '<' -var - error: boolean; - newCMAttribute: TdomCMAttribute; - replText: wideString; -begin - if assigned(FOnAttributeDefinition) - then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName = '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end else begin - - if assigned(FContentModel.attributes.GetNamedItem(FCurrentAttListName,aname)) then begin - result:= sendErrorNotification(sender,ET_DOUBLE_ATTDEF,locator,aname); - end else begin - try - CDataNormalization(attValue,replText,error); - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_DECL,locator,attValue); - end; {try ...} - - if result and error then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end; - - // WFC: No < in Attribute Values (XML 1.0, § 3.3.2) - if result and (pos(LT,replText) > 0) then begin - result:= sendErrorNotification(sender,ET_LT_IN_ATTRIBUTE_VALUE,locator,aname); - end; - - if result then begin - newCMAttribute:= FContentModel.CreateCMAttribute(FCurrentAttListName,aname,attType,defaultDecl,replText); - try - if Bracket <> '' - then insertNotationOrEnumerationContent(sender,newCMAttribute,Bracket); - // xxx no well-formedness testing is performed for 'Bracket' - except - FContentModel.FreeAllCMNodes(TdomCMNode(newCMAttribute)); - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,aname); - end; {try ...} - if assigned(newCMAttribute) - then FContentModel.Attributes.appendNamedItem(newCMAttribute); - end; {if ...} - end; {if ... else ...} - end; {if ... else ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); -end; - -function TXmlCMBuilder.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnDTDcomment) then FOnDTDcomment(sender,locator,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FContentModel) and (FCurrentAttListName <> '') then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDcomment(sender,locator,data); -end; - -function TXmlCMBuilder.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - - if assigned(FContentModel) and (FCurrentAttListName <> '') then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.conditionalSection(sender,locator,includeStmt,data); -end; - -function TXmlCMBuilder.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -var - contSpec: wideString; - contspecType: TdomContentspecType; - newElementTypeDecl: TdomCMElementTypeDeclaration; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else if not IsXmlName(aname) then begin - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_DECL,locator,aname); - end else if assigned(FContentModel.elementTypes.GetNamedItem(aname)) then begin - result:= sendErrorNotification(sender,ET_DUPLICATE_ELEMENT_TYPE_DECL,locator,aname); - end else begin - contSpec:= XMLTrunc(data); - contspecType:= ctChildren; - if contSpec = 'EMPTY' - then contspecType:= ctEmpty - else if contSpec = 'ANY' - then contspecType:= ctAny - else if pos('#PCDATA',contSpec) > 0 - then contspecType:= ctMixed; - try - newElementTypeDecl:= FContentModel.CreateCMElementTypeDeclaration(aname,contspecType); - try - case contspecType of - ctMixed: insertMixedContent(sender,newElementTypeDecl,contSpec); - ctChildren: insertChildrenContent(sender,newElementTypeDecl,contSpec); - end; {case ...} - FContentModel.elementTypes.setNamedItem(newElementTypeDecl); - except - FContentModel.FreeAllCMNodes(TdomCMNode(newElementTypeDecl)); - raise; - end; {try ...} - except - result:= sendErrorNotification(sender,ET_INVALID_ELEMENT_DECL,locator,aname); - end; {try ...} - end; - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.elementTypeDeclaration(sender,locator,aname,data); -end; - -function TXmlCMBuilder.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName = '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,FCurrentAttListName); - end; - FCurrentAttListName:= ''; - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.endAttListDeclaration(sender,locator); -end; - -function TXmlCMBuilder.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else begin - FIsActive:= false; - end; - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator); -end; - -function TXmlCMBuilder.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else begin - FIsActive:= false; - end; - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator); -end; - -function TXmlCMBuilder.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - literalValue, - pubId, - sysId, - notaName: wideString): boolean; -var - newEntity: TdomCMEntity; -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,literalValue,pubId,sysId,notaName); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else begin - - if assigned(FContentModel.Entities.GetNamedItem(aname)) then begin - result:= sendErrorNotification(sender,ET_DOUBLE_ENTITY_DECL,locator,aname); - end else begin - if notaName = '' then begin - if (pubId = '') and (sysId = '') then begin - - // Entity is internal - newEntity:= FContentModel.createCMIntEntity(aname,literalValue); - FContentModel.Entities.appendNamedItem(newEntity); - if newEntity.isUnusable - then result:= sendErrorNotification(sender,ET_UNUSABLE_ENTITY_DECL,locator,aname); - - end else begin - - // Entity is external parsed - newEntity:= FContentModel.createCMExtParsedEntity(aname,pubId,sysId); - FContentModel.Entities.appendNamedItem(newEntity); - - end; {if ... else ...} - end else begin - - // Entity is external unparsed - newEntity:= FContentModel.createCMExtUnparsedEntity(aname,pubId,sysId,notaName); - FContentModel.Entities.appendNamedItem(newEntity); - - end; {if notaName <> '' ... else ...} - end; {if assigned ... else ...} - - end; {if ... else ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityDeclaration(sender,locator,aname,literalValue,pubId,sysId,notaName); -end; - -function TXmlCMBuilder.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -var - newNotation: TdomCMNotation; -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else begin - if assigned(FContentModel.Notations.GetNamedItem(aname)) then begin - result:= sendErrorNotification(sender,ET_DUPLICATE_NOTATION_DECL,locator,aname); - end else begin - try - newNotation:= FContentModel.CreateCMNotation(aname,pubId,sysId); - FContentModel.Notations.SetNamedItem(newNotation); - except - result:= sendErrorNotification(sender,ET_INVALID_NOTATION_DECL,locator,aname); - end; {try ...} - end; - end; {if ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.notationDeclaration(sender,locator,aname,pubId,sysId); -end; - -function TXmlCMBuilder.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -const - SPACE: wideString = #$0020; -var - dtdAnalyzer: TXmlCMAnalyzer; - error: TXmlErrorType; - error2: boolean; - replText,value: wideString; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end else begin - - resolvePE(aname,value,error); - if error = ET_NONE then begin - - try - ResolveCharRefsAndPERefs(value,replText,error2); - if error2 then begin - result:= sendErrorNotification(sender,ET_ENTITY_DECL_NOT_FOUND,locator,aname); - end else begin - dtdAnalyzer:= TXmlCMAnalyzer.create(nil); - if assigned(sender) - then dtdAnalyzer.DOMImpl:= sender.domImpl; - try - try - dtdAnalyzer.analyzeIntDTDStr(replText,FContentModel); - finally - dtdAnalyzer.free; - end; - except - result:= sendErrorNotification(sender,ET_INVALID_ENTITY_NAME,locator,aname); - end; - end; - except - result:= sendErrorNotification(sender,ET_ENTITY_DECL_NOT_FOUND,locator,aname); - end; {try ...} - - end else begin - result:= sendErrorNotification(sender,error,locator,aname); - end; - - end; {if ... else ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityRef(sender,locator,aname); -end; - -function TXmlCMBuilder.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnDTDprocessingInstruction) then FOnDTDprocessingInstruction(sender,locator,targ,data); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) and (FCurrentAttListName <> '') then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,''); - end; - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDprocessingInstruction(sender,locator,targ,data); -end; - -function TXmlCMBuilder.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - if not FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - if assigned(FContentModel) then begin - if FCurrentAttListName <> '' then begin - result:= sendErrorNotification(sender,ET_INVALID_ATTRIBUTE_DECL,locator,FCurrentAttListName); - end else begin - FCurrentAttListName:= aname; - end; {if ... else ...} - end; {if ...} - - if result - then if assigned(nextHandler) - then result:= nextHandler.startAttListDeclaration(sender,locator,aname); -end; - -function TXmlCMBuilder.startExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(FOnStartExtDtd) then FOnStartExtDtd(sender,locator,version,encName); - if FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FCurrentAttListName:= ''; - FIsActive:= true; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startExtDtd(sender,locator,version,encName); -end; - -function TXmlCMBuilder.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnStartIntDtd) then FOnStartIntDtd(sender,locator); - if FIsActive then begin - raise EParserException.create('Internal Parser Exception'); - end; - result:= true; - FCurrentAttListName:= ''; - FIsActive:= true; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startIntDtd(sender,locator); -end; - -procedure TXmlCMBuilder.notifyReset; -begin - FCurrentAttListName:= ''; - FIsActive:= false; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// ++++++++++++++++++++++++ TXmlStreamBuilder ++++++++++++++++++++++++++ -constructor TXmlStreamBuilder.create(aOwner: TComponent); -begin - inherited; - FCurrentEncodingType:= etUTF8; - FDefaultEncodingType:= etUTF8; - FNewLine:= nltCRLF; -end; - -procedure TXmlStreamBuilder.setDefaultEncoding(const value: wideString); -var - newEncodingType: TdomEncodingType; -begin - if FDefaultEncoding = value then exit; - newEncodingType:= StrToEncoding(value); - case newEncodingType of - etLatin1,etUTF8,etUTF16BE: begin - FDefaultEncodingType:= newEncodingType; - FDefaultEncoding:= value; - FCurrentEncodingType:= newEncodingType; - end; - else - raise ENot_Supported_Err.create('Encoding not supported error.'); - end; -end; - -procedure TXmlStreamBuilder.setDestination(const value: TStream); -begin - FDestination:= value; -end; - -procedure TXmlStreamBuilder.setNewLine(const value: TdomNewLineType); -begin - FNewLine:= value; -end; - -function TXmlStreamBuilder.writeWideString(const sender: TXmlCustomReader; - const locator: TdomLocator; - const xmlStrg: wideString): boolean; -const - CR_char: char = #13; - LF_char: char = #10; - CRLF_str: string = #13#10; -var - S: string; - C: Char; - WC: WideChar; - highSurrogate, lowSurrogate: WideChar; - i: integer; -begin - if not assigned(destination) - then raise EParserException.create('Destination stream not specified'); - - result:= true; - - case FCurrentEncodingType of - - etUTF8: - try - S:= UTF16BEToUTF8Str(xmlStrg,false); - destination.writeBuffer(pointer(S)^, Length(S)); - except - sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,xmlStrg); - result:= false; - exit; - end; - - etUTF16BE: destination.writeBuffer(pointer(XMLStrg)^, Length(XMLStrg) shl 1); - - etLatin1: - begin - i:= 1; - while i <= length(XMLStrg) do begin - WC:= XMLStrg[i]; - case Word(WC) of - $000A: // LF - case FNewLine of - nltCRLF: destination.writeBuffer(pointer(CRLF_str)^,2); - ntlCR: destination.writeBuffer(CR_char,1); - ntlLF: destination.writeBuffer(LF_char,1); - end; - $D800..$DBFF: // High surrogate of Unicode character [$10000..$10FFFF] - begin - if i = length(XMLStrg) then begin // End of wideString --> No low surrogate found - sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,xmlStrg); - result:= false; - exit; - end; - highSurrogate:= XMLStrg[i]; - inc(i); - lowSurrogate:= XMLStrg[i]; - if not IsUtf16LowSurrogate(lowSurrogate) then begin // No low surrogate found - sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,xmlStrg); - result:= false; - exit; - end; - - S:= concat('&#x',IntToHex(UTF16SurrogateToInt(highSurrogate,lowSurrogate),1),';'); - destination.writeBuffer(pointer(S)^, Length(S)); - - end; - $DC00..$DFFF: // low surrogate - begin - sendErrorNotification(sender,ET_INVALID_CHARACTER,locator,xmlStrg); - result:= false; - exit; - end; - else - try - C:= UTF16ToIso8859_1Char(WC); - destination.writeBuffer(C,1); - except - on EConvertError do begin - S:= concat('&#x',IntToHex(word(WC),1),';'); - destination.writeBuffer(pointer(S)^, Length(S)); - end; - end; - end; {case ...} - inc(i); - end; {while ...} - end; - - end; {case ...} -end; - -function TXmlStreamBuilder.writeWideStrings(const sender: TXmlCustomReader; - const locator: TdomLocator; - const xmlStrgs: array of wideString): boolean; -var - i: longint; -begin - result:= true; - for i:= 0 to High(xmlStrgs) do begin - result:= writeWideString(sender,locator,xmlStrgs[i]); - if not result then exit; - end; -end; - -function TXmlStreamBuilder.CDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCDATA) then FOnCDATA(sender,locator,data); - - result:= writeWideStrings(sender,locator,['']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.CDATA(sender,locator,data); -end; - -function TXmlStreamBuilder.charRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnCharRef) then FOnCharRef(sender,locator,data); - - //result:= writeWideStrings(sender,locator,['']); AleF - result:= writeWideStrings(sender,locator,[data]); - - if result - then if assigned(nextHandler) - then result:= nextHandler.charRef(sender,locator,data); -end; - -function TXmlStreamBuilder.comment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnComment) then FOnComment(sender,locator,data); - - result:= writeWideStrings(sender,locator,['']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.comment(sender,locator,data); -end; - -function TXmlStreamBuilder.doctype(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId, - data: wideString): boolean; -begin - if assigned(FOnDoctype) then FOnDoctype(sender,locator,aname,pubId,sysId,data); - - result:= writeWideStrings(sender,locator, [' '') or (sysId <> '')) then - result:= writeWideString(sender,locator, xmlAnalysePubSysId(pubId,sysId,'')); - if result and (Length(data) = 0) - then result:= writeWideString(sender,locator,'>') - else result:= writeWideStrings(sender,locator, ['[',data,']>']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.doctype(sender,locator,aname,pubId,sysId,data); -end; - -function TXmlStreamBuilder.endDocument(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndDocument) then FOnEndDocument(sender,locator); - - FCurrentEncodingType:= defaultEncodingType; - - if assigned(nextHandler) - then result:= nextHandler.endDocument(sender,locator) - else result:= true; -end; - -function TXmlStreamBuilder.endElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString): boolean; -begin - if assigned(FOnEndElement) then FOnEndElement(sender,locator,namespaceURI,tagName); - - result:= writeWideStrings(sender,locator,['']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.endElement(sender,locator,namespaceURI,tagName); -end; - -function TXmlStreamBuilder.endPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix: wideString): boolean; -begin - if assigned(FOnEndPrefixMapping) then FOnEndPrefixMapping(sender,locator,prefix); - if assigned(nextHandler) - then result:= nextHandler.endPrefixMapping(sender,locator,prefix) - else result:= true; -end; - -function TXmlStreamBuilder.entityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnEntityRef) then FOnEntityRef(sender,locator,aname); - - result:= writeWideStrings(sender,locator,['&', aname, ';']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityRef(sender,locator,aname); -end; - -function TXmlStreamBuilder.PCDATA(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -var - i: integer; - content: TdomCustomStr; - modifiedData: wideString; -begin - if assigned(FOnPCDATA) then FOnPCDATA(sender,locator,data); - - content:= TdomCustomStr.create; - try - for i:= 1 to length(data) do begin - case ord(data[i]) of -{ 38: content.addWideString('&');//amp;'); // Ampersand ('&') - 60: content.addWideString('<');//lt;'); // Less than ('<') - 62: content.addWideString('>');//gt;'); // Greater than ('>') - 13: content.addWideString(' '); // Carriage Return (CR)} -{ 38: content.addWideString('&'); // Ampersand ('&') - 60: content.addWideString('<'); // Less than ('<') - 62: content.addWideString('>'); // Greater than ('>') - 13: content.addWideString(' '); // Carriage Return (CR)} - 38: content.addWideString('&'); // Ampersand ('&') - 60: content.addWideString('<'); // Less than ('<') - 62: content.addWideString('>'); // Greater than ('>') - 13: content.addWideString(' '); // Carriage Return (CR) - else - content.addWideChar(data[i]); - end; - end; - modifiedData:= content.value; - finally - content.free; - end; - - result:= writeWideString(sender,locator,modifiedData); - - if result - then if assigned(nextHandler) - then result:= nextHandler.PCDATA(sender,locator,data); -end; - -function TXmlStreamBuilder.processingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnProcessingInstruction) then FOnProcessingInstruction(sender,locator,targ,data); - - if data = '' - then result:= writeWideStrings(sender,locator,['']) - else result:= writeWideStrings(sender,locator,['']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.processingInstruction(sender,locator,targ,data); -end; - -function TXmlStreamBuilder.skippedEntity(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnSkippedEntity) then FOnSkippedEntity(sender,locator,aname); - if assigned(nextHandler) - then result:= nextHandler.skippedEntity(sender,locator,aname) - else result:= true; -end; - -function TXmlStreamBuilder.startDocument(const sender: TXmlCustomReader; - const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -const - BOM: wideString = #$feff; // UTF-16BE Byte order mark -var - newEncodingType: TdomEncodingType; -begin - if assigned(FOnStartDocument) then FOnStartDocument(sender,locator,version,encName,sdDl); - - result:= true; - if defaultEncoding = '' then begin - newEncodingType:= StrToEncoding(encName); - end else begin - encName:= defaultEncoding; - newEncodingType:= defaultEncodingType; - end; - - case newEncodingType of - etLatin1,etUTF8,etUTF16BE: begin - FCurrentEncodingType:= newEncodingType; - - if CurrentEncodingType = etUTF16BE - then result:= writeWideString(sender,locator,BOM); - - if result and (version = '') - then result:= writeWideString(sender,locator,' '') - then result:= writeWideStrings(sender,locator,[' encoding="',encName,'"']); - if result then - case sdDl of - STANDALONE_YES: result:= writeWideStrings(sender,locator,[' standalone="yes"']); - STANDALONE_NO: result:= writeWideStrings(sender,locator,[' standalone="no"']); - end; - if result - then writeWideStrings(sender,locator,['?','>',#10]); - - end; - else - sendErrorNotification(sender,ET_ENCODING_NOT_SUPPORTED,locator,encName); - result:= false; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startDocument(sender,locator,version,encName,sdDl); -end; - -function TXmlStreamBuilder.startElement(const sender: TXmlCustomReader; - const locator: TdomLocator; - namespaceURI, - tagName: wideString; - attributes: TdomNameValueList): boolean; -var - i: integer; -begin - if assigned(FOnStartElement) then FOnStartElement(sender,locator,namespaceURI,tagName,attributes); - - result:= writeWideStrings(sender,locator,['<', tagName]); - - for i:= 0 to pred(attributes.length) do begin - if not result then break; - result:= writeWideStrings(sender,locator,[' ',attributes.names[i],'="',attributes.values[i],'"']); - end; - - if result - then result:= writeWideString(sender,locator,'>'); - - if result - then if assigned(nextHandler) - then result:= nextHandler.startElement(sender,locator,namespaceURI,tagName,attributes); -end; - -function TXmlStreamBuilder.startPrefixMapping(const sender: TXmlCustomReader; - const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - if assigned(FOnStartPrefixMapping) then FOnStartPrefixMapping(sender,locator,prefix,uri); - if assigned(nextHandler) - then result:= nextHandler.startPrefixMapping(sender,locator,prefix,uri) - else result:= true; -end; - -function TXmlStreamBuilder.attributeDefinition(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -begin - if assigned(FOnAttributeDefinition) then FOnAttributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); - - result:= writeWideStrings(sender, locator, [' ', aname, #9]); - if result and (Length(attType) > 0) - then result:= writeWideStrings(sender, locator, [attType, #9]); - if result and (Length(bracket) > 0) - then result:= writeWideString(sender, locator, bracket); - if result and (Length(defaultDecl) > 0) - then result:= writeWideStrings(sender, locator, [#9, defaultDecl]); - if result and ((Length(defaultDecl) = 0) or (defaultDecl = wideString('#FIXED'))) then begin - if Pos(DQ, attValue) > 0 - then result:= writeWideStrings(sender, locator, [#9, SQ, attValue, SQ, #10]) - else result:= writeWideStrings(sender, locator, [#9, DQ, attValue, DQ, #10]); - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.attributeDefinition(sender,locator,aname,attType,bracket,defaultDecl,attValue); -end; - -function TXmlStreamBuilder.conditionalSection(const sender: TXmlCustomReader; - const locator: TdomLocator; - includeStmt, - data: wideString): boolean; -begin - if assigned(FOnConditionalSection) then FOnConditionalSection(sender,locator,includeStmt,data); - - result:= writeWideStrings(sender,locator,['']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.conditionalSection(sender,locator,includeStmt,data); -end; - -function TXmlStreamBuilder.DTDcomment(const sender: TXmlCustomReader; - const locator: TdomLocator; - data: wideString): boolean; -begin - if assigned(FOnDtdComment) then FOnDtdComment(sender,locator,data); - - result:= writeWideStrings(sender,locator,[#10'']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDcomment(sender,locator,data); -end; - -function TXmlStreamBuilder.DTDprocessingInstruction(const sender: TXmlCustomReader; - const locator: TdomLocator; - targ, - data : wideString): boolean; -begin - if assigned(FOnDtdProcessingInstruction) then FOnDtdProcessingInstruction(sender,locator,targ,data); - - if data = '' - then result:= writeWideStrings(sender,locator,[#10'']) - else result:= writeWideStrings(sender,locator,[#10'']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.DTDprocessingInstruction(sender,locator,targ,data); -end; - -function TXmlStreamBuilder.elementTypeDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - data: wideString): boolean; -begin - if assigned(FOnElementTypeDeclaration) then FOnElementTypeDeclaration(sender,locator,aname,data); - - result:= writeWideStrings(sender, locator, [#10'']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.elementTypeDeclaration(sender,locator,aname,data); -end; - -function TXmlStreamBuilder.endAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndAttListDeclaration) then FOnEndAttListDeclaration(sender,locator); - - result:= writeWideString(sender,locator,'>'); - - if result - then if assigned(nextHandler) - then result:= nextHandler.endAttListDeclaration(sender,locator); -end; - -function TXmlStreamBuilder.endExtDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnEndExtDtd) then FOnEndExtDtd(sender,locator); - - FCurrentEncodingType:= etUnknown; - - if assigned(nextHandler) - then result:= nextHandler.endExtDtd(sender,locator) - else result:= true; -end; - -function TXmlStreamBuilder.endIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnendIntDtd) then FOnendIntDtd(sender,locator); - - FCurrentEncodingType:= etUnknown; - - if assigned(nextHandler) - then result:= nextHandler.endIntDtd(sender,locator) - else result:= true; -end; - -function TXmlStreamBuilder.entityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -begin - if assigned(FOnEntityDeclaration) then FOnEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); - - result:= writeWideStrings(sender, locator, [#10' 0 - then result:= writeWideStrings(sender, locator, [SQ, entityValue, SQ]) - else result:= writeWideStrings(sender, locator, [DQ, entityValue, DQ]); - end else begin - if pubId = '' then begin - if Pos(DQ, sysId) > 0 - then result:= writeWideStrings(sender, locator, ['SYSTEM ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['SYSTEM ', DQ, sysId, DQ]); - end else begin - if sysId = '' then begin - result:= writeWideStrings(sender, locator, [' PUBLIC "',pubId,'"']); - end else begin - if Pos(DQ, sysId) > 0 - then result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" "', sysId, '"']); - end; - end; {if ...} - if result and (notaName <> '') - then result:= writeWideStrings(sender, locator, [' NDATA ',notaName]); - end; - end; - if result - then result:= writeWideString(sender, locator, '>'); - - if result - then if assigned(nextHandler) - then result:= nextHandler.entityDeclaration(sender,locator,aname,entityValue,pubId,sysId,notaName); -end; - -function TXmlStreamBuilder.notationDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -begin - if assigned(FOnNotationDeclaration) then FOnNotationDeclaration(sender,locator,aname,pubId,sysId); - - result:= writeWideStrings(sender, locator, [#10' 0 - then result:= writeWideStrings(sender, locator, ['SYSTEM ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['SYSTEM ', DQ, sysId, DQ]); - end else begin - if sysId = '' then begin - result:= writeWideStrings(sender, locator, [' PUBLIC "',pubId,'"']); - end else begin - if Pos(DQ, sysId) > 0 - then result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" "', sysId, '"']); - end; - end; {if ...} - end; - if result - then result:= writeWideString(sender, locator, '>'); - - if result - then if assigned(nextHandler) - then result:= nextHandler.notationDeclaration(sender,locator,aname,pubId,sysId); -end; - -function TXmlStreamBuilder.parameterEntityDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId: wideString): boolean; -const - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " -begin - if assigned(FOnParameterEntityDeclaration) then FOnParameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); - - result:= writeWideStrings(sender, locator, [#10' 0 - then result:= writeWideStrings(sender, locator, [SQ, entityValue, SQ]) - else result:= writeWideStrings(sender, locator, [DQ, entityValue, DQ]); - end else begin - if pubId = '' then begin - if Pos(DQ, sysId) > 0 - then result:= writeWideStrings(sender, locator, ['SYSTEM ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['SYSTEM ', DQ, sysId, DQ]); - end else begin - if sysId = '' then begin - result:= writeWideStrings(sender, locator, [' PUBLIC "',pubId,'"']); - end else begin - if Pos(DQ, sysId) > 0 - then result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" ', SQ, sysId, SQ]) - else result:= writeWideStrings(sender, locator, ['PUBLIC "', pubId, '" "', sysId, '"']); - end; - end; {if ...} - end; - end; - if result - then result:= writeWideString(sender, locator, '>'); - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityDeclaration(sender,locator,aname,entityValue,pubId,sysId); -end; - -function TXmlStreamBuilder.parameterEntityRef(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnParameterEntityRef) then FOnParameterEntityRef(sender,locator,aname); - - result:= writeWideStrings(sender, locator, [#10'%',aname,';']); - - if result - then if assigned(nextHandler) - then result:= nextHandler.parameterEntityRef(sender,locator,aname); -end; - -function TXmlStreamBuilder.startAttListDeclaration(const sender: TXmlCustomReader; - const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(FOnStartAttListDeclaration) then FOnStartAttListDeclaration(sender,locator,aname); - - result:= writeWideStrings(sender,locator,[#10' '') - then result:= writeWideStrings(sender,locator,[' encoding="',encName,'"']); - if result - then writeWideString(sender,locator,'?>'); - - end; - else - sendErrorNotification(sender,ET_ENCODING_NOT_SUPPORTED,locator,encName); - result:= false; - end; - - if result - then if assigned(nextHandler) - then result:= nextHandler.startExtDtd(sender,locator,version,encName); -end; - -function TXmlStreamBuilder.startIntDtd(const sender: TXmlCustomReader; - const locator: TdomLocator): boolean; -begin - if assigned(FOnstartIntDtd) then FOnstartIntDtd(sender,locator); - - FCurrentEncodingType:= defaultEncodingType; - - if assigned(nextHandler) - then result:= nextHandler.startIntDtd(sender,locator) - else result:= true; -end; - -function TXmlStreamBuilder.resolvePE( PEReferenceName: wideString; - var PEValue: wideString; - var error: TXmlErrorType): boolean; -begin - if assigned(nextHandler) - then result:= nextHandler.resolvePE(PEReferenceName,PEValue,error) - else begin - PEValue:= ''; - error:= ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE; - result:= true; - end; -end; - -procedure TXmlStreamBuilder.notifyReset; -begin - FCurrentEncodingType:= etUnknown; - if assigned(nextHandler) then nextHandler.notifyReset; -end; - - - -// ++++++++++++++++++++++ TXmlStandardDocReader ++++++++++++++++++++++++ -constructor TXmlStandardDocReader.create(AOwner: TComponent); -begin - inherited create(AOwner); - suppressXmlns:= false; - prefixMapping:= true; - FPrefixMappingStack:= TList.Create; -end; - -destructor TXmlStandardDocReader.destroy; -begin - clearPrefixMappingStack; - FPrefixMappingStack.free; - inherited destroy; -end; - -function TXmlStandardDocReader.analyzeElement(const locator: TdomLocator; - const source: wideString; - out tagName: wideString; - const attributes: TdomNameValueList): boolean; -// 'Source': The element, to be analyzed. -// 'tagName': Returns the namen of the element. -// 'attributes': Returns a list of attributes, if existing. -const - NULL: WideChar = #0; // end of wideString mark - TAB: WideChar = #9; - LF: WideChar = #10; - CR: WideChar = #13; - SPACE: WideChar = #32; - SQ: WideChar = #39; // code of ' - DQ: WideChar = #34; // code of " - EQ: WideChar = #61; // code of = -var - head,tail: PWideChar; - attrName,attrValue: wideString; - quotationMark: WideChar; -begin - result:= true; - attributes.clear; - head:= PWideChar(source); - tail:= head; - while not IsXmlWhiteSpace(tail^) and (tail^ <> NULL) do - inc(tail); - setString(tagName,head,tail-head); - - head:= tail; - while head^ <> NULL do begin - while IsXmlWhiteSpace(head^) and (head^ <> NULL) do - inc(head); - if head^ <> NULL then begin - tail:= head; - while not IsXmlWhiteSpace(tail^) and not (tail^ in [NULL,EQ]) do - inc(tail); - setString(attrName,head,tail-head); - - head:= tail; - while IsXmlWhiteSpace(head^) and (head^ <> NULL) do - inc(head); - if head^ <> EQ then begin - result:= sendErrorNotification(ET_MISSING_EQUALITY_SIGN,locator,''); - exit; - end; - inc(head); - while IsXmlWhiteSpace(head^) and (head^ <> NULL) do - inc(head); - if not (head^ in [SQ,DQ]) then begin - result:= sendErrorNotification(ET_MISSING_QUOTATION_MARK,locator,''); - exit; - end; - quotationMark:= WideChar(head^); - inc(head); - tail:= head; - - while not (tail^ in [NULL,quotationMark]) do - inc(tail); - if tail^ = NULL then begin - result:= sendErrorNotification(ET_MISSING_QUOTATION_MARK,locator,''); - exit; - end; - setString(attrValue,head,tail-head); - - if attributes.indexOfName(attrName) > -1 then begin - result:= sendErrorNotification(ET_DOUBLE_ATTRIBUTE_NAME,locator,''); - exit; - end; - attributes.add(attrName,attrValue); - - head:= tail; - inc(head); - if not IsXmlWhiteSpace(head^) and (head^ <> NULL) then begin - result:= sendErrorNotification(ET_MISSING_WHITE_SPACE,locator,''); - exit; - end; - end; {if ...} - end; {while ...} -end; - -procedure TXmlStandardDocReader.clearPrefixMappingStack; -begin - with FPrefixMappingStack do begin - while count > 0 do begin - TdomNameValueList(last).free; - delete(pred(count)); - end; - end; -end; - -function TXmlStandardDocReader.writeProcessingInstruction(const locator: TdomLocator; - const content: wideString): boolean; -var - TargetName,AttribSequence: wideString; -begin - XMLAnalyseTag(content,TargetName,AttribSequence); - if assigned(NextHandler) - then result:= NextHandler.ProcessingInstruction(self,locator,TargetName,AttribSequence) - else result:= true; -end; - -function TXmlStandardDocReader.writeComment(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.comment(self,locator,content) - else result:= true; -end; - -function TXmlStandardDocReader.writeCDATA(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.cdata(self,locator,content) - else result:= true; -end; - -function TXmlStandardDocReader.writeCharRef(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.charRef(self,locator,content) - else result:= true; -end; - -function TXmlStandardDocReader.writePCDATA(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.pcdata(self,locator,content) - else result:= true; -end; - -function TXmlStandardDocReader.writeStartDocument(const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - clearPrefixMappingStack; - if assigned(NextHandler) - then result:= NextHandler.startDocument(self,locator,version,encName,sdDl) - else result:= true; -end; - -function TXmlStandardDocReader.writeStartElement(const locator: TdomLocator; - const content: wideString; - out tagName: wideString): boolean; -var - attrList: TdomNameValueList; - attributeList: TdomNameValueList; - pfxUriList: TdomNameValueList; - i: integer; - suppressThisAttr: boolean; -begin - attrList:= TdomNameValueList.create; - try - result:= analyzeElement(locator,content,tagName,attrList); - if result then begin - if assigned(NextHandler) then begin - - attributeList:= TdomNameValueList.create; - try - pfxUriList:= TdomNameValueList.create; - FPrefixMappingStack.Add(pfxUriList); - - with attrList do begin - for i:= 0 to pred(length) do begin - suppressThisAttr:= false; - if FPrefixMapping or FSuppressXmlns then begin - if IsXmlDefaultAttName(names[i]) then begin - suppressThisAttr:= FSuppressXmlns; - pfxUriList.add('',values[i]); - end else if IsXmlPrefixedAttName(names[i]) then begin - suppressThisAttr:= FSuppressXmlns; - pfxUriList.add(xmlExtractLocalName(names[i]),values[i]); - end; - end; - if not suppressThisAttr then attributeList.add(names[i],values[i]); - end; {for ...} - end; {with ...} - - if FPrefixMapping then - with pfxUriList do - for i:= 0 to pred(length) do begin - result:= writeStartPrefixMapping(locator,names[i],values[i]); - if not result then break; - end; - - result:= NextHandler.startElement(self,locator,'',tagName,attributeList) - - finally - attributeList.free; - end; - - end else result:= true; - end; - finally - attrList.free; - end; -end; - -function TXmlStandardDocReader.writeStartPrefixMapping(const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startPrefixMapping(self,locator,prefix,uri) - else result:= true; -end; - -function TXmlStandardDocReader.writeEndDocument(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endDocument(self,locator) - else result:= true; -end; - -function TXmlStandardDocReader.writeEndElement(const locator: TdomLocator; - const content: wideString): boolean; -var - pfxUriList: TdomNameValueList; - i: integer; -begin - if assigned(NextHandler) - then result:= NextHandler.endElement(self,locator,'',content) - else result:= true; - - with FPrefixMappingStack do begin - if count > 0 then begin - pfxUriList:= last; - delete(pred(count)); - try - if FPrefixMapping then - with pfxUriList do - for i:= pred(length) downto 0 do begin - if not result then break; - result:= writeEndPrefixMapping(locator,names[i]); - end; - finally - pfxUriList.free; - end; - end; - end; -end; - -function TXmlStandardDocReader.writeEndPrefixMapping(const locator: TdomLocator; - prefix: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endPrefixMapping(self,locator,prefix) - else result:= true; -end; - -function TXmlStandardDocReader.writeEmptyElement(const locator: TdomLocator; - const content: wideString): boolean; -var - tagName: wideString; -begin - result:= writeStartElement(locator,content,tagName); - if result - then result:= writeEndElement(locator,tagName); -end; - -function TXmlStandardDocReader.writeEntityRef(const locator: TdomLocator; - const content: wideString): boolean; -var - EntityName: wideString; -begin - EntityName:= copy(content,2,length(content)-2); - - if (EntityName='lt') then begin - Result:= writeCharRef(locator, '<'); - Exit; - end else if (EntityName='gt') then begin - Result:= writeCharRef(locator, '>'); - Exit; - end else if (EntityName='amp') then begin - Result:= writeCharRef(locator, '&'); - Exit; - end else if (EntityName='apos') then begin - Result:= writeCharRef(locator, '''); - Exit; - end else if (EntityName='quot') then begin - Result:= writeCharRef(locator, '"'); - Exit; - end; - - if assigned(NextHandler) - then result:= NextHandler.EntityRef(self,locator,EntityName) - else result:= true; -end; - -function TXmlStandardDocReader.writeDoctype(const locator: TdomLocator; - const content: wideString): boolean; -var - DeclAnfg: integer; - ExternalId,intro,name,SystemLiteral,PubidLiteral: wideString; - NakedContent,data,dummy1,dummy2: wideString; - Error: boolean; -begin - result:= true; - if (copy(content,1,9) <> ' '>') - or (not IsXmlWhiteSpace(content[10])) then begin - result:= sendErrorNotification(ET_INVALID_DOCTYPE,locator,''); - end else begin - NakedContent:= XmlTrunc(copy(content,11,length(content)-11)); - DeclAnfg:= Pos(wideString('['),NakedContent); - if DeclAnfg = 0 then begin - intro:= NakedContent; - Data:= ''; - end else begin - intro:= copy(NakedContent,1,DeclAnfg-1); - dummy1:= copy(NakedContent,DeclAnfg,length(NakedContent)-DeclAnfg+1); - XMLTruncAngularBrackets(dummy1,data,error); {Diese umständliche Zuweisung ist wegen Delphi-Problem von WideStrings bei copy nötig} - if error then begin - result:= sendErrorNotification(ET_INVALID_DOCTYPE,locator,''); - end; {if ...} - end; {if ...} - - if result then begin - XMLAnalyseTag(intro,name,ExternalId); - if not IsXmlName(name) then begin - result:= sendErrorNotification(ET_INVALID_DOCTYPE,locator,''); - end else begin - - dummy1:= XmlTrunc(ExternalId); - ExternalId:= dummy1; {Diese umständliche Zuweisung ist wegen der Verwendung von WideStrings nötig} - if ExternalId <> '' then begin - XMLAnalyseEntityDef(ExternalId,dummy1,SystemLiteral,PubidLiteral,dummy2,Error); - if Error or (dummy1 <> '') or (dummy2 <> '') then begin - result:= sendErrorNotification(ET_INVALID_DOCTYPE,locator,''); - end; {if ...} - end; - - if result - then if assigned(NextHandler) - then result:= NextHandler.doctype(self,locator,name,PubidLiteral,SystemLiteral,Data); - - end; {if ... else ...} - end; {if ...} - end; {if ... else ...} -end; - -function TXmlStandardDocReader.parse(const inputSource: TXmlInputSource): boolean; -const - CR: WideChar = #13; - LF: WideChar = #10; - QM: WideChar = '?'; - ampCode: word = 38; // code of & - gtCode: word = 60; // code of < - SingleQuote: WideChar = #39; // code of ' - DoubleQuote: WideChar = #34; // code of " - NUMBERSIGN: WideChar = #35; // code of # - SOLIDUS: WideChar = #47; // code of / - PISTART: wideString = ''; - COMMENTSTART: wideString = ''; - end else if SubStartMarker <> '' then begin - SubStartMarker:= ''; - end; - if (str1 = ']') - and (not SingleQuoteOpen) - and (not DoubleQuoteOpen) - then BracketOpened:= false; - end; {if not ...} - end else begin {if BracketOpened ... } - if (str1 = '[') - and (not SingleQuoteOpen) - and (not DoubleQuoteOpen) then BracketOpened:= true; - end; {if BracketOpened ... else ...} - - end else begin; {if (SubEndMarker = '') ...} - if content.endsWith(SubEndMarker) then SubEndMarker:= ''; - end; {if (SubEndMarker = '') ... else ...} - - if (not DoubleQuoteOpen) - and (not SingleQuoteOpen) - and (not BracketOpened) - and (SubEndMarker = '') - and (str1 = '>') - then begin - result:= writeDoctype(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - end; {xmlDoctype: ...} - - xmlUnknown: begin - if str1 = '<' then PieceType:= xmlStartTag - else if str1 = '&' then PieceType:= xmlEntityRef - else PieceType:= xmlPCData; - content.AddWideChar(Str1); - inputsource.locator.setStartMark; - end; - - end; {case ...} - end; {while ...} - - if result - then if content.length > 0 - then if PieceType= xmlPCData - then result:= writePCDATA(inputSource.Locator,content.value) - else result:= sendErrorNotification(ET_INVALID_CHARACTER,inputSource.locator,content.value); - - if result - then result:= writeEndDocument(inputSource.Locator); - - finally - clearPrefixMappingStack; - content.free; - end; {try} -end; - - - -// +++++++++++++++++++++ TXmlStandardDtdReader +++++++++++++++++++++ -function TXmlStandardDtdReader.findNextAttDef(const decl: wideString; - var aname, - attType, - bracket, - defaultDecl, - attValue, - rest: wideString): boolean; -// Return value: 'false' if a wellformedness error occured; 'true' otherwise. -var - i,j: integer; - FindBracket, FindDefaultDecl, FindAttValue: boolean; - QuoteType: WideChar; -begin - result:= true; - - attType:= ''; - attValue:= ''; - bracket:= ''; - findAttValue:= false; - findBracket:= false; - findDefaultDecl:= false; - defaultDecl:= ''; - aname:= ''; - rest:= ''; - - if Length(Decl) = 0 - then begin result:= false; exit; end; - i:= 1; - - {White-space?} - while IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - j:= i; - - {name?} - while not IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - aname:= copy(Decl,j,i-j); - - {White-space?} - while IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - j:= i; - - if Decl[j] = '(' then FindBracket:= true; - - {attType?} - if not FindBracket then begin - while not IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - attType:= copy(Decl,j,i-j); - if attType = 'NOTATION' then FindBracket:= true; - - {White-space?} - while IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - j:= i; - end; {if ...} - - {Bracket?} - if FindBracket then begin - if Decl[j] <> '(' - then begin result:= false; exit; end; - while not (Decl[i] = ')') do begin - inc(i); - if i >= length(Decl) - then begin result:= false; exit; end; - end; - Bracket:= copy(Decl,j,i-j+1); - - {White-space?} - inc(i); - if not IsXmlWhiteSpace(Decl[i]) - then begin result:= false; exit; end; - while IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; - j:= i; - end; {if ...} - - if Decl[j] = '#' - then FindDefaultDecl:= true - else FindAttValue:= true; - - {defaultDecl?} - if FindDefaultDecl then begin - while not IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) then break; - end; {while ...} - defaultDecl:= copy(Decl,j,i-j); - if defaultDecl = '#FIXED' then begin - FindAttValue:= true; - {White-space?} - if i > length(Decl) - then begin result:= false; exit; end; - while IsXmlWhiteSpace(Decl[i]) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; {while ...} - j:= i; - end; {if ...} - end; {if ...} - - {attValue?} - if FindAttValue then begin - if i = length(Decl) - then begin result:= false; exit; end; - QuoteType:= Decl[i]; - if not ( (QuoteType = '"') or (QuoteType = #$0027)) - then begin result:= false; exit; end; - inc(i); - while not (Decl[i] = QuoteType) do begin - inc(i); - if i > length(Decl) - then begin result:= false; exit; end; - end; {while ...} - attValue:= copy(Decl,j+1,i-j-1); - inc(i); - end; {if ...} - - Rest:= copy(Decl,i,length(Decl)-i+1); -end; - -function TXmlStandardDtdReader.includeAsPE(const inputSource: TXmlInputSource; - var s: wideString): boolean; -begin - result:= includeInLiteral(inputSource,s); - s:= concat(#$20,s,#$20); -end; - -function TXmlStandardDtdReader.includeInLiteral(const inputSource: TXmlInputSource; - var s: wideString): boolean; -var - str1: WideChar; - PEName: TdomCustomStr; - errType: TXmlErrorType; - invalidStr: wideString; -begin - s:= ''; - result:= true; - PEName:= TdomCustomStr.create; - try - - while InputSource.getNextWideChar(str1) do begin - - if not IsXmlChar(str1) then begin - inputsource.locator.setStartMark; - if str1 = #0 - then invalidStr:= '' - else invalidStr:= wideString(str1); - result:= sendErrorNotification(ET_INVALID_CHARACTER,inputSource.locator,invalidStr); - exit; - end; - - if str1 = ';' then begin // End of PE reference found. - errType:= ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE; - if assigned(NextHandler) - then result:= NextHandler.resolvePE(PEName.value,s,errType); - if errType <> ET_NONE then begin - s:= concat('%',PEName.value,';'); - result:= (sendErrorNotification(errType,inputSource.locator,PEName.value) and result); - end; - exit; - end; - - PEName.addWideChar(str1); - - if ( (PEName.length = 1) and not ( IsXmlLetter(str1) or (str1 = '_') or (str1 = ':') ) ) - or ( (PEName.length > 1) and not IsXmlNameChar(str1) ) - then break; - - end; {while ...} - - s:= concat('%',PEName.value); - - finally - PEName.free; - end; -end; - -function TXmlStandardDtdReader.WriteConditionalSection(const locator: TdomLocator; - const content: wideString): boolean; -var - declaration: wideString; - IncludeStmt: wideString; - i,nr1,nr2: longint; -begin - nr1:= 0; - nr2:= 0; - for i:= 1 to length(content) do begin - if content[i] = '[' then begin - if nr1 = 0 then nr1:= i else nr2:= i; - end; - if nr2 > 0 then break; - end; - if nr2 = 0 then begin - result:= sendErrorNotification(ET_INVALID_CONDITIONAL_SECTION,locator,''); - exit; - end; - if (copy(content,1,3) <> ' ']]>') then begin - result:= sendErrorNotification(ET_INVALID_CONDITIONAL_SECTION,locator,''); - exit; - end; - - IncludeStmt:= XmlTrunc(copy(content,4,nr2-4)); - - if not ( IsXmlPEReference(IncludeStmt) - or (IncludeStmt = 'INCLUDE') - or (IncludeStmt = 'IGNORE') ) then begin - result:= sendErrorNotification(ET_INVALID_CONDITIONAL_SECTION,locator,''); - exit; - end; - - declaration:= XmlTrunc(copy(content,nr2+1,length(content)-nr2-3)); - - if assigned(NextHandler) - then result:= NextHandler.conditionalSection(self,locator,IncludeStmt,declaration) - else result:= true; -end; - -function TXmlStandardDtdReader.WriteDTDProcessingInstruction(const locator: TdomLocator; - const content: wideString): boolean; -var - TargetName,AttribSequence: wideString; -begin - XMLAnalyseTag(content,TargetName,AttribSequence); - if assigned(NextHandler) - then result:= NextHandler.DTDProcessingInstruction(self,locator,TargetName,AttribSequence) - else result:= true; -end; - -function TXmlStandardDtdReader.WriteDTDComment(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.DTDcomment(self,locator,content) - else result:= true; -end; - -function TXmlStandardDtdReader.WriteParameterEntityRef(const locator: TdomLocator; - const content: wideString): boolean; -var - entityName: wideString; -begin - entityName:= copy(content,2,length(content)-2); - if assigned(NextHandler) - then result:= NextHandler.parameterEntityRef(self,locator,entityName) - else result:= true; -end; - -function TXmlStandardDtdReader.WriteEntityDeclaration(const locator: TdomLocator; - const content: wideString): boolean; -var - DeclCorpus,DeclName,EntityDef,entityValue,SystemLiteral,PubidLiteral,NDataName: wideString; - DeclTypus: TDomCMNodeType; - dummy: wideString; - Error: boolean; -begin - result:= true; - if (copy(content,1,8) <> ' '>') - or (length(content) < 14) - or (not IsXmlWhiteSpace(content[9])) then begin - result:= sendErrorNotification(ET_INVALID_ENTITY_DECL,locator,''); - exit; - end; - - DeclCorpus:= XMLTrunc(copy(content,10,length(content)-10)); - if DeclCorpus[1] = '%' then begin - if not IsXmlWhiteSpace(DeclCorpus[2]) then begin - result:= sendErrorNotification(ET_INVALID_ENTITY_DECL,locator,''); - exit; - end; - dummy:= XMLTrunc(copy(DeclCorpus,2,length(DeclCorpus)-1)); - DeclCorpus:= dummy; - DeclTypus:= ctParameterEntityDeclaration; - end else DeclTypus:= ctEntityDeclaration; - XMLAnalyseTag(DeclCorpus,DeclName,EntityDef); - XMLAnalyseEntityDef(EntityDef,entityValue,SystemLiteral,PubidLiteral,NDataName,Error); - if Error then begin - result:= sendErrorNotification(ET_INVALID_ENTITY_DECL,locator,''); - exit; - end; - if (DeclTypus = ctParameterEntityDeclaration) and (NDataName <> '') then begin - result:= sendErrorNotification(ET_INVALID_ENTITY_DECL,locator,''); - exit; - end; - - if result - then if assigned(NextHandler) then begin - case DeclTypus of - ctEntityDeclaration: - NextHandler.entityDeclaration(self,locator,DeclName,entityValue,PubidLiteral,SystemLiteral,NDataName); - ctParameterEntityDeclaration: - NextHandler.parameterentityDeclaration(self,locator,DeclName,entityValue,PubidLiteral,SystemLiteral); - end; {case ...} - end; {if ...} -end; - -function TXmlStandardDtdReader.WriteElementDeclaration(const locator: TdomLocator; - const content: wideString): boolean; -var - DeclCorpus,DeclName,contSpec: wideString; -begin - if length(content) < 16 then begin - result:= sendErrorNotification(ET_INVALID_ELEMENT_DECL,locator,''); - exit; - end; - if (copy(content,1,9) <> ' '>') - or (not IsXmlWhiteSpace(content[10])) then begin - result:= sendErrorNotification(ET_INVALID_ELEMENT_DECL,locator,''); - exit; - end; - DeclCorpus:= XMLTrunc(copy(content,11,length(content)-11)); - XMLAnalyseTag(DeclCorpus,DeclName,contSpec); - if assigned(NextHandler) - then result:= NextHandler.elementTypeDeclaration(self,locator,DeclName,contSpec) - else result:= true; -end; - -function TXmlStandardDtdReader.WriteAttributeDeclaration(const locator: TdomLocator; - const content: wideString): boolean; -var - declCorpus,declName,contSpec: wideString; - dummy,AttDefName,attType,Bracket,defaultDecl,attValue,Rest: wideString; - ok: boolean; -begin - result:= true; - if length(Content) < 12 then begin - result:= sendErrorNotification(ET_INVALID_ATTRIBUTE_DECL,locator,content); - exit; - end; - if (copy(Content,1,9) <> ' '>') - or (not IsXmlWhiteSpace(Content[10])) then begin - result:= sendErrorNotification(ET_INVALID_ATTRIBUTE_DECL,locator,content); - exit; - end; - - DeclCorpus:= XMLTrunc(copy(Content,11,length(Content)-11)); - XMLAnalyseTag(DeclCorpus,DeclName,contSpec); - - if assigned(NextHandler) then begin - result:= NextHandler.startAttListDeclaration(self,locator,DeclName); - end; - - if result then begin - dummy:= XMLTrunc(contSpec); - contSpec:= dummy; - - while contSpec <> '' do begin - ok:= findNextAttDef(contSpec,AttDefName,attType,Bracket, - defaultDecl,attValue,Rest); - if ok then begin - if assigned(NextHandler) then begin - result:= NextHandler.attributeDefinition(self,locator,attDefName,attType,bracket, - defaultDecl,attValue); - if not result then break; - end; - end else begin - result:= sendErrorNotification(ET_INVALID_ATTRIBUTE_DECL,locator,content); - break; - end; - contSpec:= Rest; - end; {while ...} - - end; {if ...} - - if result - then if assigned(NextHandler) - then result:= NextHandler.endAttListDeclaration(self,locator); -end; - -function TXmlStandardDtdReader.WriteNotationDeclaration(const locator: TdomLocator; - const content: wideString): boolean; -var - DeclCorpus,DeclName,contSpec,SystemLiteral,PubidLiteral: wideString; - Error: boolean; -begin - if length(Content) < 22 then begin - result:= sendErrorNotification(ET_INVALID_NOTATION_DECL,locator,''); - exit; - end; - if (copy(Content,1,10) <> ' '>') - or (not IsXmlWhiteSpace(Content[11])) then begin - result:= sendErrorNotification(ET_INVALID_NOTATION_DECL,locator,''); - exit; - end; - DeclCorpus:= XMLTrunc(copy(Content,12,length(Content)-12)); - XMLAnalyseTag(DeclCorpus,DeclName,contSpec); - XMLAnalyseNotationDecl(contSpec,SystemLiteral,PubidLiteral,Error); - if Error then begin - result:= sendErrorNotification(ET_INVALID_NOTATION_DECL,locator,''); - exit; - end; - if assigned(NextHandler) - then result:= NextHandler.notationDeclaration(self,locator,DeclName,PubidLiteral,SystemLiteral) - else result:= true; -end; - -function TXmlStandardDtdReader.writeStartExtDtd(const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startExtDtd(self,locator,version,encName) - else result:= true; -end; - -function TXmlStandardDtdReader.writeStartIntDtd(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startIntDtd(self,locator) - else result:= true; -end; - -function TXmlStandardDtdReader.parseExternalSubset(const inputSource: TXmlInputSource):boolean; -const - CR: WideChar = #13; - LF: WideChar = #10; - QM: WideChar = '?'; - SingleQuote: WideChar = #39; // code of ' - DoubleQuote: WideChar = #34; // code of " - PISTART: wideString = '' then - if content[content.length-1] = QM then begin - if result then begin - result:= writeDTDProcessingInstruction(inputSource.Locator,copy(content.value,3,content.length-4)); - content.reset; - PieceType:= xmlUnknown; - end; - end; - end; - - xmlCondSection: begin - if includeStatementFinished then begin - content.addWideChar(str1); - if str1 = '[' then begin - if content[content.length-1] = '!' then - if content[content.length-2] = '<' then - if not commentActive then inc(condSectCounter); - end else if str1 = '>' then begin - if content[content.length-1] = ']' then - if content[content.length-2] = ']' then - if not commentActive then dec(condSectCounter); - end; {if str1 = '[' ... else ...} - - if commentActive then begin - if str1 = '>' then - if content[content.length-1] = '-' then - if content[content.length-2] = '-' then - if not ( (content[content.length-3] = '!') - and (content[content.length-4] = '<') ) then - if not ( (content[content.length-3] = '-') - and (content[content.length-4] = '!') - and (content[content.length-5] = '<') ) - then commentActive:= false; - end else begin - if str1 = '-' then - if content[content.length-1] = '-' then - if content[content.length-2] = '!' then - if content[content.length-3] = '<' - then commentActive:= true; - end; {if commentActive ... else ...} - - if condSectCounter = 0 then begin - result:= WriteConditionalSection(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; {if ...} - - end else begin {if includeStatementFinished ... } - if str1 = '[' - then includeStatementFinished:= true; - if str1 = '%' then begin - if includeAsPE(inputSource,dummy) then begin - for i:= 0 to pred(length(dummy)) do begin - if dummy[i] = '[' then begin - includeStatementFinished:= true; - break; - end; {if ...} - end; {for ...} - content.addWideString(dummy); - end else result:= sendErrorNotification(ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE,inputSource.locator,concat(content.value,'%')); - end else content.addWideChar(str1); - end; {if includeStatementFinished ... else ...} - end; - - xmlComment: begin - content.addWideChar(str1); - if str1 = '>' then - if content[content.Length-1] = '-' then - if content[content.Length-2] = '-' then - if content.length > 6 then begin - result:= WriteDTDComment(inputSource.Locator,copy(content.value,5,content.length-7)); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlEntityDecl,xmlNotationDecl: begin - if not (DoubleQuoteOpen or SingleQuoteOpen) then begin - if str1 = '%' then begin - if includeAsPE(inputSource,dummy) - then content.addWideString(dummy) - else result:= sendErrorNotification(ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE,inputSource.locator,concat(content.value,'%')); - end else content.addWideChar(str1); - end else begin - if (PieceType = xmlEntityDecl) and (str1 = '%') then begin - // XML 1.0, § 4.4.5: "When ... a parameter entity - // reference appears in a literal entity value, its - // replacement text is processed in place of the - // reference itself as though it were part of the - // document at the location the reference was - // recognized, except that ... - result:= includeInLiteral(inputSource,entityDeclValue); - content.addWideString( - // ... a single or double quote character in the - // replacement text is always treated as a normal - // data character and will not terminate the literal." - xmlReplaceQuotes(entityDeclValue) - ); - end else content.addWideChar(str1); - end; - - if (str1 = SingleQuote) and (not DoubleQuoteOpen) then begin - SingleQuoteOpen := not SingleQuoteOpen; - end else if (str1 = DoubleQuote) and (not SingleQuoteOpen) then begin - DoubleQuoteOpen := not DoubleQuoteOpen; - end; - - if (not DoubleQuoteOpen) - and (not SingleQuoteOpen) - and (str1 = '>') - then begin - if pieceType = xmlEntityDecl - then result:= WriteEntityDeclaration(inputSource.Locator,content.value) - else result:= WriteNotationDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - - end; - - xmlAttributeDecl: begin - - if not (DoubleQuoteOpen or SingleQuoteOpen) then begin - if str1 = '%' then begin - if includeAsPE(inputSource,dummy) - then content.addWideString(dummy) - else result:= sendErrorNotification(ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE,inputSource.locator,concat(content.value,'%')); - end else content.addWideChar(str1); - end else content.addWideChar(str1); - - if (str1 = SingleQuote) and (not DoubleQuoteOpen) then begin - SingleQuoteOpen := not SingleQuoteOpen; - end else if (str1 = DoubleQuote) and (not SingleQuoteOpen) then begin - DoubleQuoteOpen := not DoubleQuoteOpen; - end; - - if str1 = '>' then begin - result:= WriteAttributeDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - - end; - - xmlElementDecl: begin - if str1 = '%' then begin - if includeAsPE(inputSource,dummy) - then content.addWideString(dummy) - else result:= sendErrorNotification(ET_UNRESOLVABLE_PARAMETER_ENTITY_REFERENCE,inputSource.locator,concat(content.value,'%')); - end else content.addWideChar(str1); - if str1 = '>' then begin - result:= WriteElementDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlUnknown: begin - if str1 = '<' then begin - PieceType:= xmlStartTag; - content.addWideChar(str1); - inputsource.locator.setStartMark; - end else - if str1 = '%' then begin - PieceType:= xmlParameterEntityRef; - content.addWideChar(str1); - inputsource.locator.setStartMark; - end else - if not IsXmlWhiteSpace(str1) then begin - result:= sendErrorNotification(ET_INVALID_CHARACTER,inputSource.locator,content.value); - end; - end; - - end; {case ...} - end; {while ...} - - if result then begin - if (content.length > 0) and not IsXmlS(content.value) then begin - result:= sendErrorNotification(ET_UNKNOWN_DECL_TYPE,inputSource.locator,content.value); - end; - end; - - if result - then if assigned(NextHandler) - then result:= NextHandler.endExtDtd(self,inputSource.locator); - - finally - content.free; - end; -end; - -function TXmlStandardDtdReader.parseInternalSubset(const inputSource: TXmlInputSource):boolean; -const - CR: WideChar = #13; - LF: WideChar = #10; - QM: WideChar = '?'; - SingleQuote: WideChar = #39; // code of ' - DoubleQuote: WideChar = #34; // code of " - PISTART: wideString = '' then - if content[content.Length-1] = QM then begin - result:= WriteDTDProcessingInstruction(inputSource.Locator,copy(content.value,3,content.length-4)); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlComment: begin - content.addWideChar(str1); - if str1 = '>' then - if content[content.Length-1] = '-' then - if content[content.Length-2] = '-' then - if content.length > 6 then begin - result:= WriteDTDComment(inputSource.Locator,copy(content.value,5,content.length-7)); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlEntityDecl,xmlNotationDecl: begin - content.addWideChar(str1); - - if (str1 = SingleQuote) and (not DoubleQuoteOpen) then begin - SingleQuoteOpen := not SingleQuoteOpen; - end else if (str1 = DoubleQuote) and (not SingleQuoteOpen) then begin - DoubleQuoteOpen := not DoubleQuoteOpen; - end; - - if (not DoubleQuoteOpen) - and (not SingleQuoteOpen) - and (str1 = '>') - then begin - if pieceType = xmlEntityDecl - then result:= WriteEntityDeclaration(inputSource.Locator,content.value) - else result:= WriteNotationDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlAttributeDecl: begin - content.addWideChar(str1); - if str1 = '>' then begin - result:= WriteAttributeDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlElementDecl: begin - content.addWideChar(str1); - if str1 = '>' then begin - result:= WriteElementDeclaration(inputSource.Locator,content.value); - content.reset; - PieceType:= xmlUnknown; - end; - end; - - xmlUnknown: begin - if str1 = '<' then begin - PieceType:= xmlStartTag; - content.addWideChar(str1); - inputsource.locator.setStartMark; - end else - if str1 = '%' then begin - PieceType:= xmlParameterEntityRef; - content.addWideChar(str1); - inputsource.locator.setStartMark; - end else - if not IsXmlWhiteSpace(str1) then begin - result:= sendErrorNotification(ET_INVALID_CHARACTER,inputSource.locator,content.value); - end; - end; - - end; {case ...} - end; {while ...} - - if result then begin - if (content.length > 0) and not IsXmlS(content.value) then begin - result:= sendErrorNotification(ET_UNKNOWN_DECL_TYPE,inputSource.locator,content.value); - end; - end; - - if result - then if assigned(NextHandler) - then result:= NextHandler.endIntDtd(self,inputSource.locator); - - finally - content.free; - end; -end; - - - -// ++++++++++++++++++++++++ TXmlCustomDomReader ++++++++++++++++++++++++ -constructor TXmlCustomDomReader.create(AOwner: TComponent); -begin - inherited create(AOwner); - suppressXmlns:= false; - prefixMapping:= true; -end; - -function TXmlCustomDomReader.parseloop(const sourceNode: TDomNode): boolean; -var - i: integer; - attributeList: TdomNameValueList; - pfxUriList: TdomNameValueList; - snSystemId, versionNumber: wideString; - suppressThisAttr: boolean; - loc: TdomLocator; - - function writeWhileCheckingForAMPAndLT(const locator: TdomLocator; - const source: wideString): boolean; - var - i: integer; - content: TdomCustomStr; - begin - result:= true; - content:= TdomCustomStr.create; - try - for i:= 1 to length(source) do begin - case ord(source[i]) of - { 60: begin // LT - result:= WritePCDATA(locator,content.value); - if not result then break; - result:= WriteCharRef(locator,'<'); - if not result then break; - content.reset; - end; - 38: begin // AMP - result:= WritePCDATA(locator,content.value); - if not result then break; - result:= WriteCharRef(locator,'&'); - if not result then break; - content.reset; - end;} - - 60: begin // LT - result:= WritePCDATA(locator,content.value); - if not result then break; - result:= WriteCharRef(locator,'<'); - if not result then break; - content.reset; - end; - 38: begin // AMP - result:= WritePCDATA(locator,content.value); - if not result then break; - result:= WriteCharRef(locator,'&'); - if not result then break; - content.reset; - end; - - else - content.addWideChar(source[i]); - end; - end; - if content.length > 0 - then if result - then result:= WritePCDATA(locator,content.value); - finally - content.free; - end; - end; - -begin - result:= true; - with sourceNode do - if assigned(sourceNode.ownerDocument) - then snSystemId:= sourceNode.ownerDocument.systemId - else snSystemId:= ''; - loc:= TdomLocator.create(-1,-1,-1,-1,-1,snSystemId,nil,sourceNode); - try - case sourceNode.nodeType of - ntElement_Node: begin - attributeList:= TdomNameValueList.create; - pfxUriList:= TdomNameValueList.create; - try - for i:= 0 to pred(sourceNode.attributes.length) do - with (sourceNode.attributes.item(i) as TdomAttr) do begin - suppressThisAttr:= false; - if FPrefixMapping or FSuppressXmlns then begin - if IsXmlDefaultAttName(nodeName) then begin - suppressThisAttr:= FSuppressXmlns; - pfxUriList.add('',literalValue); - end else if IsXmlPrefixedAttName(nodeName) then begin - suppressThisAttr:= FSuppressXmlns; - pfxUriList.add(xmlExtractLocalName(nodeName),literalValue); - end; - end; - if not suppressThisAttr then attributeList.add(nodeName,literalValue); - end; - if FPrefixMapping then - with pfxUriList do - for i:= 0 to pred(length) do begin - result:= writeStartPrefixMapping(loc,names[i],values[i]); - if not result then break; - end; - if result then begin - if sourceNode.hasChildNodes then begin - result:= WriteStartElement(loc,sourceNode.nodeName,attributeList); - if result then begin - for i:= 0 to pred(sourceNode.childNodes.length) do begin - result:= parseloop(sourceNode.childNodes.item(i)); - if not result then break; - end; - end; - if result - then result:= WriteEndElement(loc,sourceNode.nodeName); - end else result:= WriteEmptyElement(loc,sourceNode.nodeName,attributeList); - if FPrefixMapping then - with pfxUriList do - for i:= pred(length) downto 0 do begin - if not result then break; - result:= writeEndPrefixMapping(loc,names[i]); - end; - end; - finally - attributeList.free; - pfxUriList.free; - end; - end; - ntText_Node: - result:= writeWhileCheckingForAMPAndLT(loc,sourceNode.nodeValue); - ntCDATA_Section_Node: - result:= WriteCDATA(loc,sourceNode.nodeValue); - ntEntity_Reference_Node: - result:= WriteEntityRef(loc,sourceNode.nodeName); - ntProcessing_Instruction_Node: - result:= WriteProcessingInstruction(loc,sourceNode.nodeName,sourceNode.nodeValue); - ntComment_Node: - result:= WriteComment(loc,sourceNode.nodeValue); - ntDocument_Node: begin - versionNumber:= (sourceNode as TdomDocument).version; - if versionNumber = '' then versionNumber:= '1.0'; // xxx necessary? - result:= writeStartDocument(loc, - versionNumber, - (sourceNode as TdomDocument).encoding, - STANDALONE_UNSPECIFIED); - if result then begin - for i:= 0 to pred(sourceNode.childNodes.length) do begin - result:= parseloop(sourceNode.childNodes.item(i)); - if not result then break; - end; - end; - if result - then result:= writeEndDocument(loc); - end; - ntDocument_Type_Node: - result:= WriteDoctype(loc,sourceNode.nodeName, - (sourceNode as TdomDocumentType).publicId, - (sourceNode as TdomDocumentType).systemId, - (sourceNode as TdomDocumentType).internalSubset); - else - result:= true; // xxx raise an exception instead? - end; - finally - loc.free; - end; -end; - -function TXmlCustomDomReader.WriteCDATA(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.cdata(self,locator,content) - else result:= true; -end; - -function TXmlCustomDomReader.WriteCharRef(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.charRef(self,locator,content) - else result:= true; -end; - -function TXmlCustomDomReader.WriteComment(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.comment(self,locator,content) - else result:= true; -end; - -function TXmlCustomDomReader.WriteDoctype(const locator: TdomLocator; - const aname, - publicId, - systemId, - intSubset: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.doctype(self,locator,aname,publicId,systemId,intSubset) - else result:= true; -end; - -function TXmlCustomDomReader.WriteEmptyElement(const locator: TdomLocator; - const tagName: wideString; - const attributeList: TdomNameValueList): boolean; -begin - if assigned(NextHandler) then begin - result:= NextHandler.startElement(self,locator,'',tagName,attributeList); - if result - then result:= NextHandler.endElement(self,locator,'',tagName); - end else result:= true; -end; - -function TXmlCustomDomReader.writeEndDocument(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endDocument(self,locator) - else result:= true; -end; - -function TXmlCustomDomReader.WriteEndElement(const locator: TdomLocator; - const tagName: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endElement(self,locator,'',tagName) - else result:= true; -end; - -function TXmlCustomDomReader.writeEndPrefixMapping(const locator: TdomLocator; - prefix: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endPrefixMapping(self,locator,prefix) - else result:= true; -end; - -function TXmlCustomDomReader.WriteEntityRef(const locator: TdomLocator; - const entityName: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.EntityRef(self,locator,entityName) - else result:= true; -end; - -function TXmlCustomDomReader.WritePCDATA(const locator: TdomLocator; - const content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.pcdata(self,locator,content) - else result:= true; -end; - -function TXmlCustomDomReader.WriteProcessingInstruction(const locator: TdomLocator; - const targ, - attribSequence : wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.ProcessingInstruction(self,locator,targ,attribSequence) - else result:= true; -end; - -function TXmlCustomDomReader.writeStartDocument(const locator: TdomLocator; - version, - encName: wideString; - sdDl: TdomStandalone): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startDocument(self,locator,version,encName,sdDl) - else result:= true; -end; - -function TXmlCustomDomReader.WriteStartElement(const locator: TdomLocator; - const tagName: wideString; - const attributeList: TdomNameValueList): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startElement(self,locator,'',tagName,attributeList) - else result:= true; -end; - -function TXmlCustomDomReader.writeStartPrefixMapping(const locator: TdomLocator; - prefix, - uri: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startPrefixMapping(self,locator,prefix,uri) - else result:= true; -end; - - - -// +++++++++++++++++++++++ TXmlStandardDomReader +++++++++++++++++++++++ -function TXmlStandardDomReader.parse(const sourceNode: TDomNode): boolean; -begin - result:= parseloop(sourceNode); -end; - - - -// +++++++++++++++++++++++ TXmlStandardCMReader +++++++++++++++++++++++ -function TXmlStandardCMReader.writeAttributeDefinition(const locator: TdomLocator; - aname, - attType, - bracket, - defaultDecl, - attValue: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.attributeDefinition(self,locator,aname,attType,bracket,defaultDecl,attValue) - else result:= true; -end; - -function TXmlStandardCMReader.writeDTDComment(const locator: TdomLocator; - content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.DTDComment(self,locator,content) - else result:= true; -end; - -function TXmlStandardCMReader.writeDTDProcessingInstruction(const locator: TdomLocator; - targ, - attribSequence : wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.DTDProcessingInstruction(self,locator,targ,attribSequence) - else result:= true; -end; - -function TXmlStandardCMReader.writeElementTypeDeclaration(const locator: TdomLocator; - aname, - data: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.elementTypeDeclaration(self,locator,aname,data) - else result:= true; -end; - -function TXmlStandardCMReader.writeEndAttListDeclaration(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endAttListDeclaration(self,locator) - else result:= true; -end; - -function TXmlStandardCMReader.writeEndExtDtd(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endExtDtd(self,locator) - else result:= true; -end; - -function TXmlStandardCMReader.writeEndIntDtd(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.endIntDtd(self,locator) - else result:= true; -end; - -function TXmlStandardCMReader.writeEntityDeclaration(const locator: TdomLocator; - aname, - entityValue, - pubId, - sysId, - notaName: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.entityDeclaration(self,locator,aname,entityValue,pubId,sysId,notaName) - else result:= true; -end; - -function TXmlStandardCMReader.writeNotationDeclaration(const locator: TdomLocator; - aname, - pubId, - sysId: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.notationDeclaration(self,locator,aname,pubId,sysId) - else result:= true; -end; - -function TXmlStandardCMReader.writeParameterEntityRef(const locator: TdomLocator; - content: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.parameterEntityRef(self,locator,content) - else result:= true; -end; - -function TXmlStandardCMReader.writeStartAttListDeclaration(const locator: TdomLocator; - aname: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startAttListDeclaration(self,locator,aname) - else result:= true; -end; - -function TXmlStandardCMReader.writeStartExtDtd(const locator: TdomLocator; - version, - encName: wideString): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startExtDtd(self,locator,version,encName) - else result:= true; -end; - -function TXmlStandardCMReader.writeStartIntDtd(const locator: TdomLocator): boolean; -begin - if assigned(NextHandler) - then result:= NextHandler.startIntDtd(self,locator) - else result:= true; -end; - -function TXmlStandardCMReader.parseloop(const sourceCMNode: TdomCMNode): boolean; -var - i: integer; - snSystemId: wideString; - versionNumber: wideString; - loc: TdomLocator; - - function getBracket(CMAttrDef: TdomCMAttrDefinition): wideString; - var - k: integer; - content: TdomCustomStr; - begin - if CMAttrDef.hasChildNodes then begin - content:= TdomCustomStr.create; - try - with content do begin - addWideChar('('); - with CMAttrDef.ChildNodes do begin - for k:= 0 to pred(Length) do begin - // Write Sheffer stroke to separate TdomCMNameParticle or TdomCMNmtokenParticle names: - if k > 0 then addWideString(' | '); - // Write TdomCMNameParticle or TdomCMNmtokenParticle name: - addWideString(item(k).nodeName); - end; - end; - addWideChar(')'); - result:= content.value; - end; - finally - content.free; - end; - end else result:= ''; - end; - -begin - with sourceCMNode do begin - case NodeType of - ctExternalObject: snSystemId:= (sourceCMNode as TdomCMExternalObject).systemId; - ctInternalObject: snSystemId:= (sourceCMNode as TdomCMInternalObject).systemId; - else - if assigned(FCMObject) - then snSystemId:= FCMObject.systemId - else snSystemId:= ''; - end; {case ...} - end; {with ...} - - loc:= TdomLocator.create(-1,-1,-1,-1,-1,snSystemId,sourceCMNode,nil); - try - case sourceCMNode.NodeType of - ctAttributeList: - begin - result:= writeStartAttListDeclaration(loc,sourceCMNode.NodeName); - if result then begin - with TdomCMAttrList(sourceCMNode).childnodes do begin - for i:= 0 to pred(length) do begin - result:= writeAttributeDefinition(loc, - Item(i).nodeName, - (Item(i) as TdomCMAttrDefinition).AttributeType, - getBracket(Item(i) as TdomCMAttrDefinition), - (Item(i) as TdomCMAttrDefinition).DefaultDeclaration, - Item(i).NodeValue); - if not result then break; - end; {for ...} - end; {with ...} - end; {if ...} - if result - then result:= writeEndAttListDeclaration(loc); - end; - ctComment: - result:= writeDTDComment(loc, - (sourceCMNode as TdomCMComment).data); - ctElementTypeDeclaration: - result:= writeElementTypeDeclaration(loc, - sourceCMNode.nodeName, - (sourceCMNode as TdomCMElementTypeDeclaration).Contentspec); - ctEntityDeclaration: - result:= writeEntityDeclaration(loc, - sourceCMNode.nodeName, - sourceCMNode.nodeValue, - (sourceCMNode as TdomCMEntityDeclaration).publicId, - (sourceCMNode as TdomCMEntityDeclaration).systemId, - (sourceCMNode as TdomCMEntityDeclaration).notationName); - ctExternalObject: begin - versionNumber:= (sourceCMNode as TdomCMExternalObject).version; - if versionNumber = '' then versionNumber:= '1.0'; // xxx necessary? - result:= writeStartExtDTD(loc, - versionNumber, - (sourceCMNode as TdomCMExternalObject).encoding); - if result then begin - for i:= 0 to pred(sourceCMNode.childNodes.length) do begin - result:= parseloop(sourceCMNode.childNodes.item(i)); - if not result then break; - end; - end; - if result - then result:= writeEndExtDTD(loc); - end; - ctInternalObject: begin - result:= writeStartIntDTD(loc); - if result then begin - for i:= 0 to pred(sourceCMNode.childNodes.length) do begin - result:= parseloop(sourceCMNode.childNodes.item(i)); - if not result then break; - end; - end; - if result - then result:= writeEndIntDTD(loc); - end; - ctNotationDeclaration: - result:= writeNotationDeclaration(loc, - sourceCMNode.nodeName, - (sourceCMNode as TdomCMNotationDeclaration).publicId, - (sourceCMNode as TdomCMNotationDeclaration).systemId); - ctParameterEntityDeclaration: - result:= true; // do nothing - ctParameterEntityReference: - result:= writeParameterEntityRef(loc, - sourceCMNode.NodeName); - ctProcessingInstruction: - result:= writeDTDProcessingInstruction(loc, - (sourceCMNode as TdomCMProcessingInstruction).target, - (sourceCMNode as TdomCMProcessingInstruction).data); - else - result:= true; // xxx raise an exception instead? - end; {case ...} - - finally - loc.free; - end; -end; - -function TXmlStandardCMReader.parse(const sourceCMNode: TdomCMNode): boolean; -begin - result:= parseloop(sourceCMNode); -end; - - - -// +++++++++++++++++++++++++ TXmlCustomParser +++++++++++++++++++++++++ -constructor TXmlCustomParser.create(aOwner: TComponent); -begin - inherited; - FDOMImpl:= nil; -end; - -procedure TXmlCustomParser.setDomImpl(const impl: TDomImplementation); -begin - FDOMImpl:= impl; - if assigned(impl) - then impl.FreeNotification(Self); -end; - -procedure TXmlCustomParser.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited Notification(AComponent,Operation); - if (Operation = opRemove) and (AComponent = FDomImpl) - then FDomImpl:= nil; -end; - - - -// ++++++++++++++++++++++++++ TXmlCMAnalyzer ++++++++++++++++++++++++++ -constructor TXmlCMAnalyzer.create(aOwner: TComponent); -begin - inherited; - FCMBuilder:= TXmlCMBuilder.create(self); // xxx will be replaced by TXmlASBuilder in the future. - FCMReader:= TXmlStandardCMReader.create(self); - FCMReader.NextHandler:= FCMBuilder; - FCMReader.DOMImpl:= FDOMImpl; - FDtdReader:= TXmlStandardDtdReader.create(self); - FDtdReader.NextHandler:= FCMBuilder; - FDtdReader.DOMImpl:= FDOMImpl; -end; - -destructor TXmlCMAnalyzer.destroy; -begin - FCMReader.free; - FCMBuilder.free; // xxx will be replaced by TXmlASBuilder in the future. - FDtdReader.free; - inherited; -end; - -procedure TXmlCMAnalyzer.setDomImpl(const impl: TDomImplementation); -begin - inherited; - FCMReader.DOMImpl:= impl; - FDtdReader.DOMImpl:= impl; -end; - -function TXmlCMAnalyzer.analyzeCM(const source: TdomCustomCMIEObject; - const target: TdomCMObject): boolean; -begin - FCMBuilder.contentModel:= target; - result:= FCMReader.parse(source); -end; - -procedure TXmlCMAnalyzer.analyzeIntDTDStr( str: wideString; - const target: TdomCMObject); -var - WStrStream: TdomWideStringStream; - InputSrc: TXmlInputSource; -begin - FCMBuilder.FContentModel:= target; - if str = '' then exit; - if str[1] <> #$feff - then str:= concat(wideString(#$feff),str); - WStrStream:= TdomWideStringStream.createFromString(str); - try - InputSrc:= TXmlInputSource.create(WStrStream,'','',1); - try - // Note: Testing for illegal XML or Text Declaration is not necessary here. - if not FDtdReader.parseInternalSubset(InputSrc) - then raise EParserException.create('Parser error.'); // xxx ??? - finally - InputSrc.free; - end; {try} - finally - WStrStream.free; - end; {try} -end; - - - -{ TXmlToDomParser } -constructor TXmlToDomParser.create(aOwner: TComponent); -// Note: If you derive your own parser class from TXmlToDomParser -// which is calling the inherited create constructor of TXmlToDomParser -// you should take care of freeing the Handlers, Builders and Readers -// created here which are not longer of use. Code example: -// -// type TMyParser = class(TXmlToDomParser) ... -// type TMyXMLReader = class(TXmlStandardDocReader) ... -// -// constructor TMyParser.create(aOwner:TComponent); -// begin -// Inherited create(aOwner); -// FDocReader.free; -// FDocReader:= TMyXMLReader.create; -// FDocXMLReader.NextHandler:= FWFTestContentHandler; -// end; -begin - inherited; - - FDocReader:= TXmlStandardDocReader.create(self); - FWFTestContentHandler:= TXmlWFTestContentHandler.create(self); - FDocBuilder:= TXmlDocBuilder.create(self); - FDtdReader:= TXmlStandardDtdReader.create(self); - FWFTestDtdHandler:= TXmlWFTestDtdHandler.create(self); - FDtdBuilder:= TXmlDtdBuilder.create(self); - - FDocReader.DOMImpl:= FDOMImpl; - FDtdReader.DOMImpl:= FDOMImpl; - - FDocReader.NextHandler:= FWFTestContentHandler; - FWFTestContentHandler.NextHandler:= FDocBuilder; - FDtdReader.NextHandler:= FWFTestDtdHandler; - FWFTestDtdHandler.NextHandler:= FDtdBuilder; - - FTabWidth:= 1; -end; - -procedure TXmlToDomParser.doExternalSubset(const parentSystemId: wideString; - var publicId, - systemId: wideString; - var stream: TStream; - var action: TXmlParserAction); -begin - action:= paFail; - if assigned(FDOMImpl) - then FDOMImpl.doExternalParsedEntity(parentSystemId,publicId,systemId,stream,action); -end; - -function TXmlToDomParser.processDocFile(const pubId, - sysId: wideString): boolean; -var - MStream: TMemoryStream; -begin - if sysId = '' - then raise EAccessViolation.create('Filename not specified.'); - MStream:= TMemoryStream.create; - try - MStream.LoadFromFile(sysId); - result:= processDocStream(MStream,pubId,sysId); - finally - MStream.free; - end; {try} -end; - -function TXmlToDomParser.processDocSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; -var - content: TdomCustomStr; - i: integer; -begin - if not assigned(intDtdSourceCode) then raise EAccessViolation.create('Stream not specified.'); - content:= TdomCustomStr.create; - try - for i:= 0 to intDtdSourceCode.Count -1 do - content.addWideString(TXmlSourceCodePiece(intDtdSourceCode[i]).text); - result:= processDocString(content.value,pubId,sysId); - finally - content.free; - end; -end; - -function TXmlToDomParser.processDocStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; -var - InputSrc: TXmlInputSource; -begin - if not assigned(stream) then raise EAccessViolation.create('Stream not specified.'); - InputSrc:= TXmlInputSource.create(stream,pubId,sysId,FTabWidth); - try - if InputSrc.hasMalformedDecl - or not ( InputSrc.declType in [ DT_XML_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED] ) - then begin - sendErrorNotification(ET_INVALID_XML_DECL); - result:= false; - end else result:= FDocReader.parse(InputSrc); - finally - InputSrc.free; - end; {try} -end; - -function TXmlToDomParser.processDocString(const str: String; - const pubId, - sysId: wideString): boolean; -var - StrStream: TStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - StrStream:= TStringStream.create(str); - try - result:= processDocStream(StrStream,pubId,sysId); - finally - StrStream.free; - end; {try} -end; - -function TXmlToDomParser.processDocWideString(str: wideString; - const pubId, - sysId: wideString): boolean; -var - WStrStream: TdomWideStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - if str[1] <> #$feff - then str:= concat(wideString(#$feff),str); - WStrStream:= TdomWideStringStream.createFromString(str); - try - result:= processDocStream(WStrStream,pubId,sysId); - finally - WStrStream.free; - end; {try} -end; - -function TXmlToDomParser.processDtd(const doc: TdomDocument): boolean; -var - PId,SId: wideString; - extDtdStream: TStream; - action: TXmlParserAction; - intSubsetData,intSubsetPubId,intSubsetSysId,extSubsetPubId,extSubsetSysId: wideString; -begin - result:= true; - if not assigned(doc) then exit; - if not assigned(doc.doctype) then exit; - - intSubsetPubId:= ''; // xxx Delete this ??? - intSubsetSysId:= doc.systemId; - with doc.doctype do begin - intSubsetData:= internalSubset; - extSubsetPubId:= publicId; - extSubsetSysId:= systemId; - end; - - // Evaluate internal subset: - if intSubsetData <> '' then begin - result:= processIntDtdWideString(intSubsetData,intSubsetPubId,intSubsetSysId); - if not result then exit; // error while parsing? - end; - - // xxx Make external content model evaluation optional? - // xxx Evaluation of standalone! - - // Evaluate external subset: - if (extSubsetPubId <> '') or (extSubsetSysId <> '') then begin - extDtdStream:= nil; - PId:= extSubsetPubId; - SId:= extSubsetSysId; - try - doExternalSubset(intSubsetSysId,PId,SId,extDtdStream,action); - if action = paFail then begin - sendErrorNotification(ET_EXTERNAL_SUBSET_NOT_FOUND); - result:= false; - exit; - end; - if assigned(extDtdStream) - then result:= processExtDtdStream(extDtdStream,PId,SId); - finally - if assigned(extDtdStream) - then extDtdStream.free; - end; {try ... finally ...} - end; {if (extSubsetPubId <> '') ...} - -end; - -function TXmlToDomParser.processExtDtdFile(const pubId, - sysId: wideString): boolean; -var - MStream: TMemoryStream; -begin - if sysId = '' - then raise EAccessViolation.create('Filename not specified.'); - MStream:= TMemoryStream.create; - try - MStream.LoadFromFile(sysId); - result:= processExtDtdStream(MStream,pubId,sysId); - finally - MStream.free; - end; {try} -end; - -function TXmlToDomParser.processExtDtdSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; -var - content: TdomCustomStr; - i: integer; -begin - if not assigned(intDtdSourceCode) then raise EAccessViolation.create('Stream not specified.'); - content:= TdomCustomStr.create; - try - for i:= 0 to pred(intDtdSourceCode.Count) do - content.addWideString(TXmlSourceCodePiece(intDtdSourceCode[i]).text); - result:= processExtDtdString(content.value,pubId,sysId); - finally - content.free; - end; -end; - -function TXmlToDomParser.processExtDtdStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; -var - InputSrc: TXmlInputSource; -begin - if not assigned(stream) then raise EAccessViolation.create('Stream not specified.'); - InputSrc:= TXmlInputSource.create(stream,pubId,sysId,FTabWidth); - try - if InputSrc.hasMalformedDecl - or not ( InputSrc.declType in [ DT_TEXT_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED] ) - then begin - sendErrorNotification(ET_INVALID_TEXT_DECL); - result:= false; - end else result:= FDtdReader.parseExternalSubset(InputSrc); - finally - InputSrc.free; - end; {try} -end; - -function TXmlToDomParser.processExtDtdString(const str: String; - const pubId, - sysId: wideString): boolean; -var - StrStream: TStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - StrStream:= TStringStream.create(str); - try - result:= processExtDtdStream(StrStream,pubId,sysId); - finally - StrStream.free; - end; {try} -end; - -function TXmlToDomParser.processExtDtdWideString(str: wideString; - const pubId, - sysId: wideString): boolean; -var - WStrStream: TdomWideStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - if str[1] <> #$feff - then str:= concat(wideString(#$feff),str); - WStrStream:= TdomWideStringStream.createFromString(str); - try - result:= processExtDtdStream(WStrStream,pubId,sysId); - finally - WStrStream.free; - end; {try} -end; - -function TXmlToDomParser.processIntDtdFile(const pubId, - sysId: wideString): boolean; -var - MStream: TMemoryStream; -begin - if sysId = '' - then raise EAccessViolation.create('Filename not specified.'); - MStream:= TMemoryStream.create; - try - MStream.LoadFromFile(sysId); - result:= processIntDtdStream(MStream,pubId,sysId); - finally - MStream.free; - end; {try} -end; - -function TXmlToDomParser.processIntDtdSourceCode(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString): boolean; -var - content: TdomCustomStr; - i: integer; -begin - if not assigned(intDtdSourceCode) then raise EAccessViolation.create('Stream not specified.'); - content:= TdomCustomStr.create; - try - for i:= 0 to pred(intDtdSourceCode.Count) do - content.addWideString(TXmlSourceCodePiece(intDtdSourceCode[i]).text); - result:= processIntDtdString(content.value,pubId,sysId); - finally - content.free; - end; -end; - -function TXmlToDomParser.processIntDtdStream(const stream: TStream; - const pubId, - sysId: wideString): boolean; -var - InputSrc: TXmlInputSource; -begin - if not assigned(stream) then raise EAccessViolation.create('Stream not specified.'); - InputSrc:= TXmlInputSource.create(stream,pubId,sysId,FTabWidth); - try - if InputSrc.hasMalformedDecl - or not ( InputSrc.declType in [ DT_TEXT_DECLARATION, - DT_XML_OR_TEXT_DECLARATION, - DT_UNSPECIFIED] ) - then begin - sendErrorNotification(ET_INVALID_TEXT_DECL); - result:= false; - end else result:= FDtdReader.parseInternalSubset(InputSrc); - finally - InputSrc.free; - end; -end; - -function TXmlToDomParser.processIntDtdString(const str: String; - const pubId, - sysId: wideString): boolean; -var - StrStream: TStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - StrStream:= TStringStream.create(str); - try - result:= processIntDtdStream(StrStream,pubId,sysId); - finally - StrStream.free; - end; {try} -end; - -function TXmlToDomParser.processIntDtdWideString(str: wideString; - const pubId, - sysId: wideString): boolean; -var - WStrStream: TdomWideStringStream; -begin - if str = '' then raise EAccessViolation.create('Empty string.'); - if str[1] <> #$feff - then str:= concat(wideString(#$feff),str); - WStrStream:= TdomWideStringStream.createFromString(str); - try - result:= processIntDtdStream(WStrStream,pubId,sysId); - finally - WStrStream.free; - end; {try} -end; - -function TXmlToDomParser.sendErrorNotification(const xmlErrorType: TXmlErrorType): boolean; -var - error: TdomError; -begin - error:= TdomError.createFromLocator(xmlErrorType,nil,''); - try - if assigned(FDomImpl) then begin - result:= FDomImpl.handleError(self,error); - end else if error.severity = DOM_SEVERITY_FATAL_ERROR - then result:= false - else result:= true; - finally - error.free; - end; -end; - -procedure TXmlToDomParser.setDomImpl(const impl: TDomImplementation); -begin - inherited; - FDocReader.DOMImpl:= impl; - FDtdReader.DOMImpl:= impl; -end; - -procedure TXmlToDomParser.setTabWidth(const value: integer); -begin - FTabWidth:= value; -end; - -procedure TXmlToDomParser.docSourceCodeToDom(const docSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomNode); -begin - FDocBuilder.referenceNode:= refNode; - if refNode is TdomDocument - then FWFTestContentHandler.testRootFound:= true - else FWFTestContentHandler.testRootFound:= false; - if not processDocSourceCode(docSourceCode,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.docStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomNode); -begin - FDocBuilder.referenceNode:= refNode; - if refNode is TdomDocument - then FWFTestContentHandler.testRootFound:= true - else FWFTestContentHandler.testRootFound:= false; - if not processDocStream(stream,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.docStringToDom(const str: string; - const pubId, - sysId: wideString; - const refNode: TdomNode); -begin - FDocBuilder.referenceNode:= refNode; - if refNode is TdomDocument - then FWFTestContentHandler.testRootFound:= true - else FWFTestContentHandler.testRootFound:= false; - if not processDocString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.docWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomNode); -begin - FDocBuilder.referenceNode:= refNode; - if refNode is TdomDocument - then FWFTestContentHandler.testRootFound:= true - else FWFTestContentHandler.testRootFound:= false; - if not processDocWideString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.extDtdSourceCodeToDom(const ExtDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.extContentModel:= (refNode as TdomCMExternalObject); - if not processExtDtdSourceCode(ExtDtdSourceCode,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.extDtdStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.extContentModel:= (refNode as TdomCMExternalObject); - if not processExtDtdStream(Stream,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.extDtdStringToDom(const str: string; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.extContentModel:= (refNode as TdomCMExternalObject); - if not processExtDtdString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.extDtdWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.extContentModel:= (refNode as TdomCMExternalObject); - if not processExtDtdWideString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.intDtdSourceCodeToDom(const intDtdSourceCode: TXmlSourceCode; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.intContentModel:= (refNode as TdomCMInternalObject); - if not processIntDtdSourceCode(intDtdSourceCode,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.intDtdStreamToDom(const stream: TStream; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.intContentModel:= (refNode as TdomCMInternalObject); - if not processIntDtdStream(stream,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.intDtdStringToDom(const str: string; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.intContentModel:= (refNode as TdomCMInternalObject); - if not processIntDtdString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -procedure TXmlToDomParser.intDtdWideStringToDom( str: wideString; - const pubId, - sysId: wideString; - const refNode: TdomCMNode); -begin - FDtdBuilder.intContentModel:= (refNode as TdomCMInternalObject); - if not processIntDtdWideString(str,pubId,sysId) - then raise EParserException.create('Parser error.'); -end; - -function TXmlToDomParser.fileToDom(const filename: TFileName): TdomDocument; -var - cmObj: TdomCMObject; - intCMObj: TdomCMInternalObject; - extCMObj: TdomCMExternalObject; -begin - if not assigned(FDOMImpl) - then raise EAccessViolation.create('DOMImplementation not specified.'); - if Filename = '' - then raise EAccessViolation.create('Filename not specified.'); - result:= FDOMImpl.createDocument('dummy',nil); - result.clear; // Delete the dummy root element - cmObj:= FDOMImpl.createCMObject(filename); - intCMObj:= FDOMImpl.createCMInternalObject('',''); - extCMObj:= FDOMImpl.createCMExternalObject('',''); - cmObj.setInternalCM(intCMObj); - cmObj.setExternalCM(extCMObj); - result.setContentModel(cmObj); - try - FDocBuilder.referenceNode:= result; - FDtdBuilder.extContentModel:= result.contentModel.externalCM; - FDtdBuilder.intContentModel:= result.contentModel.internalCM; - if not processDocFile('',filename) - then raise EParserException.create('Parser error.'); - if not processDtd(result) - then raise EParserException.create('Parser error.'); - except - FDOMImpl.FreeCMExternalObject(extCMObj); - FDOMImpl.FreeCMInternalObject(intCMObj); - FDOMImpl.freeCMObject(cmObj); - FDOMImpl.freeDocument(result); - raise; - end; - FDocBuilder.referenceNode:= nil; - FDtdBuilder.extContentModel:= nil; - FDtdBuilder.intContentModel:= nil; -end; - -function TXmlToDomParser.sourceCodeToDom(const sc: TXmlSourceCode): TdomDocument; -var - content: TdomCustomStr; - i: integer; -begin - if not assigned(sc) - then raise EAccessViolation.create('TXmlSourceCode not specified.'); - content:= TdomCustomStr.create; - try - for i:= 0 to pred(sc.count) do - content.addWideString(TXmlSourceCodePiece(sc[i]).text); - result:= wideStringToDom(content.value); - finally - content.free; - end; -end; - -function TXmlToDomParser.streamToDom(const stream: TStream): TdomDocument; -var - cmObj: TdomCMObject; - intCMObj: TdomCMInternalObject; - extCMObj: TdomCMExternalObject; -begin - if not assigned(FDOMImpl) then raise EAccessViolation.create('DOMImplementation not specified.'); - if not assigned(stream) then raise EAccessViolation.create('Stream not specified.'); - result:= FDOMImpl.createDocument('dummy',nil); - result.clear; // Delete the dummy root element - cmObj:= FDOMImpl.createCMObject(''); - intCMObj:= FDOMImpl.createCMInternalObject('',''); - extCMObj:= FDOMImpl.createCMExternalObject('',''); - cmObj.setInternalCM(intCMObj); - cmObj.setExternalCM(extCMObj); - result.setContentModel(cmObj); - try - FDocBuilder.referenceNode:= result; - FDtdBuilder.extContentModel:= result.contentModel.externalCM; - FDtdBuilder.intContentModel:= result.contentModel.internalCM; - if not processDocStream(stream,'','') - then raise EParserException.create('Parser error.'); - if not processDtd(result) - then raise EParserException.create('Parser error.'); - except - FDOMImpl.FreeCMExternalObject(extCMObj); - FDOMImpl.FreeCMInternalObject(intCMObj); - FDOMImpl.freeCMObject(cmObj); - FDOMImpl.freeDocument(result); - raise; - end; - FDocBuilder.referenceNode:= nil; - FDtdBuilder.extContentModel:= nil; - FDtdBuilder.intContentModel:= nil; -end; - -function TXmlToDomParser.stringToDom(const str: String): TdomDocument; -var - cmObj: TdomCMObject; - intCMObj: TdomCMInternalObject; - extCMObj: TdomCMExternalObject; -begin - if not assigned(FDOMImpl) then raise EAccessViolation.create('DOMImplementation not specified.'); - result:= FDOMImpl.createDocument('dummy',nil); - result.clear; // Delete the dummy root element - cmObj:= FDOMImpl.createCMObject(''); - intCMObj:= FDOMImpl.createCMInternalObject('',''); - extCMObj:= FDOMImpl.createCMExternalObject('',''); - cmObj.setInternalCM(intCMObj); - cmObj.setExternalCM(extCMObj); - result.setContentModel(cmObj); - try - FDocBuilder.referenceNode:= result; - FDtdBuilder.extContentModel:= result.contentModel.externalCM; - FDtdBuilder.intContentModel:= result.contentModel.internalCM; - if not processDocString(str,'','') - then raise EParserException.create('Parser error.'); - if not processDtd(result) - then raise EParserException.create('Parser error.'); - except - FDOMImpl.FreeCMExternalObject(extCMObj); - FDOMImpl.FreeCMInternalObject(intCMObj); - FDOMImpl.freeCMObject(cmObj); - FDOMImpl.freeDocument(result); - raise; - end; - FDocBuilder.referenceNode:= nil; - FDtdBuilder.extContentModel:= nil; - FDtdBuilder.intContentModel:= nil; -end; - -function TXmlToDomParser.wideStringToDom(str: wideString): TdomDocument; -var - cmObj: TdomCMObject; - intCMObj: TdomCMInternalObject; - extCMObj: TdomCMExternalObject; -begin - if not assigned(FDOMImpl) then raise EAccessViolation.create('DOMImplementation not specified.'); - result:= FDOMImpl.createDocument('dummy',nil); - result.clear; // Delete the dummy root element - cmObj:= FDOMImpl.createCMObject(''); - intCMObj:= FDOMImpl.createCMInternalObject('',''); - extCMObj:= FDOMImpl.createCMExternalObject('',''); - cmObj.setInternalCM(intCMObj); - cmObj.setExternalCM(extCMObj); - result.setContentModel(cmObj); - try - FDocBuilder.referenceNode:= result; - FDtdBuilder.extContentModel:= result.contentModel.externalCM; - FDtdBuilder.intContentModel:= result.contentModel.internalCM; - if not processDocWideString(str,'','') - then raise EParserException.create('Parser error.'); - if not processDtd(result) - then raise EParserException.create('Parser error.'); - except - FDOMImpl.FreeCMExternalObject(extCMObj); - FDOMImpl.FreeCMInternalObject(intCMObj); - FDOMImpl.freeCMObject(cmObj); - FDOMImpl.freeDocument(result); - raise; - end; - FDocBuilder.referenceNode:= nil; - FDtdBuilder.extContentModel:= nil; - FDtdBuilder.intContentModel:= nil; -end; - - - -{ TDomToXmlParser } - -constructor TDomToXmlParser.create(aOwner: TComponent); -begin - inherited; - - FDomReader:= TXmlStandardDomReader.create(self); - FStreamBuilder:= TXmlStreamBuilder.create(self); - - FDomReader.NextHandler:= FStreamBuilder; -end; - -function TDomToXmlParser.getNewLine: TdomNewLineType; -begin - result:= FStreamBuilder.newLine; -end; - -procedure TDomToXmlParser.setNewLine(const value: TdomNewLineType); -begin - FStreamBuilder.newLine:= value; -end; - -function TDomToXmlParser.writeToStream(const wnode: TdomNode; - const encoding: wideString; - const destination: TStream): boolean; -begin - if not assigned(FDOMImpl) - then raise EAccessViolation.create('DOMImplementation not specified.'); - if not assigned(destination) - then raise EAccessViolation.create('Destination stream not specified.'); - if not assigned(wnode) - then raise EAccessViolation.create('Source node not specified.'); - - FDomReader.DOMImpl:= FDOMImpl; - FStreamBuilder.destination:= destination; - FStreamBuilder.defaultEncoding:= encoding; // Raises an ENot_Supported_Err, if the specified encoding is not supported - result:= FDomReader.parse(wnode); -end; - -function TDomToXmlParser.writeToString(const wnode: TdomNode; - const encoding: wideString; - out S: string): boolean; -var - xmlStream: TStringStream; -begin - case StrToEncoding(encoding) of - etUTF16BE, etUTF16LE: raise ENot_Supported_Err.create('Encoding not supported error.'); - end; - - xmlStream:= TStringStream.create(''); - try - result:= writeToStream(wnode,encoding,xmlStream); - S:= xmlStream.dataString; - finally - xmlStream.free; - end; -end; - -function TDomToXmlParser.writeToWideString(const wnode: TdomNode; - out S: wideString): boolean; -var - xmlStream: TdomWideStringStream; -begin - xmlStream:= TdomWideStringStream.create; - try - result:= writeToStream(wnode,'UTF-16BE',xmlStream); - S:= xmlStream.dataString; - finally - xmlStream.free; - end; -end; - - - -{ TCMToXmlParser } - -constructor TCMToXmlParser.create(aOwner: TComponent); -begin - inherited; - - FCMReader:= TXmlStandardCMReader.create(self); - FStreamBuilder:= TXmlStreamBuilder.create(self); - - FCMReader.NextHandler:= FStreamBuilder; -end; - -function TCMToXmlParser.getNewLine: TdomNewLineType; -begin - result:= FStreamBuilder.newLine; -end; - -procedure TCMToXmlParser.setNewLine(const value: TdomNewLineType); -begin - FStreamBuilder.newLine:= value; -end; - -function TCMToXmlParser.writeToStream(const wnode: TdomCMNode; - const encoding: wideString; - const destination: TStream): boolean; -begin - if not assigned(FDOMImpl) - then raise EAccessViolation.create('DOMImplementation not specified.'); - if not assigned(destination) - then raise EAccessViolation.create('Destination stream not specified.'); - if not assigned(wnode) - then raise EAccessViolation.create('Source node not specified.'); - - FCMReader.DOMImpl:= FDOMImpl; - FStreamBuilder.destination:= destination; - FStreamBuilder.defaultEncoding:= encoding; // Raises an ENot_Supported_Err, if the specified encoding is not supported - result:= FCMReader.parse(wnode); -end; - -function TCMToXmlParser.writeToString(const wnode: TdomCMNode; - const encoding: wideString; - out S: string): boolean; -var - xmlStream: TStringStream; -begin - case StrToEncoding(encoding) of - etUTF16BE, etUTF16LE: raise ENot_Supported_Err.create('Encoding not supported error.'); - end; - - xmlStream:= TStringStream.create(''); - try - result:= writeToStream(wnode,encoding,xmlStream); - S:= xmlStream.dataString; - finally - xmlStream.free; - end; -end; - -function TCMToXmlParser.writeToWideString(const wnode: TdomCMNode; - out S: wideString): boolean; -var - xmlStream: TdomWideStringStream; -begin - xmlStream:= TdomWideStringStream.create; - try - result:= writeToStream(wnode,'UTF-16BE',xmlStream); - S:= xmlStream.dataString; - finally - xmlStream.free; - end; -end; - - - -{ TdomXPathSyntaxNodeStack } - -constructor TdomXPathSyntaxNodeStack.create; -begin - inherited; - FNodeList:= TList.create; -end; - -destructor TdomXPathSyntaxNodeStack.destroy; -begin - clear; - FNodeList.free; - inherited; -end; - -procedure TdomXPathSyntaxNodeStack.clear; -var - i: integer; -begin - for i:= 0 to pred(FNodeList.Count) do - TdomXPathSyntaxNode(FNodeList[i]).free; -end; - -function TdomXPathSyntaxNodeStack.getLength: integer; -begin - result:= FNodeList.count; -end; - -function TdomXPathSyntaxNodeStack.peek(offset: integer): TdomXPathSyntaxNode; -var - index: integer; -begin - index:= pred(FNodeList.count)-offset; - if (index < 0) or (index >= FNodeList.count) - then result:= nil - else result:= TdomXPathSyntaxNode(FNodeList.List^[index]); -end; - -function TdomXPathSyntaxNodeStack.pop: TdomXPathSyntaxNode; -begin - result:= FNodeList[pred(FNodeList.count)]; - FNodeList.delete(pred(FNodeList.count)); -end; - -function TdomXPathSyntaxNodeStack.push(node: TdomXPathSyntaxNode): TdomXPathSyntaxNode; -begin - result:= TdomXPathSyntaxNode(FNodeList.add(node)); -end; - -{ TdomXPathSyntaxNode } - -constructor TdomXPathSyntaxNode.create(const value: wideString); -begin - FLeft:= nil; - FRight:= nil; - FValue:= value; -end; - -destructor TdomXPathSyntaxNode.destroy; -begin - if assigned (FLeft) then FLeft.free; - if assigned (FRight) then FRight.free; - inherited; -end; - -function TdomXPathSyntaxNode.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - // By default pass the evaluation to the left child XPath syntax node. - // If none is present then raise an exception. - if assigned(left) then begin - result:= left.evaluate(contextNode,oldResult,resolver); - end else begin - if assigned(oldResult) then oldResult.free; - raise ENot_Supported_Err.create('Not supported error.'); - end; -end; - -{ TdomXPathStep } - -function TdomXPathStep.addStep(const step: TdomXPathStep): boolean; -begin - if not assigned(right) then begin - right:= step; - result:= true; - end else begin - if right is TdomXPathStep - then result:= TdomXPathStep(right).addStep(step) - else result:= false; - end; -end; - -function TdomXPathStep.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a Step the evaluate2 function must be used. -end; - -function TdomXPathStep.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; -var - newResult: TdomXPathSnapshotResult; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - if left is TdomXPathCustomAxisName then begin - - if oldSnapshotResult.snapshotLength > 0 then begin - newResult:= TdomXPathCustomAxisName(left).evaluate2(oldSnapshotResult,resolver); - if right is TdomXPathStep - then result:= TdomXPathStep(right).evaluate2(newResult,resolver) - else result:= newResult; - end else result:= oldSnapshotResult; - - end else raise EXPath_Type_Err.create('XPath type error.'); -end; - -{ TdomXPathCustomAxisName } - -constructor TdomXPathCustomAxisName.create(const avalue: wideString); -begin - inherited; - FAxisType:= XPATH_FORWARD_AXIS; - FPrincipalNodeType:= ntElement_Node; -end; - -function TdomXPathCustomAxisName.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate an AxisName the evaluate2 function must be used. -end; - -function TdomXPathCustomAxisName.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; -var - i: integer; - n: TdomNode; - axisNodeSnapshot,inputSnapshot,nodeTestSnapshot: TdomXPathSnapshotResult; - - function evaluatePredicate(const snapshot: TdomXPathSnapshotResult):TdomXPathSnapshotResult; - begin - if assigned(right) then begin - if right is TdomXPathPredicate then begin - if snapshot.snapshotLength > 0 - then result:= TdomXPathPredicate(right).evaluate2(snapshot,resolver) - else result:= snapshot; - end else begin - snapshot.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - end else result:= snapshot; - end; - - function evaluateNodeTest(const snapshot: TdomXPathSnapshotResult):TdomXPathSnapshotResult; - begin - if assigned(left) then begin - if left is TdomXPathNodeTest then begin - if snapshot.snapshotLength > 0 - then result:= TdomXPathNodeTest(left).evaluate2(snapshot,FPrincipalNodeType,resolver) - else result:= snapshot; - end else begin - snapshot.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - end else raise EXPath_Type_Err.create('XPath type error.'); - end; - -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - try - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - try - with oldSnapshotResult do begin - for i:= 0 to pred(snapshotLength) do begin - n:= snapshotItem(i); - if assigned(n) then begin - inputSnapshot:= getAxisNodeSnapshot(n); - nodeTestSnapshot:= evaluateNodeTest(inputSnapshot); - axisNodeSnapshot:= evaluatePredicate(nodeTestSnapshot); - result.addSnapshotResult(axisNodeSnapshot); - end; - end; - end; - except - result.free; - raise; - end; - finally - oldSnapshotResult.free; - end; -end; - -{ TdomXPathAxisNameAncestor } - -constructor TdomXPathAxisNameAncestor.create(const avalue: wideString); -begin - inherited; - FAxisType:= XPATH_REVERSE_AXIS; -end; - -function TdomXPathAxisNameAncestor.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: - n:= contextNode.parentNode; - ntAttribute_Node: - n:= TdomAttr(contextNode).ownerElement; - ntXPath_Namespace_Node: - n:= TdomXPathNamespace(contextNode).ownerElement; - else - n:= nil; - end; - while assigned(n) do begin - result.add(n); - n:= n.parentNode; - end; - end; -end; - -{ TdomXPathAxisNameAncestorOrSelf } - -constructor TdomXPathAxisNameAncestorOrSelf.create(const avalue: wideString); -begin - inherited; - FAxisType:= XPATH_REVERSE_AXIS; -end; - -function TdomXPathAxisNameAncestorOrSelf.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - result.add(contextNode); - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: - n:= contextNode.parentNode; - ntAttribute_Node: - n:= TdomAttr(contextNode).ownerElement; - ntXPath_Namespace_Node: - n:= TdomXPathNamespace(contextNode).ownerElement; - else - n:= nil; - end; - while assigned(n) do begin - result.add(n); - n:= n.parentNode; - end; - end; -end; - -{ TdomXPathAxisNameAttribute } - -constructor TdomXPathAxisNameAttribute.create(const avalue: wideString); -begin - inherited; - FPrincipalNodeType:= ntAttribute_Node; -end; - -function TdomXPathAxisNameAttribute.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - i: integer; -begin - // xxx Namespace definition attributes must be left out! - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then - with contextNode do - if nodeType = ntElement_Node then - with attributes do - for i:= 0 to pred(length) do - result.add(item(i)); -end; - -{ TdomXPathAxisNameChild } - -function TdomXPathAxisNameChild.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - i: integer; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then - with contextNode.childNodes do - for i:= 0 to pred(length) do - result.add(item(i)); -end; - -{ TdomXPathAxisNameDescendant } - -function TdomXPathAxisNameDescendant.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - with contextNode.ownerDocument.createNodeIterator(contextNode, - [ ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node ], - nil, - false) do begin - n:= NextNode; - if n = contextNode then n:= NextNode; - while assigned(n) do begin - result.add(n); - n:= NextNode; - end; - detach; - end; - contextNode.ownerDocument.clearInvalidNodeIterators; - end; -end; - -{ TdomXPathAxisNameDescendantOrSelf } - -function TdomXPathAxisNameDescendantOrSelf.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - with contextNode.ownerDocument.createNodeIterator(contextNode, - [ ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node ], - nil, - false) do begin - n:= NextNode; - while assigned(n) do begin - result.add(n); - n:= NextNode; - end; - detach; - end; - contextNode.ownerDocument.clearInvalidNodeIterators; - end; -end; - -{ TdomXPathAxisNameFollowing } - -function TdomXPathAxisNameFollowing.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - p,q: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: begin - q:= contextNode; - p:= contextNode.nextSibling; - while assigned(p) do begin - if not ( ( (q.nodeType = ntText_Node) or - (q.nodeType = ntCDATA_Section_Node) or - (q.nodeType = ntEntity_Reference_Node) ) and - ( (p.nodeType = ntText_Node) or - (p.nodeType = ntCDATA_Section_Node) or - (p.nodeType = ntEntity_Reference_Node) ) ) - then result.addSubtree(p); - q:= p; - p.nextSibling; - end; - end; - end; - end; -end; - -{ TdomXPathAxisNameFollowingSibling } - -function TdomXPathAxisNameFollowingSibling.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - p,q: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: begin - q:= contextNode; - p:= contextNode.nextSibling; - while assigned(p) do begin - if not ( ( (q.nodeType = ntText_Node) or - (q.nodeType = ntCDATA_Section_Node) or - (q.nodeType = ntEntity_Reference_Node) ) and - ( (p.nodeType = ntText_Node) or - (p.nodeType = ntCDATA_Section_Node) or - (p.nodeType = ntEntity_Reference_Node) ) ) - then result.add(p); - q:= p; - p.nextSibling; - end; - end; - end; - end; -end; - -{ TdomXPathAxisNameNamespace } - -constructor TdomXPathAxisNameNamespace.create(const avalue: wideString); -begin - inherited; - FPrincipalNodeType:= ntXPath_Namespace_Node; -end; - -function TdomXPathAxisNameNamespace.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -begin - raise ENot_Supported_Err.create('Not supported error.'); - // xxx Add support for namespace nodes in a later version. -end; - -{ TdomXPathAxisNameParent } - -function TdomXPathAxisNameParent.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: - n:= contextNode.parentNode; - ntAttribute_Node: - n:= TdomAttr(contextNode).ownerElement; - ntXPath_Namespace_Node: - n:= TdomXPathNamespace(contextNode).ownerElement; - else - n:= nil; - end; - if assigned(n) - then result.add(n); - end; -end; - -{ TdomXPathAxisNamePreceding } - -constructor TdomXPathAxisNamePreceding.create(const avalue: wideString); -begin - inherited; - FAxisType:= XPATH_REVERSE_AXIS; -end; - -function TdomXPathAxisNamePreceding.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - n: TdomNode; - - procedure addPreceding(const snapshot: TdomXPathSnapshotResult; - const node: TdomNode); - var - p,q: TdomNode; - begin - case node.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: begin - p:= node.previousSibling; - while assigned(p) do begin - q:= p.previousSibling; - if assigned(q) then begin - if not ( ( (p.nodeType = ntText_Node) or - (p.nodeType = ntCDATA_Section_Node) or - (p.nodeType = ntEntity_Reference_Node) ) and - ( (q.nodeType = ntText_Node) or - (q.nodeType = ntCDATA_Section_Node) or - (q.nodeType = ntEntity_Reference_Node) ) ) - then snapshot.addSubtree(p); - p:= q; - end else begin - snapshot.addSubtree(p); - break; - end; - end; - end; - end; - end; - -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - addPreceding(result,contextNode); - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: - n:= contextNode.parentNode; - ntAttribute_Node: - n:= TdomAttr(contextNode).ownerElement; - ntXPath_Namespace_Node: - n:= TdomXPathNamespace(contextNode).ownerElement; - else - n:= nil; - end; - while assigned(n) do begin - addPreceding(result,n); - n:= n.parentNode; - end; - end; -end; - -{ TdomXPathAxisNamePrecedingSibling } - -constructor TdomXPathAxisNamePrecedingSibling.create(const avalue: wideString); -begin - inherited; - FAxisType:= XPATH_REVERSE_AXIS; -end; - -function TdomXPathAxisNamePrecedingSibling.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -var - p,q: TdomNode; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) then begin - case contextNode.nodeType of - ntElement_Node,ntText_Node,ntCDATA_Section_Node,ntEntity_Reference_Node, - ntProcessing_Instruction_Node,ntComment_Node: begin - p:= contextNode.previousSibling; - while assigned(p) do begin - q:= p.previousSibling; - if assigned(q) then begin - if not ( ( (p.nodeType = ntText_Node) or - (p.nodeType = ntCDATA_Section_Node) or - (p.nodeType = ntEntity_Reference_Node) ) and - ( (q.nodeType = ntText_Node) or - (q.nodeType = ntCDATA_Section_Node) or - (q.nodeType = ntEntity_Reference_Node) ) ) - then result.add(p); - p:= q; - end else begin - result.add(p); - break; - end; - end; - end; - end; - end; -end; - -{ TdomXPathAxisNameSelf } - -function TdomXPathAxisNameSelf.getAxisNodeSnapshot(const contextNode: TdomNode): TdomXPathSnapshotResult; -begin - result:= TdomXPathSnapshotResult.create; - result.axisType:= axisType; - if assigned(contextNode) - then result.add(contextNode); -end; - -{ TdomXPathNodeTest } - -function TdomXPathNodeTest.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a NodeTest the evaluate2 function must be used. -end; - -function TdomXPathNodeTest.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const principalNodeType: TdomNodeType; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - - if left is TdomXPathNameTest then begin - result:= TdomXPathNameTest(left).evaluate2(oldSnapshotResult,principalNodeType,resolver); - end else if left is TdomXPathNodeTypeComment then begin - result:= TdomXPathNodeTypeComment(left).evaluate2(oldSnapshotResult); - end else if left is TdomXPathNodeTypeText then begin - result:= TdomXPathNodeTypeText(left).evaluate2(oldSnapshotResult); - end else if left is TdomXPathNodeTypePI then begin - result:= TdomXPathNodeTypePI(left).evaluate2(oldSnapshotResult); - end else if left is TdomXPathNodeTypeNode then begin - result:= oldSnapshotResult; - end else begin - oldSnapshotResult.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; -end; - -{ TdomXPathPredicate } - -function TdomXPathPredicate.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a NodeTest the evaluate2 function must be used. -end; - -function TdomXPathPredicate.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; -var - newContextNode: TdomNode; - nextPredicateResult: TdomXPathSnapshotResult; - predicateResult: TdomXPathResult; - predicateResultAsBoolean: TdomXPathBooleanResult; - contextPosition: integer; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - if not (left is TdomXPathExpr) then begin - oldSnapshotResult.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - - try - result:= TdomXPathSnapshotResult.create; - result.axisType:= oldSnapshotResult.axisType; - with oldSnapshotResult do begin - for contextPosition:= 1 to snapshotLength do begin - newContextNode:= snapshotitem(pred(contextPosition)); - try - predicateResult:= TdomXPathExpr(left).evaluate(newContextNode,nil,resolver); - if predicateResult is TdomXPathNumberResult then begin - if TdomXPathNumberResult(predicateResult).numberValue = contextPosition - then result.add(newContextNode); - predicateResult.free; - end else begin - predicateResultAsBoolean:= XPathBooleanFunc(predicateResult); - if predicateResultAsBoolean.booleanValue - then result.add(newContextNode); - predicateResultAsBoolean.free; - end; - except - result.free; - raise; - end; - end; - end; - - if assigned(right) then begin - if right is TdomXPathPredicate then begin - nextPredicateResult:= TdomXPathPredicate(right).evaluate2(result,resolver); - result:= nextPredicateResult; - end else begin - result.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - end; - - finally - oldSnapshotResult.free; - end; -end; - -{ TdomXPathFunctionCall } - -function TdomXPathFunctionCall.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // xxx Support for function calls missing. -end; - -{ TdomXPathUnionExpr } - -function TdomXPathUnionExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftSnapshotResult: TdomXPathSnapshotResult; -begin - if assigned(oldResult) then oldResult.Free; - - if (left is TdomXPathUnionExpr) and - (right is TdomXPathPathExpr) - then begin - - leftSnapshotResult:= TdomXPathSnapshotResult(left.evaluate(contextNode,nil,resolver)); - leftSnapshotResult.axisType:= XPATH_FORWARD_AXIS; - try - result:= right.evaluate(contextNode,nil,resolver); - TdomXPathSnapshotResult(result).addSnapshotResult(leftSnapshotResult); - finally - leftSnapshotResult.free; - end; - - end else begin - result:= inherited evaluate(contextNode,nil,resolver); - if result is TdomXPathSnapshotResult - then TdomXPathSnapshotResult(result).axisType:= XPATH_FORWARD_AXIS; - end; -end; - -{ TdomXPathPathExpr } - -function TdomXPathPathExpr.addStep(const step: TdomXPathStep): boolean; -begin - if not assigned(right) then begin - right:= step; - result:= true; - end else begin - if right is TdomXPathStep - then result:= TdomXPathStep(right).addStep(step) - else result:= false; - end; -end; - -function TdomXPathPathExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - newResult: TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - if left is TdomXPathFilterExpr then begin - // Filter expression plus optional relative location path: - newResult:= TdomXPathFilterExpr(left).evaluate(contextNode,nil,resolver); - if right is TdomXPathStep then begin - if not (newResult is TdomXPathSnapshotResult) then begin - newResult.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - result:= TdomXPathStep(right).evaluate2(TdomXPathSnapshotResult(newResult),resolver); - end else result:= newResult; - end else if left is TdomXPathAbsoluteLocationPath then begin - // Absolute location path: - if not assigned(contextNode) - then raise EXPath_Type_Err.create('XPath type error.'); - if not assigned(contextNode.ownerDocument) - then raise EXPath_Type_Err.create('XPath type error.'); - newResult:= TdomXPathSnapshotResult.create; - TdomXPathSnapshotResult(newResult).add(contextNode.ownerDocument); - if right is TdomXPathStep - then result:= TdomXPathStep(right).evaluate2(TdomXPathSnapshotResult(newResult),resolver) - else result:= newResult; - end else begin - // Relative location path: - if not (right is TdomXPathStep) - then raise EXPath_Type_Err.create('XPath type error.'); - if not assigned(contextNode) - then raise EXPath_Type_Err.create('XPath type error.'); - newResult:= TdomXPathSnapshotResult.create; - TdomXPathSnapshotResult(newResult).add(contextNode); - result:= TdomXPathStep(right).evaluate2(TdomXPathSnapshotResult(newResult),resolver) - end; -end; - -{ TdomXPathFilterExpr } - -function TdomXPathFilterExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - newResult: TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - if (left is TdomXPathFilterExpr) and - (right is TdomXPathPredicate) - then begin - // Filter expression plus predicate: - newResult:= TdomXPathFilterExpr(left).evaluate(contextNode,nil,resolver); - if not (newResult is TdomXPathSnapshotResult) then begin - newResult.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - - // A predicate filters the node-set with respect to the child axis, - // so the axis always has to be a forward axis, no matter what axis - // the previous expression required: - if newResult is TdomXPathSnapshotResult - then TdomXPathSnapshotResult(newResult).axisType:= XPATH_FORWARD_AXIS; - - result:= TdomXPathPredicate(right).evaluate2(TdomXPathSnapshotResult(newResult),resolver); - end else if (left is TdomXPathPrimaryExpr) and not assigned(right) then begin - // PrimaryExpr: - result:= TdomXPathPrimaryExpr(left).evaluate(contextNode.ownerDocument.documentElement,nil,resolver); - end else raise EXPath_Type_Err.create('XPath type error.'); -end; - -{ TdomXPathOrExpr } - -function TdomXPathOrExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - booleanResult: TdomXPathBooleanResult; -begin - if assigned(oldResult) then oldResult.Free; - if (left is TdomXPathOrExpr) and (right is TdomXPathAndExpr) then begin - booleanResult:= XPathBooleanFunc(left.evaluate(contextNode,nil,resolver)); - if booleanResult.booleanValue then begin - result:= booleanResult; - end else begin - booleanResult.free; - result:= XPathBooleanFunc(right.evaluate(contextNode,nil,resolver)); - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathAndExpr } - -function TdomXPathAndExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - booleanResult: TdomXPathBooleanResult; -begin - if assigned(oldResult) then oldResult.Free; - if (left is TdomXPathOrExpr) and (right is TdomXPathAndExpr) then begin - booleanResult:= XPathBooleanFunc(left.evaluate(contextNode,nil,resolver)); - if not booleanResult.booleanValue then begin - result:= booleanResult; - end else begin - booleanResult.free; - result:= XPathBooleanFunc(right.evaluate(contextNode,nil,resolver)); - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathIsEqualExpr } - -function TdomXPathIsEqualExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult,swapResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftBoolean,rightBoolean: TdomXPathBooleanResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftString,rightString: TdomXPathStringResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - result:= nil; - if ( (left is TdomXPathIsEqualExpr) or - (left is TdomXPathIsNotEqualExpr) ) and - ( (right is TdomXPathLessThanExpr) or - (right is TdomXPathLessThanOrEqualExpr) or - (right is TdomXPathGreaterThanExpr) or - (right is TdomXPathGreaterThanOrEqualExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - // Make sure, that if at least one set takes part in the comparision, - // it is assigned to rightResult: - if rightResult is TdomXPathSnapshotResult then begin - swapResult:= leftResult; - leftResult:= rightResult; - rightResult:= swapResult; - end; - - if leftResult is TdomXPathSnapshotResult then begin - if rightResult is TdomXPathSnapshotResult then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue = leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue = stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end else if (leftResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathBooleanResult) - then begin - leftBoolean:= XPathBooleanFunc(leftResult); - rightBoolean:= XPathBooleanFunc(rightResult); - if leftBoolean.booleanValue = rightBoolean.booleanValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftBoolean; // Re-assignment is required for correct - rightResult:= rightBoolean; // freeing the TdomXPathResult below. - end else if (leftResult is TdomXPathNumberResult) or - (rightResult is TdomXPathNumberResult) - then begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue = rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end else begin - leftString:= XPathStringFunc(leftResult); - rightString:= XPathStringFunc(rightResult); - if leftString.stringValue = rightString.stringValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftString; // Re-assignment is required for correct - rightResult:= rightString; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathIsNotEqualExpr } - -function TdomXPathIsNotEqualExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult,swapResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftBoolean,rightBoolean: TdomXPathBooleanResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftString,rightString: TdomXPathStringResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - result:= nil; - if ( (left is TdomXPathIsEqualExpr) or - (left is TdomXPathIsNotEqualExpr) ) and - ( (right is TdomXPathLessThanExpr) or - (right is TdomXPathLessThanOrEqualExpr) or - (right is TdomXPathGreaterThanExpr) or - (right is TdomXPathGreaterThanOrEqualExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - // Make sure, that if at least one set takes part in the comparision, - // it is assigned to rightResult: - if rightResult is TdomXPathSnapshotResult then begin - swapResult:= leftResult; - leftResult:= rightResult; - rightResult:= swapResult; - end; - - if leftResult is TdomXPathSnapshotResult then begin - if rightResult is TdomXPathSnapshotResult then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue <> leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue <> stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end else if (leftResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathBooleanResult) - then begin - leftBoolean:= XPathBooleanFunc(leftResult); - rightBoolean:= XPathBooleanFunc(rightResult); - if leftBoolean.booleanValue <> rightBoolean.booleanValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftBoolean; // Re-assignment is required for correct - rightResult:= rightBoolean; // freeing the TdomXPathResult below. - end else if (leftResult is TdomXPathNumberResult) or - (rightResult is TdomXPathNumberResult) - then begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue <> rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end else begin - leftString:= XPathStringFunc(leftResult); - rightString:= XPathStringFunc(rightResult); - if leftString.stringValue <> rightString.stringValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftString; // Re-assignment is required for correct - rightResult:= rightString; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathLessThanExpr } - -function TdomXPathLessThanExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathLessThanExpr) or - (left is TdomXPathLessThanOrEqualExpr) or - (left is TdomXPathGreaterThanExpr) or - (left is TdomXPathGreaterThanOrEqualExpr) ) and - ( (right is TdomXPathPlusExpr) or - (right is TdomXPathMinusExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - if (leftResult is TdomXPathSnapshotResult) and - (rightResult is TdomXPathSnapshotResult) - then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue < leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (leftResult is TdomXPathSnapshotResult) and - ( (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) ) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue < stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else if ( (leftResult is TdomXPathNumberResult) or - (leftResult is TdomXPathBooleanResult) or - (leftResult is TdomXPathStringResult) ) and - (rightResult is TdomXPathSnapshotResult) - then begin - stringResult:= XPathStringFunc(leftResult); - for i:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if stringResult.stringValue < TdomXPathSnapshotResult(rightResult).snapshotItem(i).XPathStringValue then begin - result:= TdomXPathBooleanResult.create(true); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue < rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathLessThanOrEqualExpr } - -function TdomXPathLessThanOrEqualExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathLessThanExpr) or - (left is TdomXPathLessThanOrEqualExpr) or - (left is TdomXPathGreaterThanExpr) or - (left is TdomXPathGreaterThanOrEqualExpr) ) and - ( (right is TdomXPathPlusExpr) or - (right is TdomXPathMinusExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - if (leftResult is TdomXPathSnapshotResult) and - (rightResult is TdomXPathSnapshotResult) - then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue <= leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (leftResult is TdomXPathSnapshotResult) and - ( (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) ) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue <= stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else if ( (leftResult is TdomXPathNumberResult) or - (leftResult is TdomXPathBooleanResult) or - (leftResult is TdomXPathStringResult) ) and - (rightResult is TdomXPathSnapshotResult) - then begin - stringResult:= XPathStringFunc(leftResult); - for i:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if stringResult.stringValue <= TdomXPathSnapshotResult(rightResult).snapshotItem(i).XPathStringValue then begin - result:= TdomXPathBooleanResult.create(true); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue <= rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathGreaterThanExpr } - -function TdomXPathGreaterThanExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathLessThanExpr) or - (left is TdomXPathLessThanOrEqualExpr) or - (left is TdomXPathGreaterThanExpr) or - (left is TdomXPathGreaterThanOrEqualExpr) ) and - ( (right is TdomXPathPlusExpr) or - (right is TdomXPathMinusExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - if (leftResult is TdomXPathSnapshotResult) and - (rightResult is TdomXPathSnapshotResult) - then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue > leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (leftResult is TdomXPathSnapshotResult) and - ( (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) ) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue > stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else if ( (leftResult is TdomXPathNumberResult) or - (leftResult is TdomXPathBooleanResult) or - (leftResult is TdomXPathStringResult) ) and - (rightResult is TdomXPathSnapshotResult) - then begin - stringResult:= XPathStringFunc(leftResult); - for i:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if stringResult.stringValue > TdomXPathSnapshotResult(rightResult).snapshotItem(i).XPathStringValue then begin - result:= TdomXPathBooleanResult.create(true); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue > rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathGreaterThanOrEqualExpr } - -function TdomXPathGreaterThanOrEqualExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftResult,rightResult: TdomXPathResult; - stringResult: TdomXPathStringResult; - leftNumber,rightNumber: TdomXPathNumberResult; - leftResultString: wideString; - i,j: integer; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathLessThanExpr) or - (left is TdomXPathLessThanOrEqualExpr) or - (left is TdomXPathGreaterThanExpr) or - (left is TdomXPathGreaterThanOrEqualExpr) ) and - ( (right is TdomXPathPlusExpr) or - (right is TdomXPathMinusExpr) ) - then begin - leftResult:= left.evaluate(contextNode,nil,resolver); - try - rightResult:= right.evaluate(contextNode,nil,resolver); - try - - if (leftResult is TdomXPathSnapshotResult) and - (rightResult is TdomXPathSnapshotResult) - then begin - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - leftResultString:= TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue; - for j:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if TdomXPathSnapshotResult(rightResult).snapshotItem(j).XPathStringValue >= leftResultString then begin - result:= TdomXPathBooleanResult.create(true); - exit; - end; - end; - end; - result:= TdomXPathBooleanResult.create(false); - exit; - end else if (leftResult is TdomXPathSnapshotResult) and - ( (rightResult is TdomXPathNumberResult) or - (rightResult is TdomXPathBooleanResult) or - (rightResult is TdomXPathStringResult) ) - then begin - stringResult:= XPathStringFunc(rightResult); - for i:= 0 to pred(TdomXPathSnapshotResult(leftResult).snapshotLength) do begin - if TdomXPathSnapshotResult(leftResult).snapshotItem(i).XPathStringValue >= stringResult.stringValue then begin - result:= TdomXPathBooleanResult.create(true); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - rightResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else if ( (leftResult is TdomXPathNumberResult) or - (leftResult is TdomXPathBooleanResult) or - (leftResult is TdomXPathStringResult) ) and - (rightResult is TdomXPathSnapshotResult) - then begin - stringResult:= XPathStringFunc(leftResult); - for i:= 0 to pred(TdomXPathSnapshotResult(rightResult).snapshotLength) do begin - if stringResult.stringValue >= TdomXPathSnapshotResult(rightResult).snapshotItem(i).XPathStringValue then begin - result:= TdomXPathBooleanResult.create(true); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end; - end; - result:= TdomXPathBooleanResult.create(false); - leftResult:= stringResult; // Re-assignment is required for correct freeing the TdomXPathResult below. - exit; - end else begin - leftNumber:= XPathNumberFunc(leftResult); - rightNumber:= XPathNumberFunc(rightResult); - if leftNumber.numberValue >= rightNumber.numberValue - then result:= TdomXPathBooleanResult.create(true) - else result:= TdomXPathBooleanResult.create(false); - leftResult:= leftNumber; // Re-assignment is required for correct - rightResult:= rightNumber; // freeing the TdomXPathResult below. - end; - - finally - rightResult.free; - end; - finally - leftResult.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathPlusExpr } - -function TdomXPathPlusExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftNumber,rightNumber: TdomXPathNumberResult; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathPlusExpr) or - (left is TdomXPathMinusExpr) ) and - ( (right is TdomXPathMultiplyExpr) or - (right is TdomXPathDivExpr) or - (right is TdomXPathModExpr) ) - then begin - leftNumber:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - rightNumber:= XPathNumberFunc(right.evaluate(contextNode,nil,resolver)); - try - result:= TdomXPathNumberResult.create(leftNumber.numberValue + rightNumber.numberValue); - finally - rightNumber.Free; - end; - finally - leftNumber.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathMinusExpr } - -function TdomXPathMinusExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftNumber,rightNumber: TdomXPathNumberResult; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathPlusExpr) or - (left is TdomXPathMinusExpr) ) and - ( (right is TdomXPathMultiplyExpr) or - (right is TdomXPathDivExpr) or - (right is TdomXPathModExpr) ) - then begin - leftNumber:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - rightNumber:= XPathNumberFunc(right.evaluate(contextNode,nil,resolver)); - try - result:= TdomXPathNumberResult.create(leftNumber.numberValue - rightNumber.numberValue); - finally - rightNumber.Free; - end; - finally - leftNumber.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathMultiplyExpr } - -function TdomXPathMultiplyExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftNumber,rightNumber: TdomXPathNumberResult; -begin - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathMultiplyExpr) or - (left is TdomXPathDivExpr) or - (left is TdomXPathModExpr) ) and - (right is TdomXPathUnaryExpr) - then begin - leftNumber:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - rightNumber:= XPathNumberFunc(right.evaluate(contextNode,nil,resolver)); - try - result:= TdomXPathNumberResult.create(leftNumber.numberValue * rightNumber.numberValue); - finally - rightNumber.Free; - end; - finally - leftNumber.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathDivExpr } - -function TdomXPathDivExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftNumber,rightNumber: TdomXPathNumberResult; -begin - result:= nil; // Necessary to avoid compiler warning "Return value ... might be undefined." - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathMultiplyExpr) or - (left is TdomXPathDivExpr) or - (left is TdomXPathModExpr) ) and - (right is TdomXPathUnaryExpr) - then begin - leftNumber:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - rightNumber:= XPathNumberFunc(right.evaluate(contextNode,nil,resolver)); - try - if rightNumber.numberValue = 0 - then raise EXPath_Type_Err.create('XPath type error.'); // xxx Replace this by NaN !!!!!! - result:= TdomXPathNumberResult.create(leftNumber.numberValue / rightNumber.numberValue); - finally - rightNumber.Free; - end; - finally - leftNumber.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathModExpr } - -function TdomXPathModExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - leftNumber,rightNumber: TdomXPathNumberResult; -begin - result:= nil; // Necessary to avoid compiler warning "Return value ... might be undefined." - if assigned(oldResult) then oldResult.Free; - if ( (left is TdomXPathMultiplyExpr) or - (left is TdomXPathDivExpr) or - (left is TdomXPathModExpr) ) and - (right is TdomXPathUnaryExpr) - then begin - leftNumber:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - rightNumber:= XPathNumberFunc(right.evaluate(contextNode,nil,resolver)); - try - if rightNumber.numberValue = 0 - then raise EXPath_Type_Err.create('XPath type error.'); // xxx Replace this by NaN !!!!!! - result:= TdomXPathNumberResult.create(leftNumber.numberValue - trunc(leftNumber.numberValue / rightNumber.numberValue) * rightNumber.numberValue); - finally - rightNumber.Free; - end; - finally - leftNumber.free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathUnaryExpr } - -function TdomXPathUnaryExpr.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -var - Number: TdomXPathNumberResult; -begin - if assigned(oldResult) then oldResult.Free; - if (left is TdomXPathMultiplyOperator) and - (right is TdomXPathUnaryExpr) - then begin - Number:= XPathNumberFunc(left.evaluate(contextNode,nil,resolver)); - try - result:= TdomXPathNumberResult.create(-(Number.numberValue)) // xxx Negative 0 as required by IEEE 754 is not supported here. - finally - Number.Free; - end; - end else result:= inherited evaluate(contextNode,oldResult,resolver); -end; - -{ TdomXPathLiteral } - -function TdomXPathLiteral.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - result:= TdomXPathStringResult.create(value); -end; - -{ TdomXPathNumber } - -function TdomXPathNumber.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - result:= TdomXPathNumberResult.create(StrToFloat(value)); -end; - -{ TdomXPathVariableReference } - -function TdomXPathVariableReference.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // xxx Add support for variable references in a later version. -end; - -{ TdomXPathNameTest } - -constructor TdomXPathNameTest.create(const avalue: wideString); -begin - inherited; - if avalue = '*' then begin - FPrefix:= ''; - FLocalName:= '*'; - end else if value[length(avalue)] = '*' then begin - FPrefix:= copy(avalue,1,length(avalue)-2); - FLocalName:= '*'; - end else begin - FPrefix:= xmlExtractPrefix(avalue); - FLocalName:= xmlExtractLocalName(avalue); - end; -end; - -function TdomXPathNameTest.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a NameTest the evaluate2 function must be used. -end; - -function TdomXPathNameTest.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult; - const principalNodeType: TdomNodeType; - const resolver: TdomXPathNSResolver): TdomXPathSnapshotResult; -var - valueNamespaceUri: wideString; - i: integer; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - - if FPrefix <> '' then begin - if FPrefix = 'xmlns' then begin - valueNamespaceUri:= 'http://www.w3.org/2000/xmlns/'; - end else if FPrefix = 'xml' then begin - valueNamespaceUri:= 'http://www.w3.org/XML/1998/namespace'; - end else begin - if not assigned(resolver) then begin - oldSnapshotResult.free; - raise ENamespace_Err.Create('Namespace resolver not specified.'); - end; - valueNamespaceUri:= resolver.lookupNamespaceURI(FPrefix); - if valueNamespaceUri = '' then begin - oldSnapshotResult.free; - raise ENamespace_Err.CreateFmt('Namespace URI of prefix ''%S'' not found.',[FPrefix]); - end; - end; - end else valueNamespaceUri:= ''; - - with oldSnapshotResult do begin - i:= pred(snapshotLength); - while i >= 0 do begin - if snapshotItem(i).nodeType <> principalNodeType then begin - delete(i); - end else if value <> '*' then begin - if FLocalName = '*' then begin - if snapshotItem(i).prefix <> FPrefix - then delete(i); - end else begin - if (snapshotItem(i).prefix <> FPrefix) or - (snapshotItem(i).localName <> FLocalName) - then delete(i); - end; - end; - dec(i); - end; - end; - - result:= oldSnapshotResult; -end; - -{ TdomXPathNodeTypeComment } - -function TdomXPathNodeTypeComment.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a Comment the evaluate2 function must be used. -end; - -function TdomXPathNodeTypeComment.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; -var - i: integer; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - - with oldSnapshotResult do begin - i:= pred(snapshotLength); - while i >= 0 do begin - if snapshotItem(i).nodeType <> ntComment_Node - then delete(i); - dec(i); - end; - end; - - result:= oldSnapshotResult; -end; - -{ TdomXPathNodeTypePI } - -function TdomXPathNodeTypePI.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a PI the evaluate2 function must be used. -end; - -function TdomXPathNodeTypePI.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; -var - i: integer; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - - if assigned(left) then begin - if left is TdomXPathLiteral then begin - with oldSnapshotResult do begin - i:= pred(snapshotLength); - while i >= 0 do begin - with snapshotItem(i) do - if (nodeType <> ntProcessing_Instruction_Node) or - (nodeValue <> TdomXPathLiteral(left).value) - then delete(i); - dec(i); - end; - end; - end else begin - oldSnapshotResult.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - end else begin - with oldSnapshotResult do begin - i:= pred(snapshotLength); - while i >= 0 do begin - if snapshotItem(i).nodeType <> ntProcessing_Instruction_Node - then delete(i); - dec(i); - end; - end; - end; - - result:= oldSnapshotResult; -end; - -{ TdomXPathNodeTypeText } - -function TdomXPathNodeTypeText.evaluate(const contextNode: TdomNode; - const oldResult: TdomXPathResult; - const resolver: TdomXPathNSResolver): TdomXPathResult; -begin - if assigned(oldResult) then oldResult.Free; - raise ENot_Supported_Err.create('Not supported error.'); - // Remark: To evaluate a Text the evaluate2 function must be used. -end; - -function TdomXPathNodeTypeText.evaluate2(const oldSnapshotResult: TdomXPathSnapshotResult): TdomXPathSnapshotResult; -var - i: integer; -begin - if not assigned(oldSnapshotResult) - then raise EXPath_Type_Err.create('XPath type error.'); - - with oldSnapshotResult do begin - i:= pred(snapshotLength); - while i >= 0 do begin - if not (snapshotItem(i).nodeType in [ntText_Node, ntCDATA_Section_Node, ntEntity_Reference_Node] ) - then delete(i); - dec(i); - end; - end; - - result:= oldSnapshotResult; -end; - -{ TdomXPathTokenizer } - -constructor TdomXPathTokenizer.create(const expression: wideString; - const xpathVersion: wideString); -begin - if xpathVersion <> '1.0' - then raise ENot_Supported_Err.CreateFmt('XPath version "%S" not supproted.',[xpathVersion]); - FExpression:= expression; - FLastSymbol:= XPATH_INVALID_TOKEN; // Use XPATH_INVALID_TOKEN as a dummy value - FPosition:= 0; - FDoubleSlashStatus:= SL_NO_DOUBLE_SLASH; - FPositionCache:= 0; - FSymbolCache:= XPATH_INVALID_TOKEN; - FValueCache:= ''; - FCacheIsActive:= false; -end; - -function TdomXPathTokenizer.doubleColonFollows: boolean; -var - i: integer; -begin - result:= false; - for i:= FPosition+1 to pred(length(FExpression)) do begin - if FExpression[i] = #$3a then begin - if FExpression[i+1] = #$3a - then result:= true; - exit; - end; - if not isXmlWhiteSpace(FExpression[i]) then exit; - end; -end; - -function TdomXPathTokenizer.getNextWideChar(out s: wideChar): boolean; -begin - if FPosition = length(FExpression) then begin - s:= #0; - result:= false; - end else begin - inc(FPosition); - s:= FExpression[FPosition]; - result:= true; - end; -end; - -function TdomXPathTokenizer.isFollowing(const symbol: TdomXPathTokenType): boolean; -begin - if not FCacheIsActive then begin - read(FSymbolCache,FValueCache,FPositionCache); - FCacheIsActive:= true; - end; - if FSymbolCache = symbol - then result:= true - else result:= false; -end; - -function TdomXPathTokenizer.leftParanthesisFollows: boolean; -var - i: integer; -begin - result:= false; - for i:= FPosition+1 to length(FExpression) do begin - if FExpression[i] = #$28 then begin - result:= true; - exit; - end; - if not isXmlWhiteSpace(FExpression[i]) then exit; - end; -end; - -function TdomXPathTokenizer.lookAheadNextWideChar(out s: wideChar): boolean; -begin - if FPosition = length(FExpression) then begin - s:= #0; - result:= false; - end else begin - s:= FExpression[FPosition+1]; - result:= true; - end; -end; - -procedure TdomXPathTokenizer.read(out symbol: TdomXPathTokenType; - out value: wideString; - out position: integer); -var - S: WideChar; - L: WideChar; - DecimalPointFound: boolean; -begin - if FCacheIsActive then begin - symbol:= FSymbolCache; - value:= FValueCache; - position:= FPositionCache; - FCacheIsActive:= false; - exit; - end; - case FDoubleSlashStatus of - SL_NO_DOUBLE_SLASH: begin - repeat - if not getNextWideChar(S) then begin - // End of text: - symbol:= XPATH_END_OF_TEXT_TOKEN; - value:= ''; - position:= -1; - exit; - end; - until not isXmlWhiteSpace(S); - - case ord(S) of - $28: begin // '(' - symbol:= XPATH_LEFT_PARENTHESIS_TOKEN; - FLastSymbol:= XPATH_LEFT_PARENTHESIS_TOKEN; - value:= ''; - position:= FPosition; - end; - $29: begin // ')' - symbol:= XPATH_RIGHT_PARENTHESIS_TOKEN; - FLastSymbol:= XPATH_RIGHT_PARENTHESIS_TOKEN; - value:= ''; - position:= FPosition; - end; - $5b: begin // '[' - symbol:= XPATH_LEFT_SQUARE_BRACKET_TOKEN; - FLastSymbol:= XPATH_LEFT_SQUARE_BRACKET_TOKEN; - value:= ''; - position:= FPosition; - end; - $5d: begin // ']' - symbol:= XPATH_RIGHT_SQUARE_BRACKET_TOKEN; - FLastSymbol:= XPATH_RIGHT_SQUARE_BRACKET_TOKEN; - value:= ''; - position:= FPosition; - end; - $40: begin // '@' - symbol:= XPATH_COMMERCIAL_AT_TOKEN; - FLastSymbol:= XPATH_COMMERCIAL_AT_TOKEN; - value:= ''; - position:= FPosition; - end; - $2c: begin // ',' - symbol:= XPATH_COMMA_TOKEN; - FLastSymbol:= XPATH_COMMA_TOKEN; - value:= ''; - position:= FPosition; - end; - $3a: begin // ':' - lookAheadNextWideChar(L); - if L = #$3a then begin // '::' - inc(FPosition); - symbol:= XPATH_DOUBLE_COLON_TOKEN; - FLastSymbol:= XPATH_DOUBLE_COLON_TOKEN; - value:= ''; - position:= FPosition; - end else begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - value:= ':'; - position:= FPosition; - end; - end; - $7c: begin // '|' - symbol:= XPATH_SHEFFER_STROKE_OPERATOR_TOKEN; - FLastSymbol:= XPATH_SHEFFER_STROKE_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end; - $2b: begin // '+' - symbol:= XPATH_PLUS_OPERATOR_TOKEN; - FLastSymbol:= XPATH_PLUS_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end; - $2d: begin // '-' - symbol:= XPATH_MINUS_OPERATOR_TOKEN; - FLastSymbol:= XPATH_MINUS_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end; - $3d: begin // '=' - symbol:= XPATH_IS_EQUAL_OPERATOR_TOKEN; - FLastSymbol:= XPATH_IS_EQUAL_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end; - $21: begin // '!' - lookAheadNextWideChar(L); - if L = #$3d then begin // '!=' - inc(FPosition); - symbol:= XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN; - FLastSymbol:= XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end else begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - value:= '!'; - position:= FPosition; - end; - end; - $2f: begin // '/' - lookAheadNextWideChar(L); - if L = #$2f then begin // '//' - inc(FPosition); - FDoubleSlashStatus:= SL_XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN_FOLLOWS; - end; - symbol:= XPATH_SLASH_OPERATOR_TOKEN; - FLastSymbol:= XPATH_SLASH_OPERATOR_TOKEN; - value:= ''; - position:= FPosition; - end; - $3c: begin // '<' - lookAheadNextWideChar(L); - if L = #$3d then begin // '<=' - inc(FPosition); - symbol:= XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN; - FLastSymbol:= XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN; - end else begin - symbol:= XPATH_LESS_THAN_OPERATOR_TOKEN; - FLastSymbol:= XPATH_LESS_THAN_OPERATOR_TOKEN; - end; - value:= ''; - position:= FPosition; - end; - $3e: begin // '>' - lookAheadNextWideChar(L); - if L = #$3d then begin // '>=' - inc(FPosition); - symbol:= XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN; - FLastSymbol:= XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN; - end else begin - symbol:= XPATH_GREATER_THAN_OPERATOR_TOKEN; - FLastSymbol:= XPATH_GREATER_THAN_OPERATOR_TOKEN; - end; - value:= ''; - position:= FPosition; - end; - $2e: begin // '.' - lookAheadNextWideChar(L); - case ord(L) of - $2e: begin // '..' - inc(FPosition); - symbol:= XPATH_DOUBLE_DOT_TOKEN; - FLastSymbol:= XPATH_DOUBLE_DOT_TOKEN; - value:= ''; - position:= FPosition; - end; - $30..$39: begin // Digit - value:= '.'; - repeat - inc(FPosition); - value:= concat(value,wideString(L)); - lookAheadNextWideChar(L); - until not (ord(L) in [$30..$39]); - symbol:= XPATH_NUMBER_TOKEN; - FLastSymbol:= XPATH_NUMBER_TOKEN; - position:= FPosition; - end; - else // '.' - symbol:= XPATH_SINGLE_DOT_TOKEN; - FLastSymbol:= XPATH_SINGLE_DOT_TOKEN; - value:= ''; - position:= FPosition; - end; {case ... else} - end; - $30..$39: begin // Digit - value:= S; - DecimalPointFound:= false; - if lookAheadNextWideChar(S) then begin - while (ord(S) in [$30..$39]) or ((S = #$2e) and not DecimalPointFound) do begin - inc(FPosition); - value:= concat(value,wideString(S)); - if S = #$2e then DecimalPointFound:= true; - lookAheadNextWideChar(S); - end; - end; - symbol:= XPATH_NUMBER_TOKEN; - FLastSymbol:= XPATH_NUMBER_TOKEN; - position:= FPosition; - end; - $22: begin // '"' - value:= ''; - if not getNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - exit; - end; - while S <> #$22 do begin - value:= concat(value,wideString(S)); - if not getNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - exit; - end; - end; - symbol:= XPATH_LITERAL_TOKEN; - FLastSymbol:= XPATH_LITERAL_TOKEN; - position:= FPosition; - end; - $27: begin // '"' - value:= ''; - if not getNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - exit; - end; - while S <> #$27 do begin - value:= concat(value,wideString(S)); - if not getNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - exit; - end; - end; - symbol:= XPATH_LITERAL_TOKEN; - FLastSymbol:= XPATH_LITERAL_TOKEN; - position:= FPosition; - end; - $24: begin // '$' - if not lookAheadNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - exit; - end; - if not ( IsXmlLetter(S) or ( S = #$5f ) ) then begin // Letter or '_'? - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - value:= wideString(S); - exit; - end; - value:= ''; - while IsXmlNCNameChar(S) do begin - inc(FPosition); - value:= concat(value,wideString(S)); - if not lookAheadNextWideChar(S) - then break; - end; - if S = #$3a then begin // ':' ? - inc(FPosition); - if not lookAheadNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - value:= concat(value,':'); - exit; - end; - if S = #$3a then begin // '::' ? - dec(FPosition); - end else begin - value:= concat(value,':'); - if not ( IsXmlLetter(S) or ( S = #$5f ) ) then begin // Letter or '_'? - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - value:= concat(value,wideString(S)); - exit; - end; - while IsXmlNCNameChar(S) do begin - inc(FPosition); - value:= concat(value,wideString(S)); - if not self.lookAheadNextWideChar(S) - then break; - end; - end; - end; - symbol:= XPATH_VARIABLE_REFERENCE_TOKEN; - FLastSymbol:= XPATH_VARIABLE_REFERENCE_TOKEN; - position:= FPosition; - end; - $2a: begin // '*' - if FLastSymbol in [ XPATH_LEFT_PARENTHESIS_TOKEN, - XPATH_LEFT_SQUARE_BRACKET_TOKEN, - XPATH_COMMERCIAL_AT_TOKEN, - XPATH_COMMA_TOKEN, - XPATH_DOUBLE_COLON_TOKEN, - XPATH_AND_OPERATOR_TOKEN, - XPATH_OR_OPERATOR_TOKEN, - XPATH_MOD_OPERATOR_TOKEN, - XPATH_DIV_OPERATOR_TOKEN, - XPATH_MULTIPLY_OPERATOR_TOKEN, - XPATH_SLASH_OPERATOR_TOKEN, - XPATH_SHEFFER_STROKE_OPERATOR_TOKEN, - XPATH_PLUS_OPERATOR_TOKEN, - XPATH_MINUS_OPERATOR_TOKEN, - XPATH_IS_EQUAL_OPERATOR_TOKEN, - XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN, - XPATH_LESS_THAN_OPERATOR_TOKEN, - XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_INVALID_TOKEN // = no preceding token - ] - then begin - symbol:= XPATH_NAME_TEST_TOKEN; - FLastSymbol:= XPATH_NAME_TEST_TOKEN; - value:= '*'; - end else begin - symbol:= XPATH_MULTIPLY_OPERATOR_TOKEN; - FLastSymbol:= XPATH_MULTIPLY_OPERATOR_TOKEN; - value:= ''; - end; - position:= FPosition; - end; - else {case ...} - - // Parse NCName: - if not ( IsXmlLetter(S) or ( S = #$5f ) ) then begin // Letter or '_'? - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - value:= wideString(S); - exit; - end; - value:= ''; - dec(FPosition); - while IsXmlNCNameChar(S) do begin - inc(FPosition); - value:= concat(value,wideString(S)); - if not lookAheadNextWideChar(S) - then break; - end; - - if not ( FLastSymbol in [ XPATH_LEFT_PARENTHESIS_TOKEN, - XPATH_LEFT_SQUARE_BRACKET_TOKEN, - XPATH_COMMERCIAL_AT_TOKEN, - XPATH_COMMA_TOKEN, - XPATH_DOUBLE_COLON_TOKEN, - XPATH_AND_OPERATOR_TOKEN, - XPATH_OR_OPERATOR_TOKEN, - XPATH_MOD_OPERATOR_TOKEN, - XPATH_DIV_OPERATOR_TOKEN, - XPATH_MULTIPLY_OPERATOR_TOKEN, - XPATH_SLASH_OPERATOR_TOKEN, - XPATH_SHEFFER_STROKE_OPERATOR_TOKEN, - XPATH_PLUS_OPERATOR_TOKEN, - XPATH_MINUS_OPERATOR_TOKEN, - XPATH_IS_EQUAL_OPERATOR_TOKEN, - XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN, - XPATH_LESS_THAN_OPERATOR_TOKEN, - XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OPERATOR_TOKEN, - XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN, - XPATH_INVALID_TOKEN // = no preceding token - ] ) - then begin - if value = 'and' then begin - symbol:= XPATH_AND_OPERATOR_TOKEN; - FLastSymbol:= XPATH_AND_OPERATOR_TOKEN; - value:= ''; - end else if value = 'or' then begin - symbol:= XPATH_OR_OPERATOR_TOKEN; - FLastSymbol:= XPATH_OR_OPERATOR_TOKEN; - value:= ''; - end else if value = 'mod' then begin - symbol:= XPATH_MOD_OPERATOR_TOKEN; - FLastSymbol:= XPATH_MOD_OPERATOR_TOKEN; - value:= ''; - end else if value = 'div' then begin - symbol:= XPATH_DIV_OPERATOR_TOKEN; - FLastSymbol:= XPATH_DIV_OPERATOR_TOKEN; - value:= ''; - end else begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - end; - position:= FPosition; - exit; - end; - - if doubleColonFollows then begin - if value = 'ancestor' then begin - symbol:= XPATH_AXIS_NAME_ANCESTOR_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_ANCESTOR_TOKEN; - value:= ''; - end else if value = 'ancestor-or-self' then begin - symbol:= XPATH_AXIS_NAME_ANCESTOR_OR_SELF_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_ANCESTOR_OR_SELF_TOKEN; - value:= ''; - end else if value = 'attribute' then begin - symbol:= XPATH_AXIS_NAME_ATTRIBUTE_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_ATTRIBUTE_TOKEN; - value:= ''; - end else if value = 'child' then begin - symbol:= XPATH_AXIS_NAME_CHILD_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_CHILD_TOKEN; - value:= ''; - end else if value = 'descendant' then begin - symbol:= XPATH_AXIS_NAME_DESCENDANT_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_DESCENDANT_TOKEN; - value:= ''; - end else if value = 'descendant-or-self' then begin - symbol:= XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN; - value:= ''; - end else if value = 'following' then begin - symbol:= XPATH_AXIS_NAME_FOLLOWING_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_FOLLOWING_TOKEN; - value:= ''; - end else if value = 'following-sibling' then begin - symbol:= XPATH_AXIS_NAME_FOLLOWING_SIBLING_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_FOLLOWING_SIBLING_TOKEN; - value:= ''; - end else if value = 'namespace' then begin - symbol:= XPATH_AXIS_NAME_NAMESPACE_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_NAMESPACE_TOKEN; - value:= ''; - end else if value = 'parent' then begin - symbol:= XPATH_AXIS_NAME_PARENT_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_PARENT_TOKEN; - value:= ''; - end else if value = 'preceding' then begin - symbol:= XPATH_AXIS_NAME_PRECEDING_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_PRECEDING_TOKEN; - end else if value = 'preceding-sibling' then begin - symbol:= XPATH_AXIS_NAME_PRECEDING_SIBLING_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_PRECEDING_SIBLING_TOKEN; - value:= ''; - end else if value = 'self' then begin - symbol:= XPATH_AXIS_NAME_SELF_TOKEN; - FLastSymbol:= XPATH_AXIS_NAME_SELF_TOKEN; - value:= ''; - end else begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - value:= ''; - end; - position:= FPosition; - exit; - end; - - if S = #$3a then begin // ':' ? - inc(FPosition); - if not lookAheadNextWideChar(S) then begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - position:= FPosition; - value:= concat(value,':'); - exit; - end; - if S = #$3a then begin // '::' ? - dec(FPosition); - end else begin - value:= concat(value,':'); - if not ( IsXmlLetter(S) or ( S = #$5f ) ) then begin // Letter or '_'? - if S = #$2a then begin // '* - symbol:= XPATH_NAME_TEST_TOKEN; - FLastSymbol:= XPATH_NAME_TEST_TOKEN; - end else begin - symbol:= XPATH_INVALID_TOKEN; - FLastSymbol:= XPATH_INVALID_TOKEN; - end; - inc(FPosition); - position:= FPosition; - value:= concat(value,wideString(S)); - exit; - end; - while IsXmlNCNameChar(S) do begin - inc(FPosition); - value:= concat(value,wideString(S)); - if not self.lookAheadNextWideChar(S) - then break; - end; - end; - end; - - if leftParanthesisFollows then begin - if value = 'comment' then begin - symbol:= XPATH_NODE_TYPE_COMMENT_TOKEN; - FLastSymbol:= XPATH_NODE_TYPE_COMMENT_TOKEN; - value:= ''; - end else if value = 'text' then begin - symbol:= XPATH_NODE_TYPE_TEXT_TOKEN; - FLastSymbol:= XPATH_NODE_TYPE_TEXT_TOKEN; - value:= ''; - end else if value = 'processing-instruction' then begin - symbol:= XPATH_NODE_TYPE_PI_TOKEN; - FLastSymbol:= XPATH_NODE_TYPE_PI_TOKEN; - value:= ''; - end else if value = 'node' then begin - symbol:= XPATH_NODE_TYPE_NODE_TOKEN; - FLastSymbol:= XPATH_NODE_TYPE_NODE_TOKEN; - value:= ''; - end else begin - symbol:= XPATH_FUNCTION_NAME_TOKEN; - FLastSymbol:= XPATH_FUNCTION_NAME_TOKEN; - end; - end else begin - symbol:= XPATH_NAME_TEST_TOKEN; - FLastSymbol:= XPATH_NAME_TEST_TOKEN; - end; - position:= FPosition; - - end; {case ... else ...} - - end; - SL_XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN_FOLLOWS: begin - symbol:= XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN; - // FLastSymbol:= XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN; - // FLastSymbol will never be evaluated, so we do not need to set it. - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_XPATH_DOUBLE_COLON_TOKEN_FOLLOWS; - end; - SL_XPATH_DOUBLE_COLON_TOKEN_FOLLOWS: begin - symbol:= XPATH_DOUBLE_COLON_TOKEN; - // FLastSymbol:= XPATH_DOUBLE_COLON_TOKEN; - // FLastSymbol will never be evaluated, so we do not need to set it. - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_XPATH_NODE_TYPE_NODE_TOKEN_FOLLOWS; - end; - SL_XPATH_NODE_TYPE_NODE_TOKEN_FOLLOWS: begin - symbol:= XPATH_NODE_TYPE_NODE_TOKEN; - // FLastSymbol:= XPATH_NODE_TYPE_NODE_TOKEN; - // FLastSymbol will never be evaluated, so we do not need to set it. - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_XPATH_LEFT_PARENTHESIS_FOLLOWS; - end; - SL_XPATH_LEFT_PARENTHESIS_FOLLOWS: begin - symbol:= XPATH_LEFT_PARENTHESIS_TOKEN; - // FLastSymbol:= XPATH_LEFT_PARENTHESIS_TOKEN; - // FLastSymbol will never be evaluated, so we do not need to set it. - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_XPATH_RIGHT_PARENTHESIS_FOLLOWS; - end; - SL_XPATH_RIGHT_PARENTHESIS_FOLLOWS: begin - symbol:= XPATH_RIGHT_PARENTHESIS_TOKEN; - // FLastSymbol:= XPATH_RIGHT_PARENTHESIS_TOKEN; - // FLastSymbol will never be evaluated, so we do not need to set it. - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_XPATH_SLASH_OPERATOR_TOKEN_FOLLLOWS; - end; - SL_XPATH_SLASH_OPERATOR_TOKEN_FOLLLOWS: begin - symbol:= XPATH_SLASH_OPERATOR_TOKEN; - FLastSymbol:= XPATH_SLASH_OPERATOR_TOKEN; - position:= FPosition; - value:= ''; - FDoubleSlashStatus:= SL_NO_DOUBLE_SLASH; - end; - end; {case FDoubleSlashStatus ...} -end; - -procedure TdomXPathTokenizer.reset; -begin - FCacheIsActive:= false; - FLastSymbol:= XPATH_INVALID_TOKEN; // Use XPATH_INVALID_TOKEN as a dummy value - FPosition:= 0; - FDoubleSlashStatus:= SL_NO_DOUBLE_SLASH; -end; - -{ TdomXPathExpression } - -constructor TdomXPathExpression.create(const aOwner: TdomDocument; - const expression: wideString; - const resolver: TdomXPathNSResolver); -begin - FExpression:= expression; - FIsPrepared:= false; - FIsValid:= false; - FOwnerDocument:= aOwner; - FResolver:= resolver; - FSyntaxTree:= nil; -end; - -function TdomXPathExpression.createSyntaxNode(const symbol: TdomXPathTokenType; - const value: wideString): TdomXPathSyntaxNode; -begin - case symbol of - XPATH_LEFT_PARENTHESIS_TOKEN: - result:= TdomXPathLeftParenthesis.create(value); - XPATH_RIGHT_PARENTHESIS_TOKEN: - result:= TdomXPathRightParenthesis.create(value); - XPATH_LEFT_SQUARE_BRACKET_TOKEN: - result:= TdomXPathLeftSquareBracket.create(value); - XPATH_RIGHT_SQUARE_BRACKET_TOKEN: - result:= TdomXPathRightSquareBracket.create(value); - XPATH_SINGLE_DOT_TOKEN: - result:= TdomXPathSingleDot.create(value); - XPATH_DOUBLE_DOT_TOKEN: - result:= TdomXPathDoubleDot.create(value); - XPATH_COMMERCIAL_AT_TOKEN: - result:= TdomXPathCommercialAt.create(value); - XPATH_COMMA_TOKEN: - result:= TdomXPathComma.create(value); - XPATH_DOUBLE_COLON_TOKEN: - result:= TdomXPathDoubleColon.create(value); - XPATH_NAME_TEST_TOKEN: - result:= TdomXPathNameTest.create(value); - XPATH_NODE_TYPE_COMMENT_TOKEN: - result:= TdomXPathNodeTypeComment.create(value); - XPATH_NODE_TYPE_TEXT_TOKEN: - result:= TdomXPathNodeTypeText.create(value); - XPATH_NODE_TYPE_PI_TOKEN: - result:= TdomXPathNodeTypePI.create(value); - XPATH_NODE_TYPE_NODE_TOKEN: - result:= TdomXPathNodeTypeNode.create(value); - XPATH_AND_OPERATOR_TOKEN: - result:= TdomXPathAndOperator.create(value); - XPATH_OR_OPERATOR_TOKEN: - result:= TdomXPathOrOperator.create(value); - XPATH_MOD_OPERATOR_TOKEN: - result:= TdomXPathModOperator.create(value); - XPATH_DIV_OPERATOR_TOKEN: - result:= TdomXPathDivOperator.create(value); - XPATH_MULTIPLY_OPERATOR_TOKEN: - result:= TdomXPathMultiplyOperator.create(value); - XPATH_SLASH_OPERATOR_TOKEN: - result:= TdomXPathSlashOperator.create(value); - XPATH_SHEFFER_STROKE_OPERATOR_TOKEN: - result:= TdomXPathShefferStrokeOperator.create(value); - XPATH_PLUS_OPERATOR_TOKEN: - result:= TdomXPathPlusOperator.create(value); - XPATH_MINUS_OPERATOR_TOKEN: - result:= TdomXPathMinusOperator.create(value); - XPATH_IS_EQUAL_OPERATOR_TOKEN: - result:= TdomXPathIsEqualOperator.create(value); - XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN: - result:= TdomXPathIsNotEqualOperator.create(value); - XPATH_LESS_THAN_OPERATOR_TOKEN: - result:= TdomXPathLessThanOperator.create(value); - XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN: - result:= TdomXPathLessThanOrEqualOperator.create(value); - XPATH_GREATER_THAN_OPERATOR_TOKEN: - result:= TdomXPathGreaterThanOperator.create(value); - XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN: - result:= TdomXPathGreaterThanOrEqualOperator.create(value); - XPATH_FUNCTION_NAME_TOKEN: - result:= TdomXPathFunctionName.create(value); - XPATH_AXIS_NAME_ANCESTOR_TOKEN: - result:= TdomXPathAxisNameAncestor.create(value); - XPATH_AXIS_NAME_ANCESTOR_OR_SELF_TOKEN: - result:= TdomXPathAxisNameAncestorOrSelf.create(value); - XPATH_AXIS_NAME_ATTRIBUTE_TOKEN: - result:= TdomXPathAxisNameAttribute.create(value); - XPATH_AXIS_NAME_CHILD_TOKEN: - result:= TdomXPathAxisNameChild.create(value); - XPATH_AXIS_NAME_DESCENDANT_TOKEN: - result:= TdomXPathAxisNameDescendant.create(value); - XPATH_AXIS_NAME_DESCENDANT_OR_SELF_TOKEN: - result:= TdomXPathAxisNameDescendantOrSelf.create(value); - XPATH_AXIS_NAME_FOLLOWING_TOKEN: - result:= TdomXPathAxisNameFollowing.create(value); - XPATH_AXIS_NAME_FOLLOWING_SIBLING_TOKEN: - result:= TdomXPathAxisNameFollowingSibling.create(value); - XPATH_AXIS_NAME_NAMESPACE_TOKEN: - result:= TdomXPathAxisNameNamespace.create(value); - XPATH_AXIS_NAME_PARENT_TOKEN: - result:= TdomXPathAxisNameParent.create(value); - XPATH_AXIS_NAME_PRECEDING_TOKEN: - result:= TdomXPathAxisNamePreceding.create(value); - XPATH_AXIS_NAME_PRECEDING_SIBLING_TOKEN: - result:= TdomXPathAxisNamePrecedingSibling.create(value); - XPATH_AXIS_NAME_SELF_TOKEN: - result:= TdomXPathAxisNameSelf.create(value); - XPATH_LITERAL_TOKEN: - result:= TdomXPathLiteral.create(value); - XPATH_NUMBER_TOKEN: - result:= TdomXPathNumber.create(value); - XPATH_VARIABLE_REFERENCE_TOKEN: - result:= TdomXPathVariableReference.create(value); - else - result:= nil; - end; -end; - -function TdomXPathExpression.evaluate(const contextNode: TdomNode; - const typeCodes: TdomXPathResultTypes; - const oldResult: TdomXPathResult): TdomXPathResult; -var - dummyResult: TdomXPathResult; -begin - if contextnode.ownerDocument <> FOwnerDocument then begin - if assigned(oldResult) then oldResult.free; - raise EWrong_Document_Err.create('Wrong document error.'); - end; - if ( (contextNode.nodeType = ntText_Node) and (contextNode.nodeValue = '') ) or - not (contextNode.nodeType in [ ntElement_Node, - ntAttribute_Node, - ntText_Node, - ntCDATA_Section_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node, - ntXPath_Namespace_Node ] ) - then begin - if assigned(oldResult) then oldResult.free; - raise ENot_Supported_Err.create('Not supported error.'); - end; - if prepare then begin - result:= FSyntaxTree.evaluate(contextNode,oldResult,FResolver); - if not(result.resultType in typeCodes) then begin - if XPATH_BOOLEAN_TYPE in typeCodes then begin - dummyResult:= result; - result:= XPathBooleanFunc(dummyResult); - end else if XPATH_NUMBER_TYPE in typeCodes then begin - dummyResult:= result; - result:= XPathNumberFunc(dummyResult); - end else if XPATH_STRING_TYPE in typeCodes then begin - dummyResult:= result; - result:= XPathStringFunc(dummyResult); - end else begin - result.free; - raise EXPath_Type_Err.create('XPath type error.'); - end; - end; - end else begin - if assigned(oldResult) then oldResult.free; - raise EXPath_Invalid_Expression_Err.create('Invalid XPath expression error.'); - end; -end; - -function TdomXPathExpression.prepare: boolean; -var - position: integer; - stack: TdomXPathSyntaxNodeStack; - symbol: TdomXPathTokenType; - tokenizer: TdomXPathTokenizer; - value: wideString; - axisNode: TdomXPathSyntaxNode; - lastSyntaxNode: TdomXPathSyntaxNode; - newSyntaxNode: TdomXPathSyntaxNode; - nodeTestNode: TdomXPathSyntaxNode; - lastArgument: TdomXPathArgument; - newArgument: TdomXPathArgument; - nodeTypePI: TdomXPathSyntaxNode; - PILiteral: TdomXPathSyntaxNode; -begin - if not FIsPrepared then begin - tokenizer:= TdomXPathTokenizer.create(FExpression,'1.0'); - try - stack:= TdomXPathSyntaxNodeStack.create; - try - repeat - tokenizer.read(symbol,value,position); - case symbol of - XPATH_END_OF_TEXT_TOKEN, XPATH_INVALID_TOKEN: break; - else - lastSyntaxNode:= createSyntaxNode(symbol,value); - repeat - // -- if lastSyntaxNode is TdomXPathAbsoluteLocationPath then ... -- - // (TdomXPathAbsoluteLocationPath will not appear in this loop, - // so we leave it out here.) - if lastSyntaxNode is TdomXPathAndExpr then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_PLUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MINUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_AND_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathOrOperator) and - ( (stack.peek(1) is TdomXPathOrExpr) ) - then begin - // XPath 1.0, prod. [21]: - stack.pop.free; - newSyntaxNode:= TdomXPathOrExpr.create(''); // Create OrExpr. - newSyntaxNode.left:= stack.pop; // Append OrExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append AndExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [21]: - newSyntaxNode:= TdomXPathOrExpr.create(''); // Create OrExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append AndExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathAndOperator) or - // (lastSyntaxNode is TdomXPathArgument) or // TdomXPathArgument will not appear in this loop, so we leave it out here. - (lastSyntaxNode is TdomXPathComma) or - (lastSyntaxNode is TdomXPathCommercialAt) or - (lastSyntaxNode is TdomXPathCustomAxisName) - then begin - stack.push(lastSyntaxNode); - break; - end else if (lastSyntaxNode is TdomXPathDivExpr) or - (lastSyntaxNode is TdomXPathModExpr) or - (lastSyntaxNode is TdomXPathMultiplyExpr) - then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathPlusOperator) and - ( (stack.peek(1) is TdomXPathPlusExpr) or - (stack.peek(1) is TdomXPathMinusExpr) ) - then begin - // XPath 1.0, prod. [25]: - stack.pop.free; - newSyntaxNode:= TdomXPathPlusExpr.create(''); // Create PlusExpr. - newSyntaxNode.left:= stack.pop; // Append AdditiveExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append MultiplicativeExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathMinusOperator) and - ( (stack.peek(1) is TdomXPathPlusExpr) or - (stack.peek(1) is TdomXPathMinusExpr) ) - then begin - // XPath 1.0, prod. [25]: - stack.pop.free; - newSyntaxNode:= TdomXPathMinusExpr.create(''); // Create MinusExpr. - newSyntaxNode.left:= stack.pop; // Append AdditiveExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append MultiplicativeExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [25]: - newSyntaxNode:= TdomXPathPlusExpr.create(''); // Create PlusExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append MultiplicativeExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathDivOperator) or - (lastSyntaxNode is TdomXPathDoubleColon) - then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathDoubleDot then begin - // XPath 1.0, prod. [12]: - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathStep.create(''); - lastSyntaxNode.left:= TdomXPathAxisNameParent.create(''); - lastSyntaxNode.left.left:= TdomXPathNodeTest.create(''); - lastSyntaxNode.left.left.left:= TdomXPathNodeTypeNode.create(''); - end else if lastSyntaxNode is TdomXPathExpr then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathFilterExpr then begin - // XPath 1.0, prod. [19]: - if tokenizer.isFollowing(XPATH_SLASH_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LEFT_SQUARE_BRACKET_TOKEN) - then begin - // A Slash or Predicate is following, so we postpone building the PathExpr. - stack.push(lastSyntaxNode); - break; - end; - newSyntaxNode:= TdomXPathPathExpr.create(''); // Create PathExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append FilterExpr. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathFunctionCall then begin - // XPath 1.0, prod. [15]: - newSyntaxNode:= TdomXPathPrimaryExpr.create(''); // Create PrimaryExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append FunctionCall. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathFunctionName then begin - stack.push(lastSyntaxNode); - break; - end else if (lastSyntaxNode is TdomXPathGreaterThanExpr) or - (lastSyntaxNode is TdomXPathGreaterThanOrEqualExpr) or - (lastSyntaxNode is TdomXPathLessThanExpr) or - (lastSyntaxNode is TdomXPathLessThanOrEqualExpr) - then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_PLUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MINUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathIsEqualOperator) and - ( (stack.peek(1) is TdomXPathIsEqualExpr) or - (stack.peek(1) is TdomXPathIsNotEqualExpr) ) - then begin - // XPath 1.0, prod. [23]: - stack.pop.free; - newSyntaxNode:= TdomXPathIsEqualExpr.create(''); // Create IsEqualExpr. - newSyntaxNode.left:= stack.pop; // Append EqualityExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append RelationalExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathIsNotEqualOperator) and - ( (stack.peek(1) is TdomXPathIsEqualExpr) or - (stack.peek(1) is TdomXPathIsNotEqualExpr) ) - then begin - // XPath 1.0, prod. [23]: - stack.pop.free; - newSyntaxNode:= TdomXPathIsNotEqualExpr.create(''); // Create IsNotEqualExpr. - newSyntaxNode.left:= stack.pop; // Append EqualityExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append RelationalExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [23]: - newSyntaxNode:= TdomXPathIsEqualExpr.create(''); // Create IsEqualExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append RelationalExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathGreaterThanOperator) or - (lastSyntaxNode is TdomXPathGreaterThanOrEqualOperator) - then begin - stack.push(lastSyntaxNode); - break; - end else if (lastSyntaxNode is TdomXPathIsEqualExpr) or - (lastSyntaxNode is TdomXPathIsNotEqualExpr) - then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_PLUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MINUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathAndOperator) and - ( (stack.peek(1) is TdomXPathAndExpr) ) - then begin - // XPath 1.0, prod. [22]: - stack.pop.free; - newSyntaxNode:= TdomXPathAndExpr.create(''); // Create AndExpr. - newSyntaxNode.left:= stack.pop; // Append AndExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append EqualityExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [22]: - newSyntaxNode:= TdomXPathAndExpr.create(''); // Create AndExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append EqualityExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathIsEqualOperator) or - (lastSyntaxNode is TdomXPathIsNotEqualOperator) or - (lastSyntaxNode is TdomXPathLeftParenthesis) or - (lastSyntaxNode is TdomXPathLeftSquareBracket) or - (lastSyntaxNode is TdomXPathLessThanOperator) or - (lastSyntaxNode is TdomXPathLessThanOrEqualOperator) - then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathLiteral then begin - if (stack.peek(0) is TdomXPathLeftParenthesis) and - (stack.peek(1) is TdomXPathNodeTypePI) and - tokenizer.isFollowing(XPATH_RIGHT_PARENTHESIS_TOKEN) - then begin - // Literal is part of a processing-instruction node test, - // so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end else begin - // XPath 1.0, prod. [15]: - newSyntaxNode:= TdomXPathPrimaryExpr.create(''); // Create PrimaryExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append Literal. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathMinusExpr) or - (lastSyntaxNode is TdomXPathPlusExpr) - then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_PLUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MINUS_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathLessThanOperator) and - ( (stack.peek(1) is TdomXPathLessThanExpr) or - (stack.peek(1) is TdomXPathLessThanOrEqualExpr) or - (stack.peek(1) is TdomXPathGreaterThanExpr) or - (stack.peek(1) is TdomXPathGreaterThanOrEqualExpr) ) - then begin - // XPath 1.0, prod. [24]: - stack.pop.free; - newSyntaxNode:= TdomXPathLessThanExpr.create(''); // Create LessThanExpr. - newSyntaxNode.left:= stack.pop; // Append RelationalExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append AdditiveExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathLessThanOrEqualOperator) and - ( (stack.peek(1) is TdomXPathLessThanExpr) or - (stack.peek(1) is TdomXPathLessThanOrEqualExpr) or - (stack.peek(1) is TdomXPathGreaterThanExpr) or - (stack.peek(1) is TdomXPathGreaterThanOrEqualExpr) ) - then begin - // XPath 1.0, prod. [24]: - stack.pop.free; - newSyntaxNode:= TdomXPathLessThanOrEqualExpr.create(''); // Create LessThanOrEqualExpr. - newSyntaxNode.left:= stack.pop; // Append RelationalExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append AdditiveExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathGreaterThanOperator) and - ( (stack.peek(1) is TdomXPathLessThanExpr) or - (stack.peek(1) is TdomXPathLessThanOrEqualExpr) or - (stack.peek(1) is TdomXPathGreaterThanExpr) or - (stack.peek(1) is TdomXPathGreaterThanOrEqualExpr) ) - then begin - // XPath 1.0, prod. [24]: - stack.pop.free; - newSyntaxNode:= TdomXPathGreaterThanExpr.create(''); // Create GreaterThanExpr. - newSyntaxNode.left:= stack.pop; // Append RelationalExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append AdditiveExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathGreaterThanOrEqualOperator) and - ( (stack.peek(1) is TdomXPathLessThanExpr) or - (stack.peek(1) is TdomXPathLessThanOrEqualExpr) or - (stack.peek(1) is TdomXPathGreaterThanExpr) or - (stack.peek(1) is TdomXPathGreaterThanOrEqualExpr) ) - then begin - // XPath 1.0, prod. [24]: - stack.pop.free; - newSyntaxNode:= TdomXPathGreaterThanOrEqualExpr.create(''); // Create GreaterThanOrEqualExpr. - newSyntaxNode.left:= stack.pop; // Append RelationalExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append AdditiveExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [24]: - newSyntaxNode:= TdomXPathLessThanExpr.create(''); // Create LessThanExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append AdditiveExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if (lastSyntaxNode is TdomXPathMinusOperator) or - (lastSyntaxNode is TdomXPathModOperator) or - (lastSyntaxNode is TdomXPathMultiplyOperator) - then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathNameTest then begin - // XPath 1.0, prod. [7]: - newSyntaxNode:= TdomXPathNodeTest.create(''); // Create NodeTest. - newSyntaxNode.left:= lastSyntaxNode; // Append NameTest. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathNodeTest then begin - // XPath 1.0, prod. [4]: - if tokenizer.isFollowing(XPATH_LEFT_SQUARE_BRACKET_TOKEN) then begin - // A Predicate is following, so we postpone building the Step. - stack.push(lastSyntaxNode); - break; - end; - if stack.peek(0) is TdomXPathDoubleColon then begin - if stack.peek(1) is TdomXPathCustomAxisName then begin - stack.pop.free; - newSyntaxNode:= stack.pop; - newSyntaxNode.left:= lastSyntaxNode; // Append NodeTest to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= newSyntaxNode; // Append AxisName to Step. - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else if stack.peek(0) is TdomXPathCommercialAt then begin - // XPath 1.0, prod. [13]: - stack.pop.free; - newSyntaxNode:= TdomXPathAxisNameAttribute.create(''); - newSyntaxNode.left:= lastSyntaxNode; // Append NodeTest to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= newSyntaxNode; // Append AxisName to Step. - end else begin - // XPath 1.0, prod. [13]: - newSyntaxNode:= TdomXPathAxisNameChild.create(''); - newSyntaxNode.left:= lastSyntaxNode; // Append NodeTest to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= newSyntaxNode; // Append AxisName to Step. - end; - end else if (lastSyntaxNode is TdomXPathNodeTypeComment) or - (lastSyntaxNode is TdomXPathNodeTypeNode) or - (lastSyntaxNode is TdomXPathNodeTypePI) or - (lastSyntaxNode is TdomXPathNodeTypeText) - then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathNumber then begin - // XPath 1.0, prod. [15]: - newSyntaxNode:= TdomXPathPrimaryExpr.create(''); // Create PrimaryExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append Number. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathOrExpr then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MULTIPLY_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_DIV_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MOD_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_PLUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_MINUS_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_LESS_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_GREATER_THAN_OR_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_IS_NOT_EQUAL_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_AND_OPERATOR_TOKEN) or - tokenizer.isFollowing(XPATH_OR_OPERATOR_TOKEN) - then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - // XPath 1.0, prod. [14]: - newSyntaxNode:= TdomXPathExpr.create(''); // Create Expr. - newSyntaxNode.left:= lastSyntaxNode; // Append OrExpr. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathOrOperator then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathPathExpr then begin - // XPath 1.0, prod. [18]: - if tokenizer.isFollowing(XPATH_SLASH_OPERATOR_TOKEN) then begin - // A Slash is following, so we postpone building the TdomXPathUnionExpr. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathShefferStrokeOperator) and - (stack.peek(1) is TdomXPathUnionExpr) - then begin - stack.pop.free; - newSyntaxNode:= TdomXPathUnionExpr.create(''); // Create UnionExpr. - newSyntaxNode.left:= stack.pop; // Append UnionExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append PathExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - newSyntaxNode:= TdomXPathUnionExpr.create(''); // Create UnionExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append PathExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if lastSyntaxNode is TdomXPathPlusOperator then begin - stack.push(lastSyntaxNode); - break; - end else if lastSyntaxNode is TdomXPathPredicate then begin - if stack.peek(0) is TdomXPathFilterExpr then begin - // XPath 1.0, prod. [20]: - newSyntaxNode:= TdomXPathFilterExpr.create(''); - newSyntaxNode.left:= stack.pop; - newSyntaxNode.right:= lastSyntaxNode; - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [4]: - if tokenizer.isFollowing(XPATH_LEFT_SQUARE_BRACKET_TOKEN) then begin - // Another Predicate is following, so we postpone building the Step. - stack.push(lastSyntaxNode); - break; - end; - if stack.peek(0) is TdomXPathPredicate then begin - newSyntaxNode:= stack.pop; - newSyntaxNode.right:= lastSyntaxNode; - lastSyntaxNode:= newSyntaxNode; - end else if stack.peek(0) is TdomXPathNodeTest then begin - if stack.peek(1) is TdomXPathDoubleColon then begin - if stack.peek(2) is TdomXPathCustomAxisName then begin - nodeTestNode:= stack.pop; // Pop the NodeTest from the stack. - stack.pop.free; // Pop and delete the DoubleColon. - axisNode:= stack.pop; // Pop the AxisName from the stack. - axisNode.left:= nodeTestNode; // Append NodeTest to AxisName. - axisNode.right:= lastSyntaxNode; // Append Predicate to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= axisNode; // Append AxisName to Step. - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else if stack.peek(1) is TdomXPathCommercialAt then begin - // XPath 1.0, prod. [13]: - nodeTestNode:= stack.pop; // Pop the NodeTest from the stack. - stack.pop.free; // Pop and delete the DoubleColon. - axisNode:= TdomXPathAxisNameAttribute.create(''); // Create attribute axis AxisName. - axisNode.left:= nodeTestNode; // Append NodeTest to AxisName. - axisNode.right:= lastSyntaxNode; // Append Predicate to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= axisNode; // Append AxisName to Step. - end else begin - // XPath 1.0, prod. [13]: - nodeTestNode:= stack.pop; // Pop the NodeTest from the stack. - axisNode:= TdomXPathAxisNameChild.create(''); // Create child axis AxisName. - axisNode.left:= nodeTestNode; // Append NodeTest to AxisName. - axisNode.right:= lastSyntaxNode; // Append Predicate to AxisName. - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= axisNode; // Append AxisName to Step. - end; - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end; - end else if lastSyntaxNode is TdomXPathPrimaryExpr then begin - // XPath 1.0, prod. [20]: - newSyntaxNode:= TdomXPathFilterExpr.create(''); // Create FilterExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append PrimaryExpr. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathRightParenthesis then begin - // XPath 1.0, prod. [7]: - if (stack.peek(0) is TdomXPathLeftParenthesis) and - ( (stack.peek(1) is TdomXPathNodeTypeComment) or - (stack.peek(1) is TdomXPathNodeTypeNode) or - (stack.peek(1) is TdomXPathNodeTypePI) or - (stack.peek(1) is TdomXPathNodeTypeText) ) - then begin - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathNodeTest.create(''); - stack.pop.free; - lastSyntaxNode.left:= stack.pop; - end else if (stack.peek(0) is TdomXPathLiteral) and - (stack.peek(1) is TdomXPathLeftParenthesis) and - (stack.peek(2) is TdomXPathNodeTypePI) - then begin - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathNodeTest.create(''); // Create NodeTest - PILiteral:= stack.pop; - stack.pop.free; // Remove LeftParenthesist from stack. - nodeTypePI:= stack.pop; - nodeTypePI.left:= PILiteral; // Append Literal to NodeTypePI - lastSyntaxNode.left:= nodeTypePI; // Append NodeTypePI to NodeTest - end else if (stack.peek(0) is TdomXPathExpr) and - (stack.peek(1) is TdomXPathLeftParenthesis) and - not (stack.peek(2) is TdomXPathFunctionName) - then begin - // XPath 1.0, prod. [15]: - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathPrimaryExpr.create(''); // Create PrimaryExpr - lastSyntaxNode.left:= stack.pop; // Append Expr - stack.pop.free; // Remove LeftParenthesist from stack. - end else if (stack.peek(0) is TdomXPathLeftParenthesis) and - (stack.peek(1) is TdomXPathFunctionName) - then begin - // XPath 1.0, prod. [16]: - stack.pop.free; - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathFunctionCall.create(''); // Create FunctionCall. - lastSyntaxNode.left:= stack.pop; // Append FunctionName. - end else begin - // XPath 1.0, prod. [16]: - lastArgument:= nil; - while (stack.peek(0) is TdomXPathExpr) and - (stack.peek(1) is TdomXPathComma) - do begin - newArgument:= TdomXPathArgument.create(''); // Create Argument. - newArgument.left:= stack.pop; // Append Expr. - newArgument.right:= lastArgument; // Append last Argument (if any). - lastArgument:= newArgument; - stack.pop.free; - end; - if (stack.peek(0) is TdomXPathExpr) and - (stack.peek(1) is TdomXPathLeftParenthesis) and - (stack.peek(2) is TdomXPathFunctionName) - then begin - newArgument:= TdomXPathArgument.create(''); // Create Argument. - newArgument.left:= stack.pop; // Append Expr. - newArgument.right:= lastArgument; // Append last Argument (if any). - stack.pop.free; - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathFunctionCall.create(''); // Create FunctionCall. - lastSyntaxNode.left:= stack.pop; // Append FunctionName. - lastSyntaxNode.right:= newArgument; // Append Argument. - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - if assigned(lastArgument) - then stack.push(lastArgument); - stack.push(lastSyntaxNode); - break; - end; - end; - end else if lastSyntaxNode is TdomXPathRightSquareBracket then begin - // XPath 1.0, prod. [8] and [9]: - if (stack.peek(0) is TdomXPathExpr) and - (stack.peek(1) is TdomXPathLeftSquareBracket) - then begin - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathPredicate.create(''); // Create Predicate. - lastSyntaxNode.left:= stack.pop; // Append Expr. - stack.pop.free; // Remove LeftSquareBracket from stack. - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else if lastSyntaxNode is TdomXPathShefferStrokeOperator then begin - if stack.peek(0) is TdomXPathPathExpr then begin - newSyntaxNode:= TdomXPathUnionExpr.create(''); // Create UnionExpr. - newSyntaxNode.left:= stack.pop; // Append PathExpr from stack. - stack.push(newSyntaxNode); // Push the UnionExpr on the stack. - stack.push(lastSyntaxNode); // Push the ShefferStrokeOperator on the stack. - break; - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else if lastSyntaxNode is TdomXPathSingleDot then begin - // XPath 1.0, prod. [12]: - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathStep.create(''); // Create Step. - lastSyntaxNode.left:= TdomXPathAxisNameSelf.create(''); // Create and append AxisName to Step. - lastSyntaxNode.left.left:= TdomXPathNodeTest.create(''); // Create and append NodeTest to AxisName. - lastSyntaxNode.left.left.left:= TdomXPathNodeTypeNode.create(''); // Create and append NodeType to NodeTest. - end else if lastSyntaxNode is TdomXPathSlashOperator then begin - // XPath 1.0, prod. [2]: - if ( (not assigned(stack.peek(0))) or - (stack.peek(0) is TdomXPathShefferStrokeOperator) ) and - ( tokenizer.isFollowing(XPATH_END_OF_TEXT_TOKEN) or - tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) ) - then begin - lastSyntaxNode.free; - lastSyntaxNode:= TdomXPathPathExpr.create(''); // Create PathExpr. - lastSyntaxNode.left:= TdomXPathAbsoluteLocationPath.create(''); // Create and append AbsolutLocationPath. - end else begin - stack.push(lastSyntaxNode); - break; - end; - end else if lastSyntaxNode is TdomXPathStep then begin - // XPath 1.0, prod. [3] and [19]: - if stack.peek(0) is TdomXPathSlashOperator then begin - if stack.peek(1) is TdomXPathFilterExpr then begin - stack.pop.free; - newSyntaxNode:= TdomXPathPathExpr.create(''); // Create PathExpr. - newSyntaxNode.left:= stack.pop; // Append FilterExpr to PathExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append Step to PathExpr. - lastSyntaxNode:= newSyntaxNode; - end else if stack.peek(1) is TdomXPathPathExpr then begin - stack.pop.free; - if TdomXPathPathExpr(stack.peek(0)).addStep(TdomXPathStep(lastSyntaxNode)) then begin - lastSyntaxNode:= stack.pop; - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else if (not assigned(stack.peek(1)) ) or - (stack.peek(1) is TdomXPathShefferStrokeOperator) - then begin - // XPath 1.0, prod. [2]: - stack.pop.free; - newSyntaxNode:= TdomXPathPathExpr.create(''); // Create PathExpr. - newSyntaxNode.left:= TdomXPathAbsoluteLocationPath.create(''); // Create and append AbsolutLocationPath. - newSyntaxNode.right:= lastSyntaxNode; // Append Step. - lastSyntaxNode:= newSyntaxNode; - end else begin - // Malformed XPath Expression. We are parsing it anyway ... - stack.push(lastSyntaxNode); - break; - end; - end else begin - newSyntaxNode:= TdomXPathPathExpr.create(''); // Create PathExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append Step to PathExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if lastSyntaxNode is TdomXPathUnaryExpr then begin - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) then begin - // Operator of higher precedence is following, so we postpone building the expression. - stack.push(lastSyntaxNode); - break; - end; - if (stack.peek(0) is TdomXPathMinusOperator) and not ( - (stack.peek(1) is TdomXPathPlusExpr) or - (stack.peek(1) is TdomXPathMinusExpr) or - (stack.peek(1) is TdomXPathMultiplyExpr) or - (stack.peek(1) is TdomXPathDivExpr) or - (stack.peek(1) is TdomXPathModExpr) or - (stack.peek(1) is TdomXPathUnaryExpr) or - (stack.peek(1) is TdomXPathUnionExpr) ) - then begin - // XPath 1.0, prod. [27]: - newSyntaxNode:= TdomXPathUnaryExpr.create(''); // Create UnaryExpr. - newSyntaxNode.left:= stack.pop; // Append MinusOperator. - newSyntaxNode.right:= lastSyntaxNode; // Append UnaryExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathMultiplyOperator) and - ( (stack.peek(1) is TdomXPathMultiplyExpr) or - (stack.peek(1) is TdomXPathDivExpr) or - (stack.peek(1) is TdomXPathModExpr) ) - then begin - // XPath 1.0, prod. [26]: - stack.pop.free; - newSyntaxNode:= TdomXPathMultiplyExpr.create(''); // Create MultiplyExpr. - newSyntaxNode.left:= stack.pop; // Append MultiplicativeExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append UnaryExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathDivOperator) and - ( (stack.peek(1) is TdomXPathMultiplyExpr) or - (stack.peek(1) is TdomXPathDivExpr) or - (stack.peek(1) is TdomXPathModExpr) ) - then begin - // XPath 1.0, prod. [26]: - stack.pop.free; - newSyntaxNode:= TdomXPathDivExpr.create(''); // Create DivExpr. - newSyntaxNode.left:= stack.pop; // Append MultiplicativeExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append UnaryExpr. - lastSyntaxNode:= newSyntaxNode; - end else if (stack.peek(0) is TdomXPathModOperator) and - ( (stack.peek(1) is TdomXPathMultiplyExpr) or - (stack.peek(1) is TdomXPathDivExpr) or - (stack.peek(1) is TdomXPathModExpr) ) - then begin - // XPath 1.0, prod. [26]: - stack.pop.free; - newSyntaxNode:= TdomXPathModExpr.create(''); // Create ModExpr. - newSyntaxNode.left:= stack.pop; // Append MultiplicativeExpr. - newSyntaxNode.right:= lastSyntaxNode; // Append UnaryExpr. - lastSyntaxNode:= newSyntaxNode; - end else begin - // XPath 1.0, prod. [26]: - newSyntaxNode:= TdomXPathMultiplyExpr.create(''); // Create MultiplyExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append UnaryExpr. - lastSyntaxNode:= newSyntaxNode; - end; - end else if lastSyntaxNode is TdomXPathUnionExpr then begin - // XPath 1.0, prod. [27]: - if tokenizer.isFollowing(XPATH_SHEFFER_STROKE_OPERATOR_TOKEN) then begin - // A Sheffer's Stroke is following, so we postpone building the UnaryExpr. - stack.push(lastSyntaxNode); - break; - end; - newSyntaxNode:= TdomXPathUnaryExpr.create(''); // Create UnaryExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append the UnionExpr. - lastSyntaxNode:= newSyntaxNode; - end else if lastSyntaxNode is TdomXPathVariableReference then begin - // XPath 1.0, prod. [15]: - newSyntaxNode:= TdomXPathPrimaryExpr.create(''); // Create PrimaryExpr. - newSyntaxNode.left:= lastSyntaxNode; // Append VariableReference. - lastSyntaxNode:= newSyntaxNode; - end; - until false; - end; {case ... else ...} - until false; - - if assigned(FSyntaxTree) then FSyntaxTree.free; // Free the old syntax tree, if any. - FIsPrepared:= true; - - // Is the syntax tree valid, i.e. does the evaluation reach the end of the text - // and does the stack hold exactly one root node of type TdomXPathExpr? - if (symbol = XPATH_END_OF_TEXT_TOKEN) and - (stack.length = 1) and - (stack.peek(0) is TdomXPathExpr) - then begin - FIsValid:= true; - FSyntaxTree:= TdomXPathExpr(stack.pop); - end else begin - FIsValid:= false; - FSyntaxTree:= nil; - end; - - finally - stack.free; - end; - finally - tokenizer.free; - end; - end; - result:= FIsValid; -end; - -{ TdomXPathNSResolver } - -constructor TdomXPathNSResolver.create(const resolverNode: TdomNode); -var - node: TdomNode; - i: integer; -begin - FPrefixUriList:= TdomNameValueList.create; - with FPrefixUriList do begin - Sorted:= true; - Duplicates:= dupIgnore; - end; - node:= resolverNode; - while assigned(node) do begin - with node do begin - if nodeType = ntElement_Node then begin - with attributes do begin - for i:= 0 to pred(length) do - with TdomAttr(item(i)) do - if (namespaceURI = 'http://www.w3.org/2000/xmlns/') - then if not (localName = 'xmlns') - then FPrefixUriList.add(localName,nodeValue); - end; {with ...} - end; {if ...} - node:= parentNode; - end; {with ...} - end; {while ...} -end; - -destructor TdomXPathNSResolver.destroy; -begin - FPrefixUriList.free; - inherited; -end; - -function TdomXPathNSResolver.lookupNamespaceURI(const prefix: wideString): wideString; -var - index: integer; -begin - index:= FPrefixUriList.indexOfName(prefix); - if index > -1 - then result:= FPrefixUriList.names[index] - else result:= ''; -end; - -{ TdomXPathSnapshotResult } - -constructor TdomXPathSnapshotResult.create; -begin - FAxisType:= XPATH_FORWARD_AXIS; - FList:= TList.create; - FResultType:= XPATH_NODE_SNAPSHOT_TYPE; -end; - -destructor TdomXPathSnapshotResult.destroy; -begin - FList.free; - inherited; -end; - -procedure TdomXPathSnapshotResult.add(const node: TdomNode); -begin - FList.Add(node); -end; - -procedure TdomXPathSnapshotResult.addSnapshotResult(const ir: TdomXPathSnapshotResult); -// Merges two sorted snapshotResult objects. -var - i,x,y: integer; - treePosition: TdomTreePosition; - equivalentItems: TList; -begin - ir.axisType:= axisType; - x:= 0; - y:= 0; - equivalentItems:= TList.create; - try - - if axisType = XPATH_FORWARD_AXIS then begin - while (x < snapshotLength) and (y < ir.snapshotLength) do begin - treePosition:= snapshotItem(x).compareTreePosition(ir.snapshotItem(y)); - if (Tree_Position_Same_Node in treePosition) then begin - inc(y); - end else if (Tree_Position_Equivalent in treePosition) then begin - equivalentItems.Add(ir.snapshotItem(y)); - inc(y); - end else if (Tree_Position_Following in treePosition) then begin - inc(x); - for i:= pred(equivalentItems.Count) downto 0 do - if (Tree_Position_Same_Node in snapshotItem(x).compareTreePosition(equivalentItems[i])) - then equivalentItems.delete(i); - end else if (Tree_Position_Disconnected in treePosition) then begin - for i:= 0 to pred(equivalentItems.Count) do begin - FList.insert(x,equivalentItems[i]); - equivalentItems.delete(i); - inc(x); - end; - inc(x); - end else begin - for i:= 0 to pred(equivalentItems.Count) do begin - FList.insert(x,equivalentItems[i]); - equivalentItems.delete(i); - inc(x); - end; - FList.insert(x,ir.snapshotItem(y)); - inc(x); - inc(y); - end; - end; - end else begin - while (x < snapshotLength) and (y < ir.snapshotLength) do begin - treePosition:= snapshotItem(x).compareTreePosition(ir.snapshotItem(y)); - if (Tree_Position_Same_Node in treePosition) then begin - inc(y); - end else if (Tree_Position_Equivalent in treePosition) then begin - equivalentItems.Add(ir.snapshotItem(y)); - inc(y); - end else if (Tree_Position_Preceding in treePosition) then begin - inc(x); - for i:= pred(equivalentItems.Count) downto 0 do - if (Tree_Position_Same_Node in snapshotItem(x).compareTreePosition(equivalentItems[i])) - then equivalentItems.delete(i); - end else if (Tree_Position_Disconnected in treePosition) then begin - for i:= 0 to pred(equivalentItems.Count) do begin - FList.insert(x,equivalentItems[i]); - equivalentItems.delete(i); - inc(x); - end; - inc(x); - end else begin - for i:= 0 to pred(equivalentItems.Count) do begin - FList.insert(x,equivalentItems[i]); - equivalentItems.delete(i); - inc(x); - end; - FList.insert(x,ir.snapshotItem(y)); - inc(x); - inc(y); - end; - end; - end; - - inc(x); - while (equivalentItems.Count > 0) and (x < snapshotLength) do begin - if not (Tree_Position_Equivalent in snapshotItem(x).compareTreePosition(equivalentItems[0])) then begin - for i:= 0 to pred(equivalentItems.Count) do begin - FList.insert(x,equivalentItems[i]); - equivalentItems.delete(i); - end; - end; - for i:= pred(equivalentItems.Count) downto 0 do - if (Tree_Position_Same_Node in snapshotItem(x).compareTreePosition(equivalentItems[i])) - then equivalentItems.delete(i); - inc(x); - end; - - for i:= 0 to pred(equivalentItems.Count) do - FList.add(equivalentItems[i]); - - if y < ir.snapshotLength then - for i:= y to pred(ir.snapshotLength) do - FList.add(ir.snapshotItem(i)); - - finally - equivalentItems.free; - end; -end; - -procedure TdomXPathSnapshotResult.addSubtree(const node: TdomNode); -// Adds 'node' and its subtree, excluding attributes. -var - n: TdomNode; - bufferList: TList; - i: integer; -begin - if axisType = XPATH_FORWARD_AXIS then begin - if assigned(node) then begin - with node.ownerDocument.createNodeIterator( node, - [ ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node ], - nil, - false ) do begin - n:= NextNode; - while assigned(n) do begin - FList.add(n); - n:= NextNode; - end; - detach; - end; - node.ownerDocument.clearInvalidNodeIterators; - end; - end else begin - if assigned(node) then begin - bufferList:= TList.create; - try - with node.ownerDocument.createNodeIterator( node, - [ ntElement_Node, - ntText_Node, - ntCDATA_Section_Node, - ntEntity_Reference_Node, - ntProcessing_Instruction_Node, - ntComment_Node, - ntDocument_Node ], - nil, - false ) do begin - n:= NextNode; - while assigned(n) do begin - bufferList.add(n); - n:= NextNode; - end; - detach; - end; - node.ownerDocument.clearInvalidNodeIterators; - - for i:= pred(bufferList.count) downto 0 do - FList.add(bufferList[i]); - - finally - bufferList.free; - end; - end; - end; -end; - -procedure TdomXPathSnapshotResult.delete(const index: integer); -begin - FList.delete(index); -end; - -function TdomXPathSnapshotResult.getSnapshotLength: integer; -begin - result:= FList.count; -end; - -procedure TdomXPathSnapshotResult.setAxisType(const value: TdomXPathAxisType); -var - item: Pointer; - index1,index2,j: integer; -begin - If FAxisType <> value then begin - FAxisType:= value; - j:= pred(FList.Count); - for index1:= 0 to ( j div 2) do begin - index2:= j - index1; - item:= FList.List^[index1]; - FList.List^[index1]:= FList.List^[index2]; - FList.List^[index2]:= item; - end; - end; -end; - -function TdomXPathSnapshotResult.snapshotItem(const index: integer): TdomNode; -begin - if (index < 0) or (index >= FList.Count) - then result:= nil - else result:= TdomNode(FList.List^[index]); -end; - -{ TdomXPathBooleanResult } - -constructor TdomXPathBooleanResult.create(const aBooleanValue: boolean); -begin - FBooleanValue:= aBooleanValue; - FResultType:= XPATH_BOOLEAN_TYPE; -end; - -{ TdomXPathNumberResult } - -constructor TdomXPathNumberResult.create(const aNumberValue: double); -begin - FNumberValue:= aNumberValue; - FResultType:= XPATH_NUMBER_TYPE; -end; - -{ TdomXPathStringResult } - -constructor TdomXPathStringResult.create(const aStringValue: wideString); -begin - FStringValue:= aStringValue; - FResultType:= XPATH_STRING_TYPE; -end; - -end. - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLIntf.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLIntf.pas deleted file mode 100644 index 1391d3f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLIntf.pas +++ /dev/null @@ -1,167 +0,0 @@ -unit uROXMLIntf; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses Classes; - -type - { Misc. } - TXMLEncoding = (xeUTF8, xeUTF16); // Some are missing... - -const - XMLEncodingStr : array[TXMLEncoding] of string = ('UTF8', 'UTF16'); - XMLBooleans: array[boolean] of string = ('false', 'true'); - -type - { Forward declarations } - IXMLNodeList = interface; - IXMLDocument = interface; - - { IXMLNode } - IXMLNode = interface - ['{8E0508D5-EFC0-4E1F-9BC5-2CBE3536D008}'] - function GetName : widestring; - function GetLocalName : widestring; - - function GetRef : pointer; - - function GetParent : IXMLNode; - - function GetValue : Variant; - procedure SetValue(const Value : Variant); - - function GetXML : widestring; - - function GetAttributes(Index : integer) : IXMLNode; - function GetAttributeCount : integer; - - function GetChildren(Index : integer) : IXMLNode; - function GetChildrenCount : integer; - - function Add(const aNodeName : widestring; aNameSpaceURI: widestring = '') : IXMLNode; - function AddXml(const Xml: widestring): IXMLNode; - function AddAttribute(const anAttributeName : widestring; const anAttributeValue : Variant) : IXMLNode; - - procedure Delete(Index : integer); - procedure Remove(const aNode : IXMLNode); - - function GetNodeByName(const aNodeName : widestring) : IXMLNode; // Returns NIL if none is found or exception. Up to you. - function GetNodeValue(const aNodeName : widestring; const Default : Variant) : Variant; - - function GetAttributeByName(const anAttributeName : widestring) : IXMLNode; - function GetAttributeValue(const anAttributeName : widestring; DefaultValue : Variant) : Variant; - - function GetNodesByName(const aNodeName : widestring) : IXMLNodeList; // Returns NIL if none are found or exception. Up to you. - - function GetNodeByAttribute(const anAttributeName, anAttributeValue : widestring) : IXMLNode; // Returns NIL if none are found or exception. Up to you. - - function GetFirstChild: IXMLNode; - function GetNextSibling: IXMLNode; - - function GetNamespaceURI: widestring; - - function GetDocument: IXMLDocument; - - property Name : widestring read GetName; // When one is creates it MUST have a name - property LocalName : widestring read GetLocalName; - property NamespaceURI : widestring read GetNamespaceURI; - property Value : Variant read GetValue write SetValue; // Only possible if there are no children. - - property Attributes[Index : integer] : IXMLNode read GetAttributes; // NIL if it has no attributes. I am open to other solutions - property AttributeCount : integer read GetAttributeCount; - - property Children[Index : integer] : IXMLNode read GetChildren; // NIL if it has no children. I am open to other solutions - property ChildrenCount : integer read GetChildrenCount; - - property FirstChild: IXMLNode read GetFirstChild; - property NextSibling: IXMLNode read GetNextSibling; - - property XML : widestring read GetXML; - property Ref : pointer read GetRef; - property Parent : IXMLNode read GetParent; - property Document : IXMLDocument read GetDocument; - end; - - IXMLNodeList = interface - ['{C5393D52-8CB1-4E36-9A8D-25396C3C6716}'] - function GetNodes(Index : integer) : IXMLNode; - function GetCount : integer; - - property Nodes[Index : integer] : IXMLNode read GetNodes; default; - property Count : integer read GetCount; - end; - - { IXMLDocument } - IXMLDocument = interface - ['{61715E40-F8D5-4A7E-A01B-80114EF35428}'] - function GetDocumentNode : IXMLNode; - - function GetEncoding : TXMLEncoding; - - procedure New(aDocumentName : widestring = ''; anEncoding : TXMLEncoding = xeUTF8); // Once the encoding is set cannot be changed - - procedure SaveToStream(aStream : TStream); - procedure SaveToFile(const aFileName : string); - procedure LoadFromStream(aStream : TStream); - procedure LoadFromFile(const aFileName : string); - function GetXML : widestring; - procedure SetXML(const Value : widestring); - - function Transform(const XSL : string) : string; - - property Encoding : TXMLEncoding read GetEncoding; - property DocumentNode : IXMLNode read GetDocumentNode; // NIL until New is called. New frees everything each time is called - property XML : widestring read GetXML write SetXML; - end; - -function NewROXmlDocument : IXMLDocument; -function SelectNodeLocal(aParent: IXMLNode; const aLocalName: string): IXMLNode; - -implementation - -{$IFDEF RemObjects_MSXML} -uses uROMSXMLImpl; -{$ENDIF} -{$IFDEF RemObjects_OpenXML} -uses uROOpenXMLImpl; -{$ENDIF} - -function SelectNodeLocal(aParent: IXMLNode; const aLocalName: string): IXMLNode; -var - i: Integer; -begin - result := nil; - if aParent = nil then exit; - for i := 0 to aParent.ChildrenCount -1 do begin - if aParent.Children[i].LocalName = aLocalName then begin - result := aParent.Children[i]; - exit; - end; - end; -end; - -function NewROXmlDocument : IXMLDocument; -begin - {$IFDEF RemObjects_OpenXML} - result := TROOpenXMLDocument.Create; - {$ENDIF} - {$IFDEF RemObjects_MSXML} - result := TROMSXMLDocument.Create; - {$ENDIF} -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLSerializer.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLSerializer.pas deleted file mode 100644 index 213d83f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXMLSerializer.pas +++ /dev/null @@ -1,1870 +0,0 @@ -unit uROXMLSerializer; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF} - Classes, uROSerializer, TypInfo, uROXMLIntf, uROTypes, SysUtils, FMTBcd; - -const - // SOAP specifics - tag_Envelope = 'Envelope'; - tag_Body = 'Body'; - tag_Header = 'Header'; - tag_Fault = 'Fault'; - - ns_Envelope = 'SOAP-ENV'; - ns_Standard = 'xs'; - ns_Custom = 'ro'; - ns_xsi = 'xsi'; - ns_xsd = 'xsd'; - - tag_HRef = 'href'; - tag_Nil = 'xsi:nil'; - tag_NilValue = 'true'; - tag_Id = 'id'; - - // Misc - SOAP_DecimalSeperator = '.'; - SOAP_BoolValues: array [Boolean] of string = ('false', 'true'); - - SOAP_DateFormat = 'yyyy-mm-dd'; - SOAP_DateFormatLength = 10; - - SOAP_DateTimeFormat = 'yyyy-mm-dd"T"hh":"nn":"ss'; - SOAP_DateTimeFormatLength = 19; - - SOAP_TimeFormat = 'hh":"nn":"ss'; - SOAP_TimeFormatLength = 8; - - // Data types signatures - dts_Array = 'SOAP-ENC:Array'; - dts_Array2 = 'soapenc:Array'; - dts_base64Binary = 'base64Binary'; - - -type - { Misc } - TROXMLSerializationOption = ( - xsoWriteMultiRefArray, // for literal, use false - xsoWriteMultiRefObject, // for literal, use false - xsoSendUntyped, // for literal, use true - xsoStrictStructureFieldOrder, - xsoIgnoreStructureType, - xsoEncodedXML, // for literal, use false - xsoClientIdInWsdl, - xsoDocument, // for document, use true; if both doc & literal are true it uses wrapped arguments - xsoSplitServiceWsdls, - xsoExternalTypesAsReferences // This will emit "import" references to external resources in the wsdl and namespace references in the body of messages. - ); - - TROXMLSerializationOptions = set of TROXMLSerializationOption; - - TXMLSerializationOption = TROXMLSerializationOption {$IFDEF DELPHI10UP}deprecated{$ENDIF}; - TXMLSerializationOptions = TROXMLSerializationOptions {$IFDEF DELPHI10UP}deprecated{$ENDIF}; - - { TROXMLSerializer } - TROXMLSerializer = class(TROSerializer) - private - fNode: IXMLNode; - fSerializationOptions: TROXMLSerializationOptions; - - fBodyNode : IXMLNode; - fMaxRef : integer; - fRespNode : IXMLNode; - - function BodyNode : IXMLNode; - function FindNode(const aName: string; ArrayElementId : integer): boolean; - function GetObject(const aName: string; ArrayElementId : integer): IXMLNode; - function FindSoapReference(subnode: IXMLNode): IXMLNode; - protected - { Internal } - function GetRecordStrictOrder: Boolean; override; - procedure BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; - var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); override; - procedure EndWriteObject(const aName: string; aClass : TClass; anObject: TObject; const LevelRef : IUnknown); override; - procedure CustomWriteObject(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); override; - procedure CustomReadObject(const aName: string; aClass: TClass;var Ref; ArrayElementId: integer);override; - procedure BeginReadObject(const aName : string; aClass : TClass; var anObject : TObject; var LevelRef : IUnknown; - var IsValidType : boolean; ArrayElementId : integer = -1); override; - procedure EndReadObject(const aName : string; aClass : TClass; var anObject : TObject; const LevelRef : IUnknown); override; public - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); override; - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDecimal(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteGuid(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteXml(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1);override; - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1);override; - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1);override; - procedure WriteException(const aName : string; const Ref; ArrayElementId : integer = -1); override; - - { Readers } - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); override; - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadDecimal(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadGuid(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadXml(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1);override; - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - procedure ReadException(const aName : string; var Ref; ArrayElementId : integer = -1); override; - public - constructor Create(aStorageRef:pointer); - - procedure SetStorageRef(aStorageRef:pointer); - function GetArrayElementName(anItemType : PTypeInfo; anItemReference: pointer): string; override; - - property SerializationOptions : TROXMLSerializationOptions read fSerializationOptions write fSerializationOptions; - end; - -const - RESERVED_WORD_PREFIX = '___'; - -function Unprefix(const AStr: String; const APrefix: String = RESERVED_WORD_PREFIX): String; - -function XMLToObject(const someXML : string) : TROComplexType; -function ObjectToXML(anObject : TROComplexType; - const anObjectName : string = '') : string; - -procedure SplitNodeName(const aNode : IXMLNode; out aNameSpace, aLocalName : string); - -function SOAPDateTimeToDateTime(const aSOAPDate : string) : TDateTime; -function DateTimeToSOAPDateTime(aDateTime : TDateTime) : string; - -function ExtractServerURL(const aFullURL : string) : string; - -function SOAPStrToFloat(const aString: string): Extended; - -function AddXMLChildNode(aParent : IXMLNode; const aName : string; const aNamespace: WideString = '') : IXMLNode; -function AddXMLAttribute(aNode : IXMLNode; const aName: string; const aValue : WideString) : IXMLNode; -procedure AddXMLTextValue(aNode : IXMLNode; const aValue : WideString); - -function FindChildNode(aParent : IXMLNode; const aName : string; StartFrom : integer; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -function FindChildNodeByAttribute(aParent : IXMLNode; const anAttributeName, anAttributeValue : string) : IXMLNode; -function FindParentNode(aNode : IXMLNode; const aName : string; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -function FindAttribute(aNode : IXMLNode; const aName : string; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -function GetXMLTextValue(aNode : IXMLNode) : widestring; - -{$IFDEF DELPHI7UP} -const SOAPLocale = 1033; -var SOAPFormatSettings : TFormatSettings; -{$ENDIF DELPHI7} - -implementation - -uses - {$IFDEF DELPHI5}Windows, {$ENDIF} - Math, uRORes, uROCompression, uROClasses, Variants, uROBinaryHelpers; - - -function ObjectToXML(anObject : TROComplexType; - const anObjectName : string = '') : string; -var objname : string; - doc : IXMLDocument; -begin - result := ''; - - if (anObjectName='') then objname := 'Object' - else objname := anObjectName; - - doc := NewROXmlDocument; - doc.New(anObject.ClassName); - - with TROXMLSerializer.Create(pointer(doc.DocumentNode)) do try - //with TROXMLSerializer.Create(doc.DocumentNode) do try - SerializationOptions := [xsoSendUntyped]; - Write(anObject.ClassName, anObject.ClassInfo, anObject); - - {$IFDEF RemObjects_OpenXML} - result := doc.XML; //mej - OpenXML seems to not behave the same way as MSDOM - {$ELSE} - result := doc.DocumentNode.XML; - {$ENDIF} - - finally - Free; - end; -end; - -function XMLToObject(const someXML : string) : TROComplexType; -var clsname : string; - cls : TROComplexTypeClass; - doc : IXMLDocument; - ss : TStringStream; -begin - ss := TStringStream.Create(someXML); - ss.Position := 0; - try - doc := NewROXmlDocument; - doc.New; - doc.LoadFromStream(ss); - finally - ss.Free; - end; - clsname := doc.DocumentNode.Name; - cls := FindROClass(clsname); - - if (cls=NIL) then RaiseError(err_UnknownClass, [clsname]); - - with TROXMLSerializer.Create(pointer(doc.DocumentNode)) do try - //with TROXMLSerializer.Create(doc.DocumentNode) do try - Read(clsname, cls.ClassInfo, result); - finally - Free; - end; -end; - -procedure SplitName(const aName : string; out aNameSpace, aLocalName : string); -var idx : integer; -begin - aNameSpace := ''; - if (aName='') then begin - aLocalName := ''; - Exit; - end - else aLocalName := aName; - - idx := Pos(':', aName); - if (idx>0) then begin - aNameSpace := Copy(aName, 1, idx-1); - aLocalName := Copy(aName, idx+1, Length(aName)-idx); - end; -end; - -// Required for a bug in OpenXML which never assigns correctly LocalName -procedure SplitNodeName(const aNode : IXMLNode; out aNameSpace, aLocalName : string); -begin -// SplitName(aNode.nodeName, aNameSpace, aLocalName) - SplitName(aNode.Name, aNameSpace, aLocalName) -end; - -function SOAPStrToFloat(const aString: string): Extended; -begin - {$IFDEF DELPHI7UP} - Result := StrToFloat(aString,SOAPFormatSettings);// then - {$ELSE} - Result := StrToFloat(StringReplace(aString, '.', DecimalSeparator, [])); - {$ENDIF} - //RaiseError(err_ErrorConvertingFloat, [aString]); - //Val(aString, Result, e); - //if (e<>0) then RaiseError(err_ErrorConvertingFloat, [aString, e]); -end; - -function SOAPDateTimeToDateTime(const aSOAPDate : string) : TDateTime; -var year, month, day, hour, min, sec : word; - msec: double; - ldummy, i: Integer; - s: string; -begin - // This probabily will all change. See W3C specs for date/time - case Length(aSOAPDate) of - SOAP_DateFormatLength : begin {yyyy-mm-dd} - year := StrToInt(Copy(aSOAPDate,1,4)); - month := StrToInt(Copy(aSOAPDate,6,2)); - day := StrToInt(Copy(aSOAPDate,9,2)); - result := EncodeDate(year, month, day); - end; - SOAP_TimeFormatLength : begin {hh:nn:ss} - hour := StrToInt(Copy(aSOAPDate,1,2)); - min := StrToInt(Copy(aSOAPDate,4,2)); - sec := StrToInt(Copy(aSOAPDate,7,2)); - result := EncodeTime(hour, min, sec, 0); - end; - else {SOAP_DateTimeFormatLength : } begin {yyyy-mm-ddThh:nn:ss} - year := StrToInt(Copy(aSOAPDate,1,4)); - month := StrToInt(Copy(aSOAPDate,6,2)); - day := StrToInt(Copy(aSOAPDate,9,2)); - hour := StrToInt(Copy(aSOAPDate,12,2)); - min := StrToInt(Copy(aSOAPDate,15,2)); - sec := StrToInt(Copy(aSOAPDate,18,2)); - s := copy(aSOAPDate, 20, MaxInt); - if (Length(s) > 1) and (s[1] = '.') then begin - i := LastDelimiter('+-Z', s); - if i > 0 then begin - Val(Copy(s, 1, i -1), msec, ldummy); - delete(s, 1, i-1); - end else begin - Val(s, msec, ldummy); - s := ''; - end; - msec := msec * (1.0 / 60.0 / 60.0 / 24); - end else - msec := 0; - - result := EncodeDate(year, month, day); - // The code below is required! Do not adjust - if (result<0) then begin - result := result-EncodeTime(hour, min, sec, 0); - result := result - msec; - end else begin - result := result+EncodeTime(hour, min, sec, 0); - result := result + msec; - end; - if (Length(s) > 0) and ((s[1] = '+') or (s[1] = '-')) then begin - if s[1] = '-' then i := -1 else i := 1; - Delete(s,1,1); - if pos(':', s) > 0 then begin - hour := StrToInt(copy(s,1,Pos(':', s)-1)); - delete(s,1,pos(':', s)); - min := StrToInt(s); - end else begin - hour := StrToInt(s); - min := 0; - end; - if i = 1 then - Result := Result - (1.0 / 86400.0) * (min + 60 * hour) * 60 - else - Result := Result + (1.0 / 86400.0) * (min + 60 * hour) * 60; - end; - end; - end; -end; - -function DateTimeToSOAPDateTime(aDateTime : TDateTime) : string; -begin - result := FormatDateTime(SOAP_DateTimeFormat, aDateTime); -end; - -function ExtractServerURL(const aFullURL : string) : string; -const ProtocolID = 'http://'; -var p : integer; -begin - result := Trim(StringReplace(aFullURL, ProtocolID, '', [rfReplaceAll, rfIgnoreCase])); - p := LastDelimiter('/', result); - if (p>0) - then result := ProtocolID+Copy(result, 1, p) - else result := ProtocolID+result; -end; - -function AddXMLChildNode(aParent : IXMLNode; const aName : string; const aNamespace: WideString = '') : IXMLNode; -begin - {result := aParent.ownerDocument.createElement(aName); - aParent.appendChild(result);} - result := aParent.Add(aName, aNamespace) -end; - -function AddXMLAttribute(aNode : IXMLNode; const aName: string; const aValue : WideString) : IXMLNode; -begin - {result := aNode.ownerDocument.createAttribute(aName); - result.nodeValue := aValue; - aNode.attributes.setNamedItem(result);} - result := aNode.AddAttribute(aName, aValue); -end; - -procedure AddXMLTextValue(aNode : IXMLNode; const aValue : widestring); -begin - //aNode.appendChild(aNode.ownerDocument.createTextNode(aValue)); - aNode.Value := aValue -end; - -function FindParentNode(aNode : IXMLNode; const aName : string; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -var ns, locname : string; - parent : IXMLNode; -begin - result := NIL; - while (aNode.Parent<>NIL) do begin - parent := aNode.Parent; - - if IsOnlyLocalName then begin - SplitNodeName(parent, ns, locname); - if (CompareText(locname, aName)=0) then begin - result := parent; - Exit; - end; - end - else if (parent.Name=aName) then begin - result := parent; - Exit; - end; - - aNode := parent; - end; -end; - -function FindChildNode(aParent : IXMLNode; const aName : string; StartFrom : integer; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -var i, startidx : integer; - locname, ns : string; - item : IXMLNode; -begin - result := NIL; - - with aParent do begin - // fix for arrays. I was always using the first item... - if (StartFrom>=0) then startidx := StartFrom - else startidx := 0; - - for i := startidx to (childrenCount-1) do begin - item := Children[i]; - - if IsOnlyLocalName then begin - SplitNodeName(item, ns, locname); - - if (CompareText(locname, aName)=0) then begin // I am ignoring XML case sensitivity here... - result := item; - Exit; - end; - - // Moved down by AleF. This "patch" actually breaks regular webservices - // processing. Let's keep it here as an extreme measure for Amazon alike web services - {if (ns = '') and SameText(locname, 'return') then begin - Result := FindChildNode(item, aName, StartFrom, IsOnlyLocalName); - Exit; - end;} - end - else begin - if (item.Name=aName) then begin - result := item; - Exit; - end; - end - end - end; -end; - -function FindChildNodeByAttribute(aParent : IXMLNode; const anAttributeName, anAttributeValue : string) : IXMLNode; -var i : integer; - //attr : IXMLNode; - item, item2 : IXMLNode; - //list : IXMLNodeList; -begin - result := NIL; - - with aParent do - for i := 0 to (ChildrenCount-1) do begin - item := Children[i]; - item2 := item.GetNodeByAttribute(anAttributeName, anAttributeValue); - - if (item2<>NIL) then begin - result := item; - Exit; - end; - end -end; - -function FindAttribute(aNode : IXMLNode; const aName : string; IsOnlyLocalName : boolean = FALSE) : IXMLNode; -//var i : integer; - //locname, ns : string; -begin - result := NIL; - result := aNode.GetAttributeByName(aName); - - {with aNode do - for i := 0 to (AttributeCount-1) do begin - if IsOnlyLocalName then begin - SplitNodeName(attributes.item(i), ns, locname); - if (locname=aName) then begin - result := attributes.item(i); - Exit; - end; - end - else begin - if (attributes.item(i).nodeName=aName) then begin - result := attributes.item(i); - Exit; - end; - end - end} -end; - -function GetXMLTextValue(aNode : IXMLNode) : WideString; -//var textnode : IXMLNode; -begin - //textnode := aNode.childNodes.item(0); - {if Assigned(textnode) and (textnode.hasChildNodes) and (textnode.nodeName='#text') - then result := textnode.textContent - else result := '';} - result := aNode.Value -end; - -function SameText(A, B : string) : boolean; -begin - result := CompareText(a,b)=0 -end; - -function TypeInfoNameToSOAPType(aTypeInfo : PTypeInfo) : string; -begin - case aTypeInfo^.Kind of - tkEnumeration : begin - if (aTypeInfo=TypeInfo(boolean)) - then result := ns_xsd+':boolean' - else result := ns_Custom+':'+aTypeInfo^.Name; - end; - tkInteger : begin - case GetTypeData(aTypeInfo)^.OrdType of - otSByte : result := ns_xsd+':byte'; - otUByte : result := ns_xsd+':unsignedByte'; - otSWord : result := ns_xsd+':short'; - otUWord : result := ns_xsd+':unsignedShort'; - otSLong : result := ns_xsd+':int'; - otULong : result := ns_xsd+':unsignedInt'; - end; - end; - tkInt64 : result := ns_xsd+':long'; - // TODO: this wont work for DateTime's inside records or arrays - tkFloat : if (aTypeInfo=TypeInfo(TDateTime)) then result := ns_xsd+':dateTime' - else begin - case GetTypeData(aTypeInfo)^.FloatType of - ftSingle : result := ns_xsd+':float'; - ftDouble : result := ns_xsd+':double'; - ftExtended : result := ns_xsd+':double'; - ftComp : result := ns_xsd+':double'; - ftCurr : result := ns_xsd+':double'; - end; - end; - tkWString, - tkLString, - tkString : result := ns_xsd+':string'; - - tkClass : - begin - if aTypeInfo = typeinfo(Binary) then - result := ns_xsd+':'+dts_base64Binary - else - result := ns_Custom+':'+aTypeInfo^.Name; - end; - tkVariant: - begin - if aTypeInfo = typeinfo(TDecimalVariant) then result := ns_xsd+':decimal' else - result := ns_xsd+':anyType'; - end; - tkInterface: - result := ns_xsd+':any'; - end; - -end; - -function VarTypeNameToSOAPType(aVarType : TVarType) : string; -begin - result := ''; - case aVarType of - varBoolean : result := ns_xsd+':boolean'; - varInteger : result := ns_xsd+':int'; - varWord : result := ns_xsd+':unsignedShort'; - varSmallInt : result := ns_xsd+':short'; - varByte : result := ns_xsd+':unsignedByte'; - varShortInt : result := ns_xsd+':byte'; - varSingle : result := ns_xsd+':float'; - varDouble, - varCurrency : result := ns_xsd+':double'; - varDate : result := ns_xsd+':dateTime'; - varOleStr, - varString : result := ns_xsd+':string'; - varLongWord : result := ns_xsd+':unsignedInt'; - varInt64 : result := ns_xsd+':long'; - varEmpty, - varNull: result := ns_xsd+':null'; - else - if aVarType = VarFMTBcd then - result := ns_xsd +':decimal' - else - result := ns_Custom+':unknown'; - end; -end; - -function Unprefix(const AStr, APrefix: String): String; -var - L: Integer; -begin - L := Length(APrefix); - if StrLIComp(PChar(AStr), PChar(APrefix), Min(Length(AStr), L)) = 0 then - Result :=Copy(AStr, L + 1, MaxInt) - else - Result := AStr; -end; - -{ TROXMLSerializer } -constructor TROXMLSerializer.Create(aStorageRef: pointer); -begin - inherited Create; - SetStorageRef(aStorageRef); - fSerializationOptions := [xsoWriteMultiRefArray, xsoWriteMultiRefObject]; -end; - -{$IFDEF DELPHI5} -function Supports(const Instance: IUnknown; const Intf: TGUID): Boolean; overload; -var lDummyInst:IUnknown; -begin - result := Supports(Instance, Intf, lDummyInst); -end; -{$ENDIF DELPHI5} - -procedure TROXMLSerializer.SetStorageRef(aStorageRef : pointer); -begin - fNode := nil; - if Supports(IUnknown(aStorageRef), IXMLNode) then begin - //RaiseError('TROXMLSerializer: Not a valid IXMLNode reference',[]); - fBodyNode := NIL; - fRespNode := NIL; - fMaxRef := 0; - fNode := IXMLNode(aStorageRef); - end; - {fNode := aStorageRef;} -end; - -procedure TROXMLSerializer.EndReadObject(const aName: string; - aClass : TClass; var anObject: TObject; const LevelRef : IUnknown); -begin - fNode := IXMLNode(pointer(LevelRef)); -end; - -procedure TROXMLSerializer.EndWriteObject(const aName: string; - aClass : TClass; anObject: TObject; const LevelRef : IUnknown); -begin - fNode := IXMLNode(pointer(LevelRef)); -end; - -procedure TROXMLSerializer.ReadDateTime(const aName: string; var Ref; ArrayElementId : integer = -1); -var subnode : IXMLNode; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) - then TDateTime(Ref) := SOAPDateTimeToDateTime(GetXMLTextValue(subnode)) - else TDateTime(Ref) := 0; - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId : integer = -1); -var subnode : IXMLNode; - s, lTypeName : string; - lIndexInEnum: Integer; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) - then begin - s := GetXMLTextValue(subnode); - lIndexInEnum := GetEnumValue(anEnumTypeInfo, s); - if lIndexInEnum = -1 then begin - lIndexInEnum := GetEnumValue(anEnumTypeInfo, anEnumTypeInfo.Name+'_'+s); - if lIndexInEnum = -1 then begin - lTypeName := anEnumTypeInfo^.Name; - if anEnumTypeInfo = typeinfo(Boolean) then begin - if s = '1' then begin - byte(Ref) := 1; - exit; - end - else if s = '0' then begin - byte(Ref) := 0; - exit; - end; - end; - RaiseError(Format('The value "-1" for parameter "%s" of "%s" type is invalid', [aName, lTypeName])); - end; - end; - byte(Ref) := lIndexInEnum; - end else begin - byte(Ref) := 0; - end; - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadDouble(const aName: string; - aFloatType: TFloatType; var Ref; ArrayElementId : integer = -1); -var - subnode : IXMLNode; - text: string; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) then begin - text := GetXMLTextValue(subnode); - - {$IFNDEF DELPHI7UP} - if DecimalSeparator <> '.' then - ReplaceChar(text, ['.'], DecimalSeparator); - {$ENDIF} - - case aFloatType of - ftSingle : single(Ref) := SOAPStrToFloat(text); - ftDouble : double(Ref) := SOAPStrToFloat(text); - ftExtended : extended(Ref) := SOAPStrToFloat(text); - ftComp : comp(Ref) := SOAPStrToFloat(text); - ftCurr : currency(Ref) := SOAPStrToFloat(text); - end; - end else begin - case aFloatType of - ftSingle : single(Ref) := 0; - ftDouble : double(Ref) := 0; - ftExtended : extended(Ref) := 0; - ftComp : comp(Ref) := 0; - ftCurr : currency(Ref) := 0; - end; - end; - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadInt64(const aName: string; var Ref; ArrayElementId : integer = -1); -var subnode : IXMLNode; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) - then int64(Ref) := StrToInt64(GetXMLTextValue(subnode)) - else int64(Ref) := int64(0); - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadInteger(const aName: string; - anOrdType: TOrdType; var Ref; ArrayElementId : integer = -1); -var subnode : IXMLNode; -begin - subnode := GetObject(aName, ArrayElementId); - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) then - case anOrdType of - otSByte, - otUByte : byte(Ref) := StrToInt(GetXMLTextValue(subnode)); - otSWord, - otUWord : word(Ref) := StrToInt(GetXMLTextValue(subnode)); - otSLong, - otULong : integer(Ref) := StrToInt(GetXMLTextValue(subnode)); - end - else - case anOrdType of - otSByte, - otUByte : byte(Ref) := 0; - otSWord, - otUWord : word(Ref) := 0; - otSLong, - otULong : integer(Ref) := 0; - end - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadUTF8String(const aName: string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); -var subnode : IXMLNode; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) then - string(Ref) := GetXMLTextValue(subnode) - else - string(Ref) := ''; - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.ReadWideString(const aName: string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); -var subnode : IXMLNode; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) then - widestring(Ref) := GetXMLTextValue(subnode) - else - widestring(Ref) := ''; - //else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.WriteDateTime(const aName: string; const Ref; ArrayElementId : integer = -1); -var newnode : IXMLNode; -begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:dateTime'); - AddXMLTextValue(newnode, DateTimeToSOAPDateTime(TDateTime(Ref))); -end; - -procedure TROXMLSerializer.WriteEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId : integer = -1); -var newnode : IXMLNode; - isbool : boolean; - val : string; - lEnumName: String; -begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - isbool := (anEnumTypeInfo.Name='Boolean'); - - lEnumName := anEnumTypeInfo^.Name; - if not (xsoSendUntyped in SerializationOptions) then begin - if isbool - then AddXMLAttribute(newnode, 'xsi:type', 'xsd:boolean') - else AddXMLAttribute(newnode, 'xsi:type', ns_Custom+':'+lEnumName); - end; - - val := GetEnumName(anEnumTypeInfo, Ord(byte(Ref))); - if (Length(val) > Length(lEnumName) + 2) and - (Copy(val, 1, Length(lEnumName) + 1) = lEnumName + '_') then begin - val := Copy(val, Length(lEnumName) + 2, MaxInt); - end; - if isbool then val := LowerCase(val); - - AddXMLTextValue(newnode, val); // TODO: check enums bigger than a byte! -end; - -procedure TROXMLSerializer.WriteDouble(const aName: string; - aFloatType: TFloatType; const Ref; ArrayElementId : integer = -1); -var src : pointer; - text, dtype : string; - newnode : IXMLNode; -begin - src := @Ref; - case aFloatType of - ftSingle : begin - text := FloatToStr(single(src^){$IFDEF DELPHI7UP},SOAPFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - dtype := 'float'; - end; - ftDouble : begin - text := FloatToStr(double(src^){$IFDEF DELPHI7UP},SOAPFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - dtype := 'double'; - end; - ftExtended : begin - text := FloatToStr(extended(src^){$IFDEF DELPHI7UP},SOAPFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - dtype := 'double'; - end; - ftComp : begin - text := FloatToStr(comp(src^){$IFDEF DELPHI7UP},SOAPFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - dtype := 'double'; - end; - ftCurr : begin - text := FloatToStr(currency(src^){$IFDEF DELPHI7UP},SOAPFormatSettings{$ENDIF}); - {$IFNDEF DELPHI7UP}text := StringReplace(text, DecimalSeparator, '.', []);{$ENDIF} - dtype := 'double'; - end; - end; - - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:'+dtype); - AddXMLTextValue(newnode, text); -end; - -procedure TROXMLSerializer.WriteInt64(const aName: string; const Ref; ArrayElementId : integer = -1); -var src : pointer; - text : string; - newnode : IXMLNode; -begin - src := @Ref; - text := IntToStr(int64(src^)); - - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:long'); - AddXMLTextValue(newnode, text); -end; - -procedure TROXMLSerializer.WriteInteger(const aName: string; - anOrdType: TOrdType; const Ref; ArrayElementId : integer = -1); -var src : pointer; - text, dtype : string; - newnode : IXMLNode; -begin - src := @Ref; - case anOrdType of - otSByte : begin - text := IntToStr(shortint(src^)); - dtype := 'byte'; - end; - otUByte : begin - text := IntToStr(byte(src^)); - dtype := 'unsignedByte'; - end; - otSWord : begin - text := IntToStr(smallint(src^)); - dtype := 'short'; - end; - otUWord : begin - text := IntToStr(word(src^)); - dtype := 'unsignedShort'; - end; - otSLong : begin - text := IntToStr(integer(src^)); - dtype := 'int'; - end; - otULong : begin - text := IntToStr(integer(src^)); - dtype := 'unsignedInt'; - end; - end; - - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:'+dtype); - AddXMLTextValue(newnode, text); -end; - -procedure TROXMLSerializer.WriteUTF8String(const aName: string; const Ref; ArrayElementId : integer = -1); -var newnode : IXMLNode; -begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:string'); - AddXMLTextValue(newnode, string(Ref)); -end; - -procedure TROXMLSerializer.WriteWideString(const aName: string; const Ref; ArrayElementId : integer = -1); -var newnode : IXMLNode; -begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - AddXMLAttribute(newnode, 'xsi:type', 'xsd:string'); - AddXMLTextValue(newnode, WideString(Ref)); - - newnode.Value := newnode.Value; -end; - -procedure TROXMLSerializer.BeginReadObject(const aName: string; - aClass : TClass; var anObject: TObject; var LevelRef : IUnknown; var IsValidType : boolean; ArrayElementId : integer = -1); -var cnt : integer; - lNilAttr, hrefattr : IXMLNode; - id : string; - clsnme, namespc, clstype : string; - lActualClass : TROComplexTypeClass; -begin - inherited; - - if fRespNode = nil then - fRespNode := fNode; - - LevelRef := fNode; - - fnode := GetObject(aName, ArrayElementId); - - fnode := FindSoapReference(fnode); - - if (fNode=NIL) then begin - // No such node found - anObject := NIL; - Exit; - end; - - lNilAttr := fNode.GetAttributeByName(tag_Nil); - if Assigned(lNilAttr) and (lNilAttr.Value = tag_NilValue) then begin - anObject := NIL; - Exit; - end; - - hrefattr := fNode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - fNode := FindChildNodeByAttribute(BodyNode, tag_Id, id); - if fNode = nil then - fNode := FindChildNodeByAttribute(fRespNode, tag_Id, id); - end; - - if aClass.InheritsFrom(TStream) then begin - anObject := TROBinaryMemoryStream.Create; - IsValidType := TRUE; - end - - else if aClass.InheritsFrom(EROException) then begin - // Does nothing here - IsValidType := TRUE; - end - - else if IsValidType then begin - clstype := VarToStr(fNode.GetAttributeValue('xsi:type', aClass.ClassName)); - if (clstype = dts_Array) or (clstype = dts_Array2) then begin - //For arrays this attribute does't contain actual class name. - anObject := TROComplexTypeClass(aClass).Create; - end else begin - if xsoIgnoreStructureType in fSerializationOptions then begin - anObject := TROComplexTypeClass(aClass).Create; - end - else begin - SplitName(clstype, namespc, clsnme); - lActualClass := FindROClass(clsnme); - - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[clsnme]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[clsnme,aClass.ClassName]); - anObject := lActualClass.Create; - end; - end; - - if (anObject is TROArray) then begin - cnt := fNode.ChildrenCount; - TROArray(anObject).Resize(cnt); - end; - end; -end; - -function GetNamespace(aClass: TClass; aInst: Tobject): string; -var - i: Integer; -begin - if aInst is TROComplexType then aClass := aInst.ClassType; - if (aClass <> nil) and (aClass.InheritsFrom(TROComplexType)) or (aClass = TROComplexType) then begin - for i := TROComplexTypeClass(aClass).GetAttributeCount -1 downto 0 do begin - if TROComplexTypeClass(aClass).GetAttributeName(i) = 'ImportedFromNamespace' then begin - result := TROComplexTypeClass(aClass).GetAttributeValue(i); - exit; - end; - end; - end; - result := ''; -end; - -procedure TROXMLSerializer.BeginWriteObject(const aName: string; - aClass : TClass; anObject: TObject; var LevelRef : IUnknown; var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); -var id : string; - refnode : IXMLNode; - xsiattr : IXMLNode; - lName: String; -begin - lName := Unprefix(aName); - - inherited BeginWriteObject(lName, aClass, anObject, LevelRef, IsValidType, IsAssigned, ArrayElementId); - - if fRespNode = nil then - fRespNode := fNode; - - IsAssigned := Assigned(anObject); - - if aClass.InheritsFrom(TStream) then begin - LevelRef := fNode; - fNode := AddXMLChildNode(fNode, lName); - - if Assigned(anObject) then begin - if not (xsoSendUntyped in SerializationOptions) then - xsiattr := AddXMLAttribute(fNode, 'xsi:type', 'xsd:'+dts_base64Binary); - IsValidType := TRUE; - end - else begin - AddXMLAttribute(fNode, tag_Nil, tag_NilValue); - end; - end - else if IsValidType then begin // It is then a TROComplexType - - LevelRef := fNode; - - if ((aClass.InheritsFrom(TROArray) and (xsoWriteMultiRefArray in SerializationOptions)) or - (not aClass.InheritsFrom(TROArray)) and (xsoWriteMultiRefObject in SerializationOptions)) then begin - - if Assigned(anObject) then begin - id := IntToStr(fMaxRef); - Inc(fMaxRef); - - {refnode := fNode; - - fNode := AddXMLChildNode(fRespNode, ns_Custom+':'+anObject.ClassName); - AddXMLAttribute(fNode, tag_Id, id); - - refnode := AddXMLChildNode(refnode, lName); - AddXMLAttribute(refnode, tag_href, '#'+id);} - - if xsoExternalTypesAsReferences in SerializationOptions then - refnode := AddXMLChildNode(fNode, lName, GetNamespace(aClass, AnObject)) - else - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_href, '#'+id); - - fNode := AddXMLChildNode(BodyNode, ns_Custom+':'+anObject.ClassName); - AddXMLAttribute(fNode, tag_Id, id); - - if not (xsoSendUntyped in SerializationOptions) then - if (anObject is TROArray) then begin - xsiattr := AddXMLAttribute(fNode, 'xsi:type', dts_Array); - //id := ns_Custom+':'+anObject.ClassName+'['+IntToStr(TROArray(anObject).Count)+']'; - id := TypeInfoNameToSOAPType(TROArray(anObject).GetItemType)+'['+IntToStr(TROArray(anObject).Count)+']'; - AddXMLAttribute(fNode, 'SOAP-ENC:arrayType', id); - end - else xsiattr := AddXMLAttribute(fNode, 'xsi:type', ns_Custom+':'+anObject.ClassName); - end - else begin - if xsoExternalTypesAsReferences in SerializationOptions then - refnode := AddXMLChildNode(fNode, lName, GetNamespace(aClass, anObject)) - else - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_Nil, tag_NilValue); - end; - end - - else begin - if xsoExternalTypesAsReferences in SerializationOptions then - fnode := AddXMLChildNode(fNode, lName, GetNamespace(aClass, anObject)) - else - fNode := AddXMLChildNode(fNode, lName); - - if not (xsoSendUntyped in SerializationOptions) then begin - if (anObject is TROArray) then begin - xsiattr := AddXMLAttribute(fNode, 'xsi:type', dts_Array); - //id := ns_Custom+':'+anObject.ClassName+'['+IntToStr(TROArray(anObject).Count)+']'; - id := TypeInfoNameToSOAPType(TROArray(anObject).GetItemType)+'['+IntToStr(TROArray(anObject).Count)+']'; - AddXMLAttribute(fNode, 'SOAP-ENC:arrayType', id); - end - else xsiattr := AddXMLAttribute(fNode, 'xsi:type', ns_Custom+':'+anObject.ClassName); - end - end - end; - - //if (fNode<>NIL) and not IsAssigned - //then AddXMLAttribute(fNode, 'xsi:nil', 'true'); -end; - -procedure TROXMLSerializer.CustomReadObject(const aName: string; - aClass : TClass; var Ref; ArrayElementId: integer); -var obj : TObject absolute Ref; - ss : TStringStream; -begin - inherited; - if Assigned(obj) then begin - - if (obj is TStream) then begin - ss := TStringStream.Create(fNode.Value); - try - DecodeStream(ss, TMemoryStream(obj)); - TMemoryStream(obj).Position := 0; - finally - ss.Free; - end; - end; - - end; -end; - -procedure TROXMLSerializer.CustomWriteObject(const aName: string; - aClass : TClass; const Ref; ArrayElementId : integer = -1); -var obj : TObject absolute Ref; - ss : TStringStream; -begin - inherited CustomWriteObject(Unprefix(aName), aClass, Ref, ArrayElementId); - if Assigned(obj) then begin - - if (obj is TStream) then begin - ss := TStringStream.Create(''); - try - TStream(obj).Position := 0; - EncodeStream(TStream(obj), ss); - AddXMLTextValue(fNode, ss.DataString); - finally - ss.Free; - end; - end; - - end; -end; - -function TROXMLSerializer.BodyNode: IXMLNode; -begin - if (fBodyNode=NIL) then fBodyNode := FindParentNode(fNode, tag_Body, TRUE); - result := fBodyNode; -end; - -procedure TROXMLSerializer.ReadVariant(const aName: string; var Ref; - ArrayElementId: integer); -var s, - vartypestr, - varnamespcstr : string; - subnode : IXMLNode; - - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortIntValue:shortint; - lSmallIntValue: Smallint; - //lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lBoolValue: boolean; - lDoubleValue:double; - lSingleValue:single; - //lCurrencyValue:currency; - lWordValue : word; - lStringValue: widestring; - lDateTimeValue : TDateTime; -begin - subnode := GetObject(aName, ArrayElementId); - - subnode := FindSoapReference(subnode); - - if (subnode<>NIL) then begin - // Determines the type of the value, if specified. Defaults to string. - s := subnode.GetAttributeValue('xsi:empty', ''); - if s = '1' then begin - Variant(ref) := Unassigned; - exit; - end; - s := subnode.GetAttributeValue('xsi:null', ''); - if s = '1' then begin - Variant(ref) := null - end - else begin - s := subnode.GetAttributeValue('xsi:type', 'xsd:string'); - SplitName(s, varnamespcstr, vartypestr); - - // Returns the right type of variant - if SameText(vartypestr, 'string') then begin - ReadWideString(aName, lStringValue, ArrayElementId); - Variant(Ref) := lStringValue; - end - - else if SameText(vartypestr, 'float') then begin - ReadDouble(aName, ftSingle, lSingleValue, ArrayElementId); - Variant(Ref) := lSingleValue; - end - - else if SameText(vartypestr, 'double') then begin - ReadDouble(aName, ftDouble, lDoubleValue, ArrayElementId); - Variant(Ref) := lDoubleValue; - end - - else if SameText(vartypestr, 'byte') then begin - ReadInteger(aName, otSByte, lShortIntValue, ArrayElementId); - Variant(Ref) := lShortIntValue; - end - - else if SameText(vartypestr, 'unsignedByte') then begin - ReadInteger(aName, otUByte, lByteValue, ArrayElementId); - Variant(Ref) := lByteValue; - end - - else if SameText(vartypestr, 'short') then begin - ReadInteger(aName, otSWord, lSmallIntValue, ArrayElementId); - Variant(Ref) := lSmallIntValue; - end - - else if SameText(vartypestr, 'unsignedShort') then begin - ReadInteger(aName, otUWord, lWordValue, ArrayElementId); - Variant(Ref) := lWordValue; - end - - else if (SameText(vartypestr, 'int') or SameText(vartypestr, 'unsignedInt')) then begin - ReadInteger(aName, otSLong, lIntegerValue, ArrayElementId); - Variant(Ref) := lIntegerValue; - end - - else if SameText(vartypestr, 'boolean') then begin - ReadEnumerated(aName, TypeInfo(boolean), lBoolValue, ArrayElementId); - Variant(Ref) := lBoolValue; - end - - else if SameText(vartypestr, 'dateTime') then begin - ReadDateTime(aName, lDateTimeValue, ArrayElementId); - Variant(Ref) := lDateTimeValue; - end - end; - end - else RaiseError(err_ParameterNotFound, [aName]); -end; - -procedure TROXMLSerializer.WriteVariant(const aName: string; const Ref; - ArrayElementId: integer); -var vtype : integer; - varvalue : Variant; - - lIntegerValue:integer; - {$IFNDEF DELPHI5} - lShortIntValue:shortint; - lSmallIntValue: Smallint; - //lInt64Value:Int64; - {$ENDIF DELPHI5} - lByteValue:byte; - lBoolValue: boolean; - lDoubleValue:double; - lSingleValue:single; - lCurrencyValue:currency; - lWideString: widestring; - newnode: IXMLNode; -begin - varvalue := Variant(Ref); - vtype := VarType(Variant(Ref)); - - { Simple types } - case vtype of - varEmpty: - begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - AddXMLAttribute(newnode, 'xsi:empty', '1'); - end; - varNull,varError:begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - AddXMLAttribute(newnode, 'xsi:null', '1'); - end; - {$IFNDEF DELPHI5} - varShortInt:begin { 2, 10, 12 } - lShortIntValue := varvalue; - WriteInteger(aName, otSByte, lShortIntValue, ArrayElementId); - end; - varSmallInt, - varWord : begin - lSmallIntValue := varvalue; - WriteInteger(aName, otSWord, lSmallIntValue, ArrayElementId); // Suspicious... This might be wrong - end; - {$ENDIF DELPHI5} - {$IFNDEF DELPHI5}varLongWord,{$ENDIF DELPHI5} - varInteger:begin { 3, 13 } - lIntegerValue := varvalue; - WriteInteger(aName, otSLong, lIntegerValue, ArrayElementId); - end; - varSingle:begin { 4 } - lSingleValue := varvalue; - WriteDouble(aName, ftSingle, lSingleValue, ArrayElementId); - end; - varDouble:begin { 5 } - lDoubleValue := varvalue; - WriteDouble(aName, ftDouble, lDoubleValue, ArrayElementId); - end; - varDate:begin { 7 } // This must be handled differently in SOAP! - lDoubleValue := varvalue; - WriteDateTime(aName, lDoubleValue, ArrayElementId); - end; - varCurrency:begin { 6 } - lCurrencyValue := varvalue; - WriteDouble(aName, ftCurr, lCurrencyValue, ArrayElementId); - end; - varBoolean:begin { B } - lBoolValue:= varvalue; - WriteEnumerated(aName, TypeInfo(boolean), lBoolValue, ArrayElementId); - end; - varByte:begin { 11 } - lByteValue := varvalue; - WriteInteger(aName, otUByte, lByteValue, ArrayElementId); - end; - {$IFNDEF DELPHI5} -(* varInt64:begin { 14 } - NotSupported(''); - end;*) - {$ENDIF DELPHI5} - varOleStr,varString:begin { 8, 100 } - lWideString := varvalue; - WriteWideString(aName, lWideString, ArrayElementId); - end; - else NotSupported(Format(err_UnsupportedVariantType, [VarType(varvalue)])); - end; -end; - -function TROXMLSerializer.GetArrayElementName( - anItemType: PTypeInfo; anItemReference: pointer): string; -var tn: string; -begin - case anItemType.Kind of - tkClass : begin - if anItemReference = nil then result := anItemType^.Name else result := TObject(anItemReference).ClassName; - end; - tkVariant : - begin - tn := VarTypeNameToSOAPType(VarType(Variant(anItemReference^))); - result := Copy(tn, Pos(':', tn)+1, MaxInt); - end; - else begin - tn := TypeInfoNameToSOAPType(anItemType); - result := Copy(tn, Pos(':', tn)+1, MaxInt); - end; - end; -end; - -function TROXMLSerializer.GetRecordStrictOrder: Boolean; -begin - Result := xsoStrictStructureFieldOrder in fSerializationOptions; -end; - -function TROXMLSerializer.FindSoapReference(subnode: IXMLNode): IXMLNode; -var - hrefattr: IXMLNode; - id: string; -begin - result := subnode; - if subnode = nil then - exit; - hrefattr := subnode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - while subnode <> nil do begin - result := FindChildNodeByAttribute(subnode, tag_Id, id); - if result <> nil then break; - subnode := subnode.Parent; - end; - end; -end; - -function TROXMLSerializer.GetObject(const aName: string; ArrayElementId : integer): IXMLNode; -begin - if (ArrayElementId>=0) - then result := fNode.Children[ArrayElementId] - else result := FindChildNode(fNode, Unprefix(aName), ArrayElementId,TRUE); -end; - -procedure TROXMLSerializer.ReadXml(const aName: String; var Ref; - ArrayElementId: Integer); -var - w: WideString; - doc: IXMLDocument; - node: IXMLNode; -begin - node := GetObject(aName, ArrayElementID); - if (xsoEncodedXML in SerializationOptions) or (node = nil) or (node.FirstChild = nil) or (Node.FirstChild.name = '#text') then begin - ReadWideString(aName, w, ArrayElementId); - if w = '' then - IXMLNode(Ref) := nil - else begin - doc := NewROXmlDocument; - doc.New; - doc.XML := w; - IXMLNode(Ref) := doc.DocumentNode; - end; - end else begin - if node = nil then IXMLNode(Ref) := nil else begin - node := Node.FirstChild; - if node = nil then begin - IXMLNode(Ref) := nil; - end else begin - doc := NewROXmlDocument; - doc.New; - doc.XML := node.XML; - IXMLNode(Ref) := doc.DocumentNode; - end; - end; - end; -end; - -procedure TROXMLSerializer.WriteXml(const aName: String; const Ref; - ArrayElementId: Integer); -var - w: WideString; - newnode: IXMLNode; -begin - if (xsoEncodedXML in SerializationOptions) then begin - if IXMLNode(Ref) = nil then - w := '' - else - w := IXMLNode(Ref).XML; - WriteWideString(aName, w, ArrayElementId); - end else begin - newnode := AddXMLChildNode(fNode, Unprefix(aName)); - if IXMLNode(Ref) <> nil then begin - newnode.AddXml(IXMLNode(Ref).XML); - end; - end; -end; - -procedure TROXMLSerializer.ReadDecimal(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if DecimalSeparator <> '.' then s := StringReplace(s, '.', DecimalSeparator, []); - Variant(Ref) := BCDToVariant(StrToBcd(s)); -end; - -procedure TROXMLSerializer.ReadGuid(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if Copy(s,1,1) <> '{' then s := '{'+s+'}'; - string(Ref) := s; -end; - -procedure TROXMLSerializer.WriteDecimal(const aName: String; const Ref; - ArrayElementId: Integer); -var - s: string; -begin - s := BcdToStr(VariantToBCD(variant(Ref))); - if DecimalSeparator <> '.' then s := StringReplace(s, DecimalSeparator, '.', []); // delphi has no way to format a bcd with a specific format - WriteUTF8String(aName, s, ArrayElementId); -end; - -procedure TROXMLSerializer.WriteGuid(const aName: String; const Ref; - ArrayElementId: Integer); -var - s: string; -begin - s := GuidToString(StringToGUID(string(Ref))); - s := copy(s,2,length(s) -2); // remove curlies - WriteUTF8String(aName, s, ArrayElementId); -end; - -procedure TROXMLSerializer.ReadBinary(const aName: string; var Ref; - ArrayElementId: integer); -var - obj : Binary absolute Ref; - ss : TStringStream; - LevelRef: IXMLNode; -begin - LevelRef := fNode; - try - if FindNode(aName, ArrayElementId) then begin - if not Assigned(obj) then obj:= Binary.Create; - ss := TStringStream.Create(fNode.Value); - try - obj.Clear; - DecodeStream(ss, TMemoryStream(obj)); - TMemoryStream(obj).Position := 0; - finally - ss.Free; - end; - end - else - Obj := nil; - finally - fNode := LevelRef; - end; -end; - -procedure TROXMLSerializer.WriteBinary(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : Binary absolute Ref; - ss : TStringStream; - LevelRef: IXMLNode; -begin - LevelRef := fNode; -//BeginWriteObject -{ TODO -oek : BeginWriteObject } - fNode := AddXMLChildNode(fNode, Unprefix(aName)); - if Assigned(obj) then begin - if not (xsoSendUntyped in SerializationOptions) then AddXMLAttribute(fNode, 'xsi:type', 'xsd:'+dts_base64Binary); - ss := TStringStream.Create(''); - try - obj.Position := 0; - EncodeStream(obj, ss); - AddXMLTextValue(fNode, ss.DataString); - finally - ss.Free; - end; - end - else - AddXMLAttribute(fNode, tag_Nil, tag_NilValue); - fNode := LevelRef; -end; - -procedure TROXMLSerializer.WriteArray(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : TROArray absolute Ref; - LevelRef: IXmlNode; - id : string; - refnode : IXMLNode; - xsiattr : IXMLNode; - lName: String; -begin - LevelRef := fNode; - try - lName := Unprefix(aName); - if fRespNode = nil then fRespNode := fNode; - LevelRef := fNode; - if (xsoWriteMultiRefArray in SerializationOptions) then begin - if Assigned(obj) then begin - id := IntToStr(fMaxRef); - Inc(fMaxRef); - - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_href, '#'+id); - - fNode := AddXMLChildNode(BodyNode, ns_Custom+':'+obj.ClassName); - AddXMLAttribute(fNode, tag_Id, id); - - if not (xsoSendUntyped in SerializationOptions) then begin - xsiattr := AddXMLAttribute(fNode, 'xsi:type', dts_Array); - id := TypeInfoNameToSOAPType(obj.GetItemType)+'['+IntToStr(obj.Count)+']'; - AddXMLAttribute(fNode, 'SOAP-ENC:arrayType', id); - end; - end - else begin - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_Nil, tag_NilValue); - end; - end - else begin - fNode := AddXMLChildNode(fNode, lName); - if not (xsoSendUntyped in SerializationOptions) then begin - xsiattr := AddXMLAttribute(fNode, 'xsi:type', dts_Array); - id := TypeInfoNameToSOAPType(obj.GetItemType)+'['+IntToStr(obj.Count)+']'; - AddXMLAttribute(fNode, 'SOAP-ENC:arrayType', id); - end - end; - if Assigned(Obj) then Obj.WriteComplex(Self); - finally - fNode := IXMLNode(LevelRef); - end; -end; - -procedure TROXMLSerializer.WriteStruct(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : TROComplexType absolute Ref; - LevelRef: IXmlNode; - id : string; - refnode : IXMLNode; - xsiattr : IXMLNode; - lName: String; -begin - LevelRef:=fNode; - try - lName := Unprefix(aName); - if fRespNode = nil then fRespNode := fNode; - LevelRef := fNode; - if (xsoWriteMultiRefObject in SerializationOptions) then begin - - if Assigned(obj) then begin - id := IntToStr(fMaxRef); - Inc(fMaxRef); - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_href, '#'+id); - fNode := AddXMLChildNode(BodyNode, ns_Custom+':'+obj.ClassName); - AddXMLAttribute(fNode, tag_Id, id); - if not (xsoSendUntyped in SerializationOptions) then - xsiattr := AddXMLAttribute(fNode, 'xsi:type', ns_Custom+':'+obj.ClassName); - end - else begin - refnode := AddXMLChildNode(fNode, lName); - AddXMLAttribute(refnode, tag_Nil, tag_NilValue); - end; - end - else begin - fNode := AddXMLChildNode(fNode, lName); - if not (xsoSendUntyped in SerializationOptions) then - xsiattr := AddXMLAttribute(fNode, 'xsi:type', ns_Custom+':'+obj.ClassName); - end; - if Assigned(Obj) then Obj.WriteComplex(Self); - finally - fNode := LevelRef; - end; -end; - -function TROXMLSerializer.ReadArray(const aName: string; aClass: TClass; - var Ref; ArrayElementId: integer): Boolean; -var - obj : TROArray absolute Ref; - LevelRef: IXmlNode; - cnt : integer; - lNilAttr, hrefattr : IXMLNode; - id : string; - clsnme, namespc, clstype : string; - lActualClass : TROArrayClass; -begin - Result := False; - LevelRef := fNode; - try - if fRespNode = nil then fRespNode := fNode; - fnode := GetObject(aName, ArrayElementId); - fnode := FindSoapReference(fnode); - if (fNode=NIL) then begin - // No such node found - Obj := NIL; - Exit; - end; - - lNilAttr := fNode.GetAttributeByName(tag_Nil); - if Assigned(lNilAttr) and (lNilAttr.Value = tag_NilValue) then begin - obj := NIL; - Exit; - end; - - hrefattr := fNode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - fNode := FindChildNodeByAttribute(BodyNode, tag_Id, id); - if fNode = nil then fNode := FindChildNodeByAttribute(fRespNode, tag_Id, id); - end; - - clstype := VarToStr(fNode.GetAttributeValue('xsi:type', aClass.ClassName)); - if (clstype = dts_Array) or (clstype = dts_Array2) then begin - //For arrays this attribute does't contain actual class name. - obj := TROArrayClass(aClass).Create; - end else begin - if xsoIgnoreStructureType in fSerializationOptions then begin - obj := TROArrayClass(aClass).Create; - end - else begin - SplitName(clstype, namespc, clsnme); - lActualClass := TROArrayClass(FindROClass(clsnme)); - - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[clsnme]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[clsnme,aClass.ClassName]); - Obj := lActualClass.Create; - end; - end; - - cnt := fNode.ChildrenCount; - Obj.Resize(cnt); - obj.ReadComplex(Self); - finally - fNode := LevelRef; - end; -end; - -function TROXMLSerializer.ReadStruct(const aName: string; aClass: TClass; - var Ref; ArrayElementId: integer): Boolean; -var - obj : TROComplexType absolute Ref; - LevelRef: IXmlNode; - lNilAttr, hrefattr : IXMLNode; - id : string; - clsnme, namespc, clstype : string; - lActualClass : TROComplexTypeClass; -begin - Result:=False; - LevelRef:=fNode; - try - if fRespNode = nil then fRespNode := fNode; - fnode := GetObject(aName, ArrayElementId); - fnode := FindSoapReference(fnode); - if (fNode=NIL) then begin - // No such node found - obj := NIL; - Exit; - end; - - lNilAttr := fNode.GetAttributeByName(tag_Nil); - if Assigned(lNilAttr) and (lNilAttr.Value = tag_NilValue) then begin - obj := NIL; - Exit; - end; - - hrefattr := fNode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - fNode := FindChildNodeByAttribute(BodyNode, tag_Id, id); - if fNode = nil then - fNode := FindChildNodeByAttribute(fRespNode, tag_Id, id); - end; - - clstype := VarToStr(fNode.GetAttributeValue('xsi:type', aClass.ClassName)); - if (clstype = dts_Array) or (clstype = dts_Array2) then begin - //For arrays this attribute does't contain actual class name. - obj := TROComplexTypeClass(aClass).Create; - end else begin - if xsoIgnoreStructureType in fSerializationOptions then begin - obj := TROComplexTypeClass(aClass).Create; - end - else begin - SplitName(clstype, namespc, clsnme); - lActualClass := FindROClass(clsnme); - - if not Assigned(lActualClass) then RaiseError(err_UnknownClassInStream,[clsnme]); - if not lActualClass.InheritsFrom(aClass) then RaiseError(err_UnexpectedClassInStream,[clsnme,aClass.ClassName]); - obj := lActualClass.Create; - end; - end; - Obj.ReadComplex(Self); - finally - fNode := LevelRef; - end; -end; - -function TROXMLSerializer.FindNode(const aName: string; - ArrayElementId: integer): Boolean; -var - lNilAttr, hrefattr : IXMLNode; - id : string; -begin - Result:=False; - if fRespNode = nil then fRespNode := fNode; - fnode := FindSoapReference(GetObject(aName, ArrayElementId)); - - if (fNode=NIL) then Result:=False; // No such node found - - lNilAttr := fNode.GetAttributeByName(tag_Nil); - if Assigned(lNilAttr) and (lNilAttr.Value = tag_NilValue) then Exit; - - Result := True; - hrefattr := fNode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - fNode := FindChildNodeByAttribute(BodyNode, tag_Id, id); - if fNode = nil then fNode := FindChildNodeByAttribute(fRespNode, tag_Id, id); - end; -end; - -procedure TROXMLSerializer.ReadException(const aName: string; var Ref; - ArrayElementId: integer); -var - obj: EROException absolute Ref; - LevelRef, - lNilAttr, hrefattr : IXMLNode; - id : string; -begin - if fRespNode = nil then fRespNode := fNode; - - LevelRef := fNode; - try - fnode := GetObject(aName, ArrayElementId); - - fnode := FindSoapReference(fnode); - - if (fNode=NIL) then begin - // No such node found - obj := NIL; - Exit; - end; - - lNilAttr := fNode.GetAttributeByName(tag_Nil); - if Assigned(lNilAttr) and (lNilAttr.Value = tag_NilValue) then begin - obj := NIL; - Exit; - end; - - hrefattr := fNode.GetAttributeByName(tag_HRef); - if (hrefattr<>NIL) then begin - id := Copy(hrefattr.Value, 2, Length(hrefattr.Value)); // Removes the '#' - fNode := FindChildNodeByAttribute(BodyNode, tag_Id, id); - if fNode = nil then fNode := FindChildNodeByAttribute(fRespNode, tag_Id, id); - end; - Obj.ReadException(Self); - finally - fNode := LevelRef; - end; -end; - -procedure TROXMLSerializer.WriteException(const aName: string; const Ref; - ArrayElementId: integer); -var - obj: EROException absolute Ref; - LevelRef, - xsiattr : IXMLNode; -begin - if fRespNode = nil then fRespNode := fNode; - LevelRef := fNode; - try - fNode := AddXMLChildNode(fNode, Unprefix(aName)); - if not (xsoSendUntyped in SerializationOptions) then - xsiattr := AddXMLAttribute(fNode, 'xsi:type', ns_Custom+':'+obj.ClassName); - if Assigned(obj) then Obj.WriteException(Self); - finally - fNode := LevelRef; - end; -end; - -initialization - {$IFDEF DELPHI7UP} - GetLocaleFormatSettings(SOAPLocale,SOAPFormatSettings); - //ToDo: fix this for D6 - {$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXmlRpcMessage.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXmlRpcMessage.pas deleted file mode 100644 index cd60fc7..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROXmlRpcMessage.pas +++ /dev/null @@ -1,1275 +0,0 @@ -unit uROXmlRpcMessage; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Core Library } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF REMOBJECTS_TRIAL}uROTrial, {$ENDIF} - Classes, SysUtils, TypInfo, uROClasses, uROTypes, uROHttpTools, - uROSerializer, uROClient, uROClientIntf, uROXmlIntf, uRoRes, FMTBcd; - -type - TROSimpleXmlWriter = class; - EROXmlRcpSerializerException = class(Exception); - TROXmlRpcType = (XRpcRequest, XRpcResponse, XRpcFaultResponse); - TROXmlRpcState = (XrsParam, XrsArray, Xrsstruct); - - TROXmlRpcSerializer = class(TROSerializer) - private - fCurrState: TROXmlRpcState; - fDocument: IXMLDocument; - fStateCount: Integer; - fStates: array of TROXmlRpcState; - fType: TROXmlRpcType; - fMethodName: string; - fCurrentParamElement: IXMLNode; - fWriter: TROSimpleXmlWriter; - procedure PushState(aKind: TROXmlRpcState); - function PopState: TROXmlRpcState; - - procedure BeginValue(aName: string); - procedure EndValue; - - function StructGetMember(aRoot: IXMLNode; const aName: string; aRaiseException: Boolean): IXMLNode; - function GetValueNodecontentsForName(const aName: string): IXMLNode; - protected - procedure BeginWriteObject(const aName: string; aClass : TClass; anObject: TObject; var LevelRef : IUnknown; - var IsValidType : boolean; out IsAssigned:Boolean; ArrayElementId : integer = -1); override; - procedure EndWriteObject(const aName: string; aClass : TClass; anObject: TObject; const LevelRef : IUnknown); override; - procedure CustomWriteObject(const aName : string; aClass : TClass; const Ref; ArrayElementId : integer = -1); override; - procedure CustomReadObject(const aName: string; aClass: TClass;var Ref; ArrayElementId: integer);override; - procedure BeginReadObject(const aName : string; aClass : TClass; var anObject : TObject; var LevelRef : IUnknown; - var IsValidType : boolean; ArrayElementId : integer = -1); override; - procedure EndReadObject(const aName : string; aClass : TClass; var anObject : TObject; const LevelRef : IUnknown); override; - public - { Writers } - procedure WriteInteger(const aName : string; anOrdType : TOrdType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteInt64(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; const Ref; ArrayElementId : integer = -1); override; - procedure WriteUTF8String(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteWideString(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDateTime(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteDouble(const aName : string; aFloatType : TFloatType; const Ref; ArrayElementId : integer = -1); override; - procedure WriteVariant(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteXml(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteGuid(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteDecimal(const aName: String; const Ref; ArrayElementId: Integer = -1); override; - procedure WriteBinary(const aName : string; const Ref; ArrayElementId : integer = -1);override; - procedure WriteStruct(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteArray(const aName : string; const Ref; ArrayElementId : integer = -1); override; - procedure WriteException(const aName : string; const Ref; ArrayElementId : integer = -1); overload; override; - { Readers } - procedure ReadInteger(const aName : string; anOrdType : TOrdType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadInt64(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadEnumerated(const aName : string; anEnumTypeInfo : PTypeInfo; var Ref; ArrayElementId : integer = -1); override; - procedure ReadUTF8String(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadWideString(const aName : string; var Ref; ArrayElementId : integer = -1; iMaxLength:integer=-1); override; - procedure ReadDateTime(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadDouble(const aName : string; aFloatType : TFloatType; var Ref; ArrayElementId : integer = -1); override; - procedure ReadVariant(const aName : string; var Ref; ArrayElementId : integer = -1); override; - procedure ReadXml(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadDecimal(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadGuid(const aName: String; var Ref; ArrayElementId: Integer = -1); override; - procedure ReadBinary(const aName : string; var Ref; ArrayElementId : integer = -1);override; - function ReadStruct(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - function ReadArray(const aName : string; aClass : TClass; var Ref; ArrayElementId : integer = -1): Boolean; override; - procedure ReadException(const aName : string; var Ref; ArrayElementId : integer = -1); overload;override; - public - constructor Create; - destructor Destroy; override; - - procedure InitializeWrite(aType: TROXmlRpcType; aMethodName: string); - procedure InitializeRead(aStream: TStream); - - property aType: TROXmlRpcType read fType write fType; - property aMethodName: string read fMethodName write fMethodName; - - procedure WriteToStream(aStream: TStream); - - procedure WriteException(aCode: Integer; aMsg: string);reintroduce;overload; - procedure ReadException(var aCode: Integer; var aMsg: string);reintroduce;overload; - end; - - TROXmlRpcMessage = class(TROMessage) - protected - { Internals } - function ReadException: Exception; override; - procedure WriteException(aStream: TStream; anException: Exception); override; - - function CreateSerializer: TROSerializer; override; - - { IROMessage } - procedure Initialize(const aTransport: IROTransport; const anInterfaceName, aMessageName: string; aType: TMessageType); override; - - - procedure WriteToStream(aStream: TStream); override; - procedure ReadFromStream(aStream: TStream); override; - procedure InitializeExceptionMessage(const aTransport: IROTransport; - const aLibraryName: String; const anInterfaceName: String; - const aMessageName: String); override; - public - function IsValidMessage(aData: PChar; aLength: Integer): boolean; override; - end; - TROSimpleXmlWriter = class - private - fElementStack: TStrings; - fOutput: TMemoryStream; - fFinished: Boolean; - - procedure WriteRawString(const s: string); - public - procedure WriteStartElement(const aElementName: string); - procedure WriteEndElement; - - procedure WriteString(const aValue: WideString); - - procedure SaveToStream(aDest: TStream); - - constructor Create; - destructor Destroy; override; - - property Finished: Boolean read fFinished; - end; - -function StringToCurrInvariant(const aValue: string): Currency; -function CurrToStringInvariant(aValue: Currency): String; - -implementation -uses - uROCompression, DateUtils, StrUtils, uROBinaryHelpers; - -function FirstNonText(node: IXMLNode): IXMLNode; -begin - Result := Node; - while (Result <> nil) and (copy(Result.Name, 1, 1) = '#') do - Result := Result.NextSibling; -end; - -function StringToCurrInvariant(const aValue: string): Currency; -var - s: string; - i: Integer; - Res: Int64; -begin - s := aValue; - i := Pos('.', s); - if i = 0 then begin - s := s + '.0000'; - end - else begin - if Length(s) - i < 4 then - s := s + StringOfChar('0', 4 - (Length(s) - i)) - else if Length(s) - i > 4 then - Delete(s, i + 5, MaxInt); - end; - Delete(s, i, 1); - Res := StrToInt64(s); - Move(Res, Result, 8); -end; - -function CurrToStringInvariant(aValue: Currency): string; -var - Val: Int64; -begin - Move(aValue, Val, 8); - Result := IntToStr(Val); // we need it locale independent and without any thousand seperators - if Length(Result) <= 4 then - Result := StringOfChar('0', 5 - Length(Result)) + Result; - Insert('.', Result, Length(Result) - 3); -end; - -{ TROXmlRpcMessage } - -function TROXmlRpcMessage.CreateSerializer: TROSerializer; -begin - result := TROXmlRpcSerializer.Create; -end; - -procedure TROXmlRpcMessage.Initialize(const aTransport: IROTransport; - const anInterfaceName, aMessageName: string; aType: TMessageType); -begin - inherited; - SetHTTPInfo(aTransport, DataFormatXml); - case aType of - mtRequest: TROXmlRpcSerializer(Serializer).InitializeWrite(XRpcRequest, anInterfaceName + '.' + aMessageName); - mtResponse: TROXmlRpcSerializer(Serializer).InitializeWrite(XRpcResponse, anInterfaceName + '.' + aMessageName); - mtException: TROXmlRpcSerializer(Serializer).InitializeWrite(XRpcFaultResponse, anInterfaceName + '.' + aMessageName) - else - raise EROXmlRcpSerializerException.Create('Unsupported request type'); - end -end; - -procedure TROXmlRpcMessage.InitializeExceptionMessage( - const aTransport: IROTransport; const aLibraryName, anInterfaceName, - aMessageName: String); -begin - inherited; - SetHTTPInfo(aTransport, DataFormatXml); -end; - -function TROXmlRpcMessage.IsValidMessage(aData: PChar; - aLength: Integer): boolean; -var - str: string; -begin - SetString(str, aData, aLength); - Result := - (Pos('', str) > 0) or - (Pos('', str) > 0) or - (Pos('', str) > 0); -end; - -function TROXmlRpcMessage.ReadException: Exception; -var - lCode: Integer; - lMsg: string; - cl: string; - idx: Integer; -begin - TROXmlRpcSerializer(Serializer).ReadException(lCode, lMsg); - case lCode of - -32700, -32701, -32702, -32600, -32603, -32300: - begin - Result := EROXmlRcpSerializerException.Create(lMsg); - exit; - end; - end; - idx := Pos(': ', lMsg); - if (idx = 0) or (idx > Pos(' ', lMsg)) then begin - result := Exception.Create(lMsg); - exit; - end; - cl := Copy(lMsg, 1, Idx -1); - Delete(lMsg, 1, Idx + 1); - - result := CreateException(cl, lMsg); - - // Reads the other fields which have been properly serialized - //if result.InheritsFrom(EROException) then - //EROException(Result).Read(Serializer); -end; - -procedure TROXmlRpcMessage.ReadFromStream(aStream: TStream); -var - s: string; - encryptedheader: array[0..5] of char; -begin - inherited; - aStream.Position := 0; - - try - TROXmlRpcSerializer(Serializer).InitializeRead(aStream); - except - aStream.Position := 0; - aStream.Read(encryptedheader, 6); - if (encryptedheader[0] = 'r') and (encryptedheader[1] = 'o') and - (encryptedheader[2] = 'r') and (encryptedheader[3] = 'o') and - (encryptedheader[4] = 'c') and (encryptedheader[5] = 'k') then - RaiseInvalidStreamError(err_InvalidHeaderEncrypted, [], aStream); - raise; - end; - if TROXmlRpcSerializer(Serializer).aType = XRpcFaultResponse then - ProcessException - else begin - s := TROXmlRpcSerializer(Serializer).aMethodName; - if pos('.', s) = 0 then - MessageName := s - else begin - MessageName := copy(s, pos('.', s) + 1, MaxInt); - InterfaceName := copy(s, 1, pos('.', s) - 1); - end; - end; -end; - -procedure TROXmlRpcMessage.WriteException(aStream: TStream; - anException: Exception); -begin - inherited; - TROXmlRpcSerializer(Serializer).InitializeWrite(XRpcFaultResponse, ''); - if anException is EROXmlRcpSerializerException then - TROXmlRpcSerializer(Serializer).WriteException(-32600, anException.Message) - else - TROXmlRpcSerializer(Serializer).WriteException(1, anException.ClassName+': '+anException.Message); -// if anException is EROException then EROException(anException).Write(Serializer); - TROXmlRpcSerializer(Serializer).WriteToStream(aStream); -end; - -procedure TROXmlRpcMessage.WriteToStream(aStream: TStream); -begin - TROXmlRpcSerializer(Serializer).WriteToStream(aStream); - inherited; -end; - -{ TROXmlRpcSerializer } - -constructor TROXmlRpcSerializer.Create; -begin - inherited Create; -end; - -procedure TROXmlRpcSerializer.InitializeWrite(aType: TROXmlRpcType; aMethodName: string); -begin - ftype := aType; - fMethodName := aMethodName; - if fWriter <> nil then fWriter.Free; - fWriter := TROSimpleXmlWriter.Create; - case aType of - XRpcFaultResponse: - begin - fWriter.WriteStartElement('methodResponse'); - fWriter.WriteStartElement('fault'); - fCurrState := XrsArray; - end; - XRpcResponse: - begin - fWriter.WriteStartElement('methodResponse'); - fWriter.WriteStartElement('params'); - end; - XRpcRequest: - begin - fWriter.WriteStartElement('methodCall'); - fWriter.WriteStartElement('methodName'); - fWriter.WriteString(fMethodName); - fWriter.WriteEndElement(); - fWriter.WriteStartElement('params'); - end; - end; -end; - -procedure TROXmlRpcSerializer.CustomWriteObject(const aName: string; - aClass: TClass; const Ref; ArrayElementId: integer); -var - anObject: TObject absolute Ref; - lTemp: Binary; -begin - if anObject is TStream then begin - lTemp := Binary.Create; - try - TStream(anObject).Seek(0, soFromBeginning); - EncodeStream(TStream(anObject), lTemp); - fWriter.WriteString(lTemp.ToString); - finally - lTemp.Free; - end; - end else - inherited; -end; - -procedure TROXmlRpcSerializer.BeginWriteObject(const aName: string; - aClass: TClass; anObject: TObject; var LevelRef: IInterface; - var IsValidType: boolean; out IsAssigned: Boolean; - ArrayElementId: integer); -begin - if aClass <> nil then - inherited; - - if not assigned(anObject) then raise EROXmlRcpSerializerException.Create('Nil objects not supported by xmlrpc'); - - IsAssigned := True; - - BeginValue(aName); - - if anObject is TStream then begin - fWriter.WriteStartElement('base64'); - // write binary - IsValidType := true; // Adds streams/binaries as supported type - end else if anObject is TROArray then begin - fWriter.WriteStartElement('array'); - PushState(XrsArray); - fWriter.WriteStartElement('data'); - IsValidType := true; // Adds Array as supported type - end - else if anObject is TROComplexType then begin - fWriter.WriteStartElement('struct'); - PushState(Xrsstruct); - IsValidType := true; - end; -end; - -procedure TROXmlRpcSerializer.EndWriteObject(const aName: string; - aClass: TClass; anObject: TObject; const LevelRef: IInterface); -begin - if anObject is TStream then begin - fWriter.WriteEndElement; - end else if anObject is TROArray then begin - fWriter.WriteEndElement; - fWriter.WriteEndElement; - if PopState <> xrsArray then raise EROXmlRcpSerializerException.Create('Invalid state'); - end - else if anObject is TROComplexType then begin - if PopState <> Xrsstruct then raise EROXmlRcpSerializerException.Create('Invalid state'); - fWriter.WriteEndElement; - end; - - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteDateTime(const aName: string; const Ref; - ArrayElementId: integer); -begin - BeginValue(aName); - fWriter.WriteStartElement('dateTime.iso8601'); - fWriter.WriteString(FormatDateTime('yyyymmdd"T"hh:nn:ss', DateTime(Ref))); - fWriter.WriteEndElement; - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; const Ref; ArrayElementId: integer); -begin - BeginValue(aName); - if anEnumTypeInfo.Name = 'Boolean' then - begin - fWriter.WriteStartElement('boolean'); - if boolean(Ref) then - fWriter.WriteString('1') - else - fWriter.WriteString('0'); - fWriter.WriteEndElement; - end else - begin - fWriter.WriteStartElement('string'); - fWriter.WriteString(GetEnumName(anEnumTypeInfo, Ord(byte(Ref)))); - fWriter.WriteEndElement; - end; - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteDouble(const aName: string; - aFloatType: TFloatType; const Ref; ArrayElementId: integer); -var - s: string; -begin - // Str doesn't use the locale settings - case aFloatType of - ftSingle: s := FloatToStr(Single(Ref)); - ftDouble: s := FloatToStr(Double(Ref)); - ftExtended: s := FloatToStr(Extended(Ref)); - ftComp: s := FloatToStr(Comp(Ref)); - ftCurr: - begin - s :=CurrToStringInvariant(currency(Ref)); - WriteUTF8String(aName, s); - exit; - end; - end; - s := StringReplace(s, DecimalSeparator, '.', []); - BeginValue(aName); - fWriter.WriteStartElement('double'); - fWriter.WriteString(s); - fWriter.WriteEndElement(); - EndValue(); -end; - -procedure TROXmlRpcSerializer.WriteInt64(const aName: string; const Ref; - ArrayElementId: integer); -begin - BeginValue(aName); - fWriter.WriteStartElement('string'); // no way around - fWriter.WriteString(IntToStr(Int64(ref))); - fWriter.WriteEndElement(); - EndValue(); -end; - -procedure TROXmlRpcSerializer.WriteInteger(const aName: string; - anOrdType: TOrdType; const Ref; ArrayElementId: integer); -var - aIntVal: Integer; -begin - case anOrdType of - otSByte: aIntVal := ShortInt(Ref); - otUByte: aIntVal := Byte(Ref); - otSWord: aIntVal := SmallInt(Ref); - otUWord: aIntVal := Word(Ref); - otSLong: aIntVal := Integer(Ref); - otULong: aIntVal := Cardinal(Ref); - else - aIntVal := 0; - end; - BeginValue(aName); - fWriter.WriteStartElement('i4'); - fWriter.WriteString(IntToStr(aIntVal)); - fWriter.WriteEndElement(); - EndValue(); -end; - -procedure TROXmlRpcSerializer.WriteUTF8String(const aName: string; const Ref; - ArrayElementId: integer); -begin - BeginValue(aName); - fWriter.WriteStartElement('string'); - fWriter.WriteString(string(Ref)); - fWriter.WriteEndElement; - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteToStream(aStream: TStream); -begin - if not fWriter.Finished then - begin - fWriter.WriteEndElement(); // params/fault - fWriter.WriteEndElement(); // methodRequest/methodRespones - end; - fWriter.SaveToStream(aStream); -end; - -procedure TROXmlRpcSerializer.WriteVariant(const aName: string; const Ref; - ArrayElementId: integer); -begin - raise EROXmlRcpSerializerException.Create('Variants not supported by xmlrpc'); -end; - -procedure TROXmlRpcSerializer.WriteWideString(const aName: string; - const Ref; ArrayElementId: integer); -begin - BeginValue(aName); - fWriter.WriteStartElement('string'); - fWriter.WriteString(WideString(Ref)); - fWriter.WriteEndElement; - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteException(aCode: Integer; aMsg: string); -begin - BeginValue(''); - fWriter.WriteStartElement('struct'); - PushState(Xrsstruct); - WriteInteger('faultCode', otSLong, aCode); - WriteUTF8String('faultString', aMsg); - if PopState <> Xrsstruct then raise EROXmlRcpSerializerException.Create('Invalid state'); - fWriter.WriteEndElement; - EndValue; -end; - -procedure TROXmlRpcSerializer.InitializeRead(aStream: TStream); -var - el, tmp: IXMLNode; -begin - fDocument := NewROXmlDocument; - fDocument.New; - fDocument.LoadFromStream(aStream); - if (fDocument.DocumentNode.Name = 'methodRequest') or (fDocument.DocumentNode.Name = 'methodCall') then - fType := XRpcRequest - else if fDocument.DocumentNode.Name = 'methodResponse' then - fType := XRpcResponse - else - raise EROXmlRcpSerializerException.Create('Invalid xmlrpc document'); - - el := fDocument.DocumentNode; - if fType = xrpcRequest then begin - tmp := el.GetNodeByName('methodName'); - if tmp = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc document'); - fMethodName := tmp.Value; - tmp := el.GetNodeByName('params'); - if tmp = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc document'); - fCurrentParamElement := FirstNonText(tmp.FirstChild); - end else begin - tmp := el.GetNodeByName('fault'); - if tmp = nil then begin - tmp := el.GetNodeByName('params'); - if tmp = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc document'); - tmp := FirstNonText(tmp.FirstChild); - end - else - fType := XRpcFaultResponse; - fCurrentParamElement := tmp; - end; -end; - - -function TROXmlRpcSerializer.StructGetMember(aRoot: IXMLNode; const aName: string; aRaiseException: Boolean): IXMLNode; -var - i: Integer; - tmp: IXMLNode; -begin - for i := 0 to aRoot.ChildrenCount -1 do - begin - Result := aRoot.Children[i]; - tmp := Result.GetNodeByName('name'); - if (tmp <> nil) and (tmp.Value = aName) then begin - Result := result.GetNodeByName('value'); - if (Result = nil) and aRaiseException then EROXmlRcpSerializerException.Create('Unknown node: '+aName); - exit; - end; - end; - if (Result = nil) and aRaiseException then EROXmlRcpSerializerException.Create('Unknown node: '+aName); - result := nil; -end; - -procedure TROXmlRpcSerializer.ReadException(var aCode: Integer; var aMsg: string); -var - tmp, val: IXMLNode; -begin - tmp := fCurrentParamElement.GetNodeByName('value'); - if tmp = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc exception'); - tmp := tmp.GetNodeByName('struct'); - if tmp = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc exception'); - - val := StructGetMember(tmp, 'faultCode', true); - val := val.GetNodeByName('i4'); - if val = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc exception'); - acode := val.Value; - - val := StructGetMember(tmp, 'faultString', true); - val := val.GetNodeByName('string'); - if val = nil then raise EROXmlRcpSerializerException.Create('Invalid xmlrpc exception'); - aMsg := val.Value; -end; - -procedure TROXmlRpcSerializer.BeginReadObject(const aName: string; - aClass: TClass; var anObject: TObject; var LevelRef: IInterface; - var IsValidType: boolean; ArrayElementId: integer); -var - el: IXMLNode; -begin - if aClass.InheritsFrom(TStream) then begin - anObject := TROBinaryMemoryStream.Create; - IsValidType := true; - end - else if aclass.InheritsFrom(TROArray) then begin - anObject := TROComplexTypeClass(aClass).Create; - IsValidType := true; - end - else if aclass.InheritsFrom(TROComplexType) then begin - anObject := TROComplexTypeClass(aClass).Create; - el :=GetValueNodeContentsForName(aName); - if (el = nil) or (el.Name <> 'struct') then raise EROXmlRcpSerializerException.Create('Not a struct'); - PushState(Xrsstruct); - fCurrentParamElement := el; - IsValidType := true; - end else - IsValidType := false; -end; - -procedure TROXmlRpcSerializer.CustomReadObject(const aName: string; - aClass: TClass; var Ref; ArrayElementId: integer); -var - obj: TObject absolute ref; - el, - tmp: IXMLNode; - ci: Integer; - itemref: Pointer; - tmpstream: Binary; -begin - if obj is TROArray then begin - el := GetValueNodeContentsForName(aName); - if el.Name <> 'array' then raise EROXmlRcpSerializerException.Create('Not at array'); - el := FirstNonText(el.FirstChild); - if el.Name <> 'data' then raise EROXmlRcpSerializerException.Create('Not an array'); - tmp := fCurrentParamElement; - fCurrentParamElement := FirstNonText(el.FirstChild); - PushState(XrsArray); - ci := 0; - TROArray(obj).Resize(el.ChildrenCount); // might differ if there are junk entries - while fCurrentParamElement <> nil do begin - if TROArray(obj).GetItemClass <> nil then begin - itemref := nil; - Read(RO_ArrayItemName, TROArray(obj).GetItemType, itemref, ci); - TROArray(obj).SetItemRef(ci, itemref); - end else begin - itemref := TROArray(obj).GetItemRef(ci); - Read(RO_ArrayItemName, TROArray(obj).GetItemType, itemref^, ci); - end; - inc(ci); - end; - if ci <> el.ChildrenCount then TROArray(obj).Resize(ci); - if PopState <> XrsArray then raise EROXmlRcpSerializerException.Create('Invalid state'); - fCurrentParamElement := tmp; - end else if obj is TStream then begin - el := GetValueNodecontentsForName(aName); - if el.Name <> 'base64' then raise EROXmlRcpSerializerException.Create('Not a base64 block'); - tmpstream := TROBinaryMemoryStream.Create(el.Value); - try - DecodeStream(tmpstream, TStream(obj)); - TStream(obj).Position := 0; - finally - tmpstream.Free; - end; - end else - inherited; -end; - -procedure TROXmlRpcSerializer.EndReadObject(const aName: string; - aClass: TClass; var anObject: TObject; const LevelRef: IInterface); -var - el: IXMLNode; -begin - if aclass.InheritsFrom(TROComplexType) and not (aClass.InheritsFrom(TStream) or aclass.InheritsFrom(TROArray)) then begin - el := fCurrentParamElement; - if (el = nil) or (el.Name <> 'struct') or (PopState() <> Xrsstruct)then raise EROXmlRcpSerializerException.Create('Invalid state'); - case fCurrState of - XrsArray: - el := el.Parent; - XrsParam: - el := el.Parent.Parent; - Xrsstruct: - el := el.Parent.Parent.Parent; - end; - fCurrentParamElement := FirstNonText(el.NextSibling); - end -end; - -procedure TROXmlRpcSerializer.ReadDateTime(const aName: string; var Ref; - ArrayElementId: integer); -var - el: IXMLNode; - s: string; - h,m,sec: Integer; -begin - el := GetValueNodeContentsForName(aName); - if el.Name <> 'dateTime.iso8601' then raise EROXmlRcpSerializerException.Create('Not a datetime'); - s := el.Value; - if (Length(s) <> 17) or (s[9] <> 'T') then raise EROXmlRcpSerializerException.Create('Invalid date format'); - DateTime(ref) := EncodeDate( - StrToInt(copy(s,1,4)), //yyyy - StrToInt(copy(s,5,2)), //mm - StrToInt(copy(s,7,2))); //dd - // skip the T - delete(s,1,9); - h := StrToInt(copy(s,1,2)); //hh - delete(s,1,2); - if copy(s,1,1) = ':' then delete(s,1,1); - m := StrToInt(copy(s,1,2)); //nn - delete(s,1,2); - if copy(s,1,1) = ':' then delete(s,1,1); - sec := StrToInt(copy(s,1,2)); //ss - DateTime(ref) := DateTime(ref) + EncodeTime(H, M, Sec, 0) -end; - -procedure TROXmlRpcSerializer.ReadEnumerated(const aName: string; - anEnumTypeInfo: PTypeInfo; var Ref; ArrayElementId: integer); -var - enumval: Integer; - s: string; - el: IXMLNode; -begin - if anEnumTypeInfo.Name = 'Boolean' then begin - el := GetValueNodeContentsForName(aName); - if el.Name <> 'boolean' then raise EROXmlRcpSerializerException.Create('Not a boolean'); - if (el.Value = '1') or (el.Value = 'true') then - enumval := 1 - else - enumval := 0; - end else begin - ReadUTF8String(aName, s); - enumval := GetEnumValue(anEnumTypeInfo, s); - if enumval < 0 then - raise EROXmlRcpSerializerException.Create('Unknown value "'+ s +'" for enum "'+anEnumTypeInfo^.Name+'"'); - end; - byte(Ref) := enumval; -end; - -procedure TROXmlRpcSerializer.ReadDouble(const aName: string; - aFloatType: TFloatType; var Ref; ArrayElementId: integer); -var - d: Double; - el: IXMLNode; - c: Integer; - s: string; -begin - if aFloatType = ftCurr then - begin - ReadUTF8String(aName, s); - Currency(Ref) := StringToCurrInvariant(s); - exit; - end; - el := GetValueNodeContentsForName(aName); - if el.Name <> 'double' then raise EROXmlRcpSerializerException.Create('Not a double'); - - Val(el.Value, d, c); - if c <> 0 then raise EROXmlRcpSerializerException.Create('Invalid float format'); - - case aFloatType of - ftSingle: Single(Ref) := d; - ftDouble: Double(Ref) := d; - ftExtended: Extended(Ref) := d; - ftComp: Comp(Ref) := d; - end; -end; - -procedure TROXmlRpcSerializer.ReadInt64(const aName: string; var Ref; - ArrayElementId: integer); -var - s: string; -begin - ReadUTF8String(aName, s); - Int64(Ref) := StrToInt64(s); -end; - -procedure TROXmlRpcSerializer.ReadInteger(const aName: string; - anOrdType: TOrdType; var Ref; ArrayElementId: integer); -var - el: IXMLNode; - aVal: Integer; -begin - el := GetValueNodeContentsForName(aName); - if (el.Name <> 'i4') and (el.Name <> 'int') then raise EROXmlRcpSerializerException.Create('Not an integer'); - aVal := StrToInt(el.Value); - case anOrdType of - otSByte: ShortInt(Ref) := aVal; - otUByte: Byte(Ref) := aVal; - otSWord: SmallInt(Ref) := aVal; - otUWord: Word(Ref) := aVal; - otSLong: Longint(Ref) := aVal; - otULong: Cardinal(Ref) := aVal; - end; -end; - -procedure TROXmlRpcSerializer.ReadUTF8String(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -var - el: IXMLNode; -begin - el := GetValueNodeContentsForName(aName); - if el.Name <> 'string' then raise EROXmlRcpSerializerException.Create('Not a string'); - string(Ref) := el.Value; -end; - -procedure TROXmlRpcSerializer.ReadVariant(const aName: string; var Ref; - ArrayElementId: integer); -begin - raise EROXmlRcpSerializerException.Create('Variants not supported by xmlrpc'); -end; - -procedure TROXmlRpcSerializer.ReadWideString(const aName: string; var Ref; - ArrayElementId, iMaxLength: integer); -var - el: IXMLNode; -begin - el := GetValueNodeContentsForName(aName); - if el.Name <> 'string' then raise EROXmlRcpSerializerException.Create('Not a string'); - WideString(Ref) := el.Value; -end; - - -destructor TROXmlRpcSerializer.Destroy; -begin - fWriter.Free; - inherited Destroy; -end; - -function TROXmlRpcSerializer.PopState: TROXmlRpcState; -begin - if fStateCount = 0 then raise EROXmlRcpSerializerException.Create('Invalid state'); - Dec(fStateCount); - Result := fCurrState; - fCurrState := fStates[fStatecount]; -end; - -procedure TROXmlRpcSerializer.PushState(aKind: TROXmlRpcState); -begin - if fStateCount = Length(fStates) then - SetLength(fStates, Length(FStates) + 4); - fStates[fStateCount] := fCurrState; - Inc(FStateCount); - fCurrState := aKind; -end; - -procedure TROXmlRpcSerializer.BeginValue(aName: string); -begin - case fCurrState of - XrsParam: fWriter.WriteStartElement('param'); - Xrsstruct: - begin - fWriter.WriteStartElement('member'); - fWriter.WriteStartElement('name'); - fWriter.WriteString(aName); - fWriter.WriteEndElement; - end; - end; - fWriter.WriteStartElement('value'); -end; - -procedure TROXmlRpcSerializer.EndValue; -begin - fWriter.WriteEndElement; - case fCurrState of - XrsParam, - Xrsstruct: - fWriter.WriteEndElement; - end; -end; - -function TROXmlRpcSerializer.GetValueNodecontentsForName( - const aName: string): IXMLNode; -begin - if fCurrentParamElement = nil then raise EROXmlRcpSerializerException.Create('Invalid state'); - case fCurrState of - XrsArray: - begin - Result := FirstNonText(fCurrentParamElement.FirstChild); - fCurrentParamElement := FirstNonText(fCurrentParamElement.NextSibling); - end; - XrsParam: - begin - Result := FirstNonText(fCurrentParamElement.FirstChild); - if result = nil then raise EROXmlRcpSerializerException.Create('Invalid state'); - if result.Name = 'value' then Result := FirstNonText(Result.FirstChild); - fCurrentParamElement := FirstNonText(fCurrentParamElement.NextSibling); - end; - Xrsstruct: - begin - Result := fCurrentParamElement; - if result = nil then raise EROXmlRcpSerializerException.Create('Invalid state'); - Result := StructGetMember(Result, aName, True); - Result := FirstNonText(Result.FirstChild); - end; - end; -end; - -procedure TROXmlRpcSerializer.ReadXml(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: WideString; - res: IXMLDocument; -begin - ReadWideString(aName, s, ArrayElementID); - if s = '' then - IXmlNode(Ref) := nil - else begin - res := NewROXmlDocument; - Res.New; - Res.XML := s; - IXmlNode(Ref) := res.DocumentNode; - end; -end; - -procedure TROXmlRpcSerializer.WriteXml(const aName: String; const Ref; - ArrayElementId: Integer); -var - s: WideString; -begin - if IXMLNode(Ref) = nil then - S := '' - else - s := IXMLNode(Ref).XML; - WriteWideString(aName, s, ArrayElementId); -end; - -procedure TROXmlRpcSerializer.ReadDecimal(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if DecimalSeparator <> '.' then s := StringReplace(s, '.', DecimalSeparator, []); - Variant(Ref) := BCDToVariant(StrToBcd(s)); -end; - -procedure TROXmlRpcSerializer.ReadGuid(const aName: String; var Ref; - ArrayElementId: Integer); -var - s: string; -begin - ReadUTF8String(aName, s, ArrayElementId); - if Copy(s,1,1) <> '{' then s := '{'+s+'}'; - string(Ref) := s; -end; - -procedure TROXmlRpcSerializer.WriteDecimal(const aName: String; const Ref; - ArrayElementId: Integer); -var - s: string; -begin - s := BcdToStr(VariantToBCD(variant(Ref))); - if DecimalSeparator <> '.' then s := StringReplace(s, DecimalSeparator, '.', []); // delphi has no way to format a bcd with a specific format - WriteUTF8String(aName, s, ArrayElementId); -end; - -procedure TROXmlRpcSerializer.WriteGuid(const aName: String; const Ref; - ArrayElementId: Integer); -var - s: string; -begin - s := GuidToString(StringToGUID(string(Ref))); - s := copy(s,2,length(s) -2); // remove curlies - WriteUTF8String(aName, s, ArrayElementId); -end; - - -procedure TROXmlRpcSerializer.ReadBinary(const aName: string; var Ref; - ArrayElementId: integer); -var - obj: Binary absolute ref; - el: IXMLNode; - tmpstream: Binary; -begin - el := GetValueNodecontentsForName(aName); - if el.Name <> 'base64' then raise EROXmlRcpSerializerException.Create('Not a base64 block'); - Obj := TROBinaryMemoryStream.Create; - tmpstream := TROBinaryMemoryStream.Create(el.Value); - try - DecodeStream(tmpstream, obj); - obj.Position := 0; - finally - tmpstream.Free; - end; -end; - - -procedure TROXmlRpcSerializer.WriteBinary(const aName: string; const Ref; - ArrayElementId: integer); -var - obj: Binary absolute Ref; - lTemp: Binary; -begin - if not assigned(obj) then raise EROXmlRcpSerializerException.Create('Nil objects not supported by xmlrpc'); - BeginValue(aName); - fWriter.WriteStartElement('base64'); - // write binary - lTemp := Binary.Create; - try - obj.Seek(0, soFromBeginning); - EncodeStream(obj, lTemp); - fWriter.WriteString(lTemp.ToString); - finally - lTemp.Free; - end; - // endwriteobject - fWriter.WriteEndElement; - EndValue; -end; - - -function TROXmlRpcSerializer.ReadArray(const aName: string; aClass: TClass; - var Ref; ArrayElementId: integer): Boolean; -var - obj : TROArray absolute Ref; - el, - tmp: IXMLNode; -// ci: Integer; -// itemref: Pointer; -begin - Result:=True; - obj := TROArrayClass(aClass).Create; - el := GetValueNodeContentsForName(aName); - if el.Name <> 'array' then raise EROXmlRcpSerializerException.Create('Not at array'); - el := FirstNonText(el.FirstChild); - if el.Name <> 'data' then raise EROXmlRcpSerializerException.Create('Not an array'); - tmp := fCurrentParamElement; - fCurrentParamElement := FirstNonText(el.FirstChild); - PushState(XrsArray); - - obj.Resize(el.ChildrenCount); // might differ if there are junk entries -(* - ci := 0; - while fCurrentParamElement <> nil do begin - if obj.GetItemClass <> nil then begin - itemref := nil; - Read(RO_ArrayItemName, obj.GetItemType, itemref, ci); - obj.SetItemRef(ci, itemref); - end else begin - itemref := obj.GetItemRef(ci); - Read(RO_ArrayItemName, obj.GetItemType, itemref^, ci); - end; - inc(ci); - end; - if ci <> el.ChildrenCount then obj.Resize(ci); -*) - obj.ReadComplex(Self); - if PopState <> XrsArray then raise EROXmlRcpSerializerException.Create('Invalid state'); - fCurrentParamElement := tmp; -end; - -function TROXmlRpcSerializer.ReadStruct(const aName: string; - aClass: TClass; var Ref; ArrayElementId: integer): Boolean; -var - obj : TROComplexType absolute Ref; - el: IXMLNode; -begin - Result:=True; - obj := TROComplexTypeClass(aClass).Create; - el :=GetValueNodeContentsForName(aName); - if (el = nil) or (el.Name <> 'struct') then raise EROXmlRcpSerializerException.Create('Not a struct'); - PushState(Xrsstruct); - fCurrentParamElement := el; - Obj.ReadComplex(Self); - el := fCurrentParamElement; - if (el = nil) or (el.Name <> 'struct') or (PopState() <> Xrsstruct)then raise EROXmlRcpSerializerException.Create('Invalid state'); - case fCurrState of - XrsArray: - el := el.Parent; - XrsParam: - el := el.Parent.Parent; - Xrsstruct: - el := el.Parent.Parent.Parent; - end; - fCurrentParamElement := FirstNonText(el.NextSibling); -end; - -procedure TROXmlRpcSerializer.WriteArray(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : TROArray absolute Ref; -begin - if not assigned(obj) then raise EROXmlRcpSerializerException.Create('Nil objects not supported by xmlrpc'); - BeginValue(aName); - fWriter.WriteStartElement('array'); - PushState(XrsArray); - fWriter.WriteStartElement('data'); - obj.WriteComplex(Self); - fWriter.WriteEndElement; - fWriter.WriteEndElement; - if PopState <> xrsArray then raise EROXmlRcpSerializerException.Create('Invalid state'); - EndValue; -end; - -procedure TROXmlRpcSerializer.WriteStruct(const aName: string; const Ref; - ArrayElementId: integer); -var - obj : TROComplexType absolute Ref; -begin - if not assigned(obj) then raise EROXmlRcpSerializerException.Create('Nil objects not supported by xmlrpc'); - BeginValue(aName); - fWriter.WriteStartElement('struct'); - PushState(Xrsstruct); - obj.WriteComplex(Self); - if PopState <> Xrsstruct then raise EROXmlRcpSerializerException.Create('Invalid state'); - fWriter.WriteEndElement; - EndValue; -end; - -procedure TROXmlRpcSerializer.ReadException(const aName: string; var Ref; - ArrayElementId: integer); -begin -// not used -end; - -procedure TROXmlRpcSerializer.WriteException(const aName: string; - const Ref; ArrayElementId: integer); -begin -// not used -end; - -{ TROSimpleXmlWriter } - -constructor TROSimpleXmlWriter.Create; -begin - inherited Create; - fElementStack := TStringList.Create; - fOutput := TMemoryStream.Create; -end; - -destructor TROSimpleXmlWriter.Destroy; -begin - fOutput.Free; - fElementStack.Free; - inherited; -end; - -procedure TROSimpleXmlWriter.SaveToStream(aDest: TStream); -begin - if not fFinished then raise EROXmlRcpSerializerException.Create('XmlDocument not finished yet'); - fOutput.Position := 0; - fOutput.SaveToStream(aDest); -end; - -procedure TROSimpleXmlWriter.WriteEndElement; -begin - if fFinished then raise EROXmlRcpSerializerException.Create('XmlDocument already finished'); - if fElementStack.Count = 0 then raise EROXmlRcpSerializerException.Create('Root element missing'); - WriteRawString(''); - fElementStack.Delete(fElementStack.Count -1); - if fElementStack.Count = 0 then fFinished := true; -end; - -procedure TROSimpleXmlWriter.WriteRawString(const s: string); -begin - if s <> '' then - fOutput.Write(s[1], Length(s)); -end; - -procedure TROSimpleXmlWriter.WriteStartElement(const aElementName: string); -begin - if fFinished then raise EROXmlRcpSerializerException.Create('XmlDocument already finished'); - fElementStack.Add(aElementName); - WriteRawString('<' + aElementName + '>'); -end; - -procedure TROSimpleXmlWriter.WriteString(const aValue: WideString); -var - lInputValue: UTF8String; - lCurrPos, i: Integer; - lRealString: UTF8String; -begin - if fFinished then raise EROXmlRcpSerializerException.Create('XmlDocument already finished'); - if fElementStack.Count = 0 then raise EROXmlRcpSerializerException.Create('Root element missing'); - lInputValue := UTF8Encode(aValue); - SetLength(lRealString, Length(lInputValue) + 16); - lCurrPos := 0; - for i := 1 to length(lInputValue) do - begin - case lInputValue[i] of - '<': - begin - if lCurrPos + 4 > Length(lRealString) then - SetLength(lRealString, lCurrPos + 16 + 4); - lRealString[lCurrPos + 1] := '&'; - lRealString[lCurrPos + 2] := 'l'; - lRealString[lCurrPos + 3] := 't'; - lRealString[lCurrPos + 4] := ';'; - inc(lCurrPos, 4); - end; - '>': - begin - if lCurrPos + 4 > Length(lRealString) then - SetLength(lRealString, lCurrPos + 16 + 4); - lRealString[lCurrPos + 1] := '&'; - lRealString[lCurrPos + 2] := 'g'; - lRealString[lCurrPos + 3] := 't'; - lRealString[lCurrPos + 4] := ';'; - inc(lCurrPos, 4); - end; - '&': - begin - if lCurrPos + 5 > Length(lRealString) then - SetLength(lRealString, lCurrPos + 16 + 5); - lRealString[lCurrPos + 1] := '&'; - lRealString[lCurrPos + 2] := 'a'; - lRealString[lCurrPos + 3] := 'm'; - lRealString[lCurrPos + 4] := 'p'; - lRealString[lCurrPos + 5] := ';'; - inc(lCurrPos, 5); - end; - '"': - begin - if lCurrPos + 6 > Length(lRealString) then - SetLength(lRealString, lCurrPos + 16 + 6); - lRealString[lCurrPos + 1] := '&'; - lRealString[lCurrPos + 2] := 'q'; - lRealString[lCurrPos + 3] := 'u'; - lRealString[lCurrPos + 4] := 'o'; - lRealString[lCurrPos + 5] := 't'; - lRealString[lCurrPos + 6] := ';'; - inc(lCurrPos, 6); - end; - else - begin - if lCurrPos + 1 > Length(lRealString) then - SetLength(lRealString, lCurrPos + 16 + 1); - Inc(lCurrPos); - lRealString[lCurrPos] := lInputValue[i]; - end; - end; - end; - SetLength(lRealString, lCurrPos); - WriteRawString(lRealString); -end; -initialization - RegisterMessageClass(TROXmlRpcMessage); -finalization - UnregisterMessageClass(TROXmlRpcMessage); -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.dfm deleted file mode 100644 index df6f535..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.dfm +++ /dev/null @@ -1,107 +0,0 @@ -object PleaseWaitForm: TPleaseWaitForm - Left = 336 - Top = 344 - BorderIcons = [] - BorderStyle = bsDialog - Caption = 'RemObjects SDK' - ClientHeight = 41 - ClientWidth = 542 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnHide = FormHide - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object lbl_Caption: TLabel - Left = 64 - Top = 14 - Width = 66 - Height = 13 - Caption = 'Please wait...' - end - object img_Logo: TImage - Left = 2 - Top = 0 - Width = 32 - Height = 32 - AutoSize = True - Center = True - Picture.Data = { - 07544269746D617080080000424D800800000000000036040000280000002000 - 00002000000001000800010000004A040000C21E0000C21E0000000000000000 - 000000000000000080000080000000808000800000008000800080800000C0C0 - C000C0DCC000F0CAA6000000000001010100030303000606060005050F000808 - 08000B0B0B000C0D0D000D0D0D00101010001212120014141400151515001717 - 17001A1A1A001C1C1C001F1F1F0004042100161620001D1E2800181A2F000707 - 370005053E00101037001B1D32001F202B002021210021212100242424002626 - 2600292929002B2B2B002E2E2E0026283300282A3500282A3600303030003333 - 3300323434003535350036383800383838003A3A3A003C3C3C003F3F3F000D0E - 4800171B4500151A4E00181D490010155D00151B5B00151B5C001D2141001D21 - 42001C245D00262940002126480023294B0031374F00393C48003C3F4B002B33 - 5900333952000404650005066F0008096A000E14660001017500090F75000404 - 7800121F790015206E001E2C73001A287A00232F6C0029356800323B6100343E - 630024327000283776002E3D7B003E4141003E445B003A4675003D4977004141 - 410042454500434545004444440046464600494949004B4B4B004A4C4C004E4E - 4E004144500043465200484B5700515151005052520053535300565656005858 - 58005B5B5B005A5D5D005D5D5D005D5E5E00434C6D005B5E6700606060006262 - 620062646400656565006767670068696900686A6A006B6B6B00616778007171 - 710070727200727676007D7F7F0001018700010188000C188300000090000000 - 9A0000029F000B1D970008199C00172A8A00182A89000F2091001D369B001F39 - 9E000005A5000009AB000411A4000618A6000A1FA700000CB100000FB8000213 - B400071EB1000216BA000012BE00132FAA000B24B1000C27B6001131BB00233F - AB00374A8D002A4094002E4395002D439600344A99002D46A3003851A7003C54 - A8002443B8002F4DBC00485A950055669C0060688200566AA7000015C4000018 - CA00001BD000001ED7000520C1000E33CB001538C200183BC300153BCE000022 - DD00062FDE000028E900032FEA00123EE700002BF000002EF6000332F0000A3A - F2000F3EF3000032FC000336FE00073AFF000C3EFF00224ADD00385FDF003C62 - DF001442F3001847F3001042FF001547FF001A4BFF001E4FFF00204AE8002853 - E9002354FF002758FF002C5CFF003A63EA003E67EA003C68F4003161FF003565 - FF003A69FF003F6EFF004A67C200496EE1004C72E1004570F5004974F5004372 - FF007B8080007C81810080828200828484009095950093979700959B9B009CA1 - A1009EA4A400A1A7A700A2A8A800A4A9A900A6ACAC00AEB5B500B0B6B600B1B8 - B800B3BABA00B6BDBD00B7BEBE00BAC2C200BDC4C400C6CECE00F0FBFF00A4A0 - A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF - FF000AF5000DEFE0612414131210246081EDF50009F5000008F50011E8661A19 - 181716141312100F0D0C30E6F50107F5000006F50015F4712726251A19181716 - 141312100F0D0C0B5BF3F59405F5000005F50017E93329282726251A3B919088 - 8784491F0F0D0C0B11EAF50004F5000004F5000FE42F2E2A2928272625389591 - 908887000287000883200D0C0B00E1F503F5000003F50011EB33312F2E2A2928 - 27263D96959190888700038700074D0E0C0B00EAF51902F5000002F50013F162 - 3433312F2E2A2928273E979695919088871A03870008861B0C0B11F3F5F50000 - 02F500147836353433312F2E2A2928273E3D224C9190888703870007860E0C0B - 5BF5F5F500000017F5EC625F36353433312F2E2A29282726251D959190888720 - 038700064D0D0C0BE6F500000018F57C63625F36353433312F2E2A2928272685 - 96959190888703870005200D0C30F50000000019F2656463625F57B4BE9E472F - 2E2A292851AE9A9695919088871B02870005830F0D0CEDF50000001AE5676564 - 6368C0C3C2C1B8312F2E2A2940AFAE9A969591908887028700041F0F0D810000 - 0020806B6765645DCAC4C3C2C155312F2E2A2C8DAFAE9A96959190374F874910 - 0F3200000020736D6B67655ECBCAC4C3C24833312F2E2A292BAF933C92954E17 - 218784121015000000206F6E6D6B6765C5CBCAC4B5353433312F2E2A41B05026 - 23391E181C4B4A13121000000020706F6E6D6B676AA4A5A35F3635343331548B - 9CB1942726251A191817161413120000002072706F6E6D6B67656463625F3635 - 3444BCB98C9C43282726251A191817161413000000207672706F6E6D6B676564 - 63625F363559BD9B2F2E2A29282726251A1918171614000000207B7672706F6E - 6D6B67656463625F3635B3BA582F2E2A2942898A3A1A19181724000000208277 - 7672706F6E6D6B676564695C5F368FC1BA312F2E2AB2B0AF99231A1918610000 - 0020E779777672706F6E6D6B6774CECBA8A1C3C28E33312F2EB7B1B0AF3F251A - 19E000000020F37A79777675D5D7AA6D6BA6CDCCCBCAC45A353433312F9DB7B1 - 982726251AEF00000020F5E27A7977DBD9D8D36E6DA7D0CDCCCBCA9F46353433 - 312F52532D28272666F500000020F5EE7B7A79DCDFD9D8C7C6D2D1D0CDCCCBCA - C4B6353433312F2E2A292827E8F5000002F5001EE37B7A7EDEDFD9D8D7D6D2D1 - D0CDCCCBCABB36353433312F2E2A296CF5F5000002F5001EF37F7B7AACDEDFD9 - D8D7D6D2D1D0CDCCCBA25F46453433312F2E33F0F5F5000003F5001BEE7D7B7A - 7EDCDFD9D8D7D6D2D1D0CDCCC9A2C0BF563433312FE9F52802F5000004F50019 - EB7D7B7A79ADDDD9D8D7D6D2D1D0CDCCCBC8A136353433E4F52E03F5000005F5 - 0017EE7F7B7A7977ABDAD4D7D6D2D1CFA9A063625F3662EBF53504F5000006F5 - 0015F3E37B7A79777672706F6E6D6B676564636278F1F50005F5000008F50011 - EEE27A79777672706F6E6D6B67657CECF52E07F500000AF5000DF3E7827B7672 - 706F7380E5F2F5D209F50001} - Transparent = True - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.pas deleted file mode 100644 index 559a97b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uRoPleaseWaitForm.pas +++ /dev/null @@ -1,106 +0,0 @@ -unit uROPleaseWaitForm; - -{----------------------------------------------------------------------------} -{ RemObjects SDK Library - Delphi IDE Integration } -{ } -{ compiler: Delphi 5 and up, Kylix 2 and up } -{ platform: Win32, Linux } -{ } -{ (c)opyright RemObjects Software. all rights reserved. } -{ } -{ Using this code requires a valid license of the RemObjects SDK } -{ which can be obtained at http://www.remobjects.com. } -{----------------------------------------------------------------------------} - -{$I RemObjects.inc} - -interface - -uses - {$IFDEF MSWINDOWS}Windows,{$ELSE}Libc,{$ENDIF} Messages, SysUtils, Classes, Graphics, Controls, Forms, - {$IFDEF FPC} LResources, lmessages,{$ENDIF} - Dialogs, StdCtrls, ExtCtrls; - -type - TPleaseWaitForm = class(TForm) - lbl_Caption: TLabel; - img_Logo: TImage; - procedure FormShow(Sender: TObject); - procedure FormHide(Sender: TObject); - private - fWindowList:pointer; - public - constructor Create(iOwner: TComponent; const iCaption:string=''; const iHeader:string=''; iBitmap:TBitmap=nil; iFreeBitmap:boolean=false); reintroduce; - procedure Show(const iCaption:string=''); reintroduce; - procedure Hide; reintroduce; - end; - -var - PleaseWaitForm: TPleaseWaitForm; - -implementation - -{$IFNDEF FPC} - {$R *.dfm} -{$ENDIF} - -{ TPleaseWaitForm } - -constructor TPleaseWaitForm.Create(iOwner: TComponent; const iCaption:string=''; const iHeader:string=''; iBitmap:TBitmap=nil; iFreeBitmap:boolean=false); -begin - inherited Create(iOwner); - if iHeader <> '' then Caption := iHeader; - lbl_Caption.Caption := iCaption; - - if Assigned(iBitmap) then begin - img_Logo.Picture.Assign(iBitmap); - if iFreeBitmap then iBitmap.Free(); - end; - - img_Logo.Top := (ClientHeight-img_Logo.Height) div 2; - img_Logo.Left := img_Logo.Top; - lbl_Caption.Left := img_Logo.Width+ (img_Logo.Left*2); - ClientWidth := lbl_Caption.Left+lbl_Caption.Width+img_Logo.Left; -end; - -procedure TPleaseWaitForm.Show(const iCaption:string=''); -begin - if iCaption <> '' then begin - lbl_Caption.Caption := iCaption; - ClientWidth := lbl_Caption.Left+lbl_Caption.Width+8; - end; - inherited Show(); - Application.ProcessMessages(); -end; - -procedure TPleaseWaitForm.Hide; -begin - inherited Hide(); - Application.ProcessMessages(); -end; - -procedure TPleaseWaitForm.FormShow(Sender: TObject); -begin -{$IFNDEF LINUX} - SendMessage(Handle, CM_ACTIVATE, 0, 0); -{$ENDIF} -{$IFNDEF FPC} - fWindowList := DisableTaskWindows(0); -{$ENDIF FPC} -end; - -procedure TPleaseWaitForm.FormHide(Sender: TObject); -begin -{$IFNDEF LINUX} - SendMessage(Handle, CM_DEACTIVATE, 0, 0); -{$ENDIF} -{$IFNDEF FPC} - EnableTaskWindows(fWindowList); -{$ENDIF FPC} -end; - -initialization -{$IFDEF FPC} - {$I uROPleaseWaitForm.lrs} -{$ENDIF} -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/$svclibname.rodl b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/$svclibname.rodl deleted file mode 100644 index 08a3a3a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/$svclibname.rodl +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/Config.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/Config.ini deleted file mode 100644 index 305a6ad..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/Config.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Project Generation] -SvcLibName=NewLibrary -SvcName=NewService -PrjName=NewProject -PrjDir= -CreateClientAndGroup=TRUE diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$LIBRARYNAME.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$LIBRARYNAME.RODL deleted file mode 100644 index 4de5a25..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$LIBRARYNAME.RODL +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.dpr deleted file mode 100644 index 552810c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.dpr +++ /dev/null @@ -1,23 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$LIBRARYNAME.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - Forms, - MidasLib, - fMainForm in 'fMainForm.pas' {Form1}, - $SERVICENAME_Impl in '$SERVICENAME_Impl.pas' {$SERVICENAME: TDARemoteService}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDataModule}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.dfm deleted file mode 100644 index 78e0cb2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object $SERVICENAME: T$SERVICENAME - AcquireConnection = True - OldCreateOrder = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - SessionManager = ServerDataModule.SessionManager - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABin2DataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = ServerDataModule.ConnectionManager - DataDictionary = ServerDataModule.DataDictionary - Datasets = <> - Commands = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.pas deleted file mode 100644 index 1b2a0a6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/$SERVICENAME_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit $SERVICENAME_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABin2DataStreamer, uDAInterfaces, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { T$SERVICENAME } - T$SERVICENAME = class(TDataAbstractService, I$SERVICENAME) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - protected - { I$SERVICENAME methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} $LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_$SERVICENAME(out anInstance: IUnknown); -begin - anInstance := T$SERVICENAME.Create(nil); -end; - -initialization - TROClassFactory.Create('$SERVICENAME', Create_$SERVICENAME, T$SERVICENAME_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Icon.ico deleted file mode 100644 index 18b790e..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Info.ini deleted file mode 100644 index d84647a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/Info.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Information] -Name=Local Application -Description=Client and Server in one application -FixedServer=TROLocalServer -AllowClient=0 -Wizard=DAGuideWizard-Local \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.dfm deleted file mode 100644 index 92d84df..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.dfm +++ /dev/null @@ -1,35 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = False - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object ROMessage: TRO$MSGCLSNAME - Left = 40 - Top = 8 - end - object ROChannel: TROLocalChannel - ServerLocators = <> - DispatchOptions = [] - ServerChannel = ServerDataModule.ROServer - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = '$SERVICENAME' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - Left = 40 - Top = 184 - DataStreamer = DataStreamer - RemoteService = RemoteService - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.pas deleted file mode 100644 index 190417f..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fClientDataModule.pas +++ /dev/null @@ -1,32 +0,0 @@ -unit fClientDataModule; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, uROLocalChannel, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, uDABin2DataStreamer, uDARemoteDataAdapter; - -type - TClientDataModule = class(TDataModule) - ROMessage: TRO$MSGCLSNAME; - ROChannel: TROLocalChannel; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -uses fServerDataModule; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.dfm deleted file mode 100644 index d63ab18..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.dfm +++ /dev/null @@ -1,24 +0,0 @@ -object Form1: TForm1 - Left = 192 - Top = 114 - Width = 236 - Height = 99 - Caption = 'Data Abstract Local Application' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - ApplicationType = atClient - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.pas deleted file mode 100644 index 0c2d4a2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fMainForm.pas +++ /dev/null @@ -1,28 +0,0 @@ -unit fMainForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uDAPoweredByDataAbstractButton; - -type - TForm1 = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -uses - fClientDataModule; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.dfm deleted file mode 100644 index e3f1196..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object ROMessage: TRO$MSGCLSNAME - Left = 32 - Top = 8 - end - object ROServer: TROLocalServer - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = <> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.pas deleted file mode 100644 index 6e5e590..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/LOCAL/fServerDataModule.pas +++ /dev/null @@ -1,35 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, uROClient, uROServer, uROLocalServer, - $MESSAGEUNIT, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver; - - -type - TServerDataModule = class(TDataModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TROLocalServer; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$LIBRARYNAME.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$LIBRARYNAME.RODL deleted file mode 100644 index 4de5a25..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$LIBRARYNAME.RODL +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.dpr deleted file mode 100644 index 1c43250..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.dpr +++ /dev/null @@ -1,27 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$LIBRARYNAME.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - fServerForm in 'fServerForm.pas' {ServerForm}, - $SERVICENAME_Impl in '$SERVICENAME_Impl.pas' {$SERVICENAME: TDARemoteService}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('$PRJNAME', '$PRJNAME') then begin - ROService.CreateForm(TServerDataModule, ServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.dfm deleted file mode 100644 index 78e0cb2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object $SERVICENAME: T$SERVICENAME - AcquireConnection = True - OldCreateOrder = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - SessionManager = ServerDataModule.SessionManager - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABin2DataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = ServerDataModule.ConnectionManager - DataDictionary = ServerDataModule.DataDictionary - Datasets = <> - Commands = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.pas deleted file mode 100644 index 5341adc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/$SERVICENAME_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit $SERVICENAME_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABin2DataStreamer, uDAInterfaces, uDADataStreamer, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { T$SERVICENAME } - T$SERVICENAME = class(TDataAbstractService, I$SERVICENAME) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - protected - { I$SERVICENAME methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} $LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_$SERVICENAME(out anInstance: IUnknown); -begin - anInstance := T$SERVICENAME.Create(nil); -end; - -initialization - TROClassFactory.Create('$SERVICENAME', Create_$SERVICENAME, T$SERVICENAME_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Icon.ico deleted file mode 100644 index 017fa49..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Info.ini deleted file mode 100644 index 52dfadc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/Info.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Information] -Name=Combo Server -Description=Data Abstract VCL Based Combo Server -InvalidServers=TROWebBrokerServer,TROLocalServer,TROWinMessageServer -DefaultServer=TROIndyHTTPServer -Wizard=DAGuideWizard \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.dpr deleted file mode 100644 index f1357b8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program $PRJNAMEClient; - -uses - uROComInit, - Forms, - MidasLib, - fClientForm in 'fClientForm.pas' {ClientForm}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.CreateForm(TClientForm, ClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.res deleted file mode 100644 index a8142cb..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEGroup.bpg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEGroup.bpg deleted file mode 100644 index b93564d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/$PRJNAMEGroup.bpg +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = $PRJNAME.exe $PRJNAMEClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -$PRJNAME.exe: $PRJNAME.dpr - $(DCC) - -$PRJNAMEClient.exe: $PRJNAMEClient.dpr - $(DCC) diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.dfm deleted file mode 100644 index e214225..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.dfm +++ /dev/null @@ -1,32 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = True - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object Channel: TRO$CHNCLSNAME - Left = 40 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = '$SERVICENAME' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - Left = 40 - Top = 184 - DataStreamer = DataStreamer - RemoteService = RemoteService - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.pas deleted file mode 100644 index 22ae607..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientDataModule.pas +++ /dev/null @@ -1,30 +0,0 @@ -unit fClientDataModule; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, $CHANNELUNIT, - {Data Abstract:} uDADataTable, uDABin2DataStreamer, uDAInterfaces, uDARemoteDataAdapter; - -type - TClientDataModule = class(TDataModule) - Message: TRO$MSGCLSNAME; - Channel: TRO$CHNCLSNAME; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.dfm deleted file mode 100644 index dd91c0d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.dfm +++ /dev/null @@ -1,17 +0,0 @@ -object ClientForm: TClientForm - Left = 372 - Top = 277 - Width = 334 - Height = 207 - Caption = 'Data Abstract Client' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.pas deleted file mode 100644 index c79fedc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/_Client/fClientForm.pas +++ /dev/null @@ -1,27 +0,0 @@ -unit fClientForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage; - -type - TClientForm = class(TForm) - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientForm: TClientForm; - -implementation - -uses - fClientDataModule; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.dfm deleted file mode 100644 index 12f39a8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TRO$SRVCLSNAME - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - end> - Left = 32 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 32 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = <> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.pas deleted file mode 100644 index 82fe052..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerDataModule.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver; - -type - TServerDataModule = class(TDataModule) - Server: TRO$SRVCLSNAME; - Message: TRO$MSGCLSNAME; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -procedure TServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.dfm deleted file mode 100644 index 4cca111..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Data Abstract Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.pas deleted file mode 100644 index 08fb16d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXE/fServerForm.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton; - -type - TServerForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$LIBRARYNAME.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$LIBRARYNAME.RODL deleted file mode 100644 index 2d14cdf..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$LIBRARYNAME.RODL +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.dpr deleted file mode 100644 index 1c43250..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.dpr +++ /dev/null @@ -1,27 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$LIBRARYNAME.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - fServerForm in 'fServerForm.pas' {ServerForm}, - $SERVICENAME_Impl in '$SERVICENAME_Impl.pas' {$SERVICENAME: TDARemoteService}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('$PRJNAME', '$PRJNAME') then begin - ROService.CreateForm(TServerDataModule, ServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.dfm deleted file mode 100644 index df335a5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object $SERVICENAME: T$SERVICENAME - AcquireConnection = True - OldCreateOrder = True - ServiceSchema = Schema - ServiceAdapter = DataStreamer - SessionManager = ServerDataModule.SessionManager - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABin2DataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = ServerDataModule.ConnectionManager - DataDictionary = ServerDataModule.DataDictionary - Datasets = <> - Commands = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.pas deleted file mode 100644 index 77dcc38..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/$SERVICENAME_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit $SERVICENAME_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABin2DataStreamer, uDAInterfaces, - {Ancestor Implementation:} DARemoteService_Impl, - {Used RODLs:} DataAbstract3_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { T$SERVICENAME } - T$SERVICENAME = class(TDARemoteService, I$SERVICENAME) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - protected - { I$SERVICENAME methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} $LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_$SERVICENAME(out anInstance: IUnknown); -begin - anInstance := T$SERVICENAME.Create(nil); -end; - -initialization - TROClassFactory.Create('$SERVICENAME', Create_$SERVICENAME, T$SERVICENAME_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Icon.ico deleted file mode 100644 index 84d303f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Info.ini deleted file mode 100644 index 352a2ad..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=v3.0 Legacy Server -Description=Data Abstract Server based on the legacy v3.0 interface -InvalidServers=TROWebBrokerServer,TROLocalServer,TROWinMessageServer -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.dpr deleted file mode 100644 index f1357b8..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program $PRJNAMEClient; - -uses - uROComInit, - Forms, - MidasLib, - fClientForm in 'fClientForm.pas' {ClientForm}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDAClientDataModule}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.CreateForm(TClientForm, ClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.res deleted file mode 100644 index a8142cb..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEGroup.bpg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEGroup.bpg deleted file mode 100644 index b93564d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/$PRJNAMEGroup.bpg +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = $PRJNAME.exe $PRJNAMEClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -$PRJNAME.exe: $PRJNAME.dpr - $(DCC) - -$PRJNAMEClient.exe: $PRJNAMEClient.dpr - $(DCC) diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.dfm deleted file mode 100644 index 70b97fb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.dfm +++ /dev/null @@ -1,120 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = True - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object Channel: TRO$CHNCLSNAME - Left = 40 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = '$SERVICENAME' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - GetSchemaCall.RemoteService = RemoteService - GetSchemaCall.MethodName = 'GetDatasetSchema' - GetSchemaCall.Params = < - item - Name = 'aFilter' - DataType = rtString - Flag = fIn - end - item - Name = 'aDatasetName' - DataType = rtString - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - GetSchemaCall.Default = False - GetSchemaCall.IncomingSchemaParameter = 'Result' - GetSchemaCall.OutgoingFilterParameter = 'aDatasetName' - GetDataCall.RemoteService = RemoteService - GetDataCall.MethodName = 'GetDatasetData' - GetDataCall.Params = < - item - Name = 'DatasetName' - DataType = rtString - Flag = fIn - end - item - Name = 'Params' - DataType = rtString - Flag = fIn - end - item - Name = 'IncludeSchema' - DataType = rtBoolean - Flag = fIn - end - item - Name = 'MaxRecords' - DataType = rtInteger - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - GetDataCall.Default = False - GetDataCall.OutgoingTableNamesParameter = 'DatasetName' - GetDataCall.OutgoingTableRequestInfosParameter = 'aTableRequestInfoArray' - GetDataCall.IncomingDataParameter = 'Result' - GetDataCall.OutgoingParamsParameter = 'Params' - GetDataCall.OutgoingIncludeSchemaParameter = 'IncludeSchema' - GetDataCall.OutgoingMaxRecordsParameter = 'MaxRecords' - UpdateDataCall.RemoteService = RemoteService - UpdateDataCall.MethodName = 'UpdateData' - UpdateDataCall.Params = < - item - Name = 'Delta' - DataType = rtBinary - Flag = fIn - end - item - Name = 'Result' - DataType = rtBinary - Flag = fResult - end> - UpdateDataCall.Default = False - UpdateDataCall.OutgoingDeltaParameter = 'Delta' - UpdateDataCall.IncomingDeltaParameter = 'Result' - GetScriptsCall.RemoteService = RemoteService - GetScriptsCall.MethodName = 'GetDatasetScripts' - GetScriptsCall.Params = < - item - Name = 'DatasetNames' - DataType = rtString - Flag = fIn - end - item - Name = 'Result' - DataType = rtString - Flag = fResult - end> - GetScriptsCall.Default = False - GetScriptsCall.OutgoingTableNamesParameter = 'DatasetNames' - GetScriptsCall.IncomingScriptParameter = 'Result' - Left = 40 - Top = 184 - DataStreamer = DataStreamer - RemoteService = RemoteService - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.pas deleted file mode 100644 index 22ae607..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientDataModule.pas +++ /dev/null @@ -1,30 +0,0 @@ -unit fClientDataModule; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, $CHANNELUNIT, - {Data Abstract:} uDADataTable, uDABin2DataStreamer, uDAInterfaces, uDARemoteDataAdapter; - -type - TClientDataModule = class(TDataModule) - Message: TRO$MSGCLSNAME; - Channel: TRO$CHNCLSNAME; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.dfm deleted file mode 100644 index dd91c0d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.dfm +++ /dev/null @@ -1,17 +0,0 @@ -object ClientForm: TClientForm - Left = 372 - Top = 277 - Width = 334 - Height = 207 - Caption = 'Data Abstract Client' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.pas deleted file mode 100644 index c79fedc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/_CLIENT/fClientForm.pas +++ /dev/null @@ -1,27 +0,0 @@ -unit fClientForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage; - -type - TClientForm = class(TForm) - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientForm: TClientForm; - -implementation - -uses - fClientDataModule; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.dfm deleted file mode 100644 index 2cdf891..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TRO$SRVCLSNAME - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - end> - Left = 32 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = <> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.pas deleted file mode 100644 index 82fe052..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerDataModule.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver; - -type - TServerDataModule = class(TDataModule) - Server: TRO$SRVCLSNAME; - Message: TRO$MSGCLSNAME; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -procedure TServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.dfm deleted file mode 100644 index 4cca111..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Data Abstract Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.pas deleted file mode 100644 index 08fb16d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLEXEv3/fServerForm.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton; - -type - TServerForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$LIBRARYNAME.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$LIBRARYNAME.RODL deleted file mode 100644 index 92ae093..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$LIBRARYNAME.RODL +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.dpr deleted file mode 100644 index a379b08..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.dpr +++ /dev/null @@ -1,28 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$LIBRARYNAME.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - fServerForm in 'fServerForm.pas' {ServerForm}, - $SERVICENAME_Impl in '$SERVICENAME_Impl.pas' {$SERVICENAME: TDARemoteService}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}, - LoginService_Impl in 'LoginService_Impl.pas' {LoginService: TSimpleLoginService}; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('$PRJNAME', '$PRJNAME') then begin - ROService.CreateForm(TServerDataModule, ServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.dfm deleted file mode 100644 index a0a5f35..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.dfm +++ /dev/null @@ -1,24 +0,0 @@ -object $SERVICENAME: T$SERVICENAME - AcquireConnection = True - OldCreateOrder = True - RequiresSession = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - SessionManager = ServerDataModule.SessionManager - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABin2DataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = ServerDataModule.ConnectionManager - DataDictionary = ServerDataModule.DataDictionary - Datasets = <> - Commands = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.pas deleted file mode 100644 index 5142cdc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/$SERVICENAME_Impl.pas +++ /dev/null @@ -1,37 +0,0 @@ -unit $SERVICENAME_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABin2DataStreamer, uDAInterfaces, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { T$SERVICENAME } - T$SERVICENAME = class(TDataAbstractService, I$SERVICENAME) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - private - protected - { I$SERVICENAME methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} $LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_$SERVICENAME(out anInstance: IUnknown); -begin - anInstance := T$SERVICENAME.Create(nil); -end; - -initialization - TROClassFactory.Create('$SERVICENAME', Create_$SERVICENAME, T$SERVICENAME_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Icon.ico deleted file mode 100644 index 34b76bf..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Info.ini deleted file mode 100644 index 44d08cb..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/Info.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Information] -Name=Simple Login Server -Description=Data Abstract VCL Based Combo Server with Simple Login -InvalidServers=TROWebBrokerServer,TROLocalServer,TROWinMessageServer -DefaultServer=TROIndyHTTPServer -Wizard=DAGuideWizard \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.dfm deleted file mode 100644 index 19a75f0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.dfm +++ /dev/null @@ -1,10 +0,0 @@ -object LoginService: TLoginService - OldCreateOrder = True - SessionManager = ServerDataModule.SessionManager - OnLogout = LoginServiceLogout - OnLogin = LoginServiceLogin - Left = 200 - Top = 200 - Height = 300 - Width = 300 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.pas deleted file mode 100644 index 08e88e6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/LoginService_Impl.pas +++ /dev/null @@ -1,88 +0,0 @@ -unit LoginService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} SimpleLoginService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { TLoginService } - TLoginService = class(TSimpleLoginService, ILoginService) - procedure LoginServiceLogout(Sender: TObject); - procedure LoginServiceLogin(Sender: TObject; aUserID, - aPassword: String; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); - private - protected - { ILoginService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:}$LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_LoginService(out anInstance : IUnknown); -begin - anInstance := TLoginService.Create(nil); -end; - -{ LoginService } - -procedure TLoginService.LoginServiceLogin(Sender: TObject; aUserID, - aPassword: String; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); -begin - // This is where your Login logic should be implemented. A default implementation has been added - // for you. - - // If you application does not require sending back a UserInfo structure, you can set - // aUserInfo to nil, indtead of returning a new instance. - - // If you require a more complex UserInfo structure (i.e. MyCompanyUserInfo), simply add - // a new struct to the file WindowsFormsServer1.RODL and set its ancestor to UserInfo. You will then - // be able to marshal your new custom class back to the client by reassigning the aEA.UserInfo property. - - // myInfo = new MyCompanyUserInfo(); - // myInfo.City = "London"; - // myInfo.Address = "213 Smith Road"; - // myInfo.Age = 32; - // aUserInfo = myInfo; - - aLoginSuccessful := aUserID = aPassword; - - if aLoginSuccessful then begin - aUserInfo := UserInfo.Create; - aUserInfo.SessionID := GuidToString(ClientID); - aUserInfo.UserID := aUserID; - - Session['UserID'] := aUserID; - end - else begin - DestroySession; - end; -end; - -procedure TLoginService.LoginServiceLogout(Sender: TObject); -begin - DestroySession; -end; - -initialization - TROClassFactory.Create('LoginService', Create_LoginService, TLoginService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.dpr deleted file mode 100644 index 82934b3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program $PRJNAMEClient; - -uses - uROComInit, - Forms, - MidasLib, - fClientForm in 'fClientForm.pas' {ClientForm}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDAClientDataModule}, - fLoginForm in 'fLoginForm.pas' {LoginForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.CreateForm(TClientForm, ClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.res deleted file mode 100644 index a8142cb..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg deleted file mode 100644 index b93564d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = $PRJNAME.exe $PRJNAMEClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -$PRJNAME.exe: $PRJNAME.dpr - $(DCC) - -$PRJNAMEClient.exe: $PRJNAMEClient.dpr - $(DCC) diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.dfm deleted file mode 100644 index e214225..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.dfm +++ /dev/null @@ -1,32 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = True - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object Channel: TRO$CHNCLSNAME - Left = 40 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = '$SERVICENAME' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - Left = 40 - Top = 184 - DataStreamer = DataStreamer - RemoteService = RemoteService - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.pas deleted file mode 100644 index ce6e532..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientDataModule.pas +++ /dev/null @@ -1,31 +0,0 @@ -unit fClientDataModule; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, $CHANNELUNIT, - {Data Abstract:} uDADataTable, uDABINAdapter, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter; - -type - TClientDataModule = class(TDataModule) - Message: TRO$MSGCLSNAME; - Channel: TRO$CHNCLSNAME; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.dfm deleted file mode 100644 index e487734..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.dfm +++ /dev/null @@ -1,19 +0,0 @@ -object ClientForm: TClientForm - Left = 372 - Top = 277 - Width = 334 - Height = 207 - Caption = 'Data Abstract Client' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnDestroy = FormDestroy - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.pas deleted file mode 100644 index ef777f6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fClientForm.pas +++ /dev/null @@ -1,74 +0,0 @@ -unit fClientForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, - DataAbstract4_Intf, $LIBRARYNAME_Intf; - -type - TClientForm = class(TForm) - procedure FormDestroy(Sender: TObject); - procedure FormShow(Sender: TObject); - private - fLoggedIn: Boolean; - fUserInfo: UserInfo; - fLogin: ILoginService; - protected - function Login: Boolean; - procedure Logout; - public - { Public declarations } - end; - -var - ClientForm: TClientForm; - -implementation - -uses - fLoginForm, fClientDataModule; - -{$R *.dfm} - -procedure TClientForm.FormShow(Sender: TObject); -begin - fLogin := CoLoginService.Create(ClientDataModule.Message, ClientDataModule.Channel); - if not Login then - Application.Terminate; -end; - -procedure TClientForm.FormDestroy(Sender: TObject); -begin - Logout; -end; - -function TClientForm.Login: Boolean; -var - fLoginForm: TLoginForm; -begin - fLoginForm := TLoginForm.Create(nil); - try - FreeAndNil(fUserInfo); - while fLoginForm.ShowModal = mrOk do begin - fLoggedIn := fLogin.Login(fLoginForm.edUsername.Text, - fLoginForm.edPassword.Text, fUserInfo); - Result := fLoggedIn; - if Result then exit; - end; - Result := False; - finally - fLoginForm.Free; - end; -end; - -procedure TClientForm.Logout; -begin - if fLoggedIn then begin - fLogin.Logout(); - fLoggedIn := false; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.dfm deleted file mode 100644 index f87edcd..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.dfm +++ /dev/null @@ -1,74 +0,0 @@ -object LoginForm: TLoginForm - Left = 408 - Top = 136 - ActiveControl = edUsername - BorderStyle = bsDialog - Caption = 'Login' - ClientHeight = 101 - ClientWidth = 374 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poMainFormCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 15 - Width = 56 - Height = 13 - Caption = '&User Name:' - FocusControl = edUsername - end - object Label2: TLabel - Left = 8 - Top = 42 - Width = 50 - Height = 13 - Caption = '&Password:' - FocusControl = edPassword - end - object edUsername: TEdit - Left = 80 - Top = 12 - Width = 286 - Height = 21 - TabOrder = 0 - OnChange = edPasswordChange - end - object edPassword: TEdit - Left = 80 - Top = 39 - Width = 286 - Height = 21 - PasswordChar = '*' - TabOrder = 1 - OnChange = edPasswordChange - end - object bOk: TButton - Left = 210 - Top = 68 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - ModalResult = 1 - TabOrder = 2 - end - object bCancel: TButton - Left = 291 - Top = 68 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 3 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.pas deleted file mode 100644 index 67e0279..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/_CLIENT/fLoginForm.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit fLoginForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls; - -type - TLoginForm = class(TForm) - Label1: TLabel; - Label2: TLabel; - edUsername: TEdit; - edPassword: TEdit; - bOk: TButton; - bCancel: TButton; - procedure edPasswordChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - procedure ValidateInput; - { Private declarations } - public - { Public declarations } - end; - -implementation - -{$R *.dfm} - -procedure TLoginForm.edPasswordChange(Sender: TObject); -begin - ValidateInput; -end; - -procedure TLoginForm.FormCreate(Sender: TObject); -begin - ValidateInput; -end; - -procedure TLoginForm.ValidateInput; -begin - bOk.Enabled := (edUsername.Text <> '') and (edPassword.Text <> ''); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.dfm deleted file mode 100644 index 2cdf891..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TRO$SRVCLSNAME - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - end> - Left = 32 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = <> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.pas deleted file mode 100644 index 82fe052..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerDataModule.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver; - -type - TServerDataModule = class(TDataModule) - Server: TRO$SRVCLSNAME; - Message: TRO$MSGCLSNAME; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -procedure TServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.dfm deleted file mode 100644 index 4cca111..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Data Abstract Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.pas deleted file mode 100644 index 08fb16d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLLOGINEXE/fServerForm.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton; - -type - TServerForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$LIBRARYNAME.RODL b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$LIBRARYNAME.RODL deleted file mode 100644 index e8f9f78..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$LIBRARYNAME.RODL +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.dpr deleted file mode 100644 index a379b08..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.dpr +++ /dev/null @@ -1,28 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$LIBRARYNAME.RODL} // RemObjects SDK: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - fServerForm in 'fServerForm.pas' {ServerForm}, - $SERVICENAME_Impl in '$SERVICENAME_Impl.pas' {$SERVICENAME: TDARemoteService}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}, - LoginService_Impl in 'LoginService_Impl.pas' {LoginService: TSimpleLoginService}; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('$PRJNAME', '$PRJNAME') then begin - ROService.CreateForm(TServerDataModule, ServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.dfm deleted file mode 100644 index 8c5db56..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object $SERVICENAME: T$SERVICENAME - AcquireConnection = True - OldCreateOrder = True - RequiresSession = True - ServiceSchema = Schema - ServiceDataStreamer = DataStreamer - SessionManager = ServerDataModule.SessionManager - BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection - Left = 357 - Top = 213 - Height = 212 - Width = 216 - object DataStreamer: TDABin2DataStreamer - Left = 32 - Top = 8 - end - object Schema: TDASchema - ConnectionManager = ServerDataModule.ConnectionManager - DataDictionary = ServerDataModule.DataDictionary - Datasets = <> - Commands = <> - Left = 32 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.pas deleted file mode 100644 index 9634a65..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/$SERVICENAME_Impl.pas +++ /dev/null @@ -1,45 +0,0 @@ -unit $SERVICENAME_Impl; - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Data Abstract:} uDAClasses, uDADataTable, uDABin2DataStreamer, uDAInterfaces, - {Ancestor Implementation:} DataAbstractService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { T$SERVICENAME } - T$SERVICENAME = class(TDataAbstractService, I$SERVICENAME) - DataStreamer: TDABin2DataStreamer; - Schema: TDASchema; - procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); - private - protected - { I$SERVICENAME methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:} $LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_$SERVICENAME(out anInstance: IUnknown); -begin - anInstance := T$SERVICENAME.Create(nil); -end; - -{ T$SERVICENAME } - -procedure T$SERVICENAME.DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); -begin - aConnectionName := Session['ConnectionName']; -end; - -initialization - TROClassFactory.Create('$SERVICENAME', Create_$SERVICENAME, T$SERVICENAME_Invoker); -finalization -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Icon.ico deleted file mode 100644 index 34b76bf..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Info.ini deleted file mode 100644 index 26cfb42..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/Info.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Information] -Name=MultiDb Login Server -Description=Data Abstract VCL Based Combo Server with MultiDb Login -InvalidServers=TROWebBrokerServer,TROLocalServer,TROWinMessageServer -DefaultServer=TROIndyHTTPServer -Wizard=DAGuideWizard \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.dfm deleted file mode 100644 index 19a75f0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.dfm +++ /dev/null @@ -1,10 +0,0 @@ -object LoginService: TLoginService - OldCreateOrder = True - SessionManager = ServerDataModule.SessionManager - OnLogout = LoginServiceLogout - OnLogin = LoginServiceLogin - Left = 200 - Top = 200 - Height = 300 - Width = 300 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.pas deleted file mode 100644 index 81f0cf0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/LoginService_Impl.pas +++ /dev/null @@ -1,91 +0,0 @@ -unit LoginService_Impl; - -{----------------------------------------------------------------------------} -{ This unit was automatically generated by the RemObjects SDK after reading } -{ the RODL file associated with this project . } -{ } -{ This is where you are supposed to code the implementation of your objects. } -{----------------------------------------------------------------------------} - -interface - -uses - {vcl:} Classes, SysUtils, - {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, - {Ancestor Implementation:} MultiDbLoginService_Impl, - {Used RODLs:} DataAbstract4_Intf, - {Generated:} $LIBRARYNAME_Intf; - -type - { TLoginService } - TLoginService = class(TMultiDbLoginService, ILoginService) - procedure LoginServiceLogout(Sender: TObject); - procedure LoginServiceLogin(Sender: TObject; aUserID, - aPassword: String; aConnectionName: String; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); - private - protected - { ILoginService methods } - end; - -implementation - -{$R *.dfm} -uses - {Generated:}$LIBRARYNAME_Invk, fServerDataModule; - -procedure Create_LoginService(out anInstance : IUnknown); -begin - anInstance := TLoginService.Create(nil); -end; - -{ LoginService } - -procedure TLoginService.LoginServiceLogin(Sender: TObject; aUserID, - aPassword: String; aConnectionName: String; out aUserInfo: UserInfo; - var aLoginSuccessful: Boolean); -begin - // This is where your Login logic should be implemented. A default implementation has been added - // for you. - - // If you application does not require sending back a UserInfo structure, you can set - // aUserInfo to nil, indtead of returning a new instance. - - // If you require a more complex UserInfo structure (i.e. MyCompanyUserInfo), simply add - // a new struct to the file WindowsFormsServer1.RODL and set its ancestor to UserInfo. You will then - // be able to marshal your new custom class back to the client by reassigning the aEA.UserInfo property. - - // myInfo = new MyCompanyUserInfo(); - // myInfo.City = "London"; - // myInfo.Address = "213 Smith Road"; - // myInfo.Age = 32; - // aUserInfo = myInfo; - - aLoginSuccessful := aUserID = aPassword; - - if aLoginSuccessful then begin - aUserInfo := UserInfo.Create; - aUserInfo.SessionID := GuidToString(ClientID); - aUserInfo.UserID := aUserID; - - Session['UserID'] := aUserID; - - // store connection name for use in data service - Session['ConnectionName'] := aConnectionName; - end - else begin - DestroySession; - end; -end; - -procedure TLoginService.LoginServiceLogout(Sender: TObject); -begin - DestroySession; -end; - -initialization - TROClassFactory.Create('LoginService', Create_LoginService, TLoginService_Invoker); - -finalization - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.dpr deleted file mode 100644 index 82934b3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.dpr +++ /dev/null @@ -1,18 +0,0 @@ -program $PRJNAMEClient; - -uses - uROComInit, - Forms, - MidasLib, - fClientForm in 'fClientForm.pas' {ClientForm}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDAClientDataModule}, - fLoginForm in 'fLoginForm.pas' {LoginForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.CreateForm(TClientForm, ClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.res deleted file mode 100644 index a8142cb..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg deleted file mode 100644 index b93564d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/$PRJNAMEGroup.bpg +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = $PRJNAME.exe $PRJNAMEClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -$PRJNAME.exe: $PRJNAME.dpr - $(DCC) - -$PRJNAMEClient.exe: $PRJNAMEClient.dpr - $(DCC) diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.dfm deleted file mode 100644 index e214225..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.dfm +++ /dev/null @@ -1,32 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = True - Left = 439 - Top = 220 - Height = 300 - Width = 300 - object Channel: TRO$CHNCLSNAME - Left = 40 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 40 - Top = 52 - end - object RemoteService: TRORemoteService - Message = Message - Channel = Channel - ServiceName = '$SERVICENAME' - Left = 40 - Top = 96 - end - object DataStreamer: TDABin2DataStreamer - Left = 40 - Top = 140 - end - object RemoteDataAdapter: TDARemoteDataAdapter - Left = 40 - Top = 184 - DataStreamer = DataStreamer - RemoteService = RemoteService - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.pas deleted file mode 100644 index bc371f4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientDataModule.pas +++ /dev/null @@ -1,31 +0,0 @@ -unit fClientDataModule; - -interface - -uses - {vcl:} SysUtils, Classes, DB, DBClient, - {RemObjects:} uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, $CHANNELUNIT, - {Data Abstract:} uDADataTable, uDABin2DataStreamer, uDAInterfaces, - uDADataStreamer, uDARemoteDataAdapter; - -type - TClientDataModule = class(TDataModule) - Message: TRO$MSGCLSNAME; - Channel: TRO$CHNCLSNAME; - RemoteService: TRORemoteService; - DataStreamer: TDABin2DataStreamer; - RemoteDataAdapter: TDARemoteDataAdapter; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.dfm deleted file mode 100644 index e487734..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.dfm +++ /dev/null @@ -1,19 +0,0 @@ -object ClientForm: TClientForm - Left = 372 - Top = 277 - Width = 334 - Height = 207 - Caption = 'Data Abstract Client' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnDestroy = FormDestroy - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.pas deleted file mode 100644 index 6707593..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fClientForm.pas +++ /dev/null @@ -1,74 +0,0 @@ -unit fClientForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, uROBinMessage, - DataAbstract4_Intf, $LIBRARYNAME_Intf; - -type - TClientForm = class(TForm) - procedure FormDestroy(Sender: TObject); - procedure FormShow(Sender: TObject); - private - fLoggedIn: Boolean; - fUserInfo: UserInfo; - fLogin: ILoginService; - protected - function Login: Boolean; - procedure Logout; - public - { Public declarations } - end; - -var - ClientForm: TClientForm; - -implementation - -uses - fLoginForm, fClientDataModule; - -{$R *.dfm} - -procedure TClientForm.FormShow(Sender: TObject); -begin - fLogin := CoLoginService.Create(ClientDataModule.Message, ClientDataModule.Channel); - if not Login then - Application.Terminate; -end; - -procedure TClientForm.FormDestroy(Sender: TObject); -begin - Logout; -end; - -function TClientForm.Login: Boolean; -var - fLoginForm: TLoginForm; -begin - fLoginForm := TLoginForm.Create(nil); - try - FreeAndNil(fUserInfo); - while fLoginForm.ShowModal = mrOk do begin - fLoggedIn := fLogin.Login(fLoginForm.edUsername.Text, - fLoginForm.edPassword.Text, fLoginForm.edDatabaseName.Text, fUserInfo); - Result := fLoggedIn; - if Result then exit; - end; - Result := False; - finally - fLoginForm.Free; - end; -end; - -procedure TClientForm.Logout; -begin - if fLoggedIn then begin - fLogin.Logout(); - fLoggedIn := false; - end; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.dfm deleted file mode 100644 index da1b32d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.dfm +++ /dev/null @@ -1,91 +0,0 @@ -object LoginForm: TLoginForm - Left = 408 - Top = 136 - ActiveControl = edUsername - BorderStyle = bsDialog - Caption = 'Login' - ClientHeight = 128 - ClientWidth = 374 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Tahoma' - Font.Style = [] - OldCreateOrder = False - Position = poMainFormCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 15 - Width = 56 - Height = 13 - Caption = '&User Name:' - FocusControl = edUsername - end - object Label2: TLabel - Left = 8 - Top = 42 - Width = 50 - Height = 13 - Caption = '&Password:' - FocusControl = edPassword - end - object Label3: TLabel - Left = 8 - Top = 69 - Width = 50 - Height = 13 - Caption = '&Database:' - FocusControl = edDatabaseName - end - object edUsername: TEdit - Left = 80 - Top = 12 - Width = 286 - Height = 21 - TabOrder = 0 - OnChange = edPasswordChange - end - object edPassword: TEdit - Left = 80 - Top = 39 - Width = 286 - Height = 21 - PasswordChar = '*' - TabOrder = 1 - OnChange = edPasswordChange - end - object bOk: TButton - Left = 210 - Top = 95 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Caption = 'OK' - ModalResult = 1 - TabOrder = 2 - end - object bCancel: TButton - Left = 291 - Top = 95 - Width = 75 - Height = 25 - Anchors = [akRight, akBottom] - Cancel = True - Caption = 'Cancel' - ModalResult = 2 - TabOrder = 3 - end - object edDatabaseName: TComboBox - Left = 80 - Top = 66 - Width = 286 - Height = 21 - ItemHeight = 13 - TabOrder = 4 - OnChange = edPasswordChange - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.pas deleted file mode 100644 index df186ef..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/_CLIENT/fLoginForm.pas +++ /dev/null @@ -1,47 +0,0 @@ -unit fLoginForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls; - -type - TLoginForm = class(TForm) - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - edUsername: TEdit; - edPassword: TEdit; - edDatabaseName: TComboBox; - bOk: TButton; - bCancel: TButton; - procedure edPasswordChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - procedure ValidateInput; - { Private declarations } - public - { Public declarations } - end; - -implementation - -{$R *.dfm} - -procedure TLoginForm.edPasswordChange(Sender: TObject); -begin - ValidateInput; -end; - -procedure TLoginForm.FormCreate(Sender: TObject); -begin - ValidateInput; -end; - -procedure TLoginForm.ValidateInput; -begin - bOk.Enabled := (edUsername.Text <> '') and (edPassword.Text <> ''); -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.dfm deleted file mode 100644 index 2cdf891..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.dfm +++ /dev/null @@ -1,58 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 362 - Top = 208 - Height = 207 - Width = 352 - object Server: TRO$SRVCLSNAME - Dispatchers = < - item - Name = 'Message' - Message = Message - Enabled = True - end> - Left = 32 - Top = 8 - end - object Message: TRO$MSGCLSNAME - Left = 34 - Top = 56 - end - object ConnectionManager: TDAConnectionManager - MaxPoolSize = 10 - PoolTimeoutSeconds = 60 - PoolBehaviour = pbWait - WaitIntervalSeconds = 1 - Connections = <> - DriverManager = DriverManager - PoolingEnabled = True - Left = 136 - Top = 56 - end - object DriverManager: TDADriverManager - DriverDirectory = '%SYSTEM%\' - AutoLoad = False - TraceActive = False - TraceFlags = [] - Left = 136 - Top = 10 - end - object ADODriver: TDAADODriver - Left = 256 - Top = 8 - end - object IBXDriver: TDAIBXDriver - Left = 256 - Top = 56 - end - object DataDictionary: TDADataDictionary - Fields = <> - Left = 32 - Top = 104 - end - object SessionManager: TROInMemorySessionManager - Left = 136 - Top = 104 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.pas deleted file mode 100644 index 82fe052..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerDataModule.pas +++ /dev/null @@ -1,42 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT, - uDAEngine, uDADriverManager, uDAClasses, uROSessions, - uDAIBXDriver, uDAADODriver; - -type - TServerDataModule = class(TDataModule) - Server: TRO$SRVCLSNAME; - Message: TRO$MSGCLSNAME; - ConnectionManager: TDAConnectionManager; - DriverManager: TDADriverManager; - ADODriver: TDAADODriver; - IBXDriver: TDAIBXDriver; - DataDictionary: TDADataDictionary; - SessionManager: TROInMemorySessionManager; - - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -procedure TServerDataModule.DataModuleCreate(Sender: TObject); -begin - Server.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.dfm deleted file mode 100644 index 4cca111..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'Data Abstract Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton - Left = 8 - Top = 8 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.pas deleted file mode 100644 index 08fb16d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/DA/VCLMULTIDBLOGINEXE/fServerForm.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uDAPoweredByDataAbstractButton; - -type - TServerForm = class(TForm) - DAPoweredByDataAbstractButton1: TDAPoweredByDataAbstractButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.dpr deleted file mode 100644 index 6ba717c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.dpr +++ /dev/null @@ -1,21 +0,0 @@ -library $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - WebBroker, - ApacheApp, - Unit1 in 'Unit1.pas' {WebModule1: TWebModule}; - -{$R *.RES} -{$R RODLFile.RES} // RemObjects: Careful, do not remove! - -exports - apache_module name '$PRJNAME_module'; - -begin - Application.Initialize; - Application.CreateForm(TWebModule1, WebModule1); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Icon.ico deleted file mode 100644 index 064bbbf..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Info.ini deleted file mode 100644 index 6716baa..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Apache 1.0 DSO Server -Description=Apache 1 Shared Module (DSO) Server Project -MinimumVersion=6 -FixedServer=TROWebBrokerServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.dfm deleted file mode 100644 index 620a86e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object WebModule1: TWebModule1 - OldCreateOrder = False - Actions = <> - Left = 522 - Top = 415 - Height = 308 - Width = 462 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 16 - end - object ROServer: TRO$SRVCLSNAME - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 56 - Top = 8 - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.pas deleted file mode 100644 index 9360375..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache/Unit1.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit Unit1; - -interface - -uses - SysUtils, Classes, HTTPApp, uROClient, - uROClientIntf, $MESSAGEUNIT, uROServer, $SERVERUNIT; - -type - TWebModule1 = class(TWebModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - private - - public - - end; - -var - WebModule1: TWebModule1; - -implementation - -{$R *.DFM} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.dpr deleted file mode 100644 index 607fd92..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.dpr +++ /dev/null @@ -1,21 +0,0 @@ -library $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - WebBroker, - ApacheTwoApp, - Unit1 in 'Unit1.pas' {WebModule1: TWebModule}; - -{$R *.RES} -{$R RODLFile.RES} // RemObjects: Careful, do not remove! - -exports - apache_module name '$PRJNAME_module'; - -begin - Application.Initialize; - Application.CreateForm(TWebModule1, WebModule1); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Icon.ico deleted file mode 100644 index 064bbbf..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Info.ini deleted file mode 100644 index 0faac96..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Apache 2.0 DSO Server -Description=Apache 2 Shared Module (DSO) Server Project -MinimumVersion=7 -FixedServer=TROWebBrokerServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.dfm deleted file mode 100644 index 620a86e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object WebModule1: TWebModule1 - OldCreateOrder = False - Actions = <> - Left = 522 - Top = 415 - Height = 308 - Width = 462 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 16 - end - object ROServer: TRO$SRVCLSNAME - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 56 - Top = 8 - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.pas deleted file mode 100644 index 9360375..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Apache2/Unit1.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit Unit1; - -interface - -uses - SysUtils, Classes, HTTPApp, uROClient, - uROClientIntf, $MESSAGEUNIT, uROServer, $SERVERUNIT; - -type - TWebModule1 = class(TWebModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - private - - public - - end; - -var - WebModule1: TWebModule1; - -implementation - -{$R *.DFM} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.dpr deleted file mode 100644 index 021a9f3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.dpr +++ /dev/null @@ -1,26 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - uROComboService, - Forms, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}, - fServerForm in 'fServerForm.pas' {ServerForm}; - -{$R *.res} -{$R RODLFile.res} - -begin - if ROStartService('$PRJNAME', '$PRJNAME') then begin - ROService.CreateForm(TServerDataModule, ServerDataModule); - ROService.Run; - Exit; - end; - - Application.Initialize; - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Icon.ico deleted file mode 100644 index 1cd8625..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Info.ini deleted file mode 100644 index 0d315fe..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Combo Service/Standalone -Description=Combo Standalone Server -InvalidServers=TROWebBrokerServer,TROWinMessageServer,TROLocalServer -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.dfm deleted file mode 100644 index 5ff5054..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - OnCreate = DataModuleCreate - Left = 475 - Top = 159 - Height = 189 - Width = 292 - object ROMessage: TRO$MSGCLSNAME - Left = 40 - Top = 8 - end - object ROServer: TRO$SRVCLSNAME - Active = False - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 90 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.pas deleted file mode 100644 index 6ff6fc6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerDataModule.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, uROClient, uROServer, uROIndyTCPServer, - uROPoweredByRemObjectsButton, uROClientIntf, uROClasses, - $MESSAGEUNIT, $SERVERUNIT; - -type - TServerDataModule = class(TDataModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - procedure DataModuleCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -procedure TServerDataModule.DataModuleCreate(Sender: TObject); -begin - ROServer.Active := TRUE; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.dfm deleted file mode 100644 index b594e53..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.dfm +++ /dev/null @@ -1,25 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'RemObjects Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object RoPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.pas deleted file mode 100644 index 131f03d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/COMBOEXE/fServerForm.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, uROClasses; - -type - TServerForm = class(TForm) - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.dpr deleted file mode 100644 index 1d8214d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.dpr +++ /dev/null @@ -1,31 +0,0 @@ -program $PRJNAME; - -{$APPTYPE CONSOLE} -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - uROServer, - $MESSAGEUNIT, - $SERVERUNIT; - -{$R *.res} -{$R RODLFile.res} - -var - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; -begin - Writeln('RemObjects SDK for Delphi - Command Line Server'); - ROMessage := TRO$MSGCLSNAME.Create(nil); - ROServer := TRO$SRVCLSNAME.Create(nil); - TROMessageDispatcher(ROServer.Dispatchers.Add).Message := ROMessage; - try - ROServer.Active := true; - WriteLn('Server is active, press Enter to stop.'); - Readln; - finally - ROServer.Free; - ROMessage.Free; - end; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Icon.ico deleted file mode 100644 index a19ef58..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Info.ini deleted file mode 100644 index 435f675..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/CONSOLE/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Command Line Server -Description=Command Line Based Standalone Server -InvalidServers=TROWebBrokerServer,TROLocalServer -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.dpr deleted file mode 100644 index 96f5739..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.dpr +++ /dev/null @@ -1,19 +0,0 @@ -program $PRJNAME; - -{$APPTYPE CONSOLE} -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - WebBroker, - CGIApp, - Unit1 in 'Unit1.pas' {WebModule1: TWebModule}; - -{$R *.RES} -{$R RODLFile.RES} // RemObjects: Careful, do not remove! - -begin - Application.Initialize; - Application.CreateForm(TWebModule1, WebModule1); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Icon.ico deleted file mode 100644 index a19ef58..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Info.ini deleted file mode 100644 index 1369427..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Info.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Information] -Name=CGI Server -Description=CGI Server Project -FixedServer=TROWebBrokerServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.dfm deleted file mode 100644 index 620a86e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object WebModule1: TWebModule1 - OldCreateOrder = False - Actions = <> - Left = 522 - Top = 415 - Height = 308 - Width = 462 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 16 - end - object ROServer: TRO$SRVCLSNAME - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 56 - Top = 8 - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.pas deleted file mode 100644 index 9360375..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Cgi/Unit1.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit Unit1; - -interface - -uses - SysUtils, Classes, HTTPApp, uROClient, - uROClientIntf, $MESSAGEUNIT, uROServer, $SERVERUNIT; - -type - TWebModule1 = class(TWebModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - private - - public - - end; - -var - WebModule1: TWebModule1; - -implementation - -{$R *.DFM} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.dpr deleted file mode 100644 index c61f188..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - QForms, - fServerForm in 'fServerForm.pas' {ServerForm}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Icon.ico deleted file mode 100644 index 7c265d0..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Info.ini deleted file mode 100644 index 3af167c..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/Info.ini +++ /dev/null @@ -1,6 +0,0 @@ -[Information] -Name=CLX Standalone -Description=CLX-Based Standalone Server -InvalidServers=TROWebBrokerServer,TROWinMessageServer,TRONamedPipeServer,TROWinInetHttpChannel,TROLocalServer -MaximumVersion=7 -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.pas deleted file mode 100644 index 7809ff2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.pas +++ /dev/null @@ -1,28 +0,0 @@ -unit fServerForm; - -interface - -uses - SysUtils, Types, Classes, Variants, - QTypes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT; - -type - TServerForm = class(TForm) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - -{$R *.xfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.xfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.xfm deleted file mode 100644 index f2b5b8d..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/ClxExe/fServerForm.xfm +++ /dev/null @@ -1,26 +0,0 @@ -object ServerForm: TServerForm - Left = 227 - Top = 213 - Width = 403 - Height = 207 - Caption = 'RemObjects Server' - Color = clBackground - PixelsPerInch = 96 - TextHeight = 13 - TextWidth = 6 - object ROMessage: TRO$MSGCLSNAME - Left = 36 - Top = 8 - end - object ROServer: TRO$SRVCLSNAME - Active = False - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 8 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.dpr deleted file mode 100644 index 95eaf93..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.dpr +++ /dev/null @@ -1,34 +0,0 @@ -library $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Windows, - uRODLLServer, // Do not remove! Creates the instance of the DLL server - $MESSAGEUNIT; - -{$R *.RES} -{$R RODLFile.RES} // RemObjects: Careful, do not remove! - - -var $MSGCLSNAME : TRO$MSGCLSNAME; - -procedure ROProc(Reason:integer); -begin - case Reason of - DLL_PROCESS_ATTACH: begin - $MSGCLSNAME := TRO$MSGCLSNAME.Create(); - RegisterMessage($MSGCLSNAME); - end; - - DLL_PROCESS_DETACH: begin - $MSGCLSNAME.Free; - end; - end -end; - -begin - DLLProc:=@ROProc; - ROProc(DLL_PROCESS_ATTACH) -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Icon.ico deleted file mode 100644 index 0de5912..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Info.ini deleted file mode 100644 index 0418cc0..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/DLL/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=DLL Server -Description=RemObjects DLL Server Project -FixedServer=TRODLLServer -FixedChannel=DllChannel \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.dpr deleted file mode 100644 index f50edc5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.dpr +++ /dev/null @@ -1,30 +0,0 @@ -library $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - ActiveX, - ComObj, - WebBroker, - ISAPIApp, - Unit1 in 'Unit1.pas' {WebModule1: TWebModule}; - -{$R *.RES} -{$R RODLFile.RES} // RemObjects: Careful, do not remove! - -{ - Important note: if you have Delphi 6 you should add the unit ISAPIThreadPool to the above list -} - -exports - GetExtensionVersion, - HttpExtensionProc, - TerminateExtension; - -begin - CoInitFlags := COINIT_MULTITHREADED; - Application.Initialize; - Application.CreateForm(TWebModule1, WebModule1); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Icon.ico deleted file mode 100644 index 064bbbf..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Info.ini deleted file mode 100644 index ae18167..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Info.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Information] -Name=ISAPI/NSAPI Server -Description=ISAPI/NSAPI Server Project -FixedServer=TROWebBrokerServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.dfm deleted file mode 100644 index 620a86e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.dfm +++ /dev/null @@ -1,23 +0,0 @@ -object WebModule1: TWebModule1 - OldCreateOrder = False - Actions = <> - Left = 522 - Top = 415 - Height = 308 - Width = 462 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 16 - end - object ROServer: TRO$SRVCLSNAME - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 56 - Top = 8 - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.pas deleted file mode 100644 index 9360375..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Isapi/Unit1.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit Unit1; - -interface - -uses - SysUtils, Classes, HTTPApp, uROClient, - uROClientIntf, $MESSAGEUNIT, uROServer, $SERVERUNIT; - -type - TWebModule1 = class(TWebModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - private - - public - - end; - -var - WebModule1: TWebModule1; - -implementation - -{$R *.DFM} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.dpr deleted file mode 100644 index f5789b6..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.dpr +++ /dev/null @@ -1,20 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - Forms, - fMainForm in 'fMainForm.pas' {Form1}, - fServerDataModule in 'fServerDataModule.pas' {ServerDataModule: TDataModule}, - fClientDataModule in 'fClientDataModule.pas' {ClientDataModule: TDataModule}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.CreateForm(TServerDataModule, ServerDataModule); - Application.CreateForm(TClientDataModule, ClientDataModule); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.res deleted file mode 100644 index dc22e33..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Icon.ico deleted file mode 100644 index 10af842..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Info.ini deleted file mode 100644 index 3015715..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Local Application -Description=CLient and Server in one application -FixedServer=TROLocalServer -AllowClient=0 \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.dfm deleted file mode 100644 index 18de835..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.dfm +++ /dev/null @@ -1,18 +0,0 @@ -object ClientDataModule: TClientDataModule - OldCreateOrder = False - Left = 448 - Top = 111 - Height = 150 - Width = 215 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 8 - end - object ROChannel: TROLocalChannel - ServerLocators = <> - DispatchOptions = [] - ServerChannel = ServerDataModule.ROServer - Left = 24 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.pas deleted file mode 100644 index 430a7dc..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fClientDataModule.pas +++ /dev/null @@ -1,27 +0,0 @@ -unit fClientDataModule; - -interface - -uses - SysUtils, Classes, uROClient, uROLocalChannel, $MESSAGEUNIT; - -type - TClientDataModule = class(TDataModule) - ROMessage: TRO$MSGCLSNAME; - ROChannel: TROLocalChannel; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientDataModule: TClientDataModule; - -implementation - -uses fServerDataModule; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.dfm deleted file mode 100644 index 19a828e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.dfm +++ /dev/null @@ -1,24 +0,0 @@ -object Form1: TForm1 - Left = 192 - Top = 114 - Width = 236 - Height = 99 - Caption = 'Form1' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object ROPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton - Left = 8 - Top = 8 - Width = 212 - Height = 48 - Cursor = crHandPoint - ApplicationType = atClient - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.pas deleted file mode 100644 index 7fee2ee..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fMainForm.pas +++ /dev/null @@ -1,25 +0,0 @@ -unit fMainForm; - -interface - -uses - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, uROPoweredByRemObjectsButton; - -type - TForm1 = class(TForm) - ROPoweredByRemObjectsButton1: TROPoweredByRemObjectsButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.dfm deleted file mode 100644 index 663afc2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.dfm +++ /dev/null @@ -1,22 +0,0 @@ -object ServerDataModule: TServerDataModule - OldCreateOrder = False - Left = 192 - Top = 114 - Height = 150 - Width = 215 - object ROMessage: TRO$MSGCLSNAME - Left = 24 - Top = 8 - end - object ROServer: TROLocalServer - Active = True - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 24 - Top = 56 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.pas deleted file mode 100644 index bec1807..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/LOCAL/fServerDataModule.pas +++ /dev/null @@ -1,26 +0,0 @@ -unit fServerDataModule; - -interface - -uses - SysUtils, Classes, uROClient, uROServer, uROLocalServer, - $MESSAGEUNIT; - -type - TServerDataModule = class(TDataModule) - ROMessage: TRO$MSGCLSNAME; - ROServer: TROLocalServer; - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerDataModule: TServerDataModule; - -implementation - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.dpr deleted file mode 100644 index 6ad6a63..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - SvcMgr, - Unit1 in 'Unit1.pas' {Service1: TService}; - -{$R *.RES} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TService1, Service1); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Icon.ico deleted file mode 100644 index e68604d..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Info.ini deleted file mode 100644 index 9c6511a..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=Windows Service -Description=NT Service Application -InvalidServers=TROWebBrokerServer,TROWinMessageServer,TROLocalServer -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.dfm deleted file mode 100644 index 0099b32..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.dfm +++ /dev/null @@ -1,27 +0,0 @@ -object Service1: TService1 - OldCreateOrder = False - DisplayName = 'Service1' - OnContinue = ServiceContinue - OnPause = ServicePause - OnStart = ServiceStart - OnStop = ServiceStop - Left = 623 - Top = 222 - Height = 150 - Width = 215 - object ROMessage: TRO$MSGCLSNAME - Left = 64 - Top = 88 - end - object ROServer: TRO$SRVCLSNAME - Active = False - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 56 - Top = 8 - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.pas deleted file mode 100644 index 6c01421..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/Service/Unit1.pas +++ /dev/null @@ -1,61 +0,0 @@ -unit Unit1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, - uROClient, uROClientIntf, uROServer, $MESSAGEUNIT, $SERVERUNIT; - -type - TService1 = class(TService) - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - procedure ServiceStart(Sender: TService; var Started: Boolean); - procedure ServiceStop(Sender: TService; var Stopped: Boolean); - procedure ServicePause(Sender: TService; var Paused: Boolean); - procedure ServiceContinue(Sender: TService; var Continued: Boolean); - private - { Private declarations } - public - function GetServiceController: TServiceController; override; - { Public declarations } - end; - -var - Service1: TService1; - -implementation - -{$R *.dfm} - -procedure ServiceController(CtrlCode: DWord); stdcall; -begin - Service1.Controller(CtrlCode); -end; - -function TService1.GetServiceController: TServiceController; -begin - Result := ServiceController; -end; - -procedure TService1.ServiceStart(Sender:TService; var Started:Boolean); -begin - RoServer.Active := true; -end; - -procedure TService1.ServiceStop(Sender:TService; var Stopped:Boolean); -begin - RoServer.Active := false; -end; - -procedure TService1.ServicePause(Sender:TService; var Paused:Boolean); -begin - RoServer.Active := false; -end; - -procedure TService1.ServiceContinue(Sender:TService; var Continued:Boolean); -begin - RoServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.dpr deleted file mode 100644 index 6502fa9..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program $PRJNAME; - -{#ROGEN:$SVCLIBNAME.rodl} // RemObjects: Careful, do not remove! - -uses - uROComInit, - Forms, - fServerForm in 'fServerForm.pas' {ServerForm}; - -{$R *.res} -{$R RODLFile.res} - -begin - Application.Initialize; - Application.CreateForm(TServerForm, ServerForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.res deleted file mode 100644 index 78dee1f..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/$PRJNAME.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Icon.ico b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Icon.ico deleted file mode 100644 index 7c265d0..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Icon.ico and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Info.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Info.ini deleted file mode 100644 index 41db4ba..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/Info.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Information] -Name=VCL Standalone -Description=VCL Based Standalone Server -InvalidServers=TROWebBrokerServer,TROLocalServer -DefaultServer=TROIndyHTTPServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.dfm deleted file mode 100644 index 950b8c4..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.dfm +++ /dev/null @@ -1,39 +0,0 @@ -object ServerForm: TServerForm - Left = 372 - Top = 277 - BorderStyle = bsDialog - Caption = 'RemObjects Server' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Position = poScreenCenter - OldCreateOrder = False - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object ROMessage: TRO$MSGCLSNAME - Left = 36 - Top = 8 - end - object ROServer: TRO$SRVCLSNAME - Active = False - Dispatchers = < - item - Name = 'ROMessage' - Message = ROMessage - Enabled = True - end> - Left = 8 - Top = 8 - end - object RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton - Left = 8 - Top = 8 - Cursor = crHandPoint - end -end diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.pas deleted file mode 100644 index df805df..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/RO/VclExe/fServerForm.pas +++ /dev/null @@ -1,35 +0,0 @@ -unit fServerForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROPoweredByRemObjectsButton, uROClientIntf, uROServer, - $MESSAGEUNIT, $SERVERUNIT; - -type - TServerForm = class(TForm) - RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; - ROMessage: TRO$MSGCLSNAME; - ROServer: TRO$SRVCLSNAME; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - ServerForm: TServerForm; - -implementation - - -{$R *.dfm} - -procedure TServerForm.FormCreate(Sender: TObject); -begin - ROServer.Active := true; -end; - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/TemplateOptions.ini b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/TemplateOptions.ini deleted file mode 100644 index e004833..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/TemplateOptions.ini +++ /dev/null @@ -1,15 +0,0 @@ -[ServerToChannelMapping] -IndyHTTPServer=WinInetHTTPChannel -BPDXHTTPServer=WinInetHTTPChannel -WebBrokerServer=WinInetHTTPChannel -BPDXTCPServer=IndyTCPChannel - -[Class Factories] -By Request=TROClassFactory -Singleton Object=TROSingletonClassFactory -Pooled Object=TROPooledClassFactory -Per Client=TROPerCLientClassFactory - -[ComponentToUnitMapping] -EmailChannel=uROIndyEmailChannel -EmailServer=uROIndyEmailServer \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEClient.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEClient.bdsproj deleted file mode 100644 index b543c93..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEClient.bdsproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - $PRJNAMEClient.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - - - - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEGroup.bdsgroup b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEGroup.bdsgroup deleted file mode 100644 index 2fdeb13..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Client/$PRJNAMEGroup.bdsgroup +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - $PRJNAME.bdsproj - $PRJNAMEClient.bdsproj - $PRJNAME.exe $PRJNAMEClient.exe - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Server/$PRJNAME.bdsproj b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Server/$PRJNAME.bdsproj deleted file mode 100644 index 719e2c5..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_BDS/Server/$PRJNAME.bdsproj +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - $PRJNAME.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - - - 0 - 0 - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - - - - - - - - - False - - - - - - False - - - - - - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1033 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.dpr b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.dpr deleted file mode 100644 index 980806e..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program $PRJNAMEClient; - -uses - uROComInit, - Forms, - fClientForm in 'fClientForm.pas' {ClientForm}; - -{$R *.res} - -begin - Application.Initialize; - Application.CreateForm(TClientForm, ClientForm); - Application.Run; -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.res b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.res deleted file mode 100644 index 0f940ed..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEClient.res and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEGroup.bpg b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEGroup.bpg deleted file mode 100644 index dbb4e14..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/$PRJNAMEGroup.bpg +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------------------------------------ -VERSION = BWS.01 -#------------------------------------------------------------------------------ -!ifndef ROOT -ROOT = $(MAKEDIR)\.. -!endif -#------------------------------------------------------------------------------ -MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** -DCC = $(ROOT)\bin\dcc32.exe $** -BRCC = $(ROOT)\bin\brcc32.exe $** -#------------------------------------------------------------------------------ -PROJECTS = $PRJNAME.exe $PRJNAMEClient.exe -#------------------------------------------------------------------------------ -default: $(PROJECTS) -#------------------------------------------------------------------------------ - -$PRJNAME.exe: $PRJNAME.dpr - $(DCC) - -$PRJNAMEClient.exe: $PRJNAMEClient.dpr - $(DCC) \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.dfm b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.dfm deleted file mode 100644 index cc667e3..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.dfm +++ /dev/null @@ -1,34 +0,0 @@ -object ClientForm: TClientForm - Left = 372 - Top = 277 - Width = 400 - Height = 340 - Caption = 'RemObjects Client' - ClientHeight = 64 - ClientWidth = 228 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - Position = poScreenCenter - TextHeight = 14 - object ROMessage: TRO$MSGCLSNAME - Left = 36 - Top = 8 - end - object ROChannel: TRO$CHNCLSNAME - Left = 8 - Top = 8 - end - object RORemoteService: TRORemoteService - Message = ROMessage - Channel = ROChannel - ServiceName = '$SVCNAME' - Left = 64 - Top = 8 - end -end \ No newline at end of file diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.pas b/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.pas deleted file mode 100644 index f4c3c9b..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK for Delphi/Templates/_Client/fClientForm.pas +++ /dev/null @@ -1,38 +0,0 @@ -unit fClientForm; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, - uROClient, uROClientIntf, uRORemoteService, $MESSAGEUNIT, $CHANNELUNIT; - -type - TClientForm = class(TForm) - ROMessage: TRO$MSGCLSNAME; - ROChannel: TRO$CHNCLSNAME; - RORemoteService: TRORemoteService; - private - { Private declarations } - public - { Public declarations } - end; - -var - ClientForm: TClientForm; - -implementation - -{ - The unit $SVCLIBNAME_Intf.pas will be generated by the RemObjects preprocessor the first time you - compile your server application. Make sure to do that before trying to compile the client. - - To invoke your server simply typecast your server to the name of the service interface like this: - - (RORemoteService as I$SVCNAME).Sum(1,2) -} - -uses $SVCLIBNAME_Intf; - -{$R *.dfm} - -end. diff --git a/internal/5.0.23.613/1/RemObjects SDK for Delphi/ro.png b/internal/5.0.23.613/1/RemObjects SDK for Delphi/ro.png deleted file mode 100644 index a7dc1ae..0000000 Binary files a/internal/5.0.23.613/1/RemObjects SDK for Delphi/ro.png and /dev/null differ diff --git a/internal/5.0.23.613/1/RemObjects SDK.lic b/internal/5.0.23.613/1/RemObjects SDK.lic deleted file mode 100644 index 68067c2..0000000 --- a/internal/5.0.23.613/1/RemObjects SDK.lic +++ /dev/null @@ -1,18 +0,0 @@ -5ce53f022867e5d56cc331f9f186c199f3d4588c56541259d200975912c94810523008cc67e2741850225ce8924a6f9e7d91f58a6e3bdb429ffac287d334278986e7d9fa9df43d5e5c4e9d85c3d070b80fdc8c9f7bddd9da34638713f27cfd921dc3e190c93f389220a3a66da45c0e88c91e28df8bfe25c25aebd7e17de3d850c5a429564faf4cb3c3480fe2f9f5c59eef3036738e7be3fe548b4c28cf04ae75e5f7fa56d1ef8e3f23e63112af7376081634e9d17e1614e02b8f8be6fcfab7a379b4b9c16c2faafe179c2493c0f56bf89f4a2260976b235d02b97bf5780d24c86fe5b13147dd1e853358e88d67e474d86889b17bcfc7d6a7cb578a68f0a705aa -3e97b58beb06dc99380e45a29f75f6f20c5395ec2f04bc4ecf712be3df639a72b685c942a9a9c1bcd3c7ac318a5a92cf3ee527c6bdbabb70035e15a47edb9ead -Name=Marla Criss -Email=admin@servag.info -UserId={437B006F-CF40-4815-8EC6-C2FD5FCF0D31} -Company=null -LicenseType=Full -ProductName=RemObjects SDK -Version=5 -AllowBeta=0 -Trial=0 -SubscriptionEndDate=2008-6-26 -LicenseFileEndDate=2007-8-28 -StartDate=2007-8-25 -EndDate=5000-1-1 -P1=10374690417557219222 -P2=12680521785665210524 -P3=3493594112